initial commit
This commit is contained in:
36
extensions/Track/classes/fadable.sc
Normal file
36
extensions/Track/classes/fadable.sc
Normal 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;
|
||||
}
|
||||
}
|
||||
42
extensions/Track/classes/mixer.sc
Normal file
42
extensions/Track/classes/mixer.sc
Normal 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]
|
||||
}
|
||||
}
|
||||
64
extensions/Track/classes/track.sc
Normal file
64
extensions/Track/classes/track.sc
Normal 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|
|
||||
// }
|
||||
}
|
||||
Reference in New Issue
Block a user