Got server syncing working, moved granulator setup to its own file
parent
4c5cc176f3
commit
e249d39f7f
44
TODO.md
44
TODO.md
|
@ -1,37 +1,27 @@
|
|||
TODO
|
||||
====
|
||||
|
||||
## Basic interface stuff
|
||||
Monday-Tuesday to-do
|
||||
|
||||
Write default settings to the interface on startup <-- done
|
||||
Use server.sync to speed up booting
|
||||
|
||||
Try to get all the common interfaces on one page
|
||||
- re-route the effects so that it goes
|
||||
|
||||
input -> filter -> delay -> granulator -> reverb
|
||||
|
||||
not input -> granulator -> effects
|
||||
|
||||
Synchronise speeds across granulators
|
||||
|
||||
Quantise speeds
|
||||
|
||||
that's enough!
|
||||
|
||||
|
||||
--
|
||||
|
||||
## Musical
|
||||
Later:
|
||||
|
||||
Test things like really rapid playback
|
||||
vibrato and tremolo
|
||||
|
||||
Pitch-shifting (tuned and untuned)
|
||||
|
||||
LFO Modulate the filter <-- done
|
||||
|
||||
LFO Modulate the granulator settings
|
||||
|
||||
Separate panel for input effects: distort and overdrive
|
||||
|
||||
Sync timining of granule playback to buffer length / speed
|
||||
|
||||
Timing based on beat detection
|
||||
|
||||
|
||||
## Advanced interface
|
||||
|
||||
Save current patch / load patch <-- Done
|
||||
|
||||
Save the current buffer! - if this is incorporated with current settings, it's a way to save how the granulator is playing, and then resume. Which is good for live stuff and also for overdubbing
|
||||
|
||||
SuperCollider seems to have the ability to read and write files, but not scan directories, so the patch-saver will have to maintain its own index file
|
||||
|
||||
patch = file with settings, including a link to the buffer sample
|
||||
more playback modes
|
|
@ -27,5 +27,6 @@
|
|||
~lfob = Synth(\lfo, [\out, ~lfobb ]);
|
||||
~lfoc = Synth(\lfo, [\out, ~lfocb ]);
|
||||
|
||||
"LFOs running".postln;
|
||||
|
||||
)
|
||||
|
|
|
@ -70,4 +70,5 @@
|
|||
}
|
||||
).play(s, [ \in, ~delayb, \out, 0 ], \addToTail);
|
||||
|
||||
"Effects running".postln;
|
||||
)
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
(
|
||||
~modes = [
|
||||
[ "saw", \pos_saw ],
|
||||
[ "reverse", \pos_reverse ],
|
||||
[ "sine", \pos_sine ],
|
||||
[ "step", \pos_step ],
|
||||
[ "random", \pos_random ]
|
||||
];
|
||||
|
||||
~granulators = Array.new(4);
|
||||
~posb = Array.new(4);
|
||||
~possynths = Array.new(4);
|
||||
|
||||
(0..3).do({
|
||||
var pb = Bus.control(s, 1), ps;
|
||||
~posb.add(pb);
|
||||
ps = Synth(\pos_saw, [ \out, pb, \speed, 1 / ~buflen ]);
|
||||
~possynths.add(ps);
|
||||
});
|
||||
|
||||
|
||||
(0..3).do({ |i|
|
||||
var pb = ~posb.at(i);
|
||||
~granulators.add(Granulator.new(~buflen, ~recordb, ~fxb, pb, ~triggerb, ~pitchb));
|
||||
});
|
||||
|
||||
~setmode = {
|
||||
arg track, mode;
|
||||
var synth = ~modes[mode][1];
|
||||
~possynths[track].get(\speed, { | speed |
|
||||
~possynths[track].free;
|
||||
~possynths[track] = Synth(synth, [\out, ~posb[track], \speed, speed]);
|
||||
});
|
||||
~granulators[track].mode_(mode);
|
||||
};
|
||||
|
||||
"Granulator running".postln;
|
||||
|
||||
)
|
64
main.scd
64
main.scd
|
@ -2,70 +2,26 @@
|
|||
|
||||
(
|
||||
Server.default.options.inDevice_("Scarlett 2i2 USB");
|
||||
Server.default.options.hardwareBufferSize_(1024);
|
||||
//Server.default.options.outDevice_("Scarlett 2i2 USB");
|
||||
)
|
||||
Server.killAll;
|
||||
|
||||
(
|
||||
Routine.run({
|
||||
|
||||
("./synths.scd").loadRelative;
|
||||
("./control.scd").loadRelative;
|
||||
("./effects.scd").loadRelative;
|
||||
|
||||
Granulator.init(s);
|
||||
|
||||
(
|
||||
s.sync;
|
||||
|
||||
~modes = [
|
||||
[ "saw", \pos_saw ],
|
||||
[ "reverse", \pos_reverse ],
|
||||
[ "sine", \pos_sine ],
|
||||
[ "step", \pos_step ],
|
||||
[ "random", \pos_random ]
|
||||
];
|
||||
"Synths loaded".postln;
|
||||
|
||||
~granulators = Array.new(4);
|
||||
~posb = Array.new(4);
|
||||
~possynths = Array.new(4);
|
||||
|
||||
(0..3).do({
|
||||
var pb = Bus.control(s, 1), ps;
|
||||
~posb.add(pb);
|
||||
ps = Synth(\pos_saw, [ \out, pb, \speed, 1 / ~buflen ]);
|
||||
~possynths.add(ps);
|
||||
("./control.scd").loadRelative;
|
||||
("./effects.scd").loadRelative;
|
||||
("./granulator.scd").loadRelative;
|
||||
s.sync;
|
||||
("./interface.scd").loadRelative;
|
||||
});
|
||||
|
||||
|
||||
(0..3).do({ |i|
|
||||
var pb = ~posb.at(i);
|
||||
~granulators.add(Granulator.new(~buflen, ~recordb, ~fxb, pb, ~triggerb, ~pitchb));
|
||||
});
|
||||
|
||||
~setmode = {
|
||||
arg track, mode;
|
||||
var synth = ~modes[mode][1];
|
||||
~possynths[track].get(\speed, { | speed |
|
||||
~possynths[track].free;
|
||||
~possynths[track] = Synth(synth, [\out, ~posb[track], \speed, speed]);
|
||||
});
|
||||
~granulators[track].mode_(mode);
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
("./interface.scd").loadRelative;
|
||||
|
||||
~to.controls.keys.do({|k, i| i.postln; k.postln;~to.controls[k].postln});
|
||||
~to.controls['/track/speed'].send_(0.1);
|
||||
~to.v_(, 0);
|
||||
|
||||
~to.controls.at(~trackctrl.value('speed')).isNil.not
|
||||
|
||||
a = "string"
|
||||
b = 'string'
|
||||
|
||||
a.asSymbol
|
||||
|
||||
|
||||
|
||||
~possynths[0].get(\speed, {|v| v.postln});
|
||||
~possynths[0].set(\speed, 20 / ~buflen)
|
Loading…
Reference in New Issue