1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-23 09:20:16 +01:00

Move TimeTrack's upper and lower range into new BoundedEnvelope...

... confusingly, Envelope already carried its own limiting values, but those
in the TimeTrack were not guaranteed to be the same.

I'm just preserving behavior as I break file dependencies and won't try to fix
that confusion now.
This commit is contained in:
Paul Licameli
2019-05-24 11:23:54 -04:00
parent d28ae00d88
commit 5ae606cf53
3 changed files with 67 additions and 23 deletions

View File

@@ -58,11 +58,11 @@ TimeTrack::TimeTrack(const std::shared_ptr<DirManager> &projDirManager, const Zo
{
mHeight = 100;
mRangeLower = 0.9;
mRangeUpper = 1.1;
SetRangeLower( 0.9 );
SetRangeUpper( 1.1 );
mDisplayLog = false;
mEnvelope = std::make_unique<Envelope>(true, TIMETRACK_MIN, TIMETRACK_MAX, 1.0);
mEnvelope = std::make_unique<BoundedEnvelope>(true, TIMETRACK_MIN, TIMETRACK_MAX, 1.0);
mEnvelope->SetTrackLen(DBL_MAX);
mEnvelope->SetOffset(0);
@@ -84,10 +84,10 @@ TimeTrack::TimeTrack(const TimeTrack &orig, double *pT0, double *pT1)
auto len = DBL_MAX;
if (pT0 && pT1) {
len = *pT1 - *pT0;
mEnvelope = std::make_unique<Envelope>( *orig.mEnvelope, *pT0, *pT1 );
mEnvelope = std::make_unique<BoundedEnvelope>( *orig.mEnvelope, *pT0, *pT1 );
}
else
mEnvelope = std::make_unique<Envelope>( *orig.mEnvelope );
mEnvelope = std::make_unique<BoundedEnvelope>( *orig.mEnvelope );
mEnvelope->SetTrackLen( len );
mEnvelope->SetOffset(0);
@@ -113,6 +113,26 @@ TimeTrack::~TimeTrack()
{
}
double TimeTrack::GetRangeLower() const
{
return mEnvelope->GetRangeLower();
}
double TimeTrack::GetRangeUpper() const
{
return mEnvelope->GetRangeUpper();
}
void TimeTrack::SetRangeLower(double lower)
{
mEnvelope->SetRangeLower( lower );
}
void TimeTrack::SetRangeUpper(double upper)
{
mEnvelope->SetRangeUpper( upper );
}
Track::Holder TimeTrack::Cut( double t0, double t1 )
{
auto result = Copy( t0, t1, false );
@@ -207,12 +227,12 @@ bool TimeTrack::HandleXMLTag(const wxChar *tag, const wxChar **attrs)
mMinimized = (nValue != 0);
else if (!wxStrcmp(attr, wxT("rangelower")))
{
mRangeLower = Internat::CompatibleToDouble(value);
SetRangeLower( Internat::CompatibleToDouble(value) );
mRescaleXMLValues = false;
}
else if (!wxStrcmp(attr, wxT("rangeupper")))
{
mRangeUpper = Internat::CompatibleToDouble(value);
SetRangeUpper( Internat::CompatibleToDouble(value) );
mRescaleXMLValues = false;
}
else if (!wxStrcmp(attr, wxT("displaylog")) &&
@@ -242,7 +262,7 @@ void TimeTrack::HandleXMLEndTag(const wxChar * WXUNUSED(tag))
if(mRescaleXMLValues)
{
mRescaleXMLValues = false;
mEnvelope->RescaleValues(mRangeLower, mRangeUpper);
mEnvelope->RescaleValues(GetRangeLower(), GetRangeUpper());
mEnvelope->SetRange(TIMETRACK_MIN, TIMETRACK_MAX);
}
}
@@ -265,8 +285,8 @@ void TimeTrack::WriteXML(XMLWriter &xmlFile) const
//xmlFile.WriteAttr(wxT("offset"), mOffset, 8);
xmlFile.WriteAttr(wxT("height"), GetActualHeight());
xmlFile.WriteAttr(wxT("minimized"), GetMinimized());
xmlFile.WriteAttr(wxT("rangelower"), mRangeLower, 12);
xmlFile.WriteAttr(wxT("rangeupper"), mRangeUpper, 12);
xmlFile.WriteAttr(wxT("rangelower"), GetRangeLower(), 12);
xmlFile.WriteAttr(wxT("rangeupper"), GetRangeUpper(), 12);
xmlFile.WriteAttr(wxT("displaylog"), GetDisplayLog());
xmlFile.WriteAttr(wxT("interpolatelog"), GetInterpolateLog());
@@ -324,14 +344,15 @@ void TimeTrack::Draw
wxPen &pen = highlight ? AColor::uglyPen : AColor::envelopePen;
dc.SetPen( pen );
double logLower = log(std::max(1.0e-7, mRangeLower)), logUpper = log(std::max(1.0e-7, mRangeUpper));
double logLower = log(std::max(1.0e-7, GetRangeLower())),
logUpper = log(std::max(1.0e-7, GetRangeUpper()));
for (int x = 0; x < mid.width; x++)
{
double y;
if(mDisplayLog)
y = (double)mid.height * (logUpper - log(envValues[x])) / (logUpper - logLower);
else
y = (double)mid.height * (mRangeUpper - envValues[x]) / (mRangeUpper - mRangeLower);
y = (double)mid.height * (GetRangeUpper() - envValues[x]) / (GetRangeUpper() - GetRangeLower());
int thisy = r.y + (int)y;
AColor::Line(dc, mid.x + x, thisy - 1, mid.x + x, thisy+2);
}