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.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/emscripten_api.rs b/src/emscripten_api.rs
index e296818..c7f980f 100644
--- a/src/emscripten_api.rs
+++ b/src/emscripten_api.rs
@@ -3,11 +3,37 @@ use signal::Signal;
use pitch::Pitch;
use std::os::raw::c_char;
+use std::os::raw::c_void;
+use std::mem;
use std::ffi::CString;
use std::slice;
use std::f32;
#[no_mangle]
+pub extern "C" fn malloc(size: usize) -> *mut c_void {
+ let mut buf = Vec::with_capacity(size);
+ let ptr = buf.as_mut_ptr();
+ mem::forget(buf);
+ return ptr as *mut c_void;
+}
+
+#[no_mangle]
+pub extern "C" fn free(ptr: *mut c_void, cap: usize) {
+ unsafe {
+ // after it's in scope, it can go out of scope in the normal
+ // RAII cleanup.
+ let _buf = Vec::from_raw_parts(ptr, 0, cap);
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn free_str(ptr: *mut c_char) {
+ unsafe {
+ let _ = CString::from_raw(ptr);
+ }
+}
+
+#[no_mangle]
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_ptr, signal_length as usize)