jbonsai 0.4.1

Voice synthesis library for Text-to-Speech applications (Currently HTS Engine rewrite in Rust language).
use super::buffer::Buffer;

pub trait Generalized: Clone + Buffer {
    fn gamma(&self) -> f64;

    fn gnorm(&self) -> Self {
        let mut target = self.clone();

        if self.gamma() != 0.0 {
            let k = 1.0 + self.gamma() * self[0];
            target[0] = k.powf(1.0 / self.gamma());
            for i in 1..self.len() {
                target[i] = self[i] / k;
            }
        } else {
            target[0] = self[0].exp();
            target[1..].copy_from_slice(&self[1..]);
        };

        target
    }

    fn ignorm(&self) -> Self {
        let mut target = self.clone();

        if self.gamma() != 0.0 {
            let k = self[0].powf(self.gamma());
            target[0] = (k - 1.0) / self.gamma();
            for i in 1..self.len() {
                target[i] = self[i] * k;
            }
        } else {
            target[0] = self[0].ln();
            target[1..].copy_from_slice(&self[1..]);
        };

        target
    }
}