FIX: MIDI item route qua Carla giống hệt keybed — bỏ gate __carlaRunning (Carla mở thủ công/cũ vẫn route; gate cũ làm 'keybed kêu, item câm') + log chẩn đoán [Carla] item note

This commit is contained in:
2026-08-10 10:03:41 +00:00
parent 75eba27dcf
commit a1dc074e35
3 changed files with 24 additions and 16 deletions
+11 -6
View File
@@ -96,9 +96,12 @@ const scheduleCarlaNote = (synthEngine, channel, pitch, velocity, startWallTime,
const delay = Math.max(0, (startWallTime - ctx.currentTime) * 1000);
const carlaVel = Math.round((velocity || 0.8) * 127);
const carlaCh = (synthEngine && synthEngine.midi_channel !== undefined) ? synthEngine.midi_channel : (channel || 0);
// Chn đoán: note MIDI item Carla (bt console.log đ verify route)
if (window.__carlaNoteLog === undefined) window.__carlaNoteLog = (window.__carlaNoteLog || 0) + 1;
console.log('[Carla] item note ch=' + carlaCh + ' pitch=' + pitch + ' vel=' + carlaVel + ' delay=' + delay.toFixed(0) + 'ms dur=' + (durMs || 300) + 'ms');
setTimeout(function () { window.SonicCarlaMidi.noteOn(carlaCh, pitch, carlaVel); }, delay);
setTimeout(function () { window.SonicCarlaMidi.noteOff(carlaCh, pitch); }, delay + (durMs || 300) + 30);
} catch (e) { /* routing thất bại im lặng — soundfont vẫn chơi qua FluidSynth */ }
} catch (e) { console.warn('[Carla] scheduleCarlaNote error:', e); }
};
// Carla bridge alive tracking + auto-open
@@ -21197,7 +21200,9 @@ const App = () => {
// Track VSTi + Carla local MIDI item PHI play qua Carla bridge
// (ch route Carla KHÔNG play qua FluidSynth GM na, tránh âm
// sai instrument chng lên). Không có Carla FluidSynth như cũ.
const routeToCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(track.synth_engine)) && window.__carlaRunning !== false;
// FIX: item route ging ht keybed (không gate __carlaRunning Carla m
// th công/cũ vn phi route; gate cũ làm "keybed kêu, item câm").
const routeToCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(track.synth_engine));
if (offsetTime < noteStartSec) {
const delay = noteStartSec - offsetTime;
const startTime = context.currentTime + delay;
@@ -21344,7 +21349,7 @@ const App = () => {
var subCh = assignTrackMidiChannel(subTrack, secTracks);
// MIDI item trong SECTION Carla bridge khi VSTi loaded
// (ch route Carla không play FluidSynth GM sai âm)
const subRouteCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(subTrack.synth_engine)) && window.__carlaRunning !== false;
const subRouteCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(subTrack.synth_engine));
if (subRouteCarla || window.SonicCarlaMidi.shouldRoutePlayback(subTrack.synth_engine)) ensureCarlaForPlayback(subTrack.synth_engine);
if (offsetTime < noteStartMain) {
@@ -21470,7 +21475,7 @@ const App = () => {
const program = track.instrumentProgram !== undefined ? track.instrumentProgram : 0;
// MIDI item Carla bridge khi VSTi loaded (ch route Carla không
// play FluidSynth GM sai âm chng lên)
const routeToCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(track.synth_engine)) && window.__carlaRunning !== false;
const routeToCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(track.synth_engine));
if (offsetTime < noteStartSec) {
const delay = noteStartSec - offsetTime;
const startTime = context.currentTime + delay;
@@ -21550,7 +21555,7 @@ const App = () => {
const durMs = effectiveDur * 1000;
// Track VSTi + Carla local note PHI play qua Carla bridge (ch route
// Carla không play FluidSynth GM sai âm chng lên)
const routeToCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(synthEngine)) && window.__carlaRunning !== false;
const routeToCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(synthEngine));
if (!routeToCarla && window.SonicSF) {
window.SonicSF.playNote(note.pitch || 60, note.velocity || 0.8, durMs, scheduledTime, instrumentProgram, destNode, mainCh, synthEngine);
}
@@ -21586,7 +21591,7 @@ const App = () => {
var schedTime = startWallTime + effStart;
var durMs = effDur * 1000;
// Ghost note Carla bridge khi ghost track VSTi (ch route Carla)
var gRouteCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(ghostSynth)) && window.__carlaRunning !== false;
var gRouteCarla = !!(window.SonicCarlaMidi && window.SonicCarlaMidi.shouldRoutePlayback(ghostSynth));
if (!gRouteCarla && window.SonicSF) {
window.SonicSF.playNote(note.pitch || 60, note.velocity || 0.8, durMs, schedTime, ghostProg, ghostDest, ghostCh, ghostSynth);
}