HOSANNA IN EXCELSIS for CsoundAV (2003) Arthur B. Hunkins Sanctus, Sanctus, Sanctus Dominum Deus Sabaoth. Pleni sunt caeli et terra gloria tua. Hosanna in excelsis. Benedictus qui venit in nomini Domini. Hosanna in excelsis. The Ordinary of the Mass In the year Uzziah died, I saw the Lord. He was sitting on a lofty throne, and the train of his robe filled the Temple. Hovering around him were mighty seraphim, each with six wings. With two wings they covered their faces, with two they covered their feet, and with the remaining two they flew. In a great chorus they sang, "Holy, holy, holy is the Lord Almighty! The whole earth is filled with his glory!" Isaiah 6:1-3 For Kay, on the blessed occasion of our 10th wedding anniversary. So much of God's love comes to me through you. GENERAL HOSANNA IN EXCELSIS is a meditative yet joyful solo performance piece for Windows-based computer running CsoundAV. It exists in three basic monaural versions - all indicated by "hosanna" in their file name and differing only in their performance method: "hosanna.csd" requires no MIDI hardware; "hosannam.csd" requires an external bank of eight MIDI controllers (sliders or rotary knobs); "hosannam+.csd" necessitates a bank of eight controllers plus one or two additional MIDI sliders or knobs. There are stereo variants for each of these versions: "sthosanna.csd," "sthosannam.csd" and "sthosannam+.csd." They add random stereo placement (and rudimentary movement) to the bell sequences, but otherwise are identical to their monaural counterparts. The performance instrument is a set of six bells. Six of the performance controls gate these bells on and off, and/or vary their individual volume. In addition, the performer manipulates the bells' "decays" (apparent overlaps between repetitions), overall "tempo" (repetition rate), overall volume as well as overall modulation "index" (combination of random amplitude and tremulous quality). A minimum of four of the bells must take part in the realization. The computer required for performance must be running a version of Windows - 95B or higher. (With Windows 95 you must be sure that OpenGL has been installed.) The program that executes the selected .csd file is Gabriel Maldonado's CsoundAV, v0.043 or higher. Prior to performance, be sure to close as many programs running in your Windows taskbar as possible. This will minimize any chance of audio breakup. (Depending on your system, there is a good possibility of disaster otherwise.) The monaural versions of Hosanna in excelsis lend themselves well to multi- speaker sound diffusion. The stereo versions do not. In diffused performances, sound placement begins front and center, and remains there at least until the beginning of the third bell sequence. After that, the sound can begin to move slowly and evenly through space. It continues like this throughout, never settling in one spot - until all the bells reach maximum (sustained) decay. By this point (toward the end of the piece - see below), placement has made its way back to front and center, where it remains for the rest of the performance. Duration is a minimum of 5 minutes. SETUP The performer downloads and installs the current version of Maldonado's CsoundAV from http://www.csounds.com/csoundav . The file to download is named CsoundAV_Win.exe . To run CsoundAV (and this composition), click on the program icon, and on the popup window that appears, type the name of the desired .csd performance file into the Orc field. Alternately, drag the .csd file onto the window. Click OK, and the performance window for the piece will appear. When you run any performance file, you will be queried (via pop-up window) to specify a Portaudio OUT Device number (-+P#), and if MIDI controllers are involved, a MIDI In Device number (-+K#). Once you determine appropriate device ID's for your setup, you may add them to your CsOptions flags (as, for example, -+K0 and -+P8). (These flags are located toward the beginning of the .csd text file. You can edit them in any text editor, including Windows' Notepad.) Doing so will thereafter happily bypass the device selection process. For any problems, please consult Maldonado's CsoundAV Manual, also downloadable at http://www.csounds.com. This HTML manual comes as a zipped archive named CsoundAV_Manual.zip. See particularly its sections entitled Special Command Line Flags and Command Line Hints. (Command line flags are the same as CsOptions flags.) DIRECTSOUND If your system software includes *DirectSound*, slider/pot response time (latency) will improve substantially. DirectSound is present by default in systems running Windows 98SE and above. You also need a DirectSound driver for your soundcard. Any recently-manufactured stereo soundcard will install DirectSound drivers; "legacy" (ISA) soundcards will not. DirectSound drivers (or multichannel ASIO drivers - see below) may be available on your system. On the Portaudio OUT Device Select popup window, you'll see any and all DirectSound and ASIO (in addition to MME) drivers listed. Specify one of the DirectSound (or ASIO) numbers; if it works, add this number to your -+P flag (as, for example, -+P5). DirectSound and ASIO are *particularly* sensitive to any programs running in the background, including those in the taskbar; be sure to close as many as possible. Please note that a native *ASIO* driver is required for quad versions. Hint: If you are still having a problem getting clean, click-free sound, run a *MIDI* version of this work (it is less demanding on system resources). Also, at the slight sacrifice of some high frequency content, you can try halving the values for sr and ksmps (also at the top of your .csd file) to 22050 and 10 respectively. (You cannot use ASIO drivers at these rates.) Otherwise, you may need a faster computer. PERFORMANCE--GENERALITIES All versions require that a Fundamental Frequency be preset onscreen (default=80Hz). All bell tones have base frequencies that are odd harmonics of this fundamental frequency. (The harmonics are 1, 3, 5, 7, 9 and 11 - in ascending order.) For (st)hosanna.csd, most on-screen defaults besides Fundamental Frequency may be kept as presets. Possible changes to make: individual bell Volumes, which may initially be set as low as three but not higher than five; Overall Volume (a level of ten is suggested, however); and Random Index (suggested level of zero, but may be set as high as two). For (st)hosannam.csd and (st)hosannam+.csd, individual Volume pots for the bells are preset to zero (they serve also as off/on controls); so are pots 7 (Decay Level) and 8 (Random Index - though again this may optionally be initially set as high as 20%), and Overall Tempo (if used). The Overall Volume control should be set either to maximum or some substantial level. (A special word about *how* to preset these controls is given below.) Only a single control is to be varied at a time. (A single exception to this principle is listed below.) Overall loudness is moderate. Master level remains unchanged throughout the composition. As the number of active bells increases, and as their Decay Levels (and individual Volumes) are raised via the sliders/pots, the perceived loudness grows naturally. When master level is appropriately set, the "peak" detailed below (with maximum "decay" and greatest individual volume) should sound only moderately loud. All six bells have an individual Volume control. Bells in (st)hosanna.csd have an on/off checkbox as well, as its Volume controls lack a zero (off) position. For other versions, the external hardware slider/pot doubles as an on/off toggle. Note that "off/on" refers to bell *sequences* - repeating bell tones - rather than individual bell strikes. Each ascending bell is higher pitched and has a slightly faster basic repetition rate. All repetitions are a bit randomized in timing. Finally, be sure to limit changes in individual bell Volume to 2 (or 20%) per strike for that bell. (The only exception to this principle is when gating a bell sequence on or off with an external slider/pot.) The Decay Level control (slider 7 on external hardware) determines each bell strike's decay rate: at minimum decay, the bell dies out completely before it repeats; at higher settings there is a slower fade and more overlap at repetition. On maximum (.8), the bell simply sustains. Since at that setting the tones are not actually repeating, individual Volume controls have no effect (though Overall Volume does); the only way to change individual bell Volume is to gate the bell off (turn external slider/pot to zero), or to move to a lower Decay Level. Overall Tempo can vary the repetition rate of the bells up to double the basic rate. As with changes in individual Volume, Tempo changes only take place with the *next* bell strike. Finally, the Random Index is a combination of random variations in amplitude and modulation index - at independent rates. It imparts a kind of "shimmer" to all sounding bells, and should be used sparingly. Only when many bells are sounding with full (or nearly full) Decay Level, should Random Index even approach maximum. PERFORMANCE--SPECIFICS The performance opens with any single bell - preferably one of the lower pitched ones. A second and third join, each entry a minimum of three strikes after the previous entry (this is true of all initial bell entries). During the first portion of the performance, bells continue to enter and exit, and to change their individual Volume level. Since Volume level varies only with a new strike, changes can be made at any time while the previous note is sounding. The level should change no more than 20% (2) per bell *strike*. This applies to both increases and decreases of level. To these activities is added, for the next part of the performance, a gradual increase in Decay Level. As with individual Volume, make no more than a 20 percent (.2) increase or decrease in level at once. In particular, spread out the overall increase in Decay Level to cover the span (several minutes) of the section. This is particularly important in stereo versions, since Decay Level is directly related to spatial movement of the bell tones; larger discontinuities in immediate changes of level will produce clicks caused by sudden amplitude changes that are related to stereo positioning. (What happens in stereo versions, is that as Decay Level increases, the random stereo bell placements gather increasingly toward center position. At maximum (sustain), all bells are centered.) This second section is a gradual build to "climax." This buildup can be enhanced by gradually moving Overall Tempo faster, increasing individual Volume settings or even Overall Volume, and possibly introducing small or modestly growing amounts of Random Index modulation. The peak arrives when Decay Level reaches maximum (.8) and remains there for a minute or more. During this time, Random Index is gradually added. (It should never be intrusive; if and when the bell texture is later thinned, the Random Index level should be correspondingly reduced.) In addition, Overall Volume may be varied modestly. The final portion of the performance is a gradual fade to nothing. This can be a simple Overall Volume fadeout. The general fade can be preceded by turning off individual (up to three) bells, staggered so that their fades do not significantly overlap (they will be quite long). The Random Index setting can be gradually reduced, even to zero. Also possible is reducing the Decay Level somewhat below maximum (down 25 percent or to .6 only!) so as to be able to manipulate individual Volume levels. Nonetheless, the general fade should appear somewhat as a single unit; the very last sounds should be a minimum of two bells being taken to zero by the Overall Volume control. (If this control is not in use, fade at least the final two bells to nothing concurrently. This final fade is the only exception to the norm of operating *one control only* at a time.) SPECIAL INSTRUCTIONS FOR (ST)HOSANNAM.CSD AND (ST)HOSANNAM+.CSD These versions require external MIDI controller hardware. The set of eight (or more) sliders or rotary pots (continuous controllers) needed by these versions are found on a variety of MIDI devices, including keyboards. Most of these devices are dependent on serial MIDI interfaces, usually found on sound cards. Some more recent MIDI controllers incorporate *USB* interfaces, and so are particularly appropriate for use with laptop computers (which normally lack MIDI interfaces). (St)hosannam+.csd requires one or two *additional* sliders or pots on the external MIDI device - to function as an Overall Volume control and/or Random Index (amplitude and modulation index) control. These extra controls can be part of the larger bank, or separate controllers - such as a data entry, modulation or volume control. The performance file assumes that all required sliders/pots are set to function as continuous controllers, and to output values 0-127 on channel 1 - all of which is usually true by default. In some cases, nothing will have to be programmed into the MIDI device. Assuming that the MIDI bank numbering is consecutive, the default configuration for (st)hosannam.csd will work when the number of the first controller of the bank is entered on the performance screen. (The performer must consult the device documentation to learn the default number of the first controller in the bank.) Multiple numbering sequences are often available as "presets," and controller numbers for banks are often consecutive, in at least some preset option. If no such configuration is available, you'll have to program the eight controllers manually to be consecutive. (Also be sure that they all transmit on channel 1.) All MIDI versions provide for two additional controller configurations that may be rarely encountered. 1) ALL CONTROLLERS USE THE SAME CHANNEL, BUT NOT #1: Locate the line toward the beginning of the performance file - "#define CHAN #1#", and change the channel number to the one you need (from 2-16) with any text editor, such as Notepad. (This revision is active until you change it again.) Note that the "#" characters around the channel number must remain. 2) EACH CONTROL (of a hardware bank of 16) USES A UNIQUE CHANNEL, BUT WITH (channel volume) CONTROLLER #7: For this situation, either the overall Amplitude Controller # box (when applicable) or the Bank 1 1st Controller box on the performance screen includes a special, coded controller number. To enable this layout: For the Amp Controller #, select 128; for Bank 1 1st Controller #, select -1. All controllers will now be consecutive, in the order of their default numbering on screen. Note that the Amp Controller is always first. (Any optional controller, default coded to "#128", is placed last. Since 16 pots/sliders are available, optional controllers are always included here.) For (st)hosannam+.csd, determine the number of the ninth and tenth controllers from the documentation (assuming you wish to use them), and enter them on the performance window as well. The composition's default values are controllers 1 and 7. Controller 1 is the modulation wheel on MIDI keyboards; controller 7 is the keyboard volume control, which sometimes doubles as the data entry slider. An extra slider/pot or two may also be appropriated from the controller bank (if it has more than eight controllers). In this case, the controller numbers can often be determined from that of the first slider/pot in the bank. Finally, for these versions there is an on-screen ".5 sec Bell Onset Delay" button. Check this box if you need a bit more time when turning on a bell tone (with a pot/slider), to reach the desired amplitude level. Slower systems, with lagging system response to MIDI control devices, will probably not need the extra time; low-latency DirectSound drivers, on the other hand, may well require it. Bells are started by bringing a pot up above zero. Since changes of pot setting only take place with the next bell strike, they can easily be made in advance, while the current strike is sounding (this includes returning to zero to turn the bell off). One preparation requirement is essential here: *Before bringing up the performance window for any version requiring additional hardware, turn all eight bank pots/sliders to zero*. Then, for (st)hosannam+.csd, after opening the performance window, *manually move* the Overall Volume (if you are using it) to its initial position. Do the same (again, if you are using it) for the Overall Tempo control, unless it is preset to minimum (which is recommended). Note that these two controls should *literally be moved* before performance begins - even if their position is unchanged. If Overall Volume is *not* moved, there will be no sound when pots/sliders are raised. (The controls output their lowest value - as though they were turned all the way down - until they are moved!) Also, with (st)hosannam+.csd, if you are *not* using Overall Volume, you must check the "No Overall Vol Control" checkbox. Otherwise, you will get no sound. Checking this box autosets overall volume to maximum. THE STEREO VERSIONS - CENTER POSITION BUTTON As mentioned above, the only notable difference between monaural and stereo versions is the latter's random placement of bells in the stereo field. This random placement occurs by *bell sequence* rather than individual bell strike. The opening sequence is automatically placed in the front and center position when the performance file is run. If the performance begins after a period of audio testing, however, you must press the on-screen Center Pos button to insure that the performance begins in this position. The button may also be pressed anywhere during the performance when the following sequence is desired to issue from center position. (This usage would be infrequent.) Note that this button, like the Tempo and Decay controls (as well as individual Volume), only takes effect with the *next bell sequence* - unlike the Overall Volume control (which varies on a moment-by-moment basis). Thus, the Center Pos button can be pressed at any convenient time prior to the next bell sequence - even while the same bell is currently playing.