react-native-audio-api 0.4.12-beta.4 → 0.4.12

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 (157) hide show
  1. package/android/src/main/cpp/audioapi/CMakeLists.txt +2 -3
  2. package/android/src/main/cpp/audioapi/android/core/AudioDecoder.cpp +3 -3
  3. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +10 -11
  4. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.h +1 -0
  5. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +0 -1
  6. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +1 -3
  7. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +24 -16
  8. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +4 -0
  9. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +20 -4
  10. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +3 -2
  11. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +32 -2
  12. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +14 -21
  13. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +4 -2
  14. package/common/cpp/audioapi/core/AudioNode.cpp +2 -2
  15. package/common/cpp/audioapi/core/AudioParam.cpp +1 -1
  16. package/common/cpp/audioapi/core/BaseAudioContext.cpp +4 -12
  17. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -4
  18. package/common/cpp/audioapi/core/Constants.h +8 -33
  19. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +42 -45
  20. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  21. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -1
  22. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +12 -8
  23. package/common/cpp/audioapi/core/effects/GainNode.cpp +4 -3
  24. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +32 -49
  25. package/common/cpp/audioapi/core/effects/PeriodicWave.h +8 -3
  26. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +3 -3
  27. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +9 -2
  28. package/common/cpp/audioapi/core/sources/AudioBuffer.h +5 -2
  29. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +72 -35
  30. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +41 -8
  31. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +18 -6
  32. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +7 -0
  33. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -3
  34. package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -0
  35. package/common/cpp/audioapi/core/types/TimeStretchType.h +7 -0
  36. package/common/cpp/audioapi/dsp/AudioUtils.cpp +2 -2
  37. package/common/cpp/audioapi/dsp/AudioUtils.h +2 -2
  38. package/common/cpp/audioapi/dsp/FFT.cpp +41 -0
  39. package/common/cpp/audioapi/dsp/FFT.h +29 -0
  40. package/common/cpp/audioapi/dsp/VectorMath.cpp +3 -3
  41. package/common/cpp/audioapi/dsp/VectorMath.h +2 -2
  42. package/common/cpp/audioapi/dsp/Windows.cpp +80 -0
  43. package/common/cpp/audioapi/dsp/Windows.h +95 -0
  44. package/{android/src/main/cpp/audioapi/android/libs → common/cpp/audioapi/libs/pffft}/pffft.c +1 -1
  45. package/common/cpp/audioapi/libs/{dsp → signalsmith-stretch}/delay.h +9 -11
  46. package/common/cpp/audioapi/libs/{dsp → signalsmith-stretch}/fft.h +6 -7
  47. package/common/cpp/audioapi/libs/{dsp → signalsmith-stretch}/perf.h +0 -2
  48. package/common/cpp/audioapi/libs/{signalsmith-stretch.h → signalsmith-stretch/signalsmith-stretch.h} +3 -4
  49. package/common/cpp/audioapi/libs/{dsp → signalsmith-stretch}/spectral.h +10 -13
  50. package/common/cpp/audioapi/{core/utils → utils}/AudioArray.cpp +5 -5
  51. package/common/cpp/audioapi/{core/utils → utils}/AudioBus.cpp +29 -29
  52. package/ios/audioapi/ios/core/AudioDecoder.mm +3 -3
  53. package/ios/audioapi/ios/core/AudioPlayer.h +5 -2
  54. package/ios/audioapi/ios/core/AudioPlayer.m +9 -5
  55. package/ios/audioapi/ios/core/IOSAudioPlayer.h +1 -0
  56. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +12 -10
  57. package/lib/module/api.js +30 -0
  58. package/lib/module/api.js.map +1 -0
  59. package/lib/module/{index.web.js → api.web.js} +4 -2
  60. package/lib/module/api.web.js.map +1 -0
  61. package/lib/module/core/AudioBufferSourceNode.js +6 -0
  62. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  63. package/lib/module/core/AudioScheduledSourceNode.js +5 -0
  64. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  65. package/lib/module/core/BaseAudioContext.js +0 -4
  66. package/lib/module/core/BaseAudioContext.js.map +1 -1
  67. package/lib/module/index.js +1 -28
  68. package/lib/module/index.js.map +1 -1
  69. package/lib/module/web-core/AudioBuffer.js +1 -1
  70. package/lib/module/web-core/AudioBuffer.js.map +1 -1
  71. package/lib/module/web-core/AudioBufferSourceNode.js +6 -0
  72. package/lib/module/web-core/AudioBufferSourceNode.js.map +1 -1
  73. package/lib/module/web-core/AudioContext.js +7 -0
  74. package/lib/module/web-core/AudioContext.js.map +1 -1
  75. package/lib/module/web-core/AudioScheduledSourceNode.js +8 -0
  76. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  77. package/lib/module/web-core/StretcherNode.js +64 -0
  78. package/lib/module/web-core/StretcherNode.js.map +1 -0
  79. package/lib/module/web-core/custom/LoadCustomWasm.js +33 -0
  80. package/lib/module/web-core/custom/LoadCustomWasm.js.map +1 -0
  81. package/lib/module/web-core/custom/index.js +4 -0
  82. package/lib/module/web-core/custom/index.js.map +1 -0
  83. package/lib/module/web-core/custom/signalsmithStretch/LICENSE.txt +21 -0
  84. package/lib/module/web-core/custom/signalsmithStretch/README.md +46 -0
  85. package/lib/module/web-core/custom/signalsmithStretch/SignalsmithStretch.js +822 -0
  86. package/lib/module/web-core/custom/signalsmithStretch/SignalsmithStretch.js.map +1 -0
  87. package/lib/module/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs +826 -0
  88. package/lib/module/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs.map +1 -0
  89. package/lib/typescript/api.d.ts +20 -0
  90. package/lib/typescript/api.d.ts.map +1 -0
  91. package/lib/typescript/{index.web.d.ts → api.web.d.ts} +4 -2
  92. package/lib/typescript/api.web.d.ts.map +1 -0
  93. package/lib/typescript/core/AudioBufferSourceNode.d.ts +3 -0
  94. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  95. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -0
  96. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
  97. package/lib/typescript/core/BaseAudioContext.d.ts +0 -2
  98. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  99. package/lib/typescript/index.d.ts +1 -20
  100. package/lib/typescript/index.d.ts.map +1 -1
  101. package/lib/typescript/interfaces.d.ts +3 -6
  102. package/lib/typescript/interfaces.d.ts.map +1 -1
  103. package/lib/typescript/types.d.ts +1 -0
  104. package/lib/typescript/types.d.ts.map +1 -1
  105. package/lib/typescript/web-core/AudioBuffer.d.ts +1 -1
  106. package/lib/typescript/web-core/AudioBuffer.d.ts.map +1 -1
  107. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +3 -0
  108. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts.map +1 -1
  109. package/lib/typescript/web-core/AudioContext.d.ts +2 -0
  110. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  111. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -0
  112. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts.map +1 -1
  113. package/lib/typescript/web-core/StretcherNode.d.ts +45 -0
  114. package/lib/typescript/web-core/StretcherNode.d.ts.map +1 -0
  115. package/lib/typescript/web-core/custom/LoadCustomWasm.d.ts +5 -0
  116. package/lib/typescript/web-core/custom/LoadCustomWasm.d.ts.map +1 -0
  117. package/lib/typescript/web-core/custom/index.d.ts +2 -0
  118. package/lib/typescript/web-core/custom/index.d.ts.map +1 -0
  119. package/package.json +8 -5
  120. package/scripts/setup-custom-wasm.js +104 -0
  121. package/src/api.ts +51 -0
  122. package/src/{index.web.ts → api.web.ts} +4 -0
  123. package/src/core/AudioBufferSourceNode.ts +9 -0
  124. package/src/core/AudioScheduledSourceNode.ts +5 -0
  125. package/src/core/BaseAudioContext.ts +0 -5
  126. package/src/index.ts +1 -51
  127. package/src/interfaces.ts +3 -6
  128. package/src/types.ts +2 -0
  129. package/src/web-core/AudioBuffer.tsx +2 -2
  130. package/src/web-core/AudioBufferSourceNode.tsx +11 -0
  131. package/src/web-core/AudioContext.tsx +11 -0
  132. package/src/web-core/AudioScheduledSourceNode.tsx +9 -0
  133. package/src/web-core/StretcherNode.tsx +125 -0
  134. package/src/web-core/custom/LoadCustomWasm.ts +39 -0
  135. package/src/web-core/custom/index.ts +1 -0
  136. package/src/web-core/custom/signalsmithStretch/LICENSE.txt +21 -0
  137. package/src/web-core/custom/signalsmithStretch/README.md +46 -0
  138. package/src/web-core/custom/signalsmithStretch/SignalsmithStretch.js +945 -0
  139. package/src/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs +949 -0
  140. package/common/cpp/audioapi/HostObjects/StretcherNodeHostObject.h +0 -35
  141. package/common/cpp/audioapi/core/effects/StretcherNode.cpp +0 -94
  142. package/common/cpp/audioapi/core/effects/StretcherNode.h +0 -35
  143. package/common/cpp/audioapi/dsp/FFTFrame.cpp +0 -100
  144. package/common/cpp/audioapi/dsp/FFTFrame.h +0 -74
  145. package/common/cpp/audioapi/libs/dsp/common.h +0 -47
  146. package/common/cpp/audioapi/libs/dsp/windows.h +0 -219
  147. package/lib/module/core/StretcherNode.js +0 -12
  148. package/lib/module/core/StretcherNode.js.map +0 -1
  149. package/lib/module/index.web.js.map +0 -1
  150. package/lib/typescript/core/StretcherNode.d.ts +0 -10
  151. package/lib/typescript/core/StretcherNode.d.ts.map +0 -1
  152. package/lib/typescript/index.web.d.ts.map +0 -1
  153. package/src/core/StretcherNode.ts +0 -15
  154. /package/common/cpp/audioapi/libs/{miniaudio.h → miniaudio/miniaudio.h} +0 -0
  155. /package/{android/src/main/cpp/audioapi/android/libs → common/cpp/audioapi/libs/pffft}/pffft.h +0 -0
  156. /package/common/cpp/audioapi/{core/utils → utils}/AudioArray.h +0 -0
  157. /package/common/cpp/audioapi/{core/utils → utils}/AudioBus.h +0 -0
