TracktionEngine
|
Plays back a node with mutiple threads. More...
#include <tracktion_MultiThreadedNodePlayer.h>
Public Member Functions | |
MultiThreadedNodePlayer () | |
Creates an empty MultiThreadedNodePlayer. | |
~MultiThreadedNodePlayer () | |
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. | |
Node * | getNode () |
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. | |
Plays back a node with mutiple threads.
This uses a simpler internal mechanism than the LockFreeMultiThreadedNodePlayer but uses spin locks do do so so isn't completely wait-free.
The thread pool uses a hybrid method of trying to keep processing threads spinning where possible but falling back to a condition variable if they spin for too long.
This is mainly here to compare performance with the LockFreeMultiThreadedNodePlayer.
tracktion::graph::MultiThreadedNodePlayer::MultiThreadedNodePlayer | ( | ) |
Creates an empty MultiThreadedNodePlayer.
tracktion::graph::MultiThreadedNodePlayer::~MultiThreadedNodePlayer | ( | ) |
Destructor.
void tracktion::graph::MultiThreadedNodePlayer::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.
Referenced by tracktion::engine::MultiThreadedNodePlayer::setNumThreads().
void tracktion::graph::MultiThreadedNodePlayer::setNode | ( | std::unique_ptr< Node > | ) |
Sets the Node to process.
Referenced by tracktion::engine::MultiThreadedNodePlayer::MultiThreadedNodePlayer(), tracktion::engine::MultiThreadedNodePlayer::setNode(), and tracktion::engine::MultiThreadedNodePlayer::setNode().
void tracktion::graph::MultiThreadedNodePlayer::setNode | ( | std::unique_ptr< Node > | newNode, |
double | sampleRateToUse, | ||
int | blockSizeToUse | ||
) |
Sets the Node to process with a new sample rate and block size.
void tracktion::graph::MultiThreadedNodePlayer::prepareToPlay | ( | double | sampleRateToUse, |
int | blockSizeToUse | ||
) |
Prepares the current Node to be played.
Referenced by tracktion::engine::MultiThreadedNodePlayer::prepareToPlay().
Node * tracktion::graph::MultiThreadedNodePlayer::getNode | ( | ) |
Returns the current Node.
Referenced by tracktion::engine::MultiThreadedNodePlayer::getNode().
int tracktion::graph::MultiThreadedNodePlayer::process | ( | const Node::ProcessContext & | ) |
Process a block of the Node.
Referenced by tracktion::engine::MultiThreadedNodePlayer::process().
void tracktion::graph::MultiThreadedNodePlayer::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.
Referenced by tracktion::engine::MultiThreadedNodePlayer::clearNode().
double tracktion::graph::MultiThreadedNodePlayer::getSampleRate | ( | ) | const |
Returns the current sample rate.
Referenced by tracktion::engine::MultiThreadedNodePlayer::getSampleRate(), and tracktion::engine::MultiThreadedNodePlayer::process().