2 patches are attached, one being an instrument version of the other. The patch is a mulit delay, each line having a filter controlled by a range slider. The weird thing is that as an instrument it seems to work differently in that delay feedback is not so extreme, does not build up and up . . . so why I wonder. Also why does the first delay make a horrible click when one tries to adjust its filter ? And also a banal no brainer for SC3 . . . . what is the path from Macintosh HD/Applications (OS 9)/SC 2.2.16/Sounds into SC3 . . . . ? Can't seem to find it. Thanks, Jem
Attachment:
multi delay/filters
Description: application/applefile
(
//simple delay vsn - multi band - record version - feedback vsn
//sample size -> delay time
Synth.dualScope({
arg synth;
var in,lofreq,hifreq,freqs,bandwidth;
var filename,sound,signal;
var input,buffers,delayedSignals,mixedSignals;
var out;
var recFile,recFilename,recBtn;
var w, w2, l, delayCoef;
var n = 10;
var maxDelay = 6.0;
w = GUIWindow.new("blank/feedback/dry", Rect.newBy(585, 489, 342, 198));
SliderView.new( w, Rect.newBy(14, 11, 316, 29), "SliderView", 0.4, 0.01, 1, 0);
SliderView.new( w, Rect.newBy(14, 44, 316, 29), "SliderView", 0.5, 0, 1, 0, 'linear');
SliderView.new( w, Rect.newBy(14, 77, 316, 29), "SliderView", 1, 0, 1, 0, 'linear');
recBtn = CheckBoxView.new( w, Rect.newBy(20, 151, 128, 20), "record", 0, 0, 1, 0, 'linear');
signal = Signal.newClear(Synth.sampleRate * 2.0);
l = signal.size/Synth.sampleRate;
delayCoef = l/16;
while({delayCoef >0.125},{delayCoef = delayCoef/2});
w2 = GUIWindow.new("bands/delay times", Rect.newBy(14, 459, 720, 297));
n.do({arg i;var lowf;lowf = (20000/n)*i;
RangeView.new( w2, Rect.newBy(13, i*26+25, 280, 22), "RangeView", lowf , 20000/n, 0, 20000, 0);
});
n.do({arg i;
SliderView.new( w2, Rect.newBy(383, i*26+25, 128, 20), "SliderView", i + 1, 1, 128, 1)
});
n.do({arg i;
NumericalView.new( w2, Rect.newBy(303,i*26+25, 64, 20), "NumericalView", i * delayCoef + delayCoef, 0.05, 6.0, 0.00)
});
n.do({arg i;
w2.at(i + n).action = {w2.at(i + (2*n)).value = maxDelay.min(w2.at(i + n).value*delayCoef)};
//w2.at(i + n).action = {w2.at(i + (2*n)).value = w2.at(i + n).value};
//w2.at(i + (2*n)).action = {w2.at(i + n).value = w2.at(i + (2*n)).value}
});
//frequency bands
hifreq = Array.fill(n,{arg i;Plug.ar(w2.at(i).highValue)});
lofreq = Array.fill(n,{arg i;Plug.ar(w2.at(i).value)});
synth.repeat(0,0.25,{
n.do({arg i;
hifreq.at(i).source = w2.at(i).highValue;
lofreq.at(i).source = w2.at(i).value})
});
//buffers
buffers = Array.fill(n,{Signal.new(Synth.sampleRate * maxDelay)});
//initialise record
recFile = SoundFile.new;
recFile.numChannels = 2;
recFile.headerFormat = 'AIFF';
recFile.sampleFormat = '16 big endian signed';
recFilename = ":Sounds:multiFiltDelay_" ++ (1000000.rand);
if (recFile.writeHeader(recFilename), {recFile.prepareRecord},
{("write record file header failed : " ++ recFilename).postln;
recFile = nil});
//in = LFNoise1.ar(10);
in = RecordBuf.ar(signal, AudioIn.ar(1), 1, MouseY.kr(0.1, 1), 0, 1, 1);
in = PlayBuf.ar(signal, Synth.sampleRate, 1, 0, 0, signal.size-2);
input = Array.fill(n,{arg i;HPF.ar(LPF.ar(in, hifreq.at(i)), lofreq.at(i))});
//delays
delayedSignals = Array.fill(n,{arg i; TapN.ar(buffers.at(i),w2.at(2*n+i).kr)});
mixedSignals = Array.fill(n,{arg i; (input.at(i)*w.at(2).kr) + (delayedSignals.at(i)*w.at(1).kr)});
Array.fill(n,{arg i;DelayWr.ar(buffers.at(i),mixedSignals.at(i))});
out = Mix.ar(mixedSignals);
out = Pan2.ar(out,0);
//record
Pause.ar({ DiskOut.ar(recFile, 32768, out); }, recBtn.kr);
out
});
GUIWindow.closeAll
)
///////////
//as instrument
//amp arg controls mix of dry and fx, delay arg controls amount of feedback
(
Library.put(['audio-in', 'filtDelay2'],
{var a,j;
a = Instrument.new(\filtDelay2, {
arg delay = 0.8,amp = 0.9,panRate = 0.1;
var in,lofreq,hifreq,freqs,bandwidth;
var filename,sound,signal;
var input,buffers,delayedSignals,mixedSignals;
var out;
var recFile,recFilename,recBtn;
var w, w2, l, delayCoef;
var n = 10;
var maxDelay = 6.0;
var left,right;
signal = Signal.newClear(Synth.sampleRate * maxDelay);
l = signal.size/Synth.sampleRate;
delayCoef = l/16;
while({delayCoef >0.125},{delayCoef = delayCoef/2});
w2 = GUIWindow.new("bands/delay times", Rect.newBy(14, 459, 720, 297));
n.do({arg i;var lowf;lowf = (20000/n)*i;
RangeView.new( w2, Rect.newBy(13, i*26+25, 280, 22), "RangeView", lowf , 20000/n, 0, 20000, 0);
});
n.do({arg i;
SliderView.new( w2, Rect.newBy(383, i*26+25, 128, 20), "SliderView", i + 1, 1, 128, 1)
});
n.do({arg i;
NumericalView.new( w2, Rect.newBy(303,i*26+25, 64, 20), "NumericalView", i * delayCoef + delayCoef, 0.05, 6.0, 0.00)
});
n.do({arg i;
w2.at(i + n).action = {w2.at(i + (2*n)).value = maxDelay.min(w2.at(i + n).value*delayCoef)};
//w2.at(i + n).action = {w2.at(i + (2*n)).value = w2.at(i + n).value};
//w2.at(i + (2*n)).action = {w2.at(i + n).value = w2.at(i + (2*n)).value}
});
//frequency bands
hifreq = Array.fill(n,{arg i;Plug.ar(w2.at(i).highValue)});
lofreq = Array.fill(n,{arg i;Plug.ar(w2.at(i).value)});
thisSynth.repeat(0,0.25,{
n.do({arg i;
hifreq.at(i).source = w2.at(i).highValue;
lofreq.at(i).source = w2.at(i).value})
});
//buffers
buffers = Array.fill(n,{Signal.new(Synth.sampleRate * maxDelay)});
//in = LFNoise1.ar(10);
//in = RecordBuf.ar(signal, AudioIn.ar(1), 1, odLevel, offOn, offOn, 1);
in = RecordBuf.ar(signal, AudioIn.ar(1), 1, MouseY.kr(0.1, 1), 0, 1, 1);
in = PlayBuf.ar(signal, Synth.sampleRate, 1, 0, 0, signal.size-2);
input = Array.fill(n,{arg i;HPF.ar(LPF.ar(in, hifreq.at(i)), lofreq.at(i))});
//delays
delayedSignals = Array.fill(n,{arg i; TapN.ar(buffers.at(i),w2.at(2*n+i).kr)});
mixedSignals = Array.fill(n,{arg i; (input.at(i)*amp.source.value) + (delayedSignals.at(i)*delay.source.value)});
Array.fill(n,{arg i;DelayWr.ar(buffers.at(i),mixedSignals.at(i))});
out = Mix.ar(mixedSignals);
out = Pan2.ar(out,0);
out
});
a.play
})
);