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.
scd/working_wavetable.scd

196 lines
3.8 KiB
Markdown

(
SynthDef(\wtable_vosc_dual, {
var env, sig, freq, buf, wtmod, wtpos;
var wtbufnumRange = [ ~wtbufnums.minItem, ~wtbufnums.maxItem ];
// Main controls
var gate = \gate.kr(1);
freq = \freq.kr(120) / 2;
buf = \bufn.kr(wtbufnumRange[2]);
wtmod = \wtmodbufn.kr(wtbufnumRange[2]);
// Envelope
env = EnvGen.kr(
Env.adsr(
\attack.kr(0.1),
\decay.kr(0.2),
\sustain.kr(3.0),
\release.kr(1.0)
),
gate,
doneAction: 2
).lag(\envLag.kr(0.1));
wtpos = (
VOsc.ar(wtmod, \wtmodfreq.kr(0), \phase.kr(0), \wtmodamp.kr(1)
)
+ env.pow(1.4)
+ buf
).lag(1.8)
.mod(wtbufnumRange[1] - wtbufnumRange[0])
+ wtbufnumRange[0];
sig = VOsc.ar(wtpos, freq, \phase.kr(0), 1) * env * \amp.kr(0.2);
// sig = BPF.ar(sig, \lpf.ar(800), \q.ar(1.0));
sig = BLowShelf.ar(sig, \lpf.ar(800), \q.ar(1.0));
sig = AllpassN.ar(sig, 1, 1, 1);
Out.ar(\out.kr(0), sig ! 2);
}).add;
)
x = Synth(\wtable_vosc_dual, [\freq, 70.midicps]);
(
Pbind(
\instrument, \wtable_vosc_dual, // Choose SynthDef
\amp, Pwhite(0.2, 0.8, inf), // Random amplitude (0.2 to 0.8)
/* \mod1, Pwhite(5, 40, inf), // Random mod1 value (5 to 40)
\mod2, Pwhite(0.01, 0.3, inf), // Random mod2 value (0.01 to 0.3)
\mod3, Pwhite(1, 10, inf), // Random mod3 value (1 to 10)
\mod4, Pwhite(0.1, 0.8, inf), // Random mod4 value (0.1 to 0.8)
\mod5, Pwhite(0.01, 0.4, inf), // Random mod5 value (0.01 to 0.4)*/
\freq, Pwhite(40, 70, inf),
\dur, Pseq([1], inf) // Sequence of durations
).play;
)
(
~chords = (
"Csus4": [0, 5, 7], // Root, fourth, fifth
"Cmaj7": [0, 4, 7, 11],
"Cmin7": [0, 3, 7, 10],
"C5": [0, 7], // Power chord
"C": [0, 4, 7]
);
)
(
~chords = (
\Csus4: [0, 5, 7],
\Cmaj7: [0, 4, 7, 11],
\Cmin7: [0, 3, 7, 10],
\C5: [0, 7],
\C: [0, 4, 7]
);
)
(
Pbind(
\instrument, \wtable_vosc_dual,
\amp, 0.5,
\dur, 1,
\midinote, Pseq([
~chords["Csus4"] + 60, // Transpose to MIDI note 60 (C4)
].flat, inf)
).play;
)
x = Synth(\wtable_vosc_dual [\freq, Pseq((~chords["Csus4"] + 60).midicps, inf)]);
(
~chords = (
\Csus4: [[2, 4]],
\Cmaj7: [[0, 4, 7, 11]],
\Cmin7: [[0, 3, 7, 10]],
\C5: [[0, 7]],
\C: [[0, 4, 7]]
);
Pbind(
\instrument, \wtable_vosc_dual,
\amp, 0.4,
\dur, Pwhite(0.4, 0.8),
// add freq ratio
\midinote, Pwhite(40, 80),
// \midinote, Pseq((~chords[\Cmin7, ~chords[\Cmaj7]] + 60), inf)
).play;
)
(
~chords = (
/*\Csus4: [[ 3, 5]],
// \Cmaj7: [0, 1, 3, 7],
\Cmin7: [[3, 7]],
\whatever: [3, 5],
\whateer: [12, 15],*/
\Fm: [[0, 3, 7]],
\Bbm: [[-1, 2, 6]], // Relative to C
\F: [[0, 4, 7]],
\Eb: [[-4, 0, 3]],
\Ebm: [[-4, -1, 3]]
/* \C5: [0, 7],
\C: [0, 4, 7],*/
);
~chordKeys = ~chords.keys;
Pbind(
\instrument, \wtable_vosc_dual,
\amp, 0.4,
\dur, Pwhite(0.1, 1),
\midinote, Pfunc({
var chordName = ~chordKeys.choose; // Randomly pick a chord
var chord = ~chords[chordName]; // Get its intervals
var note = chord.choose + 60; // Pick one and transpose
note;
}),
\attack, Pwhite(0.01, 0.1),
\decay, Pwhite(0.1, 0.3),
\sustain, Pwhite(0.2, 0.8),
\release, Pwhite(0.1, 2.0),
\lpf, Pwhite(800, 2000),
\q, Pwhite(0.3, 1.0),
).play;
)
(
~freygish = [0, 1, 4, 5, 7, 8, 10]; // Freygish scale in C
~root = 60; // Middle C
Pbind(
\instrument, \wtable_vosc_dual,
\amp, 0.4,
\dur, Pwhite(1, 2),
\midinote, Pfunc({
~root + ~freygish.choose;
})
).play;
)
(
~chords = (
\Csus4: [0, 5, 7],
\Cmaj7: [0, 4, 7, 11],
\Cmin7: [0, 3, 7, 10],
\C5: [0, 7],
\C: [0, 4, 7]
);
Pbind(
\instrument, \wtable_vosc_dual,
\amp, 0.4,
\dur, 1,
\midinote, Pcollect(
Pseq([\Cmin7, \Cmaj7, \C5], inf), // sequence of chord names
{ |chordName| ~chords[chordName] + 60 } // map to MIDI notes
)
).play;
)