@siteed/audio-studio 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/CHANGELOG.md +375 -4
  2. package/android/src/main/java/net/siteed/audiostudio/AudioStreamDecoder.kt +852 -0
  3. package/android/src/main/java/net/siteed/audiostudio/AudioStudioModule.kt +167 -3
  4. package/android/src/main/java/net/siteed/audiostudio/Constants.kt +4 -0
  5. package/build/cjs/errors/AudioStreamError.js +161 -0
  6. package/build/cjs/errors/AudioStreamError.js.map +1 -0
  7. package/build/cjs/errors/AudioStreamError.test.js +82 -0
  8. package/build/cjs/errors/AudioStreamError.test.js.map +1 -0
  9. package/build/cjs/index.js +7 -1
  10. package/build/cjs/index.js.map +1 -1
  11. package/build/cjs/streamAudioData.js +534 -0
  12. package/build/cjs/streamAudioData.js.map +1 -0
  13. package/build/cjs/utils/audioProcessing.js +14 -10
  14. package/build/cjs/utils/audioProcessing.js.map +1 -1
  15. package/build/esm/errors/AudioStreamError.js +156 -0
  16. package/build/esm/errors/AudioStreamError.js.map +1 -0
  17. package/build/esm/errors/AudioStreamError.test.js +80 -0
  18. package/build/esm/errors/AudioStreamError.test.js.map +1 -0
  19. package/build/esm/index.js +3 -1
  20. package/build/esm/index.js.map +1 -1
  21. package/build/esm/streamAudioData.js +527 -0
  22. package/build/esm/streamAudioData.js.map +1 -0
  23. package/build/esm/utils/audioProcessing.js +14 -10
  24. package/build/esm/utils/audioProcessing.js.map +1 -1
  25. package/build/types/errors/AudioStreamError.d.ts +25 -0
  26. package/build/types/errors/AudioStreamError.d.ts.map +1 -0
  27. package/build/types/errors/AudioStreamError.test.d.ts +2 -0
  28. package/build/types/errors/AudioStreamError.test.d.ts.map +1 -0
  29. package/build/types/index.d.ts +5 -1
  30. package/build/types/index.d.ts.map +1 -1
  31. package/build/types/streamAudioData.d.ts +119 -0
  32. package/build/types/streamAudioData.d.ts.map +1 -0
  33. package/build/types/utils/audioProcessing.d.ts +2 -2
  34. package/build/types/utils/audioProcessing.d.ts.map +1 -1
  35. package/ios/AudioProcessingHelpers.swift +10 -5
  36. package/ios/AudioStreamDecoder.swift +614 -0
  37. package/ios/AudioStudioModule.swift +186 -3
  38. package/package.json +163 -146
  39. package/scripts/README.md +58 -0
  40. package/src/errors/AudioStreamError.test.ts +92 -0
  41. package/src/errors/AudioStreamError.ts +199 -0
  42. package/src/index.ts +24 -0
  43. package/src/streamAudioData.ts +758 -0
  44. package/src/utils/audioProcessing.ts +25 -14
  45. package/android/src/androidTest/assets/chorus.wav +0 -0
  46. package/android/src/androidTest/assets/jfk.wav +0 -0
  47. package/android/src/androidTest/assets/osr_us_000_0010_8k.wav +0 -0
  48. package/android/src/androidTest/assets/recorder_hello_world.wav +0 -0
  49. package/android/src/androidTest/java/net/siteed/audiostudio/AudioFinalMetadataContractInstrumentedTest.kt +0 -190
  50. package/android/src/androidTest/java/net/siteed/audiostudio/AudioProcessorInstrumentedTest.kt +0 -197
  51. package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderInstrumentedTest.kt +0 -487
  52. package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderPerformanceInstrumentedTest.kt +0 -250
  53. package/android/src/androidTest/java/net/siteed/audiostudio/OpusRangeDecodeRegressionInstrumentedTest.kt +0 -186
  54. package/android/src/androidTest/java/net/siteed/audiostudio/integration/AudioFocusStrategyIntegrationTest.kt +0 -332
  55. package/android/src/androidTest/java/net/siteed/audiostudio/integration/BufferDurationIntegrationTest.kt +0 -324
  56. package/android/src/androidTest/java/net/siteed/audiostudio/integration/CompressedOnlyOutputTest.kt +0 -253
  57. package/android/src/androidTest/java/net/siteed/audiostudio/integration/DeviceDisconnectionFallbackTest.kt +0 -218
  58. package/android/src/androidTest/java/net/siteed/audiostudio/integration/EventEmissionIntervalTest.kt +0 -120
  59. package/android/src/androidTest/java/net/siteed/audiostudio/integration/M4aFormatTest.kt +0 -345
  60. package/android/src/androidTest/java/net/siteed/audiostudio/integration/OutputControlIntegrationTest.kt +0 -340
  61. package/android/src/androidTest/java/net/siteed/audiostudio/integration/PcmStreamingDurationTest.kt +0 -252
  62. package/android/src/androidTest/java/net/siteed/audiostudio/integration/README.md +0 -95
  63. package/android/src/androidTest/java/net/siteed/audiostudio/integration/run_integration_tests.sh +0 -43
  64. package/android/src/test/java/net/siteed/audiostudio/AndroidCallStateTest.kt +0 -37
  65. package/android/src/test/java/net/siteed/audiostudio/AndroidEventEmitterTest.kt +0 -28
  66. package/android/src/test/java/net/siteed/audiostudio/AudioFileHandlerTest.kt +0 -279
  67. package/android/src/test/java/net/siteed/audiostudio/AudioFocusStrategyTest.kt +0 -249
  68. package/android/src/test/java/net/siteed/audiostudio/AudioFormatTest.kt +0 -151
  69. package/android/src/test/java/net/siteed/audiostudio/AudioFormatUtilsTest.kt +0 -273
  70. package/android/src/test/java/net/siteed/audiostudio/DeviceDisconnectionFallbackUnitTest.kt +0 -140
  71. package/android/src/test/java/net/siteed/audiostudio/InterruptionAutoResumePolicyTest.kt +0 -49
  72. package/android/src/test/resources/chorus.wav +0 -0
  73. package/android/src/test/resources/generate_test_audio.py +0 -94
  74. package/android/src/test/resources/jfk.wav +0 -0
  75. package/android/src/test/resources/osr_us_000_0010_8k.wav +0 -0
  76. package/android/src/test/resources/recorder_hello_world.wav +0 -0
  77. package/ios/AudioStudioTests/AudioFileHandlerTests.swift +0 -338
  78. package/ios/AudioStudioTests/AudioFormatUtilsTests.swift +0 -331
  79. package/ios/AudioStudioTests/AudioTestHelpers.swift +0 -130
  80. package/ios/AudioStudioTests/CompressedOnlyOutputTests.swift +0 -334
  81. package/ios/AudioStudioTests/EventEmissionIntervalTests.swift +0 -105
  82. package/ios/AudioStudioTests/Info.plist +0 -22
  83. package/ios/AudioStudioTests/README.md +0 -39
  84. package/ios/AudioStudioTests/SimpleAudioTest.swift +0 -98
  85. package/ios/AudioStudioTests/TestAudioGenerator.swift +0 -75
  86. package/ios/tests/README.md +0 -41
  87. package/ios/tests/integration/buffer_and_fallback_test.swift +0 -178
  88. package/ios/tests/integration/buffer_duration_test.swift +0 -185
  89. package/ios/tests/integration/compressed_only_output_test.swift +0 -271
  90. package/ios/tests/integration/output_control_test.swift +0 -322
  91. package/ios/tests/integration/run_integration_tests.sh +0 -37
  92. package/ios/tests/opus_support_test_macos.swift +0 -154
  93. package/ios/tests/standalone/audio_processing_test.swift +0 -144
  94. package/ios/tests/standalone/audio_recording_test.swift +0 -277
  95. package/ios/tests/standalone/audio_streaming_test.swift +0 -249
  96. package/ios/tests/standalone/standalone_test.swift +0 -144
