diff --git a/src/WaveTrack.cpp b/src/WaveTrack.cpp index fd8c829fa..e80cf2b86 100644 --- a/src/WaveTrack.cpp +++ b/src/WaveTrack.cpp @@ -736,6 +736,7 @@ void WaveTrack::ClearAndPaste(double t0, // Start of time to clear return; } + std::vector envPoints; std::vector splits; WaveClipHolders cuts; @@ -783,6 +784,12 @@ void WaveTrack::ClearAndPaste(double t0, // Start of time to clear else ++it; } + + // Save the envelope points + const auto &env = *clip->GetEnvelope(); + for (size_t i = 0, numPoints = env.GetNumberOfPoints(); i < numPoints; ++i) { + envPoints.push_back(env[i]); + } } const auto tolerance = 2.0 / GetRate(); @@ -790,7 +797,6 @@ void WaveTrack::ClearAndPaste(double t0, // Start of time to clear // Now, clear the selection HandleClear(t0, t1, false, false); { - // And paste in the NEW data Paste(t0, src); { @@ -878,6 +884,13 @@ void WaveTrack::ClearAndPaste(double t0, // Start of time to clear } } } + + // Restore the envelope points + for (auto point : envPoints) { + auto t = warper->Warp(point.GetT()); + WaveClip *clip = GetClipAtTime(t); + clip->GetEnvelope()->Insert(t, point.GetVal()); + } } }