Occupy Wall Screens


The world is #occupied by emotions.
The emotions are #occupied.
Occupy Wall Screens

preview: Emotion Forecast at the Big Screen Plaza, NYC. Image by Nina Colosi. Art by M. Benayoun & yours truly.

Reverse engineering the Digidesign 003R protocol

First heads up in 2013: I got nerd-sniped shortly after x-mas and reverse-engineered the Digi 003 Firewire protocol with Damien Zammit. The details are a long story, but linux-support for it is underway:

The rebased driver code is at and the broken-out digi003 driver is available from

CAC 3 - postdigital

The submission deadline for the 3rd Computer Art Congress - PostDigital Art - has been extended until June, 18.

CAC.3 invites artists, intellectuals, engineers and scientists to share and discuss their imaginations, creations, inventions and visions of the post digital art. The Call for Papers and Artworks can be found here.

· 07.06.2012 17:00
· 05.06.2012 14:05 · Robin Gareus

JACKdbus - Desktop integration - backend-switching

Prototype of automatic backend-switching for JACK2 using dbus.

You may know this Mac/OSX feature: one plugs or unplugs an external audio-interfaces and the system automatically switches the sound to the new device. - It may not always be what you want, but it is an very handy feature especially for mobile systems. and here's how to set this up for JACK on GNU/Linux..


First, we need a mechanism to switch the “JACK backend” in order to switch between audio-interfaces. The task includes taking care of re-connecting physical I/O ports in case they're different on each device.

Second, said mechanism needs to be triggered automatically when a new device is connected or if a device goes away. Here's a short annotated demo-video:

(If Flash is installed JavaScript is activated, you can watch a video inside this web page.)

(well yes, I should have ripped out that USB cord more visibly.. sorry, next time. I might use a real camera too, then.)



Note: dbus-triggerd and a jack2 debian packages (source and i386) are available from

deb sid main

Installation and testing

  1. get jack2, patch, compile and install (or get the debian package).
  2. compile and install dbus-triggerd (or get the debian package).
  3. download and install to PATH (~/bin or /usr/local/bin), chmod +x.
  4. open a window to watch tail -f ~/.log/jack/jackdbus.log
killall -9 jackd jackdbus # clean start
jack_control eps verbose true        # tell jackdbus to be verbose alsa hw:0 1024  48000 3 # launch jackd on first ALSA interface -p1024 -r48000 -n3 alsa hw:1               # switch to second ALSA interface

Launch some jack clients, players etc and repeat testing with

Automating it with dbus-triggerd

dbus-triggerd is a tool to trigger shell-commands upon receiving a given dbus-signal.

It can be used to invoke in order to change the JACK-backend if

  • a new audio-interface is connected (system-dbus org.freedesktop.Hal.Manager,member=DeviceAdded) → use the newly connected device.
  • an audio-interface is disconnected (system-dbus org.freedesktop.Hal.Manager,member=DeviceRemoved) → switch to a fallback audio-interface.
  • JACK daemon signals device-error (session-dbus org.jackaudio.JackControl,member=DeviceError) → switch to a fallback audio-interface.

The two last are redundant and exclusive. JACKd still needs a patch to send a DeviceError. Using HAL's DeviceRemoved may be problematic for setups with more than two sound-cards if the removed device was not currently the one used by JACK.

Example to launch dbus-triggerd:

make || exit
killall dbus-triggerd

### switch to sound 'hw:0' on any DeviceError
# This requires a patched JACK2, that sends a DeviceError
./dbus-triggerd $@ "type='signal',path=/org/jackaudio/Controller,interface=org.jackaudio.JackControl,member=DeviceError" --shell " alsa hw:0" &

# This an alternative to the above, using the HAL message
#dbus-triggerd $@ --system "type='signal',path=/org/freedesktop/Hal/Manager,interface=org.freedesktop.Hal.Manager,member=DeviceRemoved,arg0=/org/freedesktop/Hal/devices/usb_device_582_74_noserial_if0_sound_card_2" --shell " alsa hw:0" &

### switch to external USB sound device 'hw:2' when it's connected
./dbus-triggerd $@ --system "type='signal',path=/org/freedesktop/Hal/Manager,interface=org.freedesktop.Hal.Manager,member=DeviceAdded,arg0=/org/freedesktop/Hal/devices/usb_device_582_74_noserial_if0_sound_card_2" --shell " alsa hw:2" &


Here be dragons…

The mechanism for backend-switching is implemented by a shell-script (which call dbus-send) that controls jack2d by exchanging dbus-messages. is started with different command-line parameters on-demand by dbus-triggerd.

  • org.freedesktop.Hal.Manager,member=DeviceAdded
  • org.jackaudio.JackControl,member=DeviceError (requires patch to jack2)
  • (or) org.freedesktop.Hal.Manager,member=DeviceRemoved

Note that uses the org.jackaudio.PatchBay dbus-API which is broken in jack2-r4120 (see ticket below) and fixed by Nedko in jack2-r4366.

Future: Instead of patching jack2 to send additional messages (here: org.jackaudio.JackControl,member=DeviceError), the trigger functionality should be built into jackd, but requires a callback to the control API to be added to JACK.

The shell hook-script ( could be implemented easier and more flexible using python (jack-control API bindings) or similar language more suitable to parse and provide audio-port mapping and configuration.


German influence on the French Election

Taking a leaf out of Merkel's book, another German is trying to influence the French elections..

Last week I received a phone call by my collaborating artist and previous supervisor Maurice_Benayoun that there is interest to show a customized version of our project Emotion-Forecast during the final stages of the presidential election campaign for François_Hollande.

My first reply was: “I'm not interested in political statements. Yet the project is free-software, everyone can use and customize it for their needs.”

As citizen of the European-Internet, I am not allowed to vote in France - so here's my change to take some influence nonetheless. While I can't say that I'd vote for Mr. Hollande, I am certain that I don't want to continue living in a country ruled by Sarkozy. Decision-making by exclusion, fine.

So I spent a few hours hacking - which is fun anyway - and a few hours carefully translating English into French.. et voila. La prévisualisation est disponible en ligne.

I'm still undecided what I'd actually vote on next Sunday. Pretty much both options seem like dead-ends to me. Still, I'm happy that people's emotional-concerns are included in an election campaign, which otherwise is pretty much focused on the economic situation: jobs, taxes, dept-crisis,.. sprinkled of immigration and security concerns.

Even though this “emotional weather forecast” will likely be presented out of context of our initial intention, I very much welcome the opportunity that it may inspire some people at least.

Update: it is going to be presented on Sunday, May/6 at Place de la Bastille.

Update: article in huffingtonpost about the project[ion].

Die Luft der Freiheit weht

There could not be a better motto for the Linux Audio Conference 2012 than the one Stanford already chose: “videtis illam spirare libertatis auram”1). The 10 year anniversary of LAC marks the first time that LAC takes place outside of Europe, and the conference is packed with exciting and interesting presentations, concerts and installations. There's a good amount of sessions on Ambisonics, FAUST, Pure Data, and - although LAC unfortunately takes place parallel to the SuperCollider symposium - SC presentations as well as many other interesting projects.

The Conference Schedule has just been published and I'm eager to visit CCRMA which has been a supporting institution of Linux Audio ever since there has been any sound on GNU/Linux.

Besides reuniting with fellow LADs and meeting creative people from various fields, I'm looking forward to experience the 3D 22 channel sound system with speakers above, around and below the audience level in the CCRMA Listening Room.

blog.txt · Last modified: 02.03.2011 17:31 (external edit)