device.h (3103B)
1 #pragma once 2 3 #include <cstdint> 4 #include <cstddef> 5 #include <string> 6 7 #include "audioTypes.h" 8 #include "deviceTypes.h" 9 10 #include "midiTypes.h" 11 #include "buildconfig.h" 12 #include "midiTranslator.h" 13 14 #include "asmjit/core/api-config.h" 15 16 #include "baseLib/md5.h" 17 18 namespace synthLib 19 { 20 struct DeviceCreateParams 21 { 22 float preferredSamplerate = 0.0f; 23 float hostSamplerate = 0.0f; 24 std::string romName; 25 std::vector<uint8_t> romData; 26 baseLib::MD5 romHash; 27 uint32_t customData = 0; 28 }; 29 30 class Device 31 { 32 public: 33 Device(const DeviceCreateParams& _params); 34 Device(const Device&) = delete; 35 Device(Device&&) = delete; 36 37 virtual ~Device(); 38 39 Device& operator = (const Device&) = delete; 40 Device& operator = (Device&&) = delete; 41 42 virtual void process(const TAudioInputs& _inputs, const TAudioOutputs& _outputs, size_t _size, const std::vector<SMidiEvent>& _midiIn, std::vector<SMidiEvent>& _midiOut); 43 44 void setExtraLatencySamples(uint32_t _size); 45 uint32_t getExtraLatencySamples() const { return m_extraLatency; } 46 47 virtual uint32_t getInternalLatencyMidiToOutput() const { return 0; } 48 virtual uint32_t getInternalLatencyInputToOutput() const { return 0; } 49 50 virtual void getSupportedSamplerates(std::vector<float>& _dst) const 51 { 52 _dst.push_back(getSamplerate()); 53 } 54 virtual float getSamplerate() const = 0; 55 virtual void getPreferredSamplerates(std::vector<float>& _dst) const 56 { 57 return getSupportedSamplerates(_dst); 58 } 59 60 bool isSamplerateSupported(const float& _samplerate) const; 61 62 virtual bool setSamplerate(float _samplerate); 63 64 float getDeviceSamplerate(float _preferredDeviceSamplerate, float _hostSamplerate) const; 65 float getDeviceSamplerateForHostSamplerate(float _hostSamplerate) const; 66 67 auto& getDeviceCreateParams() { return m_createParams; } 68 const auto& getDeviceCreateParams() const { return m_createParams; } 69 70 virtual bool isValid() const = 0; 71 72 #if SYNTHLIB_DEMO_MODE == 0 73 virtual bool getState(std::vector<uint8_t>& _state, StateType _type) = 0; 74 virtual bool setState(const std::vector<uint8_t>& _state, StateType _type) = 0; 75 virtual bool setStateFromUnknownCustomData(const std::vector<uint8_t> &_state) { return false; } 76 #endif 77 78 virtual uint32_t getChannelCountIn() = 0; 79 virtual uint32_t getChannelCountOut() = 0; 80 81 virtual bool setDspClockPercent(uint32_t _percent = 100) = 0; 82 virtual uint32_t getDspClockPercent() const = 0; 83 virtual uint64_t getDspClockHz() const = 0; 84 85 86 ASMJIT_NOINLINE virtual void release(std::vector<SMidiEvent>& _events); 87 88 auto& getMidiTranslator() { return m_midiTranslator; } 89 90 protected: 91 virtual void readMidiOut(std::vector<SMidiEvent>& _midiOut) = 0; 92 virtual void processAudio(const TAudioInputs& _inputs, const TAudioOutputs& _outputs, size_t _samples) = 0; 93 virtual bool sendMidi(const SMidiEvent& _ev, std::vector<SMidiEvent>& _response) = 0; 94 95 void dummyProcess(uint32_t _numSamples); 96 97 private: 98 DeviceCreateParams m_createParams; 99 std::vector<SMidiEvent> m_midiIn; 100 101 uint32_t m_extraLatency = 0; 102 103 MidiTranslator m_midiTranslator; 104 std::vector<SMidiEvent> m_translatorOut; 105 }; 106 }