b42190e6bc
- PianoRollTabService: getParentTrackByItemId, buildActiveScope, getTrackMidiChannel helpers - parent_track_id on all MIDI items for reverse track lookup - handleSwitchMidiItem uses active_scope pattern - Toolbar shows parent track context labels - Channel assignment simplified to trackIndex % 16 - All playNote calls use unified getTrackMidiChannel
44 lines
1.7 KiB
JavaScript
44 lines
1.7 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
window.SonicPianoRoll = {
|
|
getParentTrackByItemId: function (itemId, tracks) {
|
|
if (!tracks || !itemId) return null;
|
|
for (var i = 0; i < tracks.length; i++) {
|
|
var items = tracks[i].midiItems || [];
|
|
for (var j = 0; j < items.length; j++) {
|
|
if (items[j].id === itemId) return tracks[i];
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
getParentTrackIdByItemId: function (itemId, tracks) {
|
|
var trk = this.getParentTrackByItemId(itemId, tracks);
|
|
return trk ? trk.id : null;
|
|
},
|
|
buildActiveScope: function (itemId, tracks) {
|
|
var parentTrack = this.getParentTrackByItemId(itemId, tracks);
|
|
if (!parentTrack) return null;
|
|
var trackIndex = -1;
|
|
for (var i = 0; i < tracks.length; i++) {
|
|
if (tracks[i].id === parentTrack.id) { trackIndex = i; break; }
|
|
}
|
|
return {
|
|
item_id: itemId,
|
|
parent_track_id: parentTrack.id,
|
|
midi_channel: trackIndex >= 0 ? trackIndex % 16 : 0,
|
|
current_synth_engine: parentTrack.synth_engine || null,
|
|
instrument_program: parentTrack.instrumentProgram,
|
|
instrument_name: parentTrack.instrumentName
|
|
};
|
|
},
|
|
getTrackMidiChannel: function (track, tracks) {
|
|
if (track && track.midiChannel !== undefined) return track.midiChannel;
|
|
if (!track || !tracks) return 0;
|
|
for (var i = 0; i < tracks.length; i++) {
|
|
if (tracks[i].id === track.id) return i % 16;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
})();
|