Chris@8
|
1 "use strict";
|
Chris@8
|
2
|
Chris@8
|
3 var kissFFTModule = KissFFTModule({});
|
Chris@8
|
4
|
Chris@8
|
5 var kiss_fftr_alloc = kissFFTModule.cwrap(
|
Chris@8
|
6 'kiss_fftr_alloc', 'number', ['number', 'number', 'number', 'number' ]
|
Chris@8
|
7 );
|
Chris@8
|
8
|
Chris@8
|
9 var kiss_fftr = kissFFTModule.cwrap(
|
Chris@8
|
10 'kiss_fftr', 'void', ['number', 'number', 'number' ]
|
Chris@8
|
11 );
|
Chris@8
|
12
|
Chris@8
|
13 var kiss_fftri = kissFFTModule.cwrap(
|
Chris@8
|
14 'kiss_fftri', 'void', ['number', 'number', 'number' ]
|
Chris@8
|
15 );
|
Chris@8
|
16
|
Chris@8
|
17 var kiss_fftr_free = kissFFTModule.cwrap(
|
Chris@8
|
18 'kiss_fftr_free', 'void', ['number']
|
Chris@8
|
19 );
|
Chris@8
|
20
|
Chris@37
|
21 var kiss_fft_alloc = kissFFTModule.cwrap(
|
Chris@37
|
22 'kiss_fft_alloc', 'number', ['number', 'number', 'number', 'number' ]
|
Chris@37
|
23 );
|
Chris@37
|
24
|
Chris@37
|
25 var kiss_fft = kissFFTModule.cwrap(
|
Chris@37
|
26 'kiss_fft', 'void', ['number', 'number', 'number' ]
|
Chris@37
|
27 );
|
Chris@37
|
28
|
Chris@37
|
29 var kiss_fft_free = kissFFTModule.cwrap(
|
Chris@37
|
30 'kiss_fft_free', 'void', ['number']
|
Chris@37
|
31 );
|
Chris@37
|
32
|
Chris@8
|
33 function KissFFT(size) {
|
Chris@19
|
34
|
Chris@8
|
35 this.size = size;
|
Chris@37
|
36 this.fcfg = kiss_fft_alloc(size, false);
|
Chris@37
|
37 this.icfg = kiss_fft_alloc(size, true);
|
Chris@40
|
38
|
Chris@40
|
39 var samplesize = 8;
|
Chris@40
|
40 this.inptr = kissFFTModule._malloc(size*samplesize*2 + size*samplesize*2);
|
Chris@40
|
41 this.outptr = this.inptr + size*samplesize*2;
|
Chris@37
|
42
|
Chris@40
|
43 this.cin = new Float64Array(kissFFTModule.HEAPU8.buffer, this.inptr, size*2);
|
Chris@40
|
44 this.cout = new Float64Array(kissFFTModule.HEAPU8.buffer, this.outptr, size*2);
|
Chris@37
|
45
|
Chris@37
|
46 this.forward = function(cin) {
|
Chris@37
|
47 this.cin.set(cin);
|
Chris@37
|
48 kiss_fft(this.fcfg, this.inptr, this.outptr);
|
Chris@40
|
49 return new Float64Array(kissFFTModule.HEAPU8.buffer,
|
Chris@37
|
50 this.outptr, this.size * 2);
|
Chris@37
|
51 }
|
Chris@37
|
52
|
Chris@37
|
53 this.inverse = function(cin) {
|
Chris@37
|
54 this.cin.set(cpx);
|
Chris@37
|
55 kiss_fft(this.icfg, this.inptr, this.outptr);
|
Chris@40
|
56 return new Float64Array(kissFFTModule.HEAPU8.buffer,
|
Chris@37
|
57 this.outptr, this.size * 2);
|
Chris@37
|
58 }
|
Chris@37
|
59
|
Chris@37
|
60 this.dispose = function() {
|
Chris@37
|
61 kissFFTModule._free(this.inptr);
|
Chris@37
|
62 kiss_fft_free(this.fcfg);
|
Chris@37
|
63 kiss_fft_free(this.icfg);
|
Chris@37
|
64 }
|
Chris@37
|
65 }
|
Chris@37
|
66
|
Chris@37
|
67 function KissFFTR(size) {
|
Chris@37
|
68
|
Chris@37
|
69 this.size = size;
|
Chris@8
|
70 this.fcfg = kiss_fftr_alloc(size, false);
|
Chris@8
|
71 this.icfg = kiss_fftr_alloc(size, true);
|
Chris@19
|
72
|
Chris@40
|
73 var samplesize = 8;
|
Chris@40
|
74 this.rptr = kissFFTModule._malloc(size*samplesize + (size+2)*samplesize);
|
Chris@40
|
75 this.cptr = this.rptr + size*samplesize;
|
Chris@19
|
76
|
Chris@40
|
77 this.ri = new Float64Array(kissFFTModule.HEAPU8.buffer, this.rptr, size);
|
Chris@40
|
78 this.ci = new Float64Array(kissFFTModule.HEAPU8.buffer, this.cptr, size+2);
|
Chris@19
|
79
|
Chris@8
|
80 this.forward = function(real) {
|
Chris@19
|
81 this.ri.set(real);
|
Chris@19
|
82 kiss_fftr(this.fcfg, this.rptr, this.cptr);
|
Chris@40
|
83 return new Float64Array(kissFFTModule.HEAPU8.buffer,
|
Chris@21
|
84 this.cptr, this.size + 2);
|
Chris@8
|
85 }
|
Chris@19
|
86
|
Chris@8
|
87 this.inverse = function(cpx) {
|
Chris@19
|
88 this.ci.set(cpx);
|
Chris@19
|
89 kiss_fftri(this.icfg, this.cptr, this.rptr);
|
Chris@40
|
90 return new Float64Array(kissFFTModule.HEAPU8.buffer,
|
Chris@21
|
91 this.rptr, this.size);
|
Chris@8
|
92 }
|
Chris@19
|
93
|
Chris@19
|
94 this.dispose = function() {
|
Chris@19
|
95 kissFFTModule._free(this.rptr);
|
Chris@8
|
96 kiss_fftr_free(this.fcfg);
|
Chris@8
|
97 kiss_fftr_free(this.icfg);
|
Chris@8
|
98 }
|
Chris@8
|
99 }
|
Chris@8
|
100
|