// 1. Define SynthDefs for the piece
SynthDef(\subBassDrones, { |freq = 30, amp = 0.3, gate = 1|
var env = EnvGen.ar(Env.perc(0.1, 10), gate, doneAction: 2);
var sig = SinOsc.ar(freq, 0, 0.3) + SinOsc.ar(freq * 1.01, 0, 0.3);
var filtered = LPF.ar(sig, 50);
Out.ar(0, filtered * env * amp ! 2);
}).writeDefFile;
SynthDef(\granularTextures, { |freq = 100, amp = 0.2, gate = 1|
var env = EnvGen.ar(Env.perc(0.1, 5), gate, doneAction: 2);
var sig = Dust.ar(rand(10), 0.1) * SinOsc.ar(freq, 0, 0.5);
var filtered = HPF.ar(sig, 200);
Out.ar(0, filtered * env * amp ! 2);
}).writeDefFile;
SynthDef(\detunedOscillators, { |freq = 200, amp = 0.4, gate = 1|
var env = EnvGen.ar(Env.perc(0.1, 8), gate, doneAction: 2);
var sig = SinOsc.ar(freq, 0, 0.3) + SinOsc.ar(freq * 1.02, 0, 0.3);
var filtered = BPF.ar(sig, 500);
Out.ar(0, filtered * env * amp ! 2);
}).writeDefFile;
// 2. Build Score with explicit [time, message] pairs
Score([
// Sub-bass drones
[0.0, [\s_new, \subBassDrones, 1001, 0, 0, \freq, 30, \amp, 0.3]],
[20.0, [\n_set, 1001, \freq, 25]],
[40.0, [\n_set, 1001, \freq, 35]],
[60.0, [\n_set, 1001, \freq, 40]],
[80.0, [\n_set, 1001, \freq, 45]],
[100.0, [\n_set, 1001, \freq, 50]],
[118.0, [\n_set, 1001, \gate, 0]],
// Granular textures
[5.0, [\s_new, \granularTextures, 1002, 0, 0, \freq, 100, \amp, 0.2]],
[15.0, [\n_set, 1002, \freq, 150]],
[35.0, [\n_set, 1002, \freq, 200]],
[55.0, [\n_set, 1002, \freq, 250]],
[75.0, [\n_set, 1002, \freq, 300]],
[95.0, [\n_set, 1002, \freq, 350]],
[118.0, [\n_set, 1002, \gate, 0]],
// Detuned oscillators
[10.0, [\s_new, \detunedOscillators, 1003, 0, 0, \freq, 200, \amp, 0.4]],
[25.0, [\n_set, 1003, \freq, 250]],
[45.0, [\n_set, 1003, \freq, 300]],
[65.0, [\n_set, 1003, \freq, 350]],
[85.0, [\n_set, 1003, \freq, 400]],
[105.0, [\n_set, 1003, \freq, 450]],
[118.0, [\n_set, 1003, \gate, 0]],
// End of the piece
[120.0, [\c_set, 0, 0]]
]).recordNRT(
outputFilePath: "~/output.wav".standardizePath,
headerFormat: "WAV",
sampleFormat: "int16",
sampleRate: 44100,
options: ServerOptions.new.numOutputBusChannels_(2),
duration: 120,
action: { 0.exit }
);
dark frequency territory
textural density
rhythmic pulse from non-rhythmic sources
from initial frequency choices to evolved frequencies
optimal balance between sub-bass drones and granular textures
exploring more complex granular synthesis techniques