mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-16 01:21:25 +01:00
Fix invalid Compressor plots if out of range values are entered in textboxes.
Signed-off-by: Max Maisel <max.maisel@posteo.de>
This commit is contained in:
@@ -97,6 +97,11 @@ inline int ScaleToPrecision(double scale)
|
|||||||
return ceil(log10(scale));
|
return ceil(log10(scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool IsInRange(double val, double min, double max)
|
||||||
|
{
|
||||||
|
return val >= min && val <= max;
|
||||||
|
}
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(EffectCompressor2, wxEvtHandler)
|
BEGIN_EVENT_TABLE(EffectCompressor2, wxEvtHandler)
|
||||||
EVT_CHECKBOX(wxID_ANY, EffectCompressor2::OnUpdateUI)
|
EVT_CHECKBOX(wxID_ANY, EffectCompressor2::OnUpdateUI)
|
||||||
EVT_CHOICE(wxID_ANY, EffectCompressor2::OnUpdateUI)
|
EVT_CHOICE(wxID_ANY, EffectCompressor2::OnUpdateUI)
|
||||||
@@ -1622,6 +1627,15 @@ void EffectCompressor2::UpdateCompressorPlot()
|
|||||||
plot = mGainPlot->GetPlotData(0);
|
plot = mGainPlot->GetPlotData(0);
|
||||||
wxASSERT(plot->xdata.size() == plot->ydata.size());
|
wxASSERT(plot->xdata.size() == plot->ydata.size());
|
||||||
|
|
||||||
|
if(!IsInRange(mThresholdDB, MIN_Threshold, MAX_Threshold))
|
||||||
|
return;
|
||||||
|
if(!IsInRange(mRatio, MIN_Ratio, MAX_Ratio))
|
||||||
|
return;
|
||||||
|
if(!IsInRange(mKneeWidthDB, MIN_KneeWidth, MAX_KneeWidth))
|
||||||
|
return;
|
||||||
|
if(!IsInRange(mMakeupGainPct, MIN_MakeupGain, MAX_MakeupGain))
|
||||||
|
return;
|
||||||
|
|
||||||
InitGainCalculation();
|
InitGainCalculation();
|
||||||
size_t xsize = plot->xdata.size();
|
size_t xsize = plot->xdata.size();
|
||||||
for(size_t i = 0; i < xsize; ++i)
|
for(size_t i = 0; i < xsize; ++i)
|
||||||
@@ -1639,6 +1653,15 @@ void EffectCompressor2::UpdateResponsePlot()
|
|||||||
plot = mResponsePlot->GetPlotData(1);
|
plot = mResponsePlot->GetPlotData(1);
|
||||||
wxASSERT(plot->xdata.size() == plot->ydata.size());
|
wxASSERT(plot->xdata.size() == plot->ydata.size());
|
||||||
|
|
||||||
|
if(!IsInRange(mAttackTime, MIN_AttackTime, MAX_AttackTime))
|
||||||
|
return;
|
||||||
|
if(!IsInRange(mReleaseTime, MIN_ReleaseTime, MAX_ReleaseTime))
|
||||||
|
return;
|
||||||
|
if(!IsInRange(mLookaheadTime, MIN_LookaheadTime, MAX_LookaheadTime))
|
||||||
|
return;
|
||||||
|
if(!IsInRange(mLookbehindTime, MIN_LookbehindTime, MAX_LookbehindTime))
|
||||||
|
return;
|
||||||
|
|
||||||
std::unique_ptr<SamplePreprocessor> preproc;
|
std::unique_ptr<SamplePreprocessor> preproc;
|
||||||
std::unique_ptr<EnvelopeDetector> envelope;
|
std::unique_ptr<EnvelopeDetector> envelope;
|
||||||
float plot_rate = RESPONSE_PLOT_SAMPLES / RESPONSE_PLOT_TIME;
|
float plot_rate = RESPONSE_PLOT_SAMPLES / RESPONSE_PLOT_TIME;
|
||||||
|
|||||||
Reference in New Issue
Block a user