|
|
|
|
Castle Music (by Brian Bevelander)
|
|
|
"Castle Music" is a piece written by Brian Bevelander in 1982 for 2 pianists, 2 percussionists, and electronics. Modern computer software makes it easier to perform this piece and I created a program with SuperCollider which performs the necessary audio effects without the need for expensive audio tools (apart from a computer that is).
Aside from this page, there is more information about the piece in my Online Percussion Library.
Mr. Bevelander's Original Electronic Setup
In the original score, Brian Bevelander gives specific instructions regarding stage setup including the preferred placement of piano, percussion instruments, and microphones.
There are four human performers in the piece, a CD/Cassette recording (pre-recorded acoustic and electronic sounds), as well as microphones on the acoustic instruments which are processed via tape-loop to create a time delay. In short, that was Mr. Bevelander's original plan.
The Modern Conundrum
The "tape-loop" that Mr. Bevelander describes requires a reel-to-reel tape player. Why? and How?
Because in 1982, there were no other tools which could perform such long delays as he intends. Even the most advanced contemporary "effects processors" of the day could produce delay effects of less than a few seconds. Whereas Mr. Bevelander's goal was to create a much longer delay effect which could only be accomplished by a reel-to-reel tape recorder.
How... well, with only a few feet of good tape one could make a loop which would run through the "play heads" and "record heads" of the tape player/recorder then revolve around the "reel". Each portion of the tape then would record a sound, travel around the reel then return to the "play head" and the sound would be played (then of course new sounds would be recorded on that portion of tape and round-n-round it went). The number of revolutions per minute was quite low and would effectively create an "echo" between nine and fifteen seconds after each recorded sound.
In 1982, reel-to-reel tape players were a lot more common in electronic studios than they are today! It's possible to find and puchase an ol'fashioned reel-to-reel player but in some cases it may be easier to use current technology (which many studios have already at their disposal).
Therefore, in November 2000 when I was asked to perform this piece at Arizona State University with my colleagues, I wrote a Supercollider patch that would perform the necessary sound effect in our performances.
I've performed the piece three times with:
- Dr. Madelaine Williamson: Professor/ASU School of Music (Piano)
- Andria Fennig: Former student/ASU School of Music (Piano)
- Casey Farina: Student/ASU School of Music (Percussion)
- Doug Nottingham: Student/ASU School of Music (Percussion)
- ME: Student/ASU School of Music (Percussion/Electronics)
- Eric Schultz: Student/ASU School of Music (Electronics)
- Dr. Glenn Hackbarth: Professor/ASU School of Music (Director of ASU New Music Ensemble)
The first time we performed the piece we used a Lexicon reverb unit to create the time-delay. This was sufficient but we found it difficult to adjust the volume level of the delay and avoid feedback.
For our second performance I had prepared the Supercollider patch and it worked like a charm.
The SuperCollider Patch
The Goal
The Castle Music score describes a tape-loop which creates an eight second time delay. The sounds that would be looped are gathered using four microphones on stage: (2 on the piano, 2 on the percussion setup). My goal then was to create a program which would:
Take input from a standard mixer.
Delay the input 8 seconds.
Then output both the source signal and the effected signal. The piece requires that one of the performers turn-up and then turn-down the tape-loop effect; therefore true to the original electronic setup, this patch is always running and at specific times throughout the piece one of the performers simply turns-up or turns-down the effect (rather than an "on-off" switch).
I also wanted to provide basic controls for length of delay, length of decay, level of delay and decay. (Note: I did this to provide the performers with the liberty of altering the delayed signal if they perhaps felt that eight seconds was too long or short and also to provide control to adjust the mix between the source sounds and the echo.)
The Code
(
// Super Collider version 2.2.9.
// This document was written by Dave Sabine...October 2000
// It was intended for use as the sound processor for Brian
// Bevelander's "Castle Music" for a performance at Arizona
// State University on November 20, 2000.
// detailed information/instructions can be found at
// http://www.davesabine.com/
// System Requirements
// Macintosh Computer equipped with Super Collider or SCPlay
// by James McCartney of http://www.audiosynth.com. I suggest
// using at least a Mac G3, ideally a Mac G4 or better. You
// will experience latency using a slower computer.
// Note: This patch produces a mono output. The original
// electronic setup would have created a stereo output.
// This patch could be modified to accomodate a stereo
// output, but I felt that processing speed was first
// priority, and processing multiple channels may have
// caused an unwanted delay or stutter. As it is, the
// Mac G3 needs to work pretty hard to keep up.
// For technical information regarding Super Collider and
// your Macintosh, please see http://www.audiosynth.com.
// Note: This patch will output both the original input
// signal, as well as the delayed signal. Depending on
// your configuration, you may choose to eliminate the
// "original" signal from this output. For example, if
// the original signal is already being routed through your
// mixer, then outputting that signal through this patch
// would cause TWO instances of that signal in the speakers.
// To eliminate the original signal from the output, simply
// use the SECOND version of the CombA code below.
//
// ********************************************************
// declare variables for GUI
var maxDelaytime;
var delayTime;
var decayTime;
var scaleTime;
var slider_maxDelaytime;
var slider_delayTime;
var slider_decayTime;
var slider_scaleTime;
var box_maxDelaytime;
var box_delayTime;
var box_decayTime;
var box_scaleTime;
var w;
var scope;
// set variables for GUI w = GUIWindow.new("Bevelander Delay", Rect.newBy(315, 239, 400, 400)).backColor_(rgb(51,102,153));
StringView.new( w, Rect.newBy(24, 14, 346, 20), "Instructions: Start this patch, then use sliders on the").labelColor_(rgb(153,204,153));
StringView.new( w, Rect.newBy(24, 38, 346, 20), "mixer according to the score to control the audio input.").labelColor_(rgb(153,204,153));
slider_maxDelaytime = SliderView.new( w, Rect.newBy(24, 97, 128, 20), "maxDelaytimeslider", 3, 0, 15, 0.1, 'linear').backColor_(rgb(153,153,153));
box_maxDelaytime = NumericalView.new( w, Rect.newBy(154, 97, 29, 20), "maxDelaytimebox", 3, -1e+10, 1e+10, 0, 'linear');
StringView.new( w, Rect.newBy(190, 99, 193, 17), "Maximum Delay Time").labelColor_(rgb(153,204,153));
slider_delayTime = SliderView.new( w, Rect.newBy(24, 121, 128, 20), "delayTimeslider", 0.5, 0.1, 15, 0.1, 'linear').backColor_(rgb(153,153,153));
box_delayTime = NumericalView.new( w, Rect.newBy(154, 121, 29, 20), "delayTimebox", 0.5, -1e+10, 1e+10, 0, 'linear');
StringView.new( w, Rect.newBy(190, 123, 193, 17), "Delay Time").labelColor_(rgb(153,204,153));
slider_decayTime = SliderView.new( w, Rect.newBy(24, 145, 128, 20), "decayTimeslider", 2, 0, 15, 0.1, 'linear').backColor_(rgb(153,153,153));
box_decayTime = NumericalView.new( w, Rect.newBy(154, 145, 29, 20), "decayTimebox", 2, -1e+10, 1e+10, 0, 'linear');
StringView.new( w, Rect.newBy(190, 147, 193, 17), "Decay Time").labelColor_(rgb(153,204,153));
slider_scaleTime = SliderView.new( w, Rect.newBy(24, 169, 128, 20), "scaleTimeslider", 0.4, 0, 5, 0.1, 'linear').backColor_(rgb(153,153,153));
box_scaleTime = NumericalView.new( w, Rect.newBy(154, 169, 29, 20), "scaleTimebox", 0.4, -1e+10, 1e+10, 0, 'linear');
StringView.new( w, Rect.newBy(190, 171, 193, 17), "Scale Time").labelColor_(rgb(153,204,153));
scope = ScopeView.new( w, Rect.newBy(24, 200, 300, 100), 4410, -0.1, 0.1);
// Update views and values of sliders
slider_maxDelaytime.action = { box_maxDelaytime.value = slider_maxDelaytime.value };
slider_delayTime.action = { box_delayTime.value = slider_delayTime.value };
slider_decayTime.action = { box_decayTime.value = slider_decayTime.value };
slider_scaleTime.action = { box_scaleTime.value = slider_scaleTime.value };
// build the synth
// microphone input channel 1 and 2 will be routed through the Scope in the
// GUI window, and then will be processed by CombA UGen.
// The CombA UGen gets it's values from the sliders in the GUI window.
{
var micInput;
// The following line accesses and amplifies the
// audio input from the Macintosh "audio in"
// 1/8 inch plug.
// If you find that the signal is extremely quiet,
// or too loud, you should try modifiying the line.
// Currently, the signal will be amplified by 0.1, but
// the value can range from 0 to 1 (zero being silent,
// and 1 is loudest.
// Hence:
// AudioIn.ar([1,2],0); // is silent
// AudioIn.ar([1,2],1); // would be loudest.
// I would suggest not going louder than 0.9 however.
micInput = AudioIn.ar([1,2],0.1);
// The first version of the CombA code.
// This will output both the original signal and
// the delayed signal.
// If you choose to NOT use this version, simply
// place the "//" (two backslashes) at the beginning
// of each line - this will cause Supercollider to
// ignore those lines.
Scope.ar(w.at(14), CombA.ar(
micInput,
slider_maxDelaytime.kr,
slider_delayTime.kr,
slider_decayTime.kr,
slider_scaleTime.kr,
micInput )) * 5
// The second version of the CombA code.
// This will output ONLY the delayed signal.
// If you choose to use this version, simply delete
// the "//" (two backslashes) at the beginning of
// each line.
// Scope.ar(w.at(14),
// CombA.ar(
// micInput,
// slider_maxDelaytime.kr,
// slider_delayTime.kr,
// slider_decayTime.kr,
// slider_scaleTime.kr)) * 5
}.play;
w.close;
)
The Visual Result
As you can see in the screen shot, the Supercollider document (the text-script above) creates a simple graphic interface to easily make changes to the delay/echo settings. The input signal is displayed in the scope window of the graphic interface.
Instructions: How to Use this Patch
Note also that this has not been tested (yet) for compatibility with SC3 but you can use the old version of "SCPlay" instead available at www.audiosynth.com.
- Step One
Cut-n-paste the above Supercollider source code into a new text document and save it to your hard drive. (I saved it as "castle_music"). You can download the trial version of SuperCollider or download "SCPlay" from www.audiosynth.com. Note that SCPlay will execute the patch but will not allow you to make any changes or modifications to the code.
- Step Two
-
The diagram here explains the input/output paths of the microphones, the mixing board, and the computer. Note that the diagram represents the configuration that I used...but there are likely other possible configurations.
- Step Three
Once you have a signal from the microphones routed to the computer you can test the Supercollider patch. Here are some important things to remember:
To run the Supercollider patch you must select the entire source code and press the "Enter" key. (Not the "Return" key).
When the Supercollider patch is executed, a new window will pop up and present you with sliders and some instructions. (That's how you'll know that the document has executed correctly).
The scope inside the window will show you whether or not an augio signal is getting into the patch through the Built-in Mac Audio hardware. If the scope does not show a signal then you may have to modify the Mac Audio settings in the Audio Control Panel...I don't KNOW the settings you will need to use because they vary from model to model depending on whether you're using a G3, G4, iMac, etc. I suggest you experiment with it or contact you're friendly, neighbourhood Mac guru.
|
|
|
|