diff options
author | Justin Worthe <justin@worthe-it.co.za> | 2017-10-16 21:57:54 +0200 |
---|---|---|
committer | Justin Worthe <justin@worthe-it.co.za> | 2017-10-16 21:57:54 +0200 |
commit | 669987f0ebd01963d0eb52849fd4f16640350232 (patch) | |
tree | fadeac386fde11ad1a3c61bcd1a1495513fa8ec2 /web | |
parent | 921d14d947108dc6e8f628ffe3a179e20005928e (diff) |
Added correlation function which updated array in place
Diffstat (limited to 'web')
-rw-r--r-- | web/main.js | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/web/main.js b/web/main.js index 5b58f9d..ace739f 100644 --- a/web/main.js +++ b/web/main.js @@ -13,13 +13,31 @@ function jsArrayToF32ArrayPtr(jsArray, callback) { var dataHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, nDataBytes); dataHeap.set(new Uint8Array(data.buffer)); - var result = callback(dataHeap.byteOffset, jsArray.length); + var result = callback(dataPtr, jsArray.length); Module._free(dataPtr); return result; } +function jsArrayToF32ArrayPtrMutateInPlace(jsArray, mutate) { + var data = new Float32Array(jsArray); + var nDataBytes = data.length * data.BYTES_PER_ELEMENT; + var dataPtr = Module._malloc(nDataBytes); + + var dataHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, nDataBytes); + dataHeap.set(new Uint8Array(data.buffer)); + + mutate(dataPtr, jsArray.length); + + var mutatedData = new Float32Array(Module.HEAPU8.buffer, dataPtr, jsArray.length); + var result = Array.prototype.slice.call(mutatedData); + + Module._free(dataPtr); + + return result; +} + function findFundamentalFrequency(data, samplingRate) { return jsArrayToF32ArrayPtr(data, function(dataPtr, dataLength) { return Module._find_fundamental_frequency(dataPtr, dataLength, samplingRate); @@ -35,13 +53,21 @@ function hzToPitch(hz) { return wrapped(hz); } +function correlation(data) { + return jsArrayToF32ArrayPtrMutateInPlace(data, function(dataPtr, dataLength) { + Module._correlation(dataPtr, dataLength); + }); +} + function main() { var data = [1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1, 0]; var fundamental = findFundamentalFrequency(data, 44100.0); + var correlated = correlation(data); 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); + console.log("Correlation of the array is " + correlated); } |