[linux-audio-user] the sc-patch I just played with on the linux audio night in Karlsruhe

nescivi nescivi at gmail.com
Sat Apr 29 19:01:37 EDT 2006


(//	 if a usb sensorinterface is connected to this computer:
q = q ?? ();
Routine{
	LID.closeAll;
	1.0.wait;
	LID.buildDeviceTable;
	2.0.wait;
	LID.closeAll;
	NASCens_LID.initNASCens; // initialise the deviceSpec
	q.device = LID.deviceTable.detect( {|it,i| it[1].vendor == 0x1043 } );
	q.device.at(0).postln;
	q.lid = NASCens_LID.new( q.device.at(0) );
	q.lid.initActions;
}.play( AppClock );
)
q.lid.dumpCaps
 // preparing the server:
s = Server.local.boot;

(
SynthDef( "writememory", { arg in=0, buf=0, amp=1, prevlev=0.5;
	RecordBuf.ar( In.ar(in,2), buf, recLevel: amp, preLevel: prevlev, loop: 1 );
}).load(s);

SynthDef( "playmemory", { arg out=0, buf=0, rate=1, amp=0.5, lt = 5, freq=400;
	Out.ar(out, Lag.kr(amp,lt)*LPF.ar(PlayBuf.ar( 2, buf,
Lag.kr(-1*rate,lt), loop: 1 ),freq));
}).load(s);

)

// see if it's all working:
q.lid.sensordata

( // prepare groups on server
q.controlgroup = Group.new(s, \addToHead );
q.maingroup = Group.new(s, \addToHead );
q.subgroups = Array.fill(4,0);
q.subgroups.do{|it,i| q.subgroups.put( i, Group.new( q.maingroup ) ) };
q.recgroup = Group.new(s, \addToTail) ;
q.playgroup = Group.new( s, \addToTail );
s.queryAllNodes;
q.membuf = Buffer.alloc(s, 44100*90.0,2);
)

(
q.args = Array.fill( 4, { [\amp,0.25,\out,0] } );
q.durs = Array.fill( 4, { Pseq( [0.25],inf ).asStream } );
q.freqs = Array.fill( 4, { Pseq( [400],inf ).asStream } );
q.streams = Array.fill(4,0);
q.streams.do{ |it,i|
	q.streams.put(i, Task({
		var dur,freq;
		loop {
			dur = q.durs.at(i).next;
			freq = q.freqs.at(i).next;
			x = Synth.new( "lac"++i, q.args.at(i), target:q.subgroups.at(i) );
			x.set( \dur, dur );
			x.set( \freq, freq );
			//			x.postln;
			dur.next.wait;
			}
	});
	);
};


q.recsynth = Synth.tail(q.recgroup,"writememory",[\buf,q.membuf.bufnum,\in,0,\amp,0.5,\prevlev,
0.9]);

q.playsynth = Synth.tail(q.playgroup,"playmemory",[\buf,q.membuf.bufnum,\out,0,\amp,0.4]);

			
~start = { |id| q.streams.at(id).play; q.lid.setLEDState( id, 1 ); };
~stop = { |id| q.subgroups.at(id).release(5.0); q.streams.at(id).stop;
q.lid.setLEDState( id, 0 ); };

)

(

q.lightcontrol1 = Bus.control( s, 1 );
q.lightcontrol2 = Bus.control( s, 1 );
q.potcontrol = Bus.control( s, 1 );
q.updatecontrols = Routine{
	loop {
		q.lightcontrol1.set( q.lid.sensordata[0] );
		q.lightcontrol2.set( q.lid.sensordata[2] );
		q.potcontrol.set( q.lid.sensordata[12] * 800 );
		0.005.wait;
	}
};
	
)

(
q.updatepres = [
	Routine{
		loop {
			q.subgroups[0].set(\freqmod, [2.0,0.8].asSpec.map( q.lid.sensordata[3] ) );
			0.005.wait;
		}
	},
Routine{
	loop {
		q.subgroups[1].set(\freqmod, [2.0,0.8].asSpec.map( q.lid.sensordata[4] ) );
		0.005.wait;
	}
},
Routine{
	loop {
			q.subgroups[2].set(\freqmod, [2.0,0.8].asSpec.map( q.lid.sensordata[3] ) );
			0.005.wait;
		}
	},
Routine{
		loop {
			q.subgroups[3].set(\freqmod, [2.0,0.8].asSpec.map( q.lid.sensordata[4] ) );
		0.005.wait;
		}
	}
];

~startcontrol = { |id| q.updatepres.at(id).play; q.lid.setLEDState(
id+4, 1 ); };
~stopcontrol = { |id| q.updatepres.at(id).stop; q.lid.setLEDState( id+4, 0 ); };

)

// update buses
q.updatecontrols.play
//q.updatelight.stop;

q.playsynth.busMap( \rate, q.lightcontrol1 );
q.playsynth.busMap( \freq, q.potcontrol );
q.recsynth.busMap( \reclevel, q.lightcontrol2 );

s.prepareForRecord;
s.record;


// from here on, the code was changed live:

(
// create a new synthdef:
SynthDef( "lac"++3, { |out=0,dur=0.25,amp=0.25,gate=1,freq=200, freqmod=1.0|
	Out.ar( out,
		CombL.ar(
			Mix.new(
				//				BPF.ar( WhiteNoise.ar( 1.0 ), freq*freqmod.lag(0.1), 0.2 );
				SinOsc.ar( //freq*freqmod.lag(0.05)
					Array.geom( 3, freq*freqmod.lag(0.05), 1.5 ), mul: Array.geom( 4,
0.5, 0.9 )
				)
			)
			, 0.2, 0.1, 0.15 )
		*
		EnvGen.kr( Env.cutoff(1), gate, doneAction:2) *
		EnvGen.kr( Env.sine(1.0), levelScale: amp, timeScale:dur, doneAction: 2 ) );
}).send(s);

)
Env.sine( 1 ).plot;
Env.perc(0.05,0.95).plot

q.durs[2] = Pseq([0.25,0.5,0.25,0.125,0.25]*0.1,inf).asStream;
q.freqs[2] = Pseq([400,350,360,370,205],inf).asStream;
q.args[2] = [\amp,0.2,\out,1];
q.args[3] = [\amp,0.2,\out,0];
q.freqs[3] = Pseq(Array.geom( 6, 100, 1.4 ),inf).asStream;
q.durs[3] = Pseq([1.0,0.4],inf).asStream;

~start.value(1);
~stop.value(1);

~startcontrol.value(1);
~stopcontrol.value(1);

//q.subgroups[0].busMap( \freqmod, q.prescontrol1 );

(
q.updatepres.put( 0,
	Routine{
		loop {
			q.subgroups[0].set(\freqmod, [2.0,0.8].asSpec.map( q.lid.sensordata[3] ) );
			0.005.wait;
		}
	}
);
)

s.stopRecording;



More information about the Linux-audio-user mailing list