TracktionEngine
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | List of all members
graph::LockFreeMultiThreadedNodePlayer Class Reference

Plays back a node with mutiple threads. More...

#include <tracktion_LockFreeMultiThreadedNodePlayer.h>

Classes

struct  ThreadPool
 Base class for thread pools which can be customised to determine how cooperative threads should behave. More...
 

Public Types

using ThreadPoolCreator = std::function< std::unique_ptr< ThreadPool >(LockFreeMultiThreadedNodePlayer &)>
 

Public Member Functions

 LockFreeMultiThreadedNodePlayer ()
 Creates an empty LockFreeMultiThreadedNodePlayer.
 
 LockFreeMultiThreadedNodePlayer (ThreadPoolCreator, juce::AudioWorkgroup={})
 Creates an empty LockFreeMultiThreadedNodePlayer with a specified ThreadPool type.
 
 ~LockFreeMultiThreadedNodePlayer ()
 Destructor.
 
void setNumThreads (size_t)
 Sets the number of threads to use for rendering.
 
void setNode (std::unique_ptr< Node >)
 Sets the Node to process.
 
void setNode (std::unique_ptr< Node > newNode, double sampleRateToUse, int blockSizeToUse)
 Sets the Node to process with a new sample rate and block size.
 
void prepareToPlay (double sampleRateToUse, int blockSizeToUse)
 Prepares the current Node to be played.
 
NodegetNode ()
 Returns the current Node.
 
int process (const Node::ProcessContext &)
 Process a block of the Node.
 
void clearNode ()
 Clears the current Node.
 
double getSampleRate () const
 Returns the current sample rate.
 
int getBlockSize () const
 Returns the current block size.
 
void enablePooledMemoryAllocations (bool)
 Enables or disables the use on an AudioBufferPool to reduce memory consumption.
 
void enableNodeMemorySharing (bool shouldBeEnabled)
 
void setLatencyCompensationEnabled (bool)
 Enables or disables latency compensation - it is enabled by default.
 

Detailed Description

Plays back a node with mutiple threads.

The setting of Nodes and processing are all lock-free. This means the player can be real-time safe as long as your provided ThreadPool doesn't do any non-real-time operations in the wait/signal methods.

Member Typedef Documentation

◆ ThreadPoolCreator

Constructor & Destructor Documentation

◆ LockFreeMultiThreadedNodePlayer() [1/2]

graph::LockFreeMultiThreadedNodePlayer::LockFreeMultiThreadedNodePlayer ( )

◆ LockFreeMultiThreadedNodePlayer() [2/2]

graph::LockFreeMultiThreadedNodePlayer::LockFreeMultiThreadedNodePlayer ( ThreadPoolCreator  ,
juce::AudioWorkgroup  = {} 
)

Creates an empty LockFreeMultiThreadedNodePlayer with a specified ThreadPool type.

◆ ~LockFreeMultiThreadedNodePlayer()

graph::LockFreeMultiThreadedNodePlayer::~LockFreeMultiThreadedNodePlayer ( )

Destructor.

Member Function Documentation

◆ setNumThreads()

void graph::LockFreeMultiThreadedNodePlayer::setNumThreads ( size_t  )

Sets the number of threads to use for rendering.

This can be 0 in which case only the process calling thread will be used for processing. N.B. this will pause processing whilst updating the threads so there will be a gap in the audio.

◆ setNode() [1/2]

void graph::LockFreeMultiThreadedNodePlayer::setNode ( std::unique_ptr< Node )

Sets the Node to process.

◆ setNode() [2/2]

void graph::LockFreeMultiThreadedNodePlayer::setNode ( std::unique_ptr< Node newNode,
double  sampleRateToUse,
int  blockSizeToUse 
)

Sets the Node to process with a new sample rate and block size.

◆ prepareToPlay()

void graph::LockFreeMultiThreadedNodePlayer::prepareToPlay ( double  sampleRateToUse,
int  blockSizeToUse 
)

Prepares the current Node to be played.

Calling this will cause a drop in the output stream as the Node is re-prepared.

◆ getNode()

Node * graph::LockFreeMultiThreadedNodePlayer::getNode ( )

Returns the current Node.

◆ process()

int graph::LockFreeMultiThreadedNodePlayer::process ( const Node::ProcessContext )

Process a block of the Node.

◆ clearNode()

void graph::LockFreeMultiThreadedNodePlayer::clearNode ( )

Clears the current Node.

Note that this shouldn't be called concurrently with setNode. If it's called concurrently with process, it will block until the current process call has finished. This should be used sparingly as its a heavyweight operation which has to stop any processing threads and restart them again afterwrds.

◆ getSampleRate()

double graph::LockFreeMultiThreadedNodePlayer::getSampleRate ( ) const

Returns the current sample rate.

◆ getBlockSize()

int graph::LockFreeMultiThreadedNodePlayer::getBlockSize ( ) const

Returns the current block size.

◆ enablePooledMemoryAllocations()

void graph::LockFreeMultiThreadedNodePlayer::enablePooledMemoryAllocations ( bool  )

Enables or disables the use on an AudioBufferPool to reduce memory consumption.

Don't rely on this, it is a temporary method used for benchmarking and will go away in the future.

◆ enableNodeMemorySharing()

void graph::LockFreeMultiThreadedNodePlayer::enableNodeMemorySharing ( bool  shouldBeEnabled)

◆ setLatencyCompensationEnabled()

void graph::LockFreeMultiThreadedNodePlayer::setLatencyCompensationEnabled ( bool  )

Enables or disables latency compensation - it is enabled by default.


The documentation for this class was generated from the following file: