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

From: nescivi <nescivi@email-addr-hidden>
Date: Sun Apr 30 2006 - 02:01:37 EEST

(// 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;
Received on Sun Apr 30 12:15:03 2006

This archive was generated by hypermail 2.1.8 : Sun Apr 30 2006 - 12:15:04 EEST