BULGARIAN BELLS (2022) for realtime Csound 5 and 6 (PC and Android versions) Arthur B. Hunkins abhunkin@uncg.edu www.arthunkins.com To Petia, Dave, and Alma Alter GENERAL Fundamentally conceived as a framework for live musical accompaniment of a theatrical/dance production, the primary sonic component of this work is a set of Bulgarian bell samples that are looped. It was intended for, and is dedicated to a Bulgarian theatrical troupe (Alma Alter, located in Sofia at the University of Sofia). It can equally serve, however, as musical support for other live or recorded media, incorporating completely different samples. In that respect, it may simply be thought of as a structure to bring alive any sonic content furnished by an inspired performer or group. The framework outputs stereo or two-channel mono audio, running Csound on console computers (PC, Mac or Linux) or Android devices. It accommodates up to 16 mono bell (or other) looped samples, and 6 additional mono "Solo" tracks, as well as a "beat" track - the latter basically to facilitate theatrical timing. (Separate controls handle overall amplitude and reverberation of various elements.) The computer versions require a small MIDI keyboard (or other MIDI device) capable of handling the desired number of samples/tracks. (A minimal MIDI configuration consists of 5 or fewer keys, buttons or pads - velocity-controlled or not.) THE VARIOUS VERSIONS The three differences among these versions are: 1) whether they are designed for console computers, the Csound for Android app, or any of the "alternative" Android apps (see below); 2) how many bell (or other) samples are accommodated; 3) whether (up to) 6 "Solo" samples are included. Their titles indicate these differences. The title's first number indicates the maximum number of bell/other samples the version allows. "Andr" specifies an Android version playable by the Csound for Android app found at play.google.com; "AndrAlt" indicates an Android version playable by one of the "alternative" Android Csound5 or Csound6 apps found at arthunkins.com. The absence of both "Andr" and "AndrAlt" indicates a version for console computer - PC, Mac, Linux. Finally, those with S suffix permit up to 6 "Solo" samples. Note that individual samples can occupy multiple slots - especially the bell/other samples, where different parameters can be associated with the various duplications. Note too that the Solo samples (AA1-6) are demos only, serving as placeholders for more relevant material. They do show however, how the Solos can be synchronized by careful timing and editing. (These samples can be "de-synchonized" by selecting "random start position" in the SSTRTPOS macro - for macros, see further below.) The beat track sample (BeatsCelloPluck) may also be considered a placeholder. SETUP For console versions only: The following edits may be required to adapt your .csd to how your MIDI controller is programmed. (Alternatively, you could program your controller to conform to this composition's defaults.) Changes to the .csd may be made in any text editor, as .csd's are simple text files. Under near the top of the .csd, you'll need to adapt for Linux if you are on other than a Windows or Mac system. (Recall that an opening semicolon comments out a row of code; removing the semicolon implements the row). If you have a single MIDI device, the default -M0 is fine. If your console output includes an "unrecognized MIDI device" error, look for the MIDI device list, and substitute your appropriate device number for the zero in -M0; then rerun Csound. (If you have more than one audio output device, you may need to follow a similar procedure for -odac, appending the appropriate device number - e.g., -odac6. The default is effectively -odac0, the number of your usual stereo device.) Then there are a number of preset variables (likewise listed toward the top of your .csd) that will likely need modification. These are MACROs that begin with "#define". CHAN defines the MIDI Channel your controller is sending on (default is 1, the normal channel). BCTRL indicates the continuous controller (CC) # of your beat track (gSbeat). VCTRL does the same for the overall velocity control of bells, while RCTRL specifies their overall reverb enhancement. For Solo versions you need to specify additional CC #'s (at the end of the #define list): SMASTER for the Solo tracks' master volume, and SOLO - which identifies the CC# for the first of the 6 (successive) Solo tracks. Note that all substitutions you make must be enclosed by #'s. Note too that these MACROs are presets that do not change during performance. Finally, there is a way to demo computer .csd's via Csound's Virtual Keyboard (i.e., without a MIDI controller). Instructions are included toward the beginning of the relevant .csd's. Included is the ability to "perform" the bells on your ASCII keyboard. For all versions: Many other general settings that the performer may modify are included at the top of the "define" list. Included in these settings are a tempo for the beat track (for theatrical synchronization), as well as a switch to record the performance (or not). Explanations of these presets are detailed in the list itself. Of particular interest is the LATCH feature. Although the default button mode for all versions is "momentary", the choice of Latch mode (LATCH) allows for one tap to turn a bell on, and a second tap to turn it off. The AndroidAlt versions, in contrast to Csound for Android, allow only a single finger to contact the device at a time, so Latch mode can get several bells ringing at once. After these general settings come those that pertain to individual bell samples. Each sample is attached to a specific "NOTE", which equates to a given MIDI key, button (PC or Android) or pad. Each NOTE has an identical set of parameters, to be individually adjusted by the performer as needed. Many of these parameters are accompanied by common default values (often "1", referencing basic features of the sample itself). Here they are variously preset for demonstration purposes only. These macros specify, per bell, a specific MIDI note, pitch, volume (level), release time, speed (tempo) and pan position. Special attention should be paid to level (LINIT), which must be adjusted to equalize the perceived loudness of the diverse samples. (When comparing levels, set pan positions (PANx) to identical values, otherwise your perception may be skewed.) THE SAMPLES These bell clips may be freely selected from included .wav's, exchanged with the default demos, or replaced by your own. They were processed by Audacity with Noise Reduction and Amplify - the latter to reach maximum undistorted level. All are approximately 10" in duration. The bell sample names are coded for to reflect various relevant features: the first digit = # of bells in sample; next is a size designation for each individual bell - S=small, M=medium, L=large; a final digit, if present, = order # when there is more than one of a type. AA1-6 are demo "Solo" .wav's (from low to higher pitched). These happen to be a single phrase, here presented with synchronized start (SSTRTPOS=1). The beat clip (gSbeat) may or may not be useful, and could assume many characteristics (as long as it maintains its synchronizing function). The loop must be edited carefully, so that the pattern - normally 4 beats - is clearly heard, yet naturally relates to the rest of the musical texture. (If it doesn't contribute musically, perhaps better to eliminate it.) The demo placeholder, "BeatsCelloPluck"), is recorded at 96 beats per minute - a speed useful as a theatrical click track. Its native tempo is indicated by a value of "1" for BTEMPO. Straying too far from this value will result in a change of timbre and pitch of the sample. (This change can be quite dramatic, if often delightful.) Pitch change (BPITCH), on the other hand, has the expected result. CREATING YOUR OWN SAMPLES Samples must be mono, recorded at 44100Hz in .wav format, and edited for seamless looping. They can be of any length. Simply replace the current defaults with the name of your .wav's in the selected .csd, using any text processor. (They appear in quotes toward the top of the file - designated as gSbells, gSbeat and gSsolos.) All samples are placed in the same folder as the .csd. PERFORMANCE Important: For all versions, set any knobs/sliders to 0 before starting Csound. Each bell sample is played by a key, button or pad. (Pads as velocity sensitive controllers, are not recommended. In addition, sliders are preferable to knobs - especially for Solo tracks, which may need to be raised and lowered together.) The name of the .csd indicates *up to* the # of bells possible in that version. Only the bell samples (or those substituted) are required for performance; knobs/sliders (including the Solo tracks) are optional. For console editions, the bells are assigned individual MIDI notes, which are specified by the user as #define NOTEs. Android versions automatically assign the bells from the first button upwards. Knobs/sliders are assigned continuous controller (CC) #'s. The first knob/slider is for reverb (RCTRL), the second is for velocity control (for non-velocity-controlled bells - VCTRL), the third for the beat track (BCTRL). For Android, in the Solo versions, a master solo (volume) control comes next, followed by the (up to) 6 individual Solo controls. The order is again automatically assigned by Android. For computer versions, users can arrange all controls in any order they wish, except that the (up to) 6 Solo tracks must be consecutive CC#'s. They are specified by their first CC# in SOLO. The master Solo volume is given separately by SMASTER. Also, in the computer Solo .csd's, the CPRINT macro offers a visual feedback option: the user can select a one-line console printout of either note-press status (the default setting), or of the Master and 6 Solo levels. (In non-S .csd's, as well as Android apps that allow for normal console output, note-press status is automatically displayed. This feature may be especially helpful in LATCH mode.) The potential total knobs/sliders is 10. Depending on their MIDI device, users may need to eliminate several of them from their setup, or identify serviceable controls elsewhere on their MIDI device. (On keyboards, an overall volume control, normally CC#7, or modulation wheel, CC#1, are two possibilities. In a similar manner, with Csound for Android, the x-axis of the trackpad acts as a 10th slider [in BB5AndrS.csd].) Various MACROs toward the top of your selected .csd will need to be edited to fine tune your setup. Default values are suggested for many parameters, but some have been adjusted to implement a demo performance, as outlined below. In particular, individual note levels (LINIT) should be set to match those of the group they belong to. (This comment may apply to Solo samples as well.) Be sure when reassigning CC#'s that they don't duplicate each other. Duplication may occur when you are essentially excluding controllers from your setup, e.g., reverb (RCTRL), bell velocity (VCTRL), or beat track (BCTRL). (Note than VCTRL is irrelevant when keys or pads are velocity sensitive, and can readily be removed.) A safe practice is to reassign such an "unneeded" controller to a value you know you will never use. THE INDIVIDUAL .CSD'S Following is a list of characteristics of the various versions and their incorporated demos. All have Solo variants that include up to 6 Solo tracks with their own master control, and the above described options for reverb, bell velocity and beat track. BB5: the most basic version, up to 5 bells, all platforms The demo (designed for computer), uses the five lowest white keys on a small, velocity-sensitive keyboard. All are 2-bell samples. This is the only Android version playable by the Csound for Android app (from play.google.com) due to its limited number of buttons. On the other hand, it is the only Android version the allows more than one finger to touch the device at a time. (This is an important limiting factor for the "alternative" Android apps.) BB8: for up to 8 bells, AndroidAlt only The demo setup implements two sets of 4 bells each. The first set consists of single-bell samples; the second, two-bell. BB8 is particularly appropriate for a 4x2 button matrix (including the "buttons only" option found within Settings of the alternative Csound6b and 6c). Note however, that this latter option does not include a button status readout. BB10: up to 10 bells, computer only Demo setup is for two sets of 5 bells and 2-octave, velocity-sensitive keyboard. It uses the five lowest white keys plus the five an octave higher. The first set consists of single-bell samples; the second, two-bell. BB12: up to 12 bells; AndroidAlt only Like BB8, except demo is for 3 sets of bells. The additional set comprises 3-bell samples, and again is again appropriate for the "buttons only" mode of Csound6b and 6c. (Recall that the latter option does not include the status readout feature.) BB15: identical to BB10, except up to 15 bells (computer only) On a 2-octave keyboard (default setings), the 3 sets of 5 white keys span the complete keyboard. The third (and highest) set of bells consists of 3-bell samples. BB16: identical to BB12, except up to 16 bells (AndroidAlt only) This unique default setup is designed for devices lacking velocity sensitivity (or for when a performer prefers fixed-velocity control). BB16 incorporates the same double set of bells as BB8, but this set is duplicated at a different dynamic level (LINIT); the first 8 are softer, the remaining 8, louder. Like BB8, BB16 is particularly appropriate for Csound6b and 6c, either in regular or "buttons only" mode. A FINAL COMMENT The "one finger down at a time" limitation of the "alternative" Android apps is a significant one. There is a partial solution, however: Csound5a and Csound6c have the curious capability to mix latch and momentary trigger modes! In momentary mode (LATCH=0), when instead of directly lifting your finger, you slide it off the button prior to lifting, the bell remained latched until released by a second tap. This means that multiple buttons can be effectively latched (sustained), as if many fingers were down. Note that for Csound6c, the above "feature" does not work in "button only" mode (accessed through Settings in the app itself). It is limited primarily to when the finger swipe is made along the line of buttons. (Such latching is included in the one-line console printout.) There are no such limitations with Csound5a; all 12 buttons can be swiped in any direction (and thus the only restriction is to 12 bells/other samples). Though the app does not offer a one-line printout, such is not really needed; the buttons remain illuminated when latched (unlike the other Android apps)!