feat: native host bridge integration — C++ bridge, Rust SHM, JS routing, build scripts, docs
- native_bridge/: InstrumentEngineManager multi-channel, sample-accurate, CC/program/pitchbend, transport, Vst3Instrument stub (HAVE_VST3SDK) - src-tauri: shm.rs, bridge spawn + audio pump + health monitor, open_vst_gui, externalBin, commands - app: UnifiedMidiRouter, NativeBridgeService, bridgeAudioNode, audioRoutingEngine, Plugin Manager UI, Bridge/WASM indicator, set_position sync - build: 3 ps1 (force-added, build/ ignored), verify_bundle --check-bridge, CI workflow - docs: TASKS.md, TEST_NOTES.md (Windows verify checklist), install/report updates
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
// app/static/js/services/audioRoutingEngine.js
|
||||
// Routes the native bridge audio node into the DAW graph:
|
||||
// bridge node -> track.sfEntry (FX rack chain) -> fader/pan -> masterBus
|
||||
// Falls back to masterBus.input when no per-track sfEntry exists.
|
||||
(function () {
|
||||
var engine = {
|
||||
_connected: false,
|
||||
_trackId: null,
|
||||
|
||||
isConnected: function () { return this._connected; },
|
||||
|
||||
/** bridgeNode = window.BridgeAudioNode; trackCtx = track node ({ sfEntry, gainNode }). */
|
||||
connect: function (bridgeNode, trackCtx, trackId) {
|
||||
if (!bridgeNode || !bridgeNode.getOutputNode) return false;
|
||||
this.disconnect();
|
||||
var dest = null;
|
||||
if (trackCtx && trackCtx.sfEntry) dest = trackCtx.sfEntry;
|
||||
else if (trackCtx && trackCtx.gainNode) dest = trackCtx.gainNode;
|
||||
else if (window.masterBus && window.masterBus.input) dest = window.masterBus.input;
|
||||
if (!dest) {
|
||||
console.warn('[AudioRoutingEngine] no destination (no trackCtx / masterBus)');
|
||||
return false;
|
||||
}
|
||||
if (!bridgeNode.isReady()) bridgeNode.init();
|
||||
bridgeNode.connect(dest);
|
||||
this._connected = true;
|
||||
this._trackId = trackId || null;
|
||||
console.log('[AudioRoutingEngine] bridge audio -> ' + (trackId || 'masterBus'));
|
||||
return true;
|
||||
},
|
||||
|
||||
disconnect: function () {
|
||||
if (window.BridgeAudioNode) window.BridgeAudioNode.disconnect();
|
||||
this._connected = false;
|
||||
this._trackId = null;
|
||||
}
|
||||
};
|
||||
|
||||
window.AudioRoutingEngine = engine;
|
||||
})();
|
||||
Reference in New Issue
Block a user