AGNUS DEI (God's Lamb) for CsoundAV and MIDI Slider Bank (2004) Arthur B. Hunkins He shall feed his flock like a shepherd: he shall gather together the lambs with his arm, and shall take them up in his bosom, and he himself shall carry them that are with young. Isaiah 40:11 The passage of Scripture he had been reading was this: "He was led as a sheep to the slaughter. And as a lamb is silent before the shearers, he did not open his mouth." The eunuch asked Philip, "Was Isaiah talking about himself or someone else?" So Philip began with this same Scripture and then used many others to tell him the Good News about Jesus. Acts 8:32, 34 No temple could be seen in the city, for the Lord God Almighty and the Lamb are its temple. And the city has no need of sun or moon, for the glory of God illuminates the city, and the Lamb is its light. And the angel showed me a pure river with the water of life, clear as crystal, flowing from the throne of God and the Lamb. No longer will anything be cursed. For the throne of God and of the Lamb will be there, and his servants will worship him. And they will see his face. Revelation 21:22-23; 22:1, 3-4 To the Lamb GENERAL AGNUS DEI is a meditative solo performance piece for Windows-based computer running CsoundAV. It requires, in addition, a MIDI slider or rotary-pot bank of at least six controllers (preferably 7-8). The piece exists in three basic monaural versions - all indicated by "agnus" in their file name and differing only in their number of bell sonorities (tones): "agnus2.csd" features two sustained tones/bells; "agnus3.csd" comprises three tones/ bells; and "agnus4.csd" is the sonorous four-bell version. The three- and four-bell versions are preferred, due to their fuller textures. Agnus2.csd requires a minimum of six MIDI sliders (three per tone/bell); it is normally performed on a bank of 8 MIDI sliders/pots. Agnus3.csd necessitates nine sliders; a bank of 12 (16) sliders (or two banks of eight) are preferable. Agnus4.csd requires at least 12 controllers on a single bank of 12 (16) slider/pots (or two banks of eight). In short, a set of three consecutively-numbered controllers is required for each bell/tone, while a full complement of controllers is preferable to the minimum configuration. A special feature of the three-bell agnus3.csd makes it playable on a single bank of eight sliders plus at least one additional pot/slider. (Such additional controllers are often found on MIDI keyboards as supplemental volume, modulation or data entry sliders.) An on-screen box labeled "Bell3 Opt 3rd Cont #" lets you set this additional controller to determine the bell components of bell three. When this number is set to anything other than its (out-of-range) default 128, it overrides the usual third controller number for bell three. There are stereo variants for each of the mono versions: "stagnus2.csd," "stagnus3.csd" and "stagnus4.csd." These add random stereo placement to the tone/bell sonorities, but otherwise are identical to their monaural counterparts. MIDI hardware requirements are the same for mono and stereo versions. Via MIDI sliders, the performer controls pitch, the bell components of the sonority (if any), and volume (including fade in and out). Each bell/tone has three controls (which are assigned consecutive controller numbers): first is volume; second, pitch; and third, bell components (sidebands). The pure tone transforms into a bell sonority as follows: when the third (bell component) slider is raised above zero, a single sideband (pitch) rises from the tone, another falls from the tone. As the slider value increases, the sidebands symmetrically increase their distance from the main tone. The result is a three-frequency bell tone with stable center pitch (the original tone) and opposite-moving sidebands around it. In addition (and optionally), there are controls to glide pitch in the same direction both for pairs of bells/tones, and for the entire set. (These are the "extra" controls that create the "full complement" vs. the "minimum configuration." As noted above, it is highly recommended that these additional controls be made part of the realization.) Agnus2.csd has only a master control that moves all bells together. Agnus3.csd has a master plus a control that moves bells1-2 together. Agnus4.csd has controls pairing bells1-2 and 3-4, as well as a master. These controllers can create the feeling of quite complex single bells. 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 Agnus Dei 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 until all the bells/ tones have become equally established (see below). After that, the sound can begin to move slowly and evenly through space. It continues like this throughout, never settling in one spot - and concluding wherever it finds itself. Minimum duration is 8 minutes for agnus2.csd. The fuller-textured agnus3.csd and agnus4.csd should take longer. (There is no specified maximum length, though the .csd file can run for a total of 60 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. Be aware that many ASIO drivers do not permit sr (sample rate) to be less than 44100 (here it is 22050). If this is your situation, try editing the values of sr and kr (they too are at the top of your .csd file) to 44100 and 4410 respectively - knowing that this will increase the load on your system. 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). PRE-PERFORMANCE The set of eight or more sliders or rotary pots 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). The performance files assume 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; this is true when controller numbers for the slider banks are consecutive. (The performer must consult the device documentation to learn the multiple numbering sequences that are available as "presets." Controller numbers for banks are often consecutive, in at least some preset option.) The default configuration in the on-screen performance window incorporates consecutive numbering; its layout is appropriate to banks of 8, 12 and 16 controllers. In any case, groups of at least three controllers (one group per bell/tone) must be found that are numbered consecutively. In the unlikely case that no such configuration is available, you'll need to program the controller numbers manually on your controller bank. (Also be sure that they all transmit on channel 1.) When modifying the numbers in the performance window, make sure that any unused controllers (the optional paired or master frequency sliders) do not conflict with controller numbers in use. 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.) Each version has an option as to how to preset the "Random Freq" variable. This variable adds a small amount of random flutter to the pitch of all bells/tones, giving a luminescent quality to the sound. The default value for this variable, found in an on-screen box, is zero; at this setting, the MIDI controller value overrides the on-screen box. If the on-screen box contains anything but zero, the box overrides any MIDI controller value. Overall amplitude is user-determined and preset; the external master level remains unchanged throughout the composition. Each bell has the same dynamic range. Performance volume should never exceed a robust moderate level. PERFORMANCE This composition is a particularly "open" one, with few specific instructions for realization. These few are: 1) Prior to bringing up the performance window, all controller pots are turned to zero. The Random Freq pot or on-screen box is then moved to its preset position, where it remains throughout the performance. Volume controls (first sliders) all start at zero, as do paired and master frequency sliders. Individual bell frequencies (second slider) and bell components (third slider) may or may not be set to zero. (Zero is one good option.) If they are not at zero, they *must be moved* to another position *after the performance window is opened*. (The pots output their lowest value - as though they were turned all the way down - until they are changed!) 2) Move only one control at a time - slowly and evenly. 3) In (st)agnus2.csd, tones/bells once entered, remain sounding for the entire performance. In (st)agnus3 and 4, once all the voices have entered, one at a time *may* drop out, shortly to reenter. 4) The initial entries of tones/bells are all similar, and receive similar emphasis. For example, if the first instrument enters as a single tone which then moves upward in pitch, gets louder and finally adds a small amount of sidebands, the other instruments should basically do likewise - with equal time and emphasis devoted to each in turn. New instruments enter on a pitch not currently sounding. 5) The overall texture evolves slowly and evenly without notable climax. (Any climax is optional.) One possible structural plan, since pitches begin in a low tessitura, is for the overall pitch movement first to be upward, followed by downward - and ending either part way or all the way down (in either case following a brief period of pitch stabilization). 6) At the end, the voices fade out one by one, with the performance ending after the last voice is gone. If the performance begins with simple tones, you may also wish to end this way. 7) Strive for sonorities that blend, and do not clash or beat strongly. "Euphonious" is the operative term. 8) Practice! Become thoroughly familiar with the effect of each slider or pot. Be particularly aware of how the "expanding" sidebands work, and how to move naturally into new "harmonious" sonorities. Don't forget to use the volume controls to adjust balance and change the voice focus. ADDENDUM: "K" VERSIONS THAT USE A KORG KAOSS PAD AS SECOND MIDI CONTROLLER Agnus4-2K, agnus4-3K and agnus4-4K are three additional versions that duplicate agnus2, agnus3 and agnus4 - except that they use a Korg KAOSS Pad to create quad movement/placement from the originally mono signal. (They thus require an ASIO driver - see possible problem above.) Either a KAOSS Pad 1 or 2 will work (and in exactly the same way). The KAOSS Pad is a control surface that consists of two contiguous MIDI controllers, one representing the x coordinate, the other the y. The Pad's default controller numbers 12 and 13 are also default for these versions. (Be sure to configure the Pad to transmit *only* x- and y-axis touch panel messages - on channel 1.) The first controller number is preset in the on- screen window prior to performance. IMPORTANT: As part of initial setup (once the run has started), touch the pad in the *topmost center position*; this will place the initial sound front-and-center. The Pad is performed either by dragging a finger over the surface, or by simply touching the pad in different positions. In the latter case especially, the Pan Lag Factor control is crucial. This control is both preset on-screen to an initial desired value, and varied during performance. Activity on the KAOSS Pad can be intermittent; the only requirement is that perceived spatial movement not be sudden or jerky. Also, the KAOSS Pad can optionally be assigned to a second performer. Since Csound currently only permits a single MIDI input, the two MIDI outputs must be combined into one. Three methods are available: 1) The simplest method is available whenever one of the MIDI devices has a MIDI Thru or MIDI In connector that will accept input from the other device. For this to work, the receiving device must also be capable of *MIDI merge*; some devices have this capability, others don't. Unfortunately, neither of the KAOSS models do, so this feature must be offered by your *other* MIDI device. 2) This method is the most universal, and will work as long as you can get both MIDI signals into your computer. Download (http://www.midiox.com) and install both MidiOx and MidiYoke. These utilities are free, and simple to use. They combine two or more MIDI data streams and present them to Csound as a single MIDI input. (MidiOx does many other fascinating things too - for example, enabling the *computer keyboard* to generate MIDI data.) 3) The third option applies only when both devices use 5-pin DIN (traditional MIDI) connectors and cables: a simple, self-powered MIDI Merge/ Thru box with at least two MIDI inputs and one MIDI output. A few of these diverse boxes even adapt MIDI output to USB. Finally, *any* MIDI device that comprises two continuous controllers (with successive numbers), could substitute for the KAOSS Pad in these versions, if necessary. This could be as simple as an additional pair of sliders or rotary pots on the primary MIDI device. An *X/Y (MIDI) controller* should also work, though with less flexibility than the Pad. Whatever the control mechanism, be sure that sound starts in the front-and-center position, and moves smoothly throughout performance. KAOSS PAD SUBSTITUTES - THE "G" VERSIONS Agnus4-2G, agnus4-3G and agnus4-4G are basically "poor person's KAOSS Pad substitutes" that duplicate the KAOSS Pad versions described above. They should be selected only when a KAOSS Pad is unavailable and quad panning is desired. Suffice it to say that you will find the KAOSS Pad versions to be far more user-friendly and intuitive. The "G" stands for "graphics," and these versions are performable by any graphics pad, preferably in "pen mode." They will also work, however, in "mouse mode," or indeed (when pressed into service) with *any mouse or touchpad* as spatial controller. (Since none of these controllers involve MIDI, MidiOx and MidiYoke are not required.) The following recommendations/ instructions apply: 1) The "G" versions require CsoundAV v0.0432 (Feb 25 2005) or later. 2) Screen resolution must be set to 640x480 (VGA). 3) In Taskbar Properties, uncheck "Always on top" (and "Auto hide"). (Right-click on taskbar, choose "Properties.") 4) With graphics pad, "Pen mode" is recommended (and full-screen window). 5) All on-screen controls are *preset* in these versions. Only event "Start(/Stop)" boxes/buttons are clicked during actual performance. 6) When using a pen, set the tip feel/response to as firm as possible. This will help avoid unwanted clicks on the numerous controls present in the performance window. For the same reason, use a very soft touch when tapping the window (in contrast to dragging) during performance. 7) Avoid the extreme top and bottom of the performance window: a) the top title bar is inactive (watch out where you enter and leave it), and you can easily drag/reposition the window; b) the bottom edge is likewise (dangerously) draggable, so you can inadvertently either resize the window or minimize it (by clicking on what's below). Any of these occurrences can be fairly disastrous. 7) Before beginning, set the pointer at the top of screen, center (but not in the title bar!) This will produce initial sound front-and-center. 8) In performance, be careful to move only the pointing device (pen, mouse, touchpad) you intend. Remember that all these devices are simultaneously active. 9) In other respects, proceed as for the KAOSS Pad versions.