tonal grain sample
parent
6889552972
commit
eb4fd136c2
@ -0,0 +1,48 @@
|
|||||||
|
s.boot;
|
||||||
|
b = Buffer.read(s, "/home/lcoogan/Misc/grave.wav");
|
||||||
|
|
||||||
|
(
|
||||||
|
SynthDef("tonal_grain_sample", {
|
||||||
|
arg freq = 220, gate = 1, outBus = 0, gain = 0.1;
|
||||||
|
var env, t, grainDur, pos, rate, sig, baseFreq;
|
||||||
|
|
||||||
|
// Envelope to shape amplitude
|
||||||
|
env = EnvGen.kr(
|
||||||
|
Env.adsr(0.01, 0.1, 0.6, 1.5, curve: -4),
|
||||||
|
gate,
|
||||||
|
doneAction: 2
|
||||||
|
);
|
||||||
|
|
||||||
|
// Trigger for grains
|
||||||
|
t = Impulse.ar(freq);
|
||||||
|
|
||||||
|
// Duration of each grain
|
||||||
|
grainDur = 0.1;
|
||||||
|
|
||||||
|
// Playback rate controls pitch: freq / base pitch of sample
|
||||||
|
baseFreq = 220; // You can adjust this depending on your sample
|
||||||
|
rate = freq / baseFreq;
|
||||||
|
|
||||||
|
// Position in buffer: random or LFO modulation
|
||||||
|
pos = LFNoise1.kr(1).range(0, 0.3); // pick random spots in the buffer
|
||||||
|
|
||||||
|
// Granulate the sample buffer tonally
|
||||||
|
sig = GrainBuf.ar(
|
||||||
|
numChannels: 2,
|
||||||
|
trigger: t,
|
||||||
|
dur: grainDur,
|
||||||
|
sndbuf: b, // use your sample buffer
|
||||||
|
rate: rate,
|
||||||
|
pos: pos,
|
||||||
|
interp: 2
|
||||||
|
);
|
||||||
|
|
||||||
|
sig = sig * env;
|
||||||
|
sig = FreeVerb.ar(sig, 0.3, 0.9);
|
||||||
|
sig = LeakDC.ar(sig);
|
||||||
|
|
||||||
|
Out.ar(outBus, sig * gain);
|
||||||
|
}).add;
|
||||||
|
)
|
||||||
|
|
||||||
|
Synth(\tonal_grain_sample, [ \grainDur, 0.3, \freq, [50].midicps]);
|
||||||
Loading…
Reference in New Issue