mod autocorr;
mod levinson;
mod quantize;
mod residual;
pub use autocorr::compute_autocorrelation;
pub use levinson::{LpCoefficients, compute_best_order, compute_lp_coefficients, expected_bits};
pub use quantize::quantize_coefficients;
pub use residual::{compute_residual, compute_residual_limit, max_residual_bps};
pub const MAX_LPC_ORDER: usize = 32;
pub fn window_data(input: &[i64], window: &[f32], out: &mut [f32], data_len: usize) {
for i in 0..data_len {
out[i] = input[i] as f32 * window[i];
}
}
pub fn window_data_partial(
input: &[i64],
window: &[f32],
out: &mut [f32],
data_len: usize,
part_size: usize,
data_shift: usize,
) {
if part_size + data_shift < data_len {
let mut i = 0usize;
while i < part_size {
out[i] = input[data_shift + i] as f32 * window[i];
i += 1;
}
i = i.min(data_len - part_size - data_shift);
let mut j = data_len - part_size;
while j < data_len {
out[i] = input[data_shift + i] as f32 * window[j];
i += 1;
j += 1;
}
if i < data_len {
out[i] = 0.0f32;
}
}
}