![]() |
Audacity 3.2.0
|
#include <RealtimeEffectManager.h>
Classes | |
struct | AllListsLock |
Public Types | |
using | Latency = std::chrono::microseconds |
![]() | |
using | message_type = RealtimeEffectManagerMessage |
using | CallbackReturn = std::conditional_t< true, void, bool > |
using | Callback = std::function< CallbackReturn(const RealtimeEffectManagerMessage &) > |
Type of functions that can be connected to the Publisher. More... | |
Public Member Functions | |
RealtimeEffectManager (AudacityProject &project) | |
~RealtimeEffectManager () | |
bool | IsActive () const noexcept |
To be called only from main thread. More... | |
std::shared_ptr< RealtimeEffectState > | AddState (RealtimeEffects::InitializationScope *pScope, Track *pTrack, const PluginID &id) |
Main thread appends a global or per-track effect. More... | |
std::shared_ptr< RealtimeEffectState > | ReplaceState (RealtimeEffects::InitializationScope *pScope, Track *pTrack, size_t index, const PluginID &id) |
Main thread replaces a global or per-track effect. More... | |
void | RemoveState (RealtimeEffects::InitializationScope *pScope, Track *pTrack, std::shared_ptr< RealtimeEffectState > pState) |
Main thread removes a global or per-track effect. More... | |
std::optional< size_t > | FindState (Track *pTrack, const std::shared_ptr< RealtimeEffectState > &pState) const |
Report the position of a state in the global or a per-track list. More... | |
bool | GetSuspended () const |
void | SetSuspended (bool value) |
To be called only from main thread. More... | |
![]() | |
virtual | ~Base () |
![]() | |
Publisher (ExceptionPolicy *pPolicy=nullptr, Alloc a={}) | |
Constructor supporting type-erased custom allocation/deletion. More... | |
Publisher (Publisher &&)=default | |
Publisher & | operator= (Publisher &&)=default |
Subscription | Subscribe (Callback callback) |
Connect a callback to the Publisher; later-connected are called earlier. More... | |
Subscription | Subscribe (Object &obj, Return(Object::*callback)(Args...)) |
Overload of Subscribe takes an object and pointer-to-member-function. More... | |
Static Public Member Functions | |
static RealtimeEffectManager & | Get (AudacityProject &project) |
static const RealtimeEffectManager & | Get (const AudacityProject &project) |
Private Member Functions | |
std::shared_ptr< RealtimeEffectState > | MakeNewState (RealtimeEffects::InitializationScope *pScope, Track *pLeader, const PluginID &id) |
void | Initialize (RealtimeEffects::InitializationScope &scope, double sampleRate) |
Main thread begins to define a set of tracks for playback. More... | |
void | AddTrack (RealtimeEffects::InitializationScope &scope, const Track &track, unsigned chans, float rate) |
void | Finalize () noexcept |
Main thread cleans up after playback. More... | |
void | ProcessStart (bool suspended) |
size_t | Process (bool suspended, const Track &track, float *const *buffers, float *const *scratch, float *dummy, unsigned nBuffers, size_t numSamples) |
void | ProcessEnd (bool suspended) noexcept |
RealtimeEffectManager (const RealtimeEffectManager &)=delete | |
RealtimeEffectManager & | operator= (const RealtimeEffectManager &)=delete |
template<typename StateVisitor > | |
void | VisitGroup (Track &leader, const StateVisitor &func) |
Visit the per-project states first, then states for leader if not null. More... | |
template<typename StateVisitor > | |
void | VisitGroup (const Track &leader, const StateVisitor &func) |
template<typename StateVisitor > | |
void | VisitAll (const StateVisitor &func) |
Visit the per-project states first, then all tracks from AddTrack. More... | |
Private Attributes | |
AudacityProject & | mProject |
Latency | mLatency { 0 } |
std::atomic< bool > | mSuspended { true } |
bool | mActive { false } |
std::vector< const Track * > | mGroupLeaders |
all are non-null More... | |
std::unordered_map< const Track *, double > | mRates |
Additional Inherited Members | |
![]() | |
static constexpr bool | notifies_all |
![]() | |
CallbackReturn | Publish (const RealtimeEffectManagerMessage &message) |
Send a message to connected callbacks. More... | |
Definition at line 47 of file RealtimeEffectManager.h.
using RealtimeEffectManager::Latency = std::chrono::microseconds |
Definition at line 52 of file RealtimeEffectManager.h.
RealtimeEffectManager::RealtimeEffectManager | ( | AudacityProject & | project | ) |
Definition at line 39 of file RealtimeEffectManager.cpp.
RealtimeEffectManager::~RealtimeEffectManager | ( | ) |
Definition at line 44 of file RealtimeEffectManager.cpp.
|
privatedelete |
std::shared_ptr< RealtimeEffectState > RealtimeEffectManager::AddState | ( | RealtimeEffects::InitializationScope * | pScope, |
Track * | pTrack, | ||
const PluginID & | id | ||
) |
Main thread appends a global or per-track effect.
pScope | if realtime is active but scope is absent, there is no effect |
pTrack | if null, then state is added to the global list |
id | identifies the effect |
!result || result->GetEffect() != nullptr
Definition at line 278 of file RealtimeEffectManager.cpp.
References RealtimeEffectManagerMessage::EffectAdded, anonymous_namespace{RealtimeEffectManager.cpp}::FindStates(), MakeNewState(), mProject, and Observer::Publisher< RealtimeEffectManagerMessage >::Publish().
Referenced by AudioIO::AddState().
|
private |
Main thread adds one track (passing the first of one or more channels), still before playback
Definition at line 73 of file RealtimeEffectManager.cpp.
References RealtimeEffectState::AddTrack(), Track::GetOwner(), mGroupLeaders, mRates, scope, and VisitGroup().
Referenced by RealtimeEffects::InitializationScope::AddTrack().
|
privatenoexcept |
Main thread cleans up after playback.
Definition at line 90 of file RealtimeEffectManager.cpp.
References RealtimeEffectState::Finalize(), mActive, mGroupLeaders, mLatency, mRates, SetSuspended(), and VisitAll().
Referenced by RealtimeEffects::InitializationScope::~InitializationScope().
std::optional< size_t > RealtimeEffectManager::FindState | ( | Track * | pTrack, |
const std::shared_ptr< RealtimeEffectState > & | pState | ||
) | const |
Report the position of a state in the global or a per-track list.
Definition at line 337 of file RealtimeEffectManager.cpp.
References _, anonymous_namespace{RealtimeEffectManager.cpp}::FindStates(), and mProject.
|
static |
Definition at line 29 of file RealtimeEffectManager.cpp.
References manager.
Referenced by AudioIO::AddState(), RealtimeEffects::InitializationScope::AddTrack(), Get(), RealtimeEffects::InitializationScope::InitializationScope(), anonymous_namespace{PluginMenus.cpp}::IsRealtimeNotActiveFlag(), anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectControl::OnChangeButtonClicked(), RealtimeEffects::ProcessingScope::Process(), RealtimeEffects::ProcessingScope::ProcessingScope(), AudioIO::RemoveState(), AudioIO::ReplaceState(), AudioIO::SetPaused(), TrackPanel::TrackPanel(), RealtimeEffects::InitializationScope::~InitializationScope(), and RealtimeEffects::ProcessingScope::~ProcessingScope().
|
static |
Definition at line 34 of file RealtimeEffectManager.cpp.
References Get().
|
inline |
Definition at line 107 of file RealtimeEffectManager.h.
|
private |
Main thread begins to define a set of tracks for playback.
Definition at line 53 of file RealtimeEffectManager.cpp.
References RealtimeEffectState::Initialize(), mActive, mGroupLeaders, mRates, scope, SetSuspended(), and VisitAll().
Referenced by RealtimeEffects::InitializationScope::InitializationScope().
|
noexcept |
To be called only from main thread.
Definition at line 48 of file RealtimeEffectManager.cpp.
References mActive.
Referenced by anonymous_namespace{PluginMenus.cpp}::IsRealtimeNotActiveFlag().
|
private |
Definition at line 239 of file RealtimeEffectManager.cpp.
References mActive, SharedNonInterfering< RealtimeEffectState >::make_shared(), mGroupLeaders, RealtimeEffects::InitializationScope::mInstances, RealtimeEffects::InitializationScope::mNumPlaybackChannels, mRates, and RealtimeEffects::InitializationScope::mSampleRate.
Referenced by AddState(), and ReplaceState().
|
privatedelete |
|
private |
Definition at line 124 of file RealtimeEffectManager.cpp.
References PackedArray::end(), mLatency, RealtimeEffectState::Process(), anonymous_namespace{NoteTrack.cpp}::swap(), and VisitGroup().
Referenced by RealtimeEffects::ProcessingScope::Process().
|
privatenoexcept |
Definition at line 187 of file RealtimeEffectManager.cpp.
References RealtimeEffectState::ProcessEnd().
Referenced by RealtimeEffects::ProcessingScope::~ProcessingScope().
|
private |
Definition at line 111 of file RealtimeEffectManager.cpp.
References RealtimeEffectState::ProcessStart(), and VisitAll().
Referenced by RealtimeEffects::ProcessingScope::ProcessingScope().
void RealtimeEffectManager::RemoveState | ( | RealtimeEffects::InitializationScope * | pScope, |
Track * | pTrack, | ||
std::shared_ptr< RealtimeEffectState > | pState | ||
) |
Main thread removes a global or per-track effect.
pScope | if realtime is active but scope is absent, there is no effect |
pTrack | if null, then state is added to the global list |
state | the state to be removed |
No effect if realtime is active but scope is not supplied
Definition at line 321 of file RealtimeEffectManager.cpp.
References RealtimeEffectManagerMessage::EffectRemoved, anonymous_namespace{RealtimeEffectManager.cpp}::FindStates(), mActive, mProject, and Observer::Publisher< RealtimeEffectManagerMessage >::Publish().
Referenced by AudioIO::RemoveState().
std::shared_ptr< RealtimeEffectState > RealtimeEffectManager::ReplaceState | ( | RealtimeEffects::InitializationScope * | pScope, |
Track * | pTrack, | ||
size_t | index, | ||
const PluginID & | id | ||
) |
Main thread replaces a global or per-track effect.
pScope | if realtime is active but scope is absent, there is no effect |
pTrack | if null, then state is added to the global list |
index | position in the list to replace; no effect if out of range |
id | identifies the effect |
!result || result->GetEffect() != nullptr
Definition at line 297 of file RealtimeEffectManager.cpp.
References RealtimeEffectManagerMessage::EffectReplaced, anonymous_namespace{RealtimeEffectManager.cpp}::FindStates(), mActive, MakeNewState(), mProject, and Observer::Publisher< RealtimeEffectManagerMessage >::Publish().
Referenced by AudioIO::ReplaceState().
|
inline |
To be called only from main thread.
Each time a processing scope starts in the audio thread, suspension state is tested, and plug-in instances may need to do things in response to the transitions. Playback of samples may continue but with effects switched off in suspended state.
Definition at line 117 of file RealtimeEffectManager.h.
Referenced by Finalize(), and Initialize().
|
inlineprivate |
Visit the per-project states first, then all tracks from AddTrack.
Tracks are visited in unspecified order
Definition at line 186 of file RealtimeEffectManager.h.
References RealtimeEffectList::Get(), and RealtimeEffectList::Visit().
Referenced by Finalize(), Initialize(), and ProcessStart().
|
inlineprivate |
Definition at line 174 of file RealtimeEffectManager.h.
References RealtimeEffectList::Get(), and RealtimeEffectList::Visit().
|
inlineprivate |
Visit the per-project states first, then states for leader if not null.
Definition at line 164 of file RealtimeEffectManager.h.
References RealtimeEffectList::Get(), and RealtimeEffectList::Visit().
Referenced by AddTrack(), and Process().
|
private |
Definition at line 201 of file RealtimeEffectManager.h.
Referenced by Finalize(), Initialize(), IsActive(), MakeNewState(), RemoveState(), and ReplaceState().
|
private |
all are non-null
Definition at line 205 of file RealtimeEffectManager.h.
Referenced by AddTrack(), RealtimeEffectManager::AllListsLock::AllListsLock(), Finalize(), Initialize(), and MakeNewState().
|
private |
Definition at line 197 of file RealtimeEffectManager.h.
Referenced by Finalize(), and Process().
|
private |
Definition at line 196 of file RealtimeEffectManager.h.
Referenced by AddState(), RealtimeEffectManager::AllListsLock::AllListsLock(), FindState(), RemoveState(), and ReplaceState().
|
private |
Definition at line 207 of file RealtimeEffectManager.h.
Referenced by AddTrack(), Finalize(), Initialize(), and MakeNewState().
|
private |
Definition at line 199 of file RealtimeEffectManager.h.