libflo_audio/streaming/types.rs
1//! Streaming types and enums
2
3/// Streaming decoder state
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum DecoderState {
6 /// Waiting for header data
7 WaitingForHeader,
8 /// Header parsed, waiting for TOC
9 WaitingForToc,
10 /// Ready to decode frames
11 Ready,
12 /// End of stream reached
13 Finished,
14 /// Error state
15 Error,
16}
17
18/// Audio information for streaming
19#[derive(Debug, Clone)]
20pub struct StreamingAudioInfo {
21 /// Sample rate in Hz
22 pub sample_rate: u32,
23 /// Number of channels
24 pub channels: u8,
25 /// Bits per sample
26 pub bit_depth: u8,
27 /// Total samples (actual sample count)
28 pub total_samples: u64,
29 /// Is lossy encoding
30 pub is_lossy: bool,
31}
32
33impl StreamingAudioInfo {
34 /// Calculate duration in seconds
35 pub fn duration_secs(&self) -> f64 {
36 self.total_samples as f64 / self.sample_rate as f64
37 }
38
39 /// Get total samples per channel
40 pub fn total_samples_per_channel(&self) -> u64 {
41 // `total_samples` is stored as samples per channel (number of sample-frames),
42 // so return it directly.
43 self.total_samples
44 }
45}