@@ -0,0 +1,945 @@
1
+ var SignalsmithStretch = (() => {
2
+ var _scriptName =
3
+ typeof document != 'undefined' ? document.currentScript?.src : undefined;
4
+
5
+ return async function (moduleArg = {}) {
6
+ var moduleRtn;
7
+
8
+ var Module = moduleArg;
9
+ var readyPromiseResolve, readyPromiseReject;
10
+ var readyPromise = new Promise((resolve, reject) => {
11
+ readyPromiseResolve = resolve;
12
+ readyPromiseReject = reject;
13
+ });
14
+ var ENVIRONMENT_IS_WEB = typeof window == 'object';
15
+ var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined';
16
+ var ENVIRONMENT_IS_NODE =
17
+ typeof process == 'object' &&
18
+ typeof process.versions == 'object' &&
19
+ typeof process.versions.node == 'string' &&
20
+ process.type != 'renderer';
21
+ var ENVIRONMENT_IS_SHELL =
22
+ !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
23
+ var crypto = globalThis?.crypto || {
24
+ getRandomValues: (array) => {
25
+ for (var i = 0; i < array.length; i++)
26
+ array[i] = (Math.random() * 256) | 0;
27
+ },
28
+ };
29
+ var performance = globalThis?.performance || { now: (_) => Date.now() };
30
+ var moduleOverrides = Object.assign({}, Module);
31
+ var arguments_ = [];
32
+ var quit_ = (status, toThrow) => {
33
+ throw toThrow;
34
+ };
35
+ var scriptDirectory = '';
36
+ var readAsync, readBinary;
37
+ if (ENVIRONMENT_IS_SHELL) {
38
+ readBinary = (f) => {
39
+ if (typeof readbuffer == 'function') {
40
+ return new Uint8Array(readbuffer(f));
41
+ }
42
+ let data = read(f, 'binary');
43
+ assert(typeof data == 'object');
44
+ return data;
45
+ };
46
+ readAsync = async (f) => readBinary(f);
47
+ globalThis.clearTimeout ??= (id) => {};
48
+ globalThis.setTimeout ??= (f) => f();
49
+ arguments_ = globalThis.arguments || globalThis.scriptArgs;
50
+ if (typeof quit == 'function') {
51
+ quit_ = (status, toThrow) => {
52
+ setTimeout(() => {
53
+ if (!(toThrow instanceof ExitStatus)) {
54
+ let toLog = toThrow;
55
+ if (toThrow && typeof toThrow == 'object' && toThrow.stack) {
56
+ toLog = [toThrow, toThrow.stack];
57
+ }
58
+ err(`exiting due to exception: ${toLog}`);
59
+ }
60
+ quit(status);
61
+ });
62
+ throw toThrow;
63
+ };
64
+ }
65
+ if (typeof print != 'undefined') {
66
+ globalThis.console ??= {};
67
+ console.log = print;
68
+ console.warn = console.error = globalThis.printErr ?? print;
69
+ }
70
+ } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
71
+ if (ENVIRONMENT_IS_WORKER) {
72
+ scriptDirectory = self.location.href;
73
+ } else if (typeof document != 'undefined' && document.currentScript) {
74
+ scriptDirectory = document.currentScript.src;
75
+ }
76
+ if (_scriptName) {
77
+ scriptDirectory = _scriptName;
78
+ }
79
+ if (scriptDirectory.startsWith('blob:')) {
80
+ scriptDirectory = '';
81
+ } else {
82
+ scriptDirectory = scriptDirectory.slice(
83
+ 0,
84
+ scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1
85
+ );
86
+ }
87
+ {
88
+ if (ENVIRONMENT_IS_WORKER) {
89
+ readBinary = (url) => {
90
+ var xhr = new XMLHttpRequest();
91
+ xhr.open('GET', url, false);
92
+ xhr.responseType = 'arraybuffer';
93
+ xhr.send(null);
94
+ return new Uint8Array(xhr.response);
95
+ };
96
+ }
97
+ readAsync = async (url) => {
98
+ var response = await fetch(url, { credentials: 'same-origin' });
99
+ if (response.ok) {
100
+ return response.arrayBuffer();
101
+ }
102
+ throw new Error(response.status + ' : ' + response.url);
103
+ };
104
+ }
105
+ } else {
106
+ }
107
+ var out = console.log.bind(console);
108
+ var err = console.error.bind(console);
109
+ Object.assign(Module, moduleOverrides);
110
+ moduleOverrides = null;
111
+ var wasmBinary;
112
+ var wasmMemory;
113
+ var ABORT = false;
114
+ var EXITSTATUS;
115
+ var HEAP8,
116
+ HEAPU8,
117
+ HEAP16,
118
+ HEAPU16,
119
+ HEAP32,
120
+ HEAPU32,
121
+ HEAPF32,
122
+ HEAP64,
123
+ HEAPU64,
124
+ HEAPF64;
125
+ var runtimeInitialized = false;
126
+ function updateMemoryViews() {
127
+ var b = wasmMemory.buffer;
128
+ Module['HEAP8'] = HEAP8 = new Int8Array(b);
129
+ HEAP16 = new Int16Array(b);
130
+ HEAPU8 = new Uint8Array(b);
131
+ HEAPU16 = new Uint16Array(b);
132
+ HEAP32 = new Int32Array(b);
133
+ HEAPU32 = new Uint32Array(b);
134
+ HEAPF32 = new Float32Array(b);
135
+ HEAPF64 = new Float64Array(b);
136
+ HEAP64 = new BigInt64Array(b);
137
+ HEAPU64 = new BigUint64Array(b);
138
+ }
139
+ function preRun() {}
140
+ function initRuntime() {
141
+ runtimeInitialized = true;
142
+ wasmExports['e']();
143
+ }
144
+ function preMain() {}
145
+ function postRun() {}
146
+ var runDependencies = 0;
147
+ var dependenciesFulfilled = null;
148
+ function addRunDependency(id) {
149
+ runDependencies++;
150
+ }
151
+ function removeRunDependency(id) {
152
+ runDependencies--;
153
+ if (runDependencies == 0) {
154
+ if (dependenciesFulfilled) {
155
+ var callback = dependenciesFulfilled;
156
+ dependenciesFulfilled = null;
157
+ callback();
158
+ }
159
+ }
160
+ }
161
+ function abort(what) {
162
+ what = 'Aborted(' + what + ')';
163
+ err(what);
164
+ ABORT = true;
165
+ what += '. Build with -sASSERTIONS for more info.';
166
+ var e = new WebAssembly.RuntimeError(what);
167
+ readyPromiseReject(e);
168
+ throw e;
169
+ }
170
+ var wasmBinaryFile =
171
+ 'data:application/octet-stream;base64,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QQEhA0EBIQQgAiIFIQ8DQEHYMSgCACEBAkAgAyAETwRAIBBBAnQhBiAQQQFqIRAgDyABIAZqKAIAIgpuIg8hBiAKIAQiB2whBAwBCyAFIAEgDkEBayIOQQJ0aigCACIKbiIFIQcgCiADIgZsIQMLAkAgCkECSQ0AIABB/DEoAgAiAUYNAEEBIQJBASAAIAFrQQN1IgEgAUEBTRshEgNAIAIgB2whEyACIAZsIRRBACEBA0AgFEH8MSgCACIMIAFBA3RqKQIAIhmnaiELIBMgGUIgiKdqIRECQEGEMigCACIIIABNBEAgACAMayIAQQN1IhVBAWoiCUH/////AUsNCCAAQf////8BIAggDGsiCEECdSINIAkgCSANSRsgCEH4////B08bIgkEfyAJQf////8BSw0IIAlBA3QQBAVBAAsiDWoiCCALrSARrUIghoQ3AgAgCCAVQQN0ayELIAAEQCALIAwgAPwKAAALQYQyIA0gCUEDdGo2AgBBgDIgCEEIaiIANgIAQfwxIAs2AgAgDBADDAELIAAgC60gEa1CIIaENwIAIABBCGohAAtBgDIgADYCACABQQFqIgEgEkcNAAsgAkEBaiICIApHDQALQcgxKAIAIQILIAMgBGwgAkkNAAsLDAILEAgACxAFAAtByDEoAgAFIAILGguDBwEGf0HoMigCACIDQeAyKAIAIgJrQRxtIABPBEACQEHkMigCACACa0EcbSIFIAAgACAFSxsiBEUNAAJAIARBA3EiBkUEQCAEIQMMAQsgBCEDA0AgAiABKQIANwIAIAIgASgCGDYCGCACIAEpAhA3AhAgAiABKQIINwIIIANBAWshAyACQRxqIQIgB0EBaiIHIAZHDQALCyAEQQRJDQADQCACIAEpAgA3AgAgAiABKAIYNgIYIAIgASkCEDcCECACIAEpAgg3AgggAiABKAIYNgI0IAIgASkCEDcCLCACIAEpAgg3AiQgAiABKQIANwIcIAIgASgCGDYCUCACIAEpAhA3AkggAkFAayABKQIINwIAIAIgASkCADcCOCACIAEpAgA3AlQgAiABKQIINwJcIAIgASkCEDcCZCACIAEoAhg2AmwgAkHwAGohAiADQQRrIgMNAAsLIAAgBUsEQEHkMigCACICIAAgBWtBHGxqIQADQCACIAEpAgA3AgAgAiABKAIYNgIYIAIgASkCEDcCECACIAEpAgg3AgggAkEcaiICIABHDQALQeQyIAA2AgAPC0HkMkHgMigCACAAQRxsajYCAA8LIAIEQEHkMiACNgIAIAIQA0HoMkEANgIAQeAyQgA3AgBBACEDCwJAIABByqSSyQBPDQBByaSSyQAgA0EcbSIDQQF0IgQgACAAIARJGyADQaSSySRPGyIDQcqkkskATw0AQeQyIANBHGwiAxAEIgQ2AgBB4DIgBDYCAEHoMiADIARqNgIAIAQhAiAAQRxsIgBBHGsiBUEcbiIDQQNxQQNHBEAgA0EBakEDcSEGQQAhAwNAIAIgASkCADcCACACIAEoAhg2AhggAiABKQIQNwIQIAIgASkCCDcCCCACQRxqIQIgA0EBaiIDIAZHDQALCyAAIARqIQAgBUHUAE8EQANAIAIgASkCADcCACACIAEoAhg2AhggAiABKQIQNwIQIAIgASkCCDcCCCACIAEoAhg2AjQgAiABKQIQNwIsIAIgASkCCDcCJCACIAEpAgA3AhwgAiABKAIYNgJQIAIgASkCEDcCSCACQUBrIAEpAgg3AgAgAiABKQIANwI4IAIgASkCADcCVCACIAEpAgg3AlwgAiABKQIQNwJkIAIgASgCGDYCbCACQfAAaiICIABHDQALC0HkMiAANgIADwsQBQAL3QQCBn8BfkGUMSgCACIDQYwxKAIAIgJrQQN1IABPBEACQEGQMSgCACACa0EDdSIFIAAgACAFSxsiBEUNAAJAIARBB3EiBkUEQCAEIQMMAQsgBCEDA0AgAiABKQIANwIAIANBAWshAyACQQhqIQIgB0EBaiIHIAZHDQALCyAEQQhJDQADQCACIAEpAgA3AgAgAiABKQIANwIIIAIgASkCADcCECACIAEpAgA3AhggAiABKQIANwIgIAIgASkCADcCKCACIAEpAgA3AjAgAiABKQIANwI4IAJBQGshAiADQQhrIgMNAAsLIAAgBUsEQEGQMSgCACICIAAgBWtBA3RqIQADQCACIAEpAgA3AgAgAkEIaiICIABHDQALQZAxIAA2AgAPC0GQMUGMMSgCACAAQQN0ajYCAA8LIAIEQEGQMSACNgIAIAIQA0GUMUEANgIAQYwxQgA3AgBBACEDCwJAIABBgICAgAJPDQBB/////wEgA0ECdSIEIAAgACAESRsgA0H4////B08b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AgALIANBAEoEQEEAIQIDQCASQZgwNgIgIBJBvDM2AiQgEiASKQIgNwMQIBIgEkEoajYCHCASIBJBLGo2AhggEiASKQIYNwMIIwBBEGsiDSQAQewwKAIAIgAgAiIQSARAA0BBACEHIwBBEGsiEyQAIBIoAhAiAigCSCEBIBIoAggoAgCyIABBAWoiFrKUIBIoAgwoAgCylRAZIRsgAigCsAIhACACIBsgAbKT/AAiBjYCsAICQCACLQDAAiAGIABrIhFBAEpyIg5BAXFFDQACfyACKAKoAkEATARAIAJBADoAwQJBAAwBC0EAIAZrIgxBACAMQQBKGyEEQQEgDCAMQQFMGyIAQfz///8HcSEPIABBA3EhFCACQYABaiEVIAJB/AFqIRggBkEATiEXA0ACQCAXDQAgAigClAIgAigCkAIgB2wgBmpqIQEgAigCtAIhCCACKAKcAiEJIAIoApgCIQpBACEFQQAhAEEAIQMgDEEDSgRAA0AgCCAAQQJ0aiAJIAogACABanFBAnRqKgIAOAIAIAggAEEBciILQQJ0aiAJIAogASALanFBAnRqKgIAOAIAIAggAEECciILQQJ0aiAJIAogASALanFBAnRqKgIAOAIAIAggAEEDciILQQJ0aiAJIAogASALanFBAnRqKgIAOAIAIABBBGohACADQQRqIgMgD0cNAAsLIBRFDQADQCAIIABBAnRqIAkgCiAAIAFqcUECdGoqAgA4AgAgAEEBaiEAIAVBAWoiBSAURw0ACwsCQCAEIAIoAkgiBU4NACASKAIUKAIAIAdBAnRqKAIAIAZBAnRqIQEgAigCtAIhCEEAIQMgBSAEIgBrQQNxIgkEQANAIAggAEECdCIKaiABIApqKgIAOAIAIABBAWohACADQQFqIgMgCUcNAAsLIAQgBWtBfEsNAANAIAggAEECdCIDaiABIANqKgIAOAIAIAggA0EEaiIJaiABIAlqKgIAOAIAIAggA0EIaiIJaiABIAlqKgIAOAIAIAggA0EMaiIDaiABIANqKgIAOAIAIABBBGoiACAFRw0ACwsgEyACKAJ0IAIoAnAgB2xBA3RqNgIIIAIoArABQQF0IQUCQCACKAKIAiIBQQBMDQAgAigC/AEgBSABa0ECdGohACACKALwASEJIAIoArQCIQpBACEIIAFBAUcEQCABQf7///8HcSEZQQAhAwNAIAAgCEECdCILaiAJIAtqKgIAIAogC2oqAgCMlDgCACAAIAtBBHIiC2ogCSALaioCACAKIAtqKgIAjJQ4AgAgCEECaiEIIANBAmoiAyAZRw0ACwsgAUEBcUUNACAAIAhBAnQiA2ogAyAJaioCACADIApqKgIAjJQ4AgALAkAgASAFTg0AIAFBAWohAyACKAL8ASEIIAIoAvABIQkgAigCtAIhCiABIgBBAXEEQCAIIAkgAEECdCIAaioCACAAIApqKgIAlDgCACADIQALIAMgBUYNAANAIAggACABa0ECdGogCSAAQQJ0IgNqKgIAIAMgCmoqAgCUOAIAIAggAEEBaiIDIAFrQQJ0aiAJIANBAnQiA2oqAgAgAyAKaioCAJQ4AgAgAEECaiIAIAVHDQALCyAVIBggE0EIahAdIAdBAWoiByACKAKoAiIDSA0ACyACQQA6AMECQQAgA0EATA0AGkEAIQFBASACKAKsAiIIQQBMDQAaA0BBACEAIAhBAEoEQCACKALIAiABIAhsQRxsaiEDIAIoAnQgAigCcCABbEEDdGohBANAIAMgAEEcbGogBCAAQQN0aikCADcCACAAQQFqIgAgAigCrAIiCEgNAAsgAigCqAIhAwsgAUEBaiIBIANIDQALIANBAEoLIAItAMACRSACKAJQIgEgEUZxDQBFDQBBACEHQQAgBiABayIUayIMQQAgDEEAShshBCACQYABaiEPIAJB/AFqIRUDQAJAIAIoAkgiASAMIAEgDEgbIgtBAEwNACACKAKUAiACKAKQAiAHbCAUamohCCACKAK0AiEGIAIoApwCIQkgAigCmAIhCkEAIQVBACEAIAtBBE8EQCALQfz///8HcSEYQQAhAwNAIAYgAEECdGogCSAKIAAgCGpxQQJ0aioCADgCACAGIABBAXIiF0ECdGogCSAKIAggF2pxQQJ0aioCADgCACAGIABBAnIiF0ECdGogCSAKIAggF2pxQQJ0aioCADgCACAGIABBA3IiF0ECdGogCSAKIAggF2pxQQJ0aioCADgCACAAQQRqIQAgA0EEaiIDIBhHDQALCyALQQNxIgNFDQADQCAGIABBAnRqIAkgCiAAIAhqcUECdGoqAgA4AgAgAEEBaiEAIAVBAWoiBSADRw0ACwsCQCABIARMDQAgEigCFCgCACAHQQJ0aigC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';
172
+ function getBinarySync(file) {
173
+ if (file == wasmBinaryFile && wasmBinary) {
174
+ return new Uint8Array(wasmBinary);
175
+ }
176
+ var binary = tryParseAsDataURI(file);
177
+ if (binary) {
178
+ return binary;
179
+ }
180
+ if (readBinary) {
181
+ return readBinary(file);
182
+ }
183
+ throw 'both async and sync fetching of the wasm failed';
184
+ }
185
+ async function getWasmBinary(binaryFile) {
186
+ return getBinarySync(binaryFile);
187
+ }
188
+ async function instantiateArrayBuffer(binaryFile, imports) {
189
+ try {
190
+ var binary = await getWasmBinary(binaryFile);
191
+ var instance = await WebAssembly.instantiate(binary, imports);
192
+ return instance;
193
+ } catch (reason) {
194
+ err(`failed to asynchronously prepare wasm: ${reason}`);
195
+ abort(reason);
196
+ }
197
+ }
198
+ async function instantiateAsync(binary, binaryFile, imports) {
199
+ return instantiateArrayBuffer(binaryFile, imports);
200
+ }
201
+ function getWasmImports() {
202
+ return { a: wasmImports };
203
+ }
204
+ async function createWasm() {
205
+ function receiveInstance(instance, module) {
206
+ wasmExports = instance.exports;
207
+ wasmMemory = wasmExports['d'];
208
+ updateMemoryViews();
209
+ removeRunDependency('wasm-instantiate');
210
+ return wasmExports;
211
+ }
212
+ addRunDependency('wasm-instantiate');
213
+ function receiveInstantiationResult(result) {
214
+ return receiveInstance(result['instance']);
215
+ }
216
+ var info = getWasmImports();
217
+ try {
218
+ var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);
219
+ var exports = receiveInstantiationResult(result);
220
+ return exports;
221
+ } catch (e) {
222
+ readyPromiseReject(e);
223
+ return Promise.reject(e);
224
+ }
225
+ }
226
+ class ExitStatus {
227
+ name = 'ExitStatus';
228
+ constructor(status) {
229
+ this.message = `Program terminated with exit(${status})`;
230
+ this.status = status;
231
+ }
232
+ }
233
+ var base64Decode = (b64) => {
234
+ var b1,
235
+ b2,
236
+ i = 0,
237
+ j = 0,
238
+ bLength = b64.length;
239
+ var output = new Uint8Array(
240
+ ((bLength * 3) >> 2) -
241
+ (b64[bLength - 2] == '=') -
242
+ (b64[bLength - 1] == '=')
243
+ );
244
+ for (; i < bLength; i += 4, j += 3) {
245
+ b1 = base64ReverseLookup[b64.charCodeAt(i + 1)];
246
+ b2 = base64ReverseLookup[b64.charCodeAt(i + 2)];
247
+ output[j] = (base64ReverseLookup[b64.charCodeAt(i)] << 2) | (b1 >> 4);
248
+ output[j + 1] = (b1 << 4) | (b2 >> 2);
249
+ output[j + 2] = (b2 << 6) | base64ReverseLookup[b64.charCodeAt(i + 3)];
250
+ }
251
+ return output;
252
+ };
253
+ var isDataURI = (filename) => filename.startsWith(dataURIPrefix);
254
+ var dataURIPrefix = 'data:application/octet-stream;base64,';
255
+ var tryParseAsDataURI = (filename) => {
256
+ if (isDataURI(filename)) {
257
+ return base64Decode(filename.slice(dataURIPrefix.length));
258
+ }
259
+ };
260
+ var __abort_js = () => abort('');
261
+ var getHeapMax = () => 2147483648;
262
+ var alignMemory = (size, alignment) =>
263
+ Math.ceil(size / alignment) * alignment;
264
+ var abortOnCannotGrowMemory = (requestedSize) => {
265
+ abort('OOM');
266
+ };
267
+ var growMemory = (size) => {
268
+ var b = wasmMemory.buffer;
269
+ var pages = ((size - b.byteLength + 65535) / 65536) | 0;
270
+ try {
271
+ wasmMemory.grow(pages);
272
+ updateMemoryViews();
273
+ return 1;
274
+ } catch (e) {}
275
+ };
276
+ var _emscripten_resize_heap = (requestedSize) => {
277
+ var oldSize = HEAPU8.length;
278
+ requestedSize >>>= 0;
279
+ var maxHeapSize = getHeapMax();
280
+ if (requestedSize > maxHeapSize) {
281
+ abortOnCannotGrowMemory(requestedSize);
282
+ }
283
+ for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
284
+ var overGrownHeapSize = oldSize * (1 + 0.5 / cutDown);
285
+ overGrownHeapSize = Math.min(
286
+ overGrownHeapSize,
287
+ requestedSize + 100663296
288
+ );
289
+ var newSize = Math.min(
290
+ maxHeapSize,
291
+ alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)
292
+ );
293
+ var replacement = growMemory(newSize);
294
+ if (replacement) {
295
+ return true;
296
+ }
297
+ }
298
+ abortOnCannotGrowMemory(requestedSize);
299
+ };
300
+ var initRandomFill = () => (view) => crypto.getRandomValues(view);
301
+ var randomFill = (view) => {
302
+ (randomFill = initRandomFill())(view);
303
+ };
304
+ var _random_get = (buffer, size) => {
305
+ randomFill(HEAPU8.subarray(buffer, buffer + size));
306
+ return 0;
307
+ };
308
+ var keepRuntimeAlive = () => true;
309
+ var _proc_exit = (code) => {
310
+ EXITSTATUS = code;
311
+ if (!keepRuntimeAlive()) {
312
+ ABORT = true;
313
+ }
314
+ quit_(code, new ExitStatus(code));
315
+ };
316
+ var exitJS = (status, implicit) => {
317
+ EXITSTATUS = status;
318
+ _proc_exit(status);
319
+ };
320
+ var handleException = (e) => {
321
+ if (e instanceof ExitStatus || e == 'unwind') {
322
+ return EXITSTATUS;
323
+ }
324
+ quit_(1, e);
325
+ };
326
+ var UTF8Decoder =
327
+ typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined;
328
+ var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {
329
+ var endIdx = idx + maxBytesToRead;
330
+ var endPtr = idx;
331
+ while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
332
+ if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
333
+ return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
334
+ }
335
+ var str = '';
336
+ while (idx < endPtr) {
337
+ var u0 = heapOrArray[idx++];
338
+ if (!(u0 & 128)) {
339
+ str += String.fromCharCode(u0);
340
+ continue;
341
+ }
342
+ var u1 = heapOrArray[idx++] & 63;
343
+ if ((u0 & 224) == 192) {
344
+ str += String.fromCharCode(((u0 & 31) << 6) | u1);
345
+ continue;
346
+ }
347
+ var u2 = heapOrArray[idx++] & 63;
348
+ if ((u0 & 240) == 224) {
349
+ u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
350
+ } else {
351
+ u0 =
352
+ ((u0 & 7) << 18) |
353
+ (u1 << 12) |
354
+ (u2 << 6) |
355
+ (heapOrArray[idx++] & 63);
356
+ }
357
+ if (u0 < 65536) {
358
+ str += String.fromCharCode(u0);
359
+ } else {
360
+ var ch = u0 - 65536;
361
+ str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));
362
+ }
363
+ }
364
+ return str;
365
+ };
366
+ var UTF8ToString = (ptr, maxBytesToRead) =>
367
+ ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
368
+ for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
369
+ base64ReverseLookup[48 + i] = 52 + i;
370
+ base64ReverseLookup[65 + i] = i;
371
+ base64ReverseLookup[97 + i] = 26 + i;
372
+ }
373
+ base64ReverseLookup[43] = 62;
374
+ base64ReverseLookup[47] = 63;
375
+ var wasmImports = {
376
+ c: __abort_js,
377
+ b: _emscripten_resize_heap,
378
+ a: _random_get,
379
+ };
380
+ var wasmExports = await createWasm();
381
+ var ___wasm_call_ctors = wasmExports['e'];
382
+ var _setBuffers = (Module['_setBuffers'] = wasmExports['g']);
383
+ var _blockSamples = (Module['_blockSamples'] = wasmExports['h']);
384
+ var _intervalSamples = (Module['_intervalSamples'] = wasmExports['i']);
385
+ var _inputLatency = (Module['_inputLatency'] = wasmExports['j']);
386
+ var _outputLatency = (Module['_outputLatency'] = wasmExports['k']);
387
+ var _reset = (Module['_reset'] = wasmExports['l']);
388
+ var _presetDefault = (Module['_presetDefault'] = wasmExports['m']);
389
+ var _presetCheaper = (Module['_presetCheaper'] = wasmExports['n']);
390
+ var _configure = (Module['_configure'] = wasmExports['o']);
391
+ var _setTransposeFactor = (Module['_setTransposeFactor'] =
392
+ wasmExports['p']);
393
+ var _setTransposeSemitones = (Module['_setTransposeSemitones'] =
394
+ wasmExports['q']);
395
+ var _seek = (Module['_seek'] = wasmExports['r']);
396
+ var _process = (Module['_process'] = wasmExports['s']);
397
+ var _flush = (Module['_flush'] = wasmExports['t']);
398
+ var _main = (Module['_main'] = wasmExports['u']);
399
+ Module['UTF8ToString'] = UTF8ToString;
400
+ function callMain() {
401
+ var entryFunction = _main;
402
+ var argc = 0;
403
+ var argv = 0;
404
+ try {
405
+ var ret = entryFunction(argc, argv);
406
+ exitJS(ret, true);
407
+ return ret;
408
+ } catch (e) {
409
+ return handleException(e);
410
+ }
411
+ }
412
+ function run() {
413
+ if (runDependencies > 0) {
414
+ dependenciesFulfilled = run;
415
+ return;
416
+ }
417
+ preRun();
418
+ if (runDependencies > 0) {
419
+ dependenciesFulfilled = run;
420
+ return;
421
+ }
422
+ function doRun() {
423
+ Module['calledRun'] = true;
424
+ if (ABORT) return;
425
+ initRuntime();
426
+ preMain();
427
+ readyPromiseResolve(Module);
428
+ var noInitialRun;
429
+ if (!noInitialRun) callMain();
430
+ postRun();
431
+ }
432
+ {
433
+ doRun();
434
+ }
435
+ }
436
+ run();
437
+ moduleRtn = readyPromise;
438
+
439
+ return moduleRtn;
440
+ };
441
+ })();
442
+ function registerWorkletProcessor(Module, audioNodeKey) {
443
+ class WasmProcessor extends AudioWorkletProcessor {
444
+ constructor(options) {
445
+ super(options);
446
+ this.wasmReady = false;
447
+ this.wasmModule = null;
448
+ this.channels = 0;
449
+ this.buffersIn = [];
450
+ this.buffersOut = [];
451
+
452
+ this.audioBuffers = []; // list of (multi-channel) audio buffers
453
+ this.audioBuffersStart = 0; // time-stamp for the first audio buffer
454
+ this.audioBuffersEnd = 0; // just to be helpful
455
+
456
+ this.timeIntervalSamples = sampleRate * 0.1;
457
+ this.timeIntervalCounter = 0;
458
+
459
+ this.timeMap = [
460
+ {
461
+ active: false,
462
+ input: 0,
463
+ output: 0,
464
+ rate: 1,
465
+ semitones: 0,
466
+ loopStart: 0,
467
+ loopEnd: 0,
468
+ },
469
+ ];
470
+
471
+ let remoteMethods = {
472
+ configure: (config) => {
473
+ let blockChanged =
474
+ config.blockMs != this.config.blockMs ||
475
+ config.intervalMs != this.config.intervalMs;
476
+ Object.assign(this.config, config);
477
+ if (config.blockMs && blockChanged) this.configure();
478
+ },
479
+ setUpdateInterval: (seconds) => {
480
+ this.timeIntervalSamples = sampleRate * seconds;
481
+ },
482
+ stop: (when) => {
483
+ if (typeof when !== 'number') when = currentTime;
484
+ return remoteMethods.schedule({ active: false, output: when });
485
+ },
486
+ start: (when, offset, duration, rate, semitones) => {
487
+ if (typeof when === 'object') {
488
+ if (!('active' in when)) when.active = true;
489
+ return remoteMethods.schedule(when);
490
+ }
491
+
492
+ let obj = {
493
+ active: true,
494
+ input: 0,
495
+ output: currentTime + this.outputLatencySeconds,
496
+ };
497
+ if (typeof when === 'number') obj.output = when;
498
+ if (typeof offset === 'number') obj.input = offset;
499
+ if (typeof rate === 'number') obj.rate = rate;
500
+ if (typeof semitones === 'number') obj.semitones = semitones;
501
+ let result = remoteMethods.schedule(obj);
502
+ if (typeof duration === 'number') {
503
+ remoteMethods.stop(obj.output + duration);
504
+ obj.output += duration;
505
+ obj.active = false;
506
+ remoteMethods.schedule(obj);
507
+ }
508
+ return result;
509
+ },
510
+ schedule: (objIn, adjustPrevious) => {
511
+ let outputTime =
512
+ 'outputTime' in objIn ? objIn.outputTime : currentTime;
513
+
514
+ let latestSegment = this.timeMap[this.timeMap.length - 1];
515
+ while (
516
+ this.timeMap.length &&
517
+ this.timeMap[this.timeMap.length - 1].output >= outputTime
518
+ ) {
519
+ latestSegment = this.timeMap.pop();
520
+ }
521
+
522
+ let obj = {
523
+ active: latestSegment.active,
524
+ input: null,
525
+ output: outputTime,
526
+ rate: latestSegment.rate,
527
+ semitones: latestSegment.semitones,
528
+ loopStart: latestSegment.loopStart,
529
+ loopEnd: latestSegment.loopEnd,
530
+ };
531
+ Object.assign(obj, objIn);
532
+ if (obj.input === null) {
533
+ let rate = latestSegment.active ? latestSegment.rate : 0;
534
+ obj.input =
535
+ latestSegment.input + (obj.output - latestSegment.output) * rate;
536
+ }
537
+ this.timeMap.push(obj);
538
+
539
+ if (adjustPrevious && this.timeMap.length > 1) {
540
+ let previous = this.timeMap[this.timeMap.length - 2];
541
+ if (previous.output < currentTime) {
542
+ let rate = previous.active ? previous.rate : 0;
543
+ previous.input += (currentTime - previous.output) * rate;
544
+ previous.output = currentTime;
545
+ }
546
+ previous.rate =
547
+ (obj.input - previous.input) / (obj.output - previous.output);
548
+ }
549
+
550
+ let currentMapSegment = this.timeMap[0];
551
+ while (
552
+ this.timeMap.length > 1 &&
553
+ this.timeMap[1].output <= outputTime
554
+ ) {
555
+ this.timeMap.shift();
556
+ currentMapSegment = this.timeMap[0];
557
+ }
558
+ let rate = currentMapSegment.active ? currentMapSegment.rate : 0;
559
+ let inputTime =
560
+ currentMapSegment.input +
561
+ (outputTime - currentMapSegment.output) * rate;
562
+ this.timeIntervalCounter = this.timeIntervalSamples;
563
+ this.port.postMessage(['time', inputTime]);
564
+
565
+ return obj;
566
+ },
567
+ dropBuffers: (toSeconds) => {
568
+ if (typeof toSeconds !== 'number') {
569
+ let buffers = this.audioBuffers.flat(1).map((b) => b.buffer);
570
+ this.audioBuffers = [];
571
+ this.audioBuffersStart = this.audioBuffersEnd = 0;
572
+ return {
573
+ value: { start: 0, end: 0 },
574
+ transfer: buffers,
575
+ };
576
+ }
577
+ let transfer = [];
578
+ while (this.audioBuffers.length) {
579
+ let first = this.audioBuffers[0];
580
+ let length = first[0].length;
581
+ let endSamples = this.audioBuffersStart + length;
582
+ let endSeconds = endSamples / sampleRate;
583
+ if (endSeconds > toSeconds) break;
584
+
585
+ this.audioBuffers.shift().forEach((b) => transfer.push(b.buffer));
586
+ this.audioBuffersStart += length;
587
+ }
588
+ return {
589
+ value: {
590
+ start: this.audioBuffersStart / sampleRate,
591
+ end: this.audioBuffersEnd / sampleRate,
592
+ },
593
+ transfer: transfer,
594
+ };
595
+ },
596
+ addBuffers: (sampleBuffers) => {
597
+ sampleBuffers = [].concat(sampleBuffers);
598
+ this.audioBuffers.push(sampleBuffers);
599
+ let length = sampleBuffers[0].length;
600
+ this.audioBuffersEnd += length;
601
+ return this.audioBuffersEnd / sampleRate;
602
+ },
603
+ };
604
+
605
+ let pendingMessages = [];
606
+ this.port.onmessage = (event) => pendingMessages.push(event);
607
+
608
+ Module().then((wasmModule) => {
609
+ this.wasmModule = wasmModule;
610
+ this.wasmReady = true;
611
+
612
+ wasmModule._main();
613
+
614
+ this.channels = options.numberOfOutputs
615
+ ? options.outputChannelCount[0]
616
+ : 2; // stereo by default
617
+ this.configure();
618
+
619
+ this.port.onmessage = (event) => {
620
+ let data = event.data;
621
+ let messageId = data.shift();
622
+ let method = data.shift();
623
+ let result = remoteMethods[method](...data);
624
+ if (result?.transfer) {
625
+ this.port.postMessage([messageId, result.value], result.transfer);
626
+ } else {
627
+ this.port.postMessage([messageId, result]);
628
+ }
629
+ };
630
+ let methodArgCounts = {};
631
+ for (let key in remoteMethods) {
632
+ methodArgCounts[key] = remoteMethods[key].length;
633
+ }
634
+ this.port.postMessage(['ready', methodArgCounts]);
635
+ pendingMessages.forEach(this.port.onmessage);
636
+ pendingMessages = null;
637
+ });
638
+ }
639
+
640
+ config = {
641
+ tonalityHz: 8000,
642
+ };
643
+ configure() {
644
+ if (this.config.blockMs) {
645
+ let blockSamples = Math.round(
646
+ (this.config.blockMs / 1000) * sampleRate
647
+ );
648
+ let intervalSamples = Math.round(
649
+ ((this.config.intervalMs || this.config.blockMs * 0.25) / 1000) *
650
+ sampleRate
651
+ );
652
+ this.wasmModule._configure(
653
+ this.channels,
654
+ blockSamples,
655
+ intervalSamples
656
+ );
657
+ this.wasmModule._reset();
658
+ } else {
659
+ this.wasmModule._presetDefault(this.channels, sampleRate);
660
+ }
661
+ this.updateBuffers();
662
+ this.inputLatencySeconds = this.wasmModule._inputLatency() / sampleRate;
663
+ this.outputLatencySeconds = this.wasmModule._outputLatency() / sampleRate;
664
+ }
665
+
666
+ updateBuffers() {
667
+ let wasmModule = this.wasmModule;
668
+ // longer than one STFT block, so we can seek smoothly
669
+ this.bufferLength =
670
+ wasmModule._inputLatency() + wasmModule._outputLatency();
671
+
672
+ let lengthBytes = this.bufferLength * 4;
673
+ let bufferPointer = wasmModule._setBuffers(
674
+ this.channels,
675
+ this.bufferLength
676
+ );
677
+ this.buffersIn = [];
678
+ this.buffersOut = [];
679
+ for (let c = 0; c < this.channels; ++c) {
680
+ this.buffersIn.push(bufferPointer + lengthBytes * c);
681
+ this.buffersOut.push(bufferPointer + lengthBytes * (c + this.channels));
682
+ }
683
+ }
684
+
685
+ process(inputList, outputList, parameters) {
686
+ if (!this.wasmReady) {
687
+ outputList.forEach((output) => {
688
+ output.forEach((channel) => {
689
+ channel.fill(0);
690
+ });
691
+ });
692
+ return true;
693
+ }
694
+ if (!outputList[0]?.length) return false;
695
+
696
+ let outputTime = currentTime + this.outputLatencySeconds;
697
+ while (this.timeMap.length > 1 && this.timeMap[1].output <= outputTime) {
698
+ this.timeMap.shift();
699
+ }
700
+ let currentMapSegment = this.timeMap[0];
701
+
702
+ let wasmModule = this.wasmModule;
703
+ wasmModule._setTransposeSemitones(
704
+ currentMapSegment.semitones,
705
+ this.config.tonalityHz / sampleRate
706
+ );
707
+
708
+ // Check the input/output channel counts
709
+ if (outputList[0].length != this.channels) {
710
+ this.channels = outputList[0]?.length || 0;
711
+ configure();
712
+ }
713
+ let outputBlockSize = outputList[0][0].length;
714
+
715
+ let memory = wasmModule.exports
716
+ ? wasmModule.exports.memory.buffer
717
+ : wasmModule.HEAP8.buffer;
718
+ // Buffer list (one per channel)
719
+ let inputs = inputList[0];
720
+ if (!currentMapSegment.active) {
721
+ outputList[0].forEach((_, c) => {
722
+ let channelBuffer = inputs[c % inputs.length];
723
+ let buffer = new Float32Array(
724
+ memory,
725
+ this.buffersIn[c],
726
+ outputBlockSize
727
+ );
728
+ buffer.fill(0);
729
+ });
730
+ // Should detect silent input and skip processing
731
+ wasmModule._process(outputBlockSize, outputBlockSize);
732
+ } else if (inputs?.length) {
733
+ // Live input
734
+ outputList[0].forEach((_, c) => {
735
+ let channelBuffer = inputs[c % inputs.length];
736
+ let buffer = new Float32Array(
737
+ memory,
738
+ this.buffersIn[c],
739
+ outputBlockSize
740
+ );
741
+ if (channelBuffer) {
742
+ buffer.set(channelBuffer);
743
+ } else {
744
+ buffer.fill(0);
745
+ }
746
+ });
747
+ wasmModule._process(outputBlockSize, outputBlockSize);
748
+ } else {
749
+ let inputTime =
750
+ currentMapSegment.input +
751
+ (outputTime - currentMapSegment.output) * currentMapSegment.rate;
752
+ let loopLength =
753
+ currentMapSegment.loopEnd - currentMapSegment.loopStart;
754
+ if (loopLength > 0 && inputTime >= currentMapSegment.loopEnd) {
755
+ currentMapSegment.input -= loopLength;
756
+ inputTime -= loopLength;
757
+ }
758
+
759
+ inputTime += this.inputLatencySeconds;
760
+ let inputSamplesEnd = Math.round(inputTime * sampleRate);
761
+
762
+ // Fill the buffer with previous input
763
+ let buffers = outputList[0].map(
764
+ (_, c) =>
765
+ new Float32Array(memory, this.buffersIn[c], this.bufferLength)
766
+ );
767
+
768
+ let blockSamples = 0; // current write position in the temporary input buffer
769
+ let audioBufferIndex = 0;
770
+ let audioSamples = this.audioBuffersStart; // start of current audio buffer
771
+ // zero-pad until the start of the audio data
772
+ let inputSamples = inputSamplesEnd - this.bufferLength;
773
+ if (inputSamples < audioSamples) {
774
+ blockSamples = audioSamples - inputSamples;
775
+ buffers.forEach((b) => b.fill(0, 0, blockSamples));
776
+ inputSamples = audioSamples;
777
+ }
778
+ while (
779
+ audioBufferIndex < this.audioBuffers.length &&
780
+ audioSamples < inputSamplesEnd
781
+ ) {
782
+ let audioBuffer = this.audioBuffers[audioBufferIndex];
783
+ let startIndex = inputSamples - audioSamples; // start index within the audio buffer
784
+ let bufferEnd = audioSamples + audioBuffer[0].length;
785
+ // how many samples to copy: min(how many left in the buffer, how many more we need)
786
+ let count = Math.min(
787
+ audioBuffer[0].length - startIndex,
788
+ inputSamplesEnd - inputSamples
789
+ );
790
+ if (count > 0) {
791
+ buffers.forEach((buffer, c) => {
792
+ let channelBuffer = audioBuffer[c % audioBuffer.length];
793
+ buffer
794
+ .subarray(blockSamples)
795
+ .set(channelBuffer.subarray(startIndex, startIndex + count));
796
+ });
797
+ audioSamples += count;
798
+ blockSamples += count;
799
+ } else {
800
+ // we're already past this buffer - skip it
801
+ audioSamples += audioBuffer[0].length;
802
+ }
803
+ ++audioBufferIndex;
804
+ }
805
+ if (blockSamples < this.bufferLength) {
806
+ buffers.forEach((buffer) => buffer.subarray(blockSamples).fill(0));
807
+ }
808
+
809
+ // constantly seeking, so we don't have to worry about the input buffers needing to be a rate-dependent size
810
+ wasmModule._seek(this.bufferLength, currentMapSegment.rate);
811
+ wasmModule._process(0, outputBlockSize);
812
+
813
+ this.timeIntervalCounter -= outputBlockSize;
814
+ if (this.timeIntervalCounter <= 0) {
815
+ this.timeIntervalCounter = this.timeIntervalSamples;
816
+ this.port.postMessage(['time', inputTime]);
817
+ }
818
+ }
819
+
820
+ // Re-fetch in case the memory changed (even though there *shouldn't* be any allocations)
821
+ memory = wasmModule.exports
822
+ ? wasmModule.exports.memory.buffer
823
+ : wasmModule.HEAP8.buffer;
824
+ outputList[0].forEach((channelBuffer, c) => {
825
+ let buffer = new Float32Array(
826
+ memory,
827
+ this.buffersOut[c],
828
+ outputBlockSize
829
+ );
830
+ channelBuffer.set(buffer);
831
+ });
832
+
833
+ return true;
834
+ }
835
+ }
836
+
837
+ registerProcessor(audioNodeKey, WasmProcessor);
838
+ }
839
+
840
+ /**
841
+ Creates a Stretch node
842
+ @async
843
+ @function SignalsmithStretch
844
+ @param {AudioContext} audioContext
845
+ @param {Object} options - channel configuration (as per [options]{@link https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletNode/AudioWorkletNode#options})
846
+ @returns {Promise<StretchNode>}
847
+ */
848
+ SignalsmithStretch = ((Module, audioNodeKey) => {
849
+ if (
850
+ typeof AudioWorkletProcessor === 'function' &&
851
+ typeof registerProcessor === 'function'
852
+ ) {
853
+ // AudioWorklet side
854
+ registerWorkletProcessor(Module, audioNodeKey);
855
+ return {};
856
+ }
857
+ let promiseKey = Symbol();
858
+ let createNode = async function (audioContext, options) {
859
+ /**
860
+ @classdesc An `AudioWorkletNode` with Signalsmith Stretch extensions
861
+ @name StretchNode
862
+ @augments AudioWorkletNode
863
+ @property {number} inputTime - the current playback (in seconds) within the input audio stored by the node
864
+ */
865
+ let audioNode;
866
+ options = options || {
867
+ numberOfInputs: 1,
868
+ numberOfOutputs: 1,
869
+ outputChannelCount: [2],
870
+ };
871
+ try {
872
+ audioNode = new AudioWorkletNode(audioContext, audioNodeKey, options);
873
+ } catch (e) {
874
+ if (!audioContext[promiseKey]) {
875
+ let moduleUrl = createNode.moduleUrl;
876
+ if (!moduleUrl) {
877
+ let moduleCode = `(${registerWorkletProcessor})((_scriptName=>${Module})(),${JSON.stringify(audioNodeKey)})`;
878
+ moduleUrl = URL.createObjectURL(
879
+ new Blob([moduleCode], { type: 'text/javascript' })
880
+ );
881
+ }
882
+ audioContext[promiseKey] =
883
+ audioContext.audioWorklet.addModule(moduleUrl);
884
+ }
885
+ await audioContext[promiseKey];
886
+ audioNode = new AudioWorkletNode(audioContext, audioNodeKey, options);
887
+ }
888
+
889
+ // messages with Promise responses
890
+ let requestMap = {};
891
+ let idCounter = 0;
892
+ let timeUpdateCallback = null;
893
+ let post = (transfer, ...data) => {
894
+ let id = idCounter++;
895
+ return new Promise((resolve) => {
896
+ requestMap[id] = resolve;
897
+ audioNode.port.postMessage([id].concat(data), transfer);
898
+ });
899
+ };
900
+ audioNode.inputTime = 0;
901
+ audioNode.port.onmessage = (event) => {
902
+ let data = event.data;
903
+ let id = data[0],
904
+ value = data[1];
905
+ if (id == 'time') {
906
+ audioNode.inputTime = value;
907
+ if (timeUpdateCallback) timeUpdateCallback(value);
908
+ }
909
+ if (id in requestMap) {
910
+ requestMap[id](value);
911
+ delete requestMap[id];
912
+ }
913
+ };
914
+
915
+ return new Promise((resolve) => {
916
+ requestMap['ready'] = (remoteMethodKeys) => {
917
+ Object.keys(remoteMethodKeys).forEach((key) => {
918
+ let argCount = remoteMethodKeys[key];
919
+ audioNode[key] = (...args) => {
920
+ let transfer = null;
921
+ if (args.length > argCount) {
922
+ transfer = args.pop();
923
+ }
924
+ return post(transfer, key, ...args);
925
+ };
926
+ });
927
+ /** @lends StretchNode.prototype
928
+ @method setUpdateInterval
929
+ */
930
+ audioNode.setUpdateInterval = (seconds, callback) => {
931
+ timeUpdateCallback = callback;
932
+ return post(null, 'setUpdateInterval', seconds);
933
+ };
934
+ resolve(audioNode);
935
+ };
936
+ });
937
+ };
938
+ return createNode;
939
+ })(SignalsmithStretch, 'signalsmith-stretch');
940
+ // register as a CommonJS/AMD module
941
+ if (typeof exports === 'object' && typeof module === 'object') {
942
+ module.exports = SignalsmithStretch;
943
+ } else if (typeof define === 'function' && define['amd']) {
944
+ define([], () => SignalsmithStretch);
945
+ }