use sim_kernel::{Error, Result};
pub use sim_lib_stream_core::PcmSampleFormat;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PcmSpec {
channels: usize,
sample_rate_hz: u32,
sample_format: PcmSampleFormat,
}
impl PcmSpec {
pub fn i16(channels: usize, sample_rate_hz: u32) -> Result<Self> {
if channels == 0 {
return Err(Error::Eval(
"PCM spec channel count must be greater than zero".to_owned(),
));
}
if sample_rate_hz == 0 {
return Err(Error::Eval(
"PCM spec sample rate must be greater than zero".to_owned(),
));
}
Ok(Self {
channels,
sample_rate_hz,
sample_format: PcmSampleFormat::I16,
})
}
pub fn f32(channels: usize, sample_rate_hz: u32) -> Result<Self> {
if channels == 0 {
return Err(Error::Eval(
"PCM spec channel count must be greater than zero".to_owned(),
));
}
if sample_rate_hz == 0 {
return Err(Error::Eval(
"PCM spec sample rate must be greater than zero".to_owned(),
));
}
Ok(Self {
channels,
sample_rate_hz,
sample_format: PcmSampleFormat::F32,
})
}
pub fn channels(self) -> usize {
self.channels
}
pub fn sample_rate_hz(self) -> u32 {
self.sample_rate_hz
}
pub fn sample_format(self) -> PcmSampleFormat {
self.sample_format
}
}