Refactoring with granulator in a quark
parent
86fe427429
commit
fdf92ef4ba
10
NOTES.md
10
NOTES.md
|
@ -6,6 +6,16 @@
|
||||||
- multiple grain buffers - TouchOsc interface to select which to send to
|
- multiple grain buffers - TouchOsc interface to select which to send to
|
||||||
- play back all buffers?
|
- play back all buffers?
|
||||||
|
|
||||||
|
- refactor for multitrack
|
||||||
|
- which controls are per-track and which are global? sort these out in the UI
|
||||||
|
- encapsulate a grainstrack in an object?
|
||||||
|
|
||||||
|
- auto-mix: base the mix level on how loud the incoming signal is so that tracks don't fade out
|
||||||
|
|
||||||
|
- fancier playback:
|
||||||
|
- intertwine different rates and directions
|
||||||
|
|
||||||
|
|
||||||
- rhythm controls
|
- rhythm controls
|
||||||
- number of steps in step granulator
|
- number of steps in step granulator
|
||||||
- modulate grain level in time with playback
|
- modulate grain level in time with playback
|
||||||
|
|
57
grains.scd
57
grains.scd
|
@ -9,53 +9,11 @@ Server.killAll;
|
||||||
~frippbuffer.isNil;
|
~frippbuffer.isNil;
|
||||||
|
|
||||||
|
|
||||||
(
|
|
||||||
SynthDef(
|
|
||||||
\fripp_record,
|
|
||||||
{
|
|
||||||
arg in = 2, buffer = 0, mix = 0.25, record = 0.0;
|
|
||||||
var insig = record * In.ar(in, 1);
|
|
||||||
RecordBuf.ar(insig, buffer, 0, mix, 1 - mix, loop: 1)
|
|
||||||
}
|
|
||||||
).add;
|
|
||||||
|
|
||||||
|
|
||||||
SynthDef(
|
|
||||||
\grainsynth,
|
|
||||||
{
|
|
||||||
arg out=0, buffer, blen, pitchb, triggerb, posb, modb, size=0.1, amp=0.5, pan=0, track=0.25, jitter=0, blur=0.0;
|
|
||||||
var pitch, trigger, chor, pos, pans, grains, filtfreq;
|
|
||||||
trigger = In.kr(triggerb);
|
|
||||||
pitch = In.kr(pitchb);
|
|
||||||
pos = Wrap.kr(In.kr(posb, 1) + WhiteNoise.kr(blur), 0, 1);
|
|
||||||
pans = pan + WhiteNoise.kr(jitter) + (track * (In.kr(posb, 1) - 1));
|
|
||||||
grains = TGrains.ar(2, trigger, buffer, pitch, pos * blen, size, pans, amp);
|
|
||||||
Out.ar(out, grains);
|
|
||||||
}
|
|
||||||
).add;
|
|
||||||
)
|
|
||||||
|
|
||||||
(
|
|
||||||
|
|
||||||
~ntracks = 4;
|
|
||||||
|
|
||||||
~makebuffers = {
|
|
||||||
if( ~frippbuffers.isNil.not, {
|
|
||||||
~frippbuffers.do({ |b| b.free });
|
|
||||||
~frippbuffers.free;
|
|
||||||
});
|
|
||||||
|
|
||||||
~frippbuffers = Array.new(~ntracks);
|
|
||||||
|
|
||||||
~currentfripp = 0;
|
|
||||||
|
|
||||||
(1..~ntracks).do( { |i|
|
|
||||||
~frippbuffers.add(Buffer.alloc(s, s.sampleRate * ~buflen, 1));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
~to = TouchOSC("192.168.0.209", 9000);
|
~to = TouchOSC("192.168.0.209", 9000);
|
||||||
|
|
||||||
~usbinput = 2;
|
~usbinput = 2;
|
||||||
|
@ -241,9 +199,17 @@ fork {
|
||||||
).play(s, [ \out, ~pitchb, \triggerb, ~triggerb, \posb, ~playbacklfob, \dir, 1, \track, 0]);
|
).play(s, [ \out, ~pitchb, \triggerb, ~triggerb, \posb, ~playbacklfob, \dir, 1, \track, 0]);
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
s
|
||||||
|
Granulator.init(s)
|
||||||
|
|
||||||
|
~g3 = Granulator.new(4, ~recordb, ~granulatorb, ~playbacklfob, ~triggerb, ~pitchb);
|
||||||
|
|
||||||
|
~g.recorder.set(\record, 1.0);
|
||||||
~makebuffers.value();
|
~makebuffers.value();
|
||||||
|
|
||||||
|
(
|
||||||
~bufrecorders = Array.new(~ntracks);
|
~bufrecorders = Array.new(~ntracks);
|
||||||
|
|
||||||
~frippbuffers.do({
|
~frippbuffers.do({
|
||||||
|
@ -288,6 +254,8 @@ fork {
|
||||||
|
|
||||||
~granulator = ~granulators[0];
|
~granulator = ~granulators[0];
|
||||||
|
|
||||||
|
)
|
||||||
|
(
|
||||||
// mixing and effects
|
// mixing and effects
|
||||||
|
|
||||||
~fxb = Bus.audio(s, 2);
|
~fxb = Bus.audio(s, 2);
|
||||||
|
@ -361,7 +329,6 @@ fork {
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
// why can't this all be in the same block?
|
|
||||||
|
|
||||||
(
|
(
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue