@siteed/audio-studio 3.0.0

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 (375) hide show
  1. package/CHANGELOG.md +535 -0
  2. package/LICENSE +21 -0
  3. package/README.md +167 -0
  4. package/android/build.gradle +143 -0
  5. package/android/src/androidTest/assets/chorus.wav +0 -0
  6. package/android/src/androidTest/assets/jfk.wav +0 -0
  7. package/android/src/androidTest/assets/osr_us_000_0010_8k.wav +0 -0
  8. package/android/src/androidTest/assets/recorder_hello_world.wav +0 -0
  9. package/android/src/androidTest/java/net/siteed/audiostudio/AudioProcessorInstrumentedTest.kt +197 -0
  10. package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderInstrumentedTest.kt +541 -0
  11. package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderPerformanceInstrumentedTest.kt +234 -0
  12. package/android/src/androidTest/java/net/siteed/audiostudio/integration/AudioFocusStrategyIntegrationTest.kt +332 -0
  13. package/android/src/androidTest/java/net/siteed/audiostudio/integration/BufferDurationIntegrationTest.kt +324 -0
  14. package/android/src/androidTest/java/net/siteed/audiostudio/integration/CompressedOnlyOutputTest.kt +253 -0
  15. package/android/src/androidTest/java/net/siteed/audiostudio/integration/DeviceDisconnectionFallbackTest.kt +218 -0
  16. package/android/src/androidTest/java/net/siteed/audiostudio/integration/EventEmissionIntervalTest.kt +120 -0
  17. package/android/src/androidTest/java/net/siteed/audiostudio/integration/M4aFormatTest.kt +345 -0
  18. package/android/src/androidTest/java/net/siteed/audiostudio/integration/OutputControlIntegrationTest.kt +340 -0
  19. package/android/src/androidTest/java/net/siteed/audiostudio/integration/PcmStreamingDurationTest.kt +252 -0
  20. package/android/src/androidTest/java/net/siteed/audiostudio/integration/README.md +95 -0
  21. package/android/src/androidTest/java/net/siteed/audiostudio/integration/run_integration_tests.sh +43 -0
  22. package/android/src/main/AndroidManifest.xml +30 -0
  23. package/android/src/main/CMakeLists.txt +29 -0
  24. package/android/src/main/java/net/siteed/audiostudio/AudioAnalysisData.kt +188 -0
  25. package/android/src/main/java/net/siteed/audiostudio/AudioDataEncoder.kt +9 -0
  26. package/android/src/main/java/net/siteed/audiostudio/AudioDeviceManager.kt +1741 -0
  27. package/android/src/main/java/net/siteed/audiostudio/AudioFeaturesNative.kt +26 -0
  28. package/android/src/main/java/net/siteed/audiostudio/AudioFileHandler.kt +136 -0
  29. package/android/src/main/java/net/siteed/audiostudio/AudioFormatUtils.kt +354 -0
  30. package/android/src/main/java/net/siteed/audiostudio/AudioNotificationsManager.kt +439 -0
  31. package/android/src/main/java/net/siteed/audiostudio/AudioProcessor.kt +2237 -0
  32. package/android/src/main/java/net/siteed/audiostudio/AudioRecorderManager.kt +2163 -0
  33. package/android/src/main/java/net/siteed/audiostudio/AudioRecordingService.kt +167 -0
  34. package/android/src/main/java/net/siteed/audiostudio/AudioStudioModule.kt +1112 -0
  35. package/android/src/main/java/net/siteed/audiostudio/AudioTrimmer.kt +1099 -0
  36. package/android/src/main/java/net/siteed/audiostudio/Constants.kt +37 -0
  37. package/android/src/main/java/net/siteed/audiostudio/EventSender.kt +7 -0
  38. package/android/src/main/java/net/siteed/audiostudio/FFT.kt +100 -0
  39. package/android/src/main/java/net/siteed/audiostudio/Features.kt +98 -0
  40. package/android/src/main/java/net/siteed/audiostudio/LogUtils.kt +93 -0
  41. package/android/src/main/java/net/siteed/audiostudio/MelSpectrogramNative.kt +36 -0
  42. package/android/src/main/java/net/siteed/audiostudio/NotificationConfig.kt +72 -0
  43. package/android/src/main/java/net/siteed/audiostudio/PermissionUtils.kt +68 -0
  44. package/android/src/main/java/net/siteed/audiostudio/RecordingActionReceiver.kt +59 -0
  45. package/android/src/main/java/net/siteed/audiostudio/RecordingConfig.kt +259 -0
  46. package/android/src/main/java/net/siteed/audiostudio/WaveformConfig.kt +19 -0
  47. package/android/src/main/java/net/siteed/audiostudio/WaveformRenderer.kt +159 -0
  48. package/android/src/main/jni/AudioFeaturesJNI.cpp +152 -0
  49. package/android/src/main/jni/MelSpectrogramJNI.cpp +165 -0
  50. package/android/src/main/res/drawable/ic_default_action_icon.xml +16 -0
  51. package/android/src/main/res/drawable/ic_microphone.xml +13 -0
  52. package/android/src/main/res/drawable/ic_pause.xml +10 -0
  53. package/android/src/main/res/drawable/ic_play.xml +10 -0
  54. package/android/src/main/res/drawable/ic_stop.xml +10 -0
  55. package/android/src/main/res/layout/notification_recording.xml +37 -0
  56. package/android/src/test/java/net/siteed/audiostudio/AudioFileHandlerTest.kt +279 -0
  57. package/android/src/test/java/net/siteed/audiostudio/AudioFocusStrategyTest.kt +249 -0
  58. package/android/src/test/java/net/siteed/audiostudio/AudioFormatTest.kt +151 -0
  59. package/android/src/test/java/net/siteed/audiostudio/AudioFormatUtilsTest.kt +273 -0
  60. package/android/src/test/java/net/siteed/audiostudio/DeviceDisconnectionFallbackUnitTest.kt +140 -0
  61. package/android/src/test/resources/chorus.wav +0 -0
  62. package/android/src/test/resources/generate_test_audio.py +94 -0
  63. package/android/src/test/resources/jfk.wav +0 -0
  64. package/android/src/test/resources/osr_us_000_0010_8k.wav +0 -0
  65. package/android/src/test/resources/recorder_hello_world.wav +0 -0
  66. package/app.plugin.js +3 -0
  67. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js +4 -0
  68. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js.map +1 -0
  69. package/build/cjs/AudioAnalysis/audioFeaturesWasm.js +164 -0
  70. package/build/cjs/AudioAnalysis/audioFeaturesWasm.js.map +1 -0
  71. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js +213 -0
  72. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js.map +1 -0
  73. package/build/cjs/AudioAnalysis/extractAudioData.js +21 -0
  74. package/build/cjs/AudioAnalysis/extractAudioData.js.map +1 -0
  75. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js +90 -0
  76. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js.map +1 -0
  77. package/build/cjs/AudioAnalysis/extractPreview.js +28 -0
  78. package/build/cjs/AudioAnalysis/extractPreview.js.map +1 -0
  79. package/build/cjs/AudioAnalysis/extractWaveform.js +18 -0
  80. package/build/cjs/AudioAnalysis/extractWaveform.js.map +1 -0
  81. package/build/cjs/AudioAnalysis/melSpectrogramWasm.js +149 -0
  82. package/build/cjs/AudioAnalysis/melSpectrogramWasm.js.map +1 -0
  83. package/build/cjs/AudioDeviceManager.js +688 -0
  84. package/build/cjs/AudioDeviceManager.js.map +1 -0
  85. package/build/cjs/AudioRecorder.provider.js +78 -0
  86. package/build/cjs/AudioRecorder.provider.js.map +1 -0
  87. package/build/cjs/AudioStudio.native.js +8 -0
  88. package/build/cjs/AudioStudio.native.js.map +1 -0
  89. package/build/cjs/AudioStudio.types.js +11 -0
  90. package/build/cjs/AudioStudio.types.js.map +1 -0
  91. package/build/cjs/AudioStudio.web.js +708 -0
  92. package/build/cjs/AudioStudio.web.js.map +1 -0
  93. package/build/cjs/AudioStudioModule.js +718 -0
  94. package/build/cjs/AudioStudioModule.js.map +1 -0
  95. package/build/cjs/WebRecorder.web.js +865 -0
  96. package/build/cjs/WebRecorder.web.js.map +1 -0
  97. package/build/cjs/constants/platformLimitations.js +99 -0
  98. package/build/cjs/constants/platformLimitations.js.map +1 -0
  99. package/build/cjs/constants.js +20 -0
  100. package/build/cjs/constants.js.map +1 -0
  101. package/build/cjs/events.js +29 -0
  102. package/build/cjs/events.js.map +1 -0
  103. package/build/cjs/hooks/useAudioDevices.js +179 -0
  104. package/build/cjs/hooks/useAudioDevices.js.map +1 -0
  105. package/build/cjs/index.js +64 -0
  106. package/build/cjs/index.js.map +1 -0
  107. package/build/cjs/trimAudio.js +76 -0
  108. package/build/cjs/trimAudio.js.map +1 -0
  109. package/build/cjs/useAudioRecorder.js +535 -0
  110. package/build/cjs/useAudioRecorder.js.map +1 -0
  111. package/build/cjs/utils/BlobFix.js +502 -0
  112. package/build/cjs/utils/BlobFix.js.map +1 -0
  113. package/build/cjs/utils/audioProcessing.js +136 -0
  114. package/build/cjs/utils/audioProcessing.js.map +1 -0
  115. package/build/cjs/utils/cleanNativeOptions.js +22 -0
  116. package/build/cjs/utils/cleanNativeOptions.js.map +1 -0
  117. package/build/cjs/utils/concatenateBuffers.js +25 -0
  118. package/build/cjs/utils/concatenateBuffers.js.map +1 -0
  119. package/build/cjs/utils/convertPCMToFloat32.js +124 -0
  120. package/build/cjs/utils/convertPCMToFloat32.js.map +1 -0
  121. package/build/cjs/utils/crc32.js +52 -0
  122. package/build/cjs/utils/crc32.js.map +1 -0
  123. package/build/cjs/utils/encodingToBitDepth.js +17 -0
  124. package/build/cjs/utils/encodingToBitDepth.js.map +1 -0
  125. package/build/cjs/utils/getWavFileInfo.js +96 -0
  126. package/build/cjs/utils/getWavFileInfo.js.map +1 -0
  127. package/build/cjs/utils/writeWavHeader.js +88 -0
  128. package/build/cjs/utils/writeWavHeader.js.map +1 -0
  129. package/build/cjs/workers/InlineFeaturesExtractor.web.js +294 -0
  130. package/build/cjs/workers/InlineFeaturesExtractor.web.js.map +1 -0
  131. package/build/cjs/workers/inlineAudioWebWorker.web.js +190 -0
  132. package/build/cjs/workers/inlineAudioWebWorker.web.js.map +1 -0
  133. package/build/cjs/workers/wasmGlueString.web.js +27 -0
  134. package/build/cjs/workers/wasmGlueString.web.js.map +1 -0
  135. package/build/esm/AudioAnalysis/AudioAnalysis.types.js +3 -0
  136. package/build/esm/AudioAnalysis/AudioAnalysis.types.js.map +1 -0
  137. package/build/esm/AudioAnalysis/audioFeaturesWasm.js +126 -0
  138. package/build/esm/AudioAnalysis/audioFeaturesWasm.js.map +1 -0
  139. package/build/esm/AudioAnalysis/extractAudioAnalysis.js +205 -0
  140. package/build/esm/AudioAnalysis/extractAudioAnalysis.js.map +1 -0
  141. package/build/esm/AudioAnalysis/extractAudioData.js +14 -0
  142. package/build/esm/AudioAnalysis/extractAudioData.js.map +1 -0
  143. package/build/esm/AudioAnalysis/extractMelSpectrogram.js +86 -0
  144. package/build/esm/AudioAnalysis/extractMelSpectrogram.js.map +1 -0
  145. package/build/esm/AudioAnalysis/extractPreview.js +25 -0
  146. package/build/esm/AudioAnalysis/extractPreview.js.map +1 -0
  147. package/build/esm/AudioAnalysis/extractWaveform.js +11 -0
  148. package/build/esm/AudioAnalysis/extractWaveform.js.map +1 -0
  149. package/build/esm/AudioAnalysis/melSpectrogramWasm.js +111 -0
  150. package/build/esm/AudioAnalysis/melSpectrogramWasm.js.map +1 -0
  151. package/build/esm/AudioDeviceManager.js +681 -0
  152. package/build/esm/AudioDeviceManager.js.map +1 -0
  153. package/build/esm/AudioRecorder.provider.js +40 -0
  154. package/build/esm/AudioRecorder.provider.js.map +1 -0
  155. package/build/esm/AudioStudio.native.js +6 -0
  156. package/build/esm/AudioStudio.native.js.map +1 -0
  157. package/build/esm/AudioStudio.types.js +8 -0
  158. package/build/esm/AudioStudio.types.js.map +1 -0
  159. package/build/esm/AudioStudio.web.js +704 -0
  160. package/build/esm/AudioStudio.web.js.map +1 -0
  161. package/build/esm/AudioStudioModule.js +713 -0
  162. package/build/esm/AudioStudioModule.js.map +1 -0
  163. package/build/esm/WebRecorder.web.js +861 -0
  164. package/build/esm/WebRecorder.web.js.map +1 -0
  165. package/build/esm/constants/platformLimitations.js +90 -0
  166. package/build/esm/constants/platformLimitations.js.map +1 -0
  167. package/build/esm/constants.js +17 -0
  168. package/build/esm/constants.js.map +1 -0
  169. package/build/esm/events.js +21 -0
  170. package/build/esm/events.js.map +1 -0
  171. package/build/esm/hooks/useAudioDevices.js +176 -0
  172. package/build/esm/hooks/useAudioDevices.js.map +1 -0
  173. package/build/esm/index.js +23 -0
  174. package/build/esm/index.js.map +1 -0
  175. package/build/esm/trimAudio.js +69 -0
  176. package/build/esm/trimAudio.js.map +1 -0
  177. package/build/esm/useAudioRecorder.js +529 -0
  178. package/build/esm/useAudioRecorder.js.map +1 -0
  179. package/build/esm/utils/BlobFix.js +498 -0
  180. package/build/esm/utils/BlobFix.js.map +1 -0
  181. package/build/esm/utils/audioProcessing.js +133 -0
  182. package/build/esm/utils/audioProcessing.js.map +1 -0
  183. package/build/esm/utils/cleanNativeOptions.js +19 -0
  184. package/build/esm/utils/cleanNativeOptions.js.map +1 -0
  185. package/build/esm/utils/concatenateBuffers.js +21 -0
  186. package/build/esm/utils/concatenateBuffers.js.map +1 -0
  187. package/build/esm/utils/convertPCMToFloat32.js +120 -0
  188. package/build/esm/utils/convertPCMToFloat32.js.map +1 -0
  189. package/build/esm/utils/crc32.js +50 -0
  190. package/build/esm/utils/crc32.js.map +1 -0
  191. package/build/esm/utils/encodingToBitDepth.js +13 -0
  192. package/build/esm/utils/encodingToBitDepth.js.map +1 -0
  193. package/build/esm/utils/getWavFileInfo.js +92 -0
  194. package/build/esm/utils/getWavFileInfo.js.map +1 -0
  195. package/build/esm/utils/writeWavHeader.js +84 -0
  196. package/build/esm/utils/writeWavHeader.js.map +1 -0
  197. package/build/esm/workers/InlineFeaturesExtractor.web.js +291 -0
  198. package/build/esm/workers/InlineFeaturesExtractor.web.js.map +1 -0
  199. package/build/esm/workers/inlineAudioWebWorker.web.js +187 -0
  200. package/build/esm/workers/inlineAudioWebWorker.web.js.map +1 -0
  201. package/build/esm/workers/wasmGlueString.web.js +24 -0
  202. package/build/esm/workers/wasmGlueString.web.js.map +1 -0
  203. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts +198 -0
  204. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts.map +1 -0
  205. package/build/types/AudioAnalysis/audioFeaturesWasm.d.ts +24 -0
  206. package/build/types/AudioAnalysis/audioFeaturesWasm.d.ts.map +1 -0
  207. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts +74 -0
  208. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts.map +1 -0
  209. package/build/types/AudioAnalysis/extractAudioData.d.ts +3 -0
  210. package/build/types/AudioAnalysis/extractAudioData.d.ts.map +1 -0
  211. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts +20 -0
  212. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts.map +1 -0
  213. package/build/types/AudioAnalysis/extractPreview.d.ts +11 -0
  214. package/build/types/AudioAnalysis/extractPreview.d.ts.map +1 -0
  215. package/build/types/AudioAnalysis/extractWaveform.d.ts +8 -0
  216. package/build/types/AudioAnalysis/extractWaveform.d.ts.map +1 -0
  217. package/build/types/AudioAnalysis/melSpectrogramWasm.d.ts +16 -0
  218. package/build/types/AudioAnalysis/melSpectrogramWasm.d.ts.map +1 -0
  219. package/build/types/AudioDeviceManager.d.ts +187 -0
  220. package/build/types/AudioDeviceManager.d.ts.map +1 -0
  221. package/build/types/AudioRecorder.provider.d.ts +11 -0
  222. package/build/types/AudioRecorder.provider.d.ts.map +1 -0
  223. package/build/types/AudioStudio.native.d.ts +3 -0
  224. package/build/types/AudioStudio.native.d.ts.map +1 -0
  225. package/build/types/AudioStudio.types.d.ts +760 -0
  226. package/build/types/AudioStudio.types.d.ts.map +1 -0
  227. package/build/types/AudioStudio.web.d.ts +96 -0
  228. package/build/types/AudioStudio.web.d.ts.map +1 -0
  229. package/build/types/AudioStudioModule.d.ts +3 -0
  230. package/build/types/AudioStudioModule.d.ts.map +1 -0
  231. package/build/types/WebRecorder.web.d.ts +208 -0
  232. package/build/types/WebRecorder.web.d.ts.map +1 -0
  233. package/build/types/constants/platformLimitations.d.ts +40 -0
  234. package/build/types/constants/platformLimitations.d.ts.map +1 -0
  235. package/build/types/constants.d.ts +14 -0
  236. package/build/types/constants.d.ts.map +1 -0
  237. package/build/types/events.d.ts +29 -0
  238. package/build/types/events.d.ts.map +1 -0
  239. package/build/types/hooks/useAudioDevices.d.ts +15 -0
  240. package/build/types/hooks/useAudioDevices.d.ts.map +1 -0
  241. package/build/types/index.d.ts +21 -0
  242. package/build/types/index.d.ts.map +1 -0
  243. package/build/types/trimAudio.d.ts +25 -0
  244. package/build/types/trimAudio.d.ts.map +1 -0
  245. package/build/types/useAudioRecorder.d.ts +22 -0
  246. package/build/types/useAudioRecorder.d.ts.map +1 -0
  247. package/build/types/utils/BlobFix.d.ts +9 -0
  248. package/build/types/utils/BlobFix.d.ts.map +1 -0
  249. package/build/types/utils/audioProcessing.d.ts +24 -0
  250. package/build/types/utils/audioProcessing.d.ts.map +1 -0
  251. package/build/types/utils/cleanNativeOptions.d.ts +15 -0
  252. package/build/types/utils/cleanNativeOptions.d.ts.map +1 -0
  253. package/build/types/utils/concatenateBuffers.d.ts +8 -0
  254. package/build/types/utils/concatenateBuffers.d.ts.map +1 -0
  255. package/build/types/utils/convertPCMToFloat32.d.ts +13 -0
  256. package/build/types/utils/convertPCMToFloat32.d.ts.map +1 -0
  257. package/build/types/utils/crc32.d.ts +7 -0
  258. package/build/types/utils/crc32.d.ts.map +1 -0
  259. package/build/types/utils/encodingToBitDepth.d.ts +5 -0
  260. package/build/types/utils/encodingToBitDepth.d.ts.map +1 -0
  261. package/build/types/utils/getWavFileInfo.d.ts +26 -0
  262. package/build/types/utils/getWavFileInfo.d.ts.map +1 -0
  263. package/build/types/utils/writeWavHeader.d.ts +34 -0
  264. package/build/types/utils/writeWavHeader.d.ts.map +1 -0
  265. package/build/types/workers/InlineFeaturesExtractor.web.d.ts +2 -0
  266. package/build/types/workers/InlineFeaturesExtractor.web.d.ts.map +1 -0
  267. package/build/types/workers/inlineAudioWebWorker.web.d.ts +2 -0
  268. package/build/types/workers/inlineAudioWebWorker.web.d.ts.map +1 -0
  269. package/build/types/workers/wasmGlueString.web.d.ts +2 -0
  270. package/build/types/workers/wasmGlueString.web.d.ts.map +1 -0
  271. package/cpp/AudioFeatures.cpp +274 -0
  272. package/cpp/AudioFeatures.h +85 -0
  273. package/cpp/AudioFeaturesBridge.cpp +146 -0
  274. package/cpp/AudioFeaturesBridge.h +47 -0
  275. package/cpp/MelSpectrogram.cpp +227 -0
  276. package/cpp/MelSpectrogram.h +82 -0
  277. package/cpp/MelSpectrogramBridge.cpp +112 -0
  278. package/cpp/MelSpectrogramBridge.h +33 -0
  279. package/cpp/kiss_fft/COPYING +11 -0
  280. package/cpp/kiss_fft/_kiss_fft_guts.h +167 -0
  281. package/cpp/kiss_fft/kiss_fft.c +424 -0
  282. package/cpp/kiss_fft/kiss_fft.h +160 -0
  283. package/cpp/kiss_fft/kiss_fft_log.h +36 -0
  284. package/cpp/kiss_fft/kiss_fftr.c +155 -0
  285. package/cpp/kiss_fft/kiss_fftr.h +54 -0
  286. package/expo-module.config.json +10 -0
  287. package/ios/AudioAnalysisData.swift +74 -0
  288. package/ios/AudioDeviceManager.swift +670 -0
  289. package/ios/AudioFeaturesWrapper.h +21 -0
  290. package/ios/AudioFeaturesWrapper.mm +63 -0
  291. package/ios/AudioNotificationManager.swift +154 -0
  292. package/ios/AudioProcessingHelpers.swift +797 -0
  293. package/ios/AudioProcessor.swift +1191 -0
  294. package/ios/AudioStreamError.swift +7 -0
  295. package/ios/AudioStreamManager.swift +2369 -0
  296. package/ios/AudioStreamManagerDelegate.swift +16 -0
  297. package/ios/AudioStudio.podspec +39 -0
  298. package/ios/AudioStudioModule.swift +1111 -0
  299. package/ios/AudioStudioTests/AudioFileHandlerTests.swift +338 -0
  300. package/ios/AudioStudioTests/AudioFormatUtilsTests.swift +331 -0
  301. package/ios/AudioStudioTests/AudioTestHelpers.swift +130 -0
  302. package/ios/AudioStudioTests/CompressedOnlyOutputTests.swift +294 -0
  303. package/ios/AudioStudioTests/EventEmissionIntervalTests.swift +105 -0
  304. package/ios/AudioStudioTests/Info.plist +22 -0
  305. package/ios/AudioStudioTests/README.md +39 -0
  306. package/ios/AudioStudioTests/SimpleAudioTest.swift +98 -0
  307. package/ios/AudioStudioTests/TestAudioGenerator.swift +75 -0
  308. package/ios/DataPoint.swift +54 -0
  309. package/ios/DecodingConfig.swift +59 -0
  310. package/ios/FFT.swift +62 -0
  311. package/ios/Features.swift +95 -0
  312. package/ios/ISSUE_IOS.md +68 -0
  313. package/ios/Logger.swift +39 -0
  314. package/ios/MelSpectrogramWrapper.h +30 -0
  315. package/ios/MelSpectrogramWrapper.mm +97 -0
  316. package/ios/NotificationExtension.swift +15 -0
  317. package/ios/RecordingResult.swift +22 -0
  318. package/ios/RecordingSettings.swift +311 -0
  319. package/ios/WaveformExtractor.swift +105 -0
  320. package/ios/tests/README.md +41 -0
  321. package/ios/tests/integration/buffer_and_fallback_test.swift +178 -0
  322. package/ios/tests/integration/buffer_duration_test.swift +185 -0
  323. package/ios/tests/integration/compressed_only_output_test.swift +271 -0
  324. package/ios/tests/integration/output_control_test.swift +322 -0
  325. package/ios/tests/integration/run_integration_tests.sh +37 -0
  326. package/ios/tests/opus_support_test_macos.swift +154 -0
  327. package/ios/tests/standalone/audio_processing_test.swift +144 -0
  328. package/ios/tests/standalone/audio_recording_test.swift +277 -0
  329. package/ios/tests/standalone/audio_streaming_test.swift +249 -0
  330. package/ios/tests/standalone/standalone_test.swift +144 -0
  331. package/package.json +146 -0
  332. package/plugin/build/index.cjs +194 -0
  333. package/plugin/build/index.d.cts +22 -0
  334. package/plugin/build/index.js +194 -0
  335. package/plugin/src/index.ts +285 -0
  336. package/plugin/tsconfig.json +10 -0
  337. package/plugin/tsconfig.tsbuildinfo +1 -0
  338. package/prebuilt/wasm/mel-spectrogram.js +18 -0
  339. package/src/AudioAnalysis/AudioAnalysis.types.ts +226 -0
  340. package/src/AudioAnalysis/audio-features-wasm.d.ts +37 -0
  341. package/src/AudioAnalysis/audioFeaturesWasm.ts +200 -0
  342. package/src/AudioAnalysis/extractAudioAnalysis.ts +350 -0
  343. package/src/AudioAnalysis/extractAudioData.ts +17 -0
  344. package/src/AudioAnalysis/extractMelSpectrogram.ts +140 -0
  345. package/src/AudioAnalysis/extractPreview.ts +34 -0
  346. package/src/AudioAnalysis/extractWaveform.ts +22 -0
  347. package/src/AudioAnalysis/mel-spectrogram-wasm.d.ts +48 -0
  348. package/src/AudioAnalysis/melSpectrogramWasm.ts +179 -0
  349. package/src/AudioDeviceManager.ts +800 -0
  350. package/src/AudioRecorder.provider.tsx +57 -0
  351. package/src/AudioStudio.native.ts +6 -0
  352. package/src/AudioStudio.types.ts +899 -0
  353. package/src/AudioStudio.web.ts +911 -0
  354. package/src/AudioStudioModule.ts +984 -0
  355. package/src/WebRecorder.web.ts +1114 -0
  356. package/src/constants/platformLimitations.ts +118 -0
  357. package/src/constants.ts +21 -0
  358. package/src/events.ts +63 -0
  359. package/src/hooks/useAudioDevices.ts +213 -0
  360. package/src/index.ts +67 -0
  361. package/src/trimAudio.ts +94 -0
  362. package/src/types/crc-32.d.ts +9 -0
  363. package/src/useAudioRecorder.tsx +784 -0
  364. package/src/utils/BlobFix.ts +561 -0
  365. package/src/utils/audioProcessing.ts +205 -0
  366. package/src/utils/cleanNativeOptions.ts +18 -0
  367. package/src/utils/concatenateBuffers.ts +24 -0
  368. package/src/utils/convertPCMToFloat32.ts +170 -0
  369. package/src/utils/crc32.ts +59 -0
  370. package/src/utils/encodingToBitDepth.ts +18 -0
  371. package/src/utils/getWavFileInfo.ts +132 -0
  372. package/src/utils/writeWavHeader.ts +115 -0
  373. package/src/workers/InlineFeaturesExtractor.web.tsx +291 -0
  374. package/src/workers/inlineAudioWebWorker.web.tsx +186 -0
  375. package/src/workers/wasmGlueString.web.ts +23 -0
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InlineAudioWebWorker = void 0;
4
+ // packages/audio-studio/src/workers/inlineAudioWebWorker.web.tsx
5
+ exports.InlineAudioWebWorker = `
6
+ const DEFAULT_BIT_DEPTH = 32
7
+ const DEFAULT_SAMPLE_RATE = 44100
8
+
9
+ class RecorderProcessor extends AudioWorkletProcessor {
10
+ constructor() {
11
+ super()
12
+ this.currentChunk = [] // Float32Array
13
+ this.samplesSinceLastExport = 0
14
+ this.recordSampleRate = DEFAULT_SAMPLE_RATE
15
+ this.exportSampleRate = DEFAULT_SAMPLE_RATE
16
+ this.recordBitDepth = DEFAULT_BIT_DEPTH
17
+ this.exportBitDepth = DEFAULT_BIT_DEPTH
18
+ this.numberOfChannels = 1
19
+ this.isRecording = true
20
+ this.port.onmessage = this.handleMessage.bind(this)
21
+ this.enableLogging = false
22
+ this.exportIntervalSamples = 0
23
+ this.currentPosition = 0 // Track current position in seconds
24
+ this.streamFormat = 'raw'
25
+ }
26
+
27
+ handleMessage(event) {
28
+ switch (event.data.command) {
29
+ case 'init':
30
+ this.enableLogging = event.data.enableLogging || false
31
+ this.recordSampleRate = event.data.recordSampleRate
32
+ this.exportSampleRate =
33
+ event.data.exportSampleRate || event.data.recordSampleRate
34
+ this.exportIntervalSamples =
35
+ this.recordSampleRate * (event.data.interval / 1000)
36
+ if (event.data.numberOfChannels) {
37
+ this.numberOfChannels = event.data.numberOfChannels
38
+ }
39
+ if (event.data.recordBitDepth) {
40
+ this.recordBitDepth = event.data.recordBitDepth
41
+ }
42
+ this.exportBitDepth =
43
+ event.data.exportBitDepth || this.recordBitDepth
44
+ this.streamFormat = event.data.streamFormat || 'raw'
45
+
46
+ // Handle position parameter for device switching
47
+ if (typeof event.data.position === 'number' && event.data.position > 0) {
48
+ this.currentPosition = event.data.position
49
+ if (this.enableLogging) {
50
+ console.log('AudioWorklet initialized with position:', this.currentPosition)
51
+ }
52
+ }
53
+ break
54
+
55
+ case 'stop':
56
+ this.isRecording = false
57
+ if (this.currentChunk.length > 0) {
58
+ this.processChunk()
59
+ }
60
+ break
61
+
62
+ case 'pause':
63
+ // Just a placeholder for pause handling
64
+ break
65
+
66
+ case 'resume':
67
+ // Just a placeholder for resume handling
68
+ break
69
+ }
70
+ }
71
+
72
+ process(inputs, _outputs, _parameters) {
73
+ if (!this.isRecording) return true
74
+ const input = inputs[0]
75
+ if (input.length > 0) {
76
+ const newBuffer = new Float32Array(input[0])
77
+ this.currentChunk.push(newBuffer)
78
+ this.samplesSinceLastExport += newBuffer.length
79
+
80
+ if (this.samplesSinceLastExport >= this.exportIntervalSamples) {
81
+ this.processChunk()
82
+ this.samplesSinceLastExport = 0
83
+ }
84
+ }
85
+ return true
86
+ }
87
+
88
+ mergeBuffers(bufferArray, recLength) {
89
+ const result = new Float32Array(recLength)
90
+ let offset = 0
91
+ for (let i = 0; i < bufferArray.length; i++) {
92
+ result.set(bufferArray[i], offset)
93
+ offset += bufferArray[i].length
94
+ }
95
+ return result
96
+ }
97
+
98
+ // Keep basic resampling for sample rate conversion
99
+ resample(samples, targetSampleRate) {
100
+ if (this.recordSampleRate === targetSampleRate) {
101
+ return samples
102
+ }
103
+ const resampledBuffer = new Float32Array(
104
+ Math.ceil(
105
+ (samples.length * targetSampleRate) / this.recordSampleRate
106
+ )
107
+ )
108
+ const ratio = this.recordSampleRate / targetSampleRate
109
+ let offset = 0
110
+ for (let i = 0; i < resampledBuffer.length; i++) {
111
+ const nextOffset = Math.floor((i + 1) * ratio)
112
+ let accum = 0
113
+ let count = 0
114
+ for (let j = offset; j < nextOffset && j < samples.length; j++) {
115
+ accum += samples[j]
116
+ count++
117
+ }
118
+ resampledBuffer[i] = count > 0 ? accum / count : 0
119
+ offset = nextOffset
120
+ }
121
+ return resampledBuffer
122
+ }
123
+
124
+ // Keep bit depth conversion if needed
125
+ convertBitDepth(input, targetBitDepth) {
126
+ if (targetBitDepth === 32) {
127
+ const output = new Int32Array(input.length)
128
+ for (let i = 0; i < input.length; i++) {
129
+ const s = Math.max(-1, Math.min(1, input[i]))
130
+ output[i] = s < 0 ? s * 0x80000000 : s * 0x7fffffff
131
+ }
132
+ return output
133
+ } else if (targetBitDepth === 16) {
134
+ const output = new Int16Array(input.length)
135
+ for (let i = 0; i < input.length; i++) {
136
+ const s = Math.max(-1, Math.min(1, input[i]))
137
+ output[i] = s < 0 ? s * 0x8000 : s * 0x7fff
138
+ }
139
+ return output
140
+ }
141
+ return input
142
+ }
143
+
144
+ processChunk() {
145
+ if (this.currentChunk.length === 0) return
146
+
147
+ // Merge buffers
148
+ const chunkLength = this.currentChunk.reduce(
149
+ (acc, buf) => acc + buf.length,
150
+ 0
151
+ )
152
+ const mergedChunk = this.mergeBuffers(this.currentChunk, chunkLength)
153
+
154
+ // Resample if needed
155
+ const resampledChunk = this.resample(mergedChunk, this.exportSampleRate)
156
+
157
+ // Convert bit depth if needed (used for file storage format)
158
+ const finalBuffer =
159
+ this.recordBitDepth !== this.exportBitDepth
160
+ ? this.convertBitDepth(resampledChunk, this.exportBitDepth)
161
+ : resampledChunk
162
+
163
+ // For float32 stream format, send the resampled Float32 data directly
164
+ // (skipping the bit-depth conversion roundtrip)
165
+ const streamData = this.streamFormat === 'float32' ? resampledChunk : finalBuffer
166
+
167
+ // Calculate the duration in seconds
168
+ const chunkDuration = resampledChunk.length / this.exportSampleRate
169
+
170
+ // Send processed chunk with the current position
171
+ this.port.postMessage({
172
+ command: 'newData',
173
+ recordedData: streamData,
174
+ sampleRate: this.exportSampleRate,
175
+ bitDepth: this.exportBitDepth,
176
+ numberOfChannels: this.numberOfChannels,
177
+ position: this.currentPosition,
178
+ })
179
+
180
+ // Update the position
181
+ this.currentPosition += chunkDuration
182
+
183
+ // Clear the current chunk
184
+ this.currentChunk = []
185
+ }
186
+ }
187
+
188
+ registerProcessor('recorder-processor', RecorderProcessor)
189
+ `;
190
+ //# sourceMappingURL=inlineAudioWebWorker.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlineAudioWebWorker.web.js","sourceRoot":"","sources":["../../../src/workers/inlineAudioWebWorker.web.tsx"],"names":[],"mappings":";;;AAAA,iEAAiE;AACpD,QAAA,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwLnC,CAAA","sourcesContent":["// packages/audio-studio/src/workers/inlineAudioWebWorker.web.tsx\nexport const InlineAudioWebWorker = `\nconst DEFAULT_BIT_DEPTH = 32\nconst DEFAULT_SAMPLE_RATE = 44100\n\nclass RecorderProcessor extends AudioWorkletProcessor {\n constructor() {\n super()\n this.currentChunk = [] // Float32Array\n this.samplesSinceLastExport = 0\n this.recordSampleRate = DEFAULT_SAMPLE_RATE\n this.exportSampleRate = DEFAULT_SAMPLE_RATE\n this.recordBitDepth = DEFAULT_BIT_DEPTH\n this.exportBitDepth = DEFAULT_BIT_DEPTH\n this.numberOfChannels = 1\n this.isRecording = true\n this.port.onmessage = this.handleMessage.bind(this)\n this.enableLogging = false\n this.exportIntervalSamples = 0\n this.currentPosition = 0 // Track current position in seconds\n this.streamFormat = 'raw'\n }\n\n handleMessage(event) {\n switch (event.data.command) {\n case 'init':\n this.enableLogging = event.data.enableLogging || false\n this.recordSampleRate = event.data.recordSampleRate\n this.exportSampleRate =\n event.data.exportSampleRate || event.data.recordSampleRate\n this.exportIntervalSamples =\n this.recordSampleRate * (event.data.interval / 1000)\n if (event.data.numberOfChannels) {\n this.numberOfChannels = event.data.numberOfChannels\n }\n if (event.data.recordBitDepth) {\n this.recordBitDepth = event.data.recordBitDepth\n }\n this.exportBitDepth =\n event.data.exportBitDepth || this.recordBitDepth\n this.streamFormat = event.data.streamFormat || 'raw'\n \n // Handle position parameter for device switching\n if (typeof event.data.position === 'number' && event.data.position > 0) {\n this.currentPosition = event.data.position\n if (this.enableLogging) {\n console.log('AudioWorklet initialized with position:', this.currentPosition)\n }\n }\n break\n\n case 'stop':\n this.isRecording = false\n if (this.currentChunk.length > 0) {\n this.processChunk()\n }\n break\n \n case 'pause':\n // Just a placeholder for pause handling\n break\n \n case 'resume':\n // Just a placeholder for resume handling\n break\n }\n }\n\n process(inputs, _outputs, _parameters) {\n if (!this.isRecording) return true\n const input = inputs[0]\n if (input.length > 0) {\n const newBuffer = new Float32Array(input[0])\n this.currentChunk.push(newBuffer)\n this.samplesSinceLastExport += newBuffer.length\n\n if (this.samplesSinceLastExport >= this.exportIntervalSamples) {\n this.processChunk()\n this.samplesSinceLastExport = 0\n }\n }\n return true\n }\n\n mergeBuffers(bufferArray, recLength) {\n const result = new Float32Array(recLength)\n let offset = 0\n for (let i = 0; i < bufferArray.length; i++) {\n result.set(bufferArray[i], offset)\n offset += bufferArray[i].length\n }\n return result\n }\n\n // Keep basic resampling for sample rate conversion\n resample(samples, targetSampleRate) {\n if (this.recordSampleRate === targetSampleRate) {\n return samples\n }\n const resampledBuffer = new Float32Array(\n Math.ceil(\n (samples.length * targetSampleRate) / this.recordSampleRate\n )\n )\n const ratio = this.recordSampleRate / targetSampleRate\n let offset = 0\n for (let i = 0; i < resampledBuffer.length; i++) {\n const nextOffset = Math.floor((i + 1) * ratio)\n let accum = 0\n let count = 0\n for (let j = offset; j < nextOffset && j < samples.length; j++) {\n accum += samples[j]\n count++\n }\n resampledBuffer[i] = count > 0 ? accum / count : 0\n offset = nextOffset\n }\n return resampledBuffer\n }\n\n // Keep bit depth conversion if needed\n convertBitDepth(input, targetBitDepth) {\n if (targetBitDepth === 32) {\n const output = new Int32Array(input.length)\n for (let i = 0; i < input.length; i++) {\n const s = Math.max(-1, Math.min(1, input[i]))\n output[i] = s < 0 ? s * 0x80000000 : s * 0x7fffffff\n }\n return output\n } else if (targetBitDepth === 16) {\n const output = new Int16Array(input.length)\n for (let i = 0; i < input.length; i++) {\n const s = Math.max(-1, Math.min(1, input[i]))\n output[i] = s < 0 ? s * 0x8000 : s * 0x7fff\n }\n return output\n }\n return input\n }\n\n processChunk() {\n if (this.currentChunk.length === 0) return\n\n // Merge buffers\n const chunkLength = this.currentChunk.reduce(\n (acc, buf) => acc + buf.length,\n 0\n )\n const mergedChunk = this.mergeBuffers(this.currentChunk, chunkLength)\n\n // Resample if needed\n const resampledChunk = this.resample(mergedChunk, this.exportSampleRate)\n\n // Convert bit depth if needed (used for file storage format)\n const finalBuffer =\n this.recordBitDepth !== this.exportBitDepth\n ? this.convertBitDepth(resampledChunk, this.exportBitDepth)\n : resampledChunk\n\n // For float32 stream format, send the resampled Float32 data directly\n // (skipping the bit-depth conversion roundtrip)\n const streamData = this.streamFormat === 'float32' ? resampledChunk : finalBuffer\n\n // Calculate the duration in seconds\n const chunkDuration = resampledChunk.length / this.exportSampleRate\n\n // Send processed chunk with the current position\n this.port.postMessage({\n command: 'newData',\n recordedData: streamData,\n sampleRate: this.exportSampleRate,\n bitDepth: this.exportBitDepth,\n numberOfChannels: this.numberOfChannels,\n position: this.currentPosition,\n })\n \n // Update the position\n this.currentPosition += chunkDuration\n\n // Clear the current chunk\n this.currentChunk = []\n }\n}\n\nregisterProcessor('recorder-processor', RecorderProcessor)\n`\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wasmGlueJs = void 0;
4
+ // AUTO-GENERATED by build-wasm.sh — do not edit manually.
5
+ // Contains the Emscripten WASM glue JS (with embedded base64 wasm binary)
6
+ // for loading inside web workers.
7
+ /* eslint-disable */
8
+ exports.wasmGlueJs = `
9
+ var createMelSpectrogramModule = (() => {
10
+ var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
11
+
12
+ return (
13
+ function(moduleArg = {}) {
14
+
15
+ var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(typeof WebAssembly!="object"){abort("no native wasm support detected")}function intArrayFromBase64(s){var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABvAEcYAF/AX9gAX8AYAN/f38Bf2ADf39/AGAGf39/f39/AGAEf39/fwBgAX0BfWAAAGACf38Bf2AFf39/f38AYAV/f39/fwF/YAJ/fwBgAAF/YAF8AXxgAXwBfWABfwF9YAN/fn8BfmAEf39/fwF/YAx/f39/f39/fX1/f38Bf2AIf39/f399fX8AYAh/f39/f39/fwF/YAJ8fAF8YAJ8fwF/YAN8fH8BfGACf30BfWABfQF/YAABfWACfH8BfAK8AQcDZW52C19fY3hhX3Rocm93AAMDZW52FGVtc2NyaXB0ZW5fbWVtY3B5X2pzAAMWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAAFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAEQNlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAAA2VudgVhYm9ydAAHFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAKA11cBwMEAAMICwsHAwsABwEBEgETAgwIAAUBFAEBBAIMFQoWFw0ODgYCCBgGDw8ZAAEBAgMGGgYGBhsNAAACEAAAAAEAAAABAgIIAwUFBQMJCQQEAAAAAAABAAwBAAoEBQFwAR8fBQcBAYACgIACBg0CfwFB0LgEC38BQQALB7sDFQZtZW1vcnkCABFfX3dhc21fY2FsbF9jdG9ycwAHBm1hbGxvYwBGBGZyZWUARxlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQAXbWVsX3NwZWN0cm9ncmFtX2NvbXB1dGUAFhRtZWxfc3BlY3Ryb2dyYW1fZnJlZQAXFG1lbF9zcGVjdHJvZ3JhbV9pbml0ABgdbWVsX3NwZWN0cm9ncmFtX2NvbXB1dGVfZnJhbWUAGRptZWxfc3BlY3Ryb2dyYW1fZ2V0X25fbWVscwAaFmF1ZGlvX2ZlYXR1cmVzX2NvbXB1dGUAHxNhdWRpb19mZWF0dXJlc19mcmVlACAaYXVkaW9fZmVhdHVyZXNfZnJlZV9hcnJheXMAIRNhdWRpb19mZWF0dXJlc19pbml0ACIcYXVkaW9fZmVhdHVyZXNfY29tcHV0ZV9mcmFtZQAjGWF1ZGlvX2ZlYXR1cmVzX2dldF9uX21mY2MAJAlzdGFja1NhdmUAXwxzdGFj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ACABIAMgAkQAAGAaYbTQPaIiAKEiBSACRHNwAy6KGaM7oiADIAWhIAChoSIEoSIAOQMAIAkgAL1CNIinQf8PcWtBMkgEQCAFIQMMAQsgASAFIAJEAAAALooZozuiIgChIgMgAkTBSSAlmoN7OaIgBSADoSAAoaEiBKEiADkDAAsgASADIAChIAShOQMIDAELIAhBgIDA/wdPBEAgASAAIAChIgA5AwAgASAAOQMIQQAhBgwBCyALQv////////8Hg0KAgICAgICAsMEAhL8hAEEAIQZBASEJA0AgB0EQaiAGQQN0agJ/IACZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4C7ciAjkDACAAIAKhRAAAAAAAAHBBoiEAQQEhBiAJQQFxIQpBACEJIAoNAAsgByAAOQMgQQIhBgNAIAYiCUEBayEGIAdBEGogCUEDdGorAwBEAAAAAAAAAABhDQALIAdBEGogByAIQRR2QZYIayAJQQFqQQEQJiEGIAcrAwAhACALQgBTBEAgASAAmjkDACABIAcrAwiaOQMIQQAgBmshBgwBCyABIAA5AwAgASAHKwMIOQMICyAHQTBqJAAgBguZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAMgAKIhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAUgBKKhoiABoSAERElVVVVVVcU/oqChC70BAgF8An8jAEEQayICJAACfCAAvUIgiKdB/////wdxIgNB+8Ok/wNNBEBEAAAAAAAA8D8gA0GewZryA0kNARogAEQAAAAAAAAAABAlDAELIAAgAKEgA0GAgMD/B08NABogACACECchAyACKwMIIQAgAisDACEBAkACQAJAAkAgA0EDcQ4DAAECAwsgASAAECUMAwsgASAAQQEQKJoMAgsgASAAECWaDAELIAEgAEEBECgLIQEgAkEQaiQAIAELTwEBfCAAIACiIgAgACAAoiIBoiAARGlQ7uBCk/k+okQnHg/oh8BWv6CiIAFEQjoF4VNVpT+iIABEgV4M/f//37+iRAAAAAAAAPA/oKCgtgtLAQJ8IAAgAKIiASAAoiICIAEgAaKiIAFE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NgIMIAAgA2ogBzYCAEH0NEH0NCgCAEEBayIDQX8gAxs2AgALCzUBAX9BASAAIABBAU0bIQECQANAIAEQRiIADQFBxDgoAgAiAARAIAARBwAMAQsLEAUACyAACwwAIABB2C82AgAgAAsOACAAQdAAahBGQdAAagsGACAAEEcLdAEBfyACRQRAIAAoAgQgASgCBEYPCyAAIAFGBEBBAQ8LIAEoAgQiAi0AACEBAkAgACgCBCIDLQAAIgBFDQAgACABRw0AA0AgAi0AASEBIAMtAAEiAEUNASACQQFqIQIgA0EBaiEDIAAgAUYNAAsLIAAgAUYLmgEBAX8jAEFAaiIDJAACf0EBIAAgAUEAEEwNABpBACABRQ0AGkEAIAFBuC0QTiIBRQ0AGiADQQxqQTQQLhogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEFACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQAgA0FAayQAIAALhQMBBH8jAEHwAGsiAiQAIAAoAgAiA0EEaygCACEEIANBCGsoAgAhAyACQgA3AlAgAkIANwJYIAJCADcCYCACQgA3AGcgAkIANwJIIAJBADYCRCACQYgtNgJAIAIgADYCPCACIAE2AjggACADaiEFAkAgBCABQQAQTARAQQAgBSADGyEADAELIAAgBU4EQCACQgA3AC8gAkEYaiIDQgA3AgAgAkIANwIgIAJCADcCKCACQgA3AhAgAkEANgIMIAIgATYCCCACIAA2AgQgAiAENgIAIAJBATYCMCAEIAIgBSAFQQFBACAEKAIAKAIUEQQAIAMoAgANAQtBACEAIAQgAkE4aiAFQQFBACAEKAIAKAIYEQkAAkACQCACKAJcDgIAAQILIAIoAkxBACACKAJYQQFGG0EAIAIoAlRBAUYbQQAgAigCYEEBRhshAAwBCyACKAJQQQFHBEAgAigCYA0BIAIoAlRBAUcNASACKAJYQQFHDQELIAIoAkghAAsgAkHwAGokACAAC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCwsYACAAIAEoAghBABBMBEAgASACIAMQTwsLMQAgACABKAIIQQAQTARAIAEgAiADEE8PCyAAKAIIIgAgASACIAMgACgCACgCHBEFAAuaAQAgAEEBOgA1AkAgACgCBCACRw0AIABBAToANAJAIAAoAhAiAkUEQCAAQQE2AiQgACADNgIYIAAgATYCECADQQFHDQIgACgCMEEBRg0BDAILIAEgAkYEQCAAKAIYIgJBAkYEQCAAIAM2AhggAyECCyAAKAIwQQFHDQIgAkEBRg0BDAILIAAgACgCJEEBajYCJAsgAEEBOgA2CwsgAAJAIAAoAgQgAUcNACAAKAIcQQFGDQAgACACNgIcCwvyAQAgACABKAIIIAQQTARAIAEgAiADEFMPCwJAIAAgASgCACAEEEwEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBEEACABLQA1BEAgAUEDNgIsIAEtADRFDQEMAwsgAUEENgIsCyABIAI2AhQgASABKAIoQQFqNgIoIAEoAiRBAUcNASABKAIYQQJHDQEgAUEBOgA2DwsgACgCCCIAIAEgAiADIAQgACgCACgCGBEJAAsLkQEAIAAgASgCCCAEEEwEQCABIAIgAxBTDwsCQCAAIAEoAgAgBBBMRQ0AAkAgAiABKAIQRwRAIAEoAhQgAkcNAQsgA0EBRw0BIAFBATYCIA8LIAEgAjYCFCABIAM2AiAgASABKAIoQQFqNgIoAkAgASgCJEEBRw0AIAEoAhhBAkcNACABQQE6ADYLIAFBBDYCLAsLNwAgACABKAIIIAUQTARAIAEgAiADIAQQUg8LIAAoAggiACABIAIgAyAEIAUgACgCACgCFBEEAAsaACAAIAEoAgggBRBMBEAgASACIAMgBBBSCwsVACAARQRAQQAPCyAAQZguEE5BAEcLBQBBhwgLBQBBvQgLBQBBlggLOQECfyAAQcgwNgIAIABBBGooAgBBDGsiAkEIaiIBIAEoAgBBAWsiATYCACABQQBIBEAgAhBHCyAACwsAIAAQXBogABBHCwoAIABBBGooAgALBAAjAAsGACAAJAALEAAjACAAa0FwcSIAJAAgAAsiAQF+IAEgAq0gA61CIIaEIAQgABEQACIFQiCIpyQBIAWnCwv3KQkAQYAIC4cFdmVjdG9yAHN0ZDo6ZXhjZXB0aW9uAGJhZF9hcnJheV9uZXdfbGVuZ3RoAG11dGV4IGxvY2sgZmFpbGVkAHN0ZDo6YmFkX2FsbG9jAGtpc3MgZmZ0IHVzYWdlIGVycm9yOiBpbXByb3BlciBhbGxvYwBNZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4AUmVhbCBGRlQgb3B0aW1pemF0aW9uIG11c3QgYmUgZXZlbi4ATWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgBmb3V0IGJ1ZmZlciBOVUxMLgBbRVJST1JdIC9Vc2Vycy9kZWVlZWQvZGV2L2F1ZGlvbGFiL3BhY2thZ2VzL2F1ZGlvLXN0dWRpby9jcHAva2lzc19mZnQva2lzc19mZnQuYzozODcgAFtFUlJPUl0gL1VzZXJzL2RlZWVlZC9kZXYvYXVkaW9sYWIvcGFja2FnZXMvYXVkaW8tc3R1ZGlvL2NwcC9raXNzX2ZmdC9raXNzX2ZmdC5jOjIwNyAAW0VSUk9SXSAvVXNlcnMvZGVlZWVkL2Rldi9hdWRpb2xhYi9wYWNrYWdlcy9hdWRpby1zdHVkaW8vY3BwL2tpc3NfZmZ0L2tpc3NfZmZ0LmM6MzgxIABbRVJST1JdIC9Vc2Vycy9kZWVlZWQvZGV2L2F1ZGlvbGFiL3BhY2thZ2VzL2F1ZGlvLXN0dWRpby9jcHAva2lzc19mZnQva2lzc19mZnRyLmM6NzAgAFtFUlJPUl0gL1VzZXJzL2RlZWVlZC9kZXYvYXVkaW9sYWIvcGFja2FnZXMvYXVkaW8tc3R1ZGlvL2NwcC9raXNzX2ZmdC9raXNzX2ZmdHIuYzozMCAAQZANC9cVAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBGT7cAnmY/AC3qXwC6J3UA5evHAD178QD3OQcAklKKAPtr6gAfsV8ACF2NADADVgB7/EYA8KtrACC8zwA29JoA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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(\`failed to asynchronously prepare wasm: \${reason}\`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];updateMemoryViews();addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(\`Module.instantiateWasm callback failed with error: \${e}\`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":abort("to do getValue(i64) use WASM_BIGINT");case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(\`invalid type for getValue: \${type}\`)}}var noExitRuntime=Module["noExitRuntime"]||true;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught}get_caught(){return HEAP8[this.ptr+12>>0]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown}get_rethrown(){return HEAP8[this.ptr+13>>0]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}get_exception_ptr(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var _abort=()=>{abort("")};var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _fd_close=fd=>52;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);return 70}var printCharBuffers=[null,[],[]];var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={"string":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},"array":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}};var wasmImports={__cxa_throw:___cxa_throw,abort:_abort,emscripten_memcpy_js:_emscripten_memcpy_js,emscripten_resize_heap:_emscripten_resize_heap,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["malloc"])(a0);var _free=Module["_free"]=a0=>(_free=Module["_free"]=wasmExports["free"])(a0);var _mel_spectrogram_compute=Module["_mel_spectrogram_compute"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)=>(_mel_spectrogram_compute=Module["_mel_spectrogram_compute"]=wasmExports["mel_spectrogram_compute"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);var _mel_spectrogram_free=Module["_mel_spectrogram_free"]=a0=>(_mel_spectrogram_free=Module["_mel_spectrogram_free"]=wasmExports["mel_spectrogram_free"])(a0);var _mel_spectrogram_init=Module["_mel_spectrogram_init"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_mel_spectrogram_init=Module["_mel_spectrogram_init"]=wasmExports["mel_spectrogram_init"])(a0,a1,a2,a3,a4,a5,a6,a7);var _mel_spectrogram_compute_frame=Module["_mel_spectrogram_compute_frame"]=(a0,a1,a2)=>(_mel_spectrogram_compute_frame=Module["_mel_spectrogram_compute_frame"]=wasmExports["mel_spectrogram_compute_frame"])(a0,a1,a2);var _mel_spectrogram_get_n_mels=Module["_mel_spectrogram_get_n_mels"]=()=>(_mel_spectrogram_get_n_mels=Module["_mel_spectrogram_get_n_mels"]=wasmExports["mel_spectrogram_get_n_mels"])();var _audio_features_compute=Module["_audio_features_compute"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_audio_features_compute=Module["_audio_features_compute"]=wasmExports["audio_features_compute"])(a0,a1,a2,a3,a4,a5,a6,a7);var _audio_features_free=Module["_audio_features_free"]=a0=>(_audio_features_free=Module["_audio_features_free"]=wasmExports["audio_features_free"])(a0);var _audio_features_free_arrays=Module["_audio_features_free_arrays"]=a0=>(_audio_features_free_arrays=Module["_audio_features_free_arrays"]=wasmExports["audio_features_free_arrays"])(a0);var _audio_features_init=Module["_audio_features_init"]=(a0,a1,a2,a3,a4,a5)=>(_audio_features_init=Module["_audio_features_init"]=wasmExports["audio_features_init"])(a0,a1,a2,a3,a4,a5);var _audio_features_compute_frame=Module["_audio_features_compute_frame"]=(a0,a1,a2)=>(_audio_features_compute_frame=Module["_audio_features_compute_frame"]=wasmExports["audio_features_compute_frame"])(a0,a1,a2);var _audio_features_get_n_mfcc=Module["_audio_features_get_n_mfcc"]=()=>(_audio_features_get_n_mfcc=Module["_audio_features_get_n_mfcc"]=wasmExports["audio_features_get_n_mfcc"])();var stackSave=()=>(stackSave=wasmExports["stackSave"])();var stackRestore=a0=>(stackRestore=wasmExports["stackRestore"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["stackAlloc"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["__cxa_is_pointer_type"])(a0);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["dynCall_jiji"])(a0,a1,a2,a3,a4);Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();
16
+
17
+
18
+ return moduleArg.ready
19
+ }
20
+ );
21
+ })();
22
+ if (typeof exports === 'object' && typeof module === 'object')
23
+ module.exports = createMelSpectrogramModule;
24
+ else if (typeof define === 'function' && define['amd'])
25
+ define([], () => createMelSpectrogramModule);
26
+ `;
27
+ //# sourceMappingURL=wasmGlueString.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmGlueString.web.js","sourceRoot":"","sources":["../../../src/workers/wasmGlueString.web.ts"],"names":[],"mappings":";;;AAAA,0DAA0D;AAC1D,0EAA0E;AAC1E,kCAAkC;AAClC,oBAAoB;AACP,QAAA,UAAU,GAAW;;;;;;;;;;;;;;;;;;CAkBjC,CAAC","sourcesContent":["// AUTO-GENERATED by build-wasm.sh — do not edit manually.\n// Contains the Emscripten WASM glue JS (with embedded base64 wasm binary)\n// for loading inside web workers.\n/* eslint-disable */\nexport const wasmGlueJs: string = `\nvar createMelSpectrogramModule = (() => {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n \n return (\nfunction(moduleArg = {}) {\n\nvar Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts==\"function\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith(\"blob:\")){scriptDirectory=\"\"}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(typeof WebAssembly!=\"object\"){abort(\"no native wasm support detected\")}function intArrayFromBase64(s){var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module[\"HEAP8\"]=HEAP8=new Int8Array(b);Module[\"HEAP16\"]=HEAP16=new Int16Array(b);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(b);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(b);Module[\"HEAP32\"]=HEAP32=new Int32Array(b);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(b);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(b);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module[\"monitorRunDependencies\"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module[\"monitorRunDependencies\"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;EXITSTATUS=1;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix=\"data:application/octet-stream;base64,\";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var wasmBinaryFile;wasmBinaryFile=\"data:application/octet-stream;base64,AGFzbQEAAAABvAEcYAF/AX9gAX8AYAN/f38Bf2ADf39/AGAGf39/f39/AGAEf39/fwBgAX0BfWAAAGACf38Bf2AFf39/f38AYAV/f39/fwF/YAJ/fwBgAAF/YAF8AXxgAXwBfWABfwF9YAN/fn8BfmAEf39/fwF/YAx/f39/f39/fX1/f38Bf2AIf39/f399fX8AYAh/f39/f39/fwF/YAJ8fAF8YAJ8fwF/YAN8fH8BfGACf30BfWABfQF/YAABfWACfH8BfAK8AQcDZW52C19fY3hhX3Rocm93AAMDZW52FGVtc2NyaXB0ZW5fbWVtY3B5X2pzAAMWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAAFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAEQNlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAAA2VudgVhYm9ydAAHFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAKA11cBwMEAAMICwsHAwsABwEBEgETAgwIAAUBFAEBBAIMFQoWFw0ODgYCCBgGDw8ZAAEBAgMGGgYGBhsNAAACEAAAAAEAAAABAgIIAwUFBQMJCQQEAAAAAAABAAwBAAoEBQFwAR8fBQcBAYACgIACBg0CfwFB0LgEC38BQQALB7sDFQZtZW1vcnkCABFfX3dhc21fY2FsbF9jdG9ycwAHBm1hbGxvYwBGBGZyZWUARxlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQAXbWVsX3NwZWN0cm9ncmFtX2NvbXB1dGUAFhRtZWxfc3BlY3Ryb2dyYW1fZnJlZQAXFG1lbF9zcGVjdHJvZ3JhbV9pbml0ABgdbWVsX3NwZWN0cm9ncmFtX2NvbXB1dGVfZnJhbWUAGRptZWxfc3BlY3Ryb2dyYW1fZ2V0X25fbWVscwAaFmF1ZGlvX2ZlYXR1cmVzX2NvbXB1dGUAHxNhdWRpb19mZWF0dXJlc19mcmVlACAaYXVkaW9fZmVhdHVyZXNfZnJlZV9hcnJheXMAIRNhdWRpb19mZWF0dXJlc19pbml0ACIcYXVkaW9fZmVhdHVyZXNfY29tcHV0ZV9mcmFtZQAjGWF1ZGlvX2ZlYXR1cmVzX2dldF9uX21mY2MAJAlzdGFja1NhdmUAXwxzdGFj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ACABIAMgAkQAAGAaYbTQPaIiAKEiBSACRHNwAy6KGaM7oiADIAWhIAChoSIEoSIAOQMAIAkgAL1CNIinQf8PcWtBMkgEQCAFIQMMAQsgASAFIAJEAAAALooZozuiIgChIgMgAkTBSSAlmoN7OaIgBSADoSAAoaEiBKEiADkDAAsgASADIAChIAShOQMIDAELIAhBgIDA/wdPBEAgASAAIAChIgA5AwAgASAAOQMIQQAhBgwBCyALQv////////8Hg0KAgICAgICAsMEAhL8hAEEAIQZBASEJA0AgB0EQaiAGQQN0agJ/IACZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4C7ciAjkDACAAIAKhRAAAAAAAAHBBoiEAQQEhBiAJQQFxIQpBACEJIAoNAAsgByAAOQMgQQIhBgNAIAYiCUEBayEGIAdBEGogCUEDdGorAwBEAAAAAAAAAABhDQALIAdBEGogByAIQRR2QZYIayAJQQFqQQEQJiEGIAcrAwAhACALQgBTBEAgASAAmjkDACABIAcrAwiaOQMIQQAgBmshBgwBCyABIAA5AwAgASAHKwMIOQMICyAHQTBqJAAgBguZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAMgAKIhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAUgBKKhoiABoSAERElVVVVVVcU/oqChC70BAgF8An8jAEEQayICJAACfCAAvUIgiKdB/////wdxIgNB+8Ok/wNNBEBEAAAAAAAA8D8gA0GewZryA0kNARogAEQAAAAAAAAAABAlDAELIAAgAKEgA0GAgMD/B08NABogACACECchAyACKwMIIQAgAisDACEBAkACQAJAAkAgA0EDcQ4DAAECAwsgASAAECUMAwsgASAAQQEQKJoMAgsgASAAECWaDAELIAEgAEEBECgLIQEgAkEQaiQAIAELTwEBfCAAIACiIgAgACAAoiIBoiAARGlQ7uBCk/k+okQnHg/oh8BWv6CiIAFEQjoF4VNVpT+iIABEgV4M/f//37+iRAAAAAAAAPA/oKCgtgtLAQJ8IAAgAKIiASAAoiICIAEgAaKiIAFE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NgIMIAAgA2ogBzYCAEH0NEH0NCgCAEEBayIDQX8gAxs2AgALCzUBAX9BASAAIABBAU0bIQECQANAIAEQRiIADQFBxDgoAgAiAARAIAARBwAMAQsLEAUACyAACwwAIABB2C82AgAgAAsOACAAQdAAahBGQdAAagsGACAAEEcLdAEBfyACRQRAIAAoAgQgASgCBEYPCyAAIAFGBEBBAQ8LIAEoAgQiAi0AACEBAkAgACgCBCIDLQAAIgBFDQAgACABRw0AA0AgAi0AASEBIAMtAAEiAEUNASACQQFqIQIgA0EBaiEDIAAgAUYNAAsLIAAgAUYLmgEBAX8jAEFAaiIDJAACf0EBIAAgAUEAEEwNABpBACABRQ0AGkEAIAFBuC0QTiIBRQ0AGiADQQxqQTQQLhogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEFACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQAgA0FAayQAIAALhQMBBH8jAEHwAGsiAiQAIAAoAgAiA0EEaygCACEEIANBCGsoAgAhAyACQgA3AlAgAkIANwJYIAJCADcCYCACQgA3AGcgAkIANwJIIAJBADYCRCACQYgtNgJAIAIgADYCPCACIAE2AjggACADaiEFAkAgBCABQQAQTARAQQAgBSADGyEADAELIAAgBU4EQCACQgA3AC8gAkEYaiIDQgA3AgAgAkIANwIgIAJCADcCKCACQgA3AhAgAkEANgIMIAIgATYCCCACIAA2AgQgAiAENgIAIAJBATYCMCAEIAIgBSAFQQFBACAEKAIAKAIUEQQAIAMoAgANAQtBACEAIAQgAkE4aiAFQQFBACAEKAIAKAIYEQkAAkACQCACKAJcDgIAAQILIAIoAkxBACACKAJYQQFGG0EAIAIoAlRBAUYbQQAgAigCYEEBRhshAAwBCyACKAJQQQFHBEAgAigCYA0BIAIoAlRBAUcNASACKAJYQQFHDQELIAIoAkghAAsgAkHwAGokACAAC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCwsYACAAIAEoAghBABBMBEAgASACIAMQTwsLMQAgACABKAIIQQAQTARAIAEgAiADEE8PCyAAKAIIIgAgASACIAMgACgCACgCHBEFAAuaAQAgAEEBOgA1AkAgACgCBCACRw0AIABBAToANAJAIAAoAhAiAkUEQCAAQQE2AiQgACADNgIYIAAgATYCECADQQFHDQIgACgCMEEBRg0BDAILIAEgAkYEQCAAKAIYIgJBAkYEQCAAIAM2AhggAyECCyAAKAIwQQFHDQIgAkEBRg0BDAILIAAgACgCJEEBajYCJAsgAEEBOgA2CwsgAAJAIAAoAgQgAUcNACAAKAIcQQFGDQAgACACNgIcCwvyAQAgACABKAIIIAQQTARAIAEgAiADEFMPCwJAIAAgASgCACAEEEwEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBEEACABLQA1BEAgAUEDNgIsIAEtADRFDQEMAwsgAUEENgIsCyABIAI2AhQgASABKAIoQQFqNgIoIAEoAiRBAUcNASABKAIYQQJHDQEgAUEBOgA2DwsgACgCCCIAIAEgAiADIAQgACgCACgCGBEJAAsLkQEAIAAgASgCCCAEEEwEQCABIAIgAxBTDwsCQCAAIAEoAgAgBBBMRQ0AAkAgAiABKAIQRwRAIAEoAhQgAkcNAQsgA0EBRw0BIAFBATYCIA8LIAEgAjYCFCABIAM2AiAgASABKAIoQQFqNgIoAkAgASgCJEEBRw0AIAEoAhhBAkcNACABQQE6ADYLIAFBBDYCLAsLNwAgACABKAIIIAUQTARAIAEgAiADIAQQUg8LIAAoAggiACABIAIgAyAEIAUgACgCACgCFBEEAAsaACAAIAEoAgggBRBMBEAgASACIAMgBBBSCwsVACAARQRAQQAPCyAAQZguEE5BAEcLBQBBhwgLBQBBvQgLBQBBlggLOQECfyAAQcgwNgIAIABBBGooAgBBDGsiAkEIaiIBIAEoAgBBAWsiATYCACABQQBIBEAgAhBHCyAACwsAIAAQXBogABBHCwoAIABBBGooAgALBAAjAAsGACAAJAALEAAjACAAa0FwcSIAJAAgAAsiAQF+IAEgAq0gA61CIIaEIAQgABEQACIFQiCIpyQBIAWnCwv3KQkAQYAIC4cFdmVjdG9yAHN0ZDo6ZXhjZXB0aW9uAGJhZF9hcnJheV9uZXdfbGVuZ3RoAG11dGV4IGxvY2sgZmFpbGVkAHN0ZDo6YmFkX2FsbG9jAGtpc3MgZmZ0IHVzYWdlIGVycm9yOiBpbXByb3BlciBhbGxvYwBNZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4AUmVhbCBGRlQgb3B0aW1pemF0aW9uIG11c3QgYmUgZXZlbi4ATWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgBmb3V0IGJ1ZmZlciBOVUxMLgBbRVJST1JdIC9Vc2Vycy9kZWVlZWQvZGV2L2F1ZGlvbGFiL3BhY2thZ2VzL2F1ZGlvLXN0dWRpby9jcHAva2lzc19mZnQva2lzc19mZnQuYzozODcgAFtFUlJPUl0gL1VzZXJzL2RlZWVlZC9kZXYvYXVkaW9sYWIvcGFja2FnZXMvYXVkaW8tc3R1ZGlvL2NwcC9raXNzX2ZmdC9raXNzX2ZmdC5jOjIwNyAAW0VSUk9SXSAvVXNlcnMvZGVlZWVkL2Rldi9hdWRpb2xhYi9wYWNrYWdlcy9hdWRpby1zdHVkaW8vY3BwL2tpc3NfZmZ0L2tpc3NfZmZ0LmM6MzgxIABbRVJST1JdIC9Vc2Vycy9kZWVlZWQvZGV2L2F1ZGlvbGFiL3BhY2thZ2VzL2F1ZGlvLXN0dWRpby9jcHAva2lzc19mZnQva2lzc19mZnRyLmM6NzAgAFtFUlJPUl0gL1VzZXJzL2RlZWVlZC9kZXYvYXVkaW9sYWIvcGFja2FnZXMvYXVkaW8tc3R1ZGlvL2NwcC9raXNzX2ZmdC9raXNzX2ZmdHIuYzozMCAAQZANC9cVAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBGT7cAnmY/AC3qXwC6J3UA5evHAD178QD3OQcAklKKAPtr6gAfsV8ACF2NADADVgB7/EYA8KtrACC8zwA29JoA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\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}function getBinaryPromise(binaryFile){return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(\\`failed to asynchronously prepare wasm: \\${reason}\\`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={\"env\":wasmImports,\"wasi_snapshot_preview1\":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports[\"memory\"];updateMemoryViews();addOnInit(wasmExports[\"__wasm_call_ctors\"]);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){receiveInstance(result[\"instance\"])}if(Module[\"instantiateWasm\"]){try{return Module[\"instantiateWasm\"](info,receiveInstance)}catch(e){err(\\`Module.instantiateWasm callback failed with error: \\${e}\\`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};function getValue(ptr,type=\"i8\"){if(type.endsWith(\"*\"))type=\"*\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":abort(\"to do getValue(i64) use WASM_BIGINT\");case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];case\"*\":return HEAPU32[ptr>>2];default:abort(\\`invalid type for getValue: \\${type}\\`)}}var noExitRuntime=Module[\"noExitRuntime\"]||true;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught}get_caught(){return HEAP8[this.ptr+12>>0]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown}get_rethrown(){return HEAP8[this.ptr+13>>0]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}get_exception_ptr(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var _abort=()=>{abort(\"\")};var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _fd_close=fd=>52;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);return 70}var printCharBuffers=[null,[],[]];var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\";var SYSCALLS={varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var getCFunc=ident=>{var func=Module[\"_\"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={\"string\":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},\"array\":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}};var wasmImports={__cxa_throw:___cxa_throw,abort:_abort,emscripten_memcpy_js:_emscripten_memcpy_js,emscripten_resize_heap:_emscripten_resize_heap,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports[\"__wasm_call_ctors\"])();var _malloc=Module[\"_malloc\"]=a0=>(_malloc=Module[\"_malloc\"]=wasmExports[\"malloc\"])(a0);var _free=Module[\"_free\"]=a0=>(_free=Module[\"_free\"]=wasmExports[\"free\"])(a0);var _mel_spectrogram_compute=Module[\"_mel_spectrogram_compute\"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)=>(_mel_spectrogram_compute=Module[\"_mel_spectrogram_compute\"]=wasmExports[\"mel_spectrogram_compute\"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);var _mel_spectrogram_free=Module[\"_mel_spectrogram_free\"]=a0=>(_mel_spectrogram_free=Module[\"_mel_spectrogram_free\"]=wasmExports[\"mel_spectrogram_free\"])(a0);var _mel_spectrogram_init=Module[\"_mel_spectrogram_init\"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_mel_spectrogram_init=Module[\"_mel_spectrogram_init\"]=wasmExports[\"mel_spectrogram_init\"])(a0,a1,a2,a3,a4,a5,a6,a7);var _mel_spectrogram_compute_frame=Module[\"_mel_spectrogram_compute_frame\"]=(a0,a1,a2)=>(_mel_spectrogram_compute_frame=Module[\"_mel_spectrogram_compute_frame\"]=wasmExports[\"mel_spectrogram_compute_frame\"])(a0,a1,a2);var _mel_spectrogram_get_n_mels=Module[\"_mel_spectrogram_get_n_mels\"]=()=>(_mel_spectrogram_get_n_mels=Module[\"_mel_spectrogram_get_n_mels\"]=wasmExports[\"mel_spectrogram_get_n_mels\"])();var _audio_features_compute=Module[\"_audio_features_compute\"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_audio_features_compute=Module[\"_audio_features_compute\"]=wasmExports[\"audio_features_compute\"])(a0,a1,a2,a3,a4,a5,a6,a7);var _audio_features_free=Module[\"_audio_features_free\"]=a0=>(_audio_features_free=Module[\"_audio_features_free\"]=wasmExports[\"audio_features_free\"])(a0);var _audio_features_free_arrays=Module[\"_audio_features_free_arrays\"]=a0=>(_audio_features_free_arrays=Module[\"_audio_features_free_arrays\"]=wasmExports[\"audio_features_free_arrays\"])(a0);var _audio_features_init=Module[\"_audio_features_init\"]=(a0,a1,a2,a3,a4,a5)=>(_audio_features_init=Module[\"_audio_features_init\"]=wasmExports[\"audio_features_init\"])(a0,a1,a2,a3,a4,a5);var _audio_features_compute_frame=Module[\"_audio_features_compute_frame\"]=(a0,a1,a2)=>(_audio_features_compute_frame=Module[\"_audio_features_compute_frame\"]=wasmExports[\"audio_features_compute_frame\"])(a0,a1,a2);var _audio_features_get_n_mfcc=Module[\"_audio_features_get_n_mfcc\"]=()=>(_audio_features_get_n_mfcc=Module[\"_audio_features_get_n_mfcc\"]=wasmExports[\"audio_features_get_n_mfcc\"])();var stackSave=()=>(stackSave=wasmExports[\"stackSave\"])();var stackRestore=a0=>(stackRestore=wasmExports[\"stackRestore\"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports[\"stackAlloc\"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports[\"__cxa_is_pointer_type\"])(a0);var dynCall_jiji=Module[\"dynCall_jiji\"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module[\"dynCall_jiji\"]=wasmExports[\"dynCall_jiji\"])(a0,a1,a2,a3,a4);Module[\"ccall\"]=ccall;Module[\"cwrap\"]=cwrap;Module[\"getValue\"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();\n\n\n return moduleArg.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = createMelSpectrogramModule;\nelse if (typeof define === 'function' && define['amd'])\n define([], () => createMelSpectrogramModule);\n`;\n"]}
@@ -0,0 +1,3 @@
1
+ // packages/audio-studio/src/AudioAnalysis/AudioAnalysis.types.ts
2
+ export {};
3
+ //# sourceMappingURL=AudioAnalysis.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioAnalysis.types.js","sourceRoot":"","sources":["../../../src/AudioAnalysis/AudioAnalysis.types.ts"],"names":[],"mappings":"AAAA,iEAAiE","sourcesContent":["// packages/audio-studio/src/AudioAnalysis/AudioAnalysis.types.ts\n\nimport { BitDepth, ConsoleLike } from '../AudioStudio.types'\n\n/**\n * Represents the configuration for decoding audio data.\n */\nexport interface DecodingConfig {\n /** Target sample rate for decoded audio (Android and Web) */\n targetSampleRate?: number\n /** Target number of channels (Android and Web) */\n targetChannels?: number\n /** Target bit depth (Android and Web) */\n targetBitDepth?: BitDepth\n /** Whether to normalize audio levels (Android and Web) */\n normalizeAudio?: boolean\n}\n\n/**\n * Represents speech-related features extracted from audio.\n */\nexport interface SpeechFeatures {\n isActive: boolean // Whether speech is detected in this segment\n speakerId?: number // Optional speaker identification\n // Could add more speech-related features here like:\n // confidence: number\n // language?: string\n // sentiment?: number\n // etc.\n}\n\n/**\n * Represents various audio features extracted from an audio signal.\n */\nexport interface AudioFeatures {\n energy?: number // The infinite integral of the squared signal, representing the overall energy of the audio.\n mfcc?: number[] // Mel-frequency cepstral coefficients, describing the short-term power spectrum of a sound.\n rms?: number // Root mean square value, indicating the amplitude of the audio signal.\n minAmplitude?: number // Minimum amplitude value in the audio signal.\n maxAmplitude?: number // Maximum amplitude value in the audio signal.\n zcr?: number // Zero-crossing rate, indicating the rate at which the signal changes sign.\n spectralCentroid?: number // The center of mass of the spectrum, indicating the brightness of the sound.\n spectralFlatness?: number // Measure of the flatness of the spectrum, indicating how noise-like the signal is.\n spectralRolloff?: number // The frequency below which a specified percentage (usually 85%) of the total spectral energy lies.\n spectralBandwidth?: number // The width of the spectrum, indicating the range of frequencies present.\n chromagram?: number[] // Chromagram, representing the 12 different pitch classes of the audio.\n tempo?: number // Estimated tempo of the audio signal, measured in beats per minute (BPM).\n hnr?: number // Harmonics-to-noise ratio, indicating the proportion of harmonics to noise in the audio signal.\n melSpectrogram?: number[] // Mel-scaled spectrogram representation of the audio.\n spectralContrast?: number[] // Spectral contrast features representing the difference between peaks and valleys.\n tonnetz?: number[] // Tonal network features representing harmonic relationships.\n pitch?: number // Pitch of the audio signal, measured in Hertz (Hz).\n crc32?: number // crc32 checksum of the audio signal, used to verify the integrity of the audio.\n}\n\n/**\n * Options to specify which audio features to extract.\n * Note: Advanced features (spectral features, chromagram, pitch, etc.) are experimental,\n * especially during live recording, due to high processing requirements.\n */\nexport interface AudioFeaturesOptions {\n // Basic features - well optimized\n energy?: boolean\n rms?: boolean\n zcr?: boolean\n\n // Advanced features - experimental, may impact performance in live recording\n mfcc?: boolean\n spectralCentroid?: boolean\n spectralFlatness?: boolean\n spectralRolloff?: boolean\n spectralBandwidth?: boolean\n chromagram?: boolean\n tempo?: boolean\n hnr?: boolean\n melSpectrogram?: boolean\n spectralContrast?: boolean\n tonnetz?: boolean\n pitch?: boolean\n\n // Utility\n crc32?: boolean\n}\n\n/**\n * Represents a single data point in the audio analysis.\n */\nexport interface DataPoint {\n id: number\n amplitude: number // Peak amplitude for the segment\n rms: number // Root mean square value\n dB: number // dBFS (decibels relative to full scale) computed from RMS value\n silent: boolean // Always computed\n features?: AudioFeatures\n speech?: SpeechFeatures\n startTime?: number\n endTime?: number\n // start / end position in bytes\n startPosition?: number\n endPosition?: number\n // number of audio samples for this point (samples size depends on bit depth)\n samples?: number\n}\n\n/**\n * Represents the complete data from the audio analysis.\n */\nexport interface AudioAnalysis {\n segmentDurationMs: number // Duration of each segment in milliseconds\n durationMs: number // Duration of the audio in milliseconds\n /**\n * Bit depth used for audio analysis processing.\n *\n * **Important**: This represents the internal processing bit depth, which may differ\n * from the recording bit depth. Audio is typically converted to 32-bit float for\n * analysis to ensure precision in calculations, regardless of the original recording format.\n *\n * Platform behavior:\n * - iOS: Always 32 (float processing)\n * - Android: Always 32 (float processing)\n * - Web: Always 32 (Web Audio API standard)\n *\n * The actual recorded file will maintain the requested bit depth (8, 16, or 32).\n */\n bitDepth: number\n samples: number // Size of the audio in bytes\n numberOfChannels: number // Number of audio channels\n sampleRate: number // Sample rate of the audio\n dataPoints: DataPoint[] // Array of data points from the analysis.\n amplitudeRange: {\n min: number\n max: number\n }\n rmsRange: {\n min: number\n max: number\n }\n extractionTimeMs: number // Time taken to extract/process the analysis in milliseconds\n // TODO: speaker changes into a broader speech analysis section\n speechAnalysis?: {\n speakerChanges: {\n timestamp: number\n speakerId: number\n }[]\n // Could add more speech analysis data here like:\n // dominantSpeaker?: number\n // totalSpeechDuration?: number\n // speakerStats?: { [speakerId: number]: { duration: number, segments: number } }\n }\n}\n\n/**\n * Options for specifying a time range within an audio file.\n */\nexport interface AudioRangeOptions {\n /** Start time in milliseconds */\n startTimeMs?: number\n /** End time in milliseconds */\n endTimeMs?: number\n}\n\n/**\n * Options for generating a quick preview of audio waveform.\n * This is optimized for UI rendering with a specified number of points.\n */\nexport interface PreviewOptions extends AudioRangeOptions {\n /** URI of the audio file to analyze */\n fileUri: string\n /**\n * Total number of points to generate for the preview.\n * @default 100\n */\n numberOfPoints?: number\n /**\n * Optional logger for debugging.\n */\n logger?: ConsoleLike\n /**\n * Optional configuration for decoding the audio file.\n * Defaults to:\n * - targetSampleRate: undefined (keep original)\n * - targetChannels: undefined (keep original)\n * - targetBitDepth: 16\n * - normalizeAudio: false\n */\n decodingOptions?: DecodingConfig\n}\n\n/**\n * Options for mel-spectrogram extraction\n *\n * @experimental This feature is experimental and currently only available on Android.\n * The API may change in future versions.\n */\nexport interface ExtractMelSpectrogramOptions {\n fileUri?: string // Path to audio file\n arrayBuffer?: ArrayBuffer // Raw audio buffer\n windowSizeMs: number // Window size in ms (e.g., 25)\n hopLengthMs: number // Hop length in ms (e.g., 10)\n nMels: number // Number of mel filters (e.g., 60)\n fMin?: number // Min frequency (default: 0)\n fMax?: number // Max frequency (default: sampleRate / 2)\n windowType?: 'hann' | 'hamming' // Window function (default: 'hann')\n normalize?: boolean // Mean normalization (default: false)\n logScale?: boolean // Log scaling of mel energies (default: true)\n decodingOptions?: DecodingConfig // Audio decoding settings\n /** Optional start time in ms. If neither startTimeMs nor endTimeMs is set, defaults to 0. */\n startTimeMs?: number\n /** Optional end time in ms. Clamped so that the range does not exceed MAX_DURATION_MS (30 s). */\n endTimeMs?: number\n logger?: ConsoleLike\n}\n\n/**\n * Return type for mel spectrogram extraction\n *\n * @experimental This feature is experimental and currently only available on Android.\n * The API may change in future versions.\n */\nexport interface MelSpectrogram {\n spectrogram: number[][] // 2D array [time][mel]\n sampleRate: number // Audio sample rate\n nMels: number // Number of mel filters\n timeSteps: number // Number of time frames\n durationMs: number // Audio duration in ms\n}\n"]}