Ron's Instrument

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

Hardware

The instrument comprises a set of five ultra-sound transducers, sourced from a general electronics supply. They are 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 realised it was easier to conceive the feedaback relations adopting a triangle of two loudspeakers and one mic.

Objects

Ron used a number of different objects to physically alter the feedback loop configuration. Exploiting the impressive directionality of ultra-sound, he could test the reflective and diffractive properties of different paraphernalia such as sponges, candles, clothes pegs, paper boxes etc. He discovered 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. 

The question arose of the potential effectiveness of a set of 3D-printed diffractors and reflectors. Ron will probably try to design and print some prototypes in the near future.

Software

Ron used SuperCollider from the sketch stage up to the final composition. Over the months he drafted many different synths, using NodeProxy definitions as the basic building blcoks of his performance. NodeProxies are flexible placeholders for synth nodes playing in the SuperCollider server. NodeProxy objects can be replaced and recombiend while they play, providing a dynamic workflow for sketching, live coding and performance. The piece is organised 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.

~mics = NodeProxy.audio(s, 2).play;

 

~nlUMics = {| fRef = 40000|
    var audio,usound, trig, cutoff;
    usound = SoundIn.ar([0,1]) * 10;
    usound = LeakDC.ar(usound).excess(\excess.kr(0.1));
    usound = Ringz.ar(usound, fRef, 0.01);
    audio = usound** \ex1.kr(0.45, 1);
    audio = audio * SinOsc.ar(40000);
    audio = audio * \nl_amp.kr(0.12, 0.1);
    audio = RLPF.ar(audio, 20000, 0.1);
    audio = HPF.ar(audio, 20000);
    audio = Limiter.ar(audio, 0.4);
};

 

~uMics = {| fRef = 40000, amp = 0.1, gain = 0.12|
    var audio,usound, delaudio;
    usound = SoundIn.ar([0,1]) * 10;   
    usound = Ringz.ar(usound, fRef, 0.01);
    audio = (usound) * SinOsc.ar(fRef);
    audio = RLPF.ar( audio, 10000);
    audio = RHPF.ar(audio, 30, 1, amp);
    delaudio = CombL.ar(audio, 0.01, 0.01, 0);
    audio = Compander.ar(delaudio, 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 ]);
};