pub struct PlaybackTimeline {
pub samples_played: Arc<AtomicU64>,
/* private fields */
}Expand description
Shared timeline that the decode thread writes and the UI reads. The decode thread appends boundaries; the UI reads them + samples_played to derive current track and position.
Fields§
§samples_played: Arc<AtomicU64>Total interleaved samples consumed (played) by the audio engine. Written by the audio render callback, read by UI.
Implementations§
Source§impl PlaybackTimeline
impl PlaybackTimeline
pub fn new() -> Arc<Self> ⓘ
Sourcepub fn clock(&self) -> Option<RendererClock>
pub fn clock(&self) -> Option<RendererClock>
The renderer’s clock, in milliseconds of the stream.
pub fn set_clock(&self, clock: Option<RendererClock>)
Sourcepub fn track_at(&self, samples: u64) -> Option<QueueItemId>
pub fn track_at(&self, samples: u64) -> Option<QueueItemId>
The track at samples into the session.
Sourcepub fn until_end(&self) -> Option<Duration>
pub fn until_end(&self) -> Option<Duration>
How long until the playhead reaches the end of what has been written.
Sourcepub fn on_queued(&self, f: impl Fn() + Send + Sync + 'static)
pub fn on_queued(&self, f: impl Fn() + Send + Sync + 'static)
Call f whenever the decoder queues another track.
Sourcepub fn playhead(&self) -> Option<Playhead>
pub fn playhead(&self) -> Option<Playhead>
The play under the playhead and how far into it, without the clones
current_playback makes.
Sourcepub fn boundary_count(&self) -> usize
pub fn boundary_count(&self) -> usize
How many boundaries the session has: the index the next one takes.
Sourcepub fn position_in(&self, boundary: usize) -> Option<u64>
pub fn position_in(&self, boundary: usize) -> Option<u64>
How far into the play at boundary playback has got, stopping at its
end once the playhead has moved on to the next.
Sourcepub fn until_next_track(&self) -> Option<Duration>
pub fn until_next_track(&self) -> Option<Duration>
How long until the playhead reaches the track queued after the one playing, at the rate this one plays. None with nothing queued.
Sourcepub fn queued_after_playhead(&self) -> Vec<QueueItemId>
pub fn queued_after_playhead(&self) -> Vec<QueueItemId>
The tracks the decoder has queued after the one under the playhead, in order. Committed: the ring cannot be truncated, so only a new session takes them back.
Sourcepub fn writer(&self) -> TimelineWriter<'_>
pub fn writer(&self) -> TimelineWriter<'_>
The decode thread’s write access.
Sourcepub fn samples_played_counter(&self) -> Arc<AtomicU64> ⓘ
pub fn samples_played_counter(&self) -> Arc<AtomicU64> ⓘ
Get a clone of the samples_played Arc for the audio engine.
Sourcepub fn current_playback(
&self,
) -> Option<(QueueItemId, PathBuf, StreamInfo, u64)>
pub fn current_playback( &self, ) -> Option<(QueueItemId, PathBuf, StreamInfo, u64)>
Derive current track info and position from the playback head. Returns (id, path, stream_info, position_ms).
Acquires the boundaries read lock BEFORE reading samples_played so
channels/sample_rate/boundaries are all from a consistent snapshot.
Without this ordering, a track transition could update the atomics
after we read samples_played but before we read the boundary list.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for PlaybackTimeline
impl !RefUnwindSafe for PlaybackTimeline
impl !UnwindSafe for PlaybackTimeline
impl Send for PlaybackTimeline
impl Sync for PlaybackTimeline
impl Unpin for PlaybackTimeline
impl UnsafeUnpin for PlaybackTimeline
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);