Archive for the ‘Linux Audio’ Category

Code LiveCode Live in France

Monday, July 4th, 2011

I’ll be doing two livecoding performances in France!

One on Saturday, July 9th, at Generale Parmentier (metro station voltaire) in Paris (more details will follow).

and one on Monday, July 11th, in Strasbourgh, at the Place rouge (Square of law school), at the Rencontres Mondiales du Logiciel Libre, 12e edition.
http://2011.rmll.info/Programme-du-festival?lang=en

In the afternoon of Monday 11, we will also be hosting a presentation and workshop about livecoding, during the conference.

MARIN hacklab at sea

Monday, August 2nd, 2010

I got the chance to spent a little time on an island in the Baltic, as part of the MARIN sea hacklab.

(photo by Tuomo Tammenpää)

Fueled by self-caught fish (prepared along with other food by our excellent cooks Tuomo and Tapio), swimming exercises, boat trips, and sauna in the evening, I worked on a couple of things:

  • I got a compass/pressure/temperature sensor (the HDMP03) working with the Arduino (code)
  • I adapted the new Sonobotanics installation to fully run on 12V, from the batteries, which were being charged by the solar panels on the roof of the cabin, drawing only 1.3 A (one computer, a little headphone amplifier, and the MiniBee sensor boards).
  • gathered a few days worth of temperature/humidity/light data from having the installation running (and fixed some of my code to do this.
  • hacked a connection of a PS/2 keyboard to my Aleutia
  • learnt about how your grub2 configuration can get fucked up, and how to fix it again.

(photo by Tuomo Tammenpää)

Other reports from this hacklab:
David Griffiths
Jim Bollansée

Sonobotanics

Sunday, May 30th, 2010

Right now there is an exhibit going on of new sonobotanic models, I created together with Elio Bidinost.

For more information, check out: http://www.sonobotanics.org

Sonobotanics
sonobotanics close up

The Olympic livecode games at the LAC

Thursday, May 13th, 2010

The first Olympic SuperCollider livecoding games were held at the Linux Audio Conference 2010 in Utrecht, with five participants…

A history here below.

To organise the games yourself, get the code from:


///////////////////////////////////////////////////
// History, as it was on Mon May 3 15:47:13 2010.
///////////////////////////////////////////////////

// - 0:0:0 - (host)
a.startHistory;

// - 0:0:2.49 - (host)
(
Tdef( \updateTimes, {
a.updateTime = 90;
(10*60).wait; // 10 minutes
a.updateTime = 60;
(10*60).wait; // 10 minutes
a.updateTime = 30;
(10*60).wait; // 10 minutes
a.stopGames;
} );
);

// - 0:0:6.72 - (host)
a.asHost;

// - 0:0:7.69 - (host)
a.startGames

// - 0:0:11.8 - (tim)
a.me.meter

// - 0:0:11.97 - (host)
OlympicGui.useDocClass = true; // by default it is false, so the GUI method

// - 0:0:15.58 - (host)
b= a.makeGameGui( \host );

// - 0:0:15.59 - (lijon)
a.startHistory;

// - 0:0:19.16 - (lijon)
a.startGames

// - 0:0:27.64 - (host)
TdefAllGui.new;

// - 0:0:29.27 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=0.1|
var a = Dust.ar(rate!2);
a = CombL.ar(a,1,0.01,0.1);
Out.ar( out, a);
}
).share;
)

// - 0:0:31.43 - (host)
Tdef('updateTimes').play;

// - 0:0:47.43 - (host)
(
SynthDef( \sinEnv,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1|
Out.ar( out, SinOsc.ar( freq, 0, amp )*EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2 ) );
}
).share;
)

// - 0:0:53.29 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.25,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:0:55.3 - (host)
PdefAllGui.new;

// - 0:1:0.15 - (host)
Pdef('sinEnvs').play;

// - 0:1:4.25 - (tim)
(
SynthDef( \gray,
{ |out=0,amp=0.1|
Out.ar( out, LFClipNoise.ar(200) );
}
).share;
)

// - 0:1:7.78 - (host)
(
LFClipNoise Slope SharedOut Clip XFade IEnvGen Latch
welWindow theta hypot eq
);

// - 0:1:18.74 - (tim)
(
SynthDef( \lfc,
{ |out=0,amp=0.1|
Out.ar( out, LFClipNoise.ar(200) );
}
).share;
)

// - 0:1:18.88 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=0.1|
var a = Dust.ar(rate!2);
a = CombL.ar(a,1,0.01,0.1);
Out.ar( out, a*amp);
}
).share;
)

// - 0:1:28.11 - (tim)
x = Synth.new( \lfc, target: a.me );

// - 0:1:33.72 - (lijon)
x = Synth.new( \jl_thing, target: a.me );

// - 0:1:35.02 - (host)
(
Pdef( \sinEnvs,
Pmono(
\sinEnv,
\amp, 0.25,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:1:51.03 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.10,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:2:4.9 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=0.1,decay=0.1|
var a = Dust.ar(rate!2);
a = CombL.ar(a,1,0.01,decay);
Out.ar( out, a*amp);
}
).share;
)

// - 0:2:9.21 - (lijon)
x.set(\amp,0.2,\decay,0.2)

// - 0:2:14.17 - (tim)
y = Synth.new( \lfc, target: a.me );

// - 0:2:20.52 - (lijon)
x.set(\amp,0.2,\decay,0.7)

// - 0:2:34.04 - (oiata)
(
SynthDef( \pulse, {|out=0,amp=1|
ReplaceOut.ar( out, In.ar * SinOsc.ar( LFNoise1.ar( 0.3, 400, 800 )))
}).share;
);

// - 0:2:37.78 - (host)
(
Pmono Ppoisson Pfinval Pchain
atan degrad lcm leftShift
);

// - 0:2:39.39 - (tim)
y = Synth.new( \lfc, target: a.me );

