LAmb - Live Ambisonics
Dylan Menzies-Gow developed a number of programs to allow the live manipulation of Ambisonic sound on a Silicon Graphics Indy computer. These machines have four channels of audio input and output, so are ideally suited to Ambisonic B format work. Dylan described and demonstrated this at MediaMix96. He won the Software Prize at GMEB 1997. Download
LAmb 0.91: Live Ambisonic MIDI System
Copyright Dylan Menzies-Gow February 1996
This system can be controlled almost completely with a standard 5-octave MIDI keyboard. V0.91 can additionally be used with the joystick of a Korg M1, or the pitchbend and mod wheels of a standard keyboard. The SY22 version makes use of the superior joystick and the mod wheel.In V0.91 all MIDI is received on channel 16. The MIDI adaptor should be attached to serial port 2 of the Indy.The B-format output is in the order W,X,Y,Z from output lines 1,2,3,4. (3,4 come from the headphone socket.) There is a decoded-output version inwhich lines 1,2,3,4 should be fed to an array of 4 inward pointing speakers, ordered clockwise.
The various ambisonic parameters can be controlled in a variety of ways. Two reasons:
- Reliance on continuous controllers can lead to an excessive amount of MIDI traffic, especially if using a sequencer to send data to synths as well as RAM: Hence MIDI note control from a keyboard.
- Different methods of control make the system more interesting musically.
LAmb can give the impression of moving a sound towards and through the listener. There are three modes of controlling the location of each mono input just using keyboard keys. The default is position mode. Modes can be selected with 'mode keys'.
Position mode :
When a 'position key' is hit, the current position of the sound moves towards the position represented by the particular key hit. The speed of movement increases with the velocity of the key-hit. The positions can be set with controller messages. There is a cubase mixer map available for doing this.
Cartesian cursor mode :
Six 'cursor keys' can be used to nudge the postion from its present. Nudge size increases with key-hit velocity.
Cylindrical cursor mode :
Same as cartesian cursors but using cylindical coordinates.
The M1 joystick defaults to controlling cartesians. The 'joystick grab keys' can be used to assign the joystick to one of the 4 mono inputs. Grabbing in cylindrical cursor mode makes the joystick x map onto phi and y map onto r of cylindrical coordinates. The +-z cursor keys can be used with the joystick if desired. In the SY22 version the mod wheel can be used to control z. The 'feel' of the joystick is fixed: In future versions it may be changeable. The release-joystick key is useful for freezing a position or overiding joystick jitter.
LAmb allows full 3-degrees-of-freedom rotation of the soundfield. The rotate cursor keys can be used to nudge the rotate parameters in the same manner as the locate cursor keys. If the 'rotate joystick grab key' is pressed the joystick controls phi and theta., the mod wheel controls eta on the SY22 version.The +-eta cursor keys can be used to control eta at the same time.
A simple multi-voice sample playback routine, for mixing in 4-channel B-format soundfield samples recorded with a soundfield microphone or created artificially with eg Csound. Samples are loaded automatically at the start from the local directory: Use filenames lamb1.B.aiff lamb2.B.aiff etc.The assignment of samples to keys, eg for repetition of samples, will be assignable in future versions.
The layout has been carefully designed to fit snugly onto a 5-octave keyboard. The first four octaves control location of the 4 mono inputs:
The remaining keys of the octave depend on the current mode selected:
- C Select position mode
- C# Select cartesian cursor mode
- D Select Cylindrical cursor mode
- D# Grab joystick
Position mode :
Cartesian cursor mode:
- E release joystick. Useful for freezing a position quickly or overiding joystick jitter.
- F - nudge y
- F# + nudge y
- G - nudge x
- A + nudge x
- A# + nudge z
- B - nudge z
Cylindrical cursor mode:
As above with phi, r replacing x, y
The fifth octave is as follows:
- C - nudge phi
- C# + nudge phi
- D - nudge theta
- D# + nudge theta
- E - nudge eta
- F + nudge eta
- F# rotate joystick grab
- G-C Sample playback
The multitap delay function is the one function which cannot be directly controlled from the keyboard. The simplest way is via a mixermap on a sequencer such as the one available for Cubase. The Controller details are given below. Because this is a soundfield delay, it can be used to fill a space with the 'trail' of one source. The structure of the delay is flexible enough to allow different a variety of different rhythmic gestures.
MIDI Controller Specification
If accessing the MIDI control data directly here are the details. In addition to carts and cyls you can send polar coordinate informa
tion,and W signal multipliers
- 20 x on audio line 1
- 21 y
- 22 z
- 23 phi
- 24 r
- 25 z
- 26 phi
- 27 theta
- 28 r
- 29 w control. This multiplies the W-signal in the range 0-2. Controller value 64 gives default of 1.
- 30 - 39 As above for line 2
- 40 - 49 As above for line 3
- 50 - 59 As above for line 4
- 60 phi rotate
- 61 theta rotate
- 62 eta rotate
- 80 direct output level. (0..4, 0 is off, 4 is full on)
- 81 delay tap1 output level.
- 82 delay tap1 time.
- 83 delay feedback level.
- 84..86 delay tap2
- 87..89 delay tap3
Methods Of Working
Using Cubase, spatialisation can be syncronised with synth sequences. Spatialisation could be done one track at a time: the joystick can be assigned to different audio lines using the joystick grab keys. If working completely live , the position keys provide a good reference if you get lost. Using the freeze keys to fix a position is likewise helpful. Try labelling the keyboard, initally anyway. Reverb can easily be added externally: Feed a mix of the mono inputs into a reverb unit, and mix the output into the W signal output. This ensures a constant background reverb level which is masked out as the source approaches.
Using symbolic links is a good way generating the standard 'lamb' filenames, which point to your original soundfiles. Put LAmb in your command path so that you can create separate directories of soundfiles and launch LAmb from inside these.
To minimise processing time, LAmb only activates a particular function once suitable midi note or controller data has been received. In particular soundfield rotate soaks up a lot of time. The Indy is notorious for plunging headforth into obscure disk and network management routines at random intervals (if you are a Unix guru, or have access to one, these can be re-scheduled to more convenient, less disruptive, times). These can have a big impact on processing power available so it is wise to keep things as simple as possible.
There is an intermittant problem with clicking on snapshots in the Cubase mixer map page. Sometimes the MIDI buffer overloads and the correct values are not received. This will probably be cleared up in future versions.
Last updated (Web-ised from Dylan's Postscript file for version 0.91 - on Dylans page he is up to 0.96) by
Malham. Monday 10th March 2003
If you have any suggestions, comments or requests you can reach
Click here to return to Music
Technology Group Welcome page
here to go to the Department of Music welcome page