lq-audio-studio 0.0.0-stage → 4.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 (464) hide show
  1. package/CHANGELOG.md +810 -0
  2. package/LICENSE +21 -0
  3. package/README.md +268 -2
  4. package/android/build.gradle +144 -0
  5. package/android/consumer-rules.pro +1 -0
  6. package/android/src/main/AndroidManifest.xml +30 -0
  7. package/android/src/main/CMakeLists.txt +32 -0
  8. package/android/src/main/java/com/aozora/audio/AozoraWebRtcApm.java +36 -0
  9. package/android/src/main/java/net/siteed/audiostudio/AudioAnalysisData.kt +188 -0
  10. package/android/src/main/java/net/siteed/audiostudio/AudioDataEncoder.kt +9 -0
  11. package/android/src/main/java/net/siteed/audiostudio/AudioDeviceManager.kt +1666 -0
  12. package/android/src/main/java/net/siteed/audiostudio/AudioFeaturesNative.kt +26 -0
  13. package/android/src/main/java/net/siteed/audiostudio/AudioFileHandler.kt +136 -0
  14. package/android/src/main/java/net/siteed/audiostudio/AudioFormatUtils.kt +354 -0
  15. package/android/src/main/java/net/siteed/audiostudio/AudioNotificationsManager.kt +442 -0
  16. package/android/src/main/java/net/siteed/audiostudio/AudioProcessing.kt +95 -0
  17. package/android/src/main/java/net/siteed/audiostudio/AudioProcessor.kt +2330 -0
  18. package/android/src/main/java/net/siteed/audiostudio/AudioRecorderManager.kt +3506 -0
  19. package/android/src/main/java/net/siteed/audiostudio/AudioRecordingService.kt +167 -0
  20. package/android/src/main/java/net/siteed/audiostudio/AudioSourceResolver.kt +156 -0
  21. package/android/src/main/java/net/siteed/audiostudio/AudioStreamDecoder.kt +852 -0
  22. package/android/src/main/java/net/siteed/audiostudio/AudioStudioModule.kt +1404 -0
  23. package/android/src/main/java/net/siteed/audiostudio/AudioTrimmer.kt +1061 -0
  24. package/android/src/main/java/net/siteed/audiostudio/Constants.kt +48 -0
  25. package/android/src/main/java/net/siteed/audiostudio/EventSender.kt +13 -0
  26. package/android/src/main/java/net/siteed/audiostudio/FFT.kt +100 -0
  27. package/android/src/main/java/net/siteed/audiostudio/Features.kt +98 -0
  28. package/android/src/main/java/net/siteed/audiostudio/LogUtils.kt +93 -0
  29. package/android/src/main/java/net/siteed/audiostudio/MelSpectrogramNative.kt +36 -0
  30. package/android/src/main/java/net/siteed/audiostudio/NotificationConfig.kt +72 -0
  31. package/android/src/main/java/net/siteed/audiostudio/Pcm16FrameAccumulator.kt +47 -0
  32. package/android/src/main/java/net/siteed/audiostudio/PermissionUtils.kt +68 -0
  33. package/android/src/main/java/net/siteed/audiostudio/RecordingActionReceiver.kt +59 -0
  34. package/android/src/main/java/net/siteed/audiostudio/RecordingConfig.kt +324 -0
  35. package/android/src/main/java/net/siteed/audiostudio/SafeFilename.kt +33 -0
  36. package/android/src/main/java/net/siteed/audiostudio/VoiceProcessingEffects.kt +139 -0
  37. package/android/src/main/java/net/siteed/audiostudio/WaveformConfig.kt +19 -0
  38. package/android/src/main/java/net/siteed/audiostudio/WaveformRenderer.kt +159 -0
  39. package/android/src/main/java/net/siteed/audiostudio/WebRtcAudioFrameProcessor.kt +118 -0
  40. package/android/src/main/jni/AudioFeaturesJNI.cpp +152 -0
  41. package/android/src/main/jni/MelSpectrogramJNI.cpp +165 -0
  42. package/android/src/main/jniLibs/arm64-v8a/libaozora_apm.so +0 -0
  43. package/android/src/main/res/drawable/ic_default_action_icon.xml +16 -0
  44. package/android/src/main/res/drawable/ic_microphone.xml +13 -0
  45. package/android/src/main/res/drawable/ic_pause.xml +10 -0
  46. package/android/src/main/res/drawable/ic_play.xml +10 -0
  47. package/android/src/main/res/drawable/ic_stop.xml +10 -0
  48. package/android/src/main/res/layout/notification_recording.xml +37 -0
  49. package/android/src/main/webrtc-apm-notices/README.md +151 -0
  50. package/android/src/main/webrtc-apm-notices/THIRD_PARTY_NOTICES.md +25 -0
  51. package/android/src/main/webrtc-apm-notices/licenses/AUTHORS +7 -0
  52. package/android/src/main/webrtc-apm-notices/licenses/COPYING +29 -0
  53. package/android/src/main/webrtc-apm-notices/licenses/android-ndk/NOTICE +9997 -0
  54. package/android/src/main/webrtc-apm-notices/licenses/android-ndk/NOTICE.toolchain +15302 -0
  55. package/android/src/main/webrtc-apm-notices/licenses/subprojects/abseil-cpp-20230125.1/AUTHORS +6 -0
  56. package/android/src/main/webrtc-apm-notices/licenses/subprojects/abseil-cpp-20230125.1/LICENSE +203 -0
  57. package/android/src/main/webrtc-apm-notices/licenses/subprojects/abseil-cpp-20230125.1/LICENSE.build +19 -0
  58. package/android/src/main/webrtc-apm-notices/licenses/webrtc/LICENSE +29 -0
  59. package/android/src/main/webrtc-apm-notices/licenses/webrtc/PATENTS +24 -0
  60. package/android/src/main/webrtc-apm-notices/licenses/webrtc/common_audio/third_party/ooura/LICENSE +8 -0
  61. package/android/src/main/webrtc-apm-notices/licenses/webrtc/common_audio/third_party/spl_sqrt_floor/LICENSE +27 -0
  62. package/android/src/main/webrtc-apm-notices/licenses/webrtc/modules/third_party/fft/LICENSE +25 -0
  63. package/android/src/main/webrtc-apm-notices/licenses/webrtc/third_party/pffft/LICENSE +1 -0
  64. package/android/src/main/webrtc-apm-notices/licenses/webrtc/third_party/rnnoise/COPYING +1 -0
  65. package/android/src/main/webrtc-apm-notices/licenses/wrapper-LICENSE +27 -0
  66. package/android/src/main/webrtc-apm-notices/manifest.json +150 -0
  67. package/app.plugin.js +3 -0
  68. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js +4 -0
  69. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js.map +1 -0
  70. package/build/cjs/AudioAnalysis/audioFeaturesWasm.js +19 -0
  71. package/build/cjs/AudioAnalysis/audioFeaturesWasm.js.map +1 -0
  72. package/build/cjs/AudioAnalysis/audioFeaturesWasm.web.js +147 -0
  73. package/build/cjs/AudioAnalysis/audioFeaturesWasm.web.js.map +1 -0
  74. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js +216 -0
  75. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js.map +1 -0
  76. package/build/cjs/AudioAnalysis/extractAudioData.js +163 -0
  77. package/build/cjs/AudioAnalysis/extractAudioData.js.map +1 -0
  78. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js +90 -0
  79. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js.map +1 -0
  80. package/build/cjs/AudioAnalysis/extractPreview.js +105 -0
  81. package/build/cjs/AudioAnalysis/extractPreview.js.map +1 -0
  82. package/build/cjs/AudioAnalysis/extractPreviewBars.js +134 -0
  83. package/build/cjs/AudioAnalysis/extractPreviewBars.js.map +1 -0
  84. package/build/cjs/AudioAnalysis/melSpectrogramWasm.js +17 -0
  85. package/build/cjs/AudioAnalysis/melSpectrogramWasm.js.map +1 -0
  86. package/build/cjs/AudioAnalysis/melSpectrogramWasm.web.js +107 -0
  87. package/build/cjs/AudioAnalysis/melSpectrogramWasm.web.js.map +1 -0
  88. package/build/cjs/AudioAnalysis/wasmConfig.js +26 -0
  89. package/build/cjs/AudioAnalysis/wasmConfig.js.map +1 -0
  90. package/build/cjs/AudioAnalysis/wasmLoader.web.js +79 -0
  91. package/build/cjs/AudioAnalysis/wasmLoader.web.js.map +1 -0
  92. package/build/cjs/AudioDeviceManager.js +689 -0
  93. package/build/cjs/AudioDeviceManager.js.map +1 -0
  94. package/build/cjs/AudioRecorder.provider.js +44 -0
  95. package/build/cjs/AudioRecorder.provider.js.map +1 -0
  96. package/build/cjs/AudioStudio.native.js +8 -0
  97. package/build/cjs/AudioStudio.native.js.map +1 -0
  98. package/build/cjs/AudioStudio.types.js +11 -0
  99. package/build/cjs/AudioStudio.types.js.map +1 -0
  100. package/build/cjs/AudioStudio.web.js +820 -0
  101. package/build/cjs/AudioStudio.web.js.map +1 -0
  102. package/build/cjs/AudioStudioModule.js +128 -0
  103. package/build/cjs/AudioStudioModule.js.map +1 -0
  104. package/build/cjs/WebRecorder.web.js +865 -0
  105. package/build/cjs/WebRecorder.web.js.map +1 -0
  106. package/build/cjs/constants/platformLimitations.js +99 -0
  107. package/build/cjs/constants/platformLimitations.js.map +1 -0
  108. package/build/cjs/constants.js +20 -0
  109. package/build/cjs/constants.js.map +1 -0
  110. package/build/cjs/errors/AudioExtractionError.js +127 -0
  111. package/build/cjs/errors/AudioExtractionError.js.map +1 -0
  112. package/build/cjs/errors/AudioStreamError.js +161 -0
  113. package/build/cjs/errors/AudioStreamError.js.map +1 -0
  114. package/build/cjs/errors/AudioStreamError.test.js +82 -0
  115. package/build/cjs/errors/AudioStreamError.test.js.map +1 -0
  116. package/build/cjs/errors/StartRecordingError.js +82 -0
  117. package/build/cjs/errors/StartRecordingError.js.map +1 -0
  118. package/build/cjs/errors/StartRecordingError.test.js +73 -0
  119. package/build/cjs/errors/StartRecordingError.test.js.map +1 -0
  120. package/build/cjs/events.js +76 -0
  121. package/build/cjs/events.js.map +1 -0
  122. package/build/cjs/hooks/useAudioDevices.js +179 -0
  123. package/build/cjs/hooks/useAudioDevices.js.map +1 -0
  124. package/build/cjs/index.js +87 -0
  125. package/build/cjs/index.js.map +1 -0
  126. package/build/cjs/prebuilt/wasm/mel-spectrogram.js +18 -0
  127. package/build/cjs/streamAudioData.js +534 -0
  128. package/build/cjs/streamAudioData.js.map +1 -0
  129. package/build/cjs/trimAudio.js +303 -0
  130. package/build/cjs/trimAudio.js.map +1 -0
  131. package/build/cjs/useAudioRecorder.js +728 -0
  132. package/build/cjs/useAudioRecorder.js.map +1 -0
  133. package/build/cjs/utils/BlobFix.js +502 -0
  134. package/build/cjs/utils/BlobFix.js.map +1 -0
  135. package/build/cjs/utils/audioProcessing.js +140 -0
  136. package/build/cjs/utils/audioProcessing.js.map +1 -0
  137. package/build/cjs/utils/cleanNativeOptions.js +22 -0
  138. package/build/cjs/utils/cleanNativeOptions.js.map +1 -0
  139. package/build/cjs/utils/concatenateBuffers.js +25 -0
  140. package/build/cjs/utils/concatenateBuffers.js.map +1 -0
  141. package/build/cjs/utils/convertPCMToFloat32.js +124 -0
  142. package/build/cjs/utils/convertPCMToFloat32.js.map +1 -0
  143. package/build/cjs/utils/crc32.js +52 -0
  144. package/build/cjs/utils/crc32.js.map +1 -0
  145. package/build/cjs/utils/encodeCompressedAudio.web.js +65 -0
  146. package/build/cjs/utils/encodeCompressedAudio.web.js.map +1 -0
  147. package/build/cjs/utils/encodingToBitDepth.js +17 -0
  148. package/build/cjs/utils/encodingToBitDepth.js.map +1 -0
  149. package/build/cjs/utils/getWavFileInfo.js +96 -0
  150. package/build/cjs/utils/getWavFileInfo.js.map +1 -0
  151. package/build/cjs/utils/nativeRecordingOptions.js +13 -0
  152. package/build/cjs/utils/nativeRecordingOptions.js.map +1 -0
  153. package/build/cjs/utils/nativeRecordingOptions.test.js +30 -0
  154. package/build/cjs/utils/nativeRecordingOptions.test.js.map +1 -0
  155. package/build/cjs/utils/resampleAudioBuffer.web.js +25 -0
  156. package/build/cjs/utils/resampleAudioBuffer.web.js.map +1 -0
  157. package/build/cjs/utils/writeWavHeader.js +88 -0
  158. package/build/cjs/utils/writeWavHeader.js.map +1 -0
  159. package/build/cjs/workers/InlineFeaturesExtractor.web.js +294 -0
  160. package/build/cjs/workers/InlineFeaturesExtractor.web.js.map +1 -0
  161. package/build/cjs/workers/inlineAudioWebWorker.web.js +190 -0
  162. package/build/cjs/workers/inlineAudioWebWorker.web.js.map +1 -0
  163. package/build/cjs/workers/wasmGlueString.web.js +27 -0
  164. package/build/cjs/workers/wasmGlueString.web.js.map +1 -0
  165. package/build/esm/AudioAnalysis/AudioAnalysis.types.js +3 -0
  166. package/build/esm/AudioAnalysis/AudioAnalysis.types.js.map +1 -0
  167. package/build/esm/AudioAnalysis/audioFeaturesWasm.js +14 -0
  168. package/build/esm/AudioAnalysis/audioFeaturesWasm.js.map +1 -0
  169. package/build/esm/AudioAnalysis/audioFeaturesWasm.web.js +142 -0
  170. package/build/esm/AudioAnalysis/audioFeaturesWasm.web.js.map +1 -0
  171. package/build/esm/AudioAnalysis/extractAudioAnalysis.js +208 -0
  172. package/build/esm/AudioAnalysis/extractAudioAnalysis.js.map +1 -0
  173. package/build/esm/AudioAnalysis/extractAudioData.js +156 -0
  174. package/build/esm/AudioAnalysis/extractAudioData.js.map +1 -0
  175. package/build/esm/AudioAnalysis/extractMelSpectrogram.js +86 -0
  176. package/build/esm/AudioAnalysis/extractMelSpectrogram.js.map +1 -0
  177. package/build/esm/AudioAnalysis/extractPreview.js +102 -0
  178. package/build/esm/AudioAnalysis/extractPreview.js.map +1 -0
  179. package/build/esm/AudioAnalysis/extractPreviewBars.js +128 -0
  180. package/build/esm/AudioAnalysis/extractPreviewBars.js.map +1 -0
  181. package/build/esm/AudioAnalysis/melSpectrogramWasm.js +12 -0
  182. package/build/esm/AudioAnalysis/melSpectrogramWasm.js.map +1 -0
  183. package/build/esm/AudioAnalysis/melSpectrogramWasm.web.js +102 -0
  184. package/build/esm/AudioAnalysis/melSpectrogramWasm.web.js.map +1 -0
  185. package/build/esm/AudioAnalysis/wasmConfig.js +21 -0
  186. package/build/esm/AudioAnalysis/wasmConfig.js.map +1 -0
  187. package/build/esm/AudioAnalysis/wasmLoader.web.js +43 -0
  188. package/build/esm/AudioAnalysis/wasmLoader.web.js.map +1 -0
  189. package/build/esm/AudioDeviceManager.js +682 -0
  190. package/build/esm/AudioDeviceManager.js.map +1 -0
  191. package/build/esm/AudioRecorder.provider.js +39 -0
  192. package/build/esm/AudioRecorder.provider.js.map +1 -0
  193. package/build/esm/AudioStudio.native.js +6 -0
  194. package/build/esm/AudioStudio.native.js.map +1 -0
  195. package/build/esm/AudioStudio.types.js +8 -0
  196. package/build/esm/AudioStudio.types.js.map +1 -0
  197. package/build/esm/AudioStudio.web.js +816 -0
  198. package/build/esm/AudioStudio.web.js.map +1 -0
  199. package/build/esm/AudioStudioModule.js +126 -0
  200. package/build/esm/AudioStudioModule.js.map +1 -0
  201. package/build/esm/WebRecorder.web.js +861 -0
  202. package/build/esm/WebRecorder.web.js.map +1 -0
  203. package/build/esm/constants/platformLimitations.js +90 -0
  204. package/build/esm/constants/platformLimitations.js.map +1 -0
  205. package/build/esm/constants.js +17 -0
  206. package/build/esm/constants.js.map +1 -0
  207. package/build/esm/errors/AudioExtractionError.js +122 -0
  208. package/build/esm/errors/AudioExtractionError.js.map +1 -0
  209. package/build/esm/errors/AudioStreamError.js +156 -0
  210. package/build/esm/errors/AudioStreamError.js.map +1 -0
  211. package/build/esm/errors/AudioStreamError.test.js +80 -0
  212. package/build/esm/errors/AudioStreamError.test.js.map +1 -0
  213. package/build/esm/errors/StartRecordingError.js +76 -0
  214. package/build/esm/errors/StartRecordingError.js.map +1 -0
  215. package/build/esm/errors/StartRecordingError.test.js +71 -0
  216. package/build/esm/errors/StartRecordingError.test.js.map +1 -0
  217. package/build/esm/events.js +66 -0
  218. package/build/esm/events.js.map +1 -0
  219. package/build/esm/hooks/useAudioDevices.js +176 -0
  220. package/build/esm/hooks/useAudioDevices.js.map +1 -0
  221. package/build/esm/index.js +31 -0
  222. package/build/esm/index.js.map +1 -0
  223. package/build/esm/prebuilt/wasm/mel-spectrogram.js +18 -0
  224. package/build/esm/streamAudioData.js +527 -0
  225. package/build/esm/streamAudioData.js.map +1 -0
  226. package/build/esm/trimAudio.js +296 -0
  227. package/build/esm/trimAudio.js.map +1 -0
  228. package/build/esm/useAudioRecorder.js +722 -0
  229. package/build/esm/useAudioRecorder.js.map +1 -0
  230. package/build/esm/utils/BlobFix.js +498 -0
  231. package/build/esm/utils/BlobFix.js.map +1 -0
  232. package/build/esm/utils/audioProcessing.js +137 -0
  233. package/build/esm/utils/audioProcessing.js.map +1 -0
  234. package/build/esm/utils/cleanNativeOptions.js +19 -0
  235. package/build/esm/utils/cleanNativeOptions.js.map +1 -0
  236. package/build/esm/utils/concatenateBuffers.js +21 -0
  237. package/build/esm/utils/concatenateBuffers.js.map +1 -0
  238. package/build/esm/utils/convertPCMToFloat32.js +120 -0
  239. package/build/esm/utils/convertPCMToFloat32.js.map +1 -0
  240. package/build/esm/utils/crc32.js +50 -0
  241. package/build/esm/utils/crc32.js.map +1 -0
  242. package/build/esm/utils/encodeCompressedAudio.web.js +62 -0
  243. package/build/esm/utils/encodeCompressedAudio.web.js.map +1 -0
  244. package/build/esm/utils/encodingToBitDepth.js +13 -0
  245. package/build/esm/utils/encodingToBitDepth.js.map +1 -0
  246. package/build/esm/utils/getWavFileInfo.js +92 -0
  247. package/build/esm/utils/getWavFileInfo.js.map +1 -0
  248. package/build/esm/utils/nativeRecordingOptions.js +10 -0
  249. package/build/esm/utils/nativeRecordingOptions.js.map +1 -0
  250. package/build/esm/utils/nativeRecordingOptions.test.js +28 -0
  251. package/build/esm/utils/nativeRecordingOptions.test.js.map +1 -0
  252. package/build/esm/utils/resampleAudioBuffer.web.js +22 -0
  253. package/build/esm/utils/resampleAudioBuffer.web.js.map +1 -0
  254. package/build/esm/utils/writeWavHeader.js +84 -0
  255. package/build/esm/utils/writeWavHeader.js.map +1 -0
  256. package/build/esm/workers/InlineFeaturesExtractor.web.js +291 -0
  257. package/build/esm/workers/InlineFeaturesExtractor.web.js.map +1 -0
  258. package/build/esm/workers/inlineAudioWebWorker.web.js +187 -0
  259. package/build/esm/workers/inlineAudioWebWorker.web.js.map +1 -0
  260. package/build/esm/workers/wasmGlueString.web.js +24 -0
  261. package/build/esm/workers/wasmGlueString.web.js.map +1 -0
  262. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts +288 -0
  263. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts.map +1 -0
  264. package/build/types/AudioAnalysis/audioFeaturesWasm.d.ts +8 -0
  265. package/build/types/AudioAnalysis/audioFeaturesWasm.d.ts.map +1 -0
  266. package/build/types/AudioAnalysis/audioFeaturesWasm.web.d.ts +43 -0
  267. package/build/types/AudioAnalysis/audioFeaturesWasm.web.d.ts.map +1 -0
  268. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts +74 -0
  269. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts.map +1 -0
  270. package/build/types/AudioAnalysis/extractAudioData.d.ts +3 -0
  271. package/build/types/AudioAnalysis/extractAudioData.d.ts.map +1 -0
  272. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts +20 -0
  273. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts.map +1 -0
  274. package/build/types/AudioAnalysis/extractPreview.d.ts +11 -0
  275. package/build/types/AudioAnalysis/extractPreview.d.ts.map +1 -0
  276. package/build/types/AudioAnalysis/extractPreviewBars.d.ts +12 -0
  277. package/build/types/AudioAnalysis/extractPreviewBars.d.ts.map +1 -0
  278. package/build/types/AudioAnalysis/melSpectrogramWasm.d.ts +4 -0
  279. package/build/types/AudioAnalysis/melSpectrogramWasm.d.ts.map +1 -0
  280. package/build/types/AudioAnalysis/melSpectrogramWasm.web.d.ts +16 -0
  281. package/build/types/AudioAnalysis/melSpectrogramWasm.web.d.ts.map +1 -0
  282. package/build/types/AudioAnalysis/wasmConfig.d.ts +4 -0
  283. package/build/types/AudioAnalysis/wasmConfig.d.ts.map +1 -0
  284. package/build/types/AudioAnalysis/wasmLoader.web.d.ts +3 -0
  285. package/build/types/AudioAnalysis/wasmLoader.web.d.ts.map +1 -0
  286. package/build/types/AudioDeviceManager.d.ts +188 -0
  287. package/build/types/AudioDeviceManager.d.ts.map +1 -0
  288. package/build/types/AudioRecorder.provider.d.ts +11 -0
  289. package/build/types/AudioRecorder.provider.d.ts.map +1 -0
  290. package/build/types/AudioStudio.native.d.ts +3 -0
  291. package/build/types/AudioStudio.native.d.ts.map +1 -0
  292. package/build/types/AudioStudio.types.d.ts +912 -0
  293. package/build/types/AudioStudio.types.d.ts.map +1 -0
  294. package/build/types/AudioStudio.web.d.ts +112 -0
  295. package/build/types/AudioStudio.web.d.ts.map +1 -0
  296. package/build/types/AudioStudioModule.d.ts +3 -0
  297. package/build/types/AudioStudioModule.d.ts.map +1 -0
  298. package/build/types/WebRecorder.web.d.ts +208 -0
  299. package/build/types/WebRecorder.web.d.ts.map +1 -0
  300. package/build/types/constants/platformLimitations.d.ts +40 -0
  301. package/build/types/constants/platformLimitations.d.ts.map +1 -0
  302. package/build/types/constants.d.ts +14 -0
  303. package/build/types/constants.d.ts.map +1 -0
  304. package/build/types/errors/AudioExtractionError.d.ts +24 -0
  305. package/build/types/errors/AudioExtractionError.d.ts.map +1 -0
  306. package/build/types/errors/AudioStreamError.d.ts +25 -0
  307. package/build/types/errors/AudioStreamError.d.ts.map +1 -0
  308. package/build/types/errors/AudioStreamError.test.d.ts +2 -0
  309. package/build/types/errors/AudioStreamError.test.d.ts.map +1 -0
  310. package/build/types/errors/StartRecordingError.d.ts +51 -0
  311. package/build/types/errors/StartRecordingError.d.ts.map +1 -0
  312. package/build/types/errors/StartRecordingError.test.d.ts +2 -0
  313. package/build/types/errors/StartRecordingError.test.d.ts.map +1 -0
  314. package/build/types/events.d.ts +74 -0
  315. package/build/types/events.d.ts.map +1 -0
  316. package/build/types/hooks/useAudioDevices.d.ts +15 -0
  317. package/build/types/hooks/useAudioDevices.d.ts.map +1 -0
  318. package/build/types/index.d.ts +34 -0
  319. package/build/types/index.d.ts.map +1 -0
  320. package/build/types/streamAudioData.d.ts +119 -0
  321. package/build/types/streamAudioData.d.ts.map +1 -0
  322. package/build/types/trimAudio.d.ts +25 -0
  323. package/build/types/trimAudio.d.ts.map +1 -0
  324. package/build/types/useAudioRecorder.d.ts +25 -0
  325. package/build/types/useAudioRecorder.d.ts.map +1 -0
  326. package/build/types/utils/BlobFix.d.ts +9 -0
  327. package/build/types/utils/BlobFix.d.ts.map +1 -0
  328. package/build/types/utils/audioProcessing.d.ts +24 -0
  329. package/build/types/utils/audioProcessing.d.ts.map +1 -0
  330. package/build/types/utils/cleanNativeOptions.d.ts +15 -0
  331. package/build/types/utils/cleanNativeOptions.d.ts.map +1 -0
  332. package/build/types/utils/concatenateBuffers.d.ts +8 -0
  333. package/build/types/utils/concatenateBuffers.d.ts.map +1 -0
  334. package/build/types/utils/convertPCMToFloat32.d.ts +13 -0
  335. package/build/types/utils/convertPCMToFloat32.d.ts.map +1 -0
  336. package/build/types/utils/crc32.d.ts +7 -0
  337. package/build/types/utils/crc32.d.ts.map +1 -0
  338. package/build/types/utils/encodeCompressedAudio.web.d.ts +10 -0
  339. package/build/types/utils/encodeCompressedAudio.web.d.ts.map +1 -0
  340. package/build/types/utils/encodingToBitDepth.d.ts +5 -0
  341. package/build/types/utils/encodingToBitDepth.d.ts.map +1 -0
  342. package/build/types/utils/getWavFileInfo.d.ts +26 -0
  343. package/build/types/utils/getWavFileInfo.d.ts.map +1 -0
  344. package/build/types/utils/nativeRecordingOptions.d.ts +28 -0
  345. package/build/types/utils/nativeRecordingOptions.d.ts.map +1 -0
  346. package/build/types/utils/nativeRecordingOptions.test.d.ts +2 -0
  347. package/build/types/utils/nativeRecordingOptions.test.d.ts.map +1 -0
  348. package/build/types/utils/resampleAudioBuffer.web.d.ts +2 -0
  349. package/build/types/utils/resampleAudioBuffer.web.d.ts.map +1 -0
  350. package/build/types/utils/writeWavHeader.d.ts +34 -0
  351. package/build/types/utils/writeWavHeader.d.ts.map +1 -0
  352. package/build/types/workers/InlineFeaturesExtractor.web.d.ts +2 -0
  353. package/build/types/workers/InlineFeaturesExtractor.web.d.ts.map +1 -0
  354. package/build/types/workers/inlineAudioWebWorker.web.d.ts +2 -0
  355. package/build/types/workers/inlineAudioWebWorker.web.d.ts.map +1 -0
  356. package/build/types/workers/wasmGlueString.web.d.ts +2 -0
  357. package/build/types/workers/wasmGlueString.web.d.ts.map +1 -0
  358. package/cpp/AudioFeatures.cpp +274 -0
  359. package/cpp/AudioFeatures.h +85 -0
  360. package/cpp/AudioFeaturesBridge.cpp +146 -0
  361. package/cpp/AudioFeaturesBridge.h +47 -0
  362. package/cpp/MelSpectrogram.cpp +227 -0
  363. package/cpp/MelSpectrogram.h +82 -0
  364. package/cpp/MelSpectrogramBridge.cpp +112 -0
  365. package/cpp/MelSpectrogramBridge.h +33 -0
  366. package/cpp/kiss_fft/COPYING +11 -0
  367. package/cpp/kiss_fft/_kiss_fft_guts.h +167 -0
  368. package/cpp/kiss_fft/kiss_fft.c +424 -0
  369. package/cpp/kiss_fft/kiss_fft.h +160 -0
  370. package/cpp/kiss_fft/kiss_fft_log.h +36 -0
  371. package/cpp/kiss_fft/kiss_fftr.c +155 -0
  372. package/cpp/kiss_fft/kiss_fftr.h +54 -0
  373. package/expo-module.config.json +10 -0
  374. package/ios/AudioAnalysisData.swift +74 -0
  375. package/ios/AudioDeviceManager.swift +670 -0
  376. package/ios/AudioFeaturesWrapper.h +21 -0
  377. package/ios/AudioFeaturesWrapper.mm +63 -0
  378. package/ios/AudioNotificationManager.swift +154 -0
  379. package/ios/AudioProcessingHelpers.swift +821 -0
  380. package/ios/AudioProcessor.swift +1908 -0
  381. package/ios/AudioStreamDecoder.swift +614 -0
  382. package/ios/AudioStreamError.swift +7 -0
  383. package/ios/AudioStreamManager.swift +2989 -0
  384. package/ios/AudioStreamManagerDelegate.swift +17 -0
  385. package/ios/AudioStudio.podspec +39 -0
  386. package/ios/AudioStudioModule.swift +1549 -0
  387. package/ios/BridgedNarrowing.swift +153 -0
  388. package/ios/DataPoint.swift +54 -0
  389. package/ios/DecodingConfig.swift +59 -0
  390. package/ios/DeviceDisconnectionBehavior.swift +11 -0
  391. package/ios/FFT.swift +62 -0
  392. package/ios/Features.swift +95 -0
  393. package/ios/ISSUE_IOS.md +68 -0
  394. package/ios/Logger.swift +39 -0
  395. package/ios/MelSpectrogramWrapper.h +30 -0
  396. package/ios/MelSpectrogramWrapper.mm +97 -0
  397. package/ios/NotificationExtension.swift +15 -0
  398. package/ios/OutputPromotion.swift +52 -0
  399. package/ios/PrimaryWriteFailurePolicy.swift +81 -0
  400. package/ios/RecordingResult.swift +86 -0
  401. package/ios/RecordingSettings.swift +449 -0
  402. package/ios/SafeFilename.swift +35 -0
  403. package/ios/TrimFormatResolution.swift +48 -0
  404. package/ios/WaveformExtractor.swift +105 -0
  405. package/package.json +165 -5
  406. package/plugin/build/index.cjs +226 -0
  407. package/plugin/build/index.d.cts +37 -0
  408. package/plugin/build/index.js +226 -0
  409. package/plugin/src/index.test.ts +78 -0
  410. package/plugin/src/index.ts +367 -0
  411. package/plugin/tsconfig.json +21 -0
  412. package/plugin/tsconfig.tsbuildinfo +1 -0
  413. package/prebuilt/wasm/mel-spectrogram.js +18 -0
  414. package/src/AudioAnalysis/AudioAnalysis.types.ts +320 -0
  415. package/src/AudioAnalysis/audio-features-wasm.d.ts +37 -0
  416. package/src/AudioAnalysis/audioFeaturesWasm.ts +34 -0
  417. package/src/AudioAnalysis/audioFeaturesWasm.web.ts +211 -0
  418. package/src/AudioAnalysis/extractAudioAnalysis.ts +353 -0
  419. package/src/AudioAnalysis/extractAudioData.ts +199 -0
  420. package/src/AudioAnalysis/extractMelSpectrogram.ts +140 -0
  421. package/src/AudioAnalysis/extractPreview.ts +135 -0
  422. package/src/AudioAnalysis/extractPreviewBars.ts +193 -0
  423. package/src/AudioAnalysis/mel-spectrogram-wasm.d.ts +48 -0
  424. package/src/AudioAnalysis/melSpectrogramWasm.ts +33 -0
  425. package/src/AudioAnalysis/melSpectrogramWasm.web.ts +169 -0
  426. package/src/AudioAnalysis/wasmConfig.ts +24 -0
  427. package/src/AudioAnalysis/wasmLoader.web.ts +53 -0
  428. package/src/AudioDeviceManager.ts +801 -0
  429. package/src/AudioRecorder.provider.tsx +57 -0
  430. package/src/AudioStudio.native.ts +6 -0
  431. package/src/AudioStudio.types.ts +1087 -0
  432. package/src/AudioStudio.web.ts +1050 -0
  433. package/src/AudioStudioModule.ts +141 -0
  434. package/src/WebRecorder.web.ts +1114 -0
  435. package/src/constants/platformLimitations.ts +118 -0
  436. package/src/constants.ts +21 -0
  437. package/src/errors/AudioExtractionError.ts +167 -0
  438. package/src/errors/AudioStreamError.test.ts +92 -0
  439. package/src/errors/AudioStreamError.ts +199 -0
  440. package/src/errors/StartRecordingError.test.ts +97 -0
  441. package/src/errors/StartRecordingError.ts +91 -0
  442. package/src/events.ts +125 -0
  443. package/src/hooks/useAudioDevices.ts +213 -0
  444. package/src/index.ts +115 -0
  445. package/src/streamAudioData.ts +758 -0
  446. package/src/trimAudio.ts +445 -0
  447. package/src/types/crc-32.d.ts +9 -0
  448. package/src/useAudioRecorder.tsx +1037 -0
  449. package/src/utils/BlobFix.ts +561 -0
  450. package/src/utils/audioProcessing.ts +216 -0
  451. package/src/utils/cleanNativeOptions.ts +18 -0
  452. package/src/utils/concatenateBuffers.ts +24 -0
  453. package/src/utils/convertPCMToFloat32.ts +170 -0
  454. package/src/utils/crc32.ts +59 -0
  455. package/src/utils/encodeCompressedAudio.web.ts +78 -0
  456. package/src/utils/encodingToBitDepth.ts +18 -0
  457. package/src/utils/getWavFileInfo.ts +132 -0
  458. package/src/utils/nativeRecordingOptions.test.ts +29 -0
  459. package/src/utils/nativeRecordingOptions.ts +20 -0
  460. package/src/utils/resampleAudioBuffer.web.ts +39 -0
  461. package/src/utils/writeWavHeader.ts +115 -0
  462. package/src/workers/InlineFeaturesExtractor.web.tsx +291 -0
  463. package/src/workers/inlineAudioWebWorker.web.tsx +186 -0
  464. package/src/workers/wasmGlueString.web.ts +23 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,810 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [4.0.0] - 2026-10-21
9
+
10
+ ### Added
11
+
12
+ - Android `audioSource: 'voiceCommunication'` now opens `VOICE_COMMUNICATION` capture and explicitly attaches every available platform AEC, noise-suppression, and automatic-gain-control effect to the `AudioRecord` session. Each effect is checked and enabled independently, logged with its OEM implementation, released before the recorder, and safely skipped when unsupported or rejected by the device. Effects are reattached when Android rebuilds capture after a route change or interruption.
13
+
14
+ ## [4.0.0-beta.0] - 2026-08-24
15
+
16
+ ### Fixed
17
+
18
+ - Android recording notifications no longer fail to initialize when the host package has no launch Activity. Headless and self-instrumenting hosts now omit the notification content intent while keeping recording actions available, instead of logging update failures throughout the recording.
19
+ - Android device changes now claim their recording session before the transition delay and recheck it before restart. A concurrent stop could previously finish during that delay, leaving a header-only WAV or restarting an `AudioRecord` after the manager had stopped. Pauses now defer restart without double-pausing compressed output, and a failed switch emits one truthful interruption event (#472).
20
+ - iOS `trimAudio` AAC output now honours the requested sample rate. Writing source-format buffers to a target-rate writer mis-timed the output — one second at 44.1kHz came back as 2.0s at 22.05kHz and 0.92s at 48kHz. The AAC path now converts against the writer's resolved format, the same treatment the WAV path received. An explicitly requested bitrate the encoder cannot serve is now an error rather than a silent substitution; only the library's own default gives way. A requested rate the AAC encoder would resolve to something else — 1Hz to 8kHz, 384kHz to 192kHz — is refused rather than returned as success (#451).
21
+ - iOS `trimAudio` preserves the input's bit depth when none is requested, and honours a bitDepth-only request instead of ignoring it via the fast path. An omitted depth previously forced 16-bit during any rate or channel change, contrary to the documented contract (#451).
22
+
23
+ - `trimAudio` and `startRecording` now reject a filename that is not a single path component, on both platforms. Each appended the caller's value to a directory, so `../../../../tmp/pwned` wrote outside it — `File(filesDir, ...)` and `appendingPathComponent` resolve `..` alike. Android trim rejects with `INVALID_OUTPUT_FILENAME`, Android recording with `INVALID_CONFIG`, iOS with an invalid-settings failure (#452).
24
+ - iOS `trimAudio` now rejects an `outputFileName` that is not a single filename. The value is appended to the output directory, so a path could traverse out of it — `../../../../tmp/pwned` resolved to `/var/tmp/pwned.wav` and the trim wrote there (#433).
25
+ - iOS `extractMelSpectrogram` no longer crashes on a large `windowSizeMs`, `hopLengthMs`, `startTimeMs` or `endTimeMs`. Those options are validated as representable, but the value is then multiplied by the file's sample rate, and the product can overflow the type it is narrowed to — `windowSizeMs: 100000000` is 4.41e9 samples at 44.1 kHz, which fits `Int` and traps the `Int32` the native wrapper takes. The conversions now clamp where the sample rate is known, since no bound on the option alone can be correct (#433).
26
+
27
+ ### Added
28
+
29
+ - `addRecordingErrorListener()` subscribes to errors raised while recording is already running. iOS emitted these all along with no typed way to subscribe, so a failure that does not reject a call — the stalled WAV in #420, for one — was unobservable. Both platforms now emit it: Android declares the event and reports the AudioRecord leaving its initialized state, a read returning an error code, the primary WAV failing to flush, and the recording loop dying (#447).
30
+ - `android.audioSource` controls which `MediaRecorder.AudioSource` Android captures from, so callers can bypass OEM voice processing. Recording was hardcoded to `MIC`, which applies noise suppression, AGC and — on Honor/Huawei and Xiaomi/Redmi devices — an aggressive enhancement pass that degrades speech-to-text and acoustic analysis. Accepts `'mic'` (default, unchanged), `'voiceRecognition'`, `'unprocessed'`, or `'auto'`. This is the Android counterpart to `ios.audioSession.mode: 'measurement'`.
31
+ `'unprocessed'` needs hardware support, and Android treats it as `DEFAULT` where absent — the recorder opens and reports success while processing stays on. Availability is therefore gated on `AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED`, with a construction probe confirming the requested format, falling back to `'mic'`. The source actually used is reported on the start result as `androidAudioSource`, so a fallback is visible instead of silent.
32
+
33
+ ### Changed
34
+
35
+ - iOS primary WAV output now recovers from a failed write instead of stopping silently. After an audio interruption the file handle could be left unusable; every later append failed on a background queue and was only logged, so the compressed M4A kept growing while the WAV — often used as a crash-recovery backup — stalled at its interruption-time size with no error (#420). Failed appends now reopen the handle and retry, and if that cannot be done the failure is reported once per recording rather than per dropped buffer.
36
+ - **Breaking for error handling:** iOS `startRecording` and `prepareRecording` no longer reject with the code `"ERROR"` and a fixed message. Callers matching on that code or on the exact string must switch on `error.code` instead; use the exported `startRecordingErrorCode()` helper to narrow it.
37
+ - iOS `startRecording` now rejects with a specific reason instead of the single message "Failed to start recording.". Six distinct failures — an active phone call, a recording already in progress, missing settings, a failed audio tap, preparation failure, and the audio engine refusing to start — previously collapsed into one string. The codes match the ones Android already emits (`ONGOING_CALL`, `ALREADY_RECORDING`, `FILE_CREATION_FAILED`, `START_FAILED`), so callers switch on one vocabulary rather than one per platform. New `startRecordingErrorCode()` helper and `StartRecordingErrorCode` type narrow an unknown rejection.
38
+
39
+ ## [3.2.1] - 2026-06-20
40
+
41
+ Stable release of the 3.2.1 beta fixes plus recent release-blocker validation.
42
+
43
+ ### Fixed
44
+
45
+ - iOS interruption-ended handling now resumes eligible system-paused recordings even when iOS omits interruption options.
46
+ - iOS recording preparation/start now fails when hardware exposes an invalid input format instead of installing a synthetic fallback tap that can silently record no buffers.
47
+ - Android Expo plugin foreground-only configuration removes recording service and receiver manifest entries when `enableBackgroundAudio` is disabled.
48
+ - Max-duration auto-stop uses the normal hook finalization path so `onRecordingStopped(recording, reason)` receives the final recording with retained analysis data.
49
+
50
+ ## [3.2.1-beta.3] - 2026-05-31
51
+
52
+ ### Fixed
53
+
54
+ - Android Expo plugin foreground-only configuration now removes the recording
55
+ service and receiver manifest entries when `enableBackgroundAudio` is
56
+ disabled. Regenerate native projects with Expo prebuild or rebuild Android
57
+ after changing this option.
58
+
59
+ ## [3.2.1-beta.2] - 2026-05-29
60
+
61
+ Beta release for validating max-duration recording controls after auto-stop result handling fixes.
62
+
63
+ ### Fixed
64
+
65
+ - Ensured `autoStopOnMaxDuration` uses the same hook finalization path as manual stop so `onRecordingStopped(recording, reason)` receives the final recording with retained analysis data.
66
+ - Preserved immediate `onMaxDurationReached` notifications while exposing `lastRecordingReason` after stop.
67
+ - Avoided passing hook-only recording callbacks/options into native start options.
68
+
69
+ ## [3.2.0] - 2026-05-15
70
+
71
+ Stable release of the progressive long-audio decode API introduced in `3.2.0-beta.1`.
72
+
73
+ ### Added
74
+
75
+ - `streamAudioData(options, callbacks)` for cross-platform progressive file decoding without materializing full long recordings in memory.
76
+ - `getAudioDecodeCapabilities()` for platform decode feature discovery.
77
+ - Long-audio validation tooling and playground screen for decode/transcription progress, cancellation, and Moonshine/Sherpa benchmark runs.
78
+
79
+ ### Fixed
80
+
81
+ - Improved `streamAudioData` parity across iOS, Android, and web for channel defaults, sample-rate handling, range progress, cancellation, chunk sizing, and long-file memory behavior.
82
+
83
+ ## [3.2.0-beta.1] - 2026-05-14
84
+
85
+ Beta release for client validation of the progressive decode API.
86
+
87
+ ### Added
88
+
89
+ - `streamAudioData(options, callbacks)` — progressive Float32 file decode for
90
+ long compressed recordings without full-PCM materialization. Supports
91
+ `AbortSignal` cancellation, async `onChunk` back-pressure, target sample
92
+ rate, channel downmix, and stable error codes via the new
93
+ `AudioStreamError` class.
94
+ - `getAudioDecodeCapabilities()` for platform feature discovery.
95
+ - `validate:stream-long` physical-device harness for CDP/ADB JSONL validation
96
+ of long compressed files, including decode-only, full-buffer control,
97
+ Moonshine-feed, configurable Sherpa ONNX online-ASR, and bounded offline
98
+ Sherpa/Qwen3 segment modes, range-limited short-run comparisons, Android
99
+ memory snapshots, cancellation, stall detection, and pass/fail memory budgets.
100
+ - `validate:stream-long` can copy a previously downloaded Sherpa model from
101
+ another debug app sandbox (for example `apps/sherpa-voice`) into the
102
+ playground sandbox via `--stage-sherpa-model-from package:path`, or stage a
103
+ host model directory with `--stage-sherpa-model-host-dir`, making Qwen3
104
+ benchmarking reproducible without re-downloading the ~GB extracted model.
105
+ - Sherpa offline segment validation can release/reinitialize ASR between
106
+ segments (`--sherpa-release-between-segments`, defaulted on for Qwen3) to
107
+ reduce retained native heap during long segmented Qwen3 runs.
108
+ - `summarize:stream-long` converts `validate:stream-long` JSONL logs into
109
+ Markdown/CSV/JSON benchmark tables for comparing decode-only, Moonshine,
110
+ Sherpa online, and Sherpa/Qwen3 segmented runs.
111
+ - Long-fixture Android evidence now includes a full 100-minute Qwen3 offline
112
+ segment run with 30-second segments and ASR release/reinit between segments,
113
+ plus a Moonshine memory-budget failure path that cancels before OOM.
114
+ - The long-fixture validation matrix now covers Opus, MP3, and AAC/M4A Android
115
+ decode, with MP3/AAC short Qwen3 decode/transcribe smokes against the same
116
+ 100-minute source recording.
117
+ - Playground `/long-audio-validation` page and agentic recipe for interactive
118
+ long compressed-audio validation with live progress, cancellation, Moonshine
119
+ model id selection, pasted Sherpa `AsrModelConfig` JSON, and a Qwen3-oriented
120
+ offline segment button.
121
+ - iOS: `AVAssetReader`-based decoder with per-`requestId` cancellation.
122
+ - Android: `MediaExtractor` + `MediaCodec` decoder with linear resampling that
123
+ preserves continuity across codec buffer boundaries. Codec output-format
124
+ changes (`INFO_OUTPUT_FORMAT_CHANGED`) now feed the resampler so emitted
125
+ chunk timestamps remain accurate when the codec advertises a different
126
+ source rate than the extractor.
127
+ - Docs: `docs/STREAM_AUDIO_DATA.md`.
128
+
129
+ ### Fixed
130
+
131
+ - iOS `extractRawAudioData` no longer traps on non-finite or out-of-range
132
+ decoded samples. Float-to-`Int16`/`Int32` conversion now replaces NaN/Inf
133
+ with `0` and clamps the scaled value into the integer range before
134
+ conversion.
135
+ - Web `streamAudioData` now interleaves multi-channel output and defaults the
136
+ target sample rate to the source rate when `targetSampleRate` is omitted,
137
+ matching iOS/Android. `maxChunkBytes` is clamped to a minimum of one frame
138
+ (`channels * 4` bytes) to avoid the previous infinite-zero-chunk loop when
139
+ callers pass a value below the frame size.
140
+ - Android `streamAudioData` keeps the active pending buffer after growth so
141
+ the remainder shift never drops samples on the next decode iteration, and
142
+ `content://` inputs delete their cache copy after decode/cancel/error
143
+ instead of leaving a per-stream temp file on disk.
144
+ - iOS and Android `OnDestroy` now cancel any in-flight `streamAudioData`
145
+ decoders before module teardown so decoder threads cannot outlive the
146
+ React context and emit events through a destroyed module.
147
+ - iOS and Web `streamAudioData` honor `endTimeMs` when `startTimeMs` is
148
+ omitted, treating the missing start as `0` to match Android and the
149
+ documented range contract.
150
+ - iOS and Android `streamAudioData` report the decoded _range_ duration in
151
+ the progress/complete payloads (previously the full asset duration), so
152
+ `processedMs / durationMs` is accurate for bounded time ranges across all
153
+ three platforms.
154
+ - `streamAudioData` rounds `maxChunkBytes` down to a whole interleaved frame
155
+ (`channels * 4` bytes) on every platform so stereo callers with a tight
156
+ byte cap never split a frame across two chunks.
157
+ - iOS `streamAudioData` no longer pays `O(n)` `Array.removeFirst` cost per
158
+ emitted chunk; the pending buffer uses a head-index cursor with periodic
159
+ compaction.
160
+ - `streamAudioData` chunk timestamps are now absolute (range start + offset)
161
+ on Web to match iOS/Android, and `onProgress.processedMs` is elapsed time
162
+ within the requested range on every platform so the
163
+ `processedMs / durationMs` fraction stays in `[0, 1]` regardless of
164
+ `startTimeMs`.
165
+ - iOS/Android `streamAudioData` event delivery is now gated on the decoder
166
+ still being tracked by the module. Terminal events emitted by a worker
167
+ thread after `OnDestroy` (which clears the map before cancelling) are
168
+ dropped instead of forwarded through a destroyed React context. This also
169
+ survives Expo's `definition()` re-runs because there is no one-way
170
+ shutdown flag.
171
+ - Android `streamAudioData` trims encoder pre-roll: when
172
+ `SEEK_TO_CLOSEST_SYNC` lands before the requested `startTimeMs` (common
173
+ for AAC/MP3 sync-frame containers), source-rate frames whose presentation
174
+ time is before `startTimeMs` are dropped before resampling so the first
175
+ emitted sample lines up with the requested start.
176
+ - Web `streamAudioData` clamps the `onProgress` fraction to `[0, 1]` so
177
+ resample rounding on the tail chunk never reports `> 1`. iOS and Android
178
+ also emit a final `onProgress` after the tail chunk for parity with the
179
+ `complete` payload.
180
+ - iOS `streamAudioData` cancelled `complete` payload now reports the
181
+ requested range duration in `durationMs` (matching Android) instead of
182
+ the elapsed decoded duration; consumers still get the elapsed count via
183
+ `samples` and `chunks`.
184
+
185
+ ## [3.1.1] - 2026-05-08
186
+
187
+ ### Fixed
188
+
189
+ - Trust Android final decoded PCM metadata for range extraction and trimming, including JS `Number` options bridged as Kotlin `Double`.
190
+ - Keep default Android validation deterministic by replacing physical loopback assertions and gating long recorder benchmarks behind an opt-in flag.
191
+
192
+ ### Changed
193
+
194
+ - Document the playground CDP regression-contract workflow and make optional VAD model loading cache-first.
195
+
196
+ ## [3.1.0] - 2026-05-01
197
+
198
+ ### Changed
199
+
200
+ - fix(audio-studio): preserve pause intent across interruptions (#375) ([2f0f731](https://github.com/deeeed/audiolab/commit/2f0f731e412f45fc81c4fe46bec2abd3f15b4824))
201
+ - fix(android): avoid recorder crashes from stale system callbacks (#374) ([34a9bc0](https://github.com/deeeed/audiolab/commit/34a9bc0c2f7c4e3e569862e8db43710abbde9043))
202
+ - Document when to avoid retaining live analysis history (#373) ([aa617b0](https://github.com/deeeed/audiolab/commit/aa617b048dd790218dda43ec2ed21e0abaf38daf))
203
+ - Let long-running analysis skip full history retention (#372) ([13c230c](https://github.com/deeeed/audiolab/commit/13c230cde655131a3a7c9472d294b2d432f79d50))
204
+ - Keep low-rate iOS AAC recordings from losing compressed output (#371) ([a689eb0](https://github.com/deeeed/audiolab/commit/a689eb03c7436429bd3bf997430f7f7c842b2e57))
205
+ - chore(audio-studio): release @siteed/audio-studio@3.0.5 ([9dff021](https://github.com/deeeed/audiolab/commit/9dff0219993803d29a03946cf81fe2bedb541cab))
206
+
207
+ ## [3.0.5] - 2026-04-25
208
+
209
+ ### Changed
210
+
211
+ - fix(audio-studio): don't start notification on prepareRecording (Android) (#364) ([5d40d7e](https://github.com/deeeed/audiolab/commit/5d40d7e730f2b74459d319979fd9c112891b10f2))
212
+ - docs: update api references for v3.0.4 ([12421ee](https://github.com/deeeed/audiolab/commit/12421ee6146187888492b957c0eee428fcab3e8b))
213
+ - chore(audio-studio): release @siteed/audio-studio@3.0.4 ([3a5b7da](https://github.com/deeeed/audiolab/commit/3a5b7da8f4289a599d928dce01f262ab97398143))
214
+
215
+ ## [3.0.4] - 2026-04-25
216
+
217
+ ### Changed
218
+
219
+ - fix(audio-studio): move module ops off main thread + fix iOS stop crash (#363) ([1a07d2d](https://github.com/deeeed/audiolab/commit/1a07d2d9222bfac1083b00d6de992fcb2a3be42d))
220
+ - chore(audio-studio): release @siteed/audio-studio@3.0.3 ([9d4d14e](https://github.com/deeeed/audiolab/commit/9d4d14e8dffd4378a71f2d3dfb5d7140b8248c0f))
221
+ - fix(audio-studio): convert trim ranges from Double to Long on Android (#347) (#360) ([6099e0e](https://github.com/deeeed/audiolab/commit/6099e0e81f3c8d7b1c109b415ad63e924f3f043b))
222
+ - feat(audio-studio): web trimAudio, WASM refactor, new utilities (#344) ([3d4862a](https://github.com/deeeed/audiolab/commit/3d4862a57a5eb2496169d27f758d7628d7d3659a))
223
+ - feat(sherpa-voice): comprehensive logging + fix Android prod model extraction (#342) ([5b20594](https://github.com/deeeed/audiolab/commit/5b20594c729a9deb703cbc2e23c07daa616149ab))
224
+ - fix(audio-studio): remove blocking CDN poll from publish.sh, sync wasmConfig to 3.0.2 ([290409a](https://github.com/deeeed/audiolab/commit/290409aae8d1160e1952a5ee1961ce3864fbb0c8))
225
+ - chore(audio-studio): release @siteed/audio-studio@3.0.2 ([ebd3300](https://github.com/deeeed/audiolab/commit/ebd330098d2756e6d5a555126e2dfc3fb038d155))
226
+
227
+ ## [3.0.3] - 2026-04-12
228
+
229
+ ### Changed
230
+
231
+ - fix(audio-studio): convert trim ranges from Double to Long on Android (#347) (#360) ([6099e0e](https://github.com/deeeed/audiolab/commit/6099e0e81f3c8d7b1c109b415ad63e924f3f043b))
232
+ - feat(audio-studio): web trimAudio, WASM refactor, new utilities (#344) ([3d4862a](https://github.com/deeeed/audiolab/commit/3d4862a57a5eb2496169d27f758d7628d7d3659a))
233
+ - feat(sherpa-voice): comprehensive logging + fix Android prod model extraction (#342) ([5b20594](https://github.com/deeeed/audiolab/commit/5b20594c729a9deb703cbc2e23c07daa616149ab))
234
+ - fix(audio-studio): remove blocking CDN poll from publish.sh, sync wasmConfig to 3.0.2 ([290409a](https://github.com/deeeed/audiolab/commit/290409aae8d1160e1952a5ee1961ce3864fbb0c8))
235
+ - chore(audio-studio): release @siteed/audio-studio@3.0.2 ([ebd3300](https://github.com/deeeed/audiolab/commit/ebd330098d2756e6d5a555126e2dfc3fb038d155))
236
+
237
+ ## [3.0.2] - 2026-03-21
238
+
239
+ ### Changed
240
+
241
+ - fix(audio-studio): load WASM via CDN URL instead of broken relative path ([7427f28](https://github.com/deeeed/audiolab/commit/7427f289d273ffad609a4c6b0fb45c5094445dde))
242
+ - chore(audio-studio): disable conventionalCommits in publisher config, rewrite clean CHANGELOG ([4a2bbfa](https://github.com/deeeed/audiolab/commit/4a2bbfa605a56cab06618c0ca1afe6ff8cb19441))
243
+ - chore(audio-studio): release @siteed/audio-studio@3.0.1 ([04fe6f7](https://github.com/deeeed/audiolab/commit/04fe6f706d372e3ced0f83b796923c490bebd64d))
244
+
245
+ ## [3.0.1] - 2026-03-21
246
+
247
+ ### Fixed
248
+
249
+ - Add `@expo/config-plugins` to `peerDependencies` — fixes Yarn PnP `ambiguous require` error during `expo prebuild` (#341)
250
+ - WASM path resolution in build output — `prebuilt/` is now copied into `build/cjs/` and `build/esm/` so Metro resolves WASM imports correctly after install (#341)
251
+ - Split WASM modules into separate web/native platform files to prevent Metro bundling issues (#338)
252
+
253
+ ## [3.0.0] - 2026-03-20
254
+
255
+ ### BREAKING CHANGES
256
+
257
+ - Package renamed from `@siteed/expo-audio-studio` to `@siteed/audio-studio`. The old package continues as a backwards-compatible shim.
258
+ - Native module renamed from `ExpoAudioStream` to `AudioStudio`
259
+
260
+ ### Added
261
+
262
+ - C++ mel spectrogram streaming with WASM build (#324)
263
+ - `streamFormat: 'float32'` option — native delivers `Float32Array` to `onAudioStream`, eliminating base64 encode/decode overhead (#315)
264
+
265
+ ### Fixed
266
+
267
+ - Memory safety, WASM lifecycle, and platform bug fixes (#329)
268
+ - iOS: audio device switching bugs during active recording
269
+ - iOS: `resetToDefaultDevice` correctly resets engine tap when switching back to default input
270
+ - iOS: recovery after failed device switch no longer produces silent audio
271
+ - iOS: `setupNowPlayingInfo` no longer overrides user-configured audio session options
272
+ - iOS: `selectInputDevice` syncs `deviceId` into `recordingSettings` before engine update
273
+ - iOS: phone-call auto-resume respects user-configured `categoryOptions`
274
+ - iOS: `AudioDeviceManager.prepareAudioSession` preserves existing session options
275
+
276
+ ### Performance
277
+
278
+ - Optimized mel spectrogram C++ implementation
279
+
280
+ ## [2.18.5] - 2026-02-23
281
+
282
+ ### Fixed
283
+
284
+ - Android: guard Bluetooth API calls behind permission check on API 31+ (#294)
285
+ - Android: migrate phone state listener to `TelephonyCallback` on API 31+ (#275)
286
+ - Android: reset `startTime` in `startRecording` and validate hardware format (#298, #223)
287
+ - Android: gate foreground service on `enableBackgroundAudio` (#288, #294)
288
+ - Android: sanitize options before native bridge calls to prevent crash
289
+
290
+ ## [2.18.4] - 2026-02-16
291
+
292
+ ### Added
293
+
294
+ - Expo SDK 54 (React Native 0.81, React 19) support (#305)
295
+
296
+ ### Fixed
297
+
298
+ - iOS: include compression data in `onAudioStream` events
299
+ - Android: properly emit final chunk of audio data on stop (#293)
300
+
301
+ ## [2.18.1] - 2025-08-02
302
+
303
+ ### Added
304
+
305
+ - Improved memory monitoring
306
+
307
+ ## [2.18.0] - 2025-08-01
308
+
309
+ ### Fixed
310
+
311
+ - Android: optimize buffer size to prevent OOM errors
312
+ - Android: invalid paused duration calculation
313
+
314
+ ## [2.17.0] - 2025-07-31
315
+
316
+ ### Fixed
317
+
318
+ - Android: fix `OutOfMemoryError` by tracking stream position correctly
319
+
320
+ ## [2.16.1] - 2025-07-27
321
+
322
+ ### Fixed
323
+
324
+ - Android: audio analysis accumulation showing 0 bytes
325
+
326
+ ## [2.16.0] - 2025-07-27
327
+
328
+ ### Performance
329
+
330
+ - Android: optimize stop recording performance for long recordings
331
+
332
+ ## [2.15.0] - 2025-07-15
333
+
334
+ ### Added
335
+
336
+ - Android: `showPauseResumeActions` option to notification config (#282)
337
+
338
+ ## [2.14.4] - 2025-07-15
339
+
340
+ ### Fixed
341
+
342
+ - Plugin: respect `enableDeviceDetection` configuration for Android permissions
343
+ - Android: add missing `BLUETOOTH_ADMIN` permission for device detection
344
+
345
+ ## [2.14.3] - 2025-06-12
346
+
347
+ ### Changed
348
+
349
+ - Remove analysis bit depth logging for cleaner debug output
350
+
351
+ ## [2.14.2] - 2025-06-11
352
+
353
+ ### Added
354
+
355
+ - Platform limitations validation and documentation
356
+
357
+ ### Fixed
358
+
359
+ - iOS: update compressed file size when primary output is disabled
360
+
361
+ ## [2.14.1] - 2025-06-11
362
+
363
+ ### Fixed
364
+
365
+ - Android: fix duration returning 0 when primary output is disabled (#244)
366
+
367
+ ## [2.14.0] - 2025-06-11
368
+
369
+ ### Performance
370
+
371
+ - Comprehensive cross-platform stop recording performance optimization
372
+
373
+ ## [2.13.2] - 2025-06-10
374
+
375
+ ### Fixed
376
+
377
+ - Invalid type exports
378
+
379
+ ## [2.13.1] - 2025-06-09
380
+
381
+ ### Added
382
+
383
+ - Sub-100ms audio events analysis and improvements (#270)
384
+
385
+ ### Fixed
386
+
387
+ - Update `expo-modules-core` peer dependency for Expo SDK 53 compatibility
388
+
389
+ ## [2.13.0] - 2025-06-09
390
+
391
+ ### Added
392
+
393
+ - Enhanced device detection and management — configurable `enableDeviceDetection`, automatic connect/disconnect events, force refresh (#269)
394
+
395
+ ## [2.12.3] - 2025-06-07
396
+
397
+ ### Changed
398
+
399
+ - Adjust audio focus request timing in `AudioRecorderManager`
400
+
401
+ ## [2.12.2] - 2025-06-07
402
+
403
+ ### Fixed
404
+
405
+ - Android: audio focus strategy for background recording (#267)
406
+
407
+ ## [2.12.0] - 2025-06-07
408
+
409
+ ### Added
410
+
411
+ - Android-only `audioFocusStrategy` option (#264)
412
+
413
+ ### Fixed
414
+
415
+ - Android: PCM streaming duration calculation bug (#263, #265)
416
+
417
+ ## [2.11.0] - 2025-06-05
418
+
419
+ ### Added
420
+
421
+ - M4A support with `preferRawStream` option (#261)
422
+
423
+ ### Fixed
424
+
425
+ - Enforce 10ms minimum interval on both platforms (#262)
426
+ - Android: proper `MediaCodec` resource cleanup in `AudioProcessor`
427
+
428
+ ## [2.10.6] - 2025-06-04
429
+
430
+ ### Fixed
431
+
432
+ - iOS: prevent `durationMs` returning 0 (#244, #260)
433
+
434
+ ## [2.10.5] - 2025-06-04
435
+
436
+ ### Fixed
437
+
438
+ - iOS: enable audio streaming when primary output is disabled (#259)
439
+
440
+ ## [2.10.4] - 2025-06-03
441
+
442
+ ### Fixed
443
+
444
+ - iOS: resolve Swift compilation scope error in `AudioStreamManager` (#256)
445
+
446
+ ## [2.10.3] - 2025-06-02
447
+
448
+ ### Fixed
449
+
450
+ - Prevent `UninitializedPropertyAccessException` crash in developer menu (#250)
451
+ - Return compression info when primary output is disabled (#244, #249)
452
+
453
+ ## [2.10.2] - 2025-05-31
454
+
455
+ ### Fixed
456
+
457
+ - Buffer size calculation and duplicate emission fix (#248)
458
+
459
+ ## [2.10.1] - 2025-05-27
460
+
461
+ ### Fixed
462
+
463
+ - `useAudioRecorder`: update `intervalId` type for better type safety
464
+
465
+ ## [2.10.0] - 2025-05-26
466
+
467
+ ### Added
468
+
469
+ - Buffer duration control and `skipFileWriting` options
470
+ - Enhanced testing framework with instrumented tests (#242)
471
+
472
+ ## [2.9.0] - 2025-05-15
473
+
474
+ ### Added
475
+
476
+ - Web audio chunk handling improvements (#240)
477
+
478
+ ## [2.8.4] - 2025-05-11
479
+
480
+ ### Fixed
481
+
482
+ - Expo plugin setup
483
+
484
+ ## [2.8.3] - 2025-05-06
485
+
486
+ ### Changed
487
+
488
+ - Update plugin configuration to use ESM format
489
+
490
+ ## [2.8.2] - 2025-05-06
491
+
492
+ ### Changed
493
+
494
+ - TypeScript configurations for dual module (ESM/CJS) support
495
+
496
+ ## [2.8.1] - 2025-05-06
497
+
498
+ ### Added
499
+
500
+ - Dual module format (ESM/CommonJS) to resolve module resolution issues (#235)
501
+
502
+ ## [2.7.0] - 2025-05-04
503
+
504
+ ### Fixed
505
+
506
+ - iOS: enhance background audio recording and audio format conversion (#228)
507
+
508
+ ## [2.6.2] - 2025-05-01
509
+
510
+ ### Fixed
511
+
512
+ - Android: ensure foreground-only audio recording works with `FOREGROUND_SERVICE` (#202, #221)
513
+
514
+ ## [2.6.1] - 2025-05-01
515
+
516
+ ### Fixed
517
+
518
+ - iOS: resolve hardware format mismatch crash and enhance logging (#220)
519
+
520
+ ## [2.6.0] - 2025-05-01
521
+
522
+ ### Fixed
523
+
524
+ - Web: resolve audio recording issue without compression (#217, #219)
525
+
526
+ ## [2.5.0] - 2025-04-30
527
+
528
+ ### Added
529
+
530
+ - Complete Android implementation for audio device API (#214)
531
+ - Cross-platform audio device detection, selection, and fallback handling (#213)
532
+ - Zero-latency recording with `prepareRecording` API (#211)
533
+
534
+ ### Fixed
535
+
536
+ - iOS: ensure complete audio data emission on recording stop/pause (#215)
537
+
538
+ ## [2.4.1] - 2025-04-08
539
+
540
+ ### Added
541
+
542
+ - Enhanced background audio handling and permission checks (#200)
543
+
544
+ ## [2.4.0] - 2025-04-03
545
+
546
+ ### Fixed
547
+
548
+ - iOS: resolve sample rate mismatch and enhance recording stability (#198)
549
+ - Android: enhance permission handling for phone state and notifications (#196)
550
+
551
+ ## [2.3.1] - 2025-04-03
552
+
553
+ ### Changed
554
+
555
+ - Remove external CRC32 library dependency (#195)
556
+
557
+ ## [2.3.0] - 2025-03-29
558
+
559
+ ### Fixed
560
+
561
+ - Always generate a new UUID unless filename is provided (#182)
562
+
563
+ ## [2.2.0] - 2025-03-28
564
+
565
+ ### Changed
566
+
567
+ - Platform-specific CRC32 handling
568
+
569
+ ## [2.1.0] - 2025-03-04
570
+
571
+ ### Added
572
+
573
+ - Mel spectrogram extraction and language detection (#157)
574
+ - Audio import functionality and decibel visualization (#156)
575
+ - iOS trim support with custom filename (#152)
576
+ - Sample rate control and web trimming support (#151)
577
+ - Audio trimming with optimized processing and detailed feedback (#150, #149)
578
+
579
+ ## [2.0.1] - 2025-02-27
580
+
581
+ ### Changed
582
+
583
+ - Update background mode handling for audio stream plugin
584
+
585
+ ## [2.0.0] - 2025-02-27
586
+
587
+ ### Added
588
+
589
+ - Full audio analysis with spectral features and time range controls (#132)
590
+ - `extractAudioData` API
591
+ - PCM player
592
+ - Audio checksum verification and segment analysis (#143)
593
+
594
+ ### Fixed
595
+
596
+ - Audio recording reliability improvements and web IndexedDB management (#146)
597
+
598
+ ## [1.17.0] - 2025-02-18
599
+
600
+ ### Added
601
+
602
+ - Interval audio analysis for web, Android, and iOS (#125, #126)
603
+
604
+ ## [1.16.0] - 2025-02-17
605
+
606
+ ### Fixed
607
+
608
+ - iOS: prevent adding background modes when disabled
609
+ - iOS: replace CallKit with `AVAudioSession` for phone call detection
610
+
611
+ ## [1.15.1] - 2025-02-17
612
+
613
+ ### Fixed
614
+
615
+ - iOS: restore Opus compression support (#122)
616
+ - Emit audio analysis without blocking the recording thread
617
+
618
+ ## [1.15.0] - 2025-02-15
619
+
620
+ ### Fixed
621
+
622
+ - iOS: improve audio recording interruption handling and auto-resume (#119)
623
+ - Android: improve background recording and call interruption handling (#118)
624
+
625
+ ## [1.14.2] - 2025-02-13
626
+
627
+ ### Fixed
628
+
629
+ - Clear recording metadata on STOP action
630
+
631
+ ## [1.14.1] - 2025-02-12
632
+
633
+ ### Fixed
634
+
635
+ - Enable background recording by default (#114)
636
+
637
+ ## [1.14.0] - 2025-02-12
638
+
639
+ ### Fixed
640
+
641
+ - `keepAwake` issue on iOS and auto-resume after call (#113)
642
+
643
+ ## [1.13.2] - 2025-02-10
644
+
645
+ ### Fixed
646
+
647
+ - Ensure foreground service starts within required timeframe
648
+
649
+ ## [1.13.0] - 2025-02-09
650
+
651
+ ### Added
652
+
653
+ - Audio decode support (#104)
654
+
655
+ ### Fixed
656
+
657
+ - Background recording issues and status checking (#103)
658
+
659
+ ## [1.12.1] - 2025-02-01
660
+
661
+ ### Fixed
662
+
663
+ - Improve audio recording interruption handling and consistency (#98)
664
+
665
+ ## [1.12.0] - 2025-01-31
666
+
667
+ ### Added
668
+
669
+ - Call state checks before starting or resuming recording (#94)
670
+ - Custom filename and directory support for recordings (#92)
671
+ - Compressed recording info with file size (#90)
672
+
673
+ ## [1.11.3] - 2025-01-25
674
+
675
+ ### Fixed
676
+
677
+ - Disable duplicate notification alerts (#82)
678
+
679
+ ## [1.11.2] - 2025-01-22
680
+
681
+ ### Fixed
682
+
683
+ - Resources not cleaned up properly on app kill (#80)
684
+
685
+ ## [1.11.0] - 2025-01-22
686
+
687
+ ### Added
688
+
689
+ - Intelligent call interruption handling and compression improvements (#78)
690
+
691
+ ## [1.10.0] - 2025-01-14
692
+
693
+ ### Added
694
+
695
+ - Support for pausing and resuming compressed recordings
696
+ - Optimized notification channel settings
697
+
698
+ ## [1.9.2] - 2025-01-12
699
+
700
+ ### Fixed
701
+
702
+ - iOS: bitrate verification to prevent invalid values
703
+
704
+ ## [1.9.1] - 2025-01-12
705
+
706
+ ### Fixed
707
+
708
+ - iOS: potentially missing compressed file info
709
+
710
+ ## [1.9.0] - 2025-01-11
711
+
712
+ ### Performance
713
+
714
+ - Optimize memory usage and streaming performance for web audio recording (#75)
715
+
716
+ ## [1.8.0] - 2025-01-10
717
+
718
+ ### Added
719
+
720
+ - Audio compression support
721
+
722
+ ## [1.7.2] - 2025-01-07
723
+
724
+ ### Fixed
725
+
726
+ - Web: correct WAV header handling in audio recording
727
+
728
+ ## [1.7.1] - 2025-01-07
729
+
730
+ ### Fixed
731
+
732
+ - Notification: avoid triggering new alerts on update (#71)
733
+
734
+ ## [1.7.0] - 2025-01-05
735
+
736
+ ### Fixed
737
+
738
+ - iOS: improve audio resampling and duration tracking (#69)
739
+ - Handle paused state in `stopRecording` (#68)
740
+ - Reset audio recording state properly on iOS and Android (#66)
741
+ - Android: total size not resetting on new recording (#64)
742
+
743
+ ## [1.3.1] - 2024-12-05
744
+
745
+ ### Added
746
+
747
+ - Web: throttling and optimized event processing (#49)
748
+
749
+ ## [1.3.0] - 2024-11-28
750
+
751
+ ### Added
752
+
753
+ - Standardize permission status response structure across platforms (#44)
754
+
755
+ ## [1.2.4] - 2024-11-05
756
+
757
+ ### Changed
758
+
759
+ - Android: minimum audio interval set to 10ms
760
+ - Plugin: do not include `notification` config by default to prevent iOS version mismatch
761
+
762
+ ### Fixed
763
+
764
+ - Remove frequently firing log statements on web
765
+
766
+ ## [1.2.0] - 2024-10-24
767
+
768
+ ### Added
769
+
770
+ - `keepAwake` — continue recording when app is in background (default: true)
771
+ - Customizable recording notifications for Android and iOS
772
+ - Android: rich notification with live waveform, configurable actions/colors/priorities
773
+ - iOS: media player integration
774
+
775
+ ## [1.1.17] - 2024-10-21
776
+
777
+ ### Added
778
+
779
+ - Bluetooth headset support on iOS
780
+
781
+ ### Fixed
782
+
783
+ - Android: not reading custom interval audio update
784
+
785
+ ## [1.0.0] - 2024-04-01
786
+
787
+ ### Added
788
+
789
+ - Initial release
790
+ - Real-time audio streaming across iOS, Android, and web
791
+ - Configurable intervals for audio buffer receipt
792
+ - Automated microphone permissions setup in managed Expo projects
793
+ - Background audio recording on iOS
794
+ - Audio features extraction during recording
795
+ - Consistent WAV PCM recording format across all platforms
796
+
797
+ [unreleased]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@4.0.0-beta.0...HEAD
798
+ [4.0.0-beta.0]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.2.1...@siteed/audio-studio@4.0.0-beta.0
799
+ [3.2.1]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.2.0...@siteed/audio-studio@3.2.1
800
+ [3.2.1-beta.3]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.2.1-beta.2...@siteed/audio-studio@3.2.1-beta.3
801
+ [3.2.1-beta.2]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.2.0...@siteed/audio-studio@3.2.1-beta.2
802
+ [3.2.0]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.1.1...@siteed/audio-studio@3.2.0
803
+ [3.1.1]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.1.0...@siteed/audio-studio@3.1.1
804
+ [3.1.0]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.5...@siteed/audio-studio@3.1.0
805
+ [3.0.5]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.4...@siteed/audio-studio@3.0.5
806
+ [3.0.4]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.3...@siteed/audio-studio@3.0.4
807
+ [3.0.3]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.2...@siteed/audio-studio@3.0.3
808
+ [3.0.2]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.2-beta.2...@siteed/audio-studio@3.0.2
809
+ [3.0.1]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.0...@siteed/audio-studio@3.0.1
810
+ [3.0.0]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@2.18.5...@siteed/audio-studio@3.0.0