fix(bridge): stop leaves sound looping — EventList maxSize=50 drops STOP sweep note-offs
Root cause: Steinberg EventList defaults to maxSize=50 events. The STOP all-notes-off sweep queues 128 note-offs per channel (16ch x 128 pitch), so addEvent beyond 50 fails silently and the plugin never receives the remaining note-offs — voices keep sustaining and the transport loops forever until the bridge process is killed. Fix: raise eventList.setMaxSize(4096) in loadPlugin. Also assign unique noteIds per overlapping note-on (stack per pitch) so note-off releases every voice at that pitch, and log addEvent result + channel in debug output for verification.
This commit is contained in:
@@ -28,6 +28,7 @@ public:
|
||||
bool reloadForGUI() override;
|
||||
bool attachView(void* parentWindowHandle) override;
|
||||
void closeGUI() override;
|
||||
void setChannel(uint32_t ch) { channel_ = ch; }
|
||||
bool needsReload() const override { return hasAttachedOnce_ && !guiAttached_; }
|
||||
void setReloading(bool on) override { reloading_ = on; }
|
||||
void processAudioBlock(float* outputL, float* outputR, uint32_t numSamples) override;
|
||||
@@ -42,6 +43,7 @@ private:
|
||||
bool guiAttached_;
|
||||
bool hasAttachedOnce_;
|
||||
bool reloading_; // guarded by InstrumentEngineManager::mu_ (set via setReloading)
|
||||
uint32_t channel_ = 0;
|
||||
bool reload();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user