JUCE
JUCE copied to clipboard
Complex buffer interpolation
As proposed here https://forum.juce.com/t/resample-a-complex-valued-buffer-without-de-interleaving-the-buffer/34703/2, I think it's useful to extend the interpolator classes to accept more than just float values.
The pull request contains a refactored version of both LagrangeInterpolator and CatmullRomInterpolator that are fully templated and now share a common base class ResamplerBase. This makes it possible to use them with double buffers as well as std::complex valued buffers. With that changed both classes were renamed to LagrangeResampler and CatmullRomResampler, adding an alias to the previous names that has float as default SampleType template values. This makes the change fully backwards compatible to existing code.
Furthermore FloatVectorOperations, which are used internally, were extended to accept complex buffers where possible.
Based on these changes, a support for SIMDRegister as SampleType type for the interpolators should also not be to hard to implement, making theses classes compatible to the DSP module template processor classes that also accept SIMDRegister as SampleType.