summaryrefslogtreecommitdiff
path: root/src/model.rs
blob: 7fad354bee5b1cae48caef899f6ba22dcd2c671b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use transforms;

#[derive(Default)]
pub struct Model {
    pub fundamental_frequency: Option<f32>,
    pub pitch: String,
    pub error: Option<f32>,
    pub signal: Vec<f32>,
    pub correlation: Vec<f32>
}

impl Model {
    pub fn new() -> Model {
        Model::default()
    }

    pub fn from_signal(signal: &[f32], sample_rate: f32) -> Model {
        let correlation = transforms::correlation(signal);
        let fundamental = transforms::find_fundamental_frequency(signal, sample_rate);
        let pitch = fundamental.map_or(
            String::new(),
            transforms::hz_to_pitch
        );
        
        let error = fundamental.map(transforms::hz_to_cents_error);
        
        Model {
            fundamental_frequency: fundamental,
            pitch: pitch,
            error: error,
            signal: transforms::align_to_rising_edge(signal),
            correlation: correlation
        }
    }
}