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

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 }