fix: fallback channel for unconfigured tracks uses index

When midiChannel is undefined (no instrument set), compute channel
from track index to avoid defaulting to 0 and clashing with
configured tracks that use channel 0.
This commit is contained in:
2026-07-27 20:19:50 +07:00
parent 59cf1d67db
commit 912fb2d354
2 changed files with 20 additions and 4 deletions
+18 -2
View File
@@ -10407,7 +10407,15 @@ const App = () => {
const instrumentProgram = track ? track.instrumentProgram : undefined; const instrumentProgram = track ? track.instrumentProgram : undefined;
const synthEngine = track ? track.synth_engine : undefined; const synthEngine = track ? track.synth_engine : undefined;
var allTracks = activeTracksRef.current || []; var allTracks = activeTracksRef.current || [];
var mainCh = track ? (track.midiChannel !== undefined ? track.midiChannel : 0) : 0; var mainCh = 0;
if (track) {
if (track.midiChannel !== undefined) {
mainCh = track.midiChannel;
} else {
for (var mc = 0; mc < allTracks.length; mc++) { if (allTracks[mc].id === track.id) { mainCh = mc >= 9 ? mc + 1 : mc; break; } }
if (mainCh >= 16) mainCh = 0;
}
}
// Compute session beat offset from target item // Compute session beat offset from target item
var sessionBeatOffset = 0; var sessionBeatOffset = 0;
var targetTrk = allTracks.find(function(t) { return t.id === st.trackId; }); var targetTrk = allTracks.find(function(t) { return t.id === st.trackId; });
@@ -10438,7 +10446,15 @@ const App = () => {
var ghostSynth = layer.synthEngine || (ghostTrack ? ghostTrack.synth_engine : undefined); var ghostSynth = layer.synthEngine || (ghostTrack ? ghostTrack.synth_engine : undefined);
if (ghostProg === undefined && !ghostSynth) return; if (ghostProg === undefined && !ghostSynth) return;
var ghostDest = getOrCreateTrackNode(ghostTrack, context); var ghostDest = getOrCreateTrackNode(ghostTrack, context);
var ghostCh = ghostTrack ? (ghostTrack.midiChannel !== undefined ? ghostTrack.midiChannel : 0) : 0; var ghostCh = 0;
if (ghostTrack) {
if (ghostTrack.midiChannel !== undefined) {
ghostCh = ghostTrack.midiChannel;
} else {
for (var gc = 0; gc < allTracks.length; gc++) { if (allTracks[gc].id === ghostTrack.id) { ghostCh = gc >= 9 ? gc + 1 : gc; break; } }
if (ghostCh >= 16) ghostCh = 0;
}
}
layer.notes.forEach(function(note) { layer.notes.forEach(function(note) {
var beat = (note.start_beat || 0) + sessionBeatOffset; var beat = (note.start_beat || 0) + sessionBeatOffset;
var dur = note.duration_beats || 1; var dur = note.duration_beats || 1;
File diff suppressed because one or more lines are too long