You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am adding a working example of the "// really really bad cross synthesizer..." . Some little adjustments but I don't know why the signal that is being re-synthesized needs to be boosted by such a big factor. I tried the same example using SndBufs and an impulse response and the gain needs to be boosted by a factor of 1000.
//Using headphones is recommended
// source one (mic)
adc => FFT X => blackhole;
FFT Y => blackhole;
IFFT ifft => Gain amp => dac;
//to add some dry signal to the chain
adc => Delay d => Gain dry => dac;
// source two (to be connected below)
BlitSquare blt[6];
[ 40, 46, 52, 60, 64, 87] @=> int pitches[];
for( int i; i < blt.size(); i++ )
{
blt[i] => Y;
20 => blt[i].harmonics;
pitches[i] => Std.mtof => blt[i].freq;
}
// This number will make a huge difference on the sound quality
// Powers of 2 usually recommended (try 2, 4, 8, 16, 32 ...)
64 => int fftSizeScaler;
// The amount of the original signal you want to hear in the final mix
0.04 => dry.gain;
// The gain of the convoluted (wet) signal
10 => amp.gain;
// set FFT size really big to get a better sound quality but it introduces a lot of delay (trade off)
128*fftSizeScaler => int FFT_SIZE;
FFT_SIZE => X.size => Y.size;
// set window and window size
Windowing.triangle(FFT_SIZE) => X.window => Y.window => ifft.window;
// use this to hold contents
complex Z[FFT_SIZE/2];
// desired hop size
FFT_SIZE / 4 => int HOP_SIZE;
// control loop
while( true )
{
// take ffts
X.upchuck();
Y.upchuck();
// multiply in frequency domain
for(int i; i < FFT_SIZE/2; i++){
//Math.sqrt((Y.cval(i)$polar).mag) * X.cval(i) => Z[i];
// Simple element wise multiplication should work in freq domain:
(X.cval(i) * (Y.cval(i))) * 4 => Z[i];
}
// take ifft
ifft.transform( Z );
// advance time
HOP_SIZE::samp => now;
}
The text was updated successfully, but these errors were encountered:
I am adding a working example of the "// really really bad cross synthesizer..." . Some little adjustments but I don't know why the signal that is being re-synthesized needs to be boosted by such a big factor. I tried the same example using SndBufs and an impulse response and the gain needs to be boosted by a factor of 1000.
//Using headphones is recommended
// source one (mic)
adc => FFT X => blackhole;
FFT Y => blackhole;
IFFT ifft => Gain amp => dac;
//to add some dry signal to the chain
adc => Delay d => Gain dry => dac;
// source two (to be connected below)
BlitSquare blt[6];
[ 40, 46, 52, 60, 64, 87] @=> int pitches[];
for( int i; i < blt.size(); i++ )
{
blt[i] => Y;
20 => blt[i].harmonics;
pitches[i] => Std.mtof => blt[i].freq;
}
// This number will make a huge difference on the sound quality
// Powers of 2 usually recommended (try 2, 4, 8, 16, 32 ...)
64 => int fftSizeScaler;
(128fftSizeScaler)::samp => d.max;
(128fftSizeScaler)::samp => d.delay;
// The amount of the original signal you want to hear in the final mix
0.04 => dry.gain;
// The gain of the convoluted (wet) signal
10 => amp.gain;
// set FFT size really big to get a better sound quality but it introduces a lot of delay (trade off)
128*fftSizeScaler => int FFT_SIZE;
FFT_SIZE => X.size => Y.size;
// set window and window size
Windowing.triangle(FFT_SIZE) => X.window => Y.window => ifft.window;
// use this to hold contents
complex Z[FFT_SIZE/2];
// desired hop size
FFT_SIZE / 4 => int HOP_SIZE;
// control loop
while( true )
{
// take ffts
X.upchuck();
Y.upchuck();
}
The text was updated successfully, but these errors were encountered: