use crate::codecs::mbe_baseline::{
synthesize_frame_ambe_plus as baseline_synthesize_ambe_plus,
synthesize_repeat_ambe_plus as baseline_synthesize_repeat, FRAME_SAMPLES,
};
use crate::mbe_params::MbeParams;
pub use crate::codecs::mbe_baseline::SynthState;
pub const SAMPLES_PER_FRAME: usize = FRAME_SAMPLES;
pub fn synthesize_frame(
params: &MbeParams,
state: &mut SynthState,
) -> [i16; SAMPLES_PER_FRAME] {
let err = state.err;
let gamma_w = state.gamma_w;
baseline_synthesize_ambe_plus(params, &err, gamma_w, state)
}
pub fn synthesize_tone(
params: &MbeParams,
state: &mut SynthState,
) -> [i16; SAMPLES_PER_FRAME] {
synthesize_frame(params, state)
}
pub fn synthesize_repeat(state: &mut SynthState) -> [i16; SAMPLES_PER_FRAME] {
baseline_synthesize_repeat(state)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::mbe_params::L_MIN;
#[test]
fn synthesize_frame_returns_expected_sample_count() {
let voiced = vec![false; L_MIN as usize];
let amps = vec![0.0f32; L_MIN as usize];
let params = MbeParams::new(
2.0 * core::f32::consts::PI / 50.0,
L_MIN,
&voiced,
&s,
)
.unwrap();
let mut state = SynthState::new();
let pcm = synthesize_frame(¶ms, &mut state);
assert_eq!(pcm.len(), SAMPLES_PER_FRAME);
}
}