Threshold of Density

supercollider
// 1. Define SynthDefs for the piece
SynthDef(\baseOsc, { |freq = 440, detune = 0, amp = 0.5, gate = 1|
    var env = EnvGen.ar(Env.asr(0.01, 1, 0.3), gate, doneAction: 2);
    var sig1 = SinOsc.ar(freq + detune, 0, 0.5);
    var sig2 = SinOsc.ar(freq - detune, 0, 0.5);
    var sig = (sig1 + sig2) * 0.5;
    var filtered = LPF.ar(sig, 4000);
    Out.ar(0, filtered ! 2);
}).writeDefFile;

SynthDef(\granular, { |freq = 440, amp = 0.3, gate = 1|
    var env = EnvGen.ar(Env.asr(0.01, 1, 0.3), gate, doneAction: 2);
    var sig = GrainBuf.ar(2, Buffer.read("~/path/to/buffer.wav"), Impulse.ar(10), 0.1, 0.1, 1, pan: 0);
    var filtered = HPF.ar(sig, 200);
    Out.ar(0, filtered ! 2);
}).writeDefFile;

// 2. Build Score with explicit [time, message] pairs
Score([
    // Base oscillators with detuning
    [0.0, [\s_new, \baseOsc, 1001, 0, 0, \freq, 261.63, \detune, 5, \amp, 0.4]],
    [0.0, [\s_new, \baseOsc, 1002, 0, 0, \freq, 293.66, \detune, 3, \amp, 0.3]],
    [0.0, [\s_new, \baseOsc, 1003, 0, 0, \freq, 329.63, \detune, 7, \amp, 0.35]],

    // Granular layer
    [2.0, [\s_new, \granular, 1004, 0, 0, \freq, 349.23, \amp, 0.2]],

    // Amplitude modulation for rhythmic feel
    [4.0, [\n_set, 1001, \amp, 0.3]],
    [4.2, [\n_set, 1001, \amp, 0.4]],
    [4.4, [\n_set, 1001, \amp, 0.3]],
    [4.6, [\n_set, 1001, \amp, 0.4]],

    // Filter modulation
    [6.0, [\n_set, 1002, \freq, 349.23]],
    [6.0, [\n_set, 1003, \freq, 392.00]],

    // Note-offs
    [10.0, [\n_set, 1001, \gate, 0]],
    [10.0, [\n_set, 1002, \gate, 0]],
    [10.0, [\n_set, 1003, \gate, 0]],
    [10.0, [\n_set, 1004, \gate, 0]],

    // End of score
    [12.0, [\c_set, 0, 0]]
]).recordNRT(
    outputFilePath: "~/output.wav".standardizePath,
    headerFormat: "WAV",
    sampleFormat: "int16",
    sampleRate: 44100,
    options: ServerOptions.new.numOutputBusChannels_(2),
    duration: 12,
    action: { 0.exit }
);