use alloc::collections::VecDeque;
use fon::chan::{Ch32, Channel};
#[derive(Debug, Clone, Default)]
pub struct Room {
buffer: VecDeque<Ch32>,
}
impl Room {
#[inline(always)]
pub fn new() -> Self {
Room {
buffer: VecDeque::new(),
}
}
#[inline(always)]
pub fn add(&mut self, signal: Ch32, seconds: f32, attenuation: f32) {
let offset = (48_000.0 * seconds) as usize;
self.buffer.resize(offset + 1, Ch32::default());
self.buffer[offset] += Ch32::new(signal.to_f32() * attenuation);
}
#[inline(always)]
pub fn step(&mut self) -> Ch32 {
self.buffer.pop_front().unwrap_or_default()
}
}