You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.0 KiB
Plaintext
49 lines
1.0 KiB
Plaintext
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]);
|