@remotion/media-utils 2.6.12 → 2.6.15

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 (90) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/.turbo/turbo-lint.log +11 -0
  3. package/dist/cjs/audio-buffer/audio-buffer-to-wav.d.ts +7 -0
  4. package/dist/cjs/audio-buffer/audio-buffer-to-wav.d.ts.map +1 -0
  5. package/dist/cjs/audio-buffer/audio-buffer-to-wav.js +96 -0
  6. package/dist/cjs/audio-buffer/audio-buffer-to-wav.js.map +1 -0
  7. package/dist/cjs/audio-buffer/audio-url-helpers.d.ts +2 -0
  8. package/dist/cjs/audio-buffer/audio-url-helpers.d.ts.map +1 -0
  9. package/dist/cjs/audio-buffer/audio-url-helpers.js +18 -0
  10. package/dist/cjs/audio-buffer/audio-url-helpers.js.map +1 -0
  11. package/dist/cjs/fft/complex.d.ts +5 -0
  12. package/dist/cjs/fft/complex.d.ts.map +1 -0
  13. package/dist/cjs/fft/complex.js +22 -0
  14. package/dist/cjs/fft/complex.js.map +1 -0
  15. package/dist/cjs/fft/exponent.d.ts +2 -0
  16. package/dist/cjs/fft/exponent.d.ts.map +1 -0
  17. package/dist/cjs/fft/exponent.js +14 -0
  18. package/dist/cjs/fft/exponent.js.map +1 -0
  19. package/dist/cjs/fft/fft-freq.d.ts +2 -0
  20. package/dist/cjs/fft/fft-freq.d.ts.map +1 -0
  21. package/dist/cjs/fft/fft-freq.js +14 -0
  22. package/dist/cjs/fft/fft-freq.js.map +1 -0
  23. package/dist/cjs/fft/fft.d.ts +2 -0
  24. package/dist/cjs/fft/fft.d.ts.map +1 -0
  25. package/dist/cjs/fft/fft.js +34 -0
  26. package/dist/cjs/fft/fft.js.map +1 -0
  27. package/dist/cjs/fft/get-visualization.d.ts +9 -0
  28. package/dist/cjs/fft/get-visualization.d.ts.map +1 -0
  29. package/dist/cjs/fft/get-visualization.js +32 -0
  30. package/dist/cjs/fft/get-visualization.js.map +1 -0
  31. package/dist/cjs/fft/mag.d.ts +2 -0
  32. package/dist/cjs/fft/mag.d.ts.map +1 -0
  33. package/dist/cjs/fft/mag.js +12 -0
  34. package/dist/cjs/fft/mag.js.map +1 -0
  35. package/dist/cjs/fft/max-value-cached.d.ts +3 -0
  36. package/dist/cjs/fft/max-value-cached.d.ts.map +1 -0
  37. package/dist/cjs/fft/max-value-cached.js +27 -0
  38. package/dist/cjs/fft/max-value-cached.js.map +1 -0
  39. package/dist/cjs/fft/smoothing.d.ts +2 -0
  40. package/dist/cjs/fft/smoothing.d.ts.map +1 -0
  41. package/dist/cjs/fft/smoothing.js +30 -0
  42. package/dist/cjs/fft/smoothing.js.map +1 -0
  43. package/dist/cjs/fft/to-int-16.d.ts +2 -0
  44. package/dist/cjs/fft/to-int-16.d.ts.map +1 -0
  45. package/dist/cjs/fft/to-int-16.js +6 -0
  46. package/dist/cjs/fft/to-int-16.js.map +1 -0
  47. package/dist/cjs/get-audio-data.d.ts +3 -0
  48. package/dist/cjs/get-audio-data.d.ts.map +1 -0
  49. package/dist/cjs/get-audio-data.js +31 -0
  50. package/dist/cjs/get-audio-data.js.map +1 -0
  51. package/dist/cjs/get-audio-duration.d.ts +2 -0
  52. package/dist/cjs/get-audio-duration.d.ts.map +1 -0
  53. package/dist/cjs/get-audio-duration.js +25 -0
  54. package/dist/cjs/get-audio-duration.js.map +1 -0
  55. package/dist/cjs/get-video-metadata.d.ts +3 -0
  56. package/dist/cjs/get-video-metadata.d.ts.map +1 -0
  57. package/dist/cjs/get-video-metadata.js +38 -0
  58. package/dist/cjs/get-video-metadata.js.map +1 -0
  59. package/dist/cjs/get-wave-form-samples.d.ts +2 -0
  60. package/dist/cjs/get-wave-form-samples.d.ts.map +1 -0
  61. package/dist/cjs/get-wave-form-samples.js +28 -0
  62. package/dist/cjs/get-wave-form-samples.js.map +1 -0
  63. package/dist/cjs/get-waveform-portion.d.ts +13 -0
  64. package/dist/cjs/get-waveform-portion.d.ts.map +1 -0
  65. package/dist/cjs/get-waveform-portion.js +18 -0
  66. package/dist/cjs/get-waveform-portion.js.map +1 -0
  67. package/dist/cjs/index.d.ts +10 -0
  68. package/dist/cjs/index.d.ts.map +1 -0
  69. package/dist/cjs/index.js +29 -0
  70. package/dist/cjs/index.js.map +1 -0
  71. package/dist/cjs/is-remote-asset.d.ts +2 -0
  72. package/dist/cjs/is-remote-asset.d.ts.map +1 -0
  73. package/dist/cjs/is-remote-asset.js +6 -0
  74. package/dist/cjs/is-remote-asset.js.map +1 -0
  75. package/dist/cjs/types.d.ts +16 -0
  76. package/dist/cjs/types.d.ts.map +1 -0
  77. package/dist/cjs/types.js +3 -0
  78. package/dist/cjs/types.js.map +1 -0
  79. package/dist/cjs/use-audio-metadata.d.ts +3 -0
  80. package/dist/cjs/use-audio-metadata.d.ts.map +1 -0
  81. package/dist/cjs/use-audio-metadata.js +34 -0
  82. package/dist/cjs/use-audio-metadata.js.map +1 -0
  83. package/dist/cjs/visualize-audio.d.ts +12 -0
  84. package/dist/cjs/visualize-audio.d.ts.map +1 -0
  85. package/dist/cjs/visualize-audio.js +44 -0
  86. package/dist/cjs/visualize-audio.js.map +1 -0
  87. package/dist/use-audio-metadata.d.ts.map +1 -1
  88. package/dist/use-audio-metadata.js +1 -1
  89. package/dist/use-audio-metadata.js.map +1 -1
  90. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
