‹ HID to OSC SC: Fixed Number of Decimals ›

featureCreep

2019-04-23 17:19 supercollider

This software was written for and in collaboration with violinist George Kentros. Premiered at "After Work - This violin must die", Fylkingen Stockholm 30 Mar 2019.

The program is written in SuperCollider with additional features like iPad control and video mixer made in MaxMSPJitter.

Main interface

The main window with its eight tracks (configurable) looks like this...

and here you can set an amplitude threshold for the microphone and arm tracks to automatically detect and capture sounds.

With the waveform selection (dark grey areas) you select what part of the captured sound you want your different players to use.

There are many players - all with different behaviours...

slow, medium, repetitive, scanner, sweep, nervous, fastRhythmic, slowRhythmic, limpRhythmic, fast, drill, jump, plain, half, third, quarter, pingpong, crawl, wave, waveHalf, pattern1, pattern2, pattern3, round, sync

Player behaviours include in which direction and how fast to progress in the captured sound buffer, when to play for how long, with which envelope and how loud, how much transposition, play in which audio channel etc.

Some of these players are using granular synthesis techniques while others are scratching and jumping around in the sound buffer in more or less unpredictable ways. Hopefully, the names listed here above will give a hint of what players do to the sound.

All players are pieces of code. For example this the code for the scanner player...

SynthDef(\scanner, {|buf, amp= 1, start= 0, end= 1|
  var dur= BufDur.kr(buf);
  var pha= LFNoise2.kr(In.kr(100)+0.1)+1/2;
  var pos= pha*(end-start)+start;
  var add= LFNoise2.kr(1);
  var fre= In.kr(101).linexp(0, 1, 1.1, 18)+add*SinOsc.kr(0.1).max(0.5);
  var snd= TGrains.ar(
    2,
    Impulse.ar(fre),
    buf,
    1+LFNoise2.kr(1, 0.05),
    pos*dur,
    0.75,
    LFNoise2.kr(0.06, 0.5),
    amp.lag(0.5)
  );
  SendReply.kr(Impulse.kr(\updateRate.kr+1), '/pos', pos);
  Out.ar(\syncBus.ir(40)+\index.ir, K2A.ar(pha));
  snd= CompanderD.ar(snd, \compressorThresh.kr, 0.5, 0.5, 0.005, 0.01, EnvGate());
  Out.ar(\out.kr, snd);
}).add;

and most players will look very similar to this. But there are also a few special ones like sync which just matches the playback position of the player in the track above.

In the main window one can also set track volume, bypass any global effects and read/write sound files.

The computer keyboard may be used for shortcuts quickly arming, playing and selecting what each track should play.

Global control

There is also an additional control GUI with global volume, effects, automation and record...

The three sliders delay, sustainer, distortion are just simple wet/dry control for global effects (that can be bypassed for each track using the bp button), while the other sliders freeze, fire, industry, chaos, air are more complex and control a bunch of effects and behaviours. For example, freeze will take the sound from all players and smear it out by removing transients and pitch shifting copies of the sound up/down in octaves.

When the automation button is clicked, the program itself can start and stop tracks, change effects and vary a lot of other parameters in the code. The idea here is that the software should be able to run independently and generate interesting variations over long periods of time. Also, it should never go completely silent nor go wild and overload everything.

Remote iPad interface

All the above can be viewed and controlled remotely from a tablet or a phone using a web browser. We programmed a look-alike GUI patch with MaxMSPJitter and the mira externals. This patch talks to the SuperCollider interface over Open Sound Control.

featureCreep screenshot from iPad interface
featureCreep screenshot from iPad interface
featureCreep screenshot from iPad interface

The interface here is even more ugly - especially the waveform display because the sound data had to be downsampled and kept at a low resolution to reduce wifi network traffic. Also, it was hard to fit everything on a single screen as all widgets had to be quite large and not too close to each other to be usable on an iPad.

Our software also includes a video mixer for camera and movie playback (not shown here).


‹ HID to OSC SC: Fixed Number of Decimals ›