Fix: persist expression_curve qua project save/load; TEST CC7 thay CC11
This commit is contained in:
@@ -746,6 +746,7 @@ const _cc11ValueAt = (curve, ratio) => {
|
||||
};
|
||||
// ponytail: duplicate interp cc11ValueAt (component) — consolidate khi curve
|
||||
// thành field track-level.
|
||||
const EXPRESSION_CC = 7; // TEST: CC7 thay CC11 de kiem tra VSTi nhan CC (revert 11 khi xong)
|
||||
const scheduleNoteExpressionCC11 = (track, note, ch, startWallTime, startSec, durSec) => {
|
||||
try {
|
||||
const curve = Array.isArray(note && note.expression_curve) ? note.expression_curve : [];
|
||||
@@ -764,11 +765,11 @@ const scheduleNoteExpressionCC11 = (track, note, ch, startWallTime, startSec, du
|
||||
const timer = setTimeout(() => {
|
||||
if (epoch !== _nativePlayEpoch) return;
|
||||
if (window.SonicMidiRouter && window.SonicMidiRouter.isBridgeActive && window.SonicMidiRouter.isBridgeActive()) {
|
||||
window.SonicMidiRouter.pushEvent({ cmd: 'CC', channel: track ? track.id : 0, pitch: 11, velocity: 0, data2: val, percussion: isPerc });
|
||||
window.SonicMidiRouter.pushEvent({ cmd: 'CC', channel: track ? track.id : 0, pitch: EXPRESSION_CC, velocity: 0, data2: val, percussion: isPerc });
|
||||
return;
|
||||
}
|
||||
if (window.SonicSF && typeof window.SonicSF.controllerChange === 'function') {
|
||||
window.SonicSF.controllerChange(ch, 11, val);
|
||||
window.SonicSF.controllerChange(ch, EXPRESSION_CC, val);
|
||||
}
|
||||
}, delayMs);
|
||||
_cc11Timers.add(timer);
|
||||
@@ -11844,7 +11845,8 @@ const serializeTracksList = (tracksList, secondsPerBar) => {
|
||||
start_beat: n.start_beat || 0.0,
|
||||
duration_beats: n.duration_beats || 1.0,
|
||||
velocity: n.velocity || 0.8,
|
||||
pan: n.pan || 0.0
|
||||
pan: n.pan || 0.0,
|
||||
expression_curve: (Array.isArray(n.expression_curve) ? n.expression_curve : []).map(p => ({ position_ratio: p.position_ratio, value: p.value }))
|
||||
}))
|
||||
}
|
||||
});
|
||||
@@ -11955,7 +11957,8 @@ const deserializeTracksList = (schemaTracks, secondsPerBar, sectionStore, visite
|
||||
start_beat: n.start_beat || 0.0,
|
||||
duration_beats: n.duration_beats || 1.0,
|
||||
velocity: n.velocity || 0.8,
|
||||
pan: n.pan || 0.0
|
||||
pan: n.pan || 0.0,
|
||||
...(Array.isArray(n.expression_curve) ? { expression_curve: n.expression_curve } : {})
|
||||
}))
|
||||
});
|
||||
} else if (item.type === "SECTION_ITEM") {
|
||||
|
||||
Reference in New Issue
Block a user