From 340bd20fc672e0101854481350e7dafeb83a9d54 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 20 Dec 2018 12:41:46 -0500 Subject: [PATCH] Fix data loss saving a stereo track lossless or compressed... ... in case clip boundaries don't match and the right channel covers a greater time extent than the left. Don't lose those parts of the right channel, before or after, and also make the start time of the project correct in case the right channel starts earlier. This is an old bug, going back as far as the git history. --- src/Project.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Project.cpp b/src/Project.cpp index ee90aa3f3..c084ba376 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -3752,7 +3752,9 @@ void AudacityProject::WriteXML(XMLWriter &xmlFile, bool bWantSaveCopy) // xmlFile.WriteAttr(wxT("channel"), t->GetChannel()); // xmlFile.WriteAttr(wxT("linked"), t->GetLinked()); - xmlFile.WriteAttr(wxT("offset"), pWaveTrack->GetOffset(), 8); + const auto offset = + TrackList::Channels( pWaveTrack ).min( &WaveTrack::GetOffset ); + xmlFile.WriteAttr(wxT("offset"), offset, 8); xmlFile.WriteAttr(wxT("mute"), pWaveTrack->GetMute()); xmlFile.WriteAttr(wxT("solo"), pWaveTrack->GetSolo()); xmlFile.WriteAttr(wxT("height"), pWaveTrack->GetActualHeight()); @@ -4168,10 +4170,12 @@ bool AudacityProject::SaveCopyWaveTracks(const wxString & strProjectPathName, channel->SetSelected(true); uniqueTrackFileName = wxFileName(strDataDirPathName, pTrack->GetName(), extension); FileNames::MakeNameUnique(mStrOtherNamesArray, uniqueTrackFileName); + const auto startTime = channels.min( &Track::GetStartTime ); + const auto endTime = channels.max( &Track::GetEndTime ); bSuccess = theExporter.Process(this, channels.size(), fileFormat, uniqueTrackFileName.GetFullPath(), true, - pTrack->GetStartTime(), pTrack->GetEndTime()); + startTime, endTime); if (!bSuccess) // If only some exports succeed, the cleanup is not done here