Beispiel #1
0
      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);
      }
Beispiel #2
0
/*--------------------------------------------------------------------------*/
long _fftwT (double tlim) /* set time limit on planning */
{
  fftw_set_timelimit(tlim);
  return (1);
}
Beispiel #3
0
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);
}