ET ITERUM VENTURUS EST for realtime Csound5 (2006) Arthur B. Hunkins Et iterum venturus est cum gloria... cujus regnat non erit finis. Credo - Ordinary of the Mass Adveniat regnum tuum. Fiat voluntas tua, sicut in coelo et in terra. Lord's Prayer To Huston Smith - who shares his wisdom so graciously GENERAL ET ITERUM VENTURUS EST is a short, meditative, solo performance piece for computer running Csound5. It exists in five versions - all indicated by "Iterum" in their file name. They differ from one another largely in the number of MIDI controller sliders or rotary pots they require. "Iterum16.csd" calls for a bank of 16 controllers, "Iterum4.csd" a bank of four, and "Iterum2+.csd" two controllers plus two notes of a MIDI keyboard or two buttons programmed to send note on/off messages. (At the end of these instructions is a description of how a simple two-button x/y joystick can perform the latter version - particularly in Windows.) Finally, "IterumASC.csd" uses only the ASCII keyboard (no MIDI), and "IterumKeypad.csd" only an external numeric keypad (also no MIDI). All versions are performable in stereo, quad or 8-channel (circular) speaker configurations. Multichannel realizations simply add a dimension of depth to their stereo counterparts. (The composition starts in the forward plane, then moves to a position to the left and right of a centered listener.) Of course, the quad and 8-channel versions require a *multi-channel* sound card or interface. The 8-speaker/channel placement is as follows: stereo pairs (first pair identified as 1 and 2) beginning on the front plane and progressing to the rear. Csound5 is a software sound synthesis program available for all major computer platforms. ET ITERUM VENTURUS EST specifically requires Csound5.02 or above. Free downloads for various systems are found at: http://csound.sourceforge.net. ET ITERUM VENTURUS EST does not lend itself to multi-speaker sound diffusion. Minimum duration is 3.5 minutes. (There is no specified maximum; the performance file can run for a total of 60 minutes.) A parallel set of standalone .exe's is now available - currently for Windows only. They were generated by Rory Walsh's Lettuce frontend for Csound5 (http://www.ear.ie/Lettuce.htm). Available along with the .csd versions in a single, large Iterum.zip download (which includes this file), the parallel .exe filenames begin with "L" and replace the .csd extension with .exe. (For platforms other than Windows, download Iterum.zip and run only the .csd files.) Among the standalone .exe's is an additional version, LIterum.exe. The control mechanism here is clicking on-screen buttons with the mouse. In other respects it is similar to the ASCII keyboard versions. (See special instructions for these versions below.) Whereas Csound 5.02 must be installed to use the above package, another - IterumSA.zip - is intended for use *when Csound5 is not installed*. (IterumSA.zip lacks the .csd versions.) Ease of use in setup and performance is the chief advantage of the standalone .exe's. See run-time "Instructions" windows for further details. GENERAL SETUP You will probably need to edit several flags near the beginning of your performance file. (Do this in any text editor; your .csd is a simple text file.) You must insure that the values of -M0 (your MIDI input device #) and -odac0 (your audio output device #) match your system. Simply substitute a high number, such as -M99 and -odac99, for the zeros and run the file. The performance will immediately abort and display a list of valid device numbers on your system. Once you identify the appropriate numbers, go back and insert them in place of the zeros. (In the standalone .exe versions, all this is done in the performance window: open CsOptions, edit the above values, and observe the output after selecting View Output.) Note that this composition should work well with any driver type; latency is not an issue. If you are having a problem with audio stuttering or clicks, be sure to close as many programs running in the background as you can. As a last resort, you can try reducing the sample rate (see below; note that not all soundcards and native ASIO drivers in Windows allow lower rates). The MIDI keyboard notes required in the two-controller version (unless they are changed - see below) are C4 and D4 - middle C and the white key above. You may wish to set these keys to *toggle* (or latch) mode if this option is available; otherwise, you'll need to hold them down for a period of time. If buttons (or pads) are taking the place of MIDI keys, they should be programmed for notes 60 (C4) and 62 (D4) - "note on" with any velocity greater than zero; "note off" with velocity = 0 (or "note off" message - status = 128). Again, it is preferable to use *toggle* (latch) mode, though momentary contact mode will also work. The toggle option is particularly recommended for buttons with associated LED's (indicating status). In toggle mode, be sure to begin performance with buttons (pads) in the "off" state. SPECIFIC SETUP AND PERFORMANCE Except for the on-screen only and ASCII keyboard versions, performance consists of manipulating MIDI pots/sliders, and in the two-controller version, pressing buttons. The continuous controllers must be numbered consecutively, except in the two-controller version. You need to locate a contiguous group among the presets on your MIDI device (such groupings normally exist); otherwise you'll have to program such a bank on your device. (Also be sure that they all transmit on channel 1.) 16- and 4-controller 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#" (channel 1 is the default). Change the channel number to the one you need (from 2-16) with a text editor. (This revision is active until you change it again.) Note that the "#" characters around the channel number must remain. Standalone .exe's offer selectable channel number *in the performance window*. 2) EACH CONTROL (in a hardware bank of 4 or 16) USES A UNIQUE CHANNEL, BUT WITH (channel volume) CONTROLLER #7: To enable this layout, define CHAN as #0#. All controllers will now be on consecutive channels. (In the 4- controller version, be sure to use channels 1-4 only.) This option too is available in the .exe performance window. Several other variables are also defined toward the beginning of the performance file, or in the performance window of .exe's. CTRL1 specifies the number of the first controller of the 4- 16-controller bank, or the first of two separate controllers (two-controller version); CTRL2 indicates the second of the two separate controllers. (Defaults: CTRL1 = 20; CTRL2 = 21.) For two-controller versions, MIDI1 and MIDI2 specify the two MIDI note numbers. Though the default values are 60 (C4) and 62 (D4), any desired values may be substituted - especially when MIDI controllers have other "notes" more readily available. SRATE equals SampleRATE, for which four options are listed - with higher values producing increasingly better quality. Select the highest rate at which you get click-free, uninterrupted sound. (Default = 48000 SR, the highest option.) In standalone .exe's, SRATE is chosen in the CsOptions window. NCHNLS (default = 2) specifies 2-, 4- or 8-channel/speaker realization. In standalone versions, this value is again selected in the CsOptions window. Two- and 4-controller versions also have variables ATTack and RELease (both default to 5 seconds). These refer to fadein/fadeout times for the pairs of harmonics (handled by individual pots/sliders in 16-controller versions). All attack times are identical; so are release times. Finally, the two-controller versions offer REVERBeration "glide" time, and GLISSando rate. These two fixed values correspond to the last two controllers in the 4- and 16-controller versions. REVERB is the length of time it takes to progress from the highly reverberated opening segment, to a louder, more detailed and less reverberent sound. (In the multichannel versions, the sound also travels from the front plane to the left and right of a centered listener.) Default REVERB "glide" time is 15 seconds. (The "glide" reverses direction at the very end.) GLISSando is the rate of final upward sweep. Its value can vary between .00001 and .00005 (please observe these limits; they correspond to the fader extremes in the 16- and 4-controller versions). Default is .00002, which corresponds roughly to the glide of an octave over 30 seconds. In general, each controller in 16-controller versions varies the amplitude of pairs of consecutive harmonics, the higher of which is odd-numbered and more than twice as strong as the lower (even-numbered) harmonic. Each harmonic is implemented as a sine wave, and is randomly varied both in pitch and amplitude, independently - giving a strong sense of "jitter." There are 14 of these pairs, occupying the first 14 pots/sliders; they produce the first 27 harmonics in ascending controller order. Prior to running a performance file, be sure to turn all pots/sliders to zero, and any buttons/keys off. Overall volume should be set beforehand to achieve a moderately full level at the end of step two below. (For 16- controller versions, this means with pots/sliders 1-15 full on; for 4- controllers, pots/sliders 1 and 3 full on; for two-controllers, pot/slider 1 full on and button 1 pressed (and held) and waiting until the reverb "glide" concludes.) Once the level is set, it remains untouched throughout. All performances follow the following general sequence of events: 1) The tone pairs enter slowly and evenly, one by one - in ascending order. This occurs by raising the first 14 sliders/pots (16-controller version), or just the first slider/pot (4- and two-controller versions) - all to full on. In the latter, the 14 pairs trigger at about equal distances on the slider/ pot, beginning at 1/16 of the way up. Optionally, in 16-controller versions, after the first *eight* sliders/pots have opened, the order of entry *may* vary. However, pot/slider 14 must still be the last to turn on. 2) Following a brief, stabilizing pause, slider/pot 15 (16-controller) or 3 (4-controller) is gradually raised to max; or button/key 1 is pushed (and held if in latch mode) in two-controller versions. This is the "reverb glide." (Its duration, in two-controller versions, is set by the REVERB variable.) The combined sonority grows louder, less intensely reverberated and spreads through stereo space. In multichannel versions it also moves to the mid-plane of the performance space, halfway between front and rear. 3) After a longer, even greater stabilizing pause, the harmonic pairs now begin to disappear - in strict order this time - again one at a time from bottom up. This is achieved by fading out sliders/pots 1-14 (16-controller version), or by gradually turning up slider/pot 2 in 4- and two-controller versions. (Trigger points for fadeouts are spaced identically to the entry points on pot/slider 1.) This process continues to the end, with several interruptions described in the following steps. 4) After fading out the first two sets of harmonics (sliders/pots 1 and 2 in 16-controller versions), an upward glissando begins - which also lasts until the end. This is done by raising the last pot/slider (16- and 4-controller versions) to a level representing the rate of upward glissando desired. (Optionally, this rate may be gradually increased.) In the two-controller version, button/key 2 is pressed (and held if in latch mode). (Glissando rate for this version is set by the GLISS variable.) 5) The "harmonic pair disappearance" sequence resumes. Just prior to reaching the *final* harmonic pair, pause to fade out controller 15 (16- controller version) or 3 (4-controller version), or to release/toggle off button/key 1 (two-controller version). (Button/key 2 remains on.) This will soften and add reverb to the remaining harmonic pair, and (in multichannel versions) move it back to the frontal plane. 6) End by fading out the final harmonic pair. SPECIAL INSTRUCTIONS FOR ON-SCREEN, ASCII KEYBOARD (INCLUDING WIIMOTE) AND KEYPAD VERSIONS LIterum.exe (on-screen mouse-click control), IterumASC.csd/LIterumASC.exe (ASCII keyboard only) and IterumKeypad/LIterumKeypad.exe (external keypad only) share a common characteristic: their control mechanism is a set of non-MIDI buttons or computer keys. In the case of LIterum.exe, the buttons are on-screen, and are numbered 1- 14, corresponding to the ascending pairs of harmonics. Their on/off state is also displayed. Further, a "Rvb Glide" button triggers the beginning of either a general crescendo or diminuendo of all sounding tones (with a concurrent decrease or increase of reverb) - depending on whether the trigger is on or off (again, the state is indicated). "Freq Gliss" marks the onset of the slow upward glissando of all tones toward the end (off resets to base pitch); the state is likewise shown. And finally, a "Reset" button returns all buttons to the off (silent, opening) state. The ASCII keyboard versions parallel LIterum.exe's functional layout. The 14 ascending pairs of harmonics are assigned to ASCII keys 1 through (number) 0, left to right, followed by Q through R. The "Rvb Glide" key is Z, the "Freq Gliss" key is X, and "Reset" is C. The state of the 14 harmonic pair keys is indicated by a schematic on-screen display, each "key-box" indicating "1" when the key is "on", "0" when "off." The three additional keys are not represented, as their state is easily heard. On Windows 2000 and above, both IterumASC.csd and LIterumASC.exe may also be performed with the Nintendo WiiMote as controller. Only the Wiimote's buttons are used. The first seven pairs of harmonics are assigned the WiiMote's Left, Up, Right, Down, A, 1 and 2, respectively; the remaining seven pairs are triggered by the same buttons, but with B held down. "Rvb Glide" is - (Minus); "Freq Gliss" is + (Plus), and "Reset" is Home. Follow this procedure to perform with the WiiMote: Establish a connection between WiiMote and your chosen Bluetooth stack (e.g., BlueSoleil 2.3), then minimize the stack's window; open GlovePIE (a free download from: http:carl.kenner.googlepages.com/glovepie), load the accompanying file Iterum.PIE, run it, then minimize GlovePIE; finally, run IterumASC.csd (from the command line) or LIterumASC.exe. Layout of the Keypad versions is similar to the ASCII: the first 10 ascending harmonic pairs are assigned to keys 1-0 *when the MINUS key is last pressed*; pairs 11-14 are handled by keys 1-4 *when the PLUS key is last pressed*. (The opening default selection is the minus key.) "Rvb Glide" is enabled by the / key, "Freq Gliss" by *, and "Reset" by Enter. In these versions, be sure to keep the keypad Num Lock enabled. Any external numeric keypad should be suitable. Please note that IterumASC.csd and IterumKeypad.csd should be performed *only from the command line*. Also, their corresponding standalone .exe's must have the performance window selected when running Csound. PERFORMING TWO-CONTROLLER VERSIONS WITH JOYSTICK CONTROLLERS The following instructions apply to Windows systems. Similar utilities and procedures should be available for other platforms. In order to convert joystick data to MIDI (which is required), you need the handy, free MIDI Joystick v1.1 utility found at: http://members.magnet.at/hubwin/midi.html (MDJSTK11.ZIP). In addition, you must install the (free) MIDIYoke MIDI "patch cable" driver found at http://www.midiox.com. A special setup makes it possible to perform ET ITERUM VENTURUS EST with only an X/Y joystick - while turning the reverb "glide" and pitch glissando on (and off) with the two joystick buttons. This produces a full-featured performance entirely using a simple joystick. (The original, basic IBM style works best - with spring action defeated.) The arrangement can actually work remarkably well. Here are the essential steps: 1) The MIDIYoke driver must be enabled for a minimum of two ports. (Check this in Control Panel/Sounds and Multimedia/Devices/MIDI Devices and Instruments/MIDI Yoke Junction/Properties/Settings.) 2) In MIDI Joystick (Settings), set the X axis to Controller, Channel 1 and Data to 20. Set the Y axis to Controller, Channel 1 and Data to 21 (this will match performance file defaults). Also, set the Y axis Value to "Reverse." 3) In MIDI Joystick, set Button A to Note, Channel 1, Data to 60, Value Down to >0 and Value Up to 0. Set Button B to Note, Channel 1, Data to 62, Value Down to >0 and Value Up to 0. (Note: These too match .csd defaults.) 4) In MIDI Joystick, select "Out" as MIDI Yoke Junction: 1. Assuming your two-axis, two-button joystick is correctly installed under Control Panal/Gaming Options, press "Start." Moving the joystick, you should observe the MIDI output of X and Y axes. 5) Install and run MIDIOx. Make sure the MAP box on the bottom taskbar is not highlighted (if it is, click to "unhighlight" it). 6) In MIDIOx, under Options/MIDI Devices, select MIDI Yoke Junction: 1 as MIDI Input, and MIDI Yoke Junction: 2 as MIDI Output. 7) When running your two-controller .csd, select MIDI Yoke Junction: 2 as MIDI In Device. 8) Finally, make sure your joystick is well calibrated (check this in Control Panel/Gaming Options/Properties). Observe in MIDI Joystick whether both X and Y axes output values *all the way* from 0 to 127 (starting at 0 is important for the X axis). 9) In performance, the operational sequence is: the joystick starts in the lower left corner and moves to the lower right. Button 1 is pushed and held; then following completion of the reverb "glide", the stick begins moving to the upper right. However, after only two harmonic pairs have faded out, button 2 is pressed and held (the pitch glissando begins). The stick then resumes moving to the upper right (more pitches exit), pausing only when the last pitch pair remains. Button 1 is released (reverse reverb "glide"), after which the stick completes its move to the upper right corner. The joystick should be moved to the lower left corner before the performance file is opened.