@siteed/expo-audio-studio 2.18.6 → 3.0.1

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 +7 -136
  5. package/CHANGELOG.md +0 -501
  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 -670
  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 -2369
  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 -1019
  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,285 +0,0 @@
1
- import {
2
- ConfigPlugin,
3
- withAndroidManifest,
4
- withInfoPlist,
5
- AndroidConfig,
6
- } from '@expo/config-plugins'
7
- import { ExpoConfig } from '@expo/config-types'
8
-
9
- const MICROPHONE_USAGE = 'Allow $(PRODUCT_NAME) to access your microphone'
10
- const NOTIFICATION_USAGE = 'Show recording notifications and controls'
11
- const LOG_PREFIX = '[@siteed/expo-audio-studio]'
12
-
13
- function debugLog(message: string, ...args: unknown[]): void {
14
- if (process.env.EXPO_DEBUG) {
15
- console.log(`${LOG_PREFIX} ${message}`, ...args)
16
- }
17
- }
18
-
19
- interface AudioStreamPluginOptions {
20
- enablePhoneStateHandling?: boolean // Controls READ_PHONE_STATE permission
21
- enableNotifications?: boolean
22
- enableBackgroundAudio?: boolean
23
- enableDeviceDetection?: boolean // Controls Bluetooth and USB permissions for device change detection
24
- iosBackgroundModes?: {
25
- useVoIP?: boolean
26
- useAudio?: boolean
27
- useProcessing?: boolean
28
- useLocation?: boolean
29
- useExternalAccessory?: boolean
30
- }
31
- iosConfig?: {
32
- allowBackgroundAudioControls?: boolean
33
- backgroundProcessingTitle?: string
34
- microphoneUsageDescription?: string
35
- notificationUsageDescription?: string
36
- }
37
- }
38
-
39
- const withRecordingPermission: ConfigPlugin<AudioStreamPluginOptions> = (
40
- config: ExpoConfig,
41
- props: AudioStreamPluginOptions | void
42
- ) => {
43
- const options: AudioStreamPluginOptions = {
44
- enablePhoneStateHandling: true, // Default to true for backward compatibility
45
- enableNotifications: true,
46
- enableBackgroundAudio: true,
47
- enableDeviceDetection: true, // Default to true for backward compatibility
48
- iosBackgroundModes: {
49
- useVoIP: false,
50
- useAudio: false,
51
- useProcessing: false,
52
- useLocation: false,
53
- useExternalAccessory: false,
54
- },
55
- iosConfig: {
56
- microphoneUsageDescription: MICROPHONE_USAGE,
57
- notificationUsageDescription: NOTIFICATION_USAGE,
58
- },
59
- ...(props || {}),
60
- }
61
-
62
- const {
63
- enablePhoneStateHandling,
64
- enableNotifications,
65
- enableBackgroundAudio,
66
- enableDeviceDetection,
67
- } = options
68
-
69
- debugLog('📱 Configuring Recording Permissions Plugin...', options)
70
-
71
- // iOS Configuration
72
- config = withInfoPlist(config as any, (config) => {
73
- // Always set the microphone usage description from options first
74
- config.modResults['NSMicrophoneUsageDescription'] =
75
- options.iosConfig?.microphoneUsageDescription ||
76
- config.modResults['NSMicrophoneUsageDescription'] ||
77
- MICROPHONE_USAGE
78
-
79
- if (enableNotifications) {
80
- config.modResults['NSUserNotificationsUsageDescription'] =
81
- options.iosConfig?.notificationUsageDescription ||
82
- config.modResults['NSUserNotificationsUsageDescription'] ||
83
- NOTIFICATION_USAGE
84
- config.modResults['NSUserNotificationAlertStyle'] = 'alert'
85
- }
86
-
87
- const existingBackgroundModes =
88
- config.modResults.UIBackgroundModes || []
89
-
90
- // If background audio is enabled with useAudio, add the audio background mode
91
- if (
92
- options.iosBackgroundModes?.useAudio === true &&
93
- enableBackgroundAudio === true &&
94
- !existingBackgroundModes.includes('audio')
95
- ) {
96
- // Add 'audio' background mode - REQUIRED for background recording
97
- existingBackgroundModes.push('audio')
98
- debugLog(
99
- '✅ Added audio background mode for iOS background recording'
100
- )
101
-
102
- // Also ensure processing mode is recommended
103
- if (options.iosBackgroundModes?.useProcessing !== true) {
104
- console.warn(
105
- `${LOG_PREFIX} Warning: Background audio recording works best with both 'audio' and 'processing' background modes. Consider enabling 'useProcessing' in iosBackgroundModes.`
106
- )
107
- }
108
- }
109
-
110
- if (
111
- options.iosBackgroundModes?.useVoIP === true &&
112
- enablePhoneStateHandling === true
113
- ) {
114
- if (!existingBackgroundModes.includes('voip')) {
115
- existingBackgroundModes.push('voip')
116
- }
117
- const existingCapabilities = (config.modResults
118
- .UIRequiredDeviceCapabilities || []) as string[]
119
- if (!existingCapabilities.includes('telephony')) {
120
- existingCapabilities.push('telephony')
121
- }
122
- config.modResults.UIRequiredDeviceCapabilities =
123
- existingCapabilities
124
- }
125
-
126
- // Add additional background modes only if explicitly set to true
127
- if (options.iosBackgroundModes?.useProcessing === true) {
128
- if (!existingBackgroundModes.includes('processing')) {
129
- existingBackgroundModes.push('processing')
130
- }
131
- // Add processing info if enabled
132
- // Note: We keep the 'audiostream' namespace for native modules to maintain compatibility
133
- config.modResults.BGTaskSchedulerPermittedIdentifiers = [
134
- 'com.siteed.audiostream.processing',
135
- ]
136
- }
137
-
138
- if (options.iosBackgroundModes?.useLocation === true) {
139
- if (!existingBackgroundModes.includes('location')) {
140
- existingBackgroundModes.push('location')
141
- }
142
- }
143
-
144
- if (options.iosBackgroundModes?.useExternalAccessory === true) {
145
- if (!existingBackgroundModes.includes('external-accessory')) {
146
- existingBackgroundModes.push('external-accessory')
147
- }
148
- }
149
-
150
- // Configure background processing info if enabled
151
- if (options.iosConfig?.backgroundProcessingTitle) {
152
- config.modResults.BGProcessingTaskTitle =
153
- options.iosConfig.backgroundProcessingTitle
154
- }
155
-
156
- // Configure audio session behavior
157
- if (options.iosConfig?.allowBackgroundAudioControls) {
158
- config.modResults.UIBackgroundModes = [
159
- ...existingBackgroundModes,
160
- 'remote-notification',
161
- ]
162
- config.modResults.MPNowPlayingInfoPropertyPlaybackRate = true
163
- }
164
-
165
- config.modResults.UIBackgroundModes = existingBackgroundModes
166
- return config
167
- })
168
-
169
- // Android Configuration
170
- config = withAndroidManifest(config as any, (config) => {
171
- const basePermissions = ['android.permission.RECORD_AUDIO']
172
-
173
- const optionalPermissions = [
174
- enableNotifications && 'android.permission.POST_NOTIFICATIONS',
175
- enablePhoneStateHandling && 'android.permission.READ_PHONE_STATE', // Only add if enabled
176
- enableBackgroundAudio && 'android.permission.FOREGROUND_SERVICE',
177
- enableBackgroundAudio &&
178
- 'android.permission.FOREGROUND_SERVICE_MICROPHONE',
179
- enableBackgroundAudio && 'android.permission.WAKE_LOCK', // Keep device awake during background recording
180
- // Device detection permissions (only if enabled)
181
- enableDeviceDetection && 'android.permission.BLUETOOTH',
182
- enableDeviceDetection && 'android.permission.BLUETOOTH_ADMIN',
183
- enableDeviceDetection && 'android.permission.BLUETOOTH_CONNECT',
184
- enableDeviceDetection && 'android.permission.USB_PERMISSION',
185
- ].filter(Boolean) as string[]
186
-
187
- const permissionsToAdd = [...basePermissions, ...optionalPermissions]
188
-
189
- debugLog(
190
- '📋 Existing Android permissions:',
191
- config.modResults.manifest['uses-permission']?.map(
192
- (p) => p.$?.['android:name']
193
- ) || []
194
- )
195
-
196
- debugLog('➕ Adding Android permissions:', permissionsToAdd)
197
-
198
- // Add each permission only if it doesn't exist
199
- permissionsToAdd.forEach((permission) => {
200
- AndroidConfig.Permissions.addPermission(
201
- config.modResults,
202
- permission
203
- )
204
- })
205
-
206
- // Get the main application node
207
- const mainApplication = config.modResults.manifest.application?.[0]
208
- if (mainApplication) {
209
- debugLog('📱 Configuring Android application components...')
210
-
211
- // Add RecordingActionReceiver
212
- if (!mainApplication.receiver) {
213
- mainApplication.receiver = []
214
- }
215
-
216
- const receiverConfig = {
217
- $: {
218
- 'android:name': '.RecordingActionReceiver',
219
- 'android:exported': 'false' as const,
220
- },
221
- 'intent-filter': [
222
- {
223
- action: [
224
- { $: { 'android:name': 'PAUSE_RECORDING' } },
225
- { $: { 'android:name': 'RESUME_RECORDING' } },
226
- { $: { 'android:name': 'STOP_RECORDING' } },
227
- ],
228
- },
229
- ],
230
- }
231
-
232
- const receiverIndex = mainApplication.receiver.findIndex(
233
- (receiver: any) =>
234
- receiver.$?.['android:name'] === '.RecordingActionReceiver'
235
- )
236
-
237
- if (receiverIndex >= 0) {
238
- mainApplication.receiver[receiverIndex] = receiverConfig
239
- } else {
240
- mainApplication.receiver.push(receiverConfig)
241
- }
242
-
243
- debugLog('✅ RecordingActionReceiver configured')
244
-
245
- // Add AudioRecordingService
246
- if (!mainApplication.service) {
247
- mainApplication.service = []
248
- }
249
-
250
- const serviceConfig = {
251
- $: {
252
- 'android:name': '.AudioRecordingService',
253
- 'android:enabled': 'true' as const,
254
- 'android:exported': 'false' as const,
255
- 'android:foregroundServiceType': 'microphone',
256
- },
257
- }
258
-
259
- const serviceIndex = mainApplication.service.findIndex(
260
- (service: any) =>
261
- service.$?.['android:name'] === '.AudioRecordingService'
262
- )
263
-
264
- if (serviceIndex >= 0) {
265
- mainApplication.service[serviceIndex] = serviceConfig
266
- } else {
267
- mainApplication.service.push(serviceConfig)
268
- }
269
-
270
- debugLog('✅ AudioRecordingService configured')
271
- } else {
272
- console.error(
273
- `${LOG_PREFIX} ❌ Main application node not found in Android Manifest`
274
- )
275
- }
276
-
277
- return config
278
- })
279
-
280
- debugLog('✨ Recording Permissions Plugin configuration completed')
281
- return config as any
282
- }
283
-
284
- // Export as default
285
- export default withRecordingPermission
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "expo-module-scripts/tsconfig.plugin",
3
- "compilerOptions": {
4
- "outDir": "build",
5
- "lib": ["es2023", "dom"],
6
- "rootDir": "src"
7
- },
8
- "include": ["./src"],
9
- "exclude": ["**/__mocks__/*", "**/__tests__/*"]
10
- }
@@ -1 +0,0 @@
1
- {"root":["./src/index.ts"],"version":"5.8.3"}
@@ -1,224 +0,0 @@
1
- // packages/expo-audio-stream/src/AudioAnalysis/AudioAnalysis.types.ts
2
-
3
- import { BitDepth, ConsoleLike } from '../ExpoAudioStream.types'
4
-
5
- /**
6
- * Represents the configuration for decoding audio data.
7
- */
8
- export interface DecodingConfig {
9
- /** Target sample rate for decoded audio (Android and Web) */
10
- targetSampleRate?: number
11
- /** Target number of channels (Android and Web) */
12
- targetChannels?: number
13
- /** Target bit depth (Android and Web) */
14
- targetBitDepth?: BitDepth
15
- /** Whether to normalize audio levels (Android and Web) */
16
- normalizeAudio?: boolean
17
- }
18
-
19
- /**
20
- * Represents speech-related features extracted from audio.
21
- */
22
- export interface SpeechFeatures {
23
- isActive: boolean // Whether speech is detected in this segment
24
- speakerId?: number // Optional speaker identification
25
- // Could add more speech-related features here like:
26
- // confidence: number
27
- // language?: string
28
- // sentiment?: number
29
- // etc.
30
- }
31
-
32
- /**
33
- * Represents various audio features extracted from an audio signal.
34
- */
35
- export interface AudioFeatures {
36
- energy?: number // The infinite integral of the squared signal, representing the overall energy of the audio.
37
- mfcc?: number[] // Mel-frequency cepstral coefficients, describing the short-term power spectrum of a sound.
38
- rms?: number // Root mean square value, indicating the amplitude of the audio signal.
39
- minAmplitude?: number // Minimum amplitude value in the audio signal.
40
- maxAmplitude?: number // Maximum amplitude value in the audio signal.
41
- zcr?: number // Zero-crossing rate, indicating the rate at which the signal changes sign.
42
- spectralCentroid?: number // The center of mass of the spectrum, indicating the brightness of the sound.
43
- spectralFlatness?: number // Measure of the flatness of the spectrum, indicating how noise-like the signal is.
44
- spectralRolloff?: number // The frequency below which a specified percentage (usually 85%) of the total spectral energy lies.
45
- spectralBandwidth?: number // The width of the spectrum, indicating the range of frequencies present.
46
- chromagram?: number[] // Chromagram, representing the 12 different pitch classes of the audio.
47
- tempo?: number // Estimated tempo of the audio signal, measured in beats per minute (BPM).
48
- hnr?: number // Harmonics-to-noise ratio, indicating the proportion of harmonics to noise in the audio signal.
49
- melSpectrogram?: number[] // Mel-scaled spectrogram representation of the audio.
50
- spectralContrast?: number[] // Spectral contrast features representing the difference between peaks and valleys.
51
- tonnetz?: number[] // Tonal network features representing harmonic relationships.
52
- pitch?: number // Pitch of the audio signal, measured in Hertz (Hz).
53
- crc32?: number // crc32 checksum of the audio signal, used to verify the integrity of the audio.
54
- }
55
-
56
- /**
57
- * Options to specify which audio features to extract.
58
- * Note: Advanced features (spectral features, chromagram, pitch, etc.) are experimental,
59
- * especially during live recording, due to high processing requirements.
60
- */
61
- export interface AudioFeaturesOptions {
62
- // Basic features - well optimized
63
- energy?: boolean
64
- rms?: boolean
65
- zcr?: boolean
66
-
67
- // Advanced features - experimental, may impact performance in live recording
68
- mfcc?: boolean
69
- spectralCentroid?: boolean
70
- spectralFlatness?: boolean
71
- spectralRolloff?: boolean
72
- spectralBandwidth?: boolean
73
- chromagram?: boolean
74
- tempo?: boolean
75
- hnr?: boolean
76
- melSpectrogram?: boolean
77
- spectralContrast?: boolean
78
- tonnetz?: boolean
79
- pitch?: boolean
80
-
81
- // Utility
82
- crc32?: boolean
83
- }
84
-
85
- /**
86
- * Represents a single data point in the audio analysis.
87
- */
88
- export interface DataPoint {
89
- id: number
90
- amplitude: number // Peak amplitude for the segment
91
- rms: number // Root mean square value
92
- dB: number // dBFS (decibels relative to full scale) computed from RMS value
93
- silent: boolean // Always computed
94
- features?: AudioFeatures
95
- speech?: SpeechFeatures
96
- startTime?: number
97
- endTime?: number
98
- // start / end position in bytes
99
- startPosition?: number
100
- endPosition?: number
101
- // number of audio samples for this point (samples size depends on bit depth)
102
- samples?: number
103
- }
104
-
105
- /**
106
- * Represents the complete data from the audio analysis.
107
- */
108
- export interface AudioAnalysis {
109
- segmentDurationMs: number // Duration of each segment in milliseconds
110
- durationMs: number // Duration of the audio in milliseconds
111
- /**
112
- * Bit depth used for audio analysis processing.
113
- *
114
- * **Important**: This represents the internal processing bit depth, which may differ
115
- * from the recording bit depth. Audio is typically converted to 32-bit float for
116
- * analysis to ensure precision in calculations, regardless of the original recording format.
117
- *
118
- * Platform behavior:
119
- * - iOS: Always 32 (float processing)
120
- * - Android: Always 32 (float processing)
121
- * - Web: Always 32 (Web Audio API standard)
122
- *
123
- * The actual recorded file will maintain the requested bit depth (8, 16, or 32).
124
- */
125
- bitDepth: number
126
- samples: number // Size of the audio in bytes
127
- numberOfChannels: number // Number of audio channels
128
- sampleRate: number // Sample rate of the audio
129
- dataPoints: DataPoint[] // Array of data points from the analysis.
130
- amplitudeRange: {
131
- min: number
132
- max: number
133
- }
134
- rmsRange: {
135
- min: number
136
- max: number
137
- }
138
- extractionTimeMs: number // Time taken to extract/process the analysis in milliseconds
139
- // TODO: speaker changes into a broader speech analysis section
140
- speechAnalysis?: {
141
- speakerChanges: {
142
- timestamp: number
143
- speakerId: number
144
- }[]
145
- // Could add more speech analysis data here like:
146
- // dominantSpeaker?: number
147
- // totalSpeechDuration?: number
148
- // speakerStats?: { [speakerId: number]: { duration: number, segments: number } }
149
- }
150
- }
151
-
152
- /**
153
- * Options for specifying a time range within an audio file.
154
- */
155
- export interface AudioRangeOptions {
156
- /** Start time in milliseconds */
157
- startTimeMs?: number
158
- /** End time in milliseconds */
159
- endTimeMs?: number
160
- }
161
-
162
- /**
163
- * Options for generating a quick preview of audio waveform.
164
- * This is optimized for UI rendering with a specified number of points.
165
- */
166
- export interface PreviewOptions extends AudioRangeOptions {
167
- /** URI of the audio file to analyze */
168
- fileUri: string
169
- /**
170
- * Total number of points to generate for the preview.
171
- * @default 100
172
- */
173
- numberOfPoints?: number
174
- /**
175
- * Optional logger for debugging.
176
- */
177
- logger?: ConsoleLike
178
- /**
179
- * Optional configuration for decoding the audio file.
180
- * Defaults to:
181
- * - targetSampleRate: undefined (keep original)
182
- * - targetChannels: undefined (keep original)
183
- * - targetBitDepth: 16
184
- * - normalizeAudio: false
185
- */
186
- decodingOptions?: DecodingConfig
187
- }
188
-
189
- /**
190
- * Options for mel-spectrogram extraction
191
- *
192
- * @experimental This feature is experimental and currently only available on Android.
193
- * The API may change in future versions.
194
- */
195
- export interface ExtractMelSpectrogramOptions {
196
- fileUri?: string // Path to audio file
197
- arrayBuffer?: ArrayBuffer // Raw audio buffer
198
- windowSizeMs: number // Window size in ms (e.g., 25)
199
- hopLengthMs: number // Hop length in ms (e.g., 10)
200
- nMels: number // Number of mel filters (e.g., 60)
201
- fMin?: number // Min frequency (default: 0)
202
- fMax?: number // Max frequency (default: sampleRate / 2)
203
- windowType?: 'hann' | 'hamming' // Window function (default: 'hann')
204
- normalize?: boolean // Mean normalization (default: false)
205
- logScale?: boolean // Log scaling of mel energies (default: true)
206
- decodingOptions?: DecodingConfig // Audio decoding settings
207
- startTimeMs?: number // Optional start time
208
- endTimeMs?: number // Optional end time
209
- logger?: ConsoleLike
210
- }
211
-
212
- /**
213
- * Return type for mel spectrogram extraction
214
- *
215
- * @experimental This feature is experimental and currently only available on Android.
216
- * The API may change in future versions.
217
- */
218
- export interface MelSpectrogram {
219
- spectrogram: number[][] // 2D array [time][mel]
220
- sampleRate: number // Audio sample rate
221
- nMels: number // Number of mel filters
222
- timeSteps: number // Number of time frames
223
- durationMs: number // Audio duration in ms
224
- }