package/CHANGELOG.md CHANGED
@@ -7,30 +7,156 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.2.0] - 2026-05-15
11
+
12
+ Stable release of the progressive long-audio decode API introduced in `3.2.0-beta.1`.
13
+
14
+ ### Added
15
+
16
+ - `streamAudioData(options, callbacks)` for cross-platform progressive file decoding without materializing full long recordings in memory.
17
+ - `getAudioDecodeCapabilities()` for platform decode feature discovery.
18
+ - Long-audio validation tooling and playground screen for decode/transcription progress, cancellation, and Moonshine/Sherpa benchmark runs.
19
+
20
+ ### Fixed
21
+
22
+ - Improved `streamAudioData` parity across iOS, Android, and web for channel defaults, sample-rate handling, range progress, cancellation, chunk sizing, and long-file memory behavior.
23
+
24
+ ## [3.2.0-beta.1] - 2026-05-14
25
+
26
+ Beta release for client validation of the progressive decode API.
27
+
28
+ ### Added
29
+
30
+ - `streamAudioData(options, callbacks)` — progressive Float32 file decode for
31
+ long compressed recordings without full-PCM materialization. Supports
32
+ `AbortSignal` cancellation, async `onChunk` back-pressure, target sample
33
+ rate, channel downmix, and stable error codes via the new
34
+ `AudioStreamError` class.
35
+ - `getAudioDecodeCapabilities()` for platform feature discovery.
36
+ - `validate:stream-long` physical-device harness for CDP/ADB JSONL validation
37
+ of long compressed files, including decode-only, full-buffer control,
38
+ Moonshine-feed, configurable Sherpa ONNX online-ASR, and bounded offline
39
+ Sherpa/Qwen3 segment modes, range-limited short-run comparisons, Android
40
+ memory snapshots, cancellation, stall detection, and pass/fail memory budgets.
41
+ - `validate:stream-long` can copy a previously downloaded Sherpa model from
42
+ another debug app sandbox (for example `apps/sherpa-voice`) into the
43
+ playground sandbox via `--stage-sherpa-model-from package:path`, or stage a
44
+ host model directory with `--stage-sherpa-model-host-dir`, making Qwen3
45
+ benchmarking reproducible without re-downloading the ~GB extracted model.
46
+ - Sherpa offline segment validation can release/reinitialize ASR between
47
+ segments (`--sherpa-release-between-segments`, defaulted on for Qwen3) to
48
+ reduce retained native heap during long segmented Qwen3 runs.
49
+ - `summarize:stream-long` converts `validate:stream-long` JSONL logs into
50
+ Markdown/CSV/JSON benchmark tables for comparing decode-only, Moonshine,
51
+ Sherpa online, and Sherpa/Qwen3 segmented runs.
52
+ - Long-fixture Android evidence now includes a full 100-minute Qwen3 offline
53
+ segment run with 30-second segments and ASR release/reinit between segments,
54
+ plus a Moonshine memory-budget failure path that cancels before OOM.
55
+ - The long-fixture validation matrix now covers Opus, MP3, and AAC/M4A Android
56
+ decode, with MP3/AAC short Qwen3 decode/transcribe smokes against the same
57
+ 100-minute source recording.
58
+ - Playground `/long-audio-validation` page and agentic recipe for interactive
59
+ long compressed-audio validation with live progress, cancellation, Moonshine
60
+ model id selection, pasted Sherpa `AsrModelConfig` JSON, and a Qwen3-oriented
61
+ offline segment button.
62
+ - iOS: `AVAssetReader`-based decoder with per-`requestId` cancellation.
63
+ - Android: `MediaExtractor` + `MediaCodec` decoder with linear resampling that
64
+ preserves continuity across codec buffer boundaries. Codec output-format
65
+ changes (`INFO_OUTPUT_FORMAT_CHANGED`) now feed the resampler so emitted
66
+ chunk timestamps remain accurate when the codec advertises a different
67
+ source rate than the extractor.
68
+ - Docs: `docs/STREAM_AUDIO_DATA.md`.
69
+
70
+ ### Fixed
71
+
72
+ - iOS `extractRawAudioData` no longer traps on non-finite or out-of-range
73
+ decoded samples. Float-to-`Int16`/`Int32` conversion now replaces NaN/Inf
74
+ with `0` and clamps the scaled value into the integer range before
75
+ conversion.
76
+ - Web `streamAudioData` now interleaves multi-channel output and defaults the
77
+ target sample rate to the source rate when `targetSampleRate` is omitted,
78
+ matching iOS/Android. `maxChunkBytes` is clamped to a minimum of one frame
79
+ (`channels * 4` bytes) to avoid the previous infinite-zero-chunk loop when
80
+ callers pass a value below the frame size.
81
+ - Android `streamAudioData` keeps the active pending buffer after growth so
82
+ the remainder shift never drops samples on the next decode iteration, and
83
+ `content://` inputs delete their cache copy after decode/cancel/error
84
+ instead of leaving a per-stream temp file on disk.
85
+ - iOS and Android `OnDestroy` now cancel any in-flight `streamAudioData`
86
+ decoders before module teardown so decoder threads cannot outlive the
87
+ React context and emit events through a destroyed module.
88
+ - iOS and Web `streamAudioData` honor `endTimeMs` when `startTimeMs` is
89
+ omitted, treating the missing start as `0` to match Android and the
90
+ documented range contract.
91
+ - iOS and Android `streamAudioData` report the decoded _range_ duration in
92
+ the progress/complete payloads (previously the full asset duration), so
93
+ `processedMs / durationMs` is accurate for bounded time ranges across all
94
+ three platforms.
95
+ - `streamAudioData` rounds `maxChunkBytes` down to a whole interleaved frame
96
+ (`channels * 4` bytes) on every platform so stereo callers with a tight
97
+ byte cap never split a frame across two chunks.
98
+ - iOS `streamAudioData` no longer pays `O(n)` `Array.removeFirst` cost per
99
+ emitted chunk; the pending buffer uses a head-index cursor with periodic
100
+ compaction.
101
+ - `streamAudioData` chunk timestamps are now absolute (range start + offset)
102
+ on Web to match iOS/Android, and `onProgress.processedMs` is elapsed time
103
+ within the requested range on every platform so the
104
+ `processedMs / durationMs` fraction stays in `[0, 1]` regardless of
105
+ `startTimeMs`.
106
+ - iOS/Android `streamAudioData` event delivery is now gated on the decoder
107
+ still being tracked by the module. Terminal events emitted by a worker
108
+ thread after `OnDestroy` (which clears the map before cancelling) are
109
+ dropped instead of forwarded through a destroyed React context. This also
110
+ survives Expo's `definition()` re-runs because there is no one-way
111
+ shutdown flag.
112
+ - Android `streamAudioData` trims encoder pre-roll: when
113
+ `SEEK_TO_CLOSEST_SYNC` lands before the requested `startTimeMs` (common
114
+ for AAC/MP3 sync-frame containers), source-rate frames whose presentation
115
+ time is before `startTimeMs` are dropped before resampling so the first
116
+ emitted sample lines up with the requested start.
117
+ - Web `streamAudioData` clamps the `onProgress` fraction to `[0, 1]` so
118
+ resample rounding on the tail chunk never reports `> 1`. iOS and Android
119
+ also emit a final `onProgress` after the tail chunk for parity with the
120
+ `complete` payload.
121
+ - iOS `streamAudioData` cancelled `complete` payload now reports the
122
+ requested range duration in `durationMs` (matching Android) instead of
123
+ the elapsed decoded duration; consumers still get the elapsed count via
124
+ `samples` and `chunks`.
125
+
10
126
  ## [3.1.1] - 2026-05-08
