summaryrefslogtreecommitdiff
path: root/src/emscripten_api.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/emscripten_api.rs')
-rw-r--r--src/emscripten_api.rs32
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;
}
}
}