static void plan_with_threads(int nthreads = -1, double timelimit=FFTW_NO_TIMELIMIT){ int av_procs = std::thread::hardware_concurrency(); if(nthreads<1 || nthreads>av_procs) nthreads = av_procs; fftw_plan_with_nthreads(nthreads); fftw_set_timelimit(timelimit); }
/*--------------------------------------------------------------------------*/ long _fftwT (double tlim) /* set time limit on planning */ { fftw_set_timelimit(tlim); return (1); }
M_vocoder::M_vocoder(QWidget* parent) : Module(M_type_vocoder, 5, parent, tr("FFT Vocoder")) { QString qs; int l1; unsigned int l2; setGeometry(MODULE_NEW_X, MODULE_NEW_Y, MODULE_VOCODER_WIDTH, MODULE_VOCODER_HEIGHT); port_M_modulator = new Port(tr("Modulator"), PORT_IN, 0, this); port_M_pitchshift = new Port(tr("Pitch Shift"), PORT_IN, 1, this); port_M_freqshift = new Port(tr("Freq Shift"), PORT_IN, 2, this); port_M_channels = new Port(tr("Channels"), PORT_IN, 3, this); port_M_carrier = new Port(tr("Carrier"), PORT_IN, 4, this); cv.out_off = 65; port_altmodulator_out = new Port (tr("Altered Mod"), PORT_OUT, 0, this); port_vocoder_out = new Port(tr("Vocoder Out"), PORT_OUT, 1, this); port_modfft_out = new Port (tr("Modulator FFT"), PORT_OUT, 2, this); port_firstharmonic_out = new Port (tr("Mod 1st H"), PORT_OUT, 3, this); fftsize = synthdata->cyclesize * 4; // fprintf (stderr, "FFTSize = %d\n", fftsize); channels = 16; configDialog->addSlider(tr("&Bins/Channel"), channels, 1, (999 < synthdata->cyclesize ? 999 : synthdata->cyclesize)); vcchannels = 0; configDialog->addSlider(tr("&VC Bins/Channels"), vcchannels, -100, 100); attack = 0; configDialog->addSlider(tr("&Attack time"), attack, 0,1); release = 0; configDialog->addSlider(tr("&Release time"), release, 0, 1); pitchshift = 0; configDialog->addSlider(tr("&Pitch shift (octaves)"), pitchshift, -3, 3); vcpitch = 0; configDialog->addSlider(tr("V&C Pitch shift"), vcpitch, -5, 5); freqshift = 0; configDialog->addSlider(tr("&Frequency (Bode) shift"), freqshift, -999, 999); vcfreqshift = 0; configDialog->addSlider(tr("VC Fre&q shift"), vcfreqshift, -500, 500); phaseshift = 0; configDialog->addSlider(tr("P&hase shift"), phaseshift, -6.283, 6.283); myFFTWindowFunc = 0; QStringList windowFormats; windowFormats << tr("Rectangular"); windowFormats << tr("Trapezoidal"); windowFormats << tr("Hann (Cosine)"); windowFormats << tr("Hamming (Cosine)"); windowFormats << tr("Tukey (flattop cosine)"); windowFormats << tr("Blackman-Nutall (minimum spill)"); configDialog->addComboBox (tr("FFT &Window function"), myFFTWindowFunc, windowFormats); dynsplice = 0; configDialog->addCheckBox(tr("Dynamic &splicing"), dynsplice); rtheta = 0; configDialog->addCheckBox(tr("R-&Theta modulator"), rtheta); modbuf = (float **)malloc(synthdata->poly * sizeof(float *)); for (l1 = 0; l1 < synthdata->poly; l1++) { modbuf[l1] = (float *)malloc( fftsize * sizeof(float)); memset( modbuf[l1], 0, fftsize * sizeof(float)); } carrbuf = (float **)malloc(synthdata->poly * sizeof(float *)); for (l1 = 0; l1 < synthdata->poly; l1++) { carrbuf[l1] = (float *)malloc( fftsize * sizeof(float)); memset( carrbuf[l1], 0, fftsize * sizeof(float)); } modmap = (float *) malloc (sizeof (float) * fftsize); armodmap = (float *) malloc (sizeof (float) * fftsize); whichwin = 0; window = (float *) malloc (sizeof (float) * fftsize); for (l2 = 0; l2 < (unsigned int) fftsize; l2++) window[l2] = windowcurve (whichwin, fftsize, l2, 0.25); // FFTW setup stuff carrinforward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); carrinbackward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); carroutforward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); carroutbackward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); modinforward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); modinbackward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); modoutforward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); modoutbackward = (fftw_complex *) fftw_malloc (sizeof (fftw_complex) * fftsize); fftw_set_timelimit (0.1); planmodforward = fftw_plan_dft_1d (fftsize, modinforward, modoutforward, FFTW_FORWARD, FFTW_MEASURE); planmodbackward = fftw_plan_dft_1d (fftsize, modinbackward, modoutbackward, FFTW_BACKWARD, FFTW_MEASURE); plancarrforward = fftw_plan_dft_1d (fftsize, carrinforward, carroutforward, FFTW_FORWARD, FFTW_MEASURE); plancarrbackward = fftw_plan_dft_1d (fftsize, carrinbackward, carroutbackward, FFTW_BACKWARD, FFTW_MEASURE); }