// - 0:2:40.86 - (lijon)
x.set(\amp,0.2,\decay,0.7,\rate,0.05)

// - 0:3:0.01 - (host)
(
SynthDef( \lfcn2,
{ |out=0,amp=0.1, freq=500|
Out.ar( out, LFClipNoise.ar(freq)*amp );
}
).share;
)

// - 0:3:6.66 - (lijon)
x = Synth.new( \jl_thing, target: a.host );

// - 0:3:11.68 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \lfcn2,
\amp, 0.10,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:3:17.32 - (lijon)
x.set(\amp,0.5,\decay,0.7,\rate,0.05)

// - 0:3:17.44 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \lfcn2,
\amp, 0.01,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:3:21.08 - (host)
Pdef('sinEnvs').stop;

// - 0:3:23.57 - (lijon)
x.free;

// - 0:3:30.4 - (host)
a.host.freeAll;

// - 0:3:33.86 - (lijon)
x = Synth.new( \jl_thing, target: a.me );

// - 0:3:41.79 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnvs,
\amp, 0.0,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:3:43.66 - (lijon)
x.set(\amp,0.5,\decay,0.7,\rate,0.05)

// - 0:3:44.26 - (host)
Pdef('sinEnvs').play;

// - 0:3:50.28 - (lijon)
x.set(\amp,0.5,\decay,0.7,\rate,10)

// - 0:3:54.06 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.0,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:3:55.54 - (oiata)
x = Synth.new( \pulse, target: a.host; );

// - 0:3:57.86 - (lijon)
x.set(\amp,0.5,\decay,0.8,\rate,10)

// - 0:4:1.48 - (lijon)
x.set(\amp,0.4,\decay,0.8,\rate,10)

// - 0:4:1.87 - (tim)
x = Synth.new( \lfc3, target: a.me );

// - 0:4:4.15 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.01,
\out, Prand( [0,1], inf),
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ),
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:4:7.78 - (host)
(
DC Slew XOut RunningMax SelectX Linen TGrains
cpsmidi theta hypot ring4
);

// - 0:4:21.7 - (oiata)
(
SynthDef( \pulse, {|out=0,amp=0.1,in=0|
ReplaceOut.ar( out, In.ar(in) * SinOsc.ar( LFNoise1.ar( 0.3, 400, 800 )))
}).share;
);

// - 0:4:23.86 - (tim)
a.startGames

// - 0:4:25.34 - (oiata)
x.free;

// - 0:4:26.98 - (oiata)
x = Synth.new( \pulse, target: a.host; );

// - 0:4:30.23 - (tim)
a.me.meter

// - 0:4:35.59 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.01,
\out, Prand( [0,1], inf),
\degree, Pn( Pxrand( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ).sin * 2 + 1,
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:4:38.05 - (tim)
x = Synth.new( \lfc3, target: a.me );

// - 0:4:41.33 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.05,
\out, Prand( [0,1], inf),
\degree, Pn( Pxrand( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ).sin * 2 + 1,
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:4:48.51 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.1,
\out, Prand( [0,1], inf),
\degree, Pn( Pxrand( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ).sin * 2 + 1,
\octave, 6,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:4:56.24 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=0.1,decay=0.1|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025],decay));
Out.ar( out, a*amp);
}
).share;
)

// - 0:5:0.77 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.1,
\out, Prand( [0,1], inf),
\degree, Pn( Pxrand( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ).sin * 2 + 1,
\octave, Pxrand( [5,6,7],inf ),
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:5:13.89 - (lijon)
y.set(\amp,0.2)

// - 0:5:16.7 - (lijon)
x.set(\amp,0.2,\decay,0.8,\rate,10)

// - 0:5:19.04 - (lijon)
y = Synth.new( \jl_thing, target: a.me );

// - 0:5:30.29 - (lijon)
x.free;

// - 0:5:31.29 - (lijon)
y.set(\amp,0.2,\decay,0.8,\rate,10)

// - 0:5:35.38 - (oiata)
(
SynthDef( \ring, {|out=0,amp=0.1,in=0|
ReplaceOut.ar( out, Ringz.ar( In.ar(in), 500, 0.3 ))
}).share;
);

// - 0:5:36.46 - (lijon)
y.set(\amp,0.2,\decay,1.8,\rate,10)

// - 0:5:37.78 - (host)
(
Pbind Pxrand Prewrite Pgpar
sin frac amclip ring4
);

// - 0:5:40.53 - (lijon)
y.set(\amp,0.1,\decay,1.8,\rate,10)

// - 0:5:45.86 - (lijon)
y.set(\amp,0.1,\decay,3,\rate,10)

// - 0:5:48.64 - (lijon)
y.set(\amp,0.1,\decay,3,\rate,9)

// - 0:5:51.61 - (lijon)
y.set(\amp,0.1,\decay,3,\rate,8)

// - 0:5:57.8 - (host)
(
SynthDef( \jl_thing2,
{ |out=0,amp=0.1,rate=0.1,decay=0.1|
var a = Dust.ar(rate!2);
a = CombL.ar(a,1,0.01,decay);
Out.ar( out, a*amp*SinOsc.kr( 0.5, 0, 0.5 ));
}
).share;
)

// - 0:6:0.03 - (lijon)
y.set(\amp,0.1,\decay,8,\rate,8)

// - 0:6:3.04 - (oiata)
(
SynthDef( \ring, {|out=0,amp=0.1,in=0|
ReplaceOut.ar( out, Ringz.ar( In.ar(in), 500, 0.3 ))
}).share;
);

// - 0:6:4.01 - (oiata)
x = Synth.new( \pulse, target: a.host, addAction: \addToTail );

// - 0:6:4.25 - (lijon)
y.set(\amp,0.1,\decay,8,\rate,7)

// - 0:6:8.81 - (lijon)
y.set(\amp,0.1,\decay,8,\rate,6)

// - 0:6:11.38 - (oiata)
x.free;

// - 0:6:12.66 - (lijon)
y.set(\amp,0.1,\decay,9,\rate,6)

// - 0:6:15.59 - (lijon)
y.set(\amp,0.1,\decay,9,\rate,5)

// - 0:6:17.99 - (host)
~jlthing2 = Synth.new( \jl_thing2, target: a.me );

// - 0:6:18.02 - (lijon)
y.set(\amp,0.1,\decay,9,\rate,3)

// - 0:6:25.78 - (oiata)
x = Synth.new( \pulse, target: a.host, addAction: \addToTail );

// - 0:6:31.51 - (oiata)
x.free;

// - 0:6:32.26 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, LFClipNoise.ar(2000).atan ! 2 * -9.dbamp );
}
).share;
)

