gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

resampler.h (1460B)


      1 #pragma once
      2 
      3 #include <cassert>
      4 
      5 #include <functional>
      6 #include <vector>
      7 
      8 #include <cstdint>
      9 
     10 #include "audiobuffer.h"
     11 
     12 namespace synthLib
     13 {
     14 	class Resampler
     15 	{
     16 	public:
     17 		using TProcessFunc = std::function<void(TAudioOutputs&, uint32_t)>;
     18 
     19 		Resampler(float _samplerateIn, float _samplerateOut);
     20 		Resampler(const Resampler&) = delete;
     21 		~Resampler();
     22 
     23 		uint32_t process(AudioBuffer& _output, size_t _outputOffset, uint32_t _numChannels, uint32_t _numSamples, bool _allowLessOutput, const TProcessFunc& _processFunc)
     24 		{
     25 			TAudioOutputs buffers;
     26 			_output.fillPointers(buffers, _outputOffset);
     27 			return process(buffers, _numChannels, _numSamples, _allowLessOutput, _processFunc);
     28 		}
     29 
     30 		uint32_t process(TAudioOutputs& _output, uint32_t _numChannels, uint32_t _numSamples, bool _allowLessOutput, const TProcessFunc& _processFunc);
     31 
     32 		float getSamplerateIn() const { return m_samplerateIn; }
     33 		float getSamplerateOut() const { return m_samplerateOut; }
     34 
     35 	private:
     36 		uint32_t processResample(const TAudioOutputs& _output, uint32_t _numChannels, uint32_t _numSamples, const TProcessFunc& _processFunc);
     37 		void destroyResamplers();
     38 		void setChannelCount(uint32_t _numChannels);
     39 
     40 		const float m_samplerateIn;
     41 		const float m_samplerateOut;
     42 		const double m_factorInToOut;
     43 		const double m_factorOutToIn;
     44 
     45 		double m_inputLen = 0.0;
     46 
     47 		std::vector<void*> m_resamplerOut;
     48 
     49 		std::vector< std::vector<float> > m_tempOutput;
     50 		TAudioOutputs m_outputPtrs;
     51 	};
     52 }