diff options
author | Justin Worthe <justin@worthe-it.co.za> | 2017-12-26 17:00:03 +0200 |
---|---|---|
committer | Justin Worthe <justin@worthe-it.co.za> | 2017-12-26 17:00:03 +0200 |
commit | da50c0294696c3a327db4b2a0a089d7977df488e (patch) | |
tree | 229f0acd9016f8911932ba059256b8cd7ff0c7f1 /src/emscripten_api.rs | |
parent | a26c2acc49a03b544d54a088b660618b5de9a64c (diff) |
Refactored to use more extensive typing
Diffstat (limited to 'src/emscripten_api.rs')
-rw-r--r-- | src/emscripten_api.rs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/emscripten_api.rs b/src/emscripten_api.rs index eeede98..e296818 100644 --- a/src/emscripten_api.rs +++ b/src/emscripten_api.rs @@ -1,4 +1,6 @@ -use transforms; +use model::Model; +use signal::Signal; +use pitch::Pitch; use std::os::raw::c_char; use std::ffi::CString; @@ -6,38 +8,42 @@ use std::slice; use std::f32; #[no_mangle] -pub extern "C" fn find_fundamental_frequency(signal: *const f32, signal_length: isize, sample_rate: f32) -> f32 { +pub extern "C" fn find_fundamental_frequency(signal_ptr: *const f32, signal_length: isize, sample_rate: f32) -> f32 { let signal_slice = unsafe { - &slice::from_raw_parts(signal, signal_length as usize) + &slice::from_raw_parts(signal_ptr, signal_length as usize) }; - - transforms::find_fundamental_frequency(&signal_slice, sample_rate).unwrap_or(f32::NAN) + let signal = Signal::new(signal_slice, sample_rate); + let model = Model::from_signal(signal); + + model.pitch.map_or(f32::NAN, |p| p.hz) } #[no_mangle] pub extern "C" fn hz_to_cents_error(hz: f32) -> f32 { - transforms::hz_to_cents_error(hz) + let pitch = Pitch::new(hz); + pitch.cents_error() } #[no_mangle] pub extern "C" fn hz_to_pitch(hz: f32) -> *mut c_char { - let pitch = transforms::hz_to_pitch(hz); - CString::new(pitch) + let pitch = Pitch::new(hz); + CString::new(format!("{}", pitch)) .unwrap() .into_raw() } #[no_mangle] -pub extern "C" fn correlation(signal: *mut f32, signal_length: isize) { +pub extern "C" fn correlation(signal_ptr: *mut f32, signal_length: isize, sample_rate: f32) { let signal_slice = unsafe { - &slice::from_raw_parts(signal, signal_length as usize) + &slice::from_raw_parts(signal_ptr, signal_length as usize) }; - let correlated_signal = transforms::correlation(&signal_slice); + let signal = Signal::new(signal_slice, sample_rate); + let model = Model::from_signal(signal); unsafe { - for (i, cor) in correlated_signal.iter().enumerate() { - *signal.offset(i as isize) = *cor; + for (i, cor) in model.correlation.value.iter().enumerate() { + *signal_ptr.offset(i as isize) = *cor; } } } |