From da50c0294696c3a327db4b2a0a089d7977df488e Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Tue, 26 Dec 2017 17:00:03 +0200 Subject: Refactored to use more extensive typing --- src/emscripten_api.rs | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'src/emscripten_api.rs') 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; } } } -- cgit v1.2.3