@remotion/media-utils 3.0.0-lambda.437 → 3.0.0-lambda.446

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/.turbo/turbo-lint.log +11 -11
  3. package/dist/audio-buffer-to-wav.d.ts +15 -0
  4. package/dist/audio-buffer-to-wav.d.ts.map +1 -0
  5. package/dist/audio-buffer-to-wav.js +91 -0
  6. package/dist/audio-buffer-to-wav.js.map +1 -0
  7. package/dist/audio-url-helpers.d.ts +2 -0
  8. package/dist/audio-url-helpers.d.ts.map +1 -0
  9. package/dist/audio-url-helpers.js +17 -0
  10. package/dist/audio-url-helpers.js.map +1 -0
  11. package/dist/cjs/audio-buffer/audio-buffer-to-wav.d.ts +7 -0
  12. package/dist/cjs/audio-buffer/audio-buffer-to-wav.d.ts.map +1 -0
  13. package/dist/cjs/audio-buffer/audio-buffer-to-wav.js +96 -0
  14. package/dist/cjs/audio-buffer/audio-buffer-to-wav.js.map +1 -0
  15. package/dist/cjs/audio-buffer/audio-url-helpers.d.ts +2 -0
  16. package/dist/cjs/audio-buffer/audio-url-helpers.d.ts.map +1 -0
  17. package/dist/cjs/audio-buffer/audio-url-helpers.js +18 -0
  18. package/dist/cjs/audio-buffer/audio-url-helpers.js.map +1 -0
  19. package/dist/cjs/fft/complex.d.ts +5 -0
  20. package/dist/cjs/fft/complex.d.ts.map +1 -0
  21. package/dist/cjs/fft/complex.js +22 -0
  22. package/dist/cjs/fft/complex.js.map +1 -0
  23. package/dist/cjs/fft/exponent.d.ts +2 -0
  24. package/dist/cjs/fft/exponent.d.ts.map +1 -0
  25. package/dist/cjs/fft/exponent.js +14 -0
  26. package/dist/cjs/fft/exponent.js.map +1 -0
  27. package/dist/cjs/fft/fft-freq.d.ts +2 -0
  28. package/dist/cjs/fft/fft-freq.d.ts.map +1 -0
  29. package/dist/cjs/fft/fft-freq.js +14 -0
  30. package/dist/cjs/fft/fft-freq.js.map +1 -0
  31. package/dist/cjs/fft/fft.d.ts +2 -0
  32. package/dist/cjs/fft/fft.d.ts.map +1 -0
  33. package/dist/cjs/fft/fft.js +34 -0
  34. package/dist/cjs/fft/fft.js.map +1 -0
  35. package/dist/cjs/fft/get-visualization.d.ts +9 -0
  36. package/dist/cjs/fft/get-visualization.d.ts.map +1 -0
  37. package/dist/cjs/fft/get-visualization.js +32 -0
  38. package/dist/cjs/fft/get-visualization.js.map +1 -0
  39. package/dist/cjs/fft/mag.d.ts +2 -0
  40. package/dist/cjs/fft/mag.d.ts.map +1 -0
  41. package/dist/cjs/fft/mag.js +12 -0
  42. package/dist/cjs/fft/mag.js.map +1 -0
  43. package/dist/cjs/fft/max-value-cached.d.ts +3 -0
  44. package/dist/cjs/fft/max-value-cached.d.ts.map +1 -0
  45. package/dist/cjs/fft/max-value-cached.js +27 -0
  46. package/dist/cjs/fft/max-value-cached.js.map +1 -0
  47. package/dist/cjs/fft/smoothing.d.ts +2 -0
  48. package/dist/cjs/fft/smoothing.d.ts.map +1 -0
  49. package/dist/cjs/fft/smoothing.js +30 -0
  50. package/dist/cjs/fft/smoothing.js.map +1 -0
  51. package/dist/cjs/fft/to-int-16.d.ts +2 -0
  52. package/dist/cjs/fft/to-int-16.d.ts.map +1 -0
  53. package/dist/cjs/fft/to-int-16.js +6 -0
  54. package/dist/cjs/fft/to-int-16.js.map +1 -0
  55. package/dist/cjs/get-audio-data.d.ts +3 -0
  56. package/dist/cjs/get-audio-data.d.ts.map +1 -0
  57. package/dist/cjs/get-audio-data.js +31 -0
  58. package/dist/cjs/get-audio-data.js.map +1 -0
  59. package/dist/cjs/get-audio-duration.d.ts +2 -0
  60. package/dist/cjs/get-audio-duration.d.ts.map +1 -0
  61. package/dist/cjs/get-audio-duration.js +25 -0
  62. package/dist/cjs/get-audio-duration.js.map +1 -0
  63. package/dist/cjs/get-video-metadata.d.ts +3 -0
  64. package/dist/cjs/get-video-metadata.d.ts.map +1 -0
  65. package/dist/cjs/get-video-metadata.js +38 -0
  66. package/dist/cjs/get-video-metadata.js.map +1 -0
  67. package/dist/cjs/get-wave-form-samples.d.ts +2 -0
  68. package/dist/cjs/get-wave-form-samples.d.ts.map +1 -0
  69. package/dist/cjs/get-wave-form-samples.js +28 -0
  70. package/dist/cjs/get-wave-form-samples.js.map +1 -0
  71. package/dist/cjs/get-waveform-portion.d.ts +13 -0
  72. package/dist/cjs/get-waveform-portion.d.ts.map +1 -0
  73. package/dist/cjs/get-waveform-portion.js +18 -0
  74. package/dist/cjs/get-waveform-portion.js.map +1 -0
  75. package/dist/cjs/index.d.ts +10 -0
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/index.js +29 -0
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/is-remote-asset.d.ts +2 -0
  80. package/dist/cjs/is-remote-asset.d.ts.map +1 -0
  81. package/dist/cjs/is-remote-asset.js +6 -0
  82. package/dist/cjs/is-remote-asset.js.map +1 -0
  83. package/dist/cjs/types.d.ts +16 -0
  84. package/dist/cjs/types.d.ts.map +1 -0
  85. package/dist/cjs/types.js +3 -0
  86. package/dist/cjs/types.js.map +1 -0
  87. package/dist/cjs/use-audio-metadata.d.ts +3 -0
  88. package/dist/cjs/use-audio-metadata.d.ts.map +1 -0
  89. package/dist/cjs/use-audio-metadata.js +34 -0
  90. package/dist/cjs/use-audio-metadata.js.map +1 -0
  91. package/dist/cjs/visualize-audio.d.ts +12 -0
  92. package/dist/cjs/visualize-audio.d.ts.map +1 -0
  93. package/dist/cjs/visualize-audio.js +44 -0
  94. package/dist/cjs/visualize-audio.js.map +1 -0
  95. package/dist/visualize-audio-waveform.d.ts +4 -2
  96. package/dist/visualize-audio-waveform.d.ts.map +1 -1
  97. package/dist/visualize-audio-waveform.js +16 -11
  98. package/dist/visualize-audio-waveform.js.map +1 -1
  99. package/package.json +3 -3
  100. package/dist/create-smooth-svg-path.d.ts +0 -5
  101. package/dist/create-smooth-svg-path.d.ts.map +0 -1
  102. package/dist/create-smooth-svg-path.js +0 -30
  103. package/dist/create-smooth-svg-path.js.map +0 -1
  104. package/dist/smooth-path.d.ts +0 -5
  105. package/dist/smooth-path.d.ts.map +0 -1
  106. package/dist/smooth-path.js +0 -30
  107. package/dist/smooth-path.js.map +0 -1
