The Spectacle Fashion Show in Amsterdam was looking for a 10 minute surround soundtrack, and here I was, together with Mhairi , An, Ivan and JACK…
andBeyond had 8 PA speakers available to fill a circular chapel (Platform21.nl, Sandberg.nl, maps.google). Even worse than the sound reflections there was the fact that the audience had to be seated along the outer walls. Only the models would able to appreciate the sweet-spot ;) - I had only one week to prepare the setup and the final no go for using ambisonics or WFS was that we could only get into the building the day before the show and there were also rehearsals taking place at the same time.
So instead of moving sound-sources in the space, simple panorama dial-knobs did the trick of mixing four live and two stereo tape-inputs to the eight speakers and it was quite sufficient to enchant the audience: Video of the Show, alas in bad quality and without the grand finale.
Free software for free drinks, lots of fun and a great show!
Thanks, andBeyond.nl. I won't forget some of those truly amazing looks for quite a while. - Relax Max
cd /tmp git clone git://gareus.org/panjack cd panjack/panjack/ make cd ../oscpanctl/ make
PanJack implements a real-time surround-sound panorama mixer.
Note: Jack-Transport needs to be rolling in order for panjack to process audio.
It creates jack-audio input and output ports and routes audio with a latency of 1 jack-cycle, applying a amplifications depending on faders and panorama-gain.
The panorama-gain settings can be adjusted manually for each output channel or be modified indirectly using built-in maths for 2D (angle, separation) or X/Y-distance panning. Furthermore there is built-in functionality to automate whirl/leslie-rotate effects.
panjack itself does not provide sequencer capabilities. Yet this feature can be archived easily by controlling panjack via OSC and any OSC-sequencer (eg. ardour LADSPA-osc automation - see below)
Panjack is solely configured via command line parameters:
panjack command line options:
/panjack/xy float, float : signal source X, Y /panjack/setup int, float, float : speaker number, X-pos [0..1], Y-Pos [0..1] /panjack/amp int, float : channel number, volume [0..1] /panjack/quit : handy during development, possibly disastrous during live performances
NOTE: The current OSC command only controls the first input channel.
panjack uses ALSA-MIDI-Sequencer ports. Simply connect the BCF2000 midi port to panjack (fi. using
panjack parses (and sends) BFC2000 B-Control (default mode - preset no. 1, Manual) MIDI-CC events. The BCF faders/controls are mapped to the first eight panjack input channels:
Utility to control (send OSC commands to) panjack.
It is written using OpenCV for graphics, mouse, joystick and keyboard interaction and liblo (OSC).
oscpanctl command line options: -h help -V show version -v enable verbose/debug output -p <num> number of output ports / speakers (default 4) -o <num> OSC UDP-port number to send messages to (default: 5280) -i <num> OSC UDP-port number to listen to (default: 49152)
Messages sent to the oscpanctl's OSC input port are processed (update position) and forwarded to the output. This allows to visualize and override automation-data.
oscpanctl reacts to keystrokes :
r re-transmit speaker setup,
b bypass/disable OSC transmissions,
e enable OSC-TX and the numbers
0-9 to position speakers.
With the soundtrack and choreography changing until the last minute, panjack accordingly changed rapidly so the initially nice and clean code (based on jack-example-client.c) turned into a toolkit.
OscPanCtl was only used at the beginning for prototyping and the OscPanCtl code as well as the matrix.c maths has been somewhat neglected. I bought a Behringer BCF2000 few days before the performance and hooked it up via MIDI instead of OSC. During rehearsals some tracks and panorama settings were automated (ardour automation via OSC to panjack), but in the end we ended up to mixing it all live and resulted in some last minute assign feature to MIDI-event hacks. NTL, it runs stable and panjack worked brilliantly - thanks to JACK, freebob2) and debian gnu/linux - without a single dropout at 256 frames, 4ms latency during the whole two days!
more to come about:
matrix.c- flexible speaker position-signal distance pragmatic openCV application.