// 1. Define SynthDefs for the layered sounds
SynthDef(\detunedSine, { |freq = 440, detune = 0, amp = 0.5, gate = 1|
var env = EnvGen.ar(Env.asr(0.01, 1, 0.3), gate, doneAction: 2);
var lfo = LFSaw.ar(0.1) * detune;
var sig1 = SinOsc.ar(freq + lfo, 0, 0.5);
var sig2 = SinOsc.ar(freq - lfo, 0, 0.5);
var mixed = (sig1 + sig2) * env * amp;
Out.ar(0, mixed ! 2);
}).writeDefFile;
SynthDef(\noiseLayer, { |amp = 0.3, gate = 1|
var env = EnvGen.ar(Env.asr(0.01, 1, 0.3), gate, doneAction: 2);
var noise = WhiteNoise.ar(amp) * env;
var filtered = HPF.ar(noise, 500);
Out.ar(0, filtered ! 2);
}).writeDefFile;
SynthDef(\reverb, { |in, mix = 0.3, room = 0.8, damp = 0.5|
var rev = FreeVerb.ar(in, mix, room, damp);
Out.ar(0, rev ! 2);
}).writeDefFile;
// 2. Build Score with explicit [time, message] pairs
Score([
// Detuned sine layers
[0.0, [\s_new, \detunedSine, 1001, 0, 0, \freq, 110, \detune, 5, \amp, 0.4]],
[0.0, [\s_new, \detunedSine, 1002, 0, 0, \freq, 165, \detune, 3, \amp, 0.4]],
[10.0, [\n_set, 1001, \gate, 0]],
[10.0, [\n_set, 1002, \gate, 0]],
// Noise layer
[2.0, [\s_new, \noiseLayer, 1003, 0, 0, \amp, 0.2]],
[12.0, [\n_set, 1003, \gate, 0]],
// Reverb effect
[0.0, [\s_new, \reverb, 1004, 0, 0, \in, 0, \mix, 0.4, \room, 0.9, \damp, 0.7]],
[15.0, [\n_set, 1004, \gate, 0]],
// End of score
[15.0, [\c_set, 0, 0]]
]).recordNRT(
outputFilePath: "~/output.wav".standardizePath,
headerFormat: "WAV",
sampleFormat: "int16",
sampleRate: 44100,
options: ServerOptions.new.numOutputBusChannels_(2),
duration: 15,
action: { 0.exit }
);
toward textural densitylayered sine waves with noise
toward spatial soundreverb with high dampening
from rhythmic to ambientmoving from beatboxing to continuous textures
balance between detuning and noise levels
toward more complex modulation