// native_bridge/include/INativeInstrument.h #ifndef I_NATIVE_INSTRUMENT_H #define I_NATIVE_INSTRUMENT_H #include #include enum class InstrumentType { VST3, VST2, SOUNDFONT_SF2_SF3, SFZ }; class INativeInstrument { public: virtual ~INativeInstrument() = default; // Initialize Engine with Sample Rate and Buffer Size virtual bool init(double sampleRate, uint32_t maxBlockSize) = 0; // Select Bank and Program Change virtual void selectProgram(uint32_t channel, uint32_t bank, uint32_t program) = 0; // Dispatch MIDI Note On / Note Off events virtual void noteOn(uint32_t channel, uint32_t pitch, float velocity, uint32_t sampleOffset) = 0; virtual void noteOff(uint32_t channel, uint32_t pitch, uint32_t sampleOffset) = 0; // MIDI continuous controllers (A12): CC value, program change, 14-bit pitch bend virtual void controlChange(uint32_t channel, uint32_t cc, uint32_t value) = 0; virtual void programChange(uint32_t channel, uint32_t program) = 0; virtual void pitchBend(uint32_t channel, uint32_t bend14) = 0; // Open/close Native GUI window virtual bool openGUI(void* parentWindowHandle) = 0; virtual void closeGUI() = 0; // Real-time Audio PCM Float32 rendering loop virtual void processAudioBlock(float* outputL, float* outputR, uint32_t numSamples) = 0; }; #endif // I_NATIVE_INSTRUMENT_H