use crate::core::{AudioFrame, AudioResult, AudioSpec};
use crate::types::{AudioBlock, ProcessContext, ProcessorInfo};
pub trait MicrophoneSimProcessor: Send {
fn name(&self) -> &'static str;
fn prepare(&mut self, spec: AudioSpec) -> AudioResult<()>;
fn process(&mut self, frame: &mut AudioFrame) -> AudioResult<()>;
fn prepare_with_context(&mut self, ctx: &ProcessContext) -> AudioResult<ProcessorInfo> {
self.prepare(ctx.spec)?;
Ok(ProcessorInfo::default())
}
fn process_block(&mut self, block: &mut AudioBlock, _ctx: &ProcessContext) -> AudioResult<()> {
let mut frame = AudioFrame {
samples: std::mem::take(&mut block.samples),
spec: block.spec,
};
self.process(&mut frame)?;
block.samples = frame.samples;
Ok(())
}
}