(
d = (); // d "émule" notre classe
// "méthodes"
d.init = { |self, serveur| //méthode
self.serveur = serveur ? Server.default;
self.synths = [];
self.serveur.waitForBoot { d.sendDefs } ;
};
d.sendDefs = {|self| //variable d'instance
self.funcDefs.keysValuesDo {|k, f|
SynthDef(k, f).send(self.serveur)
};
"les synthdefs sont envoyes".postln;
};
d.sendSynths = {|self|
s.sendBundle(nil,
[\s_new, 'source', 2000, 0, 1, \outBus, 20],
[\s_new, \ecoute, 2001, 3, 2000, \outBus, 0],
[\s_new, \imitation, 2002, 1, 1, \freqBus, 0, \volBus, 1, \outBus, 22],
[\s_new, \mix, 2003, 1, 1, \in1, 20, \in2, 22]
)
};
d.updateSynths = {|self|
self.sendDefs;
{0.1.wait;
self.serveur.sendMsg(\g_freeAll, 1);
self.sendSynths;
}.fork;
};
d.catchPitch = {|self, bool= true|
if(bool)
{
d.responder = OSCresponder(nil, '/tr', {arg time, responder, msg, addr;
var val;
val = msg[3].trunc(0.01);
if( msg[2]==0)
{Post << "---> " << "hauteurs: " << val << "\n"}
{Post << " volumes: " << val << "\n"} ;
// s.sendMsg(\n_set, c.nodeID, \freq, fr);
}).add;
}
{d.removeResponder}
};
//privé
d.removeResponder = {|self| d.responder.remove; Post << "plus de responder pour le pitch" << "\n" } ;
)
(
d.sources = ( // dictionnaire de fonctions à choisir pour la source
sine: { |outBus=20|
var trig, seq, freq;
trig = Impulse.kr(8);
seq = Dbrown(1, 10, 1, inf);
freq = Demand.kr(trig, 0, seq * 100);
seq = SinOsc.ar(freq * ({LFNoise2.kr(0.1, 0.5, 1)}!2).midiratio).cubed.cubed.scaleneg(TRand.kr(-1, 1, trig));
Out.ar(outBus, seq * TRand.kr(0.01, 1, trig));
},
pulse: { |outBus=20|
var sig, freq, trig, rand;
freq = MouseY.kr(0, 24.1);
trig = freq%1 - 0.01;
rand = TRand.kr(0.01, 1, trig);
sig = Pulse.ar((freq.floor+60 + {LFNoise2.kr(0.1, 0.1)}!2).midicps, rand )*EnvGen.kr(Env.perc(releaseTime: 0.8), trig).distort;
Out.ar(outBus, sig * rand);
}
);
d.imitations = ( // dictionnaire de fonctions à choisir pour l'imitation
souffle: {|freqBus = 0, volBus = 1, outBus=22, lag = 0.1|
var sig;
sig = Ringz.ar(PinkNoise.ar(0.02), Lag.kr(In.kr(freqBus), lag), 0.5);
sig = CombC.ar(sig, 0.6, 0.6, 5)*0.4 + sig ;
sig = sig * (In.kr(volBus)-1).abs;
Out.ar(outBus, sig!2);
}
);
d.funcDefs = (
source: d.sources[\pulse],
imitation: d.imitations[\souffle],
ecoute: {|in = 20, outBus = 0|
var sig, mix, freq, hasFreq, amp, trig;
sig = In.ar(in);
mix = Mix.ar(sig);
amp = Amplitude.kr(mix, 0.05, 0.05);
#freq, hasFreq = Pitch.kr(mix, ampThreshold: 0.02, median: 7);
// trig = Slope.kr(freq);
trig = Impulse.kr(10);
SendTrig.kr(trig, 0, freq);
SendTrig.kr(trig, 1, amp);
Out.kr(outBus, [freq, amp]);
},
mix: {|in1, in2|
var mouse;
mouse = MouseX.kr;
Out.ar(0, In.ar(in1)*mouse + (In.ar(in2)*(mouse-1).abs) )
}
);
d.synths !? {d.updateSynths};
)
d.serveur;
d.init;
d.sendSynths;
d.updateSynths;
d.catchPitch;
d.catchPitch(false);
)
There are no comments on this page. [Add comment]