mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 08:09:32 +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:
parent
cf666c9bfc
commit
d0ff48f3bd
@ -994,6 +994,9 @@ bool WaveTrack::AddClip(const std::shared_ptr<WaveClip> &clip)
|
|||||||
void WaveTrack::HandleClear(double t0, double t1,
|
void WaveTrack::HandleClear(double t0, double t1,
|
||||||
bool addCutLines, bool split)
|
bool addCutLines, bool split)
|
||||||
{
|
{
|
||||||
|
// For debugging, use an ASSERT so that we stop
|
||||||
|
// closer to the problem.
|
||||||
|
wxASSERT( t1 >= t0 );
|
||||||
if (t1 < t0)
|
if (t1 < t0)
|
||||||
THROW_INCONSISTENCY_EXCEPTION;
|
THROW_INCONSISTENCY_EXCEPTION;
|
||||||
|
|
||||||
|
@ -555,7 +555,7 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
|
|||||||
// 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
|
// gaps are for later deletion
|
||||||
std::vector<std::pair<double, double>> gaps;
|
std::vector<std::pair<double, double>> gaps;
|
||||||
double last = 0.0;
|
double last = mCurT0;
|
||||||
auto clips = track->SortedClipArray();
|
auto clips = track->SortedClipArray();
|
||||||
auto front = clips.front();
|
auto front = clips.front();
|
||||||
auto back = clips.back();
|
auto back = clips.back();
|
||||||
@ -567,12 +567,13 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
|
|||||||
if (mCurT0 < st && clip == front) {
|
if (mCurT0 < st && clip == front) {
|
||||||
gaps.push_back(std::make_pair(mCurT0, st));
|
gaps.push_back(std::make_pair(mCurT0, st));
|
||||||
}
|
}
|
||||||
if (mCurT1 > et && clip == back) {
|
else if (last < st && mCurT0 <= last ) {
|
||||||
gaps.push_back(std::make_pair(et, mCurT1));
|
|
||||||
}
|
|
||||||
if (last >= mCurT0) {
|
|
||||||
gaps.push_back(std::make_pair(last, st));
|
gaps.push_back(std::make_pair(last, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (et < mCurT1 && clip == back) {
|
||||||
|
gaps.push_back(std::make_pair(et, mCurT1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
last = et;
|
last = et;
|
||||||
}
|
}
|
||||||
|
@ -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
|
// Silenced samples will be inserted in gaps between clips, so capture where these
|
||||||
// gaps are for later deletion
|
// gaps are for later deletion
|
||||||
std::vector<std::pair<double, double>> gaps;
|
std::vector<std::pair<double, double>> gaps;
|
||||||
double last = 0.0;
|
double last = mCurT0;
|
||||||
auto clips = orig->SortedClipArray();
|
auto clips = orig->SortedClipArray();
|
||||||
auto front = clips.front();
|
auto front = clips.front();
|
||||||
auto back = clips.back();
|
auto back = clips.back();
|
||||||
@ -444,12 +444,13 @@ void EffectSBSMS::Finalize(WaveTrack* orig, WaveTrack* out, const TimeWarper *wa
|
|||||||
if (mCurT0 < st && clip == front) {
|
if (mCurT0 < st && clip == front) {
|
||||||
gaps.push_back(std::make_pair(mCurT0, st));
|
gaps.push_back(std::make_pair(mCurT0, st));
|
||||||
}
|
}
|
||||||
if (mCurT1 > et && clip == back) {
|
else if (last < st && mCurT0 <= last ) {
|
||||||
gaps.push_back(std::make_pair(et, mCurT1));
|
|
||||||
}
|
|
||||||
if (last >= mCurT0) {
|
|
||||||
gaps.push_back(std::make_pair(last, st));
|
gaps.push_back(std::make_pair(last, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (et < mCurT1 && clip == back) {
|
||||||
|
gaps.push_back(std::make_pair(et, mCurT1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
last = et;
|
last = et;
|
||||||
}
|
}
|
||||||
|
@ -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
|
// Silenced samples will be inserted in gaps between clips, so capture where these
|
||||||
// gaps are for later deletion
|
// gaps are for later deletion
|
||||||
std::vector<std::pair<double, double>> gaps;
|
std::vector<std::pair<double, double>> gaps;
|
||||||
double last = 0.0;
|
double last = mCurT0;
|
||||||
auto clips = orig->SortedClipArray();
|
auto clips = orig->SortedClipArray();
|
||||||
auto front = clips.front();
|
auto front = clips.front();
|
||||||
auto back = clips.back();
|
auto back = clips.back();
|
||||||
@ -415,12 +415,13 @@ void EffectSoundTouch::Finalize(WaveTrack* orig, WaveTrack* out, const TimeWarpe
|
|||||||
if (mCurT0 < st && clip == front) {
|
if (mCurT0 < st && clip == front) {
|
||||||
gaps.push_back(std::make_pair(mCurT0, st));
|
gaps.push_back(std::make_pair(mCurT0, st));
|
||||||
}
|
}
|
||||||
if (mCurT1 > et && clip == back) {
|
else if (last < st && mCurT0 <= last ) {
|
||||||
gaps.push_back(std::make_pair(et, mCurT1));
|
|
||||||
}
|
|
||||||
if (last >= mCurT0) {
|
|
||||||
gaps.push_back(std::make_pair(last, st));
|
gaps.push_back(std::make_pair(last, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (et < mCurT1 && clip == back) {
|
||||||
|
gaps.push_back(std::make_pair(et, mCurT1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
last = et;
|
last = et;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user