hdi08MidiQueue.h (1044B)
1 #pragma once 2 3 #include "dsp56kEmu/ringbuffer.h" 4 5 #include "synthLib/midiTypes.h" 6 7 namespace dsp56k 8 { 9 class Audio; 10 } 11 12 namespace synthLib 13 { 14 struct SMidiEvent; 15 } 16 17 namespace virusLib 18 { 19 class Hdi08Queue; 20 class DspSingle; 21 22 class Hdi08MidiQueue 23 { 24 public: 25 explicit Hdi08MidiQueue(DspSingle& _dsp, Hdi08Queue& _output, bool _useEsaiBasedTiming, bool _isTI); 26 explicit Hdi08MidiQueue(Hdi08MidiQueue&& _s) noexcept : m_output(_s.m_output), m_esai(_s.m_esai), m_useEsaiBasedTiming(_s.m_useEsaiBasedTiming), m_isTI(_s.m_isTI) 27 { 28 assert(_s.m_pendingMidiEvents.empty()); 29 _s.m_useEsaiBasedTiming = false; 30 } 31 ~Hdi08MidiQueue(); 32 33 void sendPendingMidiEvents(uint32_t _maxOffset); 34 35 void add(const synthLib::SMidiEvent& ev); 36 37 void onAudioWritten(); 38 39 private: 40 void sendMidiToDSP(uint8_t _a, uint8_t _b, uint8_t _c) const; 41 42 Hdi08Queue& m_output; 43 dsp56k::Audio& m_esai; 44 bool m_useEsaiBasedTiming; 45 bool m_isTI; 46 47 dsp56k::RingBuffer<synthLib::SMidiEvent, 1024, false> m_pendingMidiEvents; 48 49 uint32_t m_numSamplesWritten = 0; 50 }; 51 }