// This example uses the FFT to do // fairly stupid pitch shifting // By PRC, April 2008 adc => FFT fft =^ IFFT ifft => dac; // Our basic FFT, IFFT chain UAnaBlob blob; // Make blob so we can get to data 1024 => fft.size => ifft.size; // Size for FFT Windowing.hamming(512) => fft.window; // Window for smoothing while (1) { 256 :: samp => now; fft.upchuck() @=> blob; // Get data for (fft.size()/4-1 => int i; i >= 0; 1 -=> i) { blob.cvals()[i] => blob.cvals()[2*i] => blob.cvals()[2*i+1]; } // Copy spectrum upward by octave ifft.upchuck(); // Inverse FFT and output }