babycat 0.0.14

An audio decoding and manipulation library, with bindings for C, Python, and WebAssembly.
use std::fmt::{Debug, Display};

pub trait Sample: Copy + Debug + Display + Sized + PartialOrd + PartialEq {
    fn as_f32_sample(self) -> f32;
}

#[allow(clippy::cast_precision_loss)]
const I16_DENOM: f32 = ((i16::MAX as i32) + 1_i32) as f32;

impl Sample for i16 {
    #[inline]
    fn as_f32_sample(self) -> f32 {
        f32::from(self) / I16_DENOM
    }
}

#[allow(clippy::cast_precision_loss)]
const I32_DENOM: f64 = ((i32::MAX as i64) + 1_i64) as f64;

impl Sample for i32 {
    #[inline]
    #[allow(clippy::cast_possible_truncation)]
    fn as_f32_sample(self) -> f32 {
        (f64::from(self) / I32_DENOM) as f32
    }
}

impl Sample for f32 {
    #[inline]
    fn as_f32_sample(self) -> f32 {
        self
    }
}

impl Sample for f64 {
    #[inline]
    #[allow(clippy::cast_possible_truncation)]
    fn as_f32_sample(self) -> f32 {
        self as f32
    }
}