On Sun, Jan 04, 2015 at 01:56:51PM +0000, Aurélien Leblond wrote:
Well all the plugins in ams.lv2 are coded in c++ and
are compiled with the
c++11 standard.
But when ported the FFT Vocoder, it only compiles when using the c99
standard.
C and C++ complex types are not compatible for C++, not even if
they have the same binary representation as they will have for
all modern C++ compilers.
You can probably fix some of these errors (at least the first
one) by including <complex.h> (not <complex>) before <fftw3.h>.
This will make fftw use the C native complex type instead of
its own. This will allow float to complex assignment for
example.
If you really want a 'pure' C++ version you will need to
reinterpret_cast whenever you use a function that expects
or returns a C++ complex. It won't make your code any more
readable.
IMHO the C++ complex type (a template class trying to hide
its implementation) is completely useless and a real PITA,
and a good example of the pedantic attitude that is typical
of the C++ crowd.
Nobody with even just a minimal knowledge of scientific
computing would want to hide the implementation of complex
types - almost all classical algorithms (e.g. the FFT)
depend on it being cartesian.
A second source of problems with the vocoder is the mixing
of floats and doubles. There is no good reason to use a
double FFT here.
Ciao,
--
FA
A world of exhaustive, reliable metadata would be an utopia.
It's also a pipe-dream, founded on self-delusion, nerd hubris
and hysterically inflated market opportunities. (Cory Doctorow)