From cdc8142940488f53dd51aa966083d94de65100f8 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 23 Jan 2016 09:08:27 -0500 Subject: [PATCH] Fix the new Truncate Silence --- src/effects/TruncSilence.cpp | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index ea9e47b7f..b4cb5cba4 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -28,6 +28,7 @@ #include #include "../Prefs.h" +#include "../Project.h" #include "../ShuttleGui.h" #include "../WaveTrack.h" #include "../widgets/valnum.h" @@ -272,20 +273,24 @@ bool EffectTruncSilence::ProcessIndependently() { unsigned nGroups = 0; + const bool syncLock = ::GetActiveProject()->IsSyncLocked(); + // Check if it's permissible { SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); for (Track *track = iter.First(); track; track = iter.Next(true) // skip linked tracks ) { - Track *const link = track->GetLink(); - SyncLockedTracksIterator syncIter(mTracks); - for (Track *track2 = syncIter.First(track); track2; track2 = syncIter.Next()) { - if (track2->GetKind() == Track::Wave && - !(track2 == track || track2 == link) && - track2->GetSelected()) { - ::wxMessageBox(_("When truncating independently, there may only be one selected audio track in each sync-lock group.")); - return false; + if (syncLock) { + Track *const link = track->GetLink(); + SyncLockedTracksIterator syncIter(mTracks); + for (Track *track2 = syncIter.First(track); track2; track2 = syncIter.Next()) { + if (track2->GetKind() == Track::Wave && + !(track2 == track || track2 == link) && + track2->GetSelected()) { + ::wxMessageBox(_("When truncating independently, there may only be one selected audio track in each sync-lock group.")); + return false; + } } } @@ -318,10 +323,18 @@ bool EffectTruncSilence::ProcessIndependently() if (!FindSilences(silences, track, last)) return false; // Treat tracks in the sync lock group only - SyncLockedTracksIterator syncIter(mOutputTracks); - Track *const syncFirst = syncIter.First(track); + Track *groupFirst, *groupLast; + if (syncLock) { + SyncLockedTracksIterator syncIter(mOutputTracks); + groupFirst = syncIter.First(track); + groupLast = syncIter.Last(track); + } + else { + groupFirst = track; + groupLast = last; + } double totalCutLen = 0.0; - if (!DoRemoval(silences, iGroup, nGroups, syncFirst, syncIter.Last(), totalCutLen)) + if (!DoRemoval(silences, iGroup, nGroups, groupFirst, groupLast, totalCutLen)) return false; newT1 = std::max(newT1, mT1 - totalCutLen); }