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

dspMultiTI.h (1497B)


      1 #pragma once
      2 
      3 #include "dspSingle.h"
      4 
      5 #include "synthLib/audiobuffer.h"
      6 
      7 namespace virusLib
      8 {
      9 	class DspMultiTI final : public DspSingle
     10 	{
     11 	public:
     12 		static constexpr uint32_t InvalidOffset		= 0xffffffff;
     13 
     14 		class Esai1Out : public std::vector<dsp56k::TWord>
     15 		{
     16 		public:
     17 			template<typename T>
     18 			void processAudioOutput(dsp56k::Esai& _esai, uint32_t _frames, const synthLib::TAudioOutputsT<T>& _outputs, uint32_t _firstOutChannel, const std::array<uint32_t, 6>& _sourceIndices);
     19 
     20 		private:
     21 			uint32_t m_blockStart = InvalidOffset;
     22 		};
     23 
     24 		class Esai1in : public std::vector<dsp56k::TWord>
     25 		{
     26 		public:
     27 			template<typename T>
     28 			void processAudioinput(dsp56k::Esai& _esai, uint32_t _frames, uint32_t _latency, const synthLib::TAudioInputsT<T>& _inputs);
     29 
     30 		private:
     31 			uint32_t m_magicTimer = 0;
     32 			dsp56k::TWord m_previousInput = 0;
     33 		};
     34 
     35 		template<typename T> struct EsaiBufs
     36 		{
     37 			Esai1Out dspA;
     38 			Esai1Out dspB;
     39 			Esai1in in;
     40 			T m_previousInput = 0;
     41 			std::vector<T> dummyInput;
     42 			std::vector<T> dummyOutput;
     43 		};
     44 
     45 		DspMultiTI();
     46 
     47 		void processAudio(const synthLib::TAudioInputs& _inputs, const synthLib::TAudioOutputs& _outputs, size_t _samples, uint32_t _latency) override;
     48 		void processAudio(const synthLib::TAudioInputsInt& _inputs, const synthLib::TAudioOutputsInt& _outputs, size_t _samples, uint32_t _latency) override;
     49 
     50 		DspSingle& getDSP2() { return m_dsp2; }
     51 
     52 	private:
     53 		DspSingle m_dsp2;
     54 
     55 		EsaiBufs<float> m_bufferF;
     56 		EsaiBufs<dsp56k::TWord> m_bufferI;
     57 	};
     58 }