summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Worthe <justin@worthe-it.co.za>2017-11-05 11:05:22 +0200
committerJustin Worthe <justin@worthe-it.co.za>2017-11-05 11:05:22 +0200
commitdc5081b6a44b576f530955050dd59d6b1bba331f (patch)
tree61829f8aceaec015ff0e8b7f9a3f5f972dbdc942 /src
parent1e37661ea154815fe4e0fa421d5be33d29e0a36d (diff)
Set up web interface to mimic GTK interface
Diffstat (limited to 'src')
-rw-r--r--src/emscripten_api.rs3
-rw-r--r--src/transforms.rs17
2 files changed, 12 insertions, 8 deletions
diff --git a/src/emscripten_api.rs b/src/emscripten_api.rs
index 0f1bcc7..eeede98 100644
--- a/src/emscripten_api.rs
+++ b/src/emscripten_api.rs
@@ -3,6 +3,7 @@ use transforms;
use std::os::raw::c_char;
use std::ffi::CString;
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 {
@@ -10,7 +11,7 @@ pub extern "C" fn find_fundamental_frequency(signal: *const f32, signal_length:
&slice::from_raw_parts(signal, signal_length as usize)
};
- transforms::find_fundamental_frequency(&signal_slice, sample_rate).unwrap_or(0.0)
+ transforms::find_fundamental_frequency(&signal_slice, sample_rate).unwrap_or(f32::NAN)
}
#[no_mangle]
diff --git a/src/transforms.rs b/src/transforms.rs
index 2565120..caa1480 100644
--- a/src/transforms.rs
+++ b/src/transforms.rs
@@ -1,3 +1,5 @@
+use std::f32;
+
fn remove_mean_offset(signal: &[f32]) -> Vec<f32> {
let mean = signal.iter().sum::<f32>()/signal.len() as f32;
signal.iter().map(|x| x - mean).collect()
@@ -168,6 +170,10 @@ fn hz_to_midi_number(hz: f32) -> f32 {
}
pub fn hz_to_cents_error(hz: f32) -> f32 {
+ if !hz.is_finite() {
+ return f32::NAN;
+ }
+
let midi_number = hz_to_midi_number(hz);
let cents = (midi_number - midi_number.floor()) * 100.0;
if cents >= 50.0 {
@@ -179,8 +185,8 @@ pub fn hz_to_cents_error(hz: f32) -> f32 {
}
pub fn hz_to_pitch(hz: f32) -> String {
- if hz <= 0.0 {
- return "< C 1".to_string();
+ if hz <= 0.0 || !hz.is_finite() {
+ return "".to_string();
}
let pitch_names = [
@@ -199,14 +205,11 @@ pub fn hz_to_pitch(hz: f32) -> String {
];
let midi_number = hz_to_midi_number(hz);
- //midi_number of 0 is C-1.
+ //midi_number of 0 is C1.
let rounded_pitch = midi_number.round() as i32;
let name = pitch_names[rounded_pitch as usize % pitch_names.len()];
- let octave = rounded_pitch / pitch_names.len() as i32 - 1; //0 is C-1
- if octave < 0 {
- return "< C 1".to_string();
- }
+ let octave = rounded_pitch / pitch_names.len() as i32 - 1; //0 is C1
format!("{: <2}{}", name, octave)
}