added example folder in the package, plus typos

nix
Pierre Alexandre Tremblay 7 years ago
parent ed5e8dafa1
commit b897857dae

@ -183,4 +183,4 @@ f.play;
// compare with the original
b.play;
::
::

@ -115,55 +115,54 @@ Discussion::
EXAMPLES::
code::
//load buffers
(
b = Buffer.read(s,File.realpath(FluidBufHPSS.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Tremblay-AaS-SynthTwoVoices-M.wav");
c = Buffer.new(s);
d = Buffer.new(s);
e = Buffer.new(s);
)
// run with basic parameters
(
Routine{
t = Main.elapsedTime;
FluidBufHPSS.process(s, b.bufnum, harmBufNum: c.bufnum, percBufNum: d.bufnum);
//load buffers
(
b = Buffer.read(s,File.realpath(FluidBufHPSS.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Tremblay-AaS-SynthTwoVoices-M.wav");
c = Buffer.new(s);
d = Buffer.new(s);
e = Buffer.new(s);
)
// run with basic parameters
(
Routine{
t = Main.elapsedTime;
FluidBufHPSS.process(s, b.bufnum, harmBufNum: c.bufnum, percBufNum: d.bufnum);
s.sync;
(Main.elapsedTime - t).postln;
}.play
)
//query and play the harmonic
c.query;
c.play;
//querry and play the percussive
d.query;
d.play;
//nullsumming tests
{(PlayBuf.ar(1,c.bufnum))+(PlayBuf.ar(1,d.bufnum))+(-1*PlayBuf.ar(1,b.bufnum,doneAction:2))}.play
//more daring parameters, in mode 2
(
Routine{
t = Main.elapsedTime;
FluidBufHPSS.process(s, b.bufnum, harmBufNum: c.bufnum, percBufNum: d.bufnum, resBufNum:e.bufnum, harmFiltSize:31, modeFlag:2, htf1: 0.005, hta1: 7.5, htf2: 0.168, hta2: 7.5, ptf1: 0.004, pta1: 26.5, ptf2: 0.152, pta2: 26.5);
s.sync;
(Main.elapsedTime - t).postln;
}.play
)
//query and play the harmonic
c.query;
c.play;
//querry and play the percussive
d.query;
d.play;
//nullsumming tests
{(PlayBuf.ar(1,c.bufnum))+(PlayBuf.ar(1,d.bufnum))+(-1*PlayBuf.ar(1,b.bufnum,doneAction:2))}.play
//more daring parameters, in mode 2
(
Routine{
t = Main.elapsedTime;
FluidBufHPSS.process(s, b.bufnum, harmBufNum: c.bufnum, percBufNum: d.bufnum, resBufNum:e.bufnum, harmFiltSize:31, modeFlag:2, htf1: 0.005, hta1: 7.5, htf2: 0.168, hta2: 7.5, ptf1: 0.004, pta1: 26.5, ptf2: 0.152, pta2: 26.5);
s.sync;
(Main.elapsedTime - t).postln;
}.play
)
//query and play the harmonic
c.query;
c.play;
//query and play the percussive
d.query;
d.play;
//query and play the residual
e.query;
e.play;
//still nullsumming
{PlayBuf.ar(1,c.bufnum) + PlayBuf.ar(1,d.bufnum) + PlayBuf.ar(1,e.bufnum) - PlayBuf.ar(1,b.bufnum,doneAction:2)}.play;
::
(Main.elapsedTime - t).postln;
}.play
)
//query and play the harmonic
c.query;
c.play;
//query and play the percussive
d.query;
d.play;
//query and play the residual
e.query;
e.play;
//still nullsumming
{PlayBuf.ar(1,c.bufnum) + PlayBuf.ar(1,d.bufnum) + PlayBuf.ar(1,e.bufnum) - PlayBuf.ar(1,b.bufnum,doneAction:2)}.play;
::

@ -109,7 +109,4 @@ Routine{
(Main.elapsedTime - t).postln;
}.play
)
::
::

@ -28,14 +28,14 @@ RETURNS::
EXAMPLES::
Summing with the inverse (gain of -1) with a delay of the latency gives us CPU-expensive silence.
CODE::
{ var source = PinkNoise.ar(0.1); DelayN.ar(source,delaytime:1000/s.sampleRate) + FluidGain.ar(source,1000,-1); }.play
::
Varying the gain at audio rate.
CODE::
{ FluidGain.ar(PinkNoise.ar(0.1), gain:LFTri.ar(1)) }.play
::
Varying the gain at comtrol rate, in beautiful stereo.
CODE::
{ FluidGain.ar(SinOsc.ar([222,333],mul:0.1), gain:LFTri.kr([0.5,0.7])) }.play
::
CODE::
{ var source = PinkNoise.ar(0.1); DelayN.ar(source,delaytime:1000/s.sampleRate) + FluidGain.ar(source,1000,-1); }.play
::
Varying the gain at audio rate.
CODE::
{ FluidGain.ar(PinkNoise.ar(0.1), gain:LFTri.ar(1)) }.play
::
Varying the gain at comtrol rate, in beautiful stereo.
CODE::
{ FluidGain.ar(SinOsc.ar([222,333],mul:0.1), gain:LFTri.kr([0.5,0.7])) }.play
::

@ -89,24 +89,23 @@ Discussion::
EXAMPLES::
CODE::
//load a soundfile to play
b = Buffer.read(s,File.realpath(FluidHPSS.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Tremblay-AaS-SynthTwoVoices-M.wav");
//load a soundfile to play
b = Buffer.read(s,File.realpath(FluidHPSS.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Tremblay-AaS-SynthTwoVoices-M.wav");
// run with basic parameters (left is harmonic, right is percussive)
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1))}.play
// run with basic parameters (left is harmonic, right is percussive)
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1))}.play
// run in mode 1
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,1,0.05,40,0.1,-40)}.play
// run in mode 1
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,1,0.05,40,0.1,-40)}.play
// run in mode 2m listening to
//the harmonic stream
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,2,0.05,40,0.1,-40, 0.1, -10, 0.2, 10)[0].dup}.play
// the percussive stream
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,2,0.05,40,0.1,-40, 0.1, -10, 0.2, 10)[1].dup}.play
// the residual stream
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,2,0.05,40,0.1,-40, 0.1, -10, 0.2, 10)[2].dup}.play
// run in mode 2m listening to
//the harmonic stream
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,2,0.05,40,0.1,-40, 0.1, -10, 0.2, 10)[0].dup}.play
// the percussive stream
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,2,0.05,40,0.1,-40, 0.1, -10, 0.2, 10)[1].dup}.play
// the residual stream
{FluidHPSS.ar(PlayBuf.ar(1,b.bufnum,loop:1),17,31,2,0.05,40,0.1,-40, 0.1, -10, 0.2, 10)[2].dup}.play
// null test (the process add a latency of ((harmFiltSize + (winSize / hopSize) - 1) * hopSize) samples
{var sig = PlayBuf.ar(1,b.bufnum,loop:1); [FluidHPSS.ar(sig,17,31, winSize:1024,hopSize:512,fftSize:2048).sum - DelayN.ar(sig, 1, ((31 + 1) * 512 / s.sampleRate))]}.play
// null test (the process add a latency of ((harmFiltSize + (winSize / hopSize) - 1) * hopSize) samples
{var sig = PlayBuf.ar(1,b.bufnum,loop:1); [FluidHPSS.ar(sig,17,31, winSize:1024,hopSize:512,fftSize:2048).sum - DelayN.ar(sig, 1, ((31 + 1) * 512 / s.sampleRate))]}.play
::

@ -31,19 +31,19 @@ RETURNS::
EXAMPLES::
Summing with the inverse (gain of -1) with a delay of the latency gives us CPU-expensive silence.
CODE::
{ var source = PinkNoise.ar(0.1); DelayN.ar(source, delaytime:1024/s.sampleRate, mul: -1) + FluidSTFTPass.ar(source, 1024, 256, 1024); }.play
::
Larger, oversampled, FFT
CODE::
{ FluidSTFTPass.ar(PinkNoise.ar(0.1), 2048, 128, 8192) }.play
::
Stereo Input Tests.
CODE::
{ FluidSTFTPass.ar([SinOsc.ar(222,mul: 0.1), PinkNoise.ar(Decay.ar(Impulse.ar(0.666,mul: 0.2), 0.5))], fftSize:1024)}.play
::
Stereo Parameter Tests.
CODE::
{ FluidSTFTPass.ar(SinOsc.ar(222,mul: 0.1), [1024,8192],256,8192)}.play
::
Summing with the inverse (gain of -1) with a delay of the latency gives us CPU-expensive silence.
CODE::
{ var source = PinkNoise.ar(0.1); DelayN.ar(source, delaytime:1024/s.sampleRate, mul: -1) + FluidSTFTPass.ar(source, 1024, 256, 1024); }.play
::
Larger, oversampled, FFT
CODE::
{ FluidSTFTPass.ar(PinkNoise.ar(0.1), 2048, 128, 8192) }.play
::
Stereo Input Tests.
CODE::
{ FluidSTFTPass.ar([SinOsc.ar(222,mul: 0.1), PinkNoise.ar(Decay.ar(Impulse.ar(0.666,mul: 0.2), 0.5))], fftSize:1024)}.play
::
Stereo Parameter Tests.
CODE::
{ FluidSTFTPass.ar(SinOsc.ar(222,mul: 0.1), [1024,8192],256,8192)}.play
::

@ -71,4 +71,3 @@ b = Buffer.read(s,File.realpath(FluidTransientSlice.class.filenameSymbol).dirnam
}.play
)
::

@ -0,0 +1,37 @@
//destination buffer
b = Buffer.alloc(s,1);
c = Array.new();
//this patch requests a folder and will iterate through all accepted audiofiles and concatenate them in the destination buffer. It will also yield an array with the numFrame where files start in the new buffer.
(
var tempbuf,dest=0, fileNames;
FileDialog.new({|selection|
var total;
fileNames = PathName.new(selection[0])
.entries
.select({|f|
[\wav, \WAV, \mp3,\aif].includes(f.extension.asSymbol);});
total = fileNames.size() - 1;
Routine{
fileNames.do{|f, i|
f.postln;
("Loading"+i+"of"+total).postln;
tempbuf = Buffer.read(s,f.asAbsolutePath);
s.sync;
c = c.add(dest);
FluidBufCompose.process(s,tempbuf.bufnum,dstStartAtA:dest,srcBufNumB:b.bufnum,dstBufNum:b.bufnum);
s.sync;
b.updateInfo();
s.sync;
dest = b.numFrames;
};
"load buffers done".postln;
}.play;
}, fileMode:2);
)
b.plot
c.postln
b.play

@ -0,0 +1,57 @@
s.reboot
//this patch does just-in-time nmf processes on buffer, faking a slightly delayed real-time version of it
//what is happening:
//a circular buffer is doing a fake real time - every half second, it sends a frame to be proceesed by NMF~, requesting 3 ranks. Because this latter process is randomly seeded and not sorted, the 3 ranks are not getting similar results each time, hence the random pan
(
b = Buffer.alloc(s,s.sampleRate * 2);
c = Buffer.new(s,0,3);
d = Buffer.new(s,0,3);
e = Buffer.read(s,File.realpath(FluidBufNMF.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Nicol-LoopE-M.wav");
g = Bus.audio(s,1);
h = Buffer.loadCollection(s, Signal.rectWindow(22491).fade(0,440).fade(22049,22489,1,0).put(22490,0));
SynthDef(\becauseIcan,{arg bufnum = 0, nmfa = 0, nmfb = 0, input = 0, env = 0;
var head, head2, duration, audioin, halfdur;
duration = BufFrames.kr(bufnum) / 2;
halfdur = duration / 2;
head = Phasor.ar(0,1,0,duration);
head2 = (head + halfdur) % duration;
// circular buffer writer
audioin = In.ar(input,1);
BufWr.ar(audioin,bufnum,head,0);
BufWr.ar(audioin,bufnum,head+duration,0);
// cue the calculations via the language
SendReply.ar(head > 500, '/processplease',2);
SendReply.ar(head > (halfdur + 500), '/processplease',1);
// read the 2 buffers with an envelop
Out.ar(0, Splay.ar(BufRd.ar(3,nmfa,head,0,1) * BufRd.ar(1,env,head,0,1)) + Splay.ar(BufRd.ar(3,nmfb,head2,0,1) * BufRd.ar(1,env,head2,0,1)));
}).add;
SynthDef(\playa, { arg output = 0, bufnum = 0;
Out.ar(output,PlayBuf.ar(1,bufnum,loop:1));
}).add;
)
// instantiate the player
x = Synth(\playa,[\output, g.index, \bufnum, e.bufnum]);
// instantiate the processor
y = Synth(\becauseIcan,[\bufnum, b.bufnum, \nmfa, c.bufnum, \nmfb, d.bufnum, \input, g.index, \env, h.bufnum], x, 'addAfter');
// instantiate the listener to cue the processing from the language side
(
w = OSCFunc({ arg msg;
if(msg[3]== 1, {
FluidBufNMF.process(s, b.bufnum, nFrames: 22500, dstBufNum: c.bufnum, rank: 3, fftSize: 1024, winSize: 512, hopSize: 256);
}, {
FluidBufNMF.process(s, b.bufnum, 22050, 22500, dstBufNum: d.bufnum, rank: 3, fftSize: 1024, winSize: 512, hopSize: 256);
});}, '/processplease', s.addr);
)
// stop it all
b.free;c.free;d.free;e.free;f.free;g.free;w.clear;x.free; y.free;
Loading…
Cancel
Save