Chris@7: "use strict"; Chris@7: Chris@7: var fftCross = Module.cwrap( Chris@7: 'fftCross', 'void', ['number', 'number', 'number', Chris@7: 'number', 'number', 'number' ] Chris@7: ); Chris@7: Chris@7: function FFTCross(size) { Chris@7: this.size = size; Chris@7: this.n = size * 8; Chris@7: this.ptr = Module._malloc(this.n * 4); Chris@7: this.ri = new Uint8Array(Module.HEAPU8.buffer, this.ptr, this.n); Chris@7: this.ii = new Uint8Array(Module.HEAPU8.buffer, this.ptr + this.n, this.n); Chris@7: this.transform = function(real, imag, inverse) { Chris@7: var ptr = this.ptr; Chris@7: var n = this.n; Chris@7: this.ri.set(new Uint8Array(real.buffer)); Chris@7: this.ii.set(new Uint8Array(imag.buffer)); Chris@7: fftCross(this.size, inverse, Chris@7: ptr, ptr + n, ptr + n * 2, ptr + n * 3); Chris@7: var ro = new Float64Array(Module.HEAPU8.buffer, ptr + n * 2, this.size); Chris@7: var io = new Float64Array(Module.HEAPU8.buffer, ptr + n * 3, this.size); Chris@7: return { real: ro, imag: io }; Chris@7: } Chris@7: this.transformReal = function(real, inverse) { Chris@7: var ptr = this.ptr; Chris@7: var n = this.n; Chris@7: this.ri.set(new Uint8Array(real.buffer)); Chris@7: fftCross(this.size, inverse, Chris@7: ptr, 0, ptr + n * 2, ptr + n * 3); Chris@7: var ro = new Float64Array(Module.HEAPU8.buffer, ptr + n * 2, this.size); Chris@7: var io = new Float64Array(Module.HEAPU8.buffer, ptr + n * 3, this.size); Chris@7: return { real: ro, imag: io }; Chris@7: } Chris@7: this.discard = function() { Chris@7: Module._free(this.ptr); Chris@7: } Chris@7: } Chris@7: