fix: sfload reset_presets=0 giữ nguyên instrument các track khác; preloadTrackInstruments module-level (sửa ReferenceError reload); truyền props cho ProfileModal; lọc warning No preset found channel 9
This commit is contained in:
+37
-19
@@ -4483,6 +4483,27 @@ const PluginManagerModal = ({ isOpen, onClose, pluginsData }) => {
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
// Module-level so both ProfileModal (open project) and App (auto-restore) can
|
||||
// warm the FluidSynth font cache for each track's instrument. This only loads
|
||||
// the soundfonts; the per-track channel re-selection happens at note time.
|
||||
const preloadTrackInstruments = async (tracks) => {
|
||||
if (!window.SonicSF || !window.SonicSF.selectInstrument) return;
|
||||
const list = tracks || [];
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
const t = list[i];
|
||||
const se = t.synth_engine;
|
||||
const sfId = (se && se.soundfont_id) || t.soundfont_id;
|
||||
if (!sfId) continue;
|
||||
const bank = se ? (se.soundfont_bank !== undefined ? se.soundfont_bank : 0) : (t.soundfont_bank !== undefined ? t.soundfont_bank : 0);
|
||||
const prog = se ? (se.soundfont_program !== undefined ? se.soundfont_program : 0) : (t.soundfont_program !== undefined ? t.soundfont_program : 0);
|
||||
const ch = t.midiChannel !== undefined ? t.midiChannel : (i % 16);
|
||||
try {
|
||||
await window.SonicSF.selectInstrument(ch, bank, prog, sfId);
|
||||
} catch (e) {}
|
||||
}
|
||||
};
|
||||
|
||||
const ProfileModal = ({
|
||||
isOpen,
|
||||
onClose,
|
||||
@@ -4494,7 +4515,14 @@ const ProfileModal = ({
|
||||
currentProjectId,
|
||||
setCurrentProjectId,
|
||||
showToast,
|
||||
loadAudioBuffersForTracks
|
||||
loadAudioBuffersForTracks,
|
||||
setAppWarningModal,
|
||||
bpm,
|
||||
setBpm,
|
||||
setMasteringSettings,
|
||||
setSessionTabs,
|
||||
setSubTabs,
|
||||
trackMidiChannelsRef
|
||||
}) => {
|
||||
if (!isOpen) return null;
|
||||
const [activeTab, setActiveTab] = useState('account');
|
||||
@@ -4627,23 +4655,6 @@ const ProfileModal = ({
|
||||
}
|
||||
};
|
||||
|
||||
const preloadTrackInstruments = async (tracks) => {
|
||||
// Preload each track's soundfont before the user plays — otherwise the first
|
||||
// MIDI key after reload triggers a lazy font load and the note sounds late.
|
||||
if (!window.SonicSF || !window.SonicSF.selectInstrument) return;
|
||||
for (const t of (tracks || [])) {
|
||||
const se = t.synth_engine;
|
||||
const sfId = (se && se.soundfont_id) || t.soundfont_id;
|
||||
if (!sfId) continue;
|
||||
const bank = se ? (se.soundfont_bank !== undefined ? se.soundfont_bank : 0) : (t.soundfont_bank !== undefined ? t.soundfont_bank : 0);
|
||||
const prog = se ? (se.soundfont_program !== undefined ? se.soundfont_program : 0) : (t.soundfont_program !== undefined ? t.soundfont_program : 0);
|
||||
var ch = t && assignTrackMidiChannel(t, tracks);
|
||||
try {
|
||||
await window.SonicSF.selectInstrument(ch, bank, prog, sfId);
|
||||
} catch (e) {}
|
||||
}
|
||||
};
|
||||
|
||||
const handleOpenProject = async (projectId, projectName) => {
|
||||
setAppWarningModal({
|
||||
title: "Mở dự án",
|
||||
@@ -23816,7 +23827,14 @@ const App = () => {
|
||||
currentProjectId: currentProjectId,
|
||||
setCurrentProjectId: setCurrentProjectId,
|
||||
showToast: showToast,
|
||||
loadAudioBuffersForTracks: loadAudioBuffersForTracks
|
||||
loadAudioBuffersForTracks: loadAudioBuffersForTracks,
|
||||
setAppWarningModal: setAppWarningModal,
|
||||
bpm: bpm,
|
||||
setBpm: setBpm,
|
||||
setMasteringSettings: setMasteringSettings,
|
||||
setSessionTabs: setSessionTabs,
|
||||
setSubTabs: setSubTabs,
|
||||
trackMidiChannelsRef: trackMidiChannelsRef
|
||||
}), /*#__PURE__*/React.createElement(SaveProjectModal, {
|
||||
isOpen: saveProjectModalOpen,
|
||||
onClose: () => setSaveProjectModalOpen(false),
|
||||
|
||||
Reference in New Issue
Block a user