experiments in even hamonics, guitar simulation
parent
ef950cf881
commit
0d8008222e
@ -0,0 +1,29 @@
|
|||||||
|
(
|
||||||
|
SynthDef(\evenHarms, {
|
||||||
|
arg freq = 30, phaseRate = 1, phaseDepth = 100, cutoffBase = 800, cutoffModFreq = 50, amp = 0.5, atk = 0.01, rel = 1;
|
||||||
|
var sig, phaseMod, env, cutoff;
|
||||||
|
|
||||||
|
sig = Mix.fill(10, { |i|
|
||||||
|
var harmonicNum = 2 * (i + 1);
|
||||||
|
phaseMod = SinOsc.kr(phaseRate + i * 0.1).range(0, phaseDepth);
|
||||||
|
SinOsc.ar(freq * harmonicNum, phaseMod, 1 / (i + 1))
|
||||||
|
});
|
||||||
|
|
||||||
|
cutoff = cutoffBase + SinOsc.kr(cutoffModFreq).range(-400, 400);
|
||||||
|
sig = LPF.ar(sig, cutoff);
|
||||||
|
|
||||||
|
env = EnvGen.kr(Env.perc(atk, rel), doneAction: 2);
|
||||||
|
Out.ar(0, sig.dup * env * amp);
|
||||||
|
}).add;
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
t = TempoClock.new(180/60);
|
||||||
|
|
||||||
|
Pbind(\instrument, \evenHarms,
|
||||||
|
\freq, Pseq([190, 201, 188, 160, 80], inf),
|
||||||
|
// \dur, Pwhite(0.2, 2),
|
||||||
|
// \dur, 1
|
||||||
|
).play(t);
|
||||||
|
)
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
s.boot;
|
||||||
|
|
||||||
|
(
|
||||||
|
SynthDef(\guitar, {
|
||||||
|
arg freq; // A2
|
||||||
|
var env;
|
||||||
|
var trig = Impulse.kr();
|
||||||
|
|
||||||
|
// Simulated pick attack — short noise burst
|
||||||
|
var pickEnv = Decay2.kr(trig, 0.001, 0.03);
|
||||||
|
var pickNoise = WhiteNoise.ar(0.4) * pickEnv;
|
||||||
|
|
||||||
|
// Plucked string body
|
||||||
|
var string = Pluck.ar(
|
||||||
|
WhiteNoise.ar(0.5),
|
||||||
|
trig,
|
||||||
|
delaytime: 1/freq,
|
||||||
|
maxdelaytime: 0.1,
|
||||||
|
decaytime: 4,
|
||||||
|
coef: 0.4
|
||||||
|
);
|
||||||
|
|
||||||
|
// Mix pick noise and string
|
||||||
|
var signal = string + pickNoise;
|
||||||
|
|
||||||
|
// Optional: low-pass to tame brightness (like tone knob or cab sim)
|
||||||
|
signal = LPF.ar(signal, 8000);
|
||||||
|
|
||||||
|
env = EnvGen.kr(Env.perc(attackTime: 0.1, releaseTime: 0.2, level: 1, curve: -4), doneAction:2);
|
||||||
|
|
||||||
|
// Mono signal
|
||||||
|
Out.ar(0, signal * env);
|
||||||
|
}).play;
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
~clock = TempoClock.new(90/60);
|
||||||
|
|
||||||
|
Pbind(
|
||||||
|
\instrument, \guitar,
|
||||||
|
// \freq, Pseq([[60, 63], [50, 59, 67], [48, 54, 60] ], inf).midicps,
|
||||||
|
\freq, Pseq([60], inf).midicps,
|
||||||
|
\dur, Pseq([
|
||||||
|
0.05, 0.03, 0.03, // strum delays for chord 1
|
||||||
|
0.5, 0.5, // rest for "&"
|
||||||
|
0.05, 0.03, 0.03, // chord 2 strum
|
||||||
|
0.05, 0.03, 0.03, // chord 2 "&" strum
|
||||||
|
// continue for whole pattern
|
||||||
|
], inf)).play(~clock);
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
Pbind(
|
||||||
|
\instrument, \guitar,
|
||||||
|
\freq, Pseq([[60, 63], [50, 59, 67], [48, 54, 60] ], inf).midicps,
|
||||||
|
\dur, Pseq([
|
||||||
|
0.05, 0.03, 0.03, // strum delays for chord 1
|
||||||
|
0.5, 0.5, // rest for "&"
|
||||||
|
0.05, 0.03, 0.03, // chord 2 strum
|
||||||
|
0.05, 0.03, 0.03, // chord 2 "&" strum
|
||||||
|
// continue for whole pattern
|
||||||
|
], inf)).play;
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue