experiments in even hamonics, guitar simulation

master
Leo Coogan 7 months ago
parent ef950cf881
commit 0d8008222e
Signed by: lcoogan
SSH Key Fingerprint: SHA256:vnrR5ilHkdr6L4t2yOMUMINFPpxEh+53N3nMel66mCw

@ -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);
)

@ -1,3 +1,5 @@
s.boot
// A SynthDef without samples, using oscillators and generative modulation
(
SynthDef(\fellGenerative, { |out = 0, amp = 0.3, dur = 1, freq = 440|
@ -25,7 +27,7 @@ SynthDef(\fellGenerative, { |out = 0, amp = 0.3, dur = 1, freq = 440|
sig = sig * env * amp; // Apply amplitude envelope
// Output the sound with pan control
Out.ar(out, Pan2.ar(sqig, pan));
Out.ar(out, Pan2.ar(sig, pan));
}).add;
)

@ -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…
Cancel
Save