- @remotion/media-utils:build: cache hit, replaying output 8e7b482c76d5789a
1
+ @remotion/media-utils:build: cache hit, replaying output 95236531fe0cc935
2
2
  @remotion/media-utils:build: 
3
- @remotion/media-utils:build: > @remotion/media-utils@2.6.11 build /Users/jonathanburger/remotion/packages/media-utils
3
+ @remotion/media-utils:build: > @remotion/media-utils@2.6.14 build /Users/jonathanburger/remotion/packages/media-utils
4
4
  @remotion/media-utils:build: > tsc -d
5
5
  @remotion/media-utils:build: 
@@ -0,0 +1,11 @@
1
+ @remotion/media-utils:lint: cache hit, replaying output 5863c07baddbf386
2
+ @remotion/media-utils:lint: 
3
+ @remotion/media-utils:lint: > @remotion/media-utils@2.6.14 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,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"}
@@ -0,0 +1,30 @@
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.smoothen = void 0;
6
+ const smoothingPasses = 3;
7
+ const smoothingPoints = 3;
8
+ const smoothen = function (array) {
9
+ let lastArray = array;
10
+ const newArr = [];
11
+ for (let pass = 0; pass < smoothingPasses; pass++) {
12
+ const sidePoints = Math.floor(smoothingPoints / 2); // our window is centered so this is both nL and nR
13
+ const cn = 1 / (2 * sidePoints + 1); // constant
14
+ for (let i = 0; i < sidePoints; i++) {
15
+ newArr[i] = lastArray[i];
16
+ newArr[lastArray.length - i - 1] = lastArray[lastArray.length - i - 1];
17
+ }
18
+ for (let i = sidePoints; i < lastArray.length - sidePoints; i++) {
19
+ let sum = 0;
20
+ for (let n = -sidePoints; n <= sidePoints; n++) {
21
+ sum += cn * lastArray[i + n] + n;
22
+ }
23
+ newArr[i] = sum;
24
+ }
25
+ lastArray = newArr;
26
+ }
27
+ return newArr;
28
+ };
29
+ exports.smoothen = smoothen;
30
+ //# sourceMappingURL=smoothing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoothing.js","sourceRoot":"","sources":["../../../src/fft/smoothing.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,2CAA2C;;;AAE3C,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,eAAe,GAAG,CAAC,CAAC;AAEnB,MAAM,QAAQ,GAAG,UAAU,KAAe;IAChD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,eAAe,EAAE,IAAI,EAAE,EAAE;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,mDAAmD;QACvG,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACvE;QAED,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YAChE,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE;gBAC/C,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACjC;YAED,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SAChB;QAED,SAAS,GAAG,MAAM,CAAC;KACnB;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAxBW,QAAA,QAAQ,YAwBnB"}
@@ -0,0 +1,2 @@
1
+ export declare const toInt16: (x: number) => number;
2
+ //# sourceMappingURL=to-int-16.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-int-16.d.ts","sourceRoot":"","sources":["../../../src/fft/to-int-16.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,MAAO,MAAM,WAAsC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toInt16 = void 0;
4
+ const toInt16 = (x) => (x > 0 ? x * 0x7fff : x * 0x8000);
5
+ exports.toInt16 = toInt16;
6
+ //# sourceMappingURL=to-int-16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-int-16.js","sourceRoot":"","sources":["../../../src/fft/to-int-16.ts"],"names":[],"mappings":";;;AAAO,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAA3D,QAAA,OAAO,WAAoD"}
@@ -0,0 +1,3 @@
1
+ import { AudioData } from './types';
2
+ export declare const getAudioData: (src: string) => Promise<AudioData>;
3
+ //# sourceMappingURL=get-audio-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-audio-data.d.ts","sourceRoot":"","sources":["../../src/get-audio-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAIlC,eAAO,MAAM,YAAY,QAAe,MAAM,KAAG,QAAQ,SAAS,CA4BjE,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAudioData = void 0;
4
+ const is_remote_asset_1 = require("./is-remote-asset");
5
+ const metadataCache = {};
6
+ const getAudioData = async (src) => {
7
+ if (metadataCache[src]) {
8
+ return metadataCache[src];
9
+ }
10
+ const audioContext = new AudioContext();
11
+ const response = await fetch(src);
12
+ const arrayBuffer = await response.arrayBuffer();
13
+ const wave = await audioContext.decodeAudioData(arrayBuffer);
14
+ const channelWaveforms = new Array(wave.numberOfChannels)
15
+ .fill(true)
16
+ .map((_, channel) => {
17
+ return wave.getChannelData(channel);
18
+ });
19
+ const metadata = {
20
+ channelWaveforms,
21
+ sampleRate: audioContext.sampleRate,
22
+ durationInSeconds: wave.duration,
23
+ numberOfChannels: wave.numberOfChannels,
24
+ resultId: String(Math.random()),
25
+ isRemote: (0, is_remote_asset_1.isRemoteAsset)(src),
26
+ };
27
+ metadataCache[src] = metadata;
28
+ return metadata;
29
+ };
30
+ exports.getAudioData = getAudioData;
31
+ //# sourceMappingURL=get-audio-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-audio-data.js","sourceRoot":"","sources":["../../src/get-audio-data.ts"],"names":[],"mappings":";;;AAAA,uDAAgD;AAGhD,MAAM,aAAa,GAA+B,EAAE,CAAC;AAE9C,MAAM,YAAY,GAAG,KAAK,EAAE,GAAW,EAAsB,EAAE;IACrE,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;QACvB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;KAC1B;IAED,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEjD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAE7D,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACvD,IAAI,CAAC,IAAI,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEJ,MAAM,QAAQ,GAAc;QAC3B,gBAAgB;QAChB,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,iBAAiB,EAAE,IAAI,CAAC,QAAQ;QAChC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,QAAQ,EAAE,IAAA,+BAAa,EAAC,GAAG,CAAC;KAC5B,CAAC;IACF,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAC9B,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AA5BW,QAAA,YAAY,gBA4BvB"}
@@ -0,0 +1,2 @@
1
+ export declare const getAudioDuration: (src: string) => Promise<number>;
2
+ //# sourceMappingURL=get-audio-duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-audio-duration.d.ts","sourceRoot":"","sources":["../../src/get-audio-duration.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,QAAQ,MAAM,CAsB5D,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAudioDuration = void 0;
4
+ const getAudioDuration = (src) => {
5
+ const audio = document.createElement('audio');
6
+ audio.src = src;
7
+ return new Promise((resolve, reject) => {
8
+ const onError = () => {
9
+ reject(audio.error);
10
+ cleanup();
11
+ };
12
+ const onLoadedMetadata = () => {
13
+ resolve(audio.duration);
14
+ cleanup();
15
+ };
16
+ const cleanup = () => {
17
+ audio.removeEventListener('loadedmetadata', onLoadedMetadata);
18
+ audio.removeEventListener('error', onError);
19
+ };
20
+ audio.addEventListener('loadedmetadata', onLoadedMetadata, { once: true });
21
+ audio.addEventListener('error', onError, { once: true });
22
+ });
23
+ };
24
+ exports.getAudioDuration = getAudioDuration;
25
+ //# sourceMappingURL=get-audio-duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-audio-duration.js","sourceRoot":"","sources":["../../src/get-audio-duration.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAmB,EAAE;IAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC9D,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;QACzE,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,gBAAgB,oBAsB3B"}
@@ -0,0 +1,3 @@
1
+ import { VideoMetadata } from './types';
2
+ export declare const getVideoMetadata: (src: string) => Promise<VideoMetadata>;
3
+ //# sourceMappingURL=get-video-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-video-metadata.d.ts","sourceRoot":"","sources":["../../src/get-video-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAItC,eAAO,MAAM,gBAAgB,QAAe,MAAM,KAAG,QAAQ,aAAa,CAmCzE,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVideoMetadata = void 0;
4
+ const is_remote_asset_1 = require("./is-remote-asset");
5
+ const cache = {};
6
+ const getVideoMetadata = async (src) => {
7
+ if (cache[src]) {
8
+ return cache[src];
9
+ }
10
+ const video = document.createElement('video');
11
+ video.src = src;
12
+ return new Promise((resolve, reject) => {
13
+ const onError = () => {
14
+ reject(video.error);
15
+ cleanup();
16
+ };
17
+ const onLoadedMetadata = () => {
18
+ const metadata = {
19
+ durationInSeconds: video.duration,
20
+ width: video.videoWidth,
21
+ height: video.videoHeight,
22
+ aspectRatio: video.videoWidth / video.videoHeight,
23
+ isRemote: (0, is_remote_asset_1.isRemoteAsset)(src),
24
+ };
25
+ resolve(metadata);
26
+ cache[src] = metadata;
27
+ cleanup();
28
+ };
29
+ const cleanup = () => {
30
+ video.removeEventListener('loadedmetadata', onLoadedMetadata);
31
+ video.removeEventListener('error', onError);
32
+ };
33
+ video.addEventListener('loadedmetadata', onLoadedMetadata, { once: true });
34
+ video.addEventListener('error', onError, { once: true });
35
+ });
36
+ };
37
+ exports.getVideoMetadata = getVideoMetadata;
38
+ //# sourceMappingURL=get-video-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-video-metadata.js","sourceRoot":"","sources":["../../src/get-video-metadata.ts"],"names":[],"mappings":";;;AAAA,uDAAgD;AAGhD,MAAM,KAAK,GAAmC,EAAE,CAAC;AAE1C,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAA0B,EAAE;IAC7E,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;QACf,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;KAClB;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC7B,MAAM,QAAQ,GAAkB;gBAC/B,iBAAiB,EAAE,KAAK,CAAC,QAAQ;gBACjC,KAAK,EAAE,KAAK,CAAC,UAAU;gBACvB,MAAM,EAAE,KAAK,CAAC,WAAW;gBACzB,WAAW,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW;gBACjD,QAAQ,EAAE,IAAA,+BAAa,EAAC,GAAG,CAAC;aAC5B,CAAC;YACF,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;YAEtB,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC9D,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;QACzE,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,gBAAgB,oBAmC3B"}
@@ -0,0 +1,2 @@
1
+ export declare const getWaveformSamples: (waveform: Float32Array, sampleAmount: number) => number[];
2
+ //# sourceMappingURL=get-wave-form-samples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-wave-form-samples.d.ts","sourceRoot":"","sources":["../../src/get-wave-form-samples.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,kBAAkB,aACpB,YAAY,gBACR,MAAM,aAGpB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWaveformSamples = void 0;
4
+ const filterData = (audioBuffer, samples) => {
5
+ const blockSize = Math.floor(audioBuffer.length / samples); // the number of samples in each subdivision
6
+ if (blockSize === 0) {
7
+ return [];
8
+ }
9
+ const filteredData = [];
10
+ for (let i = 0; i < samples; i++) {
11
+ const blockStart = blockSize * i; // the location of the first sample in the block
12
+ let sum = 0;
13
+ for (let j = 0; j < blockSize; j++) {
14
+ sum += Math.abs(audioBuffer[blockStart + j]); // find the sum of all the samples in the block
15
+ }
16
+ filteredData.push(sum / blockSize); // divide the sum by the block size to get the average
17
+ }
18
+ return filteredData;
19
+ };
20
+ const normalizeData = (filteredData) => {
21
+ const multiplier = Math.max(...filteredData) ** -1;
22
+ return filteredData.map((n) => n * multiplier);
23
+ };
24
+ const getWaveformSamples = (waveform, sampleAmount) => {
25
+ return normalizeData(filterData(waveform, sampleAmount));
26
+ };
27
+ exports.getWaveformSamples = getWaveformSamples;
28
+ //# sourceMappingURL=get-wave-form-samples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-wave-form-samples.js","sourceRoot":"","sources":["../../src/get-wave-form-samples.ts"],"names":[],"mappings":";;;AAAA,MAAM,UAAU,GAAG,CAAC,WAAyB,EAAE,OAAe,EAAE,EAAE;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,4CAA4C;IACxG,IAAI,SAAS,KAAK,CAAC,EAAE;QACpB,OAAO,EAAE,CAAC;KACV;IAED,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,gDAAgD;QAClF,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YACnC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;SAC7F;QAED,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,sDAAsD;KAC1F;IAED,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,YAAsB,EAAE,EAAE;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAChD,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CACjC,QAAsB,EACtB,YAAoB,EACnB,EAAE;IACH,OAAO,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AALW,QAAA,kBAAkB,sBAK7B"}
@@ -0,0 +1,13 @@
1
+ import { AudioData } from './types';
2
+ declare type Bar = {
3
+ index: number;
4
+ amplitude: number;
5
+ };
6
+ export declare const getWaveformPortion: ({ audioData, startTimeInSeconds, durationInSeconds, numberOfSamples, }: {
7
+ audioData: AudioData;
8
+ startTimeInSeconds: number;
9
+ durationInSeconds: number;
10
+ numberOfSamples: number;
11
+ }) => Bar[];
12
+ export {};
13
+ //# sourceMappingURL=get-waveform-portion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-waveform-portion.d.ts","sourceRoot":"","sources":["../../src/get-waveform-portion.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAElC,aAAK,GAAG,GAAG;IACV,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,kBAAkB;eAMnB,SAAS;wBACA,MAAM;uBACP,MAAM;qBACR,MAAM;MACpB,GAAG,EAmBN,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWaveformPortion = void 0;
4
+ const get_wave_form_samples_1 = require("./get-wave-form-samples");
5
+ const getWaveformPortion = ({ audioData, startTimeInSeconds, durationInSeconds, numberOfSamples, }) => {
6
+ const startSample = Math.floor((startTimeInSeconds / audioData.durationInSeconds) *
7
+ audioData.channelWaveforms[0].length);
8
+ const endSample = Math.floor(((startTimeInSeconds + durationInSeconds) / audioData.durationInSeconds) *
9
+ audioData.channelWaveforms[0].length);
10
+ return (0, get_wave_form_samples_1.getWaveformSamples)(audioData.channelWaveforms[0].slice(startSample, endSample), numberOfSamples).map((w, i) => {
11
+ return {
12
+ index: i,
13
+ amplitude: w,
14
+ };
15
+ });
16
+ };
17
+ exports.getWaveformPortion = getWaveformPortion;
18
+ //# sourceMappingURL=get-waveform-portion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-waveform-portion.js","sourceRoot":"","sources":["../../src/get-waveform-portion.ts"],"names":[],"mappings":";;;AAAA,mEAA2D;AAQpD,MAAM,kBAAkB,GAAG,CAAC,EAClC,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAMf,EAAS,EAAE;IACX,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC7B,CAAC,kBAAkB,GAAG,SAAS,CAAC,iBAAiB,CAAC;QACjD,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC3B,CAAC,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,GAAG,SAAS,CAAC,iBAAiB,CAAC;QACvE,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC;IAEF,OAAO,IAAA,0CAAkB,EACxB,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,EAC3D,eAAe,CACf,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,OAAO;YACN,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC;SACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,kBAAkB,sBA6B7B"}
@@ -0,0 +1,10 @@
1
+ export { getAudioData } from './get-audio-data';
2
+ export { getAudioDuration } from './get-audio-duration';
3
+ export { getVideoMetadata } from './get-video-metadata';
4
+ export { getWaveformPortion } from './get-waveform-portion';
5
+ export * from './types';
6
+ export type { AudioData, VideoMetadata as VideoData } from './types';
7
+ export { useAudioData } from './use-audio-metadata';
8
+ export { visualizeAudio } from './visualize-audio';
9
+ export { audioBufferToDataUrl } from './audio-buffer/audio-url-helpers';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,cAAc,SAAS,CAAC;AACxB,YAAY,EAAC,SAAS,EAAE,aAAa,IAAI,SAAS,EAAC,MAAM,SAAS,CAAC;AACnE,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.audioBufferToDataUrl = exports.visualizeAudio = exports.useAudioData = exports.getWaveformPortion = exports.getVideoMetadata = exports.getAudioDuration = exports.getAudioData = void 0;
14
+ var get_audio_data_1 = require("./get-audio-data");
15
+ Object.defineProperty(exports, "getAudioData", { enumerable: true, get: function () { return get_audio_data_1.getAudioData; } });
16
+ var get_audio_duration_1 = require("./get-audio-duration");
17
+ Object.defineProperty(exports, "getAudioDuration", { enumerable: true, get: function () { return get_audio_duration_1.getAudioDuration; } });
18
+ var get_video_metadata_1 = require("./get-video-metadata");
19
+ Object.defineProperty(exports, "getVideoMetadata", { enumerable: true, get: function () { return get_video_metadata_1.getVideoMetadata; } });
20
+ var get_waveform_portion_1 = require("./get-waveform-portion");
21
+ Object.defineProperty(exports, "getWaveformPortion", { enumerable: true, get: function () { return get_waveform_portion_1.getWaveformPortion; } });
22
+ __exportStar(require("./types"), exports);
23
+ var use_audio_metadata_1 = require("./use-audio-metadata");
24
+ Object.defineProperty(exports, "useAudioData", { enumerable: true, get: function () { return use_audio_metadata_1.useAudioData; } });
25
+ var visualize_audio_1 = require("./visualize-audio");
26
+ Object.defineProperty(exports, "visualizeAudio", { enumerable: true, get: function () { return visualize_audio_1.visualizeAudio; } });
27
+ var audio_url_helpers_1 = require("./audio-buffer/audio-url-helpers");
28
+ Object.defineProperty(exports, "audioBufferToDataUrl", { enumerable: true, get: function () { return audio_url_helpers_1.audioBufferToDataUrl; } });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mDAA8C;AAAtC,8GAAA,YAAY,OAAA;AACpB,2DAAsD;AAA9C,sHAAA,gBAAgB,OAAA;AACxB,2DAAsD;AAA9C,sHAAA,gBAAgB,OAAA;AACxB,+DAA0D;AAAlD,0HAAA,kBAAkB,OAAA;AAC1B,0CAAwB;AAExB,2DAAkD;AAA1C,kHAAA,YAAY,OAAA;AACpB,qDAAiD;AAAzC,iHAAA,cAAc,OAAA;AACtB,sEAAsE;AAA9D,yHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const isRemoteAsset: (asset: string) => boolean;
2
+ //# sourceMappingURL=is-remote-asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-remote-asset.d.ts","sourceRoot":"","sources":["../../src/is-remote-asset.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,UAAW,MAAM,YAC4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRemoteAsset = void 0;
4
+ const isRemoteAsset = (asset) => !asset.startsWith(window.location.origin) && !asset.startsWith('data');
5
+ exports.isRemoteAsset = isRemoteAsset;
6
+ //# sourceMappingURL=is-remote-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-remote-asset.js","sourceRoot":"","sources":["../../src/is-remote-asset.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAD3D,QAAA,aAAa,iBAC8C"}
@@ -0,0 +1,16 @@
1
+ export declare type AudioData = {
2
+ channelWaveforms: Float32Array[];
3
+ sampleRate: number;
4
+ durationInSeconds: number;
5
+ numberOfChannels: number;
6
+ resultId: string;
7
+ isRemote: boolean;
8
+ };
9
+ export declare type VideoMetadata = {
10
+ durationInSeconds: number;
11
+ width: number;
12
+ height: number;
13
+ aspectRatio: number;
14
+ isRemote: boolean;
15
+ };
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS,GAAG;IACvB,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { AudioData } from './types';
2
+ export declare const useAudioData: (src: string) => AudioData | null;
3
+ //# sourceMappingURL=use-audio-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-audio-metadata.d.ts","sourceRoot":"","sources":["../../src/use-audio-metadata.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,SAAS,GAAG,IAgCtD,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAudioData = void 0;
4
+ const react_1 = require("react");
5
+ const remotion_1 = require("remotion");
6
+ const get_audio_data_1 = require("./get-audio-data");
7
+ const useAudioData = (src) => {
8
+ if (!src) {
9
+ throw new TypeError("useAudioMetadata requires a 'src' parameter");
10
+ }
11
+ const mountState = (0, react_1.useRef)({ isMounted: true });
12
+ (0, react_1.useEffect)(() => {
13
+ const { current } = mountState;
14
+ current.isMounted = true;
15
+ return () => {
16
+ current.isMounted = false;
17
+ };
18
+ }, []);
19
+ const [metadata, setMetadata] = (0, react_1.useState)(null);
20
+ const fetchMetadata = (0, react_1.useCallback)(async () => {
21
+ const handle = (0, remotion_1.delayRender)();
22
+ const data = await (0, get_audio_data_1.getAudioData)(src);
23
+ if (mountState.current.isMounted) {
24
+ setMetadata(data);
25
+ }
26
+ (0, remotion_1.continueRender)(handle);
27
+ }, [src]);
28
+ (0, react_1.useEffect)(() => {
29
+ fetchMetadata();
30
+ }, [fetchMetadata]);
31
+ return metadata;
32
+ };
33
+ exports.useAudioData = useAudioData;
34
+ //# sourceMappingURL=use-audio-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-audio-metadata.js","sourceRoot":"","sources":["../../src/use-audio-metadata.ts"],"names":[],"mappings":";;;AAAA,iCAA+D;AAC/D,uCAAqD;AACrD,qDAA8C;AAGvC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAoB,EAAE;IAC7D,IAAI,CAAC,GAAG,EAAE;QACT,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;KACnE;IAED,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,MAAM,EAAC,OAAO,EAAC,GAAG,UAAU,CAAC;QAC7B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE;YACX,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAmB,IAAI,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAA,sBAAW,GAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAY,EAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE;YACjC,WAAW,CAAC,IAAI,CAAC,CAAC;SAClB;QAED,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,aAAa,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAhCW,QAAA,YAAY,gBAgCvB"}
@@ -0,0 +1,12 @@
1
+ import { AudioData } from './types';
2
+ declare type FnParameters = {
3
+ audioData: AudioData;
4
+ frame: number;
5
+ fps: number;
6
+ numberOfSamples: number;
7
+ };
8
+ export declare const visualizeAudio: ({ smoothing, ...parameters }: FnParameters & {
9
+ smoothing?: boolean | undefined;
10
+ }) => number[];
11
+ export {};
12
+ //# sourceMappingURL=visualize-audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize-audio.d.ts","sourceRoot":"","sources":["../../src/visualize-audio.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAIlC,aAAK,YAAY,GAAG;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACxB,CAAC;AAyBF,eAAO,MAAM,cAAc;;cA4B1B,CAAC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.visualizeAudio = void 0;
4
+ const get_visualization_1 = require("./fft/get-visualization");
5
+ const max_value_cached_1 = require("./fft/max-value-cached");
6
+ const cache = {};
7
+ const visualizeAudioFrame = ({ audioData: metadata, frame, fps, numberOfSamples, }) => {
8
+ const cacheKey = metadata.resultId + frame + fps + numberOfSamples;
9
+ if (cache[cacheKey]) {
10
+ return cache[cacheKey];
11
+ }
12
+ const maxInt = (0, max_value_cached_1.getMaxPossibleMagnitude)(metadata);
13
+ return (0, get_visualization_1.getVisualization)({
14
+ sampleSize: numberOfSamples * 2,
15
+ data: metadata.channelWaveforms[0],
16
+ frame,
17
+ fps,
18
+ sampleRate: metadata.sampleRate,
19
+ maxInt,
20
+ });
21
+ };
22
+ const visualizeAudio = ({ smoothing = true, ...parameters }) => {
23
+ if (!smoothing) {
24
+ return visualizeAudioFrame(parameters);
25
+ }
26
+ const toSmooth = [
27
+ parameters.frame - 1,
28
+ parameters.frame,
29
+ parameters.frame + 1,
30
+ ];
31
+ const all = toSmooth.map((s) => {
32
+ return visualizeAudioFrame({ ...parameters, frame: s });
33
+ });
34
+ return new Array(parameters.numberOfSamples).fill(true).map((x, i) => {
35
+ return (new Array(toSmooth.length)
36
+ .fill(true)
37
+ .map((_, j) => {
38
+ return all[j][i];
39
+ })
40
+ .reduce((a, b) => a + b, 0) / toSmooth.length);
41
+ });
42
+ };
43
+ exports.visualizeAudio = visualizeAudio;
44
+ //# sourceMappingURL=visualize-audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize-audio.js","sourceRoot":"","sources":["../../src/visualize-audio.ts"],"names":[],"mappings":";;;AAAA,+DAAyD;AACzD,6DAA+D;AAG/D,MAAM,KAAK,GAA8B,EAAE,CAAC;AAS5C,MAAM,mBAAmB,GAAG,CAAC,EAC5B,SAAS,EAAE,QAAQ,EACnB,KAAK,EACL,GAAG,EACH,eAAe,GACD,EAAE,EAAE;IAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,KAAK,GAAG,GAAG,GAAG,eAAe,CAAC;IACnE,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;KACvB;IAED,MAAM,MAAM,GAAG,IAAA,0CAAuB,EAAC,QAAQ,CAAC,CAAC;IAEjD,OAAO,IAAA,oCAAgB,EAAC;QACvB,UAAU,EAAE,eAAe,GAAG,CAAC;QAC/B,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClC,KAAK;QACL,GAAG;QACH,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM;KACN,CAAC,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,CAAC,EAC9B,SAAS,GAAG,IAAI,EAChB,GAAG,UAAU,EAGb,EAAE,EAAE;IACJ,IAAI,CAAC,SAAS,EAAE;QACf,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC;KACvC;IAED,MAAM,QAAQ,GAAG;QAChB,UAAU,CAAC,KAAK,GAAG,CAAC;QACpB,UAAU,CAAC,KAAK;QAChB,UAAU,CAAC,KAAK,GAAG,CAAC;KACpB,CAAC;IACF,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,OAAO,mBAAmB,CAAC,EAAC,GAAG,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpE,OAAO,CACN,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAC9C,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,cAAc,kBA4BzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-audio-metadata.d.ts","sourceRoot":"","sources":["../src/use-audio-metadata.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,SAAS,GAAG,IAgCtD,CAAC"}
1
+ {"version":3,"file":"use-audio-metadata.d.ts","sourceRoot":"","sources":["../src/use-audio-metadata.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,SAAS,GAAG,IAkCtD,CAAC"}
@@ -18,7 +18,7 @@ const useAudioData = (src) => {
18
18
  }, []);
