21#include <wx/wxcrtvararg.h>
32#define TIMETRACK_MIN 0.01
33#define TIMETRACK_MAX 10.0
42 return _(
"Time Track");
49 auto result = tracks.Add(std::make_shared<TimeTrack>(&viewInfo));
50 result->AttachedTrackObjects::BuildAll();
75 mRuler = std::make_unique<Ruler>();
77 mRuler->SetLabelEdges(
false);
82 double *pT0,
double *pT1
84 , mZoomInfo(orig.mZoomInfo)
103 mRuler = std::make_unique<Ruler>();
105 mRuler->SetLabelEdges(
false);
166 std::shared_ptr<TimeTrack> pNewTrack;
168 pNewTrack = pTrack->SharedPointer<
TimeTrack>();
170 pNewTrack = std::make_shared<TimeTrack>( &
ViewInfo::Get( project ) );
175 pNewTrack->CleanState();
176 pNewTrack->Init(*
this);
177 pNewTrack->Paste(0.0,
this);
185 auto result =
Copy( t0, t1,
false );
208 auto sampleTime = 1.0 /
GetRate();
209 mEnvelope->CollapseRegion( t0, t1, sampleTime );
215 auto sampleTime = 1.0 /
GetRate();
217 (t, tt->mEnvelope.get(), sampleTime);
248 mEnvelope->SetExponential(interpolateLog);
253 if (tag ==
"timetrack") {
258 for (
auto pair : attrs)
260 auto attr = pair.first;
261 auto value = pair.second;
265 else if (attr ==
"rangelower")
270 else if (attr ==
"rangeupper")
275 else if (attr ==
"displaylog" && value.TryGet(nValue))
281 else if (attr ==
"interpolatelog" && value.TryGet(nValue))
307 if (tag ==
"envelope")
316 xmlFile.StartTag(
wxT(
"timetrack"));
321 xmlFile.WriteAttr(
wxT(
"rangelower"), GetRangeLower(), 12);
322 xmlFile.WriteAttr(
wxT(
"rangeupper"), GetRangeUpper(), 12);
323 xmlFile.WriteAttr(
wxT(
"displaylog"), GetDisplayLog());
324 xmlFile.WriteAttr(
wxT(
"interpolatelog"), GetInterpolateLog());
326 mEnvelope->WriteXML(xmlFile);
328 xmlFile.EndTag(
wxT(
"timetrack"));
340 double expected1 = (5.0 - 2.0) * 0.2 + (13.0 - 5.0) * 1.3;
342 double expected2 = (5.0 - 2.0) / 0.2 + (13.0 - 5.0) / 1.3;
343 if( fabs(value1 - expected1) > 0.01 )
345 wxPrintf(
"TimeTrack: Integral failed! expected %f got %f\n", expected1, value1);
347 if( fabs(value2 - expected2) > 0.01 )
349 wxPrintf(
"TimeTrack: IntegralOfInverse failed! expected %f got %f\n", expected2, value2);
368 if (
auto pTimeTrack = *list.Any<
const TimeTrack>().begin())
369 return pTimeTrack->GetEnvelope();
AUDACITY_DLL_API std::weak_ptr< AudacityProject > GetActiveProject()
Handle changing of active project and keep global project pointer.
an object holding per-project preferred sample rate
static Mixer::WarpOptions::DefaultWarp::Scope installer
Installer of the time warper.
static ProjectFileIORegistry::ObjectReaderEntry readerEntry
static const Track::TypeInfo & typeInfo()
std::vector< Attribute > AttributesList
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
double Integral(double t0, double t1) const
int InsertOrReplace(double when, double value)
Add a point at a particular absolute time coordinate.
double IntegralOfInverse(double t0, double t1) const
void Flatten(double value)
static ProjectRate & Get(AudacityProject &project)
A kind of Track used to 'warp time'.
static wxString GetDefaultName()
void Paste(double t, const Track *src) override
void WriteXML(XMLWriter &xmlFile) const override
void SetInterpolateLog(bool interpolateLog)
void HandleXMLEndTag(const std::string_view &tag) override
TimeTrack(const ZoomInfo *zoomInfo)
static const TypeInfo & ClassTypeInfo()
void SetDisplayLog(bool displayLog)
const ZoomInfo *const mZoomInfo
std::unique_ptr< BoundedEnvelope > mEnvelope
Holder Copy(double t0, double t1, bool forClipboard) const override
Track::Holder Clone() const override
bool GetInterpolateLog() const
bool HandleXMLTag(const std::string_view &tag, const AttributesList &attrs) override
XMLTagHandler * HandleXMLChild(const std::string_view &tag) override
Holder Cut(double t0, double t1) override
std::unique_ptr< Ruler > mRuler
BoundedEnvelope * GetEnvelope()
bool GetDisplayLog() const
void InsertSilence(double t, double len) override
const TypeInfo & GetTypeInfo() const override
void SetRangeLower(double lower)
void Silence(double t0, double t1) override
static TimeTrack * New(AudacityProject &project)
double GetRangeLower() const
double GetRangeUpper() const
Holder PasteInto(AudacityProject &) const override
Find or create the destination track for a paste, maybe in a different project.
void Clear(double t0, double t1) override
bool SupportsBasicEditing() const override
Whether this track type implements cut-copy-paste; by default, true.
void Init(const TimeTrack &orig)
Copy the metadata from another track but not the points.
void SetRangeUpper(double upper)
Abstract base class for an object holding data associated with points on a time axis.
static const TypeInfo & ClassTypeInfo()
R TypeSwitch(const Functions &...functions)
Use this function rather than testing track type explicitly and making down-casts.
std::shared_ptr< Track > Holder
bool HandleCommonXMLAttribute(const std::string_view &attr, const XMLAttributeValueView &valueView)
void Init(const Track &orig)
void WriteCommonXMLAttributes(XMLWriter &xmlFile, bool includeNameAndSelected=true) const
void SetName(const wxString &n)
A flat linked list of tracks supporting Add, Remove, Clear, and Contains, serialization of the list o...
static TrackList & Get(AudacityProject &project)
static ViewInfo & Get(AudacityProject &project)
This class is an interface which should be implemented by classes which wish to be able to load and s...
Base class for XMLFileWriter and XMLStringWriter that provides the general functionality for creating...
auto begin(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
Empty argument passed to some public constructors.