Robin's Latest Site

rgrma.jpg
Robin's expertise is in A/V technology and related hardware/software research and development.

Currently Robin mainly works as contractor for Harrison, Manufacturer of the World's Finest Consoles. He develops the Digital Audio Workstation Ardour and produces a line of professional Audio Plugins.

roB.log

setBfree - 3D openGL LV2 audio plugin

I've started to tackle a major todo item on the setBfree issue-tracker: the Organ needs a GUI :)

Well, strictly speaking it does not. All controls are available as MIDI-CCs, so when playing it using a midi-keyboard, a GUI is uncalled for. The GUI is completely optional. But setting up those MIDI-CC maps and midi-program-presets in the first place can be quite an advanced talk for musicians who are not comfortable with editing text config files. Also using when using the organ synthesizer as plugin in a sequencer MIDI-CCs are unwieldy for visualizing drawbar settings. Last but not least the GUI is bi-directional: the GUI is updated if the synth receives MIDI messages and can be used to quicky check the state (e.g. when loading midi-programs/presets) and changing values in the GUI sends corresponding midi feeback to the connected device.

A major factor in the GUI design decision was that GUI should run cross-platform and can be used in LV2 plugin hosts without causing ABI conflicts. The toolkit should also be reasonably lightweight. This basically ruled out gtk+, QT, FLTK and NTK :( Luckily there's OpenGL!

So if GL, why not 3D too?! In the context of an audio-plugin it's one of the most superfluous uses of 3D, ever, but WTH!

setBfree running as LV2-plugin in ardour – of course you can pan, zoom and tilt the 3D view :)



The 3D model was made with blender and the textures with gimp, the files are available with the source-code at github. The folder also contains a readme file with basic information.

Now, I'm not much of a 3D artist, hence Alexandre Prokoudine from http://libregraphicsworld.org/ has issued an open call.

For inspiration, here are some pictures that google found searching for Hammond B3.


Work on the GUI is still ongoing. It is already functional but work on many of the planned features - like interactive midi-maps, presets, etc - has only just begun.

Embedding Data in Applications

Have you ever wanted to include raw data - such as images - in an executable application file?
An application that can be compiled for any platform including Windows, Linux and OSX?
– Well, while I was working on harvid, I did.

It turned out to be quite easy - once you know how :) gnu/ld rocks, but as usual there are some issues – in particular on OSX.

Check out the complete embedding resources in executables story.

Occupy Wall Screens

occupywallscreens.jpg

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 http://gareus.org/gitweb/?p=alsa-driver.git and the broken-out digi003 driver is available from https://github.com/x42/003amdtp.

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..

Overview

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.)

Prerequisites

Download:

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

deb http://rg42.org/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 myjackctl.sh 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
myjackctl.sh alsa hw:0 1024  48000 3 # launch jackd on first ALSA interface -p1024 -r48000 -n3
myjackctl.sh alsa hw:1               # switch to second ALSA interface

Launch some jack clients, players etc and repeat testing with myjackctl.sh.

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 myjackctl.sh 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:

#!/bin/sh
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 "myjackctl.sh 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 "myjackctl.sh 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 "myjackctl.sh alsa hw:2" &

Implementation

Here be dragons…

The mechanism for backend-switching is implemented by a shell-script myjackctl.sh (which call dbus-send) that controls jack2d by exchanging dbus-messages.

myjackctl.sh 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 myjackctl.sh 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 (myjackctl.sh) 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.

References

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.

Big Screen Plaza, NYC

E-forecast

Streaming Museum, an international public art and online museum, will celebrate its fourth anniversary on January 31 with the US premiere of ”Emotion Forecast” and ”Occupy Wall Screens”, real-time artworks by the renowned French artist Maurice Benayoun. The exhibition will be on view for one month at Big Screen Plaza in New York City and through 2012 at StreamingMuseum.org.

“Emotion Forecast” and “Occupy Wall Screens” are part of Maurice Benayoun's ongoing series on the “Mechanics of Emotions” which translate emotions into maps, performances, the Emotion Vending Machine, and sculpture relics of the world.

The artworks have been developed by Robin Gareus, at the CiTu-Paragraphe Lab of the University Paris 8, in the frame of The Art Collider project as a part of the PUF program of the FACE Foundation in collaboration with the SFAI (San Francisco Art Institute).

Streaming Museum is the first global public space and online hybrid museum with collaborating locations and cultural centers on 7 continents. The 30 x 16.5 ft. HD format screen of Big Screen Plaza is located at 29th Street and 6th Avenue, adjacent to the Eventi Hotel.

More information: http://www.streamingmuseum.org/featured/maurice-benayoun/

· 26.01.2012 21:06
 
start.txt · Last modified: 13.11.2022 18:23 by rgareus