// - 0:6:33.14 - (oiata)
x = Synth.new( \pulse, target: a.host, addAction: \addToTail );

// - 0:6:34.93 - (tim)
x = Synth.new( \lfc3, target: a.me );

// - 0:7:7.78 - (host)
(
LinRand Hilbert OffsetOut Slope Rotate2 IEnvGen Convolution2L
coin exp max leftShift
);

// - 0:7:24.94 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=0.1,decay=0.1,cf=12000|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025],decay));
a = MoogFF.ar(a,12000,1);
Out.ar( out, a*amp);
}
).share;
)

// - 0:7:36.37 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.1,in=0|
ReplaceOut.ar( out, Ringz.ar( WhiteNoise.ar(amp), 500, 0.3 ))
}).share;
);

// - 0:7:41.5 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, LFClipNoise.ar(20000).atan ! 2 * -12.dbamp );
}
).share;
)

// - 0:7:44.34 - (host)
(
SynthDef( \sinEnv,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1|
Out.ar( out, SinOsc.ar( freq + (LinRand(10,500)) , 0, amp )*EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2 ) );
}
).share;
)

// - 0:7:57.27 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.1,in=0|
ReplaceOut.ar( out, Ringz.ar( WhiteNoise.ar(amp), 200, 0.3 ))
}).share;
);

// - 0:7:59.05 - (oiata)
z = Synth.new( \noise, target: a.host, addAction: \addToTail );

// - 0:8:5.41 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
);

// - 0:8:5.51 - (oiata)
z.free;

// - 0:8:9.97 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=3,decay=10,cf=12000|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025],decay));
a = MoogFF.ar(a,12000,1);
Out.ar( out, a*amp);
}
).share;
)

// - 0:8:12.94 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.01,in=0|
ReplaceOut.ar( out, Ringz.ar( WhiteNoise.ar(amp), 200, 0.3 ))
}).share;
);

// - 0:8:13.53 - (lijon)
y.free; y = Synth.new( \jl_thing, target: a.me );

// - 0:8:13.78 - (oiata)
z = Synth.new( \noise, target: a.host, addAction: \addToTail );

// - 0:8:18.25 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.1,
\out, Prand( [0,1], inf),
\degree, Pn( Pxrand( (0..10), 5 ), inf),
\dur, Pn( Pgeom( 0.05, 1.2, 10 ) ).sin * 2 + 1,
\octave, Phprand( (3..9),inf ),
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:8:23.97 - (oiata)
z.free;

// - 0:8:30.42 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.01,in=0|
ReplaceOut.ar( out, Ringz.ar( WhiteNoise.ar(amp), 100, 0.3 ))
}).share;
);

// - 0:8:32.27 - (oiata)
z = Synth.new( \noise, target: a.host, addAction: \addToTail );

// - 0:8:34.28 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=3,decay=10,cf=12000|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025],decay));
a = MoogFF.ar(a,cf,1);
Out.ar( out, a*amp);
}
).share;
)

// - 0:8:36.15 - (lijon)
y.free; y = Synth.new( \jl_thing, target: a.me );

// - 0:8:37.78 - (host)
(
Pmono Phprand PstepNfunc Pbindf
degrad distort - sumsqr
);

// - 0:8:37.98 - (oiata)
z.free;

// - 0:8:42.09 - (host)
(
Pdef( \sinEnvs,
Pbind(
\instrument, \sinEnv,
\amp, 0.1,
\out, Prand( [0,1], inf),
\degree, Pn( Pxrand( (0..10), 5 ), inf),
\dur, Pn( Phprand( 0.05, 1.2, inf ) ),
\octave, Phprand( (3..9),inf ),
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:8:47.07 - (lijon)
y.set(\amp,0.2,\decay,9,\rate,50,\cf,8000)

// - 0:8:49.37 - (lijon)
y.set(\amp,0.2,\decay,9,\rate,50,\cf,6000)

// - 0:8:51.2 - (lijon)
y.set(\amp,0.2,\decay,9,\rate,50,\cf,4000)

// - 0:8:52.9 - (lijon)
y.set(\amp,0.2,\decay,9,\rate,50,\cf,3000)

// - 0:8:55.04 - (host)
(
SynthDef( \ballpass,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1, rq=0.1, dens=100|
Out.ar( out, BAllPass.ar( Dust2.ar( dens ), freq, rq ) * EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:8:55.38 - (lijon)
y.set(\amp,0.2,\decay,9,\rate,50,\cf,2000)

// - 0:8:55.78 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.01,in=0|
Out.ar( out, Ringz.ar( WhiteNoise.ar(amp), 100, 0.3 ))
}).share;
);

// - 0:8:59.2 - (lijon)
y.set(\amp,0.2,\decay,9,\rate,50,\cf,1800)

// - 0:9:1.4 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 2,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, 6,
\dur, 4,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:9:2.78 - (host)
Pdef('ballpass').play;

// - 0:9:3.67 - (lijon)
y.set(\amp,0.2,\decay,7,\rate,50,\cf,1800)

// - 0:9:4.36 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.01,in=0,freq|
Out.ar( out, Ringz.ar( WhiteNoise.ar(amp), freq, 0.3 ))
}).share;
);

