pub struct AudioChunk {
pts_us: Option<i64>,
index: u64,
sample_rate: u32,
channels: u16,
data: Vec<f32>,
}
impl AudioChunk {
pub(crate) fn new(
pts_us: Option<i64>,
index: u64,
sample_rate: u32,
channels: u16,
data: Vec<f32>,
) -> Self {
#[allow(clippy::manual_is_multiple_of)]
{
debug_assert!(
channels != 0 && data.len() % channels as usize == 0,
"AudioChunk buffer must hold whole interleaved frames"
);
}
Self {
pts_us,
index,
sample_rate,
channels,
data,
}
}
pub fn pts_us(&self) -> Option<i64> {
self.pts_us
}
pub fn index(&self) -> u64 {
self.index
}
pub fn sample_rate(&self) -> u32 {
self.sample_rate
}
pub fn channels(&self) -> u16 {
self.channels
}
pub fn as_slice(&self) -> &[f32] {
&self.data
}
pub fn into_vec(self) -> Vec<f32> {
self.data
}
}
impl std::fmt::Debug for AudioChunk {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("AudioChunk")
.field("pts_us", &self.pts_us)
.field("index", &self.index)
.field("sample_rate", &self.sample_rate)
.field("channels", &self.channels)
.field("samples", &self.data.len())
.finish()
}
}