Audacity 3.2.0
Classes | Namespaces | Functions | Variables
WaveTrack.cpp File Reference
#include "WaveTrack.h"
#include "WaveClip.h"
#include <wx/defs.h>
#include <wx/debug.h>
#include <wx/log.h>
#include <float.h>
#include <math.h>
#include <algorithm>
#include <optional>
#include <numeric>
#include "float_cast.h"
#include "Envelope.h"
#include "Sequence.h"
#include "Project.h"
#include "ProjectRate.h"
#include "Prefs.h"
#include "SyncLock.h"
#include "TimeWarper.h"
#include "QualitySettings.h"
#include "InconsistencyException.h"
#include "ProjectFormatExtensionsRegistry.h"
#include "SampleBlock.h"
Include dependency graph for WaveTrack.cpp:

Go to the source code of this file.

Classes

struct  anonymous_namespace{WaveTrack.cpp}::GainAndPan
 
struct  anonymous_namespace{WaveTrack.cpp}::SplitInfo
 

Namespaces

namespace  anonymous_namespace{WaveTrack.cpp}
 

Functions

bool anonymous_namespace{WaveTrack.cpp}::AreAligned (const WaveClipPointers &a, const WaveClipPointers &b)
 
Track::LinkType anonymous_namespace{WaveTrack.cpp}::ToLinkType (int value)
 
static const Track::TypeInfotypeInfo ()
 
template<typename Container >
static Container MakeIntervals (const std::vector< WaveClipHolder > &clips)
 
WaveClipHolders::const_iterator anonymous_namespace{WaveTrack.cpp}::FindClip (const WaveClipHolders &list, const WaveClip *clip, int *distance=nullptr)
 
WaveClipHolders::iterator anonymous_namespace{WaveTrack.cpp}::FindClip (WaveClipHolders &list, const WaveClip *clip, int *distance=nullptr)
 
template<typename Cont1 , typename Cont2 >
Cont1 anonymous_namespace{WaveTrack.cpp}::FillSortedClipArray (const Cont2 &mClips)
 
void VisitBlocks (TrackList &tracks, BlockVisitor visitor, SampleBlockIDSet *pIDs)
 
void InspectBlocks (const TrackList &tracks, BlockInspector inspector, SampleBlockIDSet *pIDs)
 
bool GetEditClipsCanMove ()
 
 DEFINE_XML_METHOD_REGISTRY (WaveTrackIORegistry)
 

Variables

static const Track::ChannelGroupAttachments::RegisteredFactory anonymous_namespace{WaveTrack.cpp}::gainAndPanFactory { [](auto &) { return std::make_unique<GainAndPan>(); } }
 
static auto DefaultName = XO("Audio")
 
static ProjectFileIORegistry::ObjectReaderEntry readerEntry
 
static auto TrackFactoryFactory
 
static const AudacityProject::AttachedObjects::RegisteredFactory key2
 
ProjectFormatExtensionsRegistry::Extension smartClipsExtension ([](const AudacityProject &project) -> ProjectFormatVersion { const TrackList &trackList=TrackList::Get(project);for(auto wt :trackList.Any< const WaveTrack >()) { for(const auto &clip :wt->GetAllClips()) { if(clip->GetTrimLeft() > 0.0||clip->GetTrimRight() > 0.0) return { 3, 1, 0, 0 };} } return BaseProjectFormatVersion;})
 
StringSetting AudioTrackNameSetting
 
BoolSetting EditClipsCanMove
 

Function Documentation

◆ DEFINE_XML_METHOD_REGISTRY()

DEFINE_XML_METHOD_REGISTRY ( WaveTrackIORegistry  )

◆ GetEditClipsCanMove()

bool GetEditClipsCanMove ( )

Definition at line 2616 of file WaveTrack.cpp.

2617{
2618 bool mIsSyncLocked = SyncLockTracks.Read();
2619 if( mIsSyncLocked )
2620 return true;
2621 bool editClipsCanMove;
2622 return EditClipsCanMove.Read();
2623}
BoolSetting SyncLockTracks
Definition: SyncLock.cpp:172
BoolSetting EditClipsCanMove
Definition: WaveTrack.cpp:2625
bool Read(T *pVar) const
overload of Read returning a boolean that is true if the value was previously defined *‍/
Definition: Prefs.h:200

References EditClipsCanMove, Setting< T >::Read(), and SyncLockTracks.

Referenced by WaveTrack::ExpandCutLine(), WaveTrack::HandleClear(), WaveTrack::PasteWaveTrack(), and Generator::Process().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ InspectBlocks()

void InspectBlocks ( const TrackList tracks,
BlockInspector  inspector,
SampleBlockIDSet pIDs 
)

Definition at line 2547 of file WaveTrack.cpp.

2549{
2551 const_cast<TrackList &>(tracks), std::move( inspector ), pIDs );
2552}
void VisitBlocks(TrackList &tracks, BlockVisitor visitor, SampleBlockIDSet *pIDs)
Definition: WaveTrack.cpp:2526
A flat linked list of tracks supporting Add, Remove, Clear, and Contains, serialization of the list o...
Definition: Track.h:1201

References VisitBlocks().

Referenced by anonymous_namespace{HistoryWindow.cpp}::SpaceUsageCalculator::CalculateUsage(), ProjectFileIO::CopyTo(), EstimateRemovedBlocks(), ProjectFileIO::GetCurrentUsage(), ProjectFileIO::SaveProject(), and ProjectFileIO::ShouldCompact().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MakeIntervals()

