use crate::{math::Float, Frame, Seek, Signal};
pub struct Tanh<T>(T);
impl<T> Tanh<T> {
pub fn new(signal: T) -> Self {
Self(signal)
}
}
impl<T: Signal> Signal for Tanh<T>
where
T::Frame: Frame,
{
type Frame = T::Frame;
fn sample(&mut self, interval: f32, out: &mut [T::Frame]) {
self.0.sample(interval, out);
for x in out {
for channel in x.channels_mut() {
*channel = channel.tanh();
}
}
}
fn is_finished(&self) -> bool {
self.0.is_finished()
}
}
impl<T> Seek for Tanh<T>
where
T: Signal + Seek,
T::Frame: Frame,
{
fn seek(&mut self, seconds: f32) {
self.0.seek(seconds);
}
}