use super::{DelayTime, Input, Output, Slot};
use qwac_sys::audio;
use std::time::Duration;
#[derive(Debug)]
pub struct DelayNode {
id: i32,
}
impl Default for DelayNode {
fn default() -> Self {
Self::new(Duration::from_secs(0), Duration::from_secs(1))
}
}
impl Slot for DelayNode {
fn id(&self) -> i32 {
self.id
}
}
impl Input for DelayNode {}
impl Output for DelayNode {}
impl DelayNode {
pub fn new(delay: Duration, max_delay: Duration) -> Self {
let id = unsafe { audio::create_delay_node(delay.as_secs_f32(), max_delay.as_secs_f32()) };
Self { id }
}
pub fn delay(&mut self) -> DelayTime {
DelayTime {
id: unsafe { audio::delay_time_param(self.id()) },
}
}
}
impl Drop for DelayNode {
fn drop(&mut self) {
let id = self.id();
unsafe {
audio::drop(id);
}
}
}