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 }