I have stored my samples in a dictionary. Maybe this is superfluous but then I assigned each sample in the dictionary to a letter ~a - ~z so I can index them in my sampler SynthDef.
I can’t figure out the correct syntax for my sampler SynthDef.
Then I’d like to cycle through the different samples on my MIDI with a knob (ccNum = 1), but not play them. Once I choose the correct sample, play the sample with a button (ccNum = 17). But if one sample is playing and I choose another sample to play, I’d like the previous sample to stop.
I’d appreciate any help.
(
d = Dictionary.new;
d.add(\samples ->
PathName("/Users/daniel/Documents/musicProjects/superColliderSamples/").entries.collect({
arg sf;
Buffer.read(s, sf.fullPath);
});
);
)
~a = d[\samples][0];
~b = d[\samples][1];
~c = d[\samples][2];
~d = d[\samples][3];
~e = d[\samples][4];
~f = d[\samples][5];
~g = d[\samples][6];
~h = d[\samples][7];
~i = d[\samples][8];
~j = d[\samples][9];
~k = d[\samples][10];
~l = d[\samples][11];
~m = d[\samples][12];
~n = d[\samples][13];
~o = d[\samples][14];
~p = d[\samples][15];
~q = d[\samples][16];
~r = d[\samples][17];
~s = d[\samples][18];
~t = d[\samples][19];
~u = d[\samples][20];
~v = d[\samples][21];
~w = d[\samples][22];
~x = d[\samples][23];
~y = d[\samples][24];
~z = d[\samples][25];
~samples1 = [
~a, ~b, ~c, ~d, ~e, ~f,
~g, ~h, ~i, ~j, ~k, ~l, ~m,
~n, ~o, ~p, ~q, ~r, ~s, ~t, ~u,
~v, ~w, ~x, ~y, ~z;
];
(
~sampler = SynthDef(\sampler,{ arg out=0, val=~b, start, end, rate;
var env, ptr, sig;
env= EnvGen.ar(Env([0,1,0], [0.1, 50]), doneAction:2);
ptr = Phasor.ar(1, BufRateScale.kr(~samples1[val])*rate, start, end);
sig = BufRd.ar(2, ~samples1[val], ptr);
FreeSelfWhenDone.kr(sig);
Out.ar(out, sig);
}).add;
)
MIDIdef.cc(\on1, {
arg val, num;
case
{num==17 && val==127} {a = Synth(\sampler, [\bufnum, ~a, \start, 0, \end, 0, \rate, 0.midiratio])}
})
MIDIdef.cc(\cc, {|val, ccNum|
var index = val.linlin(0, 127, 0, ~samples.size - 1).round.debug(\incomingvalToIndex);
a.do{|n, i| n.set(\bufnum, ~samples1[index][i]) }
}, 1, 0)