mfcc 0.1.0

Calculate Mel Frequency Cepstral Coefficients from audio data
Documentation
use std::i16;
use std::f64::consts::PI;

pub struct Ringbuffer {
    inner: Vec<i16>,
    pos: usize,
    window: Vec<f64>
}

impl Ringbuffer {
    pub fn new(capacity: usize) -> Ringbuffer {
        let window = (0..capacity).map(|x| 0.54 - 0.46 * (2.0*PI* (x as f64) / capacity as f64).cos()).collect();

        Ringbuffer {
            inner: vec![0; capacity],
            pos: 0,
            window
        }
    }

    pub fn append_back(&mut self, samples: &[i16]) {
        for sample in samples {
            self.inner[self.pos] = *sample;

            self.pos = (self.pos + 1) % self.inner.len();
        }
    }

    pub fn apply_hamming(&self, out: &mut [f64]){
        let mut i = 0;
        let mut j = self.pos;

        while j != self.inner.len() {
            out[i] = self.window[i] * (self.inner[j] as f64 / i16::MAX as f64);

            i += 1;
            j += 1;
        }

        j = 0;

        while j != self.pos {
            out[i] = self.window[i] * (self.inner[j] as f64 / i16::MAX as f64);

            i += 1;
            j += 1;
        }
    }
}