summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/emscripten_api.rs24
-rw-r--r--src/transforms.rs2
-rw-r--r--web/main.js17
3 files changed, 22 insertions, 21 deletions
diff --git a/src/emscripten_api.rs b/src/emscripten_api.rs
index ec6704e..c371d86 100644
--- a/src/emscripten_api.rs
+++ b/src/emscripten_api.rs
@@ -1,5 +1,8 @@
use transforms;
+use std::os::raw::c_char;
+use std::ffi::CString;
+
#[no_mangle]
pub extern "C" fn find_fundamental_frequency(signal: *const f32, signal_length: isize, sample_rate: f32) -> f32 {
use std::slice;
@@ -11,29 +14,14 @@ pub extern "C" fn find_fundamental_frequency(signal: *const f32, signal_length:
}
#[no_mangle]
-pub extern "C" fn correlation(signal: *const f32, signal_length: isize) {
- //TODO correlate inline
-}
-
-#[no_mangle]
pub extern "C" fn hz_to_cents_error(hz: f32) -> f32 {
- //TODO implement
- 0.0
+ transforms::hz_to_cents_error(hz)
}
-use std::os::raw::c_char;
-use std::ffi::CStr;
-use std::ffi::CString;
-
#[no_mangle]
pub extern "C" fn hz_to_pitch(hz: f32) -> *mut c_char {
- //TODO implement
- CString::new("C 4")
+ let pitch = transforms::hz_to_pitch(hz);
+ CString::new(pitch)
.unwrap()
.into_raw()
}
-
-#[no_mangle]
-pub extern "C" fn align_to_rising_edge(signal: *const f32, signal_length: isize) {
- //TODO format signal nicely inline
-}
diff --git a/src/transforms.rs b/src/transforms.rs
index 55f81b6..aaae83b 100644
--- a/src/transforms.rs
+++ b/src/transforms.rs
@@ -169,7 +169,7 @@ fn hz_to_midi_number(hz: f32) -> f32 {
pub fn hz_to_cents_error(hz: f32) -> f32 {
let midi_number = hz_to_midi_number(hz);
- let cents = (midi_number % 1.0) * 100.0;
+ let cents = (midi_number - midi_number.floor()) * 100.0;
if cents >= 50.0 {
cents - 100.0
}
diff --git a/web/main.js b/web/main.js
index 2388be8..5b58f9d 100644
--- a/web/main.js
+++ b/web/main.js
@@ -20,15 +20,28 @@ function jsArrayToF32ArrayPtr(jsArray, callback) {
return result;
}
-function find_fundamental_frequency(data, samplingRate) {
+function findFundamentalFrequency(data, samplingRate) {
return jsArrayToF32ArrayPtr(data, function(dataPtr, dataLength) {
return Module._find_fundamental_frequency(dataPtr, dataLength, samplingRate);
});
}
+function hzToCentsError(hz) {
+ return Module._hz_to_cents_error(hz);
+}
+
+function hzToPitch(hz) {
+ var wrapped = Module.cwrap('hz_to_pitch', 'string', ['number']);
+ return wrapped(hz);
+}
+
function main() {
var data = [1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1, 0];
- var fundamental = find_fundamental_frequency(data, 44100.0);
+ var fundamental = findFundamentalFrequency(data, 44100.0);
+
+ var error = hzToCentsError(450.0);
+ var pitch = hzToPitch(450.0);
console.log("Javascript here. Our fundamental frequency according to Rust is " + fundamental + "Hz");
+ console.log("The other math shows a pitch of " + pitch + ", and an error of " + error);
}