19
19
  const [metadata, setMetadata] = (0, react_1.useState)(null);
20
20
  const fetchMetadata = (0, react_1.useCallback)(async () => {
21
- const handle = (0, remotion_1.delayRender)();
21
+ const handle = (0, remotion_1.delayRender)(`Waiting for audio metadata with src="${src}" to be loaded`);
22
22
  const data = await (0, get_audio_data_1.getAudioData)(src);
23
23
  if (mountState.current.isMounted) {
24
24
  setMetadata(data);
@@ -1 +1 @@
1
- {"version":3,"file":"use-audio-metadata.js","sourceRoot":"","sources":["../src/use-audio-metadata.ts"],"names":[],"mappings":";;;AAAA,iCAA+D;AAC/D,uCAAqD;AACrD,qDAA8C;AAGvC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAoB,EAAE;IAC7D,IAAI,CAAC,GAAG,EAAE;QACT,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;KACnE;IAED,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,MAAM,EAAC,OAAO,EAAC,GAAG,UAAU,CAAC;QAC7B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE;YACX,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAmB,IAAI,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAA,sBAAW,GAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAY,EAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE;YACjC,WAAW,CAAC,IAAI,CAAC,CAAC;SAClB;QAED,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,aAAa,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAhCW,QAAA,YAAY,gBAgCvB"}
1
+ {"version":3,"file":"use-audio-metadata.js","sourceRoot":"","sources":["../src/use-audio-metadata.ts"],"names":[],"mappings":";;;AAAA,iCAA+D;AAC/D,uCAAqD;AACrD,qDAA8C;AAGvC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAoB,EAAE;IAC7D,IAAI,CAAC,GAAG,EAAE;QACT,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;KACnE;IAED,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,MAAM,EAAC,OAAO,EAAC,GAAG,UAAU,CAAC;QAC7B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE;YACX,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAmB,IAAI,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAA,sBAAW,EACzB,wCAAwC,GAAG,gBAAgB,CAC3D,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAY,EAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE;YACjC,WAAW,CAAC,IAAI,CAAC,CAAC;SAClB;QAED,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,aAAa,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAlCW,QAAA,YAAY,gBAkCvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/media-utils",
3
- "version": "2.6.12",
3
+ "version": "2.6.15",
4
4
  "description": "Utility functions for audio and video",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -18,7 +18,7 @@
18
18
  "url": "https://github.com/remotion-dev/remotion/issues"
19
19
  },
20
20
  "dependencies": {
21
- "remotion": "2.6.12"
21
+ "remotion": "2.6.15"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": "^17.0.1",
@@ -44,5 +44,5 @@
44
44
  "publishConfig": {
45
45
  "access": "public"
46
46
  },
47
- "gitHead": "6d76097a98c44dc976cecfa04526d663339cf45c"
47
+ "gitHead": "b175877d7ce5e0bbcb9d923cc98546fd6c748b44"
48
48
  }