@@ -1,5 +1,5 @@
1
- @remotion/media-utils:build: cache hit, replaying output b6f37fe503551689
2
- @remotion/media-utils:build: 
3
- @remotion/media-utils:build: > @remotion/media-utils@2.6.13 build /Users/jonathanburger/remotion/packages/media-utils
4
- @remotion/media-utils:build: > tsc -d
5
- @remotion/media-utils:build: 
1
+ @remotion/media-utils:build: cache hit, replaying output db8ba948ead4ebf7
2
+ @remotion/media-utils:build: 
3
+ @remotion/media-utils:build: > @remotion/media-utils@2.6.14 build /Users/jonathanburger/remotion/packages/media-utils
4
+ @remotion/media-utils:build: > tsc -d
5
+ @remotion/media-utils:build: 
@@ -1,11 +1,11 @@
1
- @remotion/media-utils:lint: cache hit, replaying output 6787fcea937f15cf
2
- @remotion/media-utils:lint: 
3
- @remotion/media-utils:lint: > @remotion/media-utils@2.6.12 lint /Users/jonathanburger/remotion/packages/media-utils
4
- @remotion/media-utils:lint: > eslint src --ext ts,tsx
5
- @remotion/media-utils:lint: 
6
- @remotion/media-utils:lint: 
7
- @remotion/media-utils:lint: /Users/jonathanburger/remotion/packages/media-utils/src/get-video-metadata.ts
8
- @remotion/media-utils:lint:  6:77 warning Async arrow function has no 'await' expression require-await
9
- @remotion/media-utils:lint: 
10
- @remotion/media-utils:lint: ✖ 1 problem (0 errors, 1 warning)
11
- @remotion/media-utils:lint: 
1
+ @remotion/media-utils:lint: cache hit, replaying output ba4f14bbb393991d
2
+ @remotion/media-utils:lint: 
3
+ @remotion/media-utils:lint: > @remotion/media-utils@2.6.12 lint /Users/jonathanburger/remotion/packages/media-utils
4
+ @remotion/media-utils:lint: > eslint src --ext ts,tsx
5
+ @remotion/media-utils:lint: 
6
+ @remotion/media-utils:lint: 
7
+ @remotion/media-utils:lint: /Users/jonathanburger/remotion/packages/media-utils/src/get-video-metadata.ts
8
+ @remotion/media-utils:lint:  6:77 warning Async arrow function has no 'await' expression require-await
9
+ @remotion/media-utils:lint: 
10
+ @remotion/media-utils:lint: ✖ 1 problem (0 errors, 1 warning)
11
+ @remotion/media-utils:lint: 
@@ -0,0 +1,15 @@
1
+ declare function audioBufferToWav(buffer: AudioBuffer, opt: {
2
+ float32: boolean;
3
+ }): ArrayBuffer;
4
+ declare function encodeWAV({ samples, format, sampleRate, numChannels, bitDepth, }: {
5
+ samples: Float32Array;
6
+ format: 3 | 1;
7
+ sampleRate: number;
8
+ numChannels: number;
9
+ bitDepth: 32 | 16;
10
+ }): ArrayBuffer;
11
+ declare function interleave(inputL: Float32Array, inputR: Float32Array): Float32Array;
12
+ declare function writeFloat32(output: DataView, offset: number, input: Float32Array): void;
13
+ declare function floatTo16BitPCM(output: DataView, offset: number, input: Float32Array): void;
14
+ declare function writeString(view: DataView, offset: number, string: string): void;
15
+ //# sourceMappingURL=audio-buffer-to-wav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-buffer-to-wav.d.ts","sourceRoot":"","sources":["../src/audio-buffer-to-wav.ts"],"names":[],"mappings":"AAEA,iBAAS,gBAAgB,CACxB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE;IACJ,OAAO,EAAE,OAAO,CAAC;CACjB,eAqBD;AAED,iBAAS,SAAS,CAAC,EAClB,OAAO,EACP,MAAM,EACN,UAAU,EACV,WAAW,EACX,QAAQ,GACR,EAAE;IACF,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC;CAClB,eAyCA;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,gBAc7D;AAED,iBAAS,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,QAI1E;AAED,iBAAS,eAAe,CACvB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,QAMnB;AAED,iBAAS,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAIlE"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ module.exports = audioBufferToWav;
3
+ function audioBufferToWav(buffer, opt) {
4
+ const numChannels = buffer.numberOfChannels;
5
+ const { sampleRate } = buffer;
6
+ const format = opt.float32 ? 3 : 1;
7
+ const bitDepth = format === 3 ? 32 : 16;
8
+ let result;
9
+ if (numChannels === 2) {
10
+ result = interleave(buffer.getChannelData(0), buffer.getChannelData(1));
11
+ }
12
+ else {
13
+ result = buffer.getChannelData(0);
14
+ }
15
+ return encodeWAV({
16
+ samples: result,
17
+ format,
18
+ sampleRate,
19
+ numChannels,
20
+ bitDepth,
21
+ });
22
+ }
23
+ function encodeWAV({ samples, format, sampleRate, numChannels, bitDepth, }) {
24
+ const bytesPerSample = bitDepth / 8;
25
+ const blockAlign = numChannels * bytesPerSample;
26
+ const buffer = new ArrayBuffer(44 + samples.length * bytesPerSample);
27
+ const view = new DataView(buffer);
28
+ /* RIFF identifier */
29
+ writeString(view, 0, 'RIFF');
30
+ /* RIFF chunk length */
31
+ view.setUint32(4, 36 + samples.length * bytesPerSample, true);
32
+ /* RIFF type */
33
+ writeString(view, 8, 'WAVE');
34
+ /* format chunk identifier */
35
+ writeString(view, 12, 'fmt ');
36
+ /* format chunk length */
37
+ view.setUint32(16, 16, true);
38
+ /* sample format (raw) */
39
+ view.setUint16(20, format, true);
40
+ /* channel count */
41
+ view.setUint16(22, numChannels, true);
42
+ /* sample rate */
43
+ view.setUint32(24, sampleRate, true);
44
+ /* byte rate (sample rate * block align) */
45
+ view.setUint32(28, sampleRate * blockAlign, true);
46
+ /* block align (channel count * bytes per sample) */
47
+ view.setUint16(32, blockAlign, true);
48
+ /* bits per sample */
49
+ view.setUint16(34, bitDepth, true);
50
+ /* data chunk identifier */
51
+ writeString(view, 36, 'data');
52
+ /* data chunk length */
53
+ view.setUint32(40, samples.length * bytesPerSample, true);
54
+ if (format === 1) {
55
+ // Raw PCM
56
+ floatTo16BitPCM(view, 44, samples);
57
+ }
58
+ else {
59
+ writeFloat32(view, 44, samples);
60
+ }
61
+ return buffer;
62
+ }
63
+ function interleave(inputL, inputR) {
64
+ const length = inputL.length + inputR.length;
65
+ const result = new Float32Array(length);
66
+ let index = 0;
67
+ let inputIndex = 0;
68
+ while (index < length) {
69
+ result[index++] = inputL[inputIndex];
70
+ result[index++] = inputR[inputIndex];
71
+ inputIndex++;
72
+ }
73
+ return result;
74
+ }
75
+ function writeFloat32(output, offset, input) {
76
+ for (let i = 0; i < input.length; i++, offset += 4) {
77
+ output.setFloat32(offset, input[i], true);
78
+ }
79
+ }
80
+ function floatTo16BitPCM(output, offset, input) {
81
+ for (let i = 0; i < input.length; i++, offset += 2) {
82
+ const s = Math.max(-1, Math.min(1, input[i]));
83
+ output.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);
84
+ }
85
+ }
86
+ function writeString(view, offset, string) {
87
+ for (let i = 0; i < string.length; i++) {
88
+ view.setUint8(offset + i, string.charCodeAt(i));
89
+ }
90
+ }
91
+ //# sourceMappingURL=audio-buffer-to-wav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-buffer-to-wav.js","sourceRoot":"","sources":["../src/audio-buffer-to-wav.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const uint8ToBase64: (buffer: AudioBuffer) => string;
2
+ //# sourceMappingURL=audio-url-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-url-helpers.d.ts","sourceRoot":"","sources":["../src/audio-url-helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,WAAY,WAAW,WAYhD,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uint8ToBase64 = void 0;
4
+ const uint8ToBase64 = (buffer) => {
5
+ const wavAsArrayBuffer = audioBufferToWav(buffer, {
6
+ float32: false,
7
+ });
8
+ let binary = '';
9
+ const bytes = new Uint8Array(wavAsArrayBuffer);
10
+ const len = bytes.byteLength;
11
+ for (let i = 0; i < len; i++) {
12
+ binary += String.fromCharCode(bytes[i]);
13
+ }
14
+ return window.btoa(binary);
15
+ };
16
+ exports.uint8ToBase64 = uint8ToBase64;
17
+ //# sourceMappingURL=audio-url-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-url-helpers.js","sourceRoot":"","sources":["../src/audio-url-helpers.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAE,EAAE;IACpD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,EAAE;QACjD,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IACH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC;AAZW,QAAA,aAAa,iBAYxB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Inlined from https://github.com/Jam3/audiobuffer-to-wav/commit/2272eb09bd46a05e50a6d684d908aa6f13c58f63#diff-e727e4bdf3657fd1d798edcd6b099d6e092f8573cba266154583a746bba0f346
3
+ */
4
+ export declare function audioBufferToWav(buffer: AudioBuffer, opt: {
5
+ float32: boolean;
6
+ }): ArrayBuffer;
7
+ //# sourceMappingURL=audio-buffer-to-wav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-buffer-to-wav.d.ts","sourceRoot":"","sources":["../../../src/audio-buffer/audio-buffer-to-wav.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE;IACJ,OAAO,EAAE,OAAO,CAAC;CACjB,eAqBD"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Inlined from https://github.com/Jam3/audiobuffer-to-wav/commit/2272eb09bd46a05e50a6d684d908aa6f13c58f63#diff-e727e4bdf3657fd1d798edcd6b099d6e092f8573cba266154583a746bba0f346
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.audioBufferToWav = void 0;
7
+ function audioBufferToWav(buffer, opt) {
8
+ const numChannels = buffer.numberOfChannels;
9
+ const { sampleRate } = buffer;
10
+ const format = opt.float32 ? 3 : 1;
11
+ const bitDepth = format === 3 ? 32 : 16;
12
+ let result;
13
+ if (numChannels === 2) {
14
+ result = interleave(buffer.getChannelData(0), buffer.getChannelData(1));
15
+ }
16
+ else {
17
+ result = buffer.getChannelData(0);
18
+ }
19
+ return encodeWAV({
20
+ samples: result,
21
+ format,
22
+ sampleRate,
23
+ numChannels,
24
+ bitDepth,
25
+ });
26
+ }
27
+ exports.audioBufferToWav = audioBufferToWav;
28
+ function encodeWAV({ samples, format, sampleRate, numChannels, bitDepth, }) {
29
+ const bytesPerSample = bitDepth / 8;
30
+ const blockAlign = numChannels * bytesPerSample;
31
+ const buffer = new ArrayBuffer(44 + samples.length * bytesPerSample);
32
+ const view = new DataView(buffer);
33
+ /* RIFF identifier */
34
+ writeString(view, 0, 'RIFF');
35
+ /* RIFF chunk length */
36
+ view.setUint32(4, 36 + samples.length * bytesPerSample, true);
37
+ /* RIFF type */
38
+ writeString(view, 8, 'WAVE');
39
+ /* format chunk identifier */
40
+ writeString(view, 12, 'fmt ');
41
+ /* format chunk length */
42
+ view.setUint32(16, 16, true);
43
+ /* sample format (raw) */
44
+ view.setUint16(20, format, true);
45
+ /* channel count */
46
+ view.setUint16(22, numChannels, true);
47
+ /* sample rate */
48
+ view.setUint32(24, sampleRate, true);
49
+ /* byte rate (sample rate * block align) */
50
+ view.setUint32(28, sampleRate * blockAlign, true);
51
+ /* block align (channel count * bytes per sample) */
52
+ view.setUint16(32, blockAlign, true);
53
+ /* bits per sample */
54
+ view.setUint16(34, bitDepth, true);
55
+ /* data chunk identifier */
56
+ writeString(view, 36, 'data');
57
+ /* data chunk length */
58
+ view.setUint32(40, samples.length * bytesPerSample, true);
59
+ if (format === 1) {
60
+ // Raw PCM
61
+ floatTo16BitPCM(view, 44, samples);
62
+ }
63
+ else {
64
+ writeFloat32(view, 44, samples);
65
+ }
66
+ return buffer;
67
+ }
68
+ function interleave(inputL, inputR) {
69
+ const length = inputL.length + inputR.length;
70
+ const result = new Float32Array(length);
71
+ let index = 0;
72
+ let inputIndex = 0;
73
+ while (index < length) {
74
+ result[index++] = inputL[inputIndex];
75
+ result[index++] = inputR[inputIndex];
76
+ inputIndex++;
77
+ }
78
+ return result;
79
+ }
80
+ function writeFloat32(output, offset, input) {
81
+ for (let i = 0; i < input.length; i++, offset += 4) {
82
+ output.setFloat32(offset, input[i], true);
83
+ }
84
+ }
85
+ function floatTo16BitPCM(output, offset, input) {
86
+ for (let i = 0; i < input.length; i++, offset += 2) {
87
+ const s = Math.max(-1, Math.min(1, input[i]));
88
+ output.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);
89
+ }
90
+ }
91
+ function writeString(view, offset, string) {
92
+ for (let i = 0; i < string.length; i++) {
93
+ view.setUint8(offset + i, string.charCodeAt(i));
94
+ }
95
+ }
96
+ //# sourceMappingURL=audio-buffer-to-wav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-buffer-to-wav.js","sourceRoot":"","sources":["../../../src/audio-buffer/audio-buffer-to-wav.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const audioBufferToDataUrl: (buffer: AudioBuffer) => string;
2
+ //# sourceMappingURL=audio-url-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-url-helpers.d.ts","sourceRoot":"","sources":["../../../src/audio-buffer/audio-url-helpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,WAAY,WAAW,WAYvD,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.audioBufferToDataUrl = void 0;
4
+ const audio_buffer_to_wav_1 = require("./audio-buffer-to-wav");
5
+ const audioBufferToDataUrl = (buffer) => {
6
+ const wavAsArrayBuffer = (0, audio_buffer_to_wav_1.audioBufferToWav)(buffer, {
7
+ float32: true,
8
+ });
9
+ let binary = '';
10
+ const bytes = new Uint8Array(wavAsArrayBuffer);
11
+ const len = bytes.byteLength;
12
+ for (let i = 0; i < len; i++) {
13
+ binary += String.fromCharCode(bytes[i]);
14
+ }
15
+ return 'data:audio/wav;base64,' + window.btoa(binary);
16
+ };
17
+ exports.audioBufferToDataUrl = audioBufferToDataUrl;
18
+ //# sourceMappingURL=audio-url-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-url-helpers.js","sourceRoot":"","sources":["../../../src/audio-buffer/audio-url-helpers.ts"],"names":[],"mappings":";;;AAAA,+DAAuD;AAEhD,MAAM,oBAAoB,GAAG,CAAC,MAAmB,EAAE,EAAE;IAC3D,MAAM,gBAAgB,GAAG,IAAA,sCAAgB,EAAC,MAAM,EAAE;QACjD,OAAO,EAAE,IAAI;KACb,CAAC,CAAC;IACH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;IAED,OAAO,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC,CAAC;AAZW,QAAA,oBAAoB,wBAY/B"}
@@ -0,0 +1,5 @@
1
+ export declare const complexAdd: (a: [number, number], b: [number, number]) => [number, number];
2
+ export declare const complexSubtract: (a: [number, number], b: [number, number]) => [number, number];
3
+ export declare const complexMultiply: (a: [number, number], b: [number, number]) => [number, number];
4
+ export declare const complexMagnitude: (c: [number, number]) => number;
5
+ //# sourceMappingURL=complex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complex.d.ts","sourceRoot":"","sources":["../../../src/fft/complex.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,MACnB,CAAC,MAAM,EAAE,MAAM,CAAC,KAChB,CAAC,MAAM,EAAE,MAAM,CAAC,KACjB,CAAC,MAAM,EAAE,MAAM,CAEjB,CAAC;AAEF,eAAO,MAAM,eAAe,MACxB,CAAC,MAAM,EAAE,MAAM,CAAC,KAChB,CAAC,MAAM,EAAE,MAAM,CAAC,KACjB,CAAC,MAAM,EAAE,MAAM,CAEjB,CAAC;AAEF,eAAO,MAAM,eAAe,MACxB,CAAC,MAAM,EAAE,MAAM,CAAC,KAChB,CAAC,MAAM,EAAE,MAAM,CAAC,KACjB,CAAC,MAAM,EAAE,MAAM,CAEjB,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAE/D,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.complexMagnitude = exports.complexMultiply = exports.complexSubtract = exports.complexAdd = void 0;
6
+ const complexAdd = function (a, b) {
7
+ return [a[0] + b[0], a[1] + b[1]];
8
+ };
9
+ exports.complexAdd = complexAdd;
10
+ const complexSubtract = function (a, b) {
11
+ return [a[0] - b[0], a[1] - b[1]];
12
+ };
13
+ exports.complexSubtract = complexSubtract;
14
+ const complexMultiply = function (a, b) {
15
+ return [a[0] * b[0] - a[1] * b[1], a[0] * b[1] + a[1] * b[0]];
16
+ };
17
+ exports.complexMultiply = complexMultiply;
18
+ const complexMagnitude = function (c) {
19
+ return Math.sqrt(c[0] * c[0] + c[1] * c[1]);
20
+ };
21
+ exports.complexMagnitude = complexMagnitude;
22
+ //# sourceMappingURL=complex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complex.js","sourceRoot":"","sources":["../../../src/fft/complex.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAEpC,MAAM,UAAU,GAAG,UACzB,CAAmB,EACnB,CAAmB;IAEnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AALW,QAAA,UAAU,cAKrB;AAEK,MAAM,eAAe,GAAG,UAC9B,CAAmB,EACnB,CAAmB;IAEnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,MAAM,eAAe,GAAG,UAC9B,CAAmB,EACnB,CAAmB;IAEnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,MAAM,gBAAgB,GAAG,UAAU,CAAmB;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
@@ -0,0 +1,2 @@
1
+ export declare const exponent: (k: number, N: number) => [number, number];
2
+ //# sourceMappingURL=exponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exponent.d.ts","sourceRoot":"","sources":["../../../src/fft/exponent.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,QAAQ,MAAgB,MAAM,KAAK,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAOvE,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.exponent = void 0;
6
+ const mapExponent = {};
7
+ const exponent = function (k, N) {
8
+ const x = -2 * Math.PI * (k / N);
9
+ mapExponent[N] = mapExponent[N] || {};
10
+ mapExponent[N][k] = mapExponent[N][k] || [Math.cos(x), Math.sin(x)]; // [Real, Imaginary]
11
+ return mapExponent[N][k];
12
+ };
13
+ exports.exponent = exponent;
14
+ //# sourceMappingURL=exponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exponent.js","sourceRoot":"","sources":["../../../src/fft/exponent.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAE3C,MAAM,WAAW,GAIb,EAAE,CAAC;AAEA,MAAM,QAAQ,GAAG,UAAU,CAAS,EAAE,CAAS;IACrD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;IAEzF,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC;AAPW,QAAA,QAAQ,YAOnB"}
@@ -0,0 +1,2 @@
1
+ export declare const fftFreq: (fftBins: [number, number][], sampleRate: number) => number[];
2
+ //# sourceMappingURL=fft-freq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fft-freq.d.ts","sourceRoot":"","sources":["../../../src/fft/fft-freq.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,YACV,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cACf,MAAM,aAQlB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.fftFreq = void 0;
6
+ const fftFreq = function (fftBins, sampleRate) {
7
+ const stepFreq = sampleRate / fftBins.length;
8
+ const ret = fftBins.slice(0, fftBins.length / 2);
9
+ return ret.map((__, ix) => {
10
+ return ix * stepFreq;
11
+ });
12
+ };
13
+ exports.fftFreq = fftFreq;
14
+ //# sourceMappingURL=fft-freq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fft-freq.js","sourceRoot":"","sources":["../../../src/fft/fft-freq.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAEpC,MAAM,OAAO,GAAG,UACtB,OAA2B,EAC3B,UAAkB;IAElB,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACzB,OAAO,EAAE,GAAG,QAAQ,CAAC;IACtB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,OAAO,WAUlB"}
@@ -0,0 +1,2 @@
1
+ export declare const fft: (vector: Int16Array) => [number, number][];
2
+ //# sourceMappingURL=fft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fft.d.ts","sourceRoot":"","sources":["../../../src/fft/fft.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,GAAG,WAAqB,UAAU,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EA8BjE,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.fft = void 0;
6
+ const complex_1 = require("./complex");
7
+ const exponent_1 = require("./exponent");
8
+ const fft = function (vector) {
9
+ const X = [];
10
+ const N = vector.length;
11
+ // Base case is X = x + 0i since our input is assumed to be real only.
12
+ if (N === 1) {
13
+ if (Array.isArray(vector[0])) {
14
+ // If input vector contains complex numbers
15
+ return [[vector[0][0], vector[0][1]]];
16
+ }
17
+ return [[vector[0], 0]];
18
+ }
19
+ // Recurse: all even samples
20
+ const X_evens = (0, exports.fft)(vector.filter((_, ix) => ix % 2 === 0));
21
+ // Recurse: all odd samples
22
+ const X_odds = (0, exports.fft)(vector.filter((__, ix) => ix % 2 === 1));
23
+ // Now, perform N/2 operations!
24
+ for (let k = 0; k < N / 2; k++) {
25
+ // t is a complex number!
26
+ const t = X_evens[k];
27
+ const e = (0, complex_1.complexMultiply)((0, exponent_1.exponent)(k, N), X_odds[k]);
28
+ X[k] = (0, complex_1.complexAdd)(t, e);
29
+ X[k + N / 2] = (0, complex_1.complexSubtract)(t, e);
30
+ }
31
+ return X;
32
+ };
33
+ exports.fft = fft;
34
+ //# sourceMappingURL=fft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fft.js","sourceRoot":"","sources":["../../../src/fft/fft.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAE3C,uCAAuE;AACvE,yCAAoC;AAE7B,MAAM,GAAG,GAAG,UAAU,MAAkB;IAC9C,MAAM,CAAC,GAAuB,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,sEAAsE;IACtE,IAAI,CAAC,KAAK,CAAC,EAAE;QACZ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC7B,2CAA2C;YAC3C,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC;QAED,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACxB;IAED,4BAA4B;IAC5B,MAAM,OAAO,GAAG,IAAA,WAAG,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAA,WAAG,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5D,+BAA+B;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC/B,yBAAyB;QACzB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,IAAA,yBAAe,EAAC,IAAA,mBAAQ,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,oBAAU,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAA,yBAAe,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACrC;IAED,OAAO,CAAC,CAAC;AACV,CAAC,CAAC;AA9BW,QAAA,GAAG,OA8Bd"}
@@ -0,0 +1,9 @@
1
+ export declare const getVisualization: ({ sampleSize, data, sampleRate, frame, fps, maxInt, }: {
2
+ sampleSize: number;
3
+ data: Float32Array;
4
+ frame: number;
5
+ sampleRate: number;
6
+ fps: number;
7
+ maxInt: number;
8
+ }) => number[];
9
+ //# sourceMappingURL=get-visualization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-visualization.d.ts","sourceRoot":"","sources":["../../../src/fft/get-visualization.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB;gBAQhB,MAAM;UACZ,YAAY;WACX,MAAM;gBACD,MAAM;SACb,MAAM;YACH,MAAM;MACX,MAAM,EAgCT,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.getVisualization = void 0;
6
+ const fft_1 = require("./fft");
7
+ const mag_1 = require("./mag");
8
+ const smoothing_1 = require("./smoothing");
9
+ const to_int_16_1 = require("./to-int-16");
10
+ const getVisualization = ({ sampleSize, data, sampleRate, frame, fps, maxInt, }) => {
11
+ const isPowerOfTwo = sampleSize > 0 && (sampleSize & (sampleSize - 1)) === 0;
12
+ if (!isPowerOfTwo) {
13
+ throw new TypeError(`The argument "bars" must be a power of two. For example: 64, 128. Got instead: ${sampleSize}`);
14
+ }
15
+ if (!fps) {
16
+ throw new TypeError('The argument "fps" was not provided');
17
+ }
18
+ if (data.length < sampleSize) {
19
+ throw new TypeError('Audio data is not big enough to provide ' + sampleSize + ' bars.');
20
+ }
21
+ const start = Math.floor((frame / fps) * sampleRate);
22
+ const actualStart = Math.max(0, start - sampleSize / 2);
23
+ const ints = new Int16Array({
24
+ length: sampleSize,
25
+ });
26
+ ints.set(data.subarray(actualStart, actualStart + sampleSize).map((x) => (0, to_int_16_1.toInt16)(x)));
27
+ const phasors = (0, fft_1.fft)(ints);
28
+ const magnitudes = (0, mag_1.fftMag)(phasors).map((p) => p);
29
+ return (0, smoothing_1.smoothen)(magnitudes).map((m) => m / (sampleSize / 2) / maxInt);
30
+ };
31
+ exports.getVisualization = getVisualization;
32
+ //# sourceMappingURL=get-visualization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-visualization.js","sourceRoot":"","sources":["../../../src/fft/get-visualization.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAE3C,+BAA0B;AAC1B,+BAA6B;AAC7B,2CAAqC;AACrC,2CAAoC;AAE7B,MAAM,gBAAgB,GAAG,CAAC,EAChC,UAAU,EACV,IAAI,EACJ,UAAU,EACV,KAAK,EACL,GAAG,EACH,MAAM,GAQN,EAAY,EAAE;IACd,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7E,IAAI,CAAC,YAAY,EAAE;QAClB,MAAM,IAAI,SAAS,CAClB,kFAAkF,UAAU,EAAE,CAC9F,CAAC;KACF;IAED,IAAI,CAAC,GAAG,EAAE;QACT,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;KAC3D;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE;QAC7B,MAAM,IAAI,SAAS,CAClB,0CAA0C,GAAG,UAAU,GAAG,QAAQ,CAClE,CAAC;KACF;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC3B,MAAM,EAAE,UAAU;KAClB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CACP,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mBAAO,EAAC,CAAC,CAAC,CAAC,CAC3E,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,SAAG,EAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAA,YAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjD,OAAO,IAAA,oBAAQ,EAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACvE,CAAC,CAAC;AA9CW,QAAA,gBAAgB,oBA8C3B"}
@@ -0,0 +1,2 @@
1
+ export declare const fftMag: (fftBins: [number, number][]) => number[];
2
+ //# sourceMappingURL=mag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mag.d.ts","sourceRoot":"","sources":["../../../src/fft/mag.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM,YAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAG1D,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.fftMag = void 0;
6
+ const complex_1 = require("./complex");
7
+ const fftMag = function (fftBins) {
8
+ const ret = fftBins.map((f) => (0, complex_1.complexMagnitude)(f));
9
+ return ret.slice(0, ret.length / 2);
10
+ };
11
+ exports.fftMag = fftMag;
12
+ //# sourceMappingURL=mag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mag.js","sourceRoot":"","sources":["../../../src/fft/mag.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAE3C,uCAA2C;AAEpC,MAAM,MAAM,GAAG,UAAU,OAA2B;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAgB,EAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC;AAHW,QAAA,MAAM,UAGjB"}
@@ -0,0 +1,3 @@
1
+ import { AudioData } from '..';
2
+ export declare const getMaxPossibleMagnitude: (metadata: AudioData) => number;
3
+ //# sourceMappingURL=max-value-cached.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-value-cached.d.ts","sourceRoot":"","sources":["../../../src/fft/max-value-cached.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,IAAI,CAAC;AAmB7B,eAAO,MAAM,uBAAuB,aAAc,SAAS,WAQ1D,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // Adapted from node-fft project by Joshua Wong and Ben Bryan
3
+ // https://github.com/vail-systems/node-fft
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.getMaxPossibleMagnitude = void 0;
6
+ const to_int_16_1 = require("./to-int-16");
7
+ const getMax = (array) => {
8
+ let max = 0;
9
+ for (let i = 0; i < array.length; i++) {
10
+ const val = array[i];
11
+ if (val > max) {
12
+ max = val;
13
+ }
14
+ }
15
+ return max;
16
+ };
17
+ const cache = {};
18
+ const getMaxPossibleMagnitude = (metadata) => {
19
+ if (cache[metadata.resultId]) {
20
+ return cache[metadata.resultId];
21
+ }
22
+ const result = (0, to_int_16_1.toInt16)(getMax(metadata.channelWaveforms[0]));
23
+ cache[metadata.resultId] = result;
24
+ return result;
25
+ };
26
+ exports.getMaxPossibleMagnitude = getMaxPossibleMagnitude;
27
+ //# sourceMappingURL=max-value-cached.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-value-cached.js","sourceRoot":"","sources":["../../../src/fft/max-value-cached.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAG3C,2CAAoC;AAEpC,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAE,EAAE;IACtC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,GAAG,GAAG,GAAG,EAAE;YACd,GAAG,GAAG,GAAG,CAAC;SACV;KACD;IAED,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,KAAK,GAEP,EAAE,CAAC;AAEA,MAAM,uBAAuB,GAAG,CAAC,QAAmB,EAAE,EAAE;IAC9D,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAChC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IAClC,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AARW,QAAA,uBAAuB,2BAQlC"}
@@ -0,0 +1,2 @@
1
+ export declare const smoothen: (array: number[]) => number[];
2
+ //# sourceMappingURL=smoothing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoothing.d.ts","sourceRoot":"","sources":["../../../src/fft/smoothing.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,UAAoB,MAAM,EAAE,aAwBhD,CAAC"}