Chris@8: "use strict"; Chris@8: Chris@8: var kissFFTModule = KissFFTModule({}); Chris@8: Chris@8: var kiss_fftr_alloc = kissFFTModule.cwrap( Chris@8: 'kiss_fftr_alloc', 'number', ['number', 'number', 'number', 'number' ] Chris@8: ); Chris@8: Chris@8: var kiss_fftr = kissFFTModule.cwrap( Chris@8: 'kiss_fftr', 'void', ['number', 'number', 'number' ] Chris@8: ); Chris@8: Chris@8: var kiss_fftri = kissFFTModule.cwrap( Chris@8: 'kiss_fftri', 'void', ['number', 'number', 'number' ] Chris@8: ); Chris@8: Chris@8: var kiss_fftr_free = kissFFTModule.cwrap( Chris@8: 'kiss_fftr_free', 'void', ['number'] Chris@8: ); Chris@8: Chris@8: function KissFFT(size) { Chris@8: this.size = size; Chris@8: this.fcfg = kiss_fftr_alloc(size, false); Chris@8: this.icfg = kiss_fftr_alloc(size, true); Chris@8: this.ptr = kissFFTModule._malloc(size*4 + (size+2)*4); Chris@8: this.ri = new Uint8Array(kissFFTModule.HEAPU8.buffer, this.ptr, size*4); Chris@8: this.ci = new Uint8Array(kissFFTModule.HEAPU8.buffer, this.ptr + size*4, (size+2)*4); Chris@8: this.forward = function(real) { Chris@8: var ptr = this.ptr; Chris@8: var size = this.size; Chris@8: this.ri.set(new Uint8Array(real.buffer)); Chris@8: kiss_fftr(this.fcfg, ptr, ptr + this.size*4); Chris@8: var out = new Float32Array(kissFFTModule.HEAPU8.buffer, ptr + size*4, size+2); Chris@8: return out; Chris@8: } Chris@8: this.inverse = function(cpx) { Chris@8: var ptr = this.ptr; Chris@8: var size = this.size; Chris@8: this.ci.set(new Uint8Array(cpx.buffer)); Chris@8: kiss_fftri(this.icfg, ptr + size*4, ptr); Chris@8: var out = new Float32Array(kissFFTModule.HEAPU8.buffer, ptr, size); Chris@8: return out; Chris@8: } Chris@8: this.discard = function() { Chris@8: kissFFTModule._free(this.ptr); Chris@8: kiss_fftr_free(this.fcfg); Chris@8: kiss_fftr_free(this.icfg); Chris@8: } Chris@8: } Chris@8: