Add non realtime Sines
parent
de3440d3a0
commit
cd26246a04
@ -0,0 +1,14 @@
|
|||||||
|
FDSines{
|
||||||
|
*process { arg server, src, offsetframes = 0, numframes = -1, offsetchans = 0, numchans = -1, sinebuf, resbuf, bandwidth = 76, threshold = 0.7, mintracklen = 15, magweight = 0.1, freqweight = 1, winsize = 4096, hopsize = 1024, fftsize = -1;
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
if(src.bufnum.isNil) {Error("Invalid Buffer").format(thisMethod.name, this.class.name).throw};
|
||||||
|
|
||||||
|
server.sendMsg(\cmd, \BufSines, src.bufnum, offsetframes, numframes, offsetchans, numchans,
|
||||||
|
if( sinebuf.isNil, -1, {sinebuf.bufnum}),
|
||||||
|
if( resbuf.isNil, -1, {resbuf.bufnum}), bandwidth, threshold, mintracklen, magweight, freqweight, winsize, hopsize, fftsize);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
s = Server.default;
|
||||||
|
s.reboot
|
||||||
|
|
||||||
|
(
|
||||||
|
b = Buffer.read(s,"/Users/owen/Desktop/denoise_stn/sources/01-mix.wav");
|
||||||
|
h = Buffer.new(s,0,1);
|
||||||
|
n = Buffer.new(s,0,1);
|
||||||
|
)
|
||||||
|
|
||||||
|
Buffer.new(s)
|
||||||
|
|
||||||
|
FDSines.process(s,b,0,1-1,0,-1,h,n,15,0.2)
|
||||||
|
|
||||||
|
n.play;
|
||||||
|
h.play;
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.3)
|
||||||
|
get_filename_component(PLUGIN ${CMAKE_CURRENT_LIST_DIR} NAME_WE)
|
||||||
|
message("Configuring ${PLUGIN}")
|
||||||
|
set(FILENAME ${PLUGIN}.cpp)
|
||||||
|
|
||||||
|
add_library(
|
||||||
|
${PLUGIN}
|
||||||
|
MODULE
|
||||||
|
${FILENAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
${PLUGIN} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../../include
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
${PLUGIN} PRIVATE FLUID_DECOMPOSITION
|
||||||
|
)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake)
|
||||||
@ -0,0 +1,145 @@
|
|||||||
|
s.reboot
|
||||||
|
////////////////////////////
|
||||||
|
// test for efficiency
|
||||||
|
|
||||||
|
(
|
||||||
|
b = Buffer.read(s,"/Users/pa/Documents/documents@hudd/research/projects/fluid corpus navigation/research/archives-2017-18/denoise_stn/sources/01-mix.wav");
|
||||||
|
c = Buffer.new(s);
|
||||||
|
x = Buffer.new(s);
|
||||||
|
y = Buffer.new(s);
|
||||||
|
~fft_size = 1024;
|
||||||
|
~frame_size = 512;
|
||||||
|
~hop_size = 256;
|
||||||
|
~which_rank = 0;
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
// without sources
|
||||||
|
Routine{
|
||||||
|
t = Main.elapsedTime;
|
||||||
|
FDNMF.process(s,b.bufnum,0,-1,0,-1,nil,x.bufnum,0,y.bufnum,0,5,100,0,~frame_size,~hop_size,~fft_size);
|
||||||
|
s.sync;
|
||||||
|
(Main.elapsedTime - t).postln;
|
||||||
|
}.play
|
||||||
|
);
|
||||||
|
|
||||||
|
// with sources only
|
||||||
|
(
|
||||||
|
Routine{
|
||||||
|
t = Main.elapsedTime;
|
||||||
|
FDNMF.process(s,b.bufnum, 0,-1,0,-1,c.bufnum,nil,0,nil,0,5,100,0,~frame_size,~hop_size,~fft_size);
|
||||||
|
s.sync;
|
||||||
|
(Main.elapsedTime - t).postln;
|
||||||
|
}.play
|
||||||
|
)
|
||||||
|
|
||||||
|
// with everything
|
||||||
|
(
|
||||||
|
Routine{
|
||||||
|
t = Main.elapsedTime;
|
||||||
|
FDNMF.process(s,b.bufnum, 0,-1,0,-1,c.bufnum,x.bufnum,0,y.bufnum,0,5,100,0,~frame_size,~hop_size,~fft_size);
|
||||||
|
s.sync;
|
||||||
|
(Main.elapsedTime - t).postln;
|
||||||
|
}.play
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
//look at the dictionaries and activations
|
||||||
|
c.plot;x.plot; y.plot;
|
||||||
|
//null test of the sum of sources
|
||||||
|
{(PlayBuf.ar(5,c.bufnum,doneAction:2).sum)+(-1*PlayBuf.ar(1,b.bufnum,doneAction:2))}.play
|
||||||
|
|
||||||
|
// play around
|
||||||
|
{Splay.ar(PlayBuf.ar(5,c.bufnum,doneAction:2))}.play
|
||||||
|
|
||||||
|
//play a single source
|
||||||
|
{PlayBuf.ar(5,c.bufnum,doneAction:2)[~which_rank].dup}.play
|
||||||
|
|
||||||
|
//play noise through a filter
|
||||||
|
(
|
||||||
|
{
|
||||||
|
var chain;
|
||||||
|
chain = FFT(LocalBuf(~fft_size), WhiteNoise.ar());
|
||||||
|
|
||||||
|
chain = chain.pvcollect(~fft_size, {|mag, phase, index|
|
||||||
|
[mag * BufRd.kr(5,x.bufnum,DC.kr(index),0,1)[~which_rank]];
|
||||||
|
});
|
||||||
|
|
||||||
|
IFFT(chain);
|
||||||
|
}.play
|
||||||
|
)
|
||||||
|
|
||||||
|
//play noise through an activation
|
||||||
|
{WhiteNoise.ar(BufRd.kr(5,y.bufnum,Phasor.ar(1,1/~hop_size,0,(b.numFrames / ~hop_size + 1)),0,1)[~which_rank])*0.5}.play
|
||||||
|
|
||||||
|
//play noise through both activation and filter
|
||||||
|
(
|
||||||
|
{
|
||||||
|
var chain;
|
||||||
|
chain = FFT(LocalBuf(~fft_size), WhiteNoise.ar(BufRd.kr(5,y.bufnum,Phasor.ar(1,1/~hop_size,0,(b.numFrames / ~hop_size + 1)),0,1)[~which_rank]*12),0.5,1);
|
||||||
|
|
||||||
|
chain = chain.pvcollect(~fft_size, {|mag, phase, index|
|
||||||
|
[mag * BufRd.kr(5,x.bufnum,DC.kr(index),0,1)[~which_rank]];
|
||||||
|
});
|
||||||
|
|
||||||
|
[0,IFFT(chain)];
|
||||||
|
}.play
|
||||||
|
)
|
||||||
|
|
||||||
|
// test with stereo input
|
||||||
|
Buffer.freeAll(s)
|
||||||
|
|
||||||
|
(
|
||||||
|
b = Buffer.read(s,"/Users/pa/Desktop/verystereo.wav");
|
||||||
|
c = Buffer.new(s);
|
||||||
|
x = Buffer.new(s);
|
||||||
|
y = Buffer.new(s);
|
||||||
|
~fft_size = 1024;
|
||||||
|
~frame_size = 512;
|
||||||
|
~hop_size = 256;
|
||||||
|
)
|
||||||
|
|
||||||
|
b.play
|
||||||
|
|
||||||
|
(
|
||||||
|
Routine{
|
||||||
|
t = Main.elapsedTime;
|
||||||
|
FDNMF.process(s,b.bufnum,0,-1,0,-1,c.bufnum,x.bufnum,0,y.bufnum,0,5,100,0,~frame_size,~hop_size,~fft_size);
|
||||||
|
s.sync;
|
||||||
|
(Main.elapsedTime - t).postln;
|
||||||
|
}.play
|
||||||
|
)
|
||||||
|
|
||||||
|
//test a single rank
|
||||||
|
{PlayBuf.ar(10,c.bufnum,doneAction:2)[9].dup}.play
|
||||||
|
|
||||||
|
// play them all across in a sort of upmixed stereo...
|
||||||
|
{Splay.ar(PlayBuf.ar(10,c.bufnum,doneAction:2))}.play
|
||||||
|
|
||||||
|
//test process on a segment
|
||||||
|
Buffer.freeAll(s)
|
||||||
|
|
||||||
|
(
|
||||||
|
b = Buffer.read(s,"/Users/pa/Desktop/verystereo.wav");
|
||||||
|
c = Buffer.new(s);
|
||||||
|
d = Buffer.new(s);
|
||||||
|
)
|
||||||
|
|
||||||
|
b.play
|
||||||
|
|
||||||
|
(
|
||||||
|
Routine{
|
||||||
|
t = Main.elapsedTime;
|
||||||
|
FDNMF.process(s,b.bufnum,44100,44100,0,1,c.bufnum,rank:2);
|
||||||
|
s.sync;
|
||||||
|
(Main.elapsedTime - t).postln;
|
||||||
|
t = Main.elapsedTime;
|
||||||
|
FDNMF.process(s,b.bufnum,8810,44100,1,1,d.bufnum,rank:2);
|
||||||
|
s.sync;
|
||||||
|
(Main.elapsedTime - t).postln;
|
||||||
|
}.play
|
||||||
|
)
|
||||||
|
c.query
|
||||||
|
c.play
|
||||||
|
d.query
|
||||||
|
d.play
|
||||||
Loading…
Reference in New Issue