127
+
11
128
  ### Fixed
129
+
12
130
  - Trust Android final decoded PCM metadata for range extraction and trimming, including JS `Number` options bridged as Kotlin `Double`.
13
131
  - Keep default Android validation deterministic by replacing physical loopback assertions and gating long recorder benchmarks behind an opt-in flag.
14
132
 
15
133
  ### Changed
16
- - Document the playground CDP regression-contract workflow and make optional VAD model loading cache-first.
17
134
 
135
+ - Document the playground CDP regression-contract workflow and make optional VAD model loading cache-first.
18
136
 
19
137
  ## [3.1.0] - 2026-05-01
138
+
20
139
  ### Changed
140
+
21
141
  - fix(audio-studio): preserve pause intent across interruptions (#375) ([2f0f731](https://github.com/deeeed/audiolab/commit/2f0f731e412f45fc81c4fe46bec2abd3f15b4824))
22
142
  - fix(android): avoid recorder crashes from stale system callbacks (#374) ([34a9bc0](https://github.com/deeeed/audiolab/commit/34a9bc0c2f7c4e3e569862e8db43710abbde9043))
23
143
  - Document when to avoid retaining live analysis history (#373) ([aa617b0](https://github.com/deeeed/audiolab/commit/aa617b048dd790218dda43ec2ed21e0abaf38daf))
24
144
  - Let long-running analysis skip full history retention (#372) ([13c230c](https://github.com/deeeed/audiolab/commit/13c230cde655131a3a7c9472d294b2d432f79d50))
25
145
  - Keep low-rate iOS AAC recordings from losing compressed output (#371) ([a689eb0](https://github.com/deeeed/audiolab/commit/a689eb03c7436429bd3bf997430f7f7c842b2e57))
26
146
  - chore(audio-studio): release @siteed/audio-studio@3.0.5 ([9dff021](https://github.com/deeeed/audiolab/commit/9dff0219993803d29a03946cf81fe2bedb541cab))
147
+
27
148
  ## [3.0.5] - 2026-04-25
149
+
28
150
  ### Changed
151
+
29
152
  - fix(audio-studio): don't start notification on prepareRecording (Android) (#364) ([5d40d7e](https://github.com/deeeed/audiolab/commit/5d40d7e730f2b74459d319979fd9c112891b10f2))
30
153
  - docs: update api references for v3.0.4 ([12421ee](https://github.com/deeeed/audiolab/commit/12421ee6146187888492b957c0eee428fcab3e8b))
31
154
  - chore(audio-studio): release @siteed/audio-studio@3.0.4 ([3a5b7da](https://github.com/deeeed/audiolab/commit/3a5b7da8f4289a599d928dce01f262ab97398143))
155
+
32
156
  ## [3.0.4] - 2026-04-25
157
+
33
158
  ### Changed
159
+
34
160
  - fix(audio-studio): move module ops off main thread + fix iOS stop crash (#363) ([1a07d2d](https://github.com/deeeed/audiolab/commit/1a07d2d9222bfac1083b00d6de992fcb2a3be42d))
35
161
  - chore(audio-studio): release @siteed/audio-studio@3.0.3 ([9d4d14e](https://github.com/deeeed/audiolab/commit/9d4d14e8dffd4378a71f2d3dfb5d7140b8248c0f))
36
162
  - fix(audio-studio): convert trim ranges from Double to Long on Android (#347) (#360) ([6099e0e](https://github.com/deeeed/audiolab/commit/6099e0e81f3c8d7b1c109b415ad63e924f3f043b))
@@ -38,33 +164,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
38
164
  - feat(sherpa-voice): comprehensive logging + fix Android prod model extraction (#342) ([5b20594](https://github.com/deeeed/audiolab/commit/5b20594c729a9deb703cbc2e23c07daa616149ab))
39
165
  - fix(audio-studio): remove blocking CDN poll from publish.sh, sync wasmConfig to 3.0.2 ([290409a](https://github.com/deeeed/audiolab/commit/290409aae8d1160e1952a5ee1961ce3864fbb0c8))
40
166
  - chore(audio-studio): release @siteed/audio-studio@3.0.2 ([ebd3300](https://github.com/deeeed/audiolab/commit/ebd330098d2756e6d5a555126e2dfc3fb038d155))
167
+
41
168
  ## [3.0.3] - 2026-04-12
169
+
42
170
  ### Changed
171
+
43
172
  - fix(audio-studio): convert trim ranges from Double to Long on Android (#347) (#360) ([6099e0e](https://github.com/deeeed/audiolab/commit/6099e0e81f3c8d7b1c109b415ad63e924f3f043b))
44
173
  - feat(audio-studio): web trimAudio, WASM refactor, new utilities (#344) ([3d4862a](https://github.com/deeeed/audiolab/commit/3d4862a57a5eb2496169d27f758d7628d7d3659a))
45
174
  - feat(sherpa-voice): comprehensive logging + fix Android prod model extraction (#342) ([5b20594](https://github.com/deeeed/audiolab/commit/5b20594c729a9deb703cbc2e23c07daa616149ab))
46
175
  - fix(audio-studio): remove blocking CDN poll from publish.sh, sync wasmConfig to 3.0.2 ([290409a](https://github.com/deeeed/audiolab/commit/290409aae8d1160e1952a5ee1961ce3864fbb0c8))
47
176
  - chore(audio-studio): release @siteed/audio-studio@3.0.2 ([ebd3300](https://github.com/deeeed/audiolab/commit/ebd330098d2756e6d5a555126e2dfc3fb038d155))
177
+
48
178
  ## [3.0.2] - 2026-03-21
179
+
49
180
  ### Changed
181
+
50
182
  - fix(audio-studio): load WASM via CDN URL instead of broken relative path ([7427f28](https://github.com/deeeed/audiolab/commit/7427f289d273ffad609a4c6b0fb45c5094445dde))
51
183
  - chore(audio-studio): disable conventionalCommits in publisher config, rewrite clean CHANGELOG ([4a2bbfa](https://github.com/deeeed/audiolab/commit/4a2bbfa605a56cab06618c0ca1afe6ff8cb19441))
52
184
  - chore(audio-studio): release @siteed/audio-studio@3.0.1 ([04fe6f7](https://github.com/deeeed/audiolab/commit/04fe6f706d372e3ced0f83b796923c490bebd64d))
185
+
53
186
  ## [3.0.1] - 2026-03-21
187
+
54
188
  ### Fixed
189
+
55
190
  - Add `@expo/config-plugins` to `peerDependencies` — fixes Yarn PnP `ambiguous require` error during `expo prebuild` (#341)
56
191
  - 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)
57
192
  - Split WASM modules into separate web/native platform files to prevent Metro bundling issues (#338)
193
+
58
194
  ## [3.0.0] - 2026-03-20
195
+
59
196
  ### BREAKING CHANGES
197
+
60
198
  - Package renamed from `@siteed/expo-audio-studio` to `@siteed/audio-studio`. The old package continues as a backwards-compatible shim.
61
199
  - Native module renamed from `ExpoAudioStream` to `AudioStudio`
62
200
 
63
201
  ### Added
202
+
64
203
  - C++ mel spectrogram streaming with WASM build (#324)
65
204
  - `streamFormat: 'float32'` option — native delivers `Float32Array` to `onAudioStream`, eliminating base64 encode/decode overhead (#315)
66
205
 
67
206
  ### Fixed
207
+
68
208
  - Memory safety, WASM lifecycle, and platform bug fixes (#329)
69
209
  - iOS: audio device switching bugs during active recording
70
210
  - iOS: `resetToDefaultDevice` correctly resets engine tap when switching back to default input
@@ -75,288 +215,518 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
75
215
  - iOS: `AudioDeviceManager.prepareAudioSession` preserves existing session options
76
216
 
77
217
  ### Performance
218
+
78
219
  - Optimized mel spectrogram C++ implementation
220
+
79
221
  ## [2.18.5] - 2026-02-23
222
+
80
223
  ### Fixed
224
+
81
225
  - Android: guard Bluetooth API calls behind permission check on API 31+ (#294)
82
226
  - Android: migrate phone state listener to `TelephonyCallback` on API 31+ (#275)
83
227
  - Android: reset `startTime` in `startRecording` and validate hardware format (#298, #223)
84
228
  - Android: gate foreground service on `enableBackgroundAudio` (#288, #294)
85
229
  - Android: sanitize options before native bridge calls to prevent crash
230
+
86
231
  ## [2.18.4] - 2026-02-16
232
+
87
233
  ### Added
234
+
88
235
  - Expo SDK 54 (React Native 0.81, React 19) support (#305)
89
236
 
90
237
  ### Fixed
238
+
91
239
  - iOS: include compression data in `onAudioStream` events
92
240
  - Android: properly emit final chunk of audio data on stop (#293)
241
+
93
242
  ## [2.18.1] - 2025-08-02
243
+
94
244
  ### Added
245
+
95
246
  - Improved memory monitoring
247
+
96
248
  ## [2.18.0] - 2025-08-01
249
+
97
250
  ### Fixed
251
+
98
252
  - Android: optimize buffer size to prevent OOM errors
99
253
  - Android: invalid paused duration calculation
254
+
100
255
  ## [2.17.0] - 2025-07-31
256
+
101
257
  ### Fixed
258
+
102
259
  - Android: fix `OutOfMemoryError` by tracking stream position correctly
260
+
103
261
  ## [2.16.1] - 2025-07-27
262
+
104
263
  ### Fixed
264
+
105
265
  - Android: audio analysis accumulation showing 0 bytes
266
+
106
267
  ## [2.16.0] - 2025-07-27
268
+
107
269
  ### Performance
270
+
108
271
  - Android: optimize stop recording performance for long recordings
272
+
109
273
  ## [2.15.0] - 2025-07-15
274
+
110
275
  ### Added
276
+
111
277
  - Android: `showPauseResumeActions` option to notification config (#282)
278
+
112
279
  ## [2.14.4] - 2025-07-15
280
+
113
281
  ### Fixed
282
+
114
283
  - Plugin: respect `enableDeviceDetection` configuration for Android permissions
115
284
  - Android: add missing `BLUETOOTH_ADMIN` permission for device detection
285
+
116
286
  ## [2.14.3] - 2025-06-12
287
+
117
288
  ### Changed
289
+
118
290
  - Remove analysis bit depth logging for cleaner debug output
291
+
119
292
  ## [2.14.2] - 2025-06-11
293
+
120
294
  ### Added
295
+
121
296
  - Platform limitations validation and documentation
122
297
 
123
298
  ### Fixed
299
+
124
300
  - iOS: update compressed file size when primary output is disabled
301
+
125
302
  ## [2.14.1] - 2025-06-11
303
+
126
304
  ### Fixed
305
+
127
306
  - Android: fix duration returning 0 when primary output is disabled (#244)
307
+
128
308
  ## [2.14.0] - 2025-06-11
309
+
129
310
  ### Performance
311
+
130
312
  - Comprehensive cross-platform stop recording performance optimization
313
+
131
314
  ## [2.13.2] - 2025-06-10
315
+
132
316
  ### Fixed
317
+
133
318
  - Invalid type exports
319
+
134
320
  ## [2.13.1] - 2025-06-09
321
+
135
322
  ### Added
323
+
136
324
  - Sub-100ms audio events analysis and improvements (#270)
137
325
 
138
326
  ### Fixed
327
+
139
328
  - Update `expo-modules-core` peer dependency for Expo SDK 53 compatibility
329
+
140
330
  ## [2.13.0] - 2025-06-09
331
+
141
332
  ### Added
333
+
142
334
  - Enhanced device detection and management — configurable `enableDeviceDetection`, automatic connect/disconnect events, force refresh (#269)
335
+
143
336
  ## [2.12.3] - 2025-06-07
337
+
144
338
  ### Changed
339
+
145
340
  - Adjust audio focus request timing in `AudioRecorderManager`
341
+
146
342
  ## [2.12.2] - 2025-06-07
343
+
147
344
  ### Fixed
345
+
148
346
  - Android: audio focus strategy for background recording (#267)
347
+
149
348
  ## [2.12.0] - 2025-06-07
349
+
150
350
  ### Added
351
+
151
352
  - Android-only `audioFocusStrategy` option (#264)
152
353
 
153
354
  ### Fixed
355
+
154
356
  - Android: PCM streaming duration calculation bug (#263, #265)
357
+
155
358
  ## [2.11.0] - 2025-06-05
359
+
156
360
  ### Added
361
+
157
362
  - M4A support with `preferRawStream` option (#261)
158
363
 
159
364
  ### Fixed
365
+
160
366
  - Enforce 10ms minimum interval on both platforms (#262)
161
367
  - Android: proper `MediaCodec` resource cleanup in `AudioProcessor`
368
+
162
369
  ## [2.10.6] - 2025-06-04
370
+
163
371
  ### Fixed
372
+
164
373
  - iOS: prevent `durationMs` returning 0 (#244, #260)
374
+
165
375
  ## [2.10.5] - 2025-06-04
376
+
166
377
  ### Fixed
378
+
167
379
  - iOS: enable audio streaming when primary output is disabled (#259)
380
+
168
381
  ## [2.10.4] - 2025-06-03
382
+
169
383
  ### Fixed
384
+
170
385
  - iOS: resolve Swift compilation scope error in `AudioStreamManager` (#256)
386
+
171
387
  ## [2.10.3] - 2025-06-02
388
+
172
389
  ### Fixed
390
+
173
391
  - Prevent `UninitializedPropertyAccessException` crash in developer menu (#250)
174
392
  - Return compression info when primary output is disabled (#244, #249)
393
+
175
394
  ## [2.10.2] - 2025-05-31
395
+
176
396
  ### Fixed
397
+
177
398
  - Buffer size calculation and duplicate emission fix (#248)
399
+
178
400
  ## [2.10.1] - 2025-05-27
401
+
179
402
  ### Fixed
403
+
180
404
  - `useAudioRecorder`: update `intervalId` type for better type safety
405
+
181
406
  ## [2.10.0] - 2025-05-26
407
+
182
408
  ### Added
409
+
183
410
  - Buffer duration control and `skipFileWriting` options
184
411
  - Enhanced testing framework with instrumented tests (#242)
412
+
185
413
  ## [2.9.0] - 2025-05-15
414
+
186
415
  ### Added
416
+
187
417
  - Web audio chunk handling improvements (#240)
418
+
188
419
  ## [2.8.4] - 2025-05-11
420
+
189
421
  ### Fixed
422
+
190
423
  - Expo plugin setup
424
+
191
425
  ## [2.8.3] - 2025-05-06
426
+
192
427
  ### Changed
428
+
193
429
  - Update plugin configuration to use ESM format
430
+
194
431
  ## [2.8.2] - 2025-05-06
432
+
195
433
  ### Changed
434
+
196
435
  - TypeScript configurations for dual module (ESM/CJS) support
436
+
197
437
  ## [2.8.1] - 2025-05-06
438
+
198
439
  ### Added
440
+
199
441
  - Dual module format (ESM/CommonJS) to resolve module resolution issues (#235)
442
+
200
443
  ## [2.7.0] - 2025-05-04
444
+
201
445
  ### Fixed
446
+
202
447
  - iOS: enhance background audio recording and audio format conversion (#228)
448
+
203
449
  ## [2.6.2] - 2025-05-01
450
+
204
451
  ### Fixed
452
+
205
453
  - Android: ensure foreground-only audio recording works with `FOREGROUND_SERVICE` (#202, #221)
454
+
206
455
  ## [2.6.1] - 2025-05-01
456
+
207
457
  ### Fixed
458
+
208
459
  - iOS: resolve hardware format mismatch crash and enhance logging (#220)
460
+
209
461
  ## [2.6.0] - 2025-05-01
462
+
210
463
  ### Fixed
464
+
211
465
  - Web: resolve audio recording issue without compression (#217, #219)
466
+
212
467
  ## [2.5.0] - 2025-04-30
468
+
213
469
  ### Added
470
+
214
471
  - Complete Android implementation for audio device API (#214)
215
472
  - Cross-platform audio device detection, selection, and fallback handling (#213)
216
473
  - Zero-latency recording with `prepareRecording` API (#211)
217
474
 
218
475
  ### Fixed
476
+
219
477
  - iOS: ensure complete audio data emission on recording stop/pause (#215)
478
+
220
479
  ## [2.4.1] - 2025-04-08
480
+
221
481
  ### Added
482
+
222
483
  - Enhanced background audio handling and permission checks (#200)
484
+
223
485
  ## [2.4.0] - 2025-04-03
486
+
224
487
  ### Fixed
488
+
225
489
  - iOS: resolve sample rate mismatch and enhance recording stability (#198)
226
490
  - Android: enhance permission handling for phone state and notifications (#196)
491
+
227
492
  ## [2.3.1] - 2025-04-03
493
+
228
494
  ### Changed
495
+
229
496
  - Remove external CRC32 library dependency (#195)
497
+
230
498
  ## [2.3.0] - 2025-03-29
499
+
231
500
  ### Fixed
501
+
232
502
  - Always generate a new UUID unless filename is provided (#182)
503
+
233
504
  ## [2.2.0] - 2025-03-28
505
+
234
506
  ### Changed
507
+
235
508
  - Platform-specific CRC32 handling
509
+
236
510
  ## [2.1.0] - 2025-03-04
511
+
237
512
  ### Added
513
+
238
514
  - Mel spectrogram extraction and language detection (#157)
239
515
  - Audio import functionality and decibel visualization (#156)
240
516
  - iOS trim support with custom filename (#152)
241
517
  - Sample rate control and web trimming support (#151)
242
518
  - Audio trimming with optimized processing and detailed feedback (#150, #149)
519
+
243
520
  ## [2.0.1] - 2025-02-27
521
+
244
522
  ### Changed
523
+
245
524
  - Update background mode handling for audio stream plugin
525
+
246
526
  ## [2.0.0] - 2025-02-27
527
+
247
528
  ### Added
529
+
248
530
  - Full audio analysis with spectral features and time range controls (#132)
249
531
  - `extractAudioData` API
250
532
  - PCM player
251
533
  - Audio checksum verification and segment analysis (#143)
252
534
 
253
535
  ### Fixed
536
+
254
537
  - Audio recording reliability improvements and web IndexedDB management (#146)
538
+
255
539
  ## [1.17.0] - 2025-02-18
540
+
256
541
  ### Added
542
+
257
543
  - Interval audio analysis for web, Android, and iOS (#125, #126)
544
+
258
545
  ## [1.16.0] - 2025-02-17
546
+
259
547
  ### Fixed
548
+
260
549
  - iOS: prevent adding background modes when disabled
261
550
  - iOS: replace CallKit with `AVAudioSession` for phone call detection
551
+
262
552
  ## [1.15.1] - 2025-02-17
553
+
263
554
  ### Fixed
555
+
264
556
  - iOS: restore Opus compression support (#122)
265
557
  - Emit audio analysis without blocking the recording thread
558
+
266
559
  ## [1.15.0] - 2025-02-15
560
+
267
561
  ### Fixed
562
+
268
563
  - iOS: improve audio recording interruption handling and auto-resume (#119)
269
564
  - Android: improve background recording and call interruption handling (#118)
565
+
270
566
  ## [1.14.2] - 2025-02-13
567
+
271
568
  ### Fixed
569
+
272
570
  - Clear recording metadata on STOP action
571
+
273
572
  ## [1.14.1] - 2025-02-12
573
+
274
574
  ### Fixed
575
+
275
576
  - Enable background recording by default (#114)
577
+
276
578
  ## [1.14.0] - 2025-02-12
579
+
277
580
  ### Fixed
581
+
278
582
  - `keepAwake` issue on iOS and auto-resume after call (#113)
583
+
279
584
  ## [1.13.2] - 2025-02-10
585
+
280
586
  ### Fixed
587
+
281
588
  - Ensure foreground service starts within required timeframe
589
+
282
590
  ## [1.13.0] - 2025-02-09
591
+
283
592
  ### Added
593
+
284
594
  - Audio decode support (#104)
285
595
 
286
596
  ### Fixed
597
+
287
598
  - Background recording issues and status checking (#103)
599
+
288
600
  ## [1.12.1] - 2025-02-01
601
+
289
602
  ### Fixed
603
+
290
604
  - Improve audio recording interruption handling and consistency (#98)
605
+
291
606
  ## [1.12.0] - 2025-01-31
607
+
292
608
  ### Added
609
+
293
610
  - Call state checks before starting or resuming recording (#94)
294
611
  - Custom filename and directory support for recordings (#92)
295
612
  - Compressed recording info with file size (#90)
613
+
296
614
  ## [1.11.3] - 2025-01-25
615
+
297
616
  ### Fixed
617
+
298
618
  - Disable duplicate notification alerts (#82)
619
+
299
620
  ## [1.11.2] - 2025-01-22
621
+
300
622
  ### Fixed
623
+
301
624
  - Resources not cleaned up properly on app kill (#80)
625
+
302
626
  ## [1.11.0] - 2025-01-22
627
+
303
628
  ### Added
629
+
304
630
  - Intelligent call interruption handling and compression improvements (#78)
631
+
305
632
  ## [1.10.0] - 2025-01-14
633
+
306
634
  ### Added
635
+
307
636
  - Support for pausing and resuming compressed recordings
308
637
  - Optimized notification channel settings
638
+
309
639
  ## [1.9.2] - 2025-01-12
640
+
310
641
  ### Fixed
642
+
311
643
  - iOS: bitrate verification to prevent invalid values
644
+
312
645
  ## [1.9.1] - 2025-01-12
646
+
313
647
  ### Fixed
648
+
314
649
  - iOS: potentially missing compressed file info
650
+
315
651
  ## [1.9.0] - 2025-01-11
652
+
316
653
  ### Performance
654
+
317
655
  - Optimize memory usage and streaming performance for web audio recording (#75)
656
+
318
657
  ## [1.8.0] - 2025-01-10
658
+
319
659
  ### Added
660
+
320
661
  - Audio compression support
662
+
321
663
  ## [1.7.2] - 2025-01-07
664
+
322
665
  ### Fixed
666
+
323
667
  - Web: correct WAV header handling in audio recording
668
+
324
669
  ## [1.7.1] - 2025-01-07
670
+
325
671
  ### Fixed
672
+
326
673
  - Notification: avoid triggering new alerts on update (#71)
674
+
327
675
  ## [1.7.0] - 2025-01-05
676
+
328
677
  ### Fixed
678
+
329
679
  - iOS: improve audio resampling and duration tracking (#69)
330
680
  - Handle paused state in `stopRecording` (#68)
331
681
  - Reset audio recording state properly on iOS and Android (#66)
332
682
  - Android: total size not resetting on new recording (#64)
683
+
333
684
  ## [1.3.1] - 2024-12-05
685
+
334
686
  ### Added
687
+
335
688
  - Web: throttling and optimized event processing (#49)
689
+
336
690
  ## [1.3.0] - 2024-11-28
691
+
337
692
  ### Added
693
+
338
694
  - Standardize permission status response structure across platforms (#44)
695
+
339
696
  ## [1.2.4] - 2024-11-05
697
+
340
698
  ### Changed
699
+
341
700
  - Android: minimum audio interval set to 10ms
342
701
  - Plugin: do not include `notification` config by default to prevent iOS version mismatch
343
702
 
344
703
  ### Fixed
704
+
345
705
  - Remove frequently firing log statements on web
706
+
346
707
  ## [1.2.0] - 2024-10-24
708
+
347
709
  ### Added
710
+
348
711
  - `keepAwake` — continue recording when app is in background (default: true)
349
712
  - Customizable recording notifications for Android and iOS
350
- - Android: rich notification with live waveform, configurable actions/colors/priorities
351
- - iOS: media player integration
713
+ - Android: rich notification with live waveform, configurable actions/colors/priorities
714
+ - iOS: media player integration
715
+
352
716
  ## [1.1.17] - 2024-10-21
717
+
353
718
  ### Added
719
+
354
720
  - Bluetooth headset support on iOS
355
721
 
356
722
  ### Fixed
723
+
357
724
  - Android: not reading custom interval audio update
725
+
358
726
  ## [1.0.0] - 2024-04-01
727
+
359
728
  ### Added
729
+
360
730
  - Initial release
361
731
  - Real-time audio streaming across iOS, Android, and web
362
732
  - Configurable intervals for audio buffer receipt
@@ -365,7 +735,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
365
735
  - Audio features extraction during recording
366
736
  - Consistent WAV PCM recording format across all platforms
367
737
 
368
- [unreleased]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.1.1...HEAD
738
+ [unreleased]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.2.0...HEAD
739
+ [3.2.0]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.1.1...@siteed/audio-studio@3.2.0
369
740
  [3.1.1]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.1.0...@siteed/audio-studio@3.1.1
370
741
  [3.1.0]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.5...@siteed/audio-studio@3.1.0
371
742
  [3.0.5]: https://github.com/deeeed/audiolab/compare/@siteed/audio-studio@3.0.4...@siteed/audio-studio@3.0.5