RUAH (Breath of God) for CsoundAV (2004) A Sound Environment or Live Performance Piece Arthur B. Hunkins The wind blows where it will. You hear the sound it makes but you do not know where it comes from, or where it goes. John 3:8 Then Moses said, "Do let me see your glory!" He answered, "I will make all my beauty pass before you. When my glory passes I will set you in the hollow of the rock and will cover you with my hand until I have passed by. Then I will remove my hand, so that you may see my back; but my face is not to be seen." Matthew 7:3-5 I am the one whose praise echoes on high. I adorn all the earth. I am the breeze that nurtures all things green. I encourage blossoms to flourish with ripening fruits. I am led by the spirit to feed the purest streams. I am the rain coming from the dew that causes the grasses to laugh with the joys of life. I call forth tears, the aroma of holy work. I am the yearning for good. Hildegard of Bingen Quoted by Matthew Fox in One River, Many Wells (p. 180) GENERAL Ruah functions either as a meditative solo performance piece or as soundscape. As sonic environment, it is self-performing; or it may be minimally interacted with, or approached in a more traditional manner. Both outdoor and indoor installations are appropriate, especially spaces involving natural, peaceful surroundings and spiritual/religious intent. The work requires a Windows-based computer running CsoundAV. Ruah exists in monaural and stereo versions; the mono filename is "breath.csd," the stereo, "stbreath.csd." The stereo variant named "stbreath2.csd" differs only in its presentation of the pan controls on the front performance screen (tab). (Selection of one or the other is simply a matter of performer preference.) The only difference between mono and stereo versions is that the stereo version places the sounds in a stereo field. There are, in addition, three special multichannel versions. "Breath4.csd" is a 4-channel quad version, with sound placement in 3-D space. "Breath6.csd" is for 6 channels, each discrete (no panning involved). "Breath8.csd" is identical to "breath6.csd" except that there are two additional channels (speakers). As there are only six sound sources, in this version there will always be at least two momentarily empty channels. Recently (2/06), a parallel set of *MIDI keyboard* versions have been added. Other than performance by keyboard rather than mouse click, these four versions are largely identical to the variants above. Their unique features are described at the end of these instructions. (These versions can be performed on a set of six *buttons* programmed as notes, as well as the most rudimentary MIDI keyboard.) The performance instrument is a set of six bells/wind chimes, for which the specific character is determined by the performer. The instrument may easily take the form of a wind chime simulation. (Since the default settings for this work create *bell* sounds rather than wind chimes, however, these instructions often refer to the sounds simply as bells.) Any number from three to all six bells/chimes may 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.) Ruah does not lend itself to multi-speaker sound diffusion. If multichannel realization is desired, the quad breath4.csd, or the six- and eight-channel breath6.csd/breath8.csd are available. Performance duration is completely open-ended; there is no inherent technical limitation on length. (The piece, once set up and put in motion, can continue practically forever.) The realization can be stopped gracefully at any point. GENERAL 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 kr (also at the top of your .csd file) to 22050 and 2205 respectively. (You cannot use ASIO drivers at these rates.) Otherwise, you may need a faster computer. SPECIFIC SETUP AND PERFORMANCE The on-screen performance window consists of a General tab (the main performance tab) and tabs for each of the six bells. The many settings with default values may all be preset differently, as well as varied during performance. Nearly all setting changes take place with the *following* bell/chime note. This makes it possible to vary individual parameters as soon as the previous affected voice/note has *begun*. You are encouraged to create your own custom bell/chime sets (see further below). The only general guideline is to create sonorities that do not clash with one another, and that are homogeneous. The model is a set of bells (as with the default settings) or wind chimes. (For a custom wind chime variant, see "Creating Your Own Custom Default Version" below.) With presets as desired, begin performance on the General tab *either* by checking individual Start/Stop Bell checkboxes, *or* by clicking on the Stop/Start All Bells box. (You must choose one method or the other.) The performance ends when all boxes are unchecked. If you elect the individual bell performance route, you can (and are encouraged to) stop/start bells freely, to vary the texture. (You can accomplish somewhat the same effect in "All Bells" mode by fading individual Peak Volume levels to zero.) With the Stop/Start All Bells performance option, the Out buttons and Rand Start Time control are relevent. (They are *not* relevent to the individual bell option.) Checking any Out box means that the specified bell is not participating in the All Bells performance. Recall that the minimum number of bells is three. The selection of bells that are "Out" is a preset, permanent one for the performance. Rand Start Time relates to how the participating bells enter in an All Bells performance. This preset specifies the span of time over which the bells initially enter. A setting of zero means they all start together (not especially recommended!) Other settings on the General Tab affect all active bells/chimes. These include Frequency, and various amplitude and tempo controls (including varying degrees of randomization for the latter two). The Frequency control transposes all pitches so they maintain their harmonic relations to one another. (Frequency components of all bells/chimes are expressed in terms of *ratio* to this fundamental Frequency.) Rand Max Amp Fac modifies the relative peak amplitudes of all bells. (Individual bell volumes are set and performed on the individual bell tabs.) A setting of 1 means no modification; 0 means the bell can have an amplitude anywhere from zero up to its individual maximum; .5 means that its random amplitude will be anywhere from half to full individual maximum. Rand Amp Mod is a continual random amplitude variation (again applicable to all bells). Its number represents how much of this effect is applied. Rand Amp Mod creates a subtle wavering quality. (This setting should probably remain constant throughout the performance.) Rand Rep Rate Fac is probably the most confusing control. It modifies the repeat rate of all bells by a certain multiplication factor. A value of one represents no change. A value of four equals a random rate somewhere between a quarter to four times as fast. Likewise, two means half to twice as fast. Keep in mind that the rate changes on a per note basis, so that the timing of repeats is always varying. Stereo and multichannel versions of Ruah include pan or channel selectors for the individual bells/chimes on the General tab. Depending on the version, these controls select stereo or quad pan position, or which channel a bell is placed in. (For 6- and 8-channel versions, each bell is placed in a discrete channel.) These placements may be changed individually (again, change becomes effective at the *following* bell strike), or random locations can be assigned automatically - by checking the Random Pan or Random Channel box. Furthermore, you can freely alternate between "manual" and "random automatic" modes by checking and unchecking the Random box. (It is possible also to "set up" a new manual placement while random selection is on-going, the new manual placement taking effect when Random is unchecked.) The individual bell tab controls are more intuitive, and their effect easily grasped through experimentation. The top two controls determine pitch: the left-most, the basic carrier frequency; the right-most, the modulation frequency that adds tone color or "sidebands/harmonic content" to the bland carrier. The amount and shape of this modulation effect is determined by the Peak Mod Index (0 = no color or sidebands) and the Mod Idx Dur to Dur setting. This latter means "Modulation Index Duration (or Shape) to Note Duration" ratio. A value less than one will create a "tone color shape" that is shorter than the note itself, leaving the basic tone decaying alone at note end. A value of two or more will sustain considerable tone color content throughout the bell strike. The tone color contour duration is expressed as a ratio to note duration. Thus, when you vary note duration, the tone color contour "tracks" these changes. Note finally that there are separate controls for note/strike duration and repetition rate. It is repetition rate that can be randomly varied on the General tab, and such randomization affects all bell repetition rates proportionally. Bell duration, however, can only be modified on its individual tab. The performer is encouraged to make changes to individual bells while the realization is ongoing. Minor changes can be made "on-the-fly" as the bell/chime remains active. More significant changes can be made by silencing the individual bell, making the change(s), then bringing the bell in again. If you are in "manual performance mode" on the General tab, simply uncheck the bell (stopping it), and click it back on after the changes. If you are in "automatic random" mode, fade the bell out with its Peak Amp control, then finally back in likewise. These changes can be made on an infrequent basis (in the context of a soundscape installation), or actively in a more traditional performance setting. Overall amplitude is user-determined and preset; external master levels should basically remain unchanged throughout the performance (unless factors present in a soundscape/installation setting require or suggest a change). Each bell has the same potential maximum level, and multiple amp levels should be comparably set. TEST MODE There are two button controls at the bottom of each bell tab, designed to facilitate parameter selections for the bell. One is a Single Bell pushbutton that delivers a one-shot when clicked. The other is a Repeat Bell checkbox; when checked, it will repeat at the specified Repeat Rate. (This rate is affected by Tempo Mult Fac and Rand Rep Rate Fac settings on the General tab.) These controls let you hear the individual bell without leaving that tab. Be sure to uncheck Repeat Bell when finished testing. THE MULTICHANNEL VERSIONS All multichannel (more than two channel) versions of Ruah require a 4-8 channel soundcard and ASIO drivers. ASIO drivers are distinct both from MME and DirectSound; neither of the latter are multichannel with CsoundAV. (Ruah is not demanding on system resources. All multichannel versions run well on a Pentium-class CPU under Windows ME with as little as 16MB RAM. The key is to minimize all programs running in the background.) Please note that the default Portaudio OUT Device flag, -+P0, will *not* work for these versions. Follow the procedure under "Directsound" above to substitute the appropriate device number. ASIO is normally the last on the Portaudio OUT Device list. Speaker placement for these versions is important. For the quad breath4.csd, speakers should be placed in a square, with listeners inside - ideally in the center, equidistant from all speakers. For breath6.csd and breath8.csd, speakers should be located fairly equidistant from the listener, as well as from adjacent speakers. (Recall that in these two versions, panning is not involved; individual bells/chimes are assigned to discrete speakers.) The physical distribution of speakers can assume a variety of configurations. All speakers should face the listener, or be so situated that every sound reaches the listener similarly. Breath4.csd-- This quad version allows for the 3-D placement of bells/chimes via on-screen miniature x-y joystick matrices, one for each bell. The top of the matrix is the front position. Tapping at any point in the matrix will locate the following sonority at that position in the field. (You can also click and drag the intersecting red lines into position.) The opening quad pan positions may be freely changed. Breath6.csd-- During manual performance of breath6.csd, do not permit *more than two* bells/chimes to be assigned simultaneously to the same channel. (This does not apply to Random Channel mode, of course.) The opening channel assignments may be freely changed. All channels should be equally used throughout the performance. Breath8.csd-- During manual performance of breath8.csd, do not permit more than one bell/chime to be simultaneously situated in the same channel. (This does not apply to Random Channel mode.) The opening channel assignments may be freely changed. The eight channels should be equally employed throughout the performance. CREATING YOUR OWN CUSTOM DEFAULT VERSION For any version of Ruah, you can make a file that contains your own presets ("default version"). Here's how: 1. Using an existing version with the mono, stereo, quad or other multichannel features you want, create your own live, initial setup. 2. Note, and write down settings that are *different* from the preexisting version. Include the setting, the control name and that of the tab. 3. Open the same .csd file in any text editor (such as Windows' Notepad). Look toward the beginning of the file for all the lines that prominently feature "FL" statements. Particularly identify lines beginning "FLsetVal_i". These are the default values that you'll change. Orient yourself to the main tab (FLgroup) sections: "General," "Bell 1," etc. 4. The default value you change is the first number after "FLsetVal_i." This value is associated with the control name in the line immediately above it. Be sure that the number you substitute is within the allowable range; this range is indicated by the first two numbers following the control name in the line above. 5. You can change any control that has a corresponding "FLsetVal_i" line. This includes all controls *except checkboxes (FLbuttons)* - which are necessarily unchecked. (If you need to change these, do so manually prior to performance.) 6. The channel and pan assignments on the General tab can also be changed; most of these are preceded by a blank " " title. (They appear in ascending numerical order. Channels are integer numbers from one up; pan assignments are decimal values between zero and one.) A pan value of zero places sound far left; one, far right. In quad (breath4.csd), far rear is zero, far front is one. The "x" (first) parameter represents left to right, "y" (second) front to rear. 7. When finished, save your text file with a new file name, preferably with .csd extension. 8. Check to see that your new defaults display (and work) properly. If not, go back and revise them. Stchimes.csd is a custom default version based on stbreath.csd. It was created following the above procedure, and is a wind chime simulation. ADDENDUM - THE KEYBOARD VERSIONS (added 2/06) Each of the above-described versions - including stchimes.csd - now has a parallel rendition that bears the "k" suffix (e.g., stchimesk.csd). These keyboard versions are performable on *any* MIDI keyboard - with or without velocity sensitivity. They offer a performance alternative to the mouse click and an additional intuitive means of controlling volume. They require only six keys (or less) - MIDI notes 60 (middle C), 62 (D), 64 (E), 67 (G), 69 (A), and/or 72 (the C an octave above). The versions respond to key velocity; so unless keyboard sensitivity is defeated (or absent), bell volume will be affected by how hard a key is struck. (This is in addition to the other controls on volume.) The "k" versions are also performable on any set of (up to) six *buttons* that are programmed to send note on/off messages for the above pitches. The buttons can either be programmed in latch (momentary contract) or toggle (press on/press off) mode. In the latter case, it is preferable that there be an LED for each button, as a visual prompt of on/off status. In case you are working with a set of buttons that are hard-programmed for notes, but not the *right* notes, it is possible in any keyboard version to modify the MIDI note values for any or all of NOTEs 1-6. (You might also simply prefer to have different keys or buttons play the tones.) To do this, open your selected .csd in any text editor (such as Notepad), and look toward the beginning of the file for a series of lines beginning "#define NOTE1 #60#". Simply substitute your desired MIDI note number(s) within the paired #'s (e.g., replace #60# with #48#) and resave the file. Needless to say, the MIDI note numbers have nothing necessarily to do with the *pitches* produced by the bells; they are simply a means of associating a particular key or button with a particular bell tone (1-6). There is no "automatic random mode" in these versions. For that option, select one of the non-keyboard variants.