mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-15 07:40:23 +02:00
Bug 2534 - Change Speed merges selected clip with adjacent clips
This commit is contained in:
parent
5bca69ca31
commit
3605d73d12
@ -32,6 +32,7 @@
|
||||
#include "../widgets/valnum.h"
|
||||
|
||||
#include "TimeWarper.h"
|
||||
#include "../WaveClip.h"
|
||||
#include "../WaveTrack.h"
|
||||
|
||||
enum
|
||||
@ -551,9 +552,42 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
|
||||
double newLength = outputTrack->GetEndTime();
|
||||
if (bResult)
|
||||
{
|
||||
// Silenced samples will be inserted in gaps between clips, so capture where these
|
||||
// gaps are for later deletion
|
||||
std::vector<std::pair<double, double>> gaps;
|
||||
double last = 0.0;
|
||||
auto clips = track->SortedClipArray();
|
||||
auto front = clips.front();
|
||||
auto back = clips.back();
|
||||
for (auto &clip : clips) {
|
||||
auto st = clip->GetStartTime();
|
||||
auto et = clip->GetEndTime();
|
||||
|
||||
if (st >= mCurT0 || et < mCurT1) {
|
||||
if (mCurT0 < st && clip == front) {
|
||||
gaps.push_back(std::make_pair(mCurT0, st));
|
||||
}
|
||||
if (mCurT1 > et && clip == back) {
|
||||
gaps.push_back(std::make_pair(et, mCurT1));
|
||||
}
|
||||
if (last >= mCurT0) {
|
||||
gaps.push_back(std::make_pair(last, st));
|
||||
}
|
||||
}
|
||||
last = et;
|
||||
}
|
||||
|
||||
LinearTimeWarper warper { mCurT0, mCurT0, mCurT1, mCurT0 + newLength };
|
||||
track->ClearAndPaste(
|
||||
mCurT0, mCurT1, outputTrack.get(), true, false, &warper);
|
||||
|
||||
// Take the output track and insert it in place of the original sample data
|
||||
track->ClearAndPaste(mCurT0, mCurT1, outputTrack.get(), true, true, &warper);
|
||||
|
||||
// Finally, recreate the gaps
|
||||
for (auto gap : gaps) {
|
||||
auto st = track->LongSamplesToTime(track->TimeToLongSamples(gap.first));
|
||||
auto et = track->LongSamplesToTime(track->TimeToLongSamples(gap.second));
|
||||
track->SplitDelete(warper.Warp(st), warper.Warp(et));
|
||||
}
|
||||
}
|
||||
|
||||
if (newLength > mMaxNewLength)
|
||||
|
Loading…
x
Reference in New Issue
Block a user