@siteed/expo-audio-studio 2.18.5 → 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 (329) hide show
  1. package/README.md +13 -297
  2. package/index.d.ts +1 -0
  3. package/index.js +1 -0
  4. package/package.json +6 -135
  5. package/CHANGELOG.md +0 -493
  6. package/LICENSE +0 -21
  7. package/android/build.gradle +0 -129
  8. package/android/src/androidTest/assets/chorus.wav +0 -0
  9. package/android/src/androidTest/assets/jfk.wav +0 -0
  10. package/android/src/androidTest/assets/osr_us_000_0010_8k.wav +0 -0
  11. package/android/src/androidTest/assets/recorder_hello_world.wav +0 -0
  12. package/android/src/androidTest/java/net/siteed/audiostream/AudioProcessorInstrumentedTest.kt +0 -197
  13. package/android/src/androidTest/java/net/siteed/audiostream/AudioRecorderInstrumentedTest.kt +0 -541
  14. package/android/src/androidTest/java/net/siteed/audiostream/AudioRecorderPerformanceInstrumentedTest.kt +0 -234
  15. package/android/src/androidTest/java/net/siteed/audiostream/integration/AudioFocusStrategyIntegrationTest.kt +0 -332
  16. package/android/src/androidTest/java/net/siteed/audiostream/integration/BufferDurationIntegrationTest.kt +0 -324
  17. package/android/src/androidTest/java/net/siteed/audiostream/integration/CompressedOnlyOutputTest.kt +0 -253
  18. package/android/src/androidTest/java/net/siteed/audiostream/integration/DeviceDisconnectionFallbackTest.kt +0 -218
  19. package/android/src/androidTest/java/net/siteed/audiostream/integration/EventEmissionIntervalTest.kt +0 -120
  20. package/android/src/androidTest/java/net/siteed/audiostream/integration/M4aFormatTest.kt +0 -345
  21. package/android/src/androidTest/java/net/siteed/audiostream/integration/OutputControlIntegrationTest.kt +0 -340
  22. package/android/src/androidTest/java/net/siteed/audiostream/integration/PcmStreamingDurationTest.kt +0 -252
  23. package/android/src/androidTest/java/net/siteed/audiostream/integration/README.md +0 -95
  24. package/android/src/androidTest/java/net/siteed/audiostream/integration/run_integration_tests.sh +0 -43
  25. package/android/src/main/AndroidManifest.xml +0 -30
  26. package/android/src/main/java/net/siteed/audiostream/AudioAnalysisData.kt +0 -188
  27. package/android/src/main/java/net/siteed/audiostream/AudioDataEncoder.kt +0 -9
  28. package/android/src/main/java/net/siteed/audiostream/AudioDeviceManager.kt +0 -1741
  29. package/android/src/main/java/net/siteed/audiostream/AudioFileHandler.kt +0 -136
  30. package/android/src/main/java/net/siteed/audiostream/AudioFormatUtils.kt +0 -354
  31. package/android/src/main/java/net/siteed/audiostream/AudioNotificationsManager.kt +0 -439
  32. package/android/src/main/java/net/siteed/audiostream/AudioProcessor.kt +0 -2237
  33. package/android/src/main/java/net/siteed/audiostream/AudioRecorderManager.kt +0 -2141
  34. package/android/src/main/java/net/siteed/audiostream/AudioRecordingService.kt +0 -167
  35. package/android/src/main/java/net/siteed/audiostream/AudioTrimmer.kt +0 -1099
  36. package/android/src/main/java/net/siteed/audiostream/Constants.kt +0 -37
  37. package/android/src/main/java/net/siteed/audiostream/EventSender.kt +0 -7
  38. package/android/src/main/java/net/siteed/audiostream/ExpoAudioStreamModule.kt +0 -1113
  39. package/android/src/main/java/net/siteed/audiostream/FFT.kt +0 -99
  40. package/android/src/main/java/net/siteed/audiostream/Features.kt +0 -98
  41. package/android/src/main/java/net/siteed/audiostream/LogUtils.kt +0 -93
  42. package/android/src/main/java/net/siteed/audiostream/NotificationConfig.kt +0 -72
  43. package/android/src/main/java/net/siteed/audiostream/PermissionUtils.kt +0 -68
  44. package/android/src/main/java/net/siteed/audiostream/RecordingActionReceiver.kt +0 -59
  45. package/android/src/main/java/net/siteed/audiostream/RecordingConfig.kt +0 -257
  46. package/android/src/main/java/net/siteed/audiostream/WaveformConfig.kt +0 -19
  47. package/android/src/main/java/net/siteed/audiostream/WaveformRenderer.kt +0 -159
  48. package/android/src/main/res/drawable/ic_default_action_icon.xml +0 -16
  49. package/android/src/main/res/drawable/ic_microphone.xml +0 -13
  50. package/android/src/main/res/drawable/ic_pause.xml +0 -10
  51. package/android/src/main/res/drawable/ic_play.xml +0 -10
  52. package/android/src/main/res/drawable/ic_stop.xml +0 -10
  53. package/android/src/main/res/layout/notification_recording.xml +0 -37
  54. package/android/src/test/java/net/siteed/audiostream/AudioFileHandlerTest.kt +0 -279
  55. package/android/src/test/java/net/siteed/audiostream/AudioFocusStrategyTest.kt +0 -249
  56. package/android/src/test/java/net/siteed/audiostream/AudioFormatTest.kt +0 -151
  57. package/android/src/test/java/net/siteed/audiostream/AudioFormatUtilsTest.kt +0 -273
  58. package/android/src/test/java/net/siteed/audiostream/DeviceDisconnectionFallbackUnitTest.kt +0 -140
  59. package/android/src/test/resources/chorus.wav +0 -0
  60. package/android/src/test/resources/generate_test_audio.py +0 -94
  61. package/android/src/test/resources/jfk.wav +0 -0
  62. package/android/src/test/resources/osr_us_000_0010_8k.wav +0 -0
  63. package/android/src/test/resources/recorder_hello_world.wav +0 -0
  64. package/app.plugin.js +0 -3
  65. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js +0 -4
  66. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js.map +0 -1
  67. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js +0 -210
  68. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js.map +0 -1
  69. package/build/cjs/AudioAnalysis/extractAudioData.js +0 -21
  70. package/build/cjs/AudioAnalysis/extractAudioData.js.map +0 -1
  71. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js +0 -92
  72. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js.map +0 -1
  73. package/build/cjs/AudioAnalysis/extractPreview.js +0 -28
  74. package/build/cjs/AudioAnalysis/extractPreview.js.map +0 -1
  75. package/build/cjs/AudioAnalysis/extractWaveform.js +0 -18
  76. package/build/cjs/AudioAnalysis/extractWaveform.js.map +0 -1
  77. package/build/cjs/AudioDeviceManager.js +0 -689
  78. package/build/cjs/AudioDeviceManager.js.map +0 -1
  79. package/build/cjs/AudioRecorder.provider.js +0 -78
  80. package/build/cjs/AudioRecorder.provider.js.map +0 -1
  81. package/build/cjs/ExpoAudioStream.native.js +0 -8
  82. package/build/cjs/ExpoAudioStream.native.js.map +0 -1
  83. package/build/cjs/ExpoAudioStream.types.js +0 -11
  84. package/build/cjs/ExpoAudioStream.types.js.map +0 -1
  85. package/build/cjs/ExpoAudioStream.web.js +0 -708
  86. package/build/cjs/ExpoAudioStream.web.js.map +0 -1
  87. package/build/cjs/ExpoAudioStreamModule.js +0 -718
  88. package/build/cjs/ExpoAudioStreamModule.js.map +0 -1
  89. package/build/cjs/WebRecorder.web.js +0 -777
  90. package/build/cjs/WebRecorder.web.js.map +0 -1
  91. package/build/cjs/constants/platformLimitations.js +0 -99
  92. package/build/cjs/constants/platformLimitations.js.map +0 -1
  93. package/build/cjs/constants.js +0 -17
  94. package/build/cjs/constants.js.map +0 -1
  95. package/build/cjs/events.js +0 -29
  96. package/build/cjs/events.js.map +0 -1
  97. package/build/cjs/hooks/useAudioDevices.js +0 -179
  98. package/build/cjs/hooks/useAudioDevices.js.map +0 -1
  99. package/build/cjs/index.js +0 -58
  100. package/build/cjs/index.js.map +0 -1
  101. package/build/cjs/trimAudio.js +0 -76
  102. package/build/cjs/trimAudio.js.map +0 -1
  103. package/build/cjs/useAudioRecorder.js +0 -518
  104. package/build/cjs/useAudioRecorder.js.map +0 -1
  105. package/build/cjs/utils/BlobFix.js +0 -502
  106. package/build/cjs/utils/BlobFix.js.map +0 -1
  107. package/build/cjs/utils/audioProcessing.js +0 -136
  108. package/build/cjs/utils/audioProcessing.js.map +0 -1
  109. package/build/cjs/utils/cleanNativeOptions.js +0 -22
  110. package/build/cjs/utils/cleanNativeOptions.js.map +0 -1
  111. package/build/cjs/utils/concatenateBuffers.js +0 -25
  112. package/build/cjs/utils/concatenateBuffers.js.map +0 -1
  113. package/build/cjs/utils/convertPCMToFloat32.js +0 -124
  114. package/build/cjs/utils/convertPCMToFloat32.js.map +0 -1
  115. package/build/cjs/utils/crc32.js +0 -52
  116. package/build/cjs/utils/crc32.js.map +0 -1
  117. package/build/cjs/utils/encodingToBitDepth.js +0 -17
  118. package/build/cjs/utils/encodingToBitDepth.js.map +0 -1
  119. package/build/cjs/utils/getWavFileInfo.js +0 -96
  120. package/build/cjs/utils/getWavFileInfo.js.map +0 -1
  121. package/build/cjs/utils/writeWavHeader.js +0 -88
  122. package/build/cjs/utils/writeWavHeader.js.map +0 -1
  123. package/build/cjs/workers/InlineFeaturesExtractor.web.js +0 -859
  124. package/build/cjs/workers/InlineFeaturesExtractor.web.js.map +0 -1
  125. package/build/cjs/workers/inlineAudioWebWorker.web.js +0 -184
  126. package/build/cjs/workers/inlineAudioWebWorker.web.js.map +0 -1
  127. package/build/esm/AudioAnalysis/AudioAnalysis.types.js +0 -3
  128. package/build/esm/AudioAnalysis/AudioAnalysis.types.js.map +0 -1
  129. package/build/esm/AudioAnalysis/extractAudioAnalysis.js +0 -202
  130. package/build/esm/AudioAnalysis/extractAudioAnalysis.js.map +0 -1
  131. package/build/esm/AudioAnalysis/extractAudioData.js +0 -14
  132. package/build/esm/AudioAnalysis/extractAudioData.js.map +0 -1
  133. package/build/esm/AudioAnalysis/extractMelSpectrogram.js +0 -89
  134. package/build/esm/AudioAnalysis/extractMelSpectrogram.js.map +0 -1
  135. package/build/esm/AudioAnalysis/extractPreview.js +0 -25
  136. package/build/esm/AudioAnalysis/extractPreview.js.map +0 -1
  137. package/build/esm/AudioAnalysis/extractWaveform.js +0 -11
  138. package/build/esm/AudioAnalysis/extractWaveform.js.map +0 -1
  139. package/build/esm/AudioDeviceManager.js +0 -682
  140. package/build/esm/AudioDeviceManager.js.map +0 -1
  141. package/build/esm/AudioRecorder.provider.js +0 -40
  142. package/build/esm/AudioRecorder.provider.js.map +0 -1
  143. package/build/esm/ExpoAudioStream.native.js +0 -6
  144. package/build/esm/ExpoAudioStream.native.js.map +0 -1
  145. package/build/esm/ExpoAudioStream.types.js +0 -8
  146. package/build/esm/ExpoAudioStream.types.js.map +0 -1
  147. package/build/esm/ExpoAudioStream.web.js +0 -704
  148. package/build/esm/ExpoAudioStream.web.js.map +0 -1
  149. package/build/esm/ExpoAudioStreamModule.js +0 -713
  150. package/build/esm/ExpoAudioStreamModule.js.map +0 -1
  151. package/build/esm/WebRecorder.web.js +0 -773
  152. package/build/esm/WebRecorder.web.js.map +0 -1
  153. package/build/esm/constants/platformLimitations.js +0 -90
  154. package/build/esm/constants/platformLimitations.js.map +0 -1
  155. package/build/esm/constants.js +0 -14
  156. package/build/esm/constants.js.map +0 -1
  157. package/build/esm/events.js +0 -21
  158. package/build/esm/events.js.map +0 -1
  159. package/build/esm/hooks/useAudioDevices.js +0 -176
  160. package/build/esm/hooks/useAudioDevices.js.map +0 -1
  161. package/build/esm/index.js +0 -20
  162. package/build/esm/index.js.map +0 -1
  163. package/build/esm/trimAudio.js +0 -69
  164. package/build/esm/trimAudio.js.map +0 -1
  165. package/build/esm/useAudioRecorder.js +0 -512
  166. package/build/esm/useAudioRecorder.js.map +0 -1
  167. package/build/esm/utils/BlobFix.js +0 -498
  168. package/build/esm/utils/BlobFix.js.map +0 -1
  169. package/build/esm/utils/audioProcessing.js +0 -133
  170. package/build/esm/utils/audioProcessing.js.map +0 -1
  171. package/build/esm/utils/cleanNativeOptions.js +0 -19
  172. package/build/esm/utils/cleanNativeOptions.js.map +0 -1
  173. package/build/esm/utils/concatenateBuffers.js +0 -21
  174. package/build/esm/utils/concatenateBuffers.js.map +0 -1
  175. package/build/esm/utils/convertPCMToFloat32.js +0 -120
  176. package/build/esm/utils/convertPCMToFloat32.js.map +0 -1
  177. package/build/esm/utils/crc32.js +0 -50
  178. package/build/esm/utils/crc32.js.map +0 -1
  179. package/build/esm/utils/encodingToBitDepth.js +0 -13
  180. package/build/esm/utils/encodingToBitDepth.js.map +0 -1
  181. package/build/esm/utils/getWavFileInfo.js +0 -92
  182. package/build/esm/utils/getWavFileInfo.js.map +0 -1
  183. package/build/esm/utils/writeWavHeader.js +0 -84
  184. package/build/esm/utils/writeWavHeader.js.map +0 -1
  185. package/build/esm/workers/InlineFeaturesExtractor.web.js +0 -856
  186. package/build/esm/workers/InlineFeaturesExtractor.web.js.map +0 -1
  187. package/build/esm/workers/inlineAudioWebWorker.web.js +0 -181
  188. package/build/esm/workers/inlineAudioWebWorker.web.js.map +0 -1
  189. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts +0 -196
  190. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts.map +0 -1
  191. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts +0 -74
  192. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts.map +0 -1
  193. package/build/types/AudioAnalysis/extractAudioData.d.ts +0 -3
  194. package/build/types/AudioAnalysis/extractAudioData.d.ts.map +0 -1
  195. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts +0 -14
  196. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts.map +0 -1
  197. package/build/types/AudioAnalysis/extractPreview.d.ts +0 -11
  198. package/build/types/AudioAnalysis/extractPreview.d.ts.map +0 -1
  199. package/build/types/AudioAnalysis/extractWaveform.d.ts +0 -8
  200. package/build/types/AudioAnalysis/extractWaveform.d.ts.map +0 -1
  201. package/build/types/AudioDeviceManager.d.ts +0 -187
  202. package/build/types/AudioDeviceManager.d.ts.map +0 -1
  203. package/build/types/AudioRecorder.provider.d.ts +0 -11
  204. package/build/types/AudioRecorder.provider.d.ts.map +0 -1
  205. package/build/types/ExpoAudioStream.native.d.ts +0 -3
  206. package/build/types/ExpoAudioStream.native.d.ts.map +0 -1
  207. package/build/types/ExpoAudioStream.types.d.ts +0 -738
  208. package/build/types/ExpoAudioStream.types.d.ts.map +0 -1
  209. package/build/types/ExpoAudioStream.web.d.ts +0 -96
  210. package/build/types/ExpoAudioStream.web.d.ts.map +0 -1
  211. package/build/types/ExpoAudioStreamModule.d.ts +0 -3
  212. package/build/types/ExpoAudioStreamModule.d.ts.map +0 -1
  213. package/build/types/WebRecorder.web.d.ts +0 -198
  214. package/build/types/WebRecorder.web.d.ts.map +0 -1
  215. package/build/types/constants/platformLimitations.d.ts +0 -40
  216. package/build/types/constants/platformLimitations.d.ts.map +0 -1
  217. package/build/types/constants.d.ts +0 -11
  218. package/build/types/constants.d.ts.map +0 -1
  219. package/build/types/events.d.ts +0 -26
  220. package/build/types/events.d.ts.map +0 -1
  221. package/build/types/hooks/useAudioDevices.d.ts +0 -15
  222. package/build/types/hooks/useAudioDevices.d.ts.map +0 -1
  223. package/build/types/index.d.ts +0 -18
  224. package/build/types/index.d.ts.map +0 -1
  225. package/build/types/trimAudio.d.ts +0 -25
  226. package/build/types/trimAudio.d.ts.map +0 -1
  227. package/build/types/useAudioRecorder.d.ts +0 -22
  228. package/build/types/useAudioRecorder.d.ts.map +0 -1
  229. package/build/types/utils/BlobFix.d.ts +0 -9
  230. package/build/types/utils/BlobFix.d.ts.map +0 -1
  231. package/build/types/utils/audioProcessing.d.ts +0 -24
  232. package/build/types/utils/audioProcessing.d.ts.map +0 -1
  233. package/build/types/utils/cleanNativeOptions.d.ts +0 -15
  234. package/build/types/utils/cleanNativeOptions.d.ts.map +0 -1
  235. package/build/types/utils/concatenateBuffers.d.ts +0 -8
  236. package/build/types/utils/concatenateBuffers.d.ts.map +0 -1
  237. package/build/types/utils/convertPCMToFloat32.d.ts +0 -13
  238. package/build/types/utils/convertPCMToFloat32.d.ts.map +0 -1
  239. package/build/types/utils/crc32.d.ts +0 -7
  240. package/build/types/utils/crc32.d.ts.map +0 -1
  241. package/build/types/utils/encodingToBitDepth.d.ts +0 -5
  242. package/build/types/utils/encodingToBitDepth.d.ts.map +0 -1
  243. package/build/types/utils/getWavFileInfo.d.ts +0 -26
  244. package/build/types/utils/getWavFileInfo.d.ts.map +0 -1
  245. package/build/types/utils/writeWavHeader.d.ts +0 -34
  246. package/build/types/utils/writeWavHeader.d.ts.map +0 -1
  247. package/build/types/workers/InlineFeaturesExtractor.web.d.ts +0 -2
  248. package/build/types/workers/InlineFeaturesExtractor.web.d.ts.map +0 -1
  249. package/build/types/workers/inlineAudioWebWorker.web.d.ts +0 -2
  250. package/build/types/workers/inlineAudioWebWorker.web.d.ts.map +0 -1
  251. package/expo-module.config.json +0 -10
  252. package/ios/AudioAnalysisData.swift +0 -74
  253. package/ios/AudioDeviceManager.swift +0 -666
  254. package/ios/AudioNotificationManager.swift +0 -154
  255. package/ios/AudioProcessingHelpers.swift +0 -743
  256. package/ios/AudioProcessor.swift +0 -1151
  257. package/ios/AudioStreamError.swift +0 -7
  258. package/ios/AudioStreamManager.swift +0 -2352
  259. package/ios/AudioStreamManagerDelegate.swift +0 -16
  260. package/ios/DataPoint.swift +0 -54
  261. package/ios/DecodingConfig.swift +0 -59
  262. package/ios/ExpoAudioStream.podspec +0 -33
  263. package/ios/ExpoAudioStreamModule.swift +0 -1013
  264. package/ios/ExpoAudioStudioTests/AudioFileHandlerTests.swift +0 -338
  265. package/ios/ExpoAudioStudioTests/AudioFormatUtilsTests.swift +0 -331
  266. package/ios/ExpoAudioStudioTests/AudioTestHelpers.swift +0 -130
  267. package/ios/ExpoAudioStudioTests/CompressedOnlyOutputTests.swift +0 -294
  268. package/ios/ExpoAudioStudioTests/EventEmissionIntervalTests.swift +0 -105
  269. package/ios/ExpoAudioStudioTests/Info.plist +0 -22
  270. package/ios/ExpoAudioStudioTests/README.md +0 -39
  271. package/ios/ExpoAudioStudioTests/SimpleAudioTest.swift +0 -98
  272. package/ios/ExpoAudioStudioTests/TestAudioGenerator.swift +0 -75
  273. package/ios/FFT.swift +0 -62
  274. package/ios/Features.swift +0 -95
  275. package/ios/ISSUE_IOS.md +0 -68
  276. package/ios/Logger.swift +0 -39
  277. package/ios/NotificationExtension.swift +0 -15
  278. package/ios/RecordingResult.swift +0 -22
  279. package/ios/RecordingSettings.swift +0 -308
  280. package/ios/WaveformExtractor.swift +0 -105
  281. package/ios/tests/README.md +0 -41
  282. package/ios/tests/integration/buffer_and_fallback_test.swift +0 -178
  283. package/ios/tests/integration/buffer_duration_test.swift +0 -185
  284. package/ios/tests/integration/compressed_only_output_test.swift +0 -271
  285. package/ios/tests/integration/output_control_test.swift +0 -322
  286. package/ios/tests/integration/run_integration_tests.sh +0 -37
  287. package/ios/tests/opus_support_test_macos.swift +0 -154
  288. package/ios/tests/standalone/audio_processing_test.swift +0 -144
  289. package/ios/tests/standalone/audio_recording_test.swift +0 -277
  290. package/ios/tests/standalone/audio_streaming_test.swift +0 -249
  291. package/ios/tests/standalone/standalone_test.swift +0 -144
  292. package/plugin/build/index.cjs +0 -194
  293. package/plugin/build/index.d.cts +0 -22
  294. package/plugin/build/index.js +0 -194
  295. package/plugin/src/index.ts +0 -285
  296. package/plugin/tsconfig.json +0 -10
  297. package/plugin/tsconfig.tsbuildinfo +0 -1
  298. package/src/AudioAnalysis/AudioAnalysis.types.ts +0 -224
  299. package/src/AudioAnalysis/extractAudioAnalysis.ts +0 -344
  300. package/src/AudioAnalysis/extractAudioData.ts +0 -17
  301. package/src/AudioAnalysis/extractMelSpectrogram.ts +0 -154
  302. package/src/AudioAnalysis/extractPreview.ts +0 -34
  303. package/src/AudioAnalysis/extractWaveform.ts +0 -22
  304. package/src/AudioDeviceManager.ts +0 -803
  305. package/src/AudioRecorder.provider.tsx +0 -57
  306. package/src/ExpoAudioStream.native.ts +0 -6
  307. package/src/ExpoAudioStream.types.ts +0 -874
  308. package/src/ExpoAudioStream.web.ts +0 -905
  309. package/src/ExpoAudioStreamModule.ts +0 -990
  310. package/src/WebRecorder.web.ts +0 -1005
  311. package/src/constants/platformLimitations.ts +0 -118
  312. package/src/constants.ts +0 -18
  313. package/src/events.ts +0 -60
  314. package/src/hooks/useAudioDevices.ts +0 -213
  315. package/src/index.ts +0 -54
  316. package/src/trimAudio.ts +0 -94
  317. package/src/types/crc-32.d.ts +0 -9
  318. package/src/useAudioRecorder.tsx +0 -766
  319. package/src/utils/BlobFix.ts +0 -561
  320. package/src/utils/audioProcessing.ts +0 -205
  321. package/src/utils/cleanNativeOptions.ts +0 -18
  322. package/src/utils/concatenateBuffers.ts +0 -24
  323. package/src/utils/convertPCMToFloat32.ts +0 -170
  324. package/src/utils/crc32.ts +0 -59
  325. package/src/utils/encodingToBitDepth.ts +0 -18
  326. package/src/utils/getWavFileInfo.ts +0 -132
  327. package/src/utils/writeWavHeader.ts +0 -115
  328. package/src/workers/InlineFeaturesExtractor.web.tsx +0 -855
  329. package/src/workers/inlineAudioWebWorker.web.tsx +0 -180
@@ -1,185 +0,0 @@
1
- #!/usr/bin/env swift
2
-
3
- import Foundation
4
- import AVFoundation
5
-
6
- // Integration test for Buffer Duration feature
7
- // This tests the ACTUAL behavior of AVAudioEngine with different buffer sizes
8
-
9
- print("🧪 Buffer Duration Integration Test")
10
- print("===================================\n")
11
-
12
- class BufferDurationTest {
13
- let audioEngine = AVAudioEngine()
14
- var results: [(name: String, passed: Bool, message: String)] = []
15
-
16
- func runAllTests() {
17
- testDefaultBufferSize()
18
- testCustomBufferSizes()
19
- testBufferSizeLimits()
20
- printResults()
21
- }
22
-
23
- func testDefaultBufferSize() {
24
- print("Test 1: Default Buffer Size (1024 frames requested)")
25
- print("-------------------------------------------------")
26
-
27
- let inputNode = audioEngine.inputNode
28
- let expectation = DispatchSemaphore(value: 0)
29
- var receivedFrames: AVAudioFrameCount = 0
30
-
31
- inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputNode.inputFormat(forBus: 0)) { buffer, _ in
32
- receivedFrames = buffer.frameLength
33
- expectation.signal()
34
- }
35
-
36
- audioEngine.prepare()
37
- do {
38
- try audioEngine.start()
39
- _ = expectation.wait(timeout: .now() + 2)
40
- audioEngine.stop()
41
- } catch {
42
- print("Error: \(error)")
43
- }
44
-
45
- inputNode.removeTap(onBus: 0)
46
-
47
- // iOS enforces minimum of ~4800 frames
48
- let passed = receivedFrames >= 4800
49
- results.append((
50
- name: "Default Buffer Size",
51
- passed: passed,
52
- message: "Requested: 1024, Received: \(receivedFrames) frames (iOS minimum: ~4800)"
53
- ))
54
-
55
- print("✓ Requested: 1024 frames")
56
- print("✓ Received: \(receivedFrames) frames")
57
- print("✓ iOS enforces minimum buffer size\n")
58
- }
59
-
60
- func testCustomBufferSizes() {
61
- print("Test 2: Custom Buffer Sizes")
62
- print("---------------------------")
63
-
64
- let inputNode = audioEngine.inputNode
65
- let sampleRate = inputNode.inputFormat(forBus: 0).sampleRate
66
-
67
- let testCases: [(duration: Double, name: String)] = [
68
- (0.01, "10ms"),
69
- (0.05, "50ms"),
70
- (0.1, "100ms"),
71
- (0.2, "200ms"),
72
- (0.5, "500ms")
73
- ]
74
-
75
- for testCase in testCases {
76
- let requestedFrames = AVAudioFrameCount(testCase.duration * sampleRate)
77
- let expectation = DispatchSemaphore(value: 0)
78
- var receivedFrames: AVAudioFrameCount = 0
79
-
80
- inputNode.removeTap(onBus: 0)
81
- inputNode.installTap(onBus: 0, bufferSize: requestedFrames, format: inputNode.inputFormat(forBus: 0)) { buffer, _ in
82
- receivedFrames = buffer.frameLength
83
- expectation.signal()
84
- }
85
-
86
- do {
87
- try audioEngine.start()
88
- _ = expectation.wait(timeout: .now() + 2)
89
- audioEngine.stop()
90
- } catch {
91
- print("Error: \(error)")
92
- }
93
-
94
- let expectedFrames: AVAudioFrameCount = requestedFrames < 4800 ? 4800 : requestedFrames
95
- let tolerance: AVAudioFrameCount = expectedFrames > 10000 ? AVAudioFrameCount(Double(expectedFrames) * 0.2) : 100
96
- let passed = abs(Int32(receivedFrames) - Int32(expectedFrames)) <= Int32(tolerance)
97
-
98
- results.append((
99
- name: "Buffer \(testCase.name)",
100
- passed: passed,
101
- message: "Requested: \(requestedFrames), Expected: \(expectedFrames), Received: \(receivedFrames)"
102
- ))
103
-
104
- print(" \(testCase.name): Requested \(requestedFrames) → Received \(receivedFrames) frames")
105
- }
106
-
107
- inputNode.removeTap(onBus: 0)
108
- print()
109
- }
110
-
111
- func testBufferSizeLimits() {
112
- print("Test 3: Buffer Size Limits")
113
- print("--------------------------")
114
-
115
- let inputNode = audioEngine.inputNode
116
-
117
- let extremeCases: [(size: AVAudioFrameCount, name: String)] = [
118
- (100, "Very small (100 frames)"),
119
- (50000, "Very large (50000 frames)")
120
- ]
121
-
122
- for testCase in extremeCases {
123
- let expectation = DispatchSemaphore(value: 0)
124
- var receivedFrames: AVAudioFrameCount = 0
125
-
126
- inputNode.removeTap(onBus: 0)
127
- inputNode.installTap(onBus: 0, bufferSize: testCase.size, format: inputNode.inputFormat(forBus: 0)) { buffer, _ in
128
- receivedFrames = buffer.frameLength
129
- expectation.signal()
130
- }
131
-
132
- do {
133
- try audioEngine.start()
134
- _ = expectation.wait(timeout: .now() + 2)
135
- audioEngine.stop()
136
- } catch {
137
- print("Error: \(error)")
138
- }
139
-
140
- let passed = receivedFrames >= 4800 && receivedFrames <= 50000
141
- results.append((
142
- name: testCase.name,
143
- passed: passed,
144
- message: "Requested: \(testCase.size), Received: \(receivedFrames)"
145
- ))
146
-
147
- print(" \(testCase.name): \(testCase.size) → \(receivedFrames) frames")
148
- }
149
-
150
- inputNode.removeTap(onBus: 0)
151
- print()
152
- }
153
-
154
- func printResults() {
155
- print("📊 Test Results")
156
- print("===============")
157
-
158
- let passed = results.filter { $0.passed }.count
159
- let total = results.count
160
-
161
- for result in results {
162
- let status = result.passed ? "✅" : "❌"
163
- print("\(status) \(result.name)")
164
- print(" \(result.message)")
165
- }
166
-
167
- print("\nSummary: \(passed)/\(total) tests passed")
168
-
169
- if passed == total {
170
- print("🎉 All tests passed!")
171
- } else {
172
- print("⚠️ Some tests failed")
173
- }
174
-
175
- print("\n📝 Key Findings:")
176
- print("- iOS AVAudioEngine enforces a minimum buffer size of ~4800 frames")
177
- print("- Requests below 4800 frames are ignored")
178
- print("- Larger buffer sizes generally work as requested")
179
- print("- Buffer accumulation is needed for small buffer durations")
180
- }
181
- }
182
-
183
- // Run the test
184
- let test = BufferDurationTest()
185
- test.runAllTests()
@@ -1,271 +0,0 @@
1
- #!/usr/bin/env swift
2
-
3
- import Foundation
4
- import AVFoundation
5
-
6
- // Integration test for Compressed-Only Output (Issue #244)
7
- // This tests that when primary output is disabled and compressed is enabled,
8
- // the compressed file info is properly returned in the result
9
-
10
- print("🧪 Compressed-Only Output Integration Test (Issue #244)")
11
- print("=====================================================\n")
12
-
13
- // Add the parent directory to the module search path
14
- let srcPath = URL(fileURLWithPath: #file)
15
- .deletingLastPathComponent()
16
- .deletingLastPathComponent()
17
- .deletingLastPathComponent()
18
- .path
19
-
20
- // Import the module
21
- #if canImport(ExpoAudioStream)
22
- import ExpoAudioStream
23
- #endif
24
-
25
- // Helper to load Swift files
26
- func loadSwiftFile(_ filename: String) {
27
- let filePath = "\(srcPath)/\(filename).swift"
28
- let fileURL = URL(fileURLWithPath: filePath)
29
-
30
- do {
31
- let _ = try String(contentsOf: fileURL, encoding: .utf8)
32
- // In a real scenario, we'd compile and load this
33
- // For testing, we'll simulate the behavior
34
- } catch {
35
- print("Warning: Could not load \(filename).swift")
36
- }
37
- }
38
-
39
- // Test class
40
- class CompressedOnlyOutputTest {
41
- var results: [(name: String, passed: Bool, message: String)] = []
42
-
43
- func runAllTests() {
44
- print("📋 Test Scenarios:")
45
- print("1. Primary disabled, Compressed enabled (AAC)")
46
- print("2. Primary disabled, Compressed enabled (Opus)")
47
- print("3. Verify compressed file URI is returned")
48
- print("4. Verify file size and format info")
49
- print("\n")
50
-
51
- testCompressedOnlyAAC()
52
- testCompressedOnlyOpus()
53
- testCompressedFileAccess()
54
- printResults()
55
- }
56
-
57
- func testCompressedOnlyAAC() {
58
- print("Test 1: Compressed-Only Output with AAC")
59
- print("---------------------------------------")
60
-
61
- // Simulate recording configuration
62
- let config = [
63
- "sampleRate": 44100,
64
- "channels": 1,
65
- "encoding": "pcm_16bit",
66
- "output": [
67
- "primary": ["enabled": false],
68
- "compressed": [
69
- "enabled": true,
70
- "format": "aac",
71
- "bitrate": 128000
72
- ]
73
- ]
74
- ] as [String : Any]
75
-
76
- // Expected behavior: Should return compression info with file URI
77
- let mockResult = simulateRecording(config: config)
78
-
79
- let hasCompressionInfo = mockResult["compression"] != nil
80
- let compressionDict = mockResult["compression"] as? [String: Any]
81
- let hasCompressedUri = compressionDict?["compressedFileUri"] != nil
82
- let format = compressionDict?["format"] as? String
83
-
84
- let passed = hasCompressionInfo && hasCompressedUri && format == "aac"
85
-
86
- results.append((
87
- name: "AAC Compressed-Only",
88
- passed: passed,
89
- message: "Compression info: \(hasCompressionInfo), URI: \(hasCompressedUri), Format: \(format ?? "nil")"
90
- ))
91
-
92
- if passed {
93
- print("✅ Compression info properly returned")
94
- print("✅ Compressed file URI: \(compressionDict?["compressedFileUri"] ?? "nil")")
95
- print("✅ Format: \(format ?? "nil")")
96
- } else {
97
- print("❌ FAIL: Compression info missing or incomplete")
98
- }
99
- print()
100
- }
101
-
102
- func testCompressedOnlyOpus() {
103
- print("Test 2: Compressed-Only Output with Opus (fallback to AAC on iOS)")
104
- print("-----------------------------------------------------------------")
105
-
106
- let config = [
107
- "sampleRate": 48000,
108
- "channels": 1,
109
- "encoding": "pcm_16bit",
110
- "output": [
111
- "primary": ["enabled": false],
112
- "compressed": [
113
- "enabled": true,
114
- "format": "opus", // Should fallback to AAC on iOS
115
- "bitrate": 64000
116
- ]
117
- ]
118
- ] as [String : Any]
119
-
120
- let mockResult = simulateRecording(config: config)
121
-
122
- let compressionDict = mockResult["compression"] as? [String: Any]
123
- let format = compressionDict?["format"] as? String
124
- let bitrate = compressionDict?["bitrate"] as? Int
125
-
126
- // On iOS, Opus should fallback to AAC
127
- let passed = format == "aac" && bitrate != nil
128
-
129
- results.append((
130
- name: "Opus→AAC Fallback",
131
- passed: passed,
132
- message: "Format: \(format ?? "nil"), Bitrate: \(bitrate ?? 0)"
133
- ))
134
-
135
- if passed {
136
- print("✅ Opus correctly fell back to AAC")
137
- print("✅ Bitrate preserved: \(bitrate ?? 0)")
138
- } else {
139
- print("❌ FAIL: Incorrect format or missing bitrate")
140
- }
141
- print()
142
- }
143
-
144
- func testCompressedFileAccess() {
145
- print("Test 3: Verify Compressed File Accessibility")
146
- print("-------------------------------------------")
147
-
148
- let config = [
149
- "sampleRate": 44100,
150
- "channels": 1,
151
- "encoding": "pcm_16bit",
152
- "output": [
153
- "primary": ["enabled": false],
154
- "compressed": ["enabled": true, "format": "aac"]
155
- ]
156
- ] as [String : Any]
157
-
158
- let mockResult = simulateRecording(config: config)
159
-
160
- // Check main result structure
161
- let fileUri = mockResult["fileUri"] as? String ?? ""
162
- let _ = mockResult["filename"] as? String ?? ""
163
- let _ = mockResult["mimeType"] as? String ?? ""
164
-
165
- // Check compression structure
166
- let compressionDict = mockResult["compression"] as? [String: Any]
167
- let compressedUri = compressionDict?["compressedFileUri"] as? String
168
- let compressedSize = compressionDict?["size"] as? Int64
169
-
170
- // When primary is disabled, we should either:
171
- // 1. Get compression info with the compressed file URI
172
- // 2. Or use compressed URI as main fileUri (like web does)
173
- let hasAccessToCompressed = (compressedUri != nil && !compressedUri!.isEmpty) ||
174
- (!fileUri.isEmpty && fileUri != "")
175
-
176
- let passed = hasAccessToCompressed && compressedSize != nil
177
-
178
- results.append((
179
- name: "File Accessibility",
180
- passed: passed,
181
- message: "Main URI: '\(fileUri)', Compressed URI: '\(compressedUri ?? "nil")', Size: \(compressedSize ?? 0)"
182
- ))
183
-
184
- if passed {
185
- print("✅ Compressed file is accessible")
186
- print("✅ File size reported: \(compressedSize ?? 0) bytes")
187
- } else {
188
- print("❌ FAIL: Cannot access compressed file")
189
- print(" Main fileUri: '\(fileUri)'")
190
- print(" Compressed URI: '\(compressedUri ?? "nil")'")
191
- }
192
- print()
193
- }
194
-
195
- // Helper to simulate recording
196
- func simulateRecording(config: [String: Any]) -> [String: Any] {
197
- // This simulates the current BUGGY behavior
198
- // After the fix, this should return proper compression info
199
-
200
- let outputConfig = config["output"] as? [String: Any]
201
- let primaryConfig = outputConfig?["primary"] as? [String: Any]
202
- let compressedConfig = outputConfig?["compressed"] as? [String: Any]
203
-
204
- let primaryEnabled = primaryConfig?["enabled"] as? Bool ?? true
205
- let compressedEnabled = compressedConfig?["enabled"] as? Bool ?? false
206
-
207
- if !primaryEnabled {
208
- // Current buggy behavior - returns nil compression
209
- let result: [String: Any] = [
210
- "fileUri": "",
211
- "filename": "stream-only",
212
- "durationMs": 5000,
213
- "size": 0,
214
- "mimeType": "audio/wav"
215
- ]
216
- // BUG: compression should be included but is currently nil
217
- return result
218
- } else {
219
- // Normal behavior when primary is enabled
220
- var result: [String: Any] = [
221
- "fileUri": "file:///mock/recording.wav",
222
- "filename": "recording.wav",
223
- "durationMs": 5000,
224
- "size": 240000,
225
- "mimeType": "audio/wav"
226
- ]
227
-
228
- if compressedEnabled {
229
- result["compression"] = [
230
- "compressedFileUri": "file:///mock/recording.aac",
231
- "format": "aac",
232
- "bitrate": 128000,
233
- "size": 40000,
234
- "mimeType": "audio/aac"
235
- ]
236
- }
237
-
238
- return result
239
- }
240
- }
241
-
242
- func printResults() {
243
- print("\n📊 Test Results")
244
- print("===============")
245
-
246
- let passed = results.filter { $0.passed }.count
247
- let total = results.count
248
-
249
- for result in results {
250
- let status = result.passed ? "✅" : "❌"
251
- print("\(status) \(result.name)")
252
- print(" \(result.message)")
253
- }
254
-
255
- print("\nSummary: \(passed)/\(total) tests passed")
256
-
257
- if passed == total {
258
- print("🎉 All tests passed!")
259
- } else {
260
- print("⚠️ Some tests failed - Fix needed!")
261
- print("\n🔧 Required Fix:")
262
- print("- When primary output is disabled, compression info must be included")
263
- print("- Compressed file URI must be accessible to users")
264
- print("- This affects iOS and Android (Web works correctly)")
265
- }
266
- }
267
- }
268
-
269
- // Run the test
270
- let test = CompressedOnlyOutputTest()
271
- test.runAllTests()