From de192fe20e0dd5ab38f8ae150808a8b1cff3d221 Mon Sep 17 00:00:00 2001 From: Johannes Schultz Date: Thu, 19 Sep 2024 14:22:44 +0000 Subject: [PATCH] Merged revision(s) 21596, 21612 from trunk/OpenMPT: [Fix] Song Cleanup: Allow plugins only referenced by to-be-removed channels to be removed as well. ........ [Fix] MID: Loading samples when using MIDI + accompanying soundfont file was broken since r21370 (https://bugs.openmpt.org/view.php?id=1817). ........ git-svn-id: https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.31@21633 56274372-70c3-4bfc-bfc3-4c3a0b034d27 --- mptrack/CleanupSong.cpp | 8 ++++---- soundlib/Load_mid.cpp | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/mptrack/CleanupSong.cpp b/mptrack/CleanupSong.cpp index 39b333ffa44..fc1ab9243f2 100644 --- a/mptrack/CleanupSong.cpp +++ b/mptrack/CleanupSong.cpp @@ -163,16 +163,16 @@ void CModCleanupDlg::OnOK() if(m_CheckBoxes[kRearrangeSamples]) modified |= RearrangeSamples(); } - // Plugins - if(m_CheckBoxes[kRemoveAllPlugins]) modified |= RemoveAllPlugins(); - if(m_CheckBoxes[kCleanupPlugins]) modified |= RemoveUnusedPlugins(); - // Create samplepack if(m_CheckBoxes[kResetVariables]) modified |= ResetVariables(); // Remove unused channels if(m_CheckBoxes[kCleanupChannels]) modified |= RemoveUnusedChannels(); + // Plugins (done last because they can be referenced by both instruments and channels) + if(m_CheckBoxes[kRemoveAllPlugins]) modified |= RemoveAllPlugins(); + if(m_CheckBoxes[kCleanupPlugins]) modified |= RemoveUnusedPlugins(); + if(modified) modDoc.SetModified(); modDoc.UpdateAllViews(nullptr, UpdateHint().ModType()); logcapturer.ShowLog(true); diff --git a/soundlib/Load_mid.cpp b/soundlib/Load_mid.cpp index b1b14ffe094..696ae785cb0 100644 --- a/soundlib/Load_mid.cpp +++ b/soundlib/Load_mid.cpp @@ -1320,12 +1320,14 @@ bool CSoundFile::ReadMID(FileReader &file, ModLoadingFlags loadFlags) } std::unique_ptr cachedBank, embeddedBank; + FileReader *bankFile = nullptr; if(CDLSBank::IsDLSBank(file)) { // Soundfont embedded in MIDI file embeddedBank = std::make_unique(); embeddedBank->Open(file); + bankFile = &file; } else { // Soundfont with same name as MIDI file @@ -1353,7 +1355,7 @@ bool CSoundFile::ReadMID(FileReader &file, ModLoadingFlags loadFlags) else if(pIns->nMidiProgram) midiCode = (pIns->nMidiProgram - 1) & 0x7F; - if(embeddedBank && embeddedBank->FindAndExtract(*this, ins, midiCode >= 0x80, &file)) + if(embeddedBank && embeddedBank->FindAndExtract(*this, ins, midiCode >= 0x80, bankFile)) { continue; }