device.h (3195B)
1 #pragma once 2 3 #include "dspSingle.h" 4 #include "frontpanelState.h" 5 #include "synthLib/midiTypes.h" 6 #include "synthLib/device.h" 7 8 #include "romfile.h" 9 #include "microcontroller.h" 10 11 namespace synthLib 12 { 13 struct DspMemoryPatch; 14 struct DspMemoryPatches; 15 } 16 17 namespace virusLib 18 { 19 class Device final : public synthLib::Device 20 { 21 public: 22 Device(const synthLib::DeviceCreateParams& _params, bool _createDebugger = false); 23 ~Device() override; 24 25 void getSupportedSamplerates(std::vector<float>& _dst) const override; 26 void getPreferredSamplerates(std::vector<float>& _dst) const override; 27 float getSamplerate() const override; 28 bool setSamplerate(float _samplerate) override; 29 30 bool isValid() const override; 31 32 void process(const synthLib::TAudioInputs& _inputs, const synthLib::TAudioOutputs& _outputs, size_t _size, const std::vector<synthLib::SMidiEvent>& _midiIn, std::vector<synthLib::SMidiEvent>& _midiOut) override; 33 34 #if !SYNTHLIB_DEMO_MODE 35 bool getState(std::vector<uint8_t>& _state, synthLib::StateType _type) override; 36 bool setState(const std::vector<uint8_t>& _state, synthLib::StateType _type) override; 37 bool setStateFromUnknownCustomData(const std::vector<uint8_t>& _state) override; 38 #endif 39 static bool find4CC(uint32_t& _offset, const std::vector<uint8_t>& _data, const std::string_view& _4cc); 40 static bool parseTIcontrolPreset(std::vector<synthLib::SMidiEvent>& _events, const std::vector<uint8_t>& _state); 41 static bool parsePowercorePreset(std::vector<std::vector<uint8_t>>& _sysexPresets, const std::vector<uint8_t>& _data); 42 static bool parseVTIBackup(std::vector<std::vector<uint8_t>>& _sysexPresets, const std::vector<uint8_t>& _data); 43 44 uint32_t getInternalLatencyMidiToOutput() const override; 45 uint32_t getInternalLatencyInputToOutput() const override; 46 47 uint32_t getChannelCountIn() override; 48 uint32_t getChannelCountOut() override; 49 50 static void createDspInstances(DspSingle*& _dspA, DspSingle*& _dspB, const ROMFile& _rom, float _samplerate); 51 static std::thread bootDSP(DspSingle& _dsp, const ROMFile& _rom, bool _createDebugger); 52 static void bootDSPs(DspSingle* _dspA, DspSingle* _dspB, const ROMFile& _rom, bool _createDebugger); 53 54 bool setDspClockPercent(uint32_t _percent) override; 55 uint32_t getDspClockPercent() const override; 56 uint64_t getDspClockHz() const override; 57 58 static void applyDspMemoryPatches(const DspSingle* _dspA, const DspSingle* _dspB, const ROMFile& _rom); 59 void applyDspMemoryPatches() const; 60 61 private: 62 bool sendMidi(const synthLib::SMidiEvent& _ev, std::vector<synthLib::SMidiEvent>& _response) override; 63 void readMidiOut(std::vector<synthLib::SMidiEvent>& _midiOut) override; 64 void processAudio(const synthLib::TAudioInputs& _inputs, const synthLib::TAudioOutputs& _outputs, size_t _samples) override; 65 void onAudioWritten(); 66 static void configureDSP(DspSingle& _dsp, const ROMFile& _rom, float _samplerate); 67 68 const ROMFile m_rom; 69 70 std::unique_ptr<DspSingle> m_dsp; 71 DspSingle* m_dsp2 = nullptr; 72 std::unique_ptr<Microcontroller> m_mc; 73 74 uint32_t m_numSamplesProcessed = 0; 75 float m_samplerate; 76 FrontpanelState m_frontpanelStateDSP; 77 synthLib::SMidiEvent m_frontpanelStateMidiEvent; 78 }; 79 }