TracktionEngine
|
Converts a monotonically increasing reference range in to a timeline range. More...
#include <tracktion_PlayHead.h>
Public Member Functions | |
PlayHead () noexcept | |
Creates a PlayHead. | |
void | setPosition (int64_t newPosition) |
Sets the timeline position of the play head and if it is different logs a user interaction. | |
void | play (juce::Range< int64_t > rangeToPlay, bool looped) |
Plays a range in a loop. | |
void | play () |
Starts playback from the last position. | |
void | playSyncedToRange (juce::Range< int64_t > rangeToPlay) |
Takes the play position directly from the playout range. | |
void | stop () |
Stops the play head. | |
int64_t | getPosition () const |
Returns the current timeline position. | |
int64_t | getUnloopedPosition () const |
Returns the current timeline position ignoring any loop range which might have been set. | |
void | overridePosition (int64_t newPosition) |
Adjust position without triggering a 'user interaction' change. | |
bool | isPlaying () const noexcept |
Returns true is the play head is currently playing. | |
bool | isStopped () const noexcept |
Returns true is the play head is currently stopped. | |
bool | isLooping () const noexcept |
Returns true is the play head is in loop mode. | |
bool | isRollingIntoLoop () const noexcept |
Returns true is the play head is looping but playing before the loop start position. | |
juce::Range< int64_t > | getLoopRange () const noexcept |
Returns the looped playback range. | |
void | setLoopRange (bool loop, juce::Range< int64_t > loopRange, bool updatePosition=true) |
Sets a playback range and whether to loop or not. | |
void | setRollInToLoop (int64_t playbackPosition) |
Puts the play head in to roll in to loop mode. | |
void | setUserIsDragging (bool) |
Sets the user dragging which logs a user interaction and enables scrubbing mode. | |
bool | isUserDragging () const |
Returns true if the user is dragging. | |
std::chrono::system_clock::time_point | getLastUserInteractionTime () const |
Returns the time of the last user interaction, either a setPosition or setUserIsDragging call. | |
void | setScrubbingBlockLength (int64_t numSamples) |
Sets the length of the small looped blocks to play while scrubbing. | |
int64_t | getScrubbingBlockLength () const |
Returns the length of the small looped blocks to play while scrubbing. | |
int64_t | referenceSamplePositionToTimelinePosition (int64_t referenceSamplePosition) const |
Converts a reference sample position to a timeline position. | |
int64_t | referenceSamplePositionToTimelinePositionUnlooped (int64_t referenceSamplePosition) const |
Converts a reference sample position to a timeline position as if there was no looping set. | |
juce::Range< int64_t > | referenceSampleRangeToSourceRangeUnlooped (juce::Range< int64_t > sourceReferenceSampleRange) const |
Converts a reference sample range to a timeline range as if there was no looping set. | |
void | setReferenceSampleRange (juce::Range< int64_t > sampleRange) |
Sets the reference sample count, adjusting the timeline if the play head is playing. | |
juce::Range< int64_t > | getReferenceSampleRange () const |
Returns the reference sample count. | |
int64_t | getPlayoutSyncPosition () const |
Returns the playout sync position. | |
Static Public Member Functions | |
static int64_t | linearPositionToLoopPosition (int64_t position, juce::Range< int64_t > loopRange) |
Converts a linear timeline position to a position wrapped in the loop. | |
Converts a monotonically increasing reference range in to a timeline range.
This can then get converted to a real-time range using the playback sample rate. This also handles looping and scrubbing and keeps track of when the play position was last set.
|
noexcept |
Creates a PlayHead.
void tracktion::graph::PlayHead::setPosition | ( | int64_t | newPosition | ) |
Sets the timeline position of the play head and if it is different logs a user interaction.
References getPosition(), and overridePosition().
Referenced by play(), play(), setLoopRange(), and stop().
void tracktion::graph::PlayHead::play | ( | juce::Range< int64_t > | rangeToPlay, |
bool | looped | ||
) |
Plays a range in a loop.
References setPosition().
void tracktion::graph::PlayHead::play | ( | ) |
Starts playback from the last position.
References getPosition(), and setPosition().
Referenced by playSyncedToRange().
void tracktion::graph::PlayHead::playSyncedToRange | ( | juce::Range< int64_t > | rangeToPlay | ) |
Takes the play position directly from the playout range.
This is for rendering, where there will be no master stream to sync to. N.B. this disables looping.
References play().
Referenced by tracktion::engine::benchmark_utilities::prepareRenderAndDestroy().
void tracktion::graph::PlayHead::stop | ( | ) |
Stops the play head.
References getPosition(), and setPosition().
int64_t tracktion::graph::PlayHead::getPosition | ( | ) | const |
Returns the current timeline position.
References referenceSamplePositionToTimelinePosition().
Referenced by play(), setLoopRange(), setPosition(), setReferenceSampleRange(), and stop().
int64_t tracktion::graph::PlayHead::getUnloopedPosition | ( | ) | const |
Returns the current timeline position ignoring any loop range which might have been set.
References referenceSamplePositionToTimelinePositionUnlooped().
void tracktion::graph::PlayHead::overridePosition | ( | int64_t | newPosition | ) |
Adjust position without triggering a 'user interaction' change.
Use when the position change actually maintains continuity - e.g. a tempo change.
Referenced by setPosition().
|
noexcept |
Returns true is the play head is currently playing.
Referenced by tracktion::graph::PlayHeadState::update().
|
noexcept |
Returns true is the play head is currently stopped.
|
noexcept |
Returns true is the play head is in loop mode.
Referenced by tracktion::graph::PlayHeadState::update().
|
noexcept |
Returns true is the play head is looping but playing before the loop start position.
Referenced by tracktion::graph::PlayHeadState::update().
|
noexcept |
Returns the looped playback range.
Referenced by setLoopRange(), and tracktion::graph::PlayHeadState::update().
void tracktion::graph::PlayHead::setLoopRange | ( | bool | loop, |
juce::Range< int64_t > | loopRange, | ||
bool | updatePosition = true |
||
) |
Sets a playback range and whether to loop or not.
References getLoopRange(), getPosition(), and setPosition().
void tracktion::graph::PlayHead::setRollInToLoop | ( | int64_t | playbackPosition | ) |
Puts the play head in to roll in to loop mode.
If this position is before the loop start position, the play head won't be wrapped to enable count in to loop recordings etc.
void tracktion::graph::PlayHead::setUserIsDragging | ( | bool | b | ) |
Sets the user dragging which logs a user interaction and enables scrubbing mode.
bool tracktion::graph::PlayHead::isUserDragging | ( | ) | const |
Returns true if the user is dragging.
std::chrono::system_clock::time_point tracktion::graph::PlayHead::getLastUserInteractionTime | ( | ) | const |
Returns the time of the last user interaction, either a setPosition or setUserIsDragging call.
Referenced by tracktion::graph::PlayHeadState::update().
void tracktion::graph::PlayHead::setScrubbingBlockLength | ( | int64_t | numSamples | ) |
Sets the length of the small looped blocks to play while scrubbing.
E.g. when the user is dragging.
Referenced by tracktion::graph::NodePlayer::prepareToPlay().
int64_t tracktion::graph::PlayHead::getScrubbingBlockLength | ( | ) | const |
Returns the length of the small looped blocks to play while scrubbing.
Referenced by referenceSamplePositionToTimelinePosition().
int64_t tracktion::graph::PlayHead::referenceSamplePositionToTimelinePosition | ( | int64_t | referenceSamplePosition | ) | const |
Converts a reference sample position to a timeline position.
References getScrubbingBlockLength(), linearPositionToLoopPosition(), and referenceSamplePositionToTimelinePositionUnlooped().
Referenced by getPosition(), and tracktion::graph::PlayHeadState::update().
int64_t tracktion::graph::PlayHead::referenceSamplePositionToTimelinePositionUnlooped | ( | int64_t | referenceSamplePosition | ) | const |
Converts a reference sample position to a timeline position as if there was no looping set.
Referenced by getUnloopedPosition(), and referenceSamplePositionToTimelinePosition().
juce::Range< int64_t > tracktion::graph::PlayHead::referenceSampleRangeToSourceRangeUnlooped | ( | juce::Range< int64_t > | sourceReferenceSampleRange | ) | const |
Converts a reference sample range to a timeline range as if there was no looping set.
|
static |
Converts a linear timeline position to a position wrapped in the loop.
Referenced by referenceSamplePositionToTimelinePosition().
void tracktion::graph::PlayHead::setReferenceSampleRange | ( | juce::Range< int64_t > | sampleRange | ) |
Sets the reference sample count, adjusting the timeline if the play head is playing.
References getPosition().
Referenced by tracktion::engine::MultiThreadedNodePlayer::process(), and tracktion::engine::TracktionNodePlayer::process().
juce::Range< int64_t > tracktion::graph::PlayHead::getReferenceSampleRange | ( | ) | const |
Returns the reference sample count.
int64_t tracktion::graph::PlayHead::getPlayoutSyncPosition | ( | ) | const |
Returns the playout sync position.
For syncing a reference position to a timeline position.