resamplerInOut.h (1671B)
1 #pragma once 2 3 #include "audiobuffer.h" 4 #include "midiTypes.h" 5 #include "resampler.h" 6 7 #include <memory> // unique_ptr 8 9 namespace synthLib 10 { 11 class ResamplerInOut 12 { 13 public: 14 using TMidiVec = std::vector<SMidiEvent>; 15 using TProcessFunc = std::function<void(const TAudioInputs&, const TAudioOutputs&, size_t, const TMidiVec&, TMidiVec&)>; 16 17 ResamplerInOut(uint32_t _channelCountIn, uint32_t _channelCountOut); 18 19 void setDeviceSamplerate(float _samplerate); 20 void setHostSamplerate(float _samplerate); 21 void setSamplerates(float _hostSamplerate, float _deviceSamplerate); 22 23 void process(const TAudioInputs& _inputs, TAudioOutputs& _outputs, const TMidiVec& _midiIn, TMidiVec& _midiOut, uint32_t _numSamples, const TProcessFunc& _processFunc); 24 25 uint32_t getOutputLatency() const { return m_outputLatency; } 26 uint32_t getInputLatency() const { return m_inputLatency; } 27 28 private: 29 void recreate(); 30 static void scaleMidiEvents(TMidiVec& _dst, const TMidiVec& _src, float _scale); 31 static void clampMidiEvents(TMidiVec& _dst, const TMidiVec& _src, uint32_t _offsetMin, uint32_t _offsetMax); 32 static void extractMidiEvents(TMidiVec& _dst, const TMidiVec& _src, uint32_t _offsetMin, uint32_t _offsetMax); 33 34 const uint32_t m_channelCountIn; 35 const uint32_t m_channelCountOut; 36 37 std::unique_ptr<Resampler> m_out = nullptr; 38 std::unique_ptr<Resampler> m_in = nullptr; 39 40 float m_samplerateDevice = 0; 41 float m_samplerateHost = 0; 42 43 AudioBuffer m_scaledInput; 44 AudioBuffer m_input; 45 46 size_t m_scaledInputSize = 0; 47 48 TMidiVec m_processedMidiIn; 49 50 TMidiVec m_midiIn; 51 TMidiVec m_midiOut; 52 53 uint32_t m_inputLatency = 0; 54 uint32_t m_outputLatency = 0; 55 }; 56 }