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@37: var kiss_fft_alloc = kissFFTModule.cwrap( Chris@37: 'kiss_fft_alloc', 'number', ['number', 'number', 'number', 'number' ] Chris@37: ); Chris@37: Chris@37: var kiss_fft = kissFFTModule.cwrap( Chris@37: 'kiss_fft', 'void', ['number', 'number', 'number' ] Chris@37: ); Chris@37: Chris@37: var kiss_fft_free = kissFFTModule.cwrap( Chris@37: 'kiss_fft_free', 'void', ['number'] Chris@37: ); Chris@37: Chris@8: function KissFFT(size) { Chris@19: Chris@8: this.size = size; Chris@37: this.fcfg = kiss_fft_alloc(size, false); Chris@37: this.icfg = kiss_fft_alloc(size, true); Chris@40: Chris@40: var samplesize = 8; Chris@40: this.inptr = kissFFTModule._malloc(size*samplesize*2 + size*samplesize*2); Chris@40: this.outptr = this.inptr + size*samplesize*2; Chris@37: Chris@40: this.cin = new Float64Array(kissFFTModule.HEAPU8.buffer, this.inptr, size*2); Chris@40: this.cout = new Float64Array(kissFFTModule.HEAPU8.buffer, this.outptr, size*2); Chris@37: Chris@37: this.forward = function(cin) { Chris@37: this.cin.set(cin); Chris@37: kiss_fft(this.fcfg, this.inptr, this.outptr); Chris@40: return new Float64Array(kissFFTModule.HEAPU8.buffer, Chris@37: this.outptr, this.size * 2); Chris@37: } Chris@37: Chris@37: this.inverse = function(cin) { Chris@37: this.cin.set(cpx); Chris@37: kiss_fft(this.icfg, this.inptr, this.outptr); Chris@40: return new Float64Array(kissFFTModule.HEAPU8.buffer, Chris@37: this.outptr, this.size * 2); Chris@37: } Chris@37: Chris@37: this.dispose = function() { Chris@37: kissFFTModule._free(this.inptr); Chris@37: kiss_fft_free(this.fcfg); Chris@37: kiss_fft_free(this.icfg); Chris@37: } Chris@37: } Chris@37: Chris@37: function KissFFTR(size) { Chris@37: Chris@37: this.size = size; Chris@8: this.fcfg = kiss_fftr_alloc(size, false); Chris@8: this.icfg = kiss_fftr_alloc(size, true); Chris@19: Chris@40: var samplesize = 8; Chris@40: this.rptr = kissFFTModule._malloc(size*samplesize + (size+2)*samplesize); Chris@40: this.cptr = this.rptr + size*samplesize; Chris@19: Chris@40: this.ri = new Float64Array(kissFFTModule.HEAPU8.buffer, this.rptr, size); Chris@40: this.ci = new Float64Array(kissFFTModule.HEAPU8.buffer, this.cptr, size+2); Chris@19: Chris@8: this.forward = function(real) { Chris@19: this.ri.set(real); Chris@19: kiss_fftr(this.fcfg, this.rptr, this.cptr); Chris@40: return new Float64Array(kissFFTModule.HEAPU8.buffer, Chris@21: this.cptr, this.size + 2); Chris@8: } Chris@19: Chris@8: this.inverse = function(cpx) { Chris@19: this.ci.set(cpx); Chris@19: kiss_fftri(this.icfg, this.cptr, this.rptr); Chris@40: return new Float64Array(kissFFTModule.HEAPU8.buffer, Chris@21: this.rptr, this.size); Chris@8: } Chris@19: Chris@19: this.dispose = function() { Chris@19: kissFFTModule._free(this.rptr); Chris@8: kiss_fftr_free(this.fcfg); Chris@8: kiss_fftr_free(this.icfg); Chris@8: } Chris@8: } Chris@8: