Mercurial > hg > js-dsp-test
view fft/kissfft/FFT.js @ 8:c6577c4b3780
KissFFT example -- but am having trouble with calling conventions when both Emscripten examples are present
author | Chris Cannam |
---|---|
date | Mon, 05 Oct 2015 13:58:09 +0100 |
parents | |
children | 26056e866c29 |
line wrap: on
line source
"use strict"; var kissFFTModule = KissFFTModule({}); var kiss_fftr_alloc = kissFFTModule.cwrap( 'kiss_fftr_alloc', 'number', ['number', 'number', 'number', 'number' ] ); var kiss_fftr = kissFFTModule.cwrap( 'kiss_fftr', 'void', ['number', 'number', 'number' ] ); var kiss_fftri = kissFFTModule.cwrap( 'kiss_fftri', 'void', ['number', 'number', 'number' ] ); var kiss_fftr_free = kissFFTModule.cwrap( 'kiss_fftr_free', 'void', ['number'] ); function KissFFT(size) { this.size = size; this.fcfg = kiss_fftr_alloc(size, false); this.icfg = kiss_fftr_alloc(size, true); this.ptr = kissFFTModule._malloc(size*4 + (size+2)*4); this.ri = new Uint8Array(kissFFTModule.HEAPU8.buffer, this.ptr, size*4); this.ci = new Uint8Array(kissFFTModule.HEAPU8.buffer, this.ptr + size*4, (size+2)*4); this.forward = function(real) { var ptr = this.ptr; var size = this.size; this.ri.set(new Uint8Array(real.buffer)); kiss_fftr(this.fcfg, ptr, ptr + this.size*4); var out = new Float32Array(kissFFTModule.HEAPU8.buffer, ptr + size*4, size+2); return out; } this.inverse = function(cpx) { var ptr = this.ptr; var size = this.size; this.ci.set(new Uint8Array(cpx.buffer)); kiss_fftri(this.icfg, ptr + size*4, ptr); var out = new Float32Array(kissFFTModule.HEAPU8.buffer, ptr, size); return out; } this.discard = function() { kissFFTModule._free(this.ptr); kiss_fftr_free(this.fcfg); kiss_fftr_free(this.icfg); } }