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
## 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
Change harmonics for chorus
Lock harmonics to octaves / ratios
## Effects chain
Add an effects chain like with midilooper
-> filter -> reverb -> out
- rhythm controls
- number of steps in step granulator
- modulate grain level in time with playback
- sync LFOs to playback
## 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();
~bufrecorder = SynthDef(
SynthDef(
\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);
RecordBuf.ar(insig, ~frippbuffers[bufindex], 0, mix, 1 - mix, loop: 1)
RecordBuf.ar(insig, buffer, 0, mix, 1 - mix, loop: 1)
}
).play(s, [
\in, ~recordb,
\record, 1.0,
// \fb, ~granulatorb,
\out, 0,
\bufindex, ~currentfripp,
\addToTail
]
);
).add;
~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
@ -347,14 +356,15 @@ OSCdef.freeAll;
~to.button('/reset', 0, { | v |
if( v > 0, {
var sp = ~to.v('/grains/speed')[0];
~buflen = ~to.v('/grains/buflen');
[ "resetting buffers to", ~buflen ].postln;
~makebuffers.value();
~granulator.set(\buffer, ~frippbuffers[~currentfripp]);
~bufrecorder.set(\buffer, ~frippbuffers[~currentfripp]);
~playbacklfo.set(\speed, sp / ~buflen);
"TODO: rewrite this for multitrack".postln;
// var sp = ~to.v('/grains/speed')[0];
// ~buflen = ~to.v('/grains/buflen');
// [ "resetting buffers to", ~buflen ].postln;
// ~makebuffers.value();
// ~granulator.set(\buffer, ~frippbuffers[~currentfripp]);
// ~bufrecorder.set(\buffer, ~frippbuffers[~currentfripp]);
//
// ~playbacklfo.set(\speed, sp / ~buflen);
});
});
@ -362,8 +372,10 @@ OSCdef.freeAll;
~to.button('/track', 0, { |v|
var buffer = ~frippbuffers[v];
if( buffer.isNil.not, {
~bufrecorder.set(\record, 0.0);
~bufrecorder = ~bufrecorders[v];
~bufrecorder.set(\record, ~to.v('/record'));
~granulator.set(\buffer, buffer);
~bufrecorder.set(\buffer, buffer);
[ "set track to", v, buffer ].postln;
}, {
[ "Bad track index", v ].postln;