1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-22 15:38:02 +02:00

Fix the new Truncate Silence

This commit is contained in:
Paul Licameli 2016-01-23 09:08:27 -05:00
parent 513d1c548f
commit cdc8142940

View File

@ -28,6 +28,7 @@
#include <wx/valgen.h> #include <wx/valgen.h>
#include "../Prefs.h" #include "../Prefs.h"
#include "../Project.h"
#include "../ShuttleGui.h" #include "../ShuttleGui.h"
#include "../WaveTrack.h" #include "../WaveTrack.h"
#include "../widgets/valnum.h" #include "../widgets/valnum.h"
@ -272,20 +273,24 @@ bool EffectTruncSilence::ProcessIndependently()
{ {
unsigned nGroups = 0; unsigned nGroups = 0;
const bool syncLock = ::GetActiveProject()->IsSyncLocked();
// Check if it's permissible // Check if it's permissible
{ {
SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); SelectedTrackListOfKindIterator iter(Track::Wave, mTracks);
for (Track *track = iter.First(); track; for (Track *track = iter.First(); track;
track = iter.Next(true) // skip linked tracks track = iter.Next(true) // skip linked tracks
) { ) {
Track *const link = track->GetLink(); if (syncLock) {
SyncLockedTracksIterator syncIter(mTracks); Track *const link = track->GetLink();
for (Track *track2 = syncIter.First(track); track2; track2 = syncIter.Next()) { SyncLockedTracksIterator syncIter(mTracks);
if (track2->GetKind() == Track::Wave && for (Track *track2 = syncIter.First(track); track2; track2 = syncIter.Next()) {
!(track2 == track || track2 == link) && if (track2->GetKind() == Track::Wave &&
track2->GetSelected()) { !(track2 == track || track2 == link) &&
::wxMessageBox(_("When truncating independently, there may only be one selected audio track in each sync-lock group.")); track2->GetSelected()) {
return false; ::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)) if (!FindSilences(silences, track, last))
return false; return false;
// Treat tracks in the sync lock group only // Treat tracks in the sync lock group only
SyncLockedTracksIterator syncIter(mOutputTracks); Track *groupFirst, *groupLast;
Track *const syncFirst = syncIter.First(track); if (syncLock) {
SyncLockedTracksIterator syncIter(mOutputTracks);
groupFirst = syncIter.First(track);
groupLast = syncIter.Last(track);
}
else {
groupFirst = track;
groupLast = last;
}
double totalCutLen = 0.0; double totalCutLen = 0.0;
if (!DoRemoval(silences, iGroup, nGroups, syncFirst, syncIter.Last(), totalCutLen)) if (!DoRemoval(silences, iGroup, nGroups, groupFirst, groupLast, totalCutLen))
return false; return false;
newT1 = std::max(newT1, mT1 - totalCutLen); newT1 = std::max(newT1, mT1 - totalCutLen);
} }