Cinder  0.9.1
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
cinder::audio::SamplePlayerNode Class Referenceabstract

#include <SamplePlayerNode.h>

Inherits cinder::audio::InputNode.

Inherited by cinder::audio::BufferPlayerNode, and cinder::audio::FilePlayerNode.

Public Types

enum  ChannelMode { ChannelMode::SPECIFIED, ChannelMode::MATCHES_INPUT, ChannelMode::MATCHES_OUTPUT }
 

Public Member Functions

virtual ~SamplePlayerNode ()
 
virtual void start ()
 
void start (double when)
 
virtual void stop ()
 
void stop (double when)
 
virtual void seek (size_t positionFrames)=0
 
void seekToTime (double positionSeconds)
 
size_t getReadPosition () const
 
double getReadPositionTime () const
 
double getNumSeconds () const
 
size_t getNumFrames () const
 
bool isEof () const
 
void setLoopEnabled (bool b=true)
 
bool isLoopEnabled () const
 
void setLoopBegin (size_t positionFrames)
 
void setLoopBeginTime (double positionSeconds)
 
void setLoopEnd (size_t positionFrames)
 
void setLoopEndTime (double positionSeconds)
 
size_t getLoopBegin () const
 
double getLoopBeginTime () const
 
size_t getLoopEnd () const
 
double getLoopEndTime () const
 
void enable ()
 
void enable (double when)
 
void disable ()
 
void disable (double when)
 
void setEnabled (bool b)
 
void setEnabled (bool b, double when)
 
bool isEnabled () const
 
virtual void connect (const NodeRef &output)
 
virtual void disconnect (const NodeRef &output)
 
virtual void disconnectAll ()
 
virtual void disconnectAllOutputs ()
 
virtual void disconnectAllInputs ()
 
size_t getNumConnectedInputs () const
 
size_t getNumConnectedOutputs () const
 
bool isConnectedToInput (const NodeRef &input) const
 
bool isConnectedToOutput (const NodeRef &output) const
 
ContextRef getContext () const
 
size_t getNumChannels () const
 
ChannelMode getChannelMode () const
 
size_t getMaxNumInputChannels () const
 
size_t getSampleRate () const
 
size_t getFramesPerBlock () const
 
bool isAutoEnabled () const
 
void setAutoEnabled (bool b=true)
 
bool isInitialized () const
 
bool getProcessesInPlace () const
 
bool canConnectToInput (const NodeRef &input)
 
bool checkCycle (const NodeRef &sourceNode, const NodeRef &destNode) const
 
const std::set< NodeRef > & getInputs () const
 
std::vector< NodeRefgetOutputs () const
 
virtual std::string getName ()
 
void setName (const std::string &name)
 
BuffergetInternalBuffer ()
 
const BuffergetInternalBuffer () const
 
void pullInputs (Buffer *inPlaceBuffer)
 

Protected Member Functions

 SamplePlayerNode (const Format &format=Format())
 
virtual void initialize ()
 
virtual void uninitialize ()
 
virtual void enableProcessing ()
 
virtual void disableProcessing ()
 
virtual void process (Buffer *buffer)
 
virtual void sumInputs ()
 
virtual bool supportsInputNumChannels (size_t numChannels) const
 
virtual bool supportsCycles () const
 
virtual bool supportsProcessInPlace () const
 
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)
 
void setChannelMode (ChannelMode mode)
 
const std::pair< size_t, size_t > & getProcessFramesRange () const
 
void initializeImpl ()
 
void uninitializeImpl ()
 
BufferDynamicgetSummingBuffer ()
 
const BufferDynamicgetSummingBuffer () const
 

Protected Attributes

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
 

Detailed Description

Base Node class for sampled audio playback. Can do operations like seek and loop.

SamplePlayerNode itself doesn't process any audio, but contains the common interface for InputNode's that do. The ChannelMode is set to Node::ChannelMode::SPECIED and it always matches the sample's number of channels (or is equal to 1 if there is no source).

See also
BufferPlayerNode, FilePlayerNode

Member Enumeration Documentation

enum cinder::audio::Node::ChannelMode
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.

Constructor & Destructor Documentation

virtual cinder::audio::SamplePlayerNode::~SamplePlayerNode ( )
virtual
cinder::audio::SamplePlayerNode::SamplePlayerNode ( const Format format = Format())
protected

Member Function Documentation

void cinder::audio::SamplePlayerNode::start ( )
virtual

Starts playing the sample from the beginning.

void cinder::audio::SamplePlayerNode::start ( double  when)

Starts playing the sample at when seconds, measured against Context::getNumProcessedSeconds().

void cinder::audio::SamplePlayerNode::stop ( )
virtual

Stops playing the sample, returns the read position to the beginning and disables processing.

Reimplemented in cinder::audio::FilePlayerNode.

void cinder::audio::SamplePlayerNode::stop ( double  when)

Stops playing the sample at when seconds, measured against Context::getNumProcessedSeconds().

virtual void cinder::audio::SamplePlayerNode::seek ( size_t  positionFrames)
pure virtual

Seek the read position to readPositionFrames.

Implemented in cinder::audio::FilePlayerNode, and cinder::audio::BufferPlayerNode.

void cinder::audio::SamplePlayerNode::seekToTime ( double  positionSeconds)

Seek to read position readPositionSeconds,.

size_t cinder::audio::SamplePlayerNode::getReadPosition ( ) const

Returns the current read position in frames.

double cinder::audio::SamplePlayerNode::getReadPositionTime ( ) const

Returns the current read position in seconds.

double cinder::audio::SamplePlayerNode::getNumSeconds ( ) const

Returns the total number of seconds this SamplePlayerNode will play from beginning to end.

size_t cinder::audio::SamplePlayerNode::getNumFrames ( ) const

Returns the total number of frames this SamplePlayerNode will play from beginning to end.

bool cinder::audio::SamplePlayerNode::isEof ( ) const

Returns whether the SamplePlayerNode has reached EOF (end of file). If true, isEnabled() will also return false.

void cinder::audio::SamplePlayerNode::setLoopEnabled ( bool  b = true)

Sets whether playing continues from beginning after the end is reached (default = false)

bool cinder::audio::SamplePlayerNode::isLoopEnabled ( ) const

Gets whether playing continues from beginning after the end is reached (default = false)

void cinder::audio::SamplePlayerNode::setLoopBegin ( size_t  positionFrames)

Sets the begin loop marker in frames (default = 0, max = getNumFrames()).

void cinder::audio::SamplePlayerNode::setLoopBeginTime ( double  positionSeconds)

Sets the begin loop marker in seconds (default = 0, max = getNumSeconds()).

void cinder::audio::SamplePlayerNode::setLoopEnd ( size_t  positionFrames)

Sets the end loop marker in frames (default = getNumFrames(), max = getNumFrames()).

void cinder::audio::SamplePlayerNode::setLoopEndTime ( double  positionSeconds)

Sets the end loop marker in seconds (default = getNumSeconds(), max = getNumSeconds()).

size_t cinder::audio::SamplePlayerNode::getLoopBegin ( ) const

Returns the begin loop marker in frames.

double cinder::audio::SamplePlayerNode::getLoopBeginTime ( ) const

Returns the begin loop marker in seconds.

size_t cinder::audio::SamplePlayerNode::getLoopEnd ( ) const

Returns the end loop marker in frames.

double cinder::audio::SamplePlayerNode::getLoopEndTime ( ) const

Returns the end loop marker in seconds.

void cinder::audio::Node::enable ( )
inherited

Enables this Node for processing. Same as setEnabled( true ).

void cinder::audio::Node::enable ( double  when)
inherited

Enables this Node for processing at when seconds, measured against Context::getNumProcessedSeconds(). Same as setEnabled( true, when ).

void cinder::audio::Node::disable ( )
inherited

Disables this Node for processing. Same as setEnabled( false ).

void cinder::audio::Node::disable ( double  when)
inherited

Disables this Node for processing at when seconds, measured against Context::getNumProcessedSeconds(). Same as setEnabled( false, when ).

void cinder::audio::Node::setEnabled ( bool  b)
inherited

Sets whether this Node is enabled for processing or not.

void cinder::audio::Node::setEnabled ( bool  b,
double  when 
)
inherited

Sets whether this Node is enabled for processing or not at when seconds, measured against Context::getNumProcessedSeconds().

bool cinder::audio::Node::isEnabled ( ) const
inherited

Returns whether this Node is enabled for processing or not.

void cinder::audio::Node::connect ( const NodeRef output)
virtualinherited

Connects this Node to output.

Reimplemented in cinder::audio::NodeAutoPullable.

void cinder::audio::Node::disconnect ( const NodeRef output)
virtualinherited

Disconnects this Node from output.

void cinder::audio::Node::disconnectAll ( )
virtualinherited

Disconnects this Node from all inputs and outputs.

void cinder::audio::Node::disconnectAllOutputs ( )
virtualinherited

Disconnects this Node from all outputs.

Reimplemented in cinder::audio::NodeAutoPullable.

void cinder::audio::Node::disconnectAllInputs ( )
virtualinherited

Disconnects all of this Node's inputs.

Reimplemented in cinder::audio::ChannelRouterNode.

size_t cinder::audio::Node::getNumConnectedInputs ( ) const
inherited

Returns the number of inputs connected to this Node.

size_t cinder::audio::Node::getNumConnectedOutputs ( ) const
inherited

Returns the number of outputs this Node is connected to.

bool cinder::audio::Node::isConnectedToInput ( const NodeRef input) const
inherited

Returns true if input is connected to this Node as an input, false otherwise.

bool cinder::audio::Node::isConnectedToOutput ( const NodeRef output) const
inherited

Returns true if output is connected to this Node as an output, false otherwise.

ContextRef cinder::audio::Node::getContext ( ) const
inherited

Returns the Context associated with this Node.

Note
Cannot be called from within a Node's constructor. Use initialize instead.
size_t cinder::audio::Node::getNumChannels ( ) const
inherited

Returns the number of channels this Node will process.

ChannelMode cinder::audio::Node::getChannelMode ( ) const
inherited

Returns the channel mode.

See also
ChannelMode.
size_t cinder::audio::Node::getMaxNumInputChannels ( ) const
inherited

Returns the maximum number of channels any input has.

size_t cinder::audio::Node::getSampleRate ( ) const
inherited

Returns the samplerate of this Node, which is governed by the Context's OutputNode.

size_t cinder::audio::Node::getFramesPerBlock ( ) const
inherited

Returns the number of frames processed in one block by this Node, which is governed by the Context's OutputNode.

bool cinder::audio::Node::isAutoEnabled ( ) const
inherited

Returns whether this Node is automatically enabled / disabled when connected.

void cinder::audio::Node::setAutoEnabled ( bool  b = true)
inherited

Sets whether this Node is automatically enabled / disabled when connected.

bool cinder::audio::Node::isInitialized ( ) const
inherited

Returns whether this Node is in an initialized state and is capable of processing audio.

bool cinder::audio::Node::getProcessesInPlace ( ) const
inherited

Returns whether this Node will process audio with an in-place Buffer.

bool cinder::audio::Node::canConnectToInput ( const NodeRef input)
inherited

Returns whether it is possible to connect to input, example reasons of failure would be this == Node, or Node is already an input.

bool cinder::audio::Node::checkCycle ( const NodeRef sourceNode,
const NodeRef destNode 
) const
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.

const std::set<NodeRef>& cinder::audio::Node::getInputs ( ) const
inherited

Returns an immutable reference to the inputs container.

vector< NodeRef > cinder::audio::Node::getOutputs ( ) const
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.

std::string cinder::audio::Node::getName ( )
virtualinherited

Returns a string representing the name of this Node type. Default returns a demangled, compiler-specific class name.

void cinder::audio::Node::setName ( const std::string &  name)
inherited

Sets this Node's name to a user-specified string.

Buffer* cinder::audio::Node::getInternalBuffer ( )
inherited

Usually used internally by a Node subclass, returns a pointer to the internal buffer storage.

const Buffer* cinder::audio::Node::getInternalBuffer ( ) const
inherited

Usually used internally by a Node subclass, returns a pointer to the internal buffer storage.

void cinder::audio::Node::pullInputs ( Buffer inPlaceBuffer)
inherited

Usually called internally by the Node, in special cases sub-classes may need to call this on other Node's.

virtual void cinder::audio::Node::initialize ( )
protectedvirtualinherited
virtual void cinder::audio::Node::uninitialize ( )
protectedvirtualinherited

Called once the contents of initialize are no longer relevant, i.e. connections have changed.

Note
Not guaranteed to be called at Node destruction.

Reimplemented in cinder::audio::FilePlayerNode, cinder::audio::cocoa::EffectAudioUnitNode, cinder::audio::cocoa::InputDeviceNodeAudioUnit, cinder::audio::cocoa::OutputDeviceNodeAudioUnit, and cinder::audio::FilterBiquadNode.

virtual void cinder::audio::Node::enableProcessing ( )
protectedvirtualinherited
virtual void cinder::audio::Node::disableProcessing ( )
protectedvirtualinherited
virtual void cinder::audio::Node::process ( Buffer buffer)
protectedvirtualinherited
void cinder::audio::Node::sumInputs ( )
protectedvirtualinherited
virtual bool cinder::audio::Node::supportsInputNumChannels ( size_t  numChannels) const
protectedvirtualinherited

Default implementation returns true if numChannels matches our format.

Reimplemented in cinder::audio::ChannelRouterNode.

virtual bool cinder::audio::Node::supportsCycles ( ) const
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.

virtual bool cinder::audio::Node::supportsProcessInPlace ( ) const
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.

void cinder::audio::Node::disconnectInput ( const NodeRef input)
protectedvirtualinherited
void cinder::audio::Node::disconnectOutput ( const NodeRef output)
protectedvirtualinherited
void cinder::audio::Node::configureConnections ( )
protectedvirtualinherited
void cinder::audio::Node::setupProcessWithSumming ( )
protectedinherited
void cinder::audio::Node::notifyConnectionsDidChange ( )
protectedinherited
bool cinder::audio::Node::inputChannelsAreUnequal ( ) const
protectedinherited
void cinder::audio::Node::setNumChannels ( size_t  numChannels)
protectedinherited

Only Node subclasses can specify num channels directly - users specify via Format at construction time.

void cinder::audio::Node::setChannelMode ( ChannelMode  mode)
protectedinherited

Only Node subclasses can specify channel mode directly - users specify via Format at construction time.

const std::pair<size_t, size_t>& cinder::audio::Node::getProcessFramesRange ( ) const
protectedinherited

Returns a pair of frame indices for Nodes that wish to support sample accurate enable and disable.

The first index is where processing should start, the second is where it should end. Should only be called on the audio thread from within a Node's process() method. Unless scheduled (with Context::schedule()), this will be [0, getFramesPerBlock()]

void cinder::audio::Node::initializeImpl ( )
protectedinherited
void cinder::audio::Node::uninitializeImpl ( )
protectedinherited
BufferDynamic* cinder::audio::Node::getSummingBuffer ( )
protectedinherited
const BufferDynamic* cinder::audio::Node::getSummingBuffer ( ) const
protectedinherited

Member Data Documentation

size_t cinder::audio::SamplePlayerNode::mNumFrames
protected
std::atomic<size_t> cinder::audio::SamplePlayerNode::mReadPos
protected
std::atomic<size_t> cinder::audio::SamplePlayerNode::mLoopBegin
protected
std::atomic<size_t> cinder::audio::SamplePlayerNode::mLoopEnd
protected
std::atomic<bool> cinder::audio::SamplePlayerNode::mLoop
protected
std::atomic<bool> cinder::audio::SamplePlayerNode::mIsEof
protected

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