pub struct Decoder { /* private fields */ }Expand description
A running decode session for one audio file.
Implementations§
Source§impl Decoder
impl Decoder
Sourcepub fn open<P: AsRef<Path>>(path: P) -> Result<Self, Error>
pub fn open<P: AsRef<Path>>(path: P) -> Result<Self, Error>
Open path and start decoding. Blocks while another Decoder
exists anywhere in the process (the codec state is global).
Sourcepub fn open_stream(
reader: Box<dyn Read + Send>,
format_ext: &str,
meta: Metadata,
) -> Result<Self, Error>
pub fn open_stream( reader: Box<dyn Read + Send>, format_ext: &str, meta: Metadata, ) -> Result<Self, Error>
Open an unbounded, forward-only byte stream (e.g. internet radio) and
start decoding. Unlike Decoder::open, there is no seekable file:
reader is pulled forward on the decode thread (blocking), and the
codec is chosen from format_ext ("mp3", "ogg", "aac", …) since
there is no file to sniff. Only self-describing streamable formats
work; meta supplies whatever is known up front (e.g. codec label),
with duration left 0 (unknown).
Blocks while another Decoder exists (the codec state is global).
Sourcepub fn open_seekable(
source: Box<dyn SeekableSource>,
size: u64,
frequency: u32,
format_ext: &str,
meta: Metadata,
) -> Result<Self, Error>
pub fn open_seekable( source: Box<dyn SeekableSource>, size: u64, frequency: u32, format_ext: &str, meta: Metadata, ) -> Result<Self, Error>
Open a seekable byte source (Read + Seek, e.g. an HTTP file
buffered on demand via range requests) and start decoding. Unlike
Decoder::open there is no local file: the codec reads and seeks
through source lazily, so decoding starts as soon as the header is
available — the whole file need never be downloaded.
size is the total byte length (0 if unknown); frequency seeds the
codec’s sample rate for formats that need it up front (e.g. WAV), since
get_metadata is skipped. meta supplies the tags/duration (parse
them separately, e.g. from a prefetched header). The codec is chosen
from format_ext ("mp3", "flac", …).
Blocks while another Decoder exists (the codec state is global).
Sourcepub fn next_chunk(&mut self) -> Option<Chunk>
pub fn next_chunk(&mut self) -> Option<Chunk>
Next buffer of decoded PCM, or None at end of track (or after a
codec error — check Decoder::status).