A14: MIDI-out từ plugin (VST2/VST3) → SHM → Rust emit → DAW track

- Vst2Instrument: audioMaster callback thu VstEvents, push SHM midiOutQueue
- Vst3Instrument: IEventList output bus (kAudioMasterWantMidi) — check
- SharedMemoryIPC.h: midiOutQueue[64] + midiOutCount (offset 27556/28324, sizeof 28328)
- shm.rs: MidiEventIPC Serialize, drain_midi_out() emit 'bridge-midi-out'
- lib.rs: pump emit midi-out events
- nativeBridgeService.js: onMidiOut API
- app.jsx: route MIDI-out về selected track qua SonicMidiRouter (feedback guard)
- TASKS.md: A14 ✅
This commit is contained in:
2026-08-19 21:12:07 +07:00
parent 6efef85e47
commit 6a3b430da0
10 changed files with 375 additions and 226 deletions
+11
View File
@@ -481,6 +481,17 @@ pub fn run() {
last_audio_change = std::time::Instant::now();
stall_logged = false;
}
// A14: plugin MIDI output (VST2 audioMaster ProcessEvents
// -> SHM midiOutQueue). Drain and forward to the page;
// JS routes the notes to DAW tracks. Payload is a JSON
// array of MidiEventIPC {command, channel, pitch,
// velocity, data2, data3, reserved, sample_offset}.
if let Some(s) = guard.as_ref() {
let out = s.drain_midi_out();
if !out.is_empty() {
let _ = pump_handle.emit("bridge-midi-out", out);
}
}
// G3.1 FIX: nhả guard TRƯỚC stall log / watchdog kill+spawn.
// kill_bridge -> flush_bridge_state khóa chính ShmState mutex
// mà pump đang giữ -> deadlock khi watchdog trigger (không