1
0

initial commit

This commit is contained in:
2025-02-26 07:33:14 +01:00
commit 13e794f44b
21 changed files with 515 additions and 0 deletions

View File

@ -0,0 +1,36 @@
// object provides fading ability and levels
Fadable {
var track, level;
fade {
// exponential fading level toward <target> during <time> seconds
// TODO: what if another fade routine is ongoing? => mischief
|target, time|
r {
var rate = 1 / time * 0.05;
while({((level - target).abs >= 0.01 )}, {
if(
(level >= target),
{
// fade out
level = level - (rate.exp - 1);
if((level < target), { level = target; });
},
{
// fade in
level = level + (rate.exp - 1);
if((level > target), { level = target; });
});
0.05.wait;
track.set(\amp, level);
});
}.play;
}
level_ {
|amp|
level = amp;
track.set(\amp, level);
^this
// ("Amplitude in set to " << amp << "sec").postln;
}
}

View File

@ -0,0 +1,42 @@
// bidule holding a master track receiving from a bus, and a collection
// of Tracks
Mixer : Fadable {
var name, master, masterBus, tracks, track, level;
*new {
|mixerName|
^super.new.init(mixerName);
}
*initClass {
StartUp.add {
SynthDef(\master, {
|in|
var sig, releaser;
sig = In.ar(in, 2) * \amp.kr(0.5);
sig = Limiter.ar(sig);
Out.ar(0, sig);
}).add;
}
}
init {
|mixerName|
name = mixerName;
level = 1;
masterBus = Bus.audio(Server.default, 2);
track = Synth(\master, [in: masterBus.index, amp: level]);
tracks = Dictionary();
}
addTrack {
|trackName|
tracks.put(trackName, Track(masterBus.index));
}
// access tracks like if Mixer was a dict
at {
|name|
^tracks[name]
}
}

View File

@ -0,0 +1,64 @@
// A track receiving from a bus. Synth and FX in their own groups
Track : Fadable {
/*
TODO: don't instanciate if name already exist ?
*/
var out, <group, <groupFX, <groupSynth, <track, busTrack, busFX, level;
*new {
|out|
^super.new.init(out);
}
*initClass {
StartUp.add {
SynthDef(\fader, {
|in, fxIn, out|
var sig, fx, dry, wet;
wet = \wet.kr(1);
// TODO: what if i want 1 or 12 channels
sig = In.ar(in, 2);
fx = In.ar(fxIn, 2);
// FX loop?
dry = (1 - wet).clip(0, 1);
sig = [sig * dry, fx * wet].sum;
sig = Pan2.ar(sig, \pan.kr(0));
sig = sig * \amp.kr(1);
sig = Limiter.ar(sig);
Out.ar(out, sig);
}).add;
}
}
init {
|out|
level = 1;
busTrack = Bus.audio(Server.default, 2);
busFX = Bus.audio(Server.default, 2);
group = Group.new(Server.default);
groupSynth = Group.head(group);
groupFX = Group.after(groupSynth);
track = Synth(
\fader,
[
in: busTrack.index,
fxIn: busFX.index,
out: out
],
target: group,
addAction: \addToTail
);
}
in {
^busTrack.index;
}
inFX {
^busFX.index;
}
// printOn {
// |stream|
// }
}