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 }