1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 15:49:41 +02:00

Bug 2754 - Change Tempo & Pitch and Sliding Stretch with selected audio in negative time crash Audacity on windows (error on Mac)

This commit is contained in:
James Crook 2021-05-15 11:35:39 +01:00
parent cf666c9bfc
commit d0ff48f3bd
4 changed files with 22 additions and 16 deletions

View File

@ -994,6 +994,9 @@ bool WaveTrack::AddClip(const std::shared_ptr<WaveClip> &clip)
void WaveTrack::HandleClear(double t0, double t1,
bool addCutLines, bool split)
{
// For debugging, use an ASSERT so that we stop
// closer to the problem.
wxASSERT( t1 >= t0 );
if (t1 < t0)
THROW_INCONSISTENCY_EXCEPTION;

View File

@ -552,10 +552,10 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
double newLength = outputTrack->GetEndTime();
if (bResult)
{
// Silenced samples will be inserted in gaps between clips, so capture where these
// 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;
double last = mCurT0;
auto clips = track->SortedClipArray();
auto front = clips.front();
auto back = clips.back();
@ -567,12 +567,13 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
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) {
else if (last < st && mCurT0 <= last ) {
gaps.push_back(std::make_pair(last, st));
}
if (et < mCurT1 && clip == back) {
gaps.push_back(std::make_pair(et, mCurT1));
}
}
last = et;
}

View File

@ -432,7 +432,7 @@ void EffectSBSMS::Finalize(WaveTrack* orig, WaveTrack* out, const TimeWarper *wa
// 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;
double last = mCurT0;
auto clips = orig->SortedClipArray();
auto front = clips.front();
auto back = clips.back();
@ -444,12 +444,13 @@ void EffectSBSMS::Finalize(WaveTrack* orig, WaveTrack* out, const TimeWarper *wa
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) {
else if (last < st && mCurT0 <= last ) {
gaps.push_back(std::make_pair(last, st));
}
if (et < mCurT1 && clip == back) {
gaps.push_back(std::make_pair(et, mCurT1));
}
}
last = et;
}

View File

@ -403,7 +403,7 @@ void EffectSoundTouch::Finalize(WaveTrack* orig, WaveTrack* out, const TimeWarpe
// 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;
double last = mCurT0;
auto clips = orig->SortedClipArray();
auto front = clips.front();
auto back = clips.back();
@ -415,12 +415,13 @@ void EffectSoundTouch::Finalize(WaveTrack* orig, WaveTrack* out, const TimeWarpe
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) {
else if (last < st && mCurT0 <= last ) {
gaps.push_back(std::make_pair(last, st));
}
if (et < mCurT1 && clip == back) {
gaps.push_back(std::make_pair(et, mCurT1));
}
}
last = et;
}