TracktionEngine
|
An Node that plays back a wave file. More...
#include <tracktion_WaveNode.h>
Classes | |
struct | BeatConfig |
Options for a beat-based WaveNodeRealTime. More... | |
Public Types | |
enum class | ReadAhead : bool { no , yes } |
Whether or not to use a background thread to read ahead the time-stretch buffer. More... | |
enum class | SyncTempo : bool { no , yes } |
Represets whether the file should try and match Edit tempo changes. More... | |
enum class | SyncPitch : bool { no , yes } |
Represets whether the file should try and match Edit pitch changes. More... | |
Public Member Functions | |
WaveNodeRealTime (const AudioFile &, TimeRange editTime, TimeDuration offset, TimeRange loopSection, LiveClipLevel, double speedRatio, const juce::AudioChannelSet &sourceChannelsToUse, const juce::AudioChannelSet &destChannelsToFill, ProcessState &, EditItemID, bool isOfflineRender, ResamplingQuality=ResamplingQuality::lagrange, SpeedFadeDescription={}, std::optional< tempo::Sequence::Position > editTempoSequence={}, TimeStretcher::Mode=TimeStretcher::Mode::disabled, TimeStretcher::ElastiqueProOptions={}, float pitchChangeSemitones=0.0f, ReadAhead=ReadAhead::no) | |
offset is a time added to the start of the file, e.g. | |
WaveNodeRealTime (BeatConfig) | |
Constructs a beat-based WaveNodeRealTime. | |
WaveNodeRealTime (const AudioFile &, TimeStretcher::Mode, TimeStretcher::ElastiqueProOptions, BeatRange editTime, BeatDuration offset, BeatRange loopSection, LiveClipLevel, const juce::AudioChannelSet &sourceChannelsToUse, const juce::AudioChannelSet &destChannelsToFill, ProcessState &, EditItemID, bool isOfflineRender, ResamplingQuality, SpeedFadeDescription, std::optional< tempo::Sequence::Position > editTempoSequence, std::optional< WarpMap >, tempo::Sequence sourceFileTempoMap, SyncTempo, SyncPitch, std::optional< tempo::Sequence > chordPitchSequence, float pitchChangeSemitones=1.0f, ReadAhead=ReadAhead::no) | |
void | setDynamicOffsetBeats (BeatDuration) override |
Sets an offset to be applied to all times in this node, effectively shifting it forwards or backwards in time. | |
graph::NodeProperties | getNodeProperties () override |
Should return the properties of the node. | |
void | prepareToPlay (const graph::PlaybackInitialisationInfo &) override |
Called once before playback begins for each node. | |
bool | isReadyToProcess () override |
Should return true when this node is ready to be processed. | |
void | process (ProcessContext &) override |
Called when the node is to be processed. | |
![]() | |
Node ()=default | |
virtual | ~Node ()=default |
void | initialise (const PlaybackInitialisationInfo &) |
Call once after the graph has been constructed to initialise buffers etc. | |
void | prepareForNextBlock (juce::Range< int64_t > referenceSampleRange) |
Call before processing the next block, used to reset the process status. | |
void | process (choc::buffer::FrameCount numSamples, juce::Range< int64_t > referenceSampleRange) |
Call to process the node, which will in turn call the process method with the buffers to fill. | |
bool | hasProcessed () const |
Returns true if this node has processed and its outputs can be retrieved. | |
AudioAndMidiBuffer | getProcessedOutput () |
Returns the processed audio and MIDI output. | |
virtual TransformResult | transform (Node &, const std::vector< Node * > &, TransformCache &) |
Called after construction to give the node a chance to modify its topology. | |
virtual std::vector< Node * > | getDirectInputNodes () |
Should return all the inputs directly feeding in to this node. | |
virtual std::vector< Node * > | getInternalNodes () |
Can return Nodes that are internal to this Node but don't make up the main graph constructed from getDirectInputNodes(). | |
void | retain () |
Retains the buffers so they won't be deallocated after the Node has processed. | |
void | release () |
Releases the buffers allowing internal storage to be deallocated. | |
virtual size_t | getAllocatedBytes () const |
void | enablePreProcess (bool) |
![]() | |
TracktionEngineNode (ProcessState &) | |
Creates a TracktionEngineNode. | |
virtual | ~TracktionEngineNode ()=default |
Destructor. | |
int | getNumSamples () const |
Returns the number of samples in the current process block. | |
double | getSampleRate () const |
Returns the sample rate of the current process block. | |
juce::Range< int64_t > | getTimelineSampleRange () const |
Returns the timeline sample range of the current process block. | |
TimeRange | getEditTimeRange () const |
Returns the edit time range of the current process block. | |
BeatRange | getEditBeatRange () const |
Returns the edit beat range of the current process block. | |
juce::Range< int64_t > | getReferenceSampleRange () const |
Returns the reference sample range (from the DeviceManager) of the current process block. | |
tempo::Key | getKey () const |
Returns the key of the current process block. | |
double | getPlaybackSpeedRatio () const |
Returns the playback speed ratio of the current process block. | |
std::optional< TimePosition > | getTimeOfNextChange () const |
May return the time of the next tempo or time sig change. | |
std::optional< BeatPosition > | getBeatOfNextChange () const |
May return the time of the next tempo or time sig change. | |
tracktion::graph::PlayHeadState & | getPlayHeadState () |
Returns the PlayHeadState in use. | |
tracktion::graph::PlayHead & | getPlayHead () |
Returns the PlayHead in use. | |
ProcessState & | getProcessState () |
Returns the ProcessState in use. | |
void | setProcessState (ProcessState &) |
![]() | |
DynamicallyOffsettableNodeBase ()=default | |
virtual | ~DynamicallyOffsettableNodeBase ()=default |
virtual void | setDynamicOffsetTime (TimeDuration) |
Sets an offset to be applied to all times in this node, effectively shifting it forwards or backwards in time. | |
Additional Inherited Members | |
![]() | |
void * | internal = nullptr |
int | numOutputNodes = -1 |
![]() | |
virtual void | prefetchBlock (juce::Range< int64_t >) |
Called before once on all Nodes before they are processed. | |
virtual void | preProcess (choc::buffer::FrameCount, juce::Range< int64_t >) |
Called when the node is to be processed, just before process. | |
void | setOptimisations (NodeOptimisations) |
This can be called to provide some hints about allocating or playing back a Node to improve efficiency. | |
void | setBufferViewToUse (Node *sourceNode, const choc::buffer::ChannelArrayView< float > &) |
This can be called during prepareToPlay to set a BufferView to use which can improve efficiency. | |
void | setAudioOutput (Node *sourceNode, const choc::buffer::ChannelArrayView< float > &) |
This can be called during your process function to set a view to the output. | |
An Node that plays back a wave file.
|
strong |
|
strong |
Represets whether the file should try and match Edit tempo changes.
Enumerator | |
---|---|
no | |
yes |
|
strong |
Represets whether the file should try and match Edit pitch changes.
Enumerator | |
---|---|
no | |
yes |
tracktion::engine::WaveNodeRealTime::WaveNodeRealTime | ( | const AudioFile & | , |
TimeRange | editTime, | ||
TimeDuration | offset, | ||
TimeRange | loopSection, | ||
LiveClipLevel | , | ||
double | speedRatio, | ||
const juce::AudioChannelSet & | sourceChannelsToUse, | ||
const juce::AudioChannelSet & | destChannelsToFill, | ||
ProcessState & | , | ||
EditItemID | , | ||
bool | isOfflineRender, | ||
ResamplingQuality | = ResamplingQuality::lagrange , |
||
SpeedFadeDescription | = {} , |
||
std::optional< tempo::Sequence::Position > | editTempoSequence = {} , |
||
TimeStretcher::Mode | = TimeStretcher::Mode::disabled , |
||
TimeStretcher::ElastiqueProOptions | = {} , |
||
float | pitchChangeSemitones = 0.0f , |
||
ReadAhead | = ReadAhead::no |
||
) |
offset is a time added to the start of the file, e.g.
an offset of 10.0 would produce ten seconds of silence followed by the file.
tracktion::engine::WaveNodeRealTime::WaveNodeRealTime | ( | BeatConfig | ) |
Constructs a beat-based WaveNodeRealTime.
tracktion::engine::WaveNodeRealTime::WaveNodeRealTime | ( | const AudioFile & | , |
TimeStretcher::Mode | , | ||
TimeStretcher::ElastiqueProOptions | , | ||
BeatRange | editTime, | ||
BeatDuration | offset, | ||
BeatRange | loopSection, | ||
LiveClipLevel | , | ||
const juce::AudioChannelSet & | sourceChannelsToUse, | ||
const juce::AudioChannelSet & | destChannelsToFill, | ||
ProcessState & | , | ||
EditItemID | , | ||
bool | isOfflineRender, | ||
ResamplingQuality | , | ||
SpeedFadeDescription | , | ||
std::optional< tempo::Sequence::Position > | editTempoSequence, | ||
std::optional< WarpMap > | , | ||
tempo::Sequence | sourceFileTempoMap, | ||
SyncTempo | , | ||
SyncPitch | , | ||
std::optional< tempo::Sequence > | chordPitchSequence, | ||
float | pitchChangeSemitones = 1.0f , |
||
ReadAhead | = ReadAhead::no |
||
) |
sourceFileTempoMap | A tempo map describing the changes in the source file. This is relative to the start of the file, not the positioning in the Edit. This map is also used to describe a single tempo/time sig for the file with a pair of changes at position 0. With this, the file playback will match tempo changes in the Edit. |
chordPitchSequence | If this is supplied and SyncPitch == yes, rather than syncing to the Edit's pitch sequence, it will sync to this pitch sequence. |
pitchChangeSemitones | Is SyncPitch == no, then this can be used to change the pitch of the source |
|
overridevirtual |
Sets an offset to be applied to all times in this node, effectively shifting it forwards or backwards in time.
Reimplemented from tracktion::engine::DynamicallyOffsettableNodeBase.
|
overridevirtual |
Should return the properties of the node.
This should not be called until after initialise.
Implements tracktion::graph::Node.
|
overridevirtual |
Called once before playback begins for each node.
Use this to allocate buffers etc. This step can be used to modify the topology of the graph (i.e. add/remove nodes). However, if you do this, you must make sure to call initialise on them so they are fully prepared for processing.
Reimplemented from tracktion::graph::Node.
|
overridevirtual |
Should return true when this node is ready to be processed.
This is usually when its input's output buffers are ready.
Implements tracktion::graph::Node.
|
overridevirtual |
Called when the node is to be processed.
This should add in to the buffers available making sure not to change their size at all.
Implements tracktion::graph::Node.