// - 0:9:5.48 - (lijon)
y.set(\amp,0.2,\decay,6,\rate,50,\cf,1800)

// - 0:9:7.08 - (lijon)
y.set(\amp,0.2,\decay,5,\rate,50,\cf,1800)

// - 0:9:9.88 - (lijon)
y.set(\amp,0.2,\decay,4,\rate,50,\cf,1800)

// - 0:9:10.81 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:9:13.09 - (lijon)
y.set(\amp,0.2,\decay,3,\rate,50,\cf,1800)

// - 0:9:13.23 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 2,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, 6,
\dur, 2,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:9:16.52 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.01,in=0,freq=400|
Out.ar( out, Ringz.ar( WhiteNoise.ar(amp), freq, 0.3 ))
}).share;
);

// - 0:9:17.47 - (oiata)
z = Synth.new( \noise, target: a.host, addAction: \addToTail );

// - 0:9:18.02 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 2,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, 6,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:9:19.2 - (lijon)
y.set(\amp,0.2,\decay,2,\rate,50,\cf,1800)

// - 0:9:22.1 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 2,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, 8,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:9:23.62 - (lijon)
y.set(\amp,0.2,\decay,2,\rate,60,\cf,1800)

// - 0:9:27.34 - (lijon)
y.set(\amp,0.2,\decay,0.5,\rate,60,\cf,1800)

// - 0:9:31.12 - (oiata)
z.set(\amp,0.005);

// - 0:9:37.31 - (lijon)
y.set(\amp,0.2,\decay,0.1,\rate,60,\cf,1800)

// - 0:9:39.12 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, RHPF.ar(LFClipNoise.ar(20000).atan ! 2 * -12.dbamp, 7000) );
}
).share;
)

// - 0:9:40.32 - (host)
(
SynthDef( \ballpass,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1, rq=0.1, dens=100|
Out.ar( out, BPF.ar( Dust2.ar( dens ), freq, rq ) * EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:9:40.87 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:9:46.09 - (lijon)
y.set(\amp,0.2,\decay,0.1,\rate,60,\cf,2000)

// - 0:9:48.44 - (lijon)
y.set(\amp,0.2,\decay,0.1,\rate,60,\cf,2200)

// - 0:9:50.52 - (host)
(
SynthDef( \ballpass,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1, rq=0.1, dens=100|
Out.ar( out, RLPF.ar( Dust2.ar( dens ), freq, rq ) * EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:9:50.86 - (lijon)
y.set(\amp,0.2,\decay,0.1,\rate,60,\cf,2500)

// - 0:9:54.66 - (oiata)
z.set(\freq,[201,205]);

// - 0:9:54.74 - (lijon)
y.set(\amp,0.2,\decay,0.1,\rate,60,\cf,2700)

// - 0:10:7.78 - (host)
(
GrainBuf Hilbert AbstractOut MostChange SelectXFocus EnvGen PV_BinShift
linrand cosh thresh fold2
);

// - 0:10:27.9 - (host)
(
SynthDef( \ballpass,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1, rq=0.1, dens=100|
Out.ar( out, RLPF.ar( Dust2.ar( dens ), freq + linrand(100,200), rq ) * EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:10:33.44 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=3,decay=10,cf=12000|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025]*4,decay));
a = MoogFF.ar(a,cf,1).cosh;
Out.ar( out, Limiter(a)*amp);
}
).share;
)

// - 0:10:47.44 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=3,decay=10,cf=12000|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025]*4,decay));
a = MoogFF.ar(a,cf,1).cosh;
Out.ar( out, Limiter(a)*amp);
}
).share;
)

// - 0:10:48.38 - (oiata)
z.free;

// - 0:10:53.58 - (oiata)
(
Pdef(\x,
Pbind(
\instrument, \noise,
\server, a.s, // a.s chooses the republic server
\where, Prand([\host], 8), // where controls the targer
\dur, 1.rand,
\legato, 0.3,
\freq, Pwhite().linexp(0, 1, 500, 2000)
).trace
).play;
)

// - 0:10:54.76 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, RHPF.ar(LFClipNoise.ar(20000).atan ! 2 * -12.dbamp, [7000, 7010], 0.8) );
}
).share;
)

// - 0:10:55.87 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:11:4.62 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=3,decay=4,cf=2000|
var a = Dust.ar(rate!2);
a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025]*4,decay));
a = MoogFF.ar(a,cf,1).cosh;
Out.ar( out, Limiter(a)*amp);
}
).share;
)

// - 0:11:6.06 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 2,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, Pmeanrand( 5, 10, inf),
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:11:6.45 - (lijon)
y.free; y = Synth.new( \jl_thing, target: a.me );

// - 0:11:11.8 - (lijon)
y.set(\amp,0.9,\decay,0.1,\rate,60,\cf,2700)

// - 0:11:14.94 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, RHPF.ar(LFClipNoise.ar(20000).atan ! 2 * -12.dbamp, [7000, 7010], 0.4) );
}
).share;
)

// - 0:11:16.47 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:11:17.9 - (lijon)
y.set(\amp,0.9,\decay,0.2,\rate,60,\cf,2700)

// - 0:11:21.31 - (lijon)
y.set(\amp,0.9,\decay,0.2,\rate,60,\cf,7700)

// - 0:11:23.01 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, RHPF.ar(LFClipNoise.ar(20000).atan ! 2 * -12.dbamp, [7000, 7010], 0.3) );
}
).share;
)

// - 0:11:24.4 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:11:28.18 - (lijon)
y.set(\amp,0.9,\decay,1,\rate,60,\cf,7700)

// - 0:11:31.92 - (lijon)
y.set(\amp,0.9,\decay,1,\rate,60,\cf,5700)

// - 0:11:37.78 - (host)
(
Pmono Pmeanrand Pclutch Pbus
ref coin hypotApx hypot
);

// - 0:11:40.68 - (lijon)
y.set(\amp,0.9,\decay,0.1,\rate,60,\cf,5700)

// - 0:11:42.76 - (host)
(
SynthDef( \ballpass,
{ |out=0,amp=0.1,freq=440, t_trig=1, dur=1, rq=0.1, dens=100|
Out.ar( out, RHPF.ar( Dust2.ar( dens ), freq + linrand(100,200), rq ) * EnvGen.kr( Env.perc, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:11:52.45 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 5,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, Pmeanrand( 5, 10, inf),
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:11:54.89 - (lijon)
y.set(\amp,0.9,\decay,0.1,\rate,60,\cf,15700)

// - 0:11:58.99 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 5,
\rq, 0.01,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, Pmeanrand( 3, 4, inf),
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:11:59.57 - (lijon)
y.set(\amp,0.9,\decay,0.1,\rate,10,\cf,15700)

// - 0:12:7.9 - (lijon)
y.set(\amp,0,\decay,0.1,\rate,10,\cf,15700)

// - 0:12:8.16 - (host)
(
Pdef( \ballpass,
Pbind(
\instrument, \ballpass,
\amp, 5,
\rq, 0.05,
\dens, 1000,
\degree, Pn( Pshuf( (0..10), 5 ), inf),
\octave, Pmeanrand( 3, 4, inf),
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host // where controls the targer
)
)
)

// - 0:12:8.5 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, FreqShift.ar(RHPF.ar(LFClipNoise.ar(20000).atan ! 2 * -12.dbamp, [7000, 7010], 0.3), -3000) );
}
).share;
)

// - 0:12:11.49 - (lijon)
y.set(\amp,0.5,\decay,0.1,\rate,10,\cf,15700)

// - 0:12:18.46 - (host)
(
SynthDef( \ringmod,
{ |out=0,amp=0.1,freq=440, t_trig=1, fm= 100, dur=1, rq=0.1, dens=100|
ReplaceOut.ar( out,
SinOsc.ar( freq, 0, fm ) * In.ar(0 )
* EnvGen.kr( Env.sine, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:12:20.1 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:12:20.38 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.01,in=0,freq=400|
ReplaceOut.ar( out, RLPF.ar( In.ar(0), freq, 0.3 ))
}).share;
);

// - 0:12:21.17 - (lijon)
y.set(\amp,0.5,\decay,0.1,\rate,1,\cf,15700)

// - 0:12:24.74 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.25,
\rq, 1,
\dens, 1000,
\degree, Pbrown( 0, 12, 2 ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 3,
\fm, 40,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:12:26.13 - (host)
Pdef('ringmod').play;

// - 0:12:30.01 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.1,in=0,freq=400|
ReplaceOut.ar( out, RLPF.ar( In.ar(0), freq, 0.3 ))
}).share;
);

// - 0:12:31.78 - (tim)
(
SynthDef( \lfc3,
{ |out=0,amp=0.1|
Out.ar( out, FreqShift.ar(RHPF.ar(LFClipNoise.ar(20000).atan ! 2 * -12.dbamp, [7000, 7010], 0.3), -7000) );
}
).share;
)

// - 0:12:34.97 - (tim)
(
x.free;
x = Synth.new( \lfc3, target: a.me );
)

// - 0:12:37.01 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.125,
\rq, 1,
\dens, 1000,
\degree, Pbrown( 0, 12, 2 ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 3,
\fm, 40,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:12:37.78 - (host)
(
LFDNoise3 FreqShift SharedIn LinLin SelectXFocus EnvGen PV_RandComb
ratiomidi cpsmidi leftShift amclip
);

// - 0:12:46.03 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 1,
\dens, 1000,
\degree, Pbrown( 0, 12, 2 ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 3,
\fm, 40,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:12:48.4 - (lijon)
y.set(\amp,0.5,\decay,0.1,\rate,1,\cf,15700)

// - 0:12:55.22 - (lijon)
y.set(\amp,0.5,\decay,10,\rate,1,\cf,5700)

// - 0:12:57.99 - (oiata)
z = Synth.new( \return, target: a.host, addAction: \addToTail );

// - 0:13:2.89 - (tim)
(
SynthDef(\xxy, {|out, sustain = 10, freq = 440|
var env = Line.kr(0.1, 0, sustain, doneAction: 2);
var son = PitchShift.ar(LinCongC.ar(freq * [1, 1.2, 1.5, 1.7]).sum, pitchRatio: 2 + LFNoise0.kr(3.23));
Out.ar(out, son * env);
}).share;
)

// - 0:13:3.63 - (host)
(
SynthDef( \ringmod,
{ |out=0,amp=0.1,freq=440, t_trig=1, fm= 100, dur=1, rq=0.1, dens=100|
ReplaceOut.ar( out,
SinOsc.ar( freq, 0, fm ) * In.ar(0,2 )
* EnvGen.kr( Env.sine, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:13:4.77 - (lijon)
y.free

// - 0:13:5.37 - (tim)
(
SynthDef(\xxy, {|out, sustain = 10, freq = 440|
var env = Line.kr(0.1, 0, sustain, doneAction: 2);
var son = PitchShift.ar(LinCongC.ar(freq * [1, 1.2, 1.5, 1.7]).sum, pitchRatio: 2 + LFNoise0.kr(3.23));
Out.ar(out, son * env);
}).share;
)

// - 0:13:7.7 - (oiata)
z.free;

// - 0:13:11.32 - (tim)
(
p = Pdef(\x,
Pbind(
\instrument, \xxy,
//\server, a.s, // a.s chooses the republic server
\server, a.me, // a.s chooses the republic server
//\where, Prand([\host], 8), // where controls the targer
\where, Prand([\host], 208), // where controls the targer
\dur, 8,
\legato, Pwhite(1, 2),
\freq, Pwhite().linexp(0, 1, 5000, 20000)
).trace
).play;
)

// - 0:13:21.69 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.1,in=0,freq=400|
ReplaceOut.ar( out, RLPF.ar( In.ar(0), freq, 0.1 ))
}).share;
);

// - 0:13:22.73 - (oiata)
z = Synth.new( \return, target: a.host, addAction: \addToTail );

// - 0:13:29.4 - (oiata)
z.free;

// - 0:13:30.84 - (tim)
(
SynthDef(\xxy, {|out, sustain = 10, freq = 440|
var env = Line.kr(0.1, 0, sustain, doneAction: 2);
var son = PitchShift.ar(LinCongC.ar(freq * [1, 1.2, 1.5, 1.7]).sum, pitchRatio: 2 + LFNoise0.kr(3.23));
Out.ar(out, son * env);
}).share;
)

// - 0:13:33.97 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 1,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], 12 ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 3,
\fm, 40,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:13:37.78 - (host)
(
Pbind Pshuf Pstutter Plazy
reciprocal sum3rand round <
);

// - 0:13:38.29 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 1,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], 12 ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, 1,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:13:43.16 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.1,in=0,freq=400|
ReplaceOut.ar( out, RLPF.ar( In.ar(in), freq, 0.1 ))
}).share;
);

// - 0:13:43.82 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 1,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], 12 ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, 0.3,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:13:44.48 - (oiata)
z = Synth.new( \return, target: a.host, addAction: \addToTail );

// - 0:13:46.54 - (tim)
(
SynthDef(\xxy, {|out, sustain = 10, freq = 440|
var env = Line.kr(0.1, 0, sustain, doneAction: 2);
var son = PitchShift.ar(LinCongC.ar(freq * [1, 1.2, 1.5, 1.7]).sum, pitchRatio: 2 + LFNoise0.kr(3.23)) ! 2;
Out.ar(out, son * env);
}).share;
)

// - 0:13:50.02 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 1,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, 0.3,
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:14:2.23 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 1,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, Pshuf( [0.3,0.5,0.2,0.6], inf ),
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:14:24.1 - (oiata)
z = Synth.new( \noise, target: a.me, addAction: \addToTail );

// - 0:14:35.71 - (oiata)
(
SynthDef( \noise, {|out=0,amp=0.1,in=0,freq=400|
ReplaceOut.ar( out, RLPF.ar( In.ar(in), freq, 0.1 ))
}).share;
);

// - 0:14:37.78 - (host)
(
LFClipNoise Resonz DiskIn Clip Rotate2 EnvGen Delay2
not asInteger ring3 rotate
);

// - 0:14:38.19 - (oiata)
z = Synth.new( \return, target: a.me, addAction: \addToTail );

// - 0:14:51.42 - (lijon)
y.free; y = Synth.new( \jl_thing, target: a.me );

// - 0:14:53.74 - (oiata)
z.set(\amp,0.7);

// - 0:14:57.06 - (host)
(
SynthDef( \ringmod,
{ |out=0,amp=0.1,freq=440, t_trig=1, fm= 100, dur=1, rq=0.01, dens=100|
ReplaceOut.ar( out,
Resonz.ar( In.ar(0,2), freq, rq )
* EnvGen.kr( Env.sine, t_trig, timeScale: dur, doneAction: 2) );
}
).share;
)

// - 0:14:58.83 - (oiata)
z = Synth.new( \return, target: a.me, addAction: \addToTail );

// - 0:15:8.73 - (oiata)
(
SynthDef( \return, {|out=0,amp=0.1,in=0,freq=400|
ReplaceOut.ar( out, RLPF.ar( In.ar(in), freq, 0.1 ))
}).share;
);

// - 0:15:11.17 - (oiata)
z = Synth.new( \return, target: a.me, addAction: \addToTail );

// - 0:15:13.69 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 0.4,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, Pshuf( [0.3,0.5,0.2,0.6], inf ),
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:15:14.18 - (tim)
a.me.meter

// - 0:15:18.17 - (oiata)
z = Synth.new( \return, target: a.host, addAction: \addToTail );

// - 0:15:24.51 - (lijon)
(
SynthDef( \jl_thing,
{ |out=0,amp=0.1,rate=3,decay=4,cf=2000|
// var a = Dust.ar(rate!2);
var a;
// a = Splay.ar( CombL.ar(a,1,[0.01,0.005,0.0025]*0.25,decay));
// a = MoogFF.ar(a,cf,1,10).cosh;
a = {SinOsc.ar(1000.rand+50,0,10*LFNoise1.ar(0.1)).sin}!30;
a = Splay.ar(a);
Out.ar( out, Limiter(a)*amp);
}
).share;
)

// - 0:15:24.55 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 0.4,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, Pshuf( [0.3,0.5,0.2,0.6]/5, inf ),
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:15:24.85 - (oiata)
z.set(\amp,0.1);

// - 0:15:27.11 - (tim)
(
p = Pdef(\x,
Pbind(
\instrument, \xxy,
//\server, a.s, // a.s chooses the republic server
\server, a.me, // a.s chooses the republic server
//\where, Prand([\host], 8), // where controls the targer
\where, Prand([\host], 208), // where controls the targer
\dur, 8,
\legato, Pwhite(1, 2),
\freq, Pwhite().linexp(0, 1, 50, 200)
).trace
).play;
)

// - 0:15:31.26 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 0.4,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 5,
\fm, 40,
\dur, Pshuf( [0.3,0.5,0.2,0.6]/2, inf ),
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:15:31.55 - (lijon)
y.free; y = Synth.new( \jl_thing, target: a.me );

// - 0:15:36.11 - (lijon)
y.set(\amp,0.5)

// - 0:15:37.44 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 0.4,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, 6,
\fm, 40,
\dur, Pshuf( [0.3,0.5,0.2,0.6]/2, inf ),
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:15:37.78 - (host)
(
Pbind Pwhite Preject Pbus
sin ratiomidi hypot sumsqr
);

// - 0:15:40.91 - (lijon)
y.set(\amp,1)

// - 0:15:50.02 - (lijon)
y.free; y = Synth.new( \jl_thing, target: a.host );

// - 0:15:50.58 - (tim)
(
p = Pdef(\x,
Pbind(
\instrument, \xxy,
//\server, a.s, // a.s chooses the republic server
\server, a.me, // a.s chooses the republic server
//\where, Prand([\host], 8), // where controls the targer
\where, Prand([\host], 208), // where controls the targer
\dur, 8,
\legato, Pwhite(1, 2),
\freq, Pwhite().linexp(0, 1, 5, 20)
).trace
).play;
)

// - 0:15:53.45 - (lijon)
y.set(\amp,1)

// - 0:15:56.06 - (host)
(
Pdef( \ringmod,
Pbind(
\instrument, \ringmod,
\amp, 0.05,
\rq, 0.4,
\dens, 1000,
\degree, Pshuf( [0,2,3,4], inf ),
// Pn( Pshuf( (0..10), 5 ), inf),
\octave, Pshuf( [6,8,5,3,9,7,8], inf ),
\fm, 40,
\dur, Pshuf( [0.3,0.5,0.2,0.6]/2, inf ),
\server, a.s, // a.s chooses the republic server
\where, \host, // where controls the targer
\addAction, \addToTail
)
)
)

// - 0:16:4.16 - (lijon)
x.free;

// - 0:16:6.32 - (lijon)
y.free

// - 0:16:22 - (tim)
p.free

// - 0:16:31.48 - (oiata)
(
SynthDef( \dust, {|out=0,amp=0.1,in=0,freq=400|
ReplaceOut.ar( out, Dust.ar(20))
}).share;
);

// - 0:16:37.78 - (host)
(
Silent FreqShift In Integrator Rotate2 Line PulseDivider
floor rand2 wrap2 difsqr
);

// - 0:16:48.83 - (oiata)
q = Synth.new( \dust, target: a.host, addAction: \addToTail );

// - 0:16:56.6 - (tim)
p.free

// - 0:17:0.93 - (oiata)
q.free;

Events at the Linux Audio Conference

Wednesday, April 21st, 2010

At the LAC2010 (May 1-4, 2010), I’ll be quite a busy bee!

The program:

  • Saturday – 20.30 – Code Livecode Live – performance – SETUP (MediaLab)
  • Sunday – all day – SuperCollider workshops – beginner’s and advanced levels
  • Monday – 14:45 – 5 years of using SuperCollider in real-time interactive performances and installations – retrospective analysis of Schwelle, Chronotopia and Semblance – Paper Presentation – Large College room
  • Monday – 21:00 – Olympic LiveCoding – SC livecoding Jam-Session – Concert – SJU Jazzpodium – Club
  • Tuesday – 11:30 – Sense/Stage – low cost, open source wireless sensor and data sharing infrastructure for live performance and interactive realtime environments – Paper Presentation – Large College room

32bit sclang on 64bit linux

Monday, August 3rd, 2009

It is now no longer necessary to have a 32bit chroot to have sclang 32bit and scsynth 64bit side by side on your linux machine, since Tim Blechmann committed a patch for this.

From the LINUX README:

Note that the language will only build 32bit. To compile the language as
32bit binary on a 64bit installation, a multilib compiler and 32bit
libraries are required (on debian systems, the packages are gcc-multilib
g++-multilib, ia32-libs, libc6-dev-i386 and lib32asound2-dev).

This doesn’t cover libcwiid support yet (for the wiimote).

Using this guide on how to use 32bit apps on 64bit linux on Debian, I came to these instructions.

Find the current link to the download of the libcwiid package, and the dev package of it on Debian.org, for i386 architecture.


$ wget http://http.us.debian.org/debian/pool/main/c/cwiid/libcwiid1_0.6.00+svn184-1+b1_i386.deb
$ wget http://http.us.debian.org/debian/pool/main/c/cwiid/libcwiid1-dev_0.6.00+svn184-1+b1_i386.deb
$ wget http://http.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_4.42-2_i386.deb
$ wget http://http.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_4.42-2_i386.deb

$ sudo dpkg -X libcwiid1_0.6.00+svn184-1+b1_i386.deb /emul/ia32-linux/
$ sudo dpkg -X libcwiid1-dev_0.6.00+svn184-1+b1_i386.deb /emul/ia32-linux/
$ sudo dpkg -X libbluetooth3_4.42-2_i386.deb /emul/ia32-linux/
$ sudo dpkg -X libbluetooth-dev_4.42-2_i386.deb /emul/ia32-linux/

libsndfile was also missing:


$ wget http://http.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.18-2_i386.deb
$ wget http://http.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1-dev_1.0.18-2_i386.deb
$ sudo dpkg -X libsndfile1_1.0.18-2_i386.deb /emul/ia32-linux/
$ sudo dpkg -X libsndfile1-dev_1.0.18-2_i386.deb /emul/ia32-linux/

Then doing a:
scons -c install
in the old 32bit chroot to make sure everything there is out of the way.
Actually, I had made a symlink… so to remove:
$ sudo rm /usr/local/share/SuperCollider

(If you have nothing else anymore that needs a 32bit chroot, then you can delete the whole tree. I still need it for Animata).

Now a:

$ scons
$ scons install

will smoothly install sclang with WiiMote support.

(Note scons still checks for cwiid as a 64bit lib, rather than 32bit, so you need to have both)

—-
libicu support
I am just in the process of adding this to work on Linux, so it’s not in svn yet (but I just posted the patch to the sc-mailinglist).

You need to install the package
lib32icu-dev
to have it find the library to link to.

2.6.29 realtime kernel for Debian

Saturday, May 30th, 2009

I’ve finally sat down and tried to make a realtime kernel for Debian, for my 64bit machine.
I followed the instructions I found in this post on the Debian forums.

First, I got the Debian sources for 2.6.29, from my repository (so using synaptic).

It puts the sources in /usr/src.

Then I got the latest realtime patches from http://www.kernel.org/pub/linux/kernel/projects/rt/

Then I made a dir in my home directory


mkdir kernel
cd kernel
cp /usr/src/linux-source-2.6.29.tar.gz .
tar -xf linux-source-2.6.29.tar.gz
mv linux-source-2.6.29 linux-2.6.29-source-rt
cd linux-2.6.29-source-rt
bzcat ../patch-2.6.29.4-rt16.bz2 |patch -p1

I added this to the Makefile:

EXTRAVERSION = -rt16

To start from my current kernel configuration
make oldconfig

Then I got a whole bunch of questions, most of which I answered taking the default options. Only for the realtime-preemption question I chose option 4, the realtime option.

I looked at the options with menuconfig, but didn’t really change anything more there. The timer frequency mentioned in the post above seems to be preceded by the dynamic ticks option, which was turned on.
make menuconfig

I had to unselect “staging” and the “comedi” drivers as these caused errors during building, and according to some messages on LAU I don’t really need it.

Here is the configuration for the kernel, as I ended up with it (I also compiled ext3 support into the kernel, rather than as a module, since my main filesystem is ext3): .config

Build a kernel the Debian way:
make-kpkg clean
time fakeroot make-kpkg --initrd -rev mz1 kernel_image kernel_headers

To also build a source package:

time fakeroot make-kpkg --initrd -rev mz1 kernel_image kernel_headers kernel_source

This will take a while.

Your new kernel & headers now live in ../kernel Use dpkg -i to install (as root).
dpkg -i ../linux-headers-*.deb ../linux-image-*.deb

So good so far… but the kernel didn’t boot yet…
and the initrd file was missing

So with the initramfs-tools from the debian repository,
I did (as root)
mkinitramfs -o /boot/initrd.img-2.6.29-rt16 2.6.29-rt16
which created the initrd image.

Also editing it appropriately in grub (/boot/grub/menu.lst) so that the boot process knows about it.


The initramfs missing is due to this (thanks to Jan Weil, on the linux audio user list).

This might be related to a recent change in Debian’s kernel-package (are we talking about the unstable branch?). Check /usr/share/doc/kernel-package/NEWS.Debian.gz and /usr/share/doc/kernel-package/README.gz in particular:

“Note that you will have to arrange for the actual initrd creation to take place by installting a script like /usr/share/kerne-package/examples/etc/kernel/post{inst,rm}.d/yaird or, alternately, /usr/share/kerne-package/examples/etc/kernel/post{inst,rm}.d/initramfs
into the correspondung directories /etc/kernel/post{inst,rm}.d, since the kernel-postinst does not arrange for the initramfs creator to be called. You can thus select your own; initramfs-tools or yaird.”


In /etc/security/limits.conf you also need something like this:

Add the following lines to the bottom of the file: (Must do this as root, or with sudo)
@audio – rtprio 100
@audio – nice -10
@audio – memlock 400000

And add yourself and any other audio user to the group audio.


My RME multiface card did not work with this kernel yet.
Similar problems had been reported elsewhere, and a fix from Tim Blechmann can be found here.

Here is the patched file:
/sound/pci/rme9652/hdsp.c


Then Jan Weil also pointed out to me that this could be useful:

Did you tune your interrupt priorities yet? I use Rui’s rtirq
http://www.rncbc.org/jack/
along with this /etc/rtirq.conf
http://www.jawebada.de/bucket/rtirq.conf.

Actually Debian has a package for this, but that one is a bit outdated (the 2007 version). So I took the one from Rui’s website, and installed the script to /etc/init.d/, with a symbolic link to it from /etc/rc3.d/S99rtirq.

and the configuration file to:

/etc/default/rtirq.conf


(Note, comments are welcome, but they have to be authorized by me, before they appear online.)

NIME 2009

Sunday, May 10th, 2009

I will be presenting our paper “Sharing Data in Collaborative, Interactive Performances: the SenseWorld DataNetwork” at the NIME 2009, June 4-6, at Carnegie Mellon University, Pittsburg, PA, USA

I will also be doing a livecode performance with SuperCollider there.

EXTENDED TERRITORY

Wednesday, April 22nd, 2009

CESSA, MUSAC CONCORDIA & L’ENVERS PRESENT:

EXTENDED TERRITORY
New dimensions of sound and performance

Free two-part lecture and workshop

Thursday April 23, 2009
Concordia EV Building
1515 St-Catherine O.
EV 1.615 (York Ampitheatre)

13h – Marije Baalman: Wave Field Synthesis Lecture
15h – Hans Tammen: Endangered Guitar & Die Schrauber Workshop

All are welcome.

——-

DIE SCHRAUBER CONCERT
Hans Tammen – endangered guitar, live sound processing
Joker Nies – omnichord, circuit bent instruments
Mario DeVega – SPK®, glitch sampling

With Pinkshalabi
Sam Shalabi – guitar
Gordon Allen – trumpet
Sam Vipond – drums + laptop
Alexandre St-Onge – bass

Thursday April 23, 2009
L’envers
185 Van Horne
20h
$10

http://www.myspace.com/lenvers185

SuperCollider Symposium 2009

Tuesday, March 17th, 2009

I will be presenting two talks:

  • one on the SenseWorld DataNetwork, and
  • one on cross platform issues in the development of SuperCollider (slides)

and do a livecoding performance at the

SuperCollider Symposium 2009

which is held from April 9th to 12th, 2009 at Wesleyan University.