Multitrack is working for recording

feature-multitrack
Mike Lynch 2023-04-02 16:31:52 +10:00
parent 000a6d3586
commit 8a74f8612f
2 changed files with 41 additions and 46 deletions

View File

@ -1,31 +1,14 @@
# TODO # TODO
## Granulator - quantise playback speed to rational values
- display the playback and harmonics when quantised
Fix chorus and detune - why isn't it being triggered? - multiple grain buffers - TouchOsc interface to select which to send to
- play back all buffers?
Add pitch shifting - rhythm controls
- number of steps in step granulator
Change harmonics for chorus - modulate grain level in time with playback
- sync LFOs to playback
Lock harmonics to octaves / ratios
## Effects chain
Add an effects chain like with midilooper
-> filter -> reverb -> out
## LFO mod
Add the new-style lfo mods to filter
## More LFO mods
Allow other settings to be modulated
## Input filter
Switch in and out a single input filter like distort, peak FFT, etc,

View File

@ -217,23 +217,32 @@ fork {
~makebuffers.value(); ~makebuffers.value();
~bufrecorder = SynthDef( SynthDef(
\fripp_record, \fripp_record,
{ {
arg in = 2, fb = 4, bufindex = 0, mix = 0.25, record = 0.0, feedback = 0.0; arg in = 2, buffer = 0, mix = 0.25, record = 0.0;
var insig = record * In.ar(in, 1); var insig = record * In.ar(in, 1);
RecordBuf.ar(insig, ~frippbuffers[bufindex], 0, mix, 1 - mix, loop: 1) RecordBuf.ar(insig, buffer, 0, mix, 1 - mix, loop: 1)
} }
).play(s, [ ).add;
\in, ~recordb,
\record, 1.0,
// \fb, ~granulatorb,
\out, 0,
\bufindex, ~currentfripp,
\addToTail
]
);
~bufrecorders = Array.new(~ntracks);
~frippbuffers.do({
| buffer, index |
~bufrecorders.add(Synth.new(
\fripp_record,
[
\in, ~recordb,
\record, 0.0,
\buffer, buffer
],
s,
\addToTail
))
});
~bufrecorder = ~bufrecorders[0];
// the main granulator synth // the main granulator synth
@ -347,14 +356,15 @@ OSCdef.freeAll;
~to.button('/reset', 0, { | v | ~to.button('/reset', 0, { | v |
if( v > 0, { if( v > 0, {
var sp = ~to.v('/grains/speed')[0]; "TODO: rewrite this for multitrack".postln;
~buflen = ~to.v('/grains/buflen'); // var sp = ~to.v('/grains/speed')[0];
[ "resetting buffers to", ~buflen ].postln; // ~buflen = ~to.v('/grains/buflen');
~makebuffers.value(); // [ "resetting buffers to", ~buflen ].postln;
~granulator.set(\buffer, ~frippbuffers[~currentfripp]); // ~makebuffers.value();
~bufrecorder.set(\buffer, ~frippbuffers[~currentfripp]); // ~granulator.set(\buffer, ~frippbuffers[~currentfripp]);
// ~bufrecorder.set(\buffer, ~frippbuffers[~currentfripp]);
~playbacklfo.set(\speed, sp / ~buflen); //
// ~playbacklfo.set(\speed, sp / ~buflen);
}); });
}); });
@ -362,8 +372,10 @@ OSCdef.freeAll;
~to.button('/track', 0, { |v| ~to.button('/track', 0, { |v|
var buffer = ~frippbuffers[v]; var buffer = ~frippbuffers[v];
if( buffer.isNil.not, { if( buffer.isNil.not, {
~bufrecorder.set(\record, 0.0);
~bufrecorder = ~bufrecorders[v];
~bufrecorder.set(\record, ~to.v('/record'));
~granulator.set(\buffer, buffer); ~granulator.set(\buffer, buffer);
~bufrecorder.set(\buffer, buffer);
[ "set track to", v, buffer ].postln; [ "set track to", v, buffer ].postln;
}, { }, {
[ "Bad track index", v ].postln; [ "Bad track index", v ].postln;