diff options
| author | Ricardo Wurmus <rekado@elephly.net> | 2020-12-14 09:41:36 +0100 | 
|---|---|---|
| committer | Ricardo Wurmus <rekado@elephly.net> | 2020-12-14 09:43:37 +0100 | 
| commit | 9f3cb56038392e76c001d3da4176d5363186871a (patch) | |
| tree | 004eed7e63f714ccab6efb97c2ee086488a1ceb8 | |
| parent | 41807eb5329299b8c45cd49356a4ead01ce0d469 (diff) | |
gnu: alsa-modular-synth: Update to 2.2.0.
* gnu/packages/audio.scm (alsa-modular-synth): Update to 2.2.0.
[arguments]: Remove them all.
[source]: Remove patch.
[native-inputs]: Remove gcc@5.
* gnu/packages/patches/alsa-modular-synth-fix-vocoder.patch: Remove it.
* gnu/local.mk (dist_patch_DATA): Remove patch.
| -rw-r--r-- | gnu/local.mk | 1 | ||||
| -rw-r--r-- | gnu/packages/audio.scm | 33 | ||||
| -rw-r--r-- | gnu/packages/patches/alsa-modular-synth-fix-vocoder.patch | 522 | 
3 files changed, 3 insertions, 553 deletions
| diff --git a/gnu/local.mk b/gnu/local.mk index 18a2389514..7d0458ca05 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -791,7 +791,6 @@ dist_patch_DATA =						\    %D%/packages/patches/akonadi-not-relocatable.patch		\    %D%/packages/patches/akonadi-timestamps.patch		\    %D%/packages/patches/allegro-mesa-18.2.5-and-later.patch	\ -  %D%/packages/patches/alsa-modular-synth-fix-vocoder.patch	\    %D%/packages/patches/amule-crypto-6.patch			\    %D%/packages/patches/anki-mpv-args.patch			\    %D%/packages/patches/antiword-CVE-2014-8123.patch			\ diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index 7a5dfe0223..4acc345c3e 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -476,41 +476,15 @@ implementation of Adaptive Multi Rate Narrowband and Wideband  (define-public alsa-modular-synth    (package      (name "alsa-modular-synth") -    (version "2.1.2") +    (version "2.2.0")      (source (origin                (method url-fetch)                (uri (string-append "mirror://sourceforge/alsamodular/alsamodular"                                    "/" version "/ams-" version ".tar.bz2"))                (sha256                 (base32 -                "1azbrhpfk4nnybr7kgmc7w6al6xnzppg853vas8gmkh185kk11l0")) -              (patches -               (search-patches "alsa-modular-synth-fix-vocoder.patch")))) +                "056dn6b9c5nsw2jdww7z1kxrjqqfvxjzxhsd5x9gi4wkwyiv21nz"))))      (build-system gnu-build-system) -    (arguments -     `(#:configure-flags -       '("--enable-qt5" -         "CXXFLAGS=-std=gnu++11") -       #:phases -       (modify-phases %standard-phases -         (add-after 'set-paths 'hide-default-gcc -           (lambda* (#:key inputs #:allow-other-keys) -             (let ((gcc (assoc-ref inputs "gcc"))) -               ;; Remove the default GCC from CPLUS_INCLUDE_PATH to prevent -               ;; conflicts with the GCC 5 input. -               (setenv "CPLUS_INCLUDE_PATH" -                       (string-join -                        (delete (string-append gcc "/include/c++") -                                (string-split (getenv "CPLUS_INCLUDE_PATH") #\:)) -                        ":")) -               #t))) -         ;; Insert an extra space between linker flags. -         (add-before 'configure 'add-missing-space -           (lambda _ -             (substitute* "configure" -               (("LIBS\\+=\\$LIBSsave") "LIBS+=\" $LIBSsave\"") -               (("CFLAGS\\+=\\$CFLAGSsave") "CFLAGS+=\" $CFLAGSsave\"")) -             #t)))))      (inputs       `(("alsa-lib" ,alsa-lib)         ;; We cannot use zita-alsa-pcmi (the successor of clalsadrv) due to @@ -523,8 +497,7 @@ implementation of Adaptive Multi Rate Narrowband and Wideband         ("qtbase" ,qtbase)))      (native-inputs       `(("pkg-config" ,pkg-config) -       ("qttools" ,qttools) -       ("gcc@5" ,gcc-5))) +       ("qttools" ,qttools)))      (home-page "http://alsamodular.sourceforge.net/")      (synopsis "Realtime modular synthesizer and effect processor")      (description diff --git a/gnu/packages/patches/alsa-modular-synth-fix-vocoder.patch b/gnu/packages/patches/alsa-modular-synth-fix-vocoder.patch deleted file mode 100644 index 33a68a1dd8..0000000000 --- a/gnu/packages/patches/alsa-modular-synth-fix-vocoder.patch +++ /dev/null @@ -1,522 +0,0 @@ -This patch was taken from Debian. -https://salsa.debian.org/multimedia-team/ams/-/raw/master/debian/patches/0007-Make-vocoder-module-compatible-to-C-11.patch - -From: Guido Scholz <gscholz@users.sourceforge.net> -Date: Tue, 6 Nov 2018 21:55:38 +0100 -Subject: Make vocoder module compatible to C++11 - ---- - src/m_vocoder.cpp | 218 +++++++++++++++++++++++++++--------------------------- - src/m_vocoder.h   |  31 ++++---- - 2 files changed, 124 insertions(+), 125 deletions(-) - -diff --git a/src/m_vocoder.cpp b/src/m_vocoder.cpp -index 572cf65..371e2cf 100644 ---- a/src/m_vocoder.cpp -+++ b/src/m_vocoder.cpp -@@ -18,10 +18,6 @@ -   along with ams.  If not, see <http://www.gnu.org/licenses/>. - */ -  --#include <stdio.h> --#include <stdlib.h> --#include <unistd.h> --#include <math.h> - #include <qwidget.h> - #include <qstring.h> - #include <qslider.h> -@@ -36,16 +32,13 @@ - #include "synthdata.h" - #include "midicheckbox.h" - #include "midislider.h" --// For FFTW to be happy we must include complex.h before fftw3.h --#include <complex.h> --#include <fftw3.h> - #include "port.h" - #include "m_vocoder.h" -  - //   Window function - One way to make the FFT behave - //   and give more continuous results over edge steps. -  --float M_vocoder::windowcurve (int windowfunc, int len, int elem, float alpha) -+float M_vocoder::windowcurve (int windowfunc, unsigned int len, int elem, float alpha) - { -   float out; -   out = 1.0; -@@ -98,6 +91,7 @@ float M_vocoder::windowcurve (int windowfunc, int len, int elem, float alpha) -   return (out); - } -  -+ - M_vocoder::M_vocoder(QWidget* parent, int id) -   : Module(M_type_vocoder, id, 5, parent, tr("FFT Vocoder")) - { -@@ -160,6 +154,7 @@ M_vocoder::M_vocoder(QWidget* parent, int id) -     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)); -@@ -175,38 +170,48 @@ M_vocoder::M_vocoder(QWidget* parent, int id) -     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 (5.0); --  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); -+  carrinforward.reserve(fftsize); -+  carrinbackward.reserve(fftsize); -+  carroutforward.reserve(fftsize); -+  carroutbackward.reserve(fftsize); -+  modinforward.reserve(fftsize); -+  modinbackward.reserve(fftsize); -+  modoutforward.reserve(fftsize); -+  modoutbackward.reserve(fftsize); -+ -+  fftw_set_timelimit(5.0); -+ -+  planmodforward = fftw_plan_dft_1d(fftsize, -+          reinterpret_cast<fftw_complex*> (modinforward.data()), -+          reinterpret_cast<fftw_complex*> (modoutforward.data()), -+          FFTW_FORWARD, FFTW_MEASURE); -+ -+  planmodbackward = fftw_plan_dft_1d(fftsize, -+          reinterpret_cast<fftw_complex*> (modinbackward.data()), -+          reinterpret_cast<fftw_complex*> (modoutbackward.data()), -+          FFTW_BACKWARD, FFTW_MEASURE); -+ -+  plancarrforward = fftw_plan_dft_1d(fftsize, -+          reinterpret_cast<fftw_complex*> (carrinforward.data()), -+          reinterpret_cast<fftw_complex*> (carroutforward.data()), -+          FFTW_FORWARD, FFTW_MEASURE); -+ -+  plancarrbackward = fftw_plan_dft_1d(fftsize, -+          reinterpret_cast<fftw_complex*> (carrinbackward.data()), -+          reinterpret_cast<fftw_complex*> (carroutbackward.data()), -+          FFTW_BACKWARD, FFTW_MEASURE); - } -  -+ - M_vocoder::~M_vocoder() { -  --  int l1; -+  //    Clean up FFTW stuff. -+  fftw_destroy_plan (plancarrforward); -+  fftw_destroy_plan (plancarrbackward); -+  fftw_destroy_plan (planmodforward); -+  fftw_destroy_plan (planmodbackward); -  --  for (l1 = 0; l1 < synthdata->poly; l1++) { -+  for (int l1 = 0; l1 < synthdata->poly; l1++) { -     free(modbuf[l1]); -     free(carrbuf[l1]); -   } -@@ -215,29 +220,14 @@ M_vocoder::~M_vocoder() { -   free (window); -   free (modmap); -   free (armodmap); -- --  //#define FFTW_CLEANUP --#ifdef FFTW_CLEANUP --  //    Clean up FFTW stuff. --  fftw_destroy_plan (plancarrforward); --  fftw_destroy_plan (plancarrbackward); --  fftw_destroy_plan (planmodforward); --  fftw_destroy_plan (planmodbackward); --  fftw_free (carrinforward); --  fftw_free (carrinbackward); --  fftw_free (carroutforward); --  fftw_free (carroutbackward); --  fftw_free (modinforward); --  fftw_free (modinbackward); --  fftw_free (modoutforward); --  fftw_free (modoutbackward); --#endif - } -  -+ - void M_vocoder::generateCycle() { -  -   int l1;  //  l1 indexes along polyphony. -   unsigned int l2;  // l2 indexes along the cycle -+  const std::complex<double> I(0.0, 1.0); -  -   inModulator = port_M_modulator->getinputdata(); -   inPitchShift = port_M_pitchshift->getinputdata(); -@@ -272,7 +262,7 @@ void M_vocoder::generateCycle() { -   //   Did the user change the FFT windowing function? -   if (myFFTWindowFunc != whichwin) { -     whichwin = myFFTWindowFunc; --    for (l2 = 0; l2 < (unsigned int) fftsize; l2++) -+    for (l2 = 0; l2 < fftsize; l2++) -       window[l2] = windowcurve (whichwin, fftsize, l2, 0.25); -   } -  -@@ -294,7 +284,7 @@ void M_vocoder::generateCycle() { -     } -  -     //    window the input buffer to modinforward --    for (l2 = 0; l2 < (unsigned int)fftsize ; l2++) { -+    for (l2 = 0; l2 < fftsize ; l2++) { -       modinforward[l2] = modbuf[l1][l2] * window[l2]; -     } -  -@@ -310,17 +300,18 @@ void M_vocoder::generateCycle() { -     fftw_execute (planmodforward); -  -     //    copy the FFT of the modulator to modinbackward. --    for (l2 = 0; l2 < (unsigned int)fftsize; l2++) --      modinbackward[l2] = modoutforward[l2]; -+    //for (l2 = 0; l2 < fftsize; l2++) -+    //  modinbackward[l2] = modoutforward[l2]; -+    modinbackward = modoutforward; -  -     //     Send the FFT of the modulator to the output for giggles -     //     and get an approximation of the first harmonic too. -     float firstharmonicval; -     int firstharmonicindex; -     firstharmonicval = 0.0; --    firstharmonicindex = 1.0; -+    firstharmonicindex = 1; -     for (l2 = 1; l2 < (unsigned int) synthdata->cyclesize; l2++) { --      data[2][l1][l2] = logf(fabs (creal (modoutforward[l2])) + 1.0); -+      data[2][l1][l2] = logf(fabs(modoutforward[l2].real()) + 1.0); -       if (data[2][l1][l2] > firstharmonicval) { - 	firstharmonicindex = l2; - 	firstharmonicval  = data[2][l1][l2] ; -@@ -333,35 +324,38 @@ void M_vocoder::generateCycle() { -  -     //   intermediate frequency-domain munging of modulator -     //   Frequency (additive, Bode-style) shifting first --    for (l2 = 0; l2 < (unsigned int)fftsize; l2++) --      modinbackward[l2] = 0; -+    for (l2 = 0; l2 < fftsize; l2++) -+      modinbackward[l2] = 0.0; -+ -     int lclfrq; --    for (l2 = 0; l2 < (unsigned int)fftsize/2; l2++) { -+    for (l2 = 0; l2 < fftsize/2; l2++) { -       //   positive frequencies (first half) of the FFT result -       lclfrq = l2 + (int)freqshift + vcfreqshift * inFreqShift[l1][0]; -       lclfrq = lclfrq > 0 ? lclfrq : 0; --      lclfrq = lclfrq < ((fftsize/2)-1) ? lclfrq : (fftsize/2)-1; -+      lclfrq = lclfrq < (int)((fftsize/2)-1) ? lclfrq : (fftsize/2)-1; -       modinbackward [lclfrq] = modoutforward [l2]; -       //   Negative frequencies (second half of the fft result) --      modinbackward [fftsize - lclfrq] = modoutforward [ fftsize - l2]; -+      modinbackward [fftsize - lclfrq] = modoutforward [fftsize - l2]; -     } -  --    //    Pitchshifting (multiplicative, harmonic-retaining) shifting. --    //    Note that we reuse the modoutforward as working space --    for (l2 = 0; l2 < (unsigned int) fftsize; l2++) { --      modoutforward[l2] = modinbackward[l2]; --    }; --    for (l2 = 0; l2 < (unsigned int)fftsize; l2++) --      modinbackward[l2] = 0; -+    // Pitchshifting (multiplicative, harmonic-retaining) shifting. -+    // Note that we reuse the modoutforward as working space -+    //for (l2 = 0; l2 < fftsize; l2++) { -+    //  modoutforward[l2] = modinbackward[l2]; -+    //}; -+    modoutforward = modinbackward; -+ -+    for (l2 = 0; l2 < fftsize; l2++) -+      modinbackward[l2] = 0.0; -  -     float psmod, psfactor; -     psmod = (pitchshift + vcpitch * inPitchShift[l1][0]); -     psfactor = pow (2.0, psmod); --    for (l2 = 0; l2 < (unsigned int)fftsize/2; l2++) { -+    for (l2 = 0; l2 < fftsize/2; l2++) { -       //   positive frequencies (first half) of the FFT result -       lclfrq = l2 * psfactor; -       lclfrq = lclfrq > 0 ? lclfrq : 0; --      lclfrq = lclfrq < ((fftsize/2)-1) ? lclfrq : (fftsize/2)-1; -+      lclfrq = lclfrq < (int)((fftsize/2)-1) ? lclfrq : (fftsize/2)-1; -       //   Old way to pitch shift: just move the bucket.  But this puts -       //   nulls wherever the energy is split between two buckets with -       //   a 180 degree phase difference. -@@ -375,12 +369,12 @@ void M_vocoder::generateCycle() { - 	  //   Better way: move freq. bin, multiply angle by octave motion. - 	  // - 	  modinbackward[lclfrq] += --	    cabs (modoutforward [l2]) --	    * cexp (I * ( carg (modoutforward [l2]) -+	    std::abs(modoutforward[l2]) -+	    * std::exp (I * ( std::arg (modoutforward [l2]) - 			  + (l2 * phaseshift * psfactor))); - 	  modinbackward[fftsize - lclfrq] += --	    cabs (modoutforward [ fftsize - l2]) --	    * cexp (I * ( carg (modoutforward [ fftsize - l2]) -+	    std::abs (modoutforward [ fftsize - l2]) -+	    * std::exp (I * ( std::arg (modoutforward [ fftsize - l2]) - 			  + (l2 * phaseshift * psfactor))); - 	}; -     } -@@ -389,9 +383,9 @@ void M_vocoder::generateCycle() { -     fftw_execute (planmodbackward); -  -     //   renormalize the time-domain modulator output --    for (l2 = 0; l2 < (unsigned)fftsize; l2++) { --      modoutbackward [l2] = modoutbackward[l2] / float (fftsize) ; --      modoutbackward [l2] = modoutbackward[l2] / window[l2]; -+    for (l2 = 0; l2 < fftsize; l2++) { -+      modoutbackward [l2] = modoutbackward[l2] / (double) fftsize; -+      modoutbackward [l2] = modoutbackward[l2] / (double) window[l2]; -     } -  -     unsigned int i; -@@ -400,13 +394,11 @@ void M_vocoder::generateCycle() { -  -  -     //     Splicing the new output to the results --    if (dynsplice == 0.0) --      { -+    if (dynsplice == 0.0) { - 	//   output it as the altered modulator. - 	for (l2 = 0; l2 < synthdata->cyclesize; l2++) { --	  data[0][l1][l2] = creal ( modoutbackward [l2 + --						    fftsize/2 - --						    synthdata->cyclesize/2 ]); -+	  data[0][l1][l2] = -+              modoutbackward[l2 + fftsize/2 - synthdata->cyclesize/2].real(); - 	} - 	clomatch_index = fftsize - synthdata->cyclesize; -       } -@@ -421,18 +413,21 @@ void M_vocoder::generateCycle() { - 	float tval, dtval; - 	int searchstart; - 	float spliceval, dspliceval; --	searchstart = fftsize/2 - synthdata->cyclesize; --	if (searchstart < 1) searchstart = 1; --	clomatch_index = searchstart; -+ -+        searchstart = fftsize/2 - synthdata->cyclesize; -+        if (searchstart < 1) -+            searchstart = 1; -+ -+        clomatch_index = searchstart; - 	spliceval = data[0][l1][synthdata->cyclesize - 1]; - 	dspliceval = spliceval - data[0][l1][synthdata->cyclesize - 2]; --	clov_sofar= fabs(creal(modoutbackward[clomatch_index])-spliceval ); -+	clov_sofar= fabs(modoutbackward[clomatch_index].real()-spliceval); - 	for (l2 = searchstart; - 	     l2 < (searchstart + synthdata->cyclesize); - 	     l2++) - 	  { --	    tval = creal (modoutbackward[l2]); --	    dtval = tval - creal (modoutbackward [l2-1]); -+	    tval = modoutbackward[l2].real(); -+	    dtval = tval - modoutbackward [l2-1].real(); - 	    if ( - 		((fabs (tval - spliceval )) < clov_sofar ) - 		&& ((dtval * dspliceval ) >= 0) -@@ -445,15 +440,15 @@ void M_vocoder::generateCycle() { - 	  }; - 	//  fprintf (stderr, "%d %f %f ", - 	//      clomatch_index, clov_sofar, clodv_sofar); --	 -+ - 	//   What's our residual error, so that we can splice this - 	//   with minimal "click"? --	residual = + spliceval - creal( modoutbackward[clomatch_index]); -+	residual = + spliceval - modoutbackward[clomatch_index].real(); -  - 	//  Move our wave, with the best match so far established, to - 	//   the output buffer area. - 	for (l2 = 0; l2 < synthdata->cyclesize; l2++) { --	  data[0][l1][l2] = creal ( modoutbackward [ clomatch_index + l2]) -+	  data[0][l1][l2] = modoutbackward[clomatch_index + l2].real() - 	    + ((1.0 - (float(l2) / float(synthdata->cyclesize))) * residual); - 	}; -  -@@ -466,17 +461,18 @@ void M_vocoder::generateCycle() { -     for (l2 = 0; l2 < fftsize - synthdata->cyclesize; l2++) { -       carrbuf [l1][l2] = carrbuf [l1][l2 + synthdata->cyclesize]; -     } -+ -     for (l2 = 0; l2 < synthdata->cyclesize; l2++) { -       carrbuf [l1][l2 + fftsize - synthdata->cyclesize] = inCarrier[l1][l2]; -     } -  --    for (l2 = 0; l2 <  unsigned (fftsize); l2++) { -+    for (l2 = 0; l2 < fftsize; l2++) { -       carrinforward [l2] = carrbuf [l1][l2] * window[l2]; -     } -  -     fftw_execute (plancarrforward); -  --    for (l2 = 0; l2 < (unsigned) fftsize; l2++) { -+    for (l2 = 0; l2 < fftsize; l2++) { -       carrinbackward[l2] = carroutforward[l2]; -     }; -  -@@ -486,34 +482,37 @@ void M_vocoder::generateCycle() { -     //   Group the modulator into channels, and multipy the channels -     //   over the carrier. -  --    int localchannels; --    localchannels = channels + vcchannels * inChannels[l1][0]; --    if (localchannels < 1) localchannels = 1; --    if (localchannels > fftsize - 1) localchannels = fftsize - 1; --    for (l2 = 0; l2 < (unsigned) fftsize; l2++) { -+    unsigned int localchannels = channels + vcchannels * inChannels[l1][0]; -+    if (localchannels < 1) -+        localchannels = 1; -+ -+    if (localchannels > fftsize - 1) -+        localchannels = fftsize - 1; -+ -+    for (l2 = 0; l2 < fftsize; l2++) { -       modmap[l2] = 0; -       //       initial conditions... -       if (l2 == 0) - 	for (i = 0; i < channels; i++) --	  modmap[l2] += cabs (modoutforward[l2 + i]); -+	  modmap[l2] += std::abs(modoutforward[l2 + i]); -       else - 	modmap [l2] = modmap[l2 - 1]; -  -       //    add the heads, subtract the tails -       i = l2 + channels; --      if (l2 < (unsigned)fftsize - 2) --	modmap[l2] += cabs( modoutforward [i] ); -+      if (l2 < fftsize - 2) -+	modmap[l2] += std::abs(modoutforward[i]); -       i = l2 - channels; -       if (l2 >= channels) --	modmap[l2] -= cabs( modoutforward [i] ); -+	modmap[l2] -= std::abs(modoutforward[i]); -     } -  -     //   Normalize the modmap --    for (l2 = 0; l2 < (unsigned) fftsize; l2++) -+    for (l2 = 0; l2 < fftsize; l2++) -       modmap[l2] = modmap[l2] / localchannels; -  -     //   Do attack/release --    for (l2 = 0; l2 < (unsigned) fftsize; l2++) { -+    for (l2 = 0; l2 < fftsize; l2++) { -       if (modmap [l2] > armodmap[l2]) - 	armodmap [l2] += (1 - attack) * (modmap[l2] - armodmap[l2]); -       if (modmap [l2] < armodmap[l2]) -@@ -521,8 +520,8 @@ void M_vocoder::generateCycle() { -     } -  -     //   multiply the carrier by the modulation map. --    for (l2 = 0; l2 < (unsigned) fftsize; l2++) { --      carrinbackward[l2] = carroutforward[l2] * armodmap[l2]; -+    for (l2 = 0; l2 < fftsize; l2++) { -+      carrinbackward[l2] = carroutforward[l2] * (double) armodmap[l2]; -     } -  -     //   reverse transform to final output, and renormalize by 1/fftsize. -@@ -532,8 +531,7 @@ void M_vocoder::generateCycle() { -     for (l2 = 0; l2 < synthdata->cyclesize; l2++) { -       offset = l2 + (fftsize/2) - (synthdata->cyclesize / 2); -       data[1][l1][l2]= --	(creal(carroutbackward[offset]/window[offset])) / (fftsize * 100); -+	(carroutbackward[offset].real()/window[offset]) / (fftsize * 100); -     }; -   }; - } -- -diff --git a/src/m_vocoder.h b/src/m_vocoder.h -index 38eac58..32c8521 100644 ---- a/src/m_vocoder.h -+++ b/src/m_vocoder.h -@@ -1,4 +1,4 @@ --/*  -+/* -   Vocoder - derived from m_delay.cpp -  -   Copyright (C) 2011 Bill Yerazunis <yerazunis@yahoo.com> -@@ -22,7 +22,9 @@ - #define M_VOCODER_H -  - #include "module.h" --#include <complex.h> -+ -+#include <vector> -+#include <ccomplex> - #include <fftw3.h> -  - #define MODULE_VOCODER_WIDTH                 105 -@@ -30,7 +32,7 @@ -  - class M_vocoder : public Module - { --    Q_OBJECT  -+    Q_OBJECT -  -     float channels, vcchannels; -     float attack, release; -@@ -42,21 +44,20 @@ class M_vocoder : public Module -  -     Port *port_M_modulator, *port_M_pitchshift, *port_M_freqshift, -       *port_M_channels, *port_M_carrier; -+ -     Port *port_modfft_out, *port_firstharmonic_out, --      *port_altmodulator_out,  --      *port_vocoder_out; -+      *port_altmodulator_out, *port_vocoder_out; -  --    fftw_plan planmodforward, planmodbackward,  -+    fftw_plan planmodforward, planmodbackward, -       plancarrforward, plancarrbackward; -  --    fftw_complex *carrinforward, *carroutforward,  --      *carrinbackward, *carroutbackward, --      *modinforward, *modoutforward,  --      *modinbackward, *modoutbackward; -+    std::vector<std::complex<double>> carrinforward, carroutforward, -+        carrinbackward, carroutbackward, -+        modinforward, modoutforward, -+        modinbackward, modoutbackward; -  --  public:  --    int fftsize; --    float **inModulator, **inPitchShift, **inFreqShift,  -+    unsigned int fftsize; -+    float **inModulator, **inPitchShift, **inFreqShift, -       **inChannels, **inCarrier; -     // the previous time-based samples, for overlapping -     float **modbuf, **carrbuf; -@@ -68,10 +69,10 @@ class M_vocoder : public Module -     float *armodmap; -  -   public: --    float windowcurve (int windowfunc, int len, int elem, float alpha ); -+    float windowcurve (int windowfunc, unsigned int len, int elem, float alpha ); -     M_vocoder(QWidget* parent=0, int id = 0); -     ~M_vocoder(); -     void generateCycle(); - }; --   -+ - #endif | 