template<typename Container >
static Container MakeIntervals ( const std::vector< WaveClipHolder > &  clips)
static

Definition at line 326 of file WaveTrack.cpp.

327{
328 Container result;
329 for (const auto &clip: clips) {
330 result.emplace_back( clip->GetPlayStartTime(), clip->GetPlayEndTime(),
331 std::make_unique<WaveTrack::IntervalData>( clip ) );
332 }
333 return result;
334}

◆ typeInfo()

static const Track::TypeInfo & typeInfo ( )
static

Definition at line 307 of file WaveTrack.cpp.

308{
309 static const Track::TypeInfo info{
310 { "wave", "wave", XO("Wave Track") },
312 return info;
313}
XO("Cut/Copy/Paste")
static const TypeInfo & ClassTypeInfo()
Definition: SampleTrack.cpp:82

References WritableSampleTrack::ClassTypeInfo(), and XO().

Referenced by WaveTrack::ClassTypeInfo(), and WaveTrack::GetTypeInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ VisitBlocks()

void VisitBlocks ( TrackList tracks,
BlockVisitor  visitor,
SampleBlockIDSet pIDs 
)

Definition at line 2526 of file WaveTrack.cpp.

2528{
2529 for (auto wt : tracks.Any< const WaveTrack >()) {
2530 // Scan all clips within current track
2531 for(const auto &clip : wt->GetAllClips()) {
2532 // Scan all sample blocks within current clip
2533 auto blocks = clip->GetSequenceBlockArray();
2534 for (const auto &block : *blocks) {
2535 auto &pBlock = block.sb;
2536 if ( pBlock ) {
2537 if ( pIDs && !pIDs->insert(pBlock->GetBlockID()).second )
2538 continue;
2539 if ( visitor )
2540 visitor( *pBlock );
2541 }
2542 }
2543 }
2544 }
2545}
auto Any() -> TrackIterRange< TrackType >
Definition: Track.h:1302
A Track that contains audio waveform data.
Definition: WaveTrack.h:51

References TrackList::Any().

Referenced by InspectBlocks().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ AudioTrackNameSetting

StringSetting AudioTrackNameSetting
Initial value:
{
L"/GUI/TrackNames/DefaultTrackName",
[]{ return DefaultName.Translation(); }
}
static auto DefaultName
Definition: WaveTrack.cpp:162

Definition at line 2606 of file WaveTrack.cpp.

Referenced by TracksPrefs::Commit(), WaveTrack::GetDefaultAudioTrackNamePreference(), and TracksPrefs::PopulateOrExchange().

◆ DefaultName

auto DefaultName = XO("Audio")
static

Definition at line 162 of file WaveTrack.cpp.

Referenced by WaveTrack::GetDefaultAudioTrackNamePreference().

◆ EditClipsCanMove

BoolSetting EditClipsCanMove
Initial value:
{
L"/GUI/EditClipCanMove", false }

Definition at line 2625 of file WaveTrack.cpp.

Referenced by TracksBehaviorsPrefs::Commit(), GetEditClipsCanMove(), BenchmarkDialog::OnRun(), TracksBehaviorsPrefs::PopulateOrExchange(), and WaveTrack::SyncLockAdjust().

◆ key2

Initial value:
{
}
static auto TrackFactoryFactory
Definition: WaveTrack.cpp:2556

Definition at line 2562 of file WaveTrack.cpp.

Referenced by WaveTrackFactory::Destroy(), WaveTrackFactory::Get(), and WaveTrackFactory::Reset().

◆ readerEntry

Initial value:
{
"wavetrack",
}
static WaveTrack * New(AudacityProject &project)
Definition: WaveTrack.cpp:192

Definition at line 177 of file WaveTrack.cpp.

◆ smartClipsExtension

ProjectFormatExtensionsRegistry::Extension smartClipsExtension([](const AudacityProject &project) -> ProjectFormatVersion { const TrackList &trackList=TrackList::Get(project);for(auto wt :trackList.Any< const WaveTrack >()) { for(const auto &clip :wt->GetAllClips()) { if(clip->GetTrimLeft() > 0.0||clip->GetTrimRight() > 0.0) return { 3, 1, 0, 0 };} } return BaseProjectFormatVersion;}) ( [] (const AudacityProject &project) -> ProjectFormatVersion { const TrackList &trackList=TrackList::Get(project);for(auto wt :trackList.Any< const WaveTrack >()) { for(const auto &clip :wt->GetAllClips()) { if(clip->GetTrimLeft() > 0.0||clip->GetTrimRight() > 0.0) return { 3, 1, 0, 0 };} } return BaseProjectFormatVersion;}  )

◆ TrackFactoryFactory

auto TrackFactoryFactory
static
Initial value:
= []( AudacityProject &project ) {
return std::make_shared< WaveTrackFactory >(
ProjectRate::Get( project ),
}
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
static ProjectRate & Get(AudacityProject &project)
Definition: ProjectRate.cpp:28
static SampleBlockFactoryPtr New(AudacityProject &project)
Definition: SampleBlock.cpp:16

Definition at line 2556 of file WaveTrack.cpp.

Referenced by WaveTrackFactory::Reset().