File-based SamplePlayerNode, where samples are constantly streamed from file. Suitable for large audio files. More...
#include <SamplePlayerNode.h>
Public Types | |
enum | ChannelMode { ChannelMode::SPECIFIED, ChannelMode::MATCHES_INPUT, ChannelMode::MATCHES_OUTPUT } |
Public Member Functions | |
FilePlayerNode (const Format &format=Format()) | |
Constructs a FilePlayerNode with optional format. More... | |
FilePlayerNode (const SourceFileRef &sourceFile, bool isReadAsync=true, const Format &format=Node::Format()) | |
Constructs a FilePlayerNode that plays sourceFile and optionally specifying isReadAsync (default = true). Can also provide an optional format. More... | |
virtual | ~FilePlayerNode () |
virtual void | stop () override |
Stops playing the sample, returns the read position to the beginning and disables processing. More... | |
virtual void | seek (size_t readPositionFrames) override |
Seek the read position to readPositionFrames. More... | |
bool | isReadAsync () const |
Returns whether reading occurs asynchronously (default is false). If true, file reading is done from an internal thread, if false it is done directly on the audio thread. More... | |
void | setSourceFile (const SourceFileRef &sourceFile) |
const SourceFileRef & | getSourceFile () const |
uint64_t | getLastUnderrun () |
Returns the frame of the last buffer underrun or 0 if none since the last time this method was called. More... | |
uint64_t | getLastOverrun () |
Returns the frame of the last buffer overrun or 0 if none since the last time this method was called. More... | |
virtual void | start () |
Starts playing the sample from the beginning. More... | |
void | seekToTime (double positionSeconds) |
Seek to read position readPositionSeconds,. More... | |
size_t | getReadPosition () const |
Returns the current read position in frames. More... | |
double | getReadPositionTime () const |
Returns the current read position in seconds. More... | |
double | getNumSeconds () const |
Returns the total number of seconds this SamplePlayerNode will play from beginning to end. More... | |
size_t | getNumFrames () const |
Returns the total number of frames this SamplePlayerNode will play from beginning to end. More... | |
bool | isEof () const |
Returns whether the SamplePlayerNode has reached EOF (end of file). If true, isEnabled() will also return false. More... | |
void | setLoopEnabled (bool b=true) |
Sets whether playing continues from beginning after the end is reached (default = false) More... | |
bool | isLoopEnabled () const |
Gets whether playing continues from beginning after the end is reached (default = false) More... | |
void | setLoopBegin (size_t positionFrames) |
Sets the begin loop marker in frames (default = 0, max = getNumFrames()). More... | |
void | setLoopBeginTime (double positionSeconds) |
Sets the begin loop marker in seconds (default = 0, max = getNumSeconds()). More... | |
void | setLoopEnd (size_t positionFrames) |
Sets the end loop marker in frames (default = getNumFrames(), max = getNumFrames()). More... | |
void | setLoopEndTime (double positionSeconds) |
Sets the end loop marker in seconds (default = getNumSeconds(), max = getNumSeconds()). More... | |
size_t | getLoopBegin () const |
Returns the begin loop marker in frames. More... | |
double | getLoopBeginTime () const |
Returns the begin loop marker in seconds. More... | |
size_t | getLoopEnd () const |
Returns the end loop marker in frames. More... | |
double | getLoopEndTime () const |
Returns the end loop marker in seconds. More... | |
void | enable () |
Enables this Node for processing. Same as setEnabled( true ) . More... | |
void | disable () |
Disables this Node for processing. Same as setEnabled( false ) . More... | |
void | setEnabled (bool b=true) |
Sets whether this Node is enabled for processing or not. More... | |
bool | isEnabled () const |
Returns whether this Node is enabled for processing or not. More... | |
virtual void | connect (const NodeRef &output) |
Connects this Node to output. More... | |
virtual void | disconnect (const NodeRef &output) |
Disconnects this Node from output. More... | |
virtual void | disconnectAll () |
Disconnects this Node from all inputs and outputs. More... | |
virtual void | disconnectAllOutputs () |
Disconnects this Node from all outputs. More... | |
virtual void | disconnectAllInputs () |
Disconnects all of this Node's inputs. More... | |
size_t | getNumConnectedInputs () const |
Returns the number of inputs connected to this Node. More... | |
size_t | getNumConnectedOutputs () const |
Returns the number of outputs this Node is connected to. More... | |
bool | isConnectedToInput (const NodeRef &input) const |
Returns true if input is connected to this Node as an input, false otherwise. More... | |
bool | isConnectedToOutput (const NodeRef &output) const |
Returns true if output is connected to this Node as an output, false otherwise. More... | |
ContextRef | getContext () const |
Returns the Context associated with this Node. More... | |
size_t | getNumChannels () const |
Returns the number of channels this Node will process. More... | |
ChannelMode | getChannelMode () const |
Returns the channel mode. More... | |
size_t | getMaxNumInputChannels () const |
Returns the maximum number of channels any input has. More... | |
size_t | getSampleRate () const |
Returns the samplerate of this Node, which is governed by the Context's OutputNode. More... | |
size_t | getFramesPerBlock () const |
Returns the number of frames processed in one block by this Node, which is governed by the Context's OutputNode. More... | |
bool | isAutoEnabled () const |
Returns whether this Node is automatically enabled / disabled when connected. More... | |
void | setAutoEnabled (bool b=true) |
Sets whether this Node is automatically enabled / disabled when connected. More... | |
bool | isInitialized () const |
Returns whether this Node is in an initialized state and is capable of processing audio. More... | |
bool | getProcessesInPlace () const |
Returns whether this Node will process audio with an in-place Buffer. More... | |
bool | canConnectToInput (const NodeRef &input) |
Returns whether it is possible to connect to input, example reasons of failure would be this == Node, or Node is already an input. More... | |
bool | checkCycle (const NodeRef &sourceNode, const NodeRef &destNode) const |
Returns true if there is an unmanageable cycle betweeen sourceNode and destNode. If any Node's in the traversal returns true for supportsCycles(), this method will return false. More... | |
const std::set< NodeRef > & | getInputs () const |
Returns an immutable reference to the inputs container. More... | |
std::vector< NodeRef > | getOutputs () const |
Returns a copy of the NodeRef's referenced by the this Node as outputs. The copy is necessary because outputs are stored internally with weak_ptr's. More... | |
virtual std::string | getName () |
Returns a string representing the name of this Node type. Default returns a demangled, compiler-specific class name. More... | |
void | setName (const std::string &name) |
Sets this Node's name to a user-specified string. More... | |
Buffer * | getInternalBuffer () |
Usually used internally by a Node subclass, returns a pointer to the internal buffer storage. More... | |
const Buffer * | getInternalBuffer () const |
Usually used internally by a Node subclass, returns a pointer to the internal buffer storage. More... | |
void | pullInputs (Buffer *inPlaceBuffer) |
Usually called internally by the Node, in special cases sub-classes may need to call this on other Node's. More... | |
Protected Member Functions | |
void | initialize () override |
Called before audio buffers need to be used. There is always a valid Context at this point. More... | |
void | uninitialize () override |
Called once the contents of initialize are no longer relevant, i.e. connections have changed. More... | |
void | enableProcessing () override |
Callled when this Node should enable processing. Initiated from Node::enable(). More... | |
void | disableProcessing () override |
Callled when this Node should disable processing. Initiated from Node::disable(). More... | |
void | process (Buffer *buffer) override |
Override to perform audio processing on buffer. More... | |
void | readAsyncImpl () |
void | readImpl () |
void | seekImpl (size_t readPos) |
void | destroyReadThreadImpl () |
virtual void | sumInputs () |
virtual bool | supportsInputNumChannels (size_t numChannels) const |
Default implementation returns true if numChannels matches our format. More... | |
virtual bool | supportsCycles () const |
Default implementation returns false, return true if it makes sense for the Node to be processed in a cycle (eg. Delay). More... | |
virtual bool | supportsProcessInPlace () const |
Default implementation returns true, subclasses should return false if they must process out-of-place (summing). More... | |
virtual void | disconnectInput (const NodeRef &input) |
virtual void | disconnectOutput (const NodeRef &output) |
virtual void | configureConnections () |
void | setupProcessWithSumming () |
void | notifyConnectionsDidChange () |
bool | inputChannelsAreUnequal () const |
void | setNumChannels (size_t numChannels) |
Only Node subclasses can specify num channels directly - users specify via Format at construction time. More... | |
void | setChannelMode (ChannelMode mode) |
Only Node subclasses can specify channel mode directly - users specify via Format at construction time. More... | |
void | initializeImpl () |
void | uninitializeImpl () |
BufferDynamic * | getSummingBuffer () |
const BufferDynamic * | getSummingBuffer () const |
Protected Attributes | |
std::vector< dsp::RingBuffer > | mRingBuffers |
BufferDynamic | mIoBuffer |
SourceFileRef | mSourceFile |
size_t | mBufferFramesThreshold |
size_t | mRingBufferPaddingFactor |
std::atomic< uint64_t > | mLastUnderrun |
std::atomic< uint64_t > | mLastOverrun |
std::unique_ptr< std::thread > | mReadThread |
std::mutex | mAsyncReadMutex |
std::condition_variable | mIssueAsyncReadCond |
bool | mIsReadAsync |
bool | mAsyncReadShouldQuit |
size_t | mNumFrames |
std::atomic< size_t > | mReadPos |
std::atomic< size_t > | mLoopBegin |
std::atomic< size_t > | mLoopEnd |
std::atomic< bool > | mLoop |
std::atomic< bool > | mIsEof |
File-based SamplePlayerNode, where samples are constantly streamed from file. Suitable for large audio files.
|
stronginherited |
Used to specifiy how the corresponding channels are to be resolved between two connected Node's, based on either a Node's input (the default), it's output, or specified by user.
Enumerator | |
---|---|
SPECIFIED |
Number of channels has been specified by user or is non-settable. |
MATCHES_INPUT |
This Node matches it's channels with it's input. |
MATCHES_OUTPUT |
This Node matches it's channels with it's output. |
Constructs a FilePlayerNode with optional format.
cinder::audio::FilePlayerNode::FilePlayerNode | ( | const SourceFileRef & | sourceFile, |
bool | isReadAsync = true , |
||
const Format & | format = Node::Format() |
||
) |
Constructs a FilePlayerNode that plays sourceFile and optionally specifying isReadAsync (default = true). Can also provide an optional format.
|
virtual |
|
overridevirtual |
Stops playing the sample, returns the read position to the beginning and disables processing.
Reimplemented from cinder::audio::SamplePlayerNode.
|
overridevirtual |
Seek the read position to readPositionFrames.
Implements cinder::audio::SamplePlayerNode.
bool cinder::audio::FilePlayerNode::isReadAsync | ( | ) | const |
Returns whether reading occurs asynchronously (default is false). If true, file reading is done from an internal thread, if false it is done directly on the audio thread.
void cinder::audio::FilePlayerNode::setSourceFile | ( | const SourceFileRef & | sourceFile | ) |
const SourceFileRef& cinder::audio::FilePlayerNode::getSourceFile | ( | ) | const |
uint64_t cinder::audio::FilePlayerNode::getLastUnderrun | ( | ) |
Returns the frame of the last buffer underrun or 0 if none since the last time this method was called.
uint64_t cinder::audio::FilePlayerNode::getLastOverrun | ( | ) |
Returns the frame of the last buffer overrun or 0 if none since the last time this method was called.
|
overrideprotectedvirtual |
Called before audio buffers need to be used. There is always a valid Context at this point.
Reimplemented from cinder::audio::Node.
|
overrideprotectedvirtual |
Called once the contents of initialize are no longer relevant, i.e. connections have changed.
Reimplemented from cinder::audio::Node.
|
overrideprotectedvirtual |
Callled when this Node should enable processing. Initiated from Node::enable().
Reimplemented from cinder::audio::Node.
|
overrideprotectedvirtual |
Callled when this Node should disable processing. Initiated from Node::disable().
Reimplemented from cinder::audio::Node.
Override to perform audio processing on buffer.
Reimplemented from cinder::audio::Node.
|
protected |
|
protected |
|
protected |
|
protected |
|
virtualinherited |
Starts playing the sample from the beginning.
|
inherited |
Seek to read position readPositionSeconds,.
|
inherited |
Returns the current read position in frames.
|
inherited |
Returns the current read position in seconds.
|
inherited |
Returns the total number of seconds this SamplePlayerNode will play from beginning to end.
|
inherited |
Returns the total number of frames this SamplePlayerNode will play from beginning to end.
|
inherited |
Returns whether the SamplePlayerNode has reached EOF (end of file). If true, isEnabled() will also return false.
|
inherited |
Sets whether playing continues from beginning after the end is reached (default = false)
|
inherited |
Gets whether playing continues from beginning after the end is reached (default = false)
|
inherited |
Sets the begin loop marker in frames (default = 0, max = getNumFrames()).
|
inherited |
Sets the begin loop marker in seconds (default = 0, max = getNumSeconds()).
|
inherited |
Sets the end loop marker in frames (default = getNumFrames(), max = getNumFrames()).
|
inherited |
Sets the end loop marker in seconds (default = getNumSeconds(), max = getNumSeconds()).
|
inherited |
Returns the begin loop marker in frames.
|
inherited |
Returns the begin loop marker in seconds.
|
inherited |
Returns the end loop marker in frames.
|
inherited |
Returns the end loop marker in seconds.
|
inherited |
Enables this Node for processing. Same as setEnabled( true )
.
|
inherited |
Disables this Node for processing. Same as setEnabled( false )
.
|
inherited |
Sets whether this Node is enabled for processing or not.
|
inherited |
Returns whether this Node is enabled for processing or not.
Connects this Node to output.
Reimplemented in cinder::audio::NodeAutoPullable.
Disconnects this Node from output.
|
virtualinherited |
Disconnects this Node from all inputs and outputs.
|
virtualinherited |
Disconnects this Node from all outputs.
Reimplemented in cinder::audio::NodeAutoPullable.
|
virtualinherited |
Disconnects all of this Node's inputs.
Reimplemented in cinder::audio::ChannelRouterNode.
|
inherited |
Returns the number of inputs connected to this Node.
|
inherited |
Returns the number of outputs this Node is connected to.
|
inherited |
Returns true if input is connected to this Node as an input, false otherwise.
|
inherited |
Returns true if output is connected to this Node as an output, false otherwise.
|
inherited |
|
inherited |
Returns the number of channels this Node will process.
|
inherited |
Returns the channel mode.
|
inherited |
Returns the maximum number of channels any input has.
|
inherited |
Returns the samplerate of this Node, which is governed by the Context's OutputNode.
|
inherited |
Returns the number of frames processed in one block by this Node, which is governed by the Context's OutputNode.
|
inherited |
Returns whether this Node is automatically enabled / disabled when connected.
|
inherited |
Sets whether this Node is automatically enabled / disabled when connected.
|
inherited |
Returns whether this Node is in an initialized state and is capable of processing audio.
|
inherited |
|
inherited |
|
inherited |
Returns true if there is an unmanageable cycle betweeen sourceNode and destNode. If any Node's in the traversal returns true for supportsCycles(), this method will return false.
|
inherited |
Returns an immutable reference to the inputs container.
|
inherited |
Returns a copy of the NodeRef's referenced by the this Node as outputs. The copy is necessary because outputs are stored internally with weak_ptr's.
|
virtualinherited |
Returns a string representing the name of this Node type. Default returns a demangled, compiler-specific class name.
|
inherited |
Sets this Node's name to a user-specified string.
|
inherited |
Usually used internally by a Node subclass, returns a pointer to the internal buffer storage.
|
inherited |
Usually used internally by a Node subclass, returns a pointer to the internal buffer storage.
|
protectedvirtualinherited |
Reimplemented in cinder::audio::ChannelRouterNode.
|
protectedvirtualinherited |
Default implementation returns true if numChannels matches our format.
Reimplemented in cinder::audio::ChannelRouterNode.
|
protectedvirtualinherited |
Default implementation returns false, return true if it makes sense for the Node to be processed in a cycle (eg. Delay).
Reimplemented in cinder::audio::DelayNode.
|
protectedvirtualinherited |
Default implementation returns true, subclasses should return false if they must process out-of-place (summing).
Reimplemented in cinder::audio::ChannelRouterNode, and cinder::audio::cocoa::OutputDeviceNodeAudioUnit.
Reimplemented in cinder::audio::NodeAutoPullable, and cinder::audio::ChannelRouterNode.
|
protectedvirtualinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |