Listening To The Air

In his solo performance Ron exploited the particularly directional character of ultrasound to create an open air synthesizer where small household objects focus, scatter, and interconnect different streams of sound. The piece is organized as a series of episodes of varied duration. Each is based on a distinct feedback network with its own equalization, distortion and dynamics processing. Spatialization, tuning, and articulation of the feedback network is done entirely through the manipulation of small objects and the performer's physical presence. As the title suggests, some episodes focus on air currents themselves as a source of modulation while others focus more directly on the motions of the performer or the interaction of multiple streams of sound. 

{function: contextual}

Ron's Instrument


Ron main framework for sketch and composition was SuperCollider. In the prototyping phase, he experimented with different synth definitions, using NodeProxies as basic building blocks. NodeProxy objects can be replaced and recombined while they play, providing a dynamic workflow for sketching, live coding and performance. The piece is organized as a series of episodes of varied duration and each section features a distinct recombination of NodeProxy definitions. Every transducer is indeed coupled to a specific instance of NodeProxy that is altered or replaced at the beginning of each new episode. The scheme and code on the right depict the basic structure of the ugen graph used for the transducers 4 and 5. The variables named 'ex1' and 'excess' are crucial elements of the feedback loop. ex1 determines the exponential scaling of the signal. Ron decided to perform the amplification entirely via software, using an exponential scaling for sensitivity reasons. Excess provides articulation over time, by gating or distorting the signal.


Ron used a number of different objects to alter the shaping influence of air currents in the feedback loop. He experimented with the reflective / diffractive properties of various gadgets such as sponges, candles, clothes pegs, paper boxes etc and noticed that even the small movements of a candle could cause enough fluctuations in the air as to produce an audible effect on the feedback loop. Ron said it would be interesting to experiment with 3D-printed diffractors and reflectors, designed to achieve specific alterations of air currents.


The open air synthesizer is composed of a set of five ultra-sound transducers mounted on third-hand tools, thus allowing their precise positioning and the fine-tuning of the feedback loop. They are disposed in a star configuration, all facing towards the performer, except for the one in the center that points towards the opposite direction. Looking at the picture, transducers 1 and 2 act as loudspeakers, 3, 4 and 5 as microphones. The actual feedback loop is composed only of the elements 1, 2 and 3. 4 and 5 play the role of listeners, capturing the signal which is then transposed and diffused over the CUBE loudspeakers. This was Ron's last configuration. At first he was working with a further feedback microphone, but he later decided to leave it aside, since he realized it was easier to conceive the feedback relations adopting a triangle of two loudspeakers and one mic.

meta: true
persons: RK
author: POZ
artwork: Listening To The Air
function: description
keywords: [SuperCollider, ultrasound, instrument, synthesizer, DSP, software, feedback, hardware]


~mics =, 2).play;


~nlUMics = {| fRef = 40000|
    var audio,usound, trig, cutoff;
    usound =[0,1]) * 10;
    usound =\;
    usound =, fRef, 0.01);
    audio = usound** \, 1);
    audio = audio *;
    audio = audio * \, 0.1);
    audio =, 20000, 0.1);
    audio =, 20000);
    audio =, 0.4);


~uMics = {| fRef = 40000, amp = 0.1, gain = 0.12|
    var audio,usound, delaudio;
    usound =[0,1]) * 10;   
    usound =, fRef, 0.01);
    audio = (usound) *;
    audio = audio, 10000);
    audio =, 30, 1, amp);
    delaudio =, 0.01, 0.01, 0);
    audio =, audio, 0.25, 1, 0.0, 0.01, 0.5) * gain;


~section1 = {
    ~mics[0] = ~uMics;
    ~mics[1] = ~nlUMics;
    ~mics.set(*[ 'fRef', 40000.0, 'amp', 0.1, 'gain', 0.1, 'excess', 0.1, 'ex1', 0.0, 'nl_amp', 0.0 ]);



{kind: code, artwork: ListeningToTheAir, keywords: [SuperCollider]}