@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.
- package/CHANGELOG.md +375 -4
- package/android/src/main/java/net/siteed/audiostudio/AudioStreamDecoder.kt +852 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioStudioModule.kt +167 -3
- package/android/src/main/java/net/siteed/audiostudio/Constants.kt +4 -0
- package/build/cjs/errors/AudioStreamError.js +161 -0
- package/build/cjs/errors/AudioStreamError.js.map +1 -0
- package/build/cjs/errors/AudioStreamError.test.js +82 -0
- package/build/cjs/errors/AudioStreamError.test.js.map +1 -0
- package/build/cjs/index.js +7 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/streamAudioData.js +534 -0
- package/build/cjs/streamAudioData.js.map +1 -0
- package/build/cjs/utils/audioProcessing.js +14 -10
- package/build/cjs/utils/audioProcessing.js.map +1 -1
- package/build/esm/errors/AudioStreamError.js +156 -0
- package/build/esm/errors/AudioStreamError.js.map +1 -0
- package/build/esm/errors/AudioStreamError.test.js +80 -0
- package/build/esm/errors/AudioStreamError.test.js.map +1 -0
- package/build/esm/index.js +3 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/streamAudioData.js +527 -0
- package/build/esm/streamAudioData.js.map +1 -0
- package/build/esm/utils/audioProcessing.js +14 -10
- package/build/esm/utils/audioProcessing.js.map +1 -1
- package/build/types/errors/AudioStreamError.d.ts +25 -0
- package/build/types/errors/AudioStreamError.d.ts.map +1 -0
- package/build/types/errors/AudioStreamError.test.d.ts +2 -0
- package/build/types/errors/AudioStreamError.test.d.ts.map +1 -0
- package/build/types/index.d.ts +5 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/streamAudioData.d.ts +119 -0
- package/build/types/streamAudioData.d.ts.map +1 -0
- package/build/types/utils/audioProcessing.d.ts +2 -2
- package/build/types/utils/audioProcessing.d.ts.map +1 -1
- package/ios/AudioProcessingHelpers.swift +10 -5
- package/ios/AudioStreamDecoder.swift +614 -0
- package/ios/AudioStudioModule.swift +186 -3
- package/package.json +163 -146
- package/scripts/README.md +58 -0
- package/src/errors/AudioStreamError.test.ts +92 -0
- package/src/errors/AudioStreamError.ts +199 -0
- package/src/index.ts +24 -0
- package/src/streamAudioData.ts +758 -0
- package/src/utils/audioProcessing.ts +25 -14
- package/android/src/androidTest/assets/chorus.wav +0 -0
- package/android/src/androidTest/assets/jfk.wav +0 -0
- package/android/src/androidTest/assets/osr_us_000_0010_8k.wav +0 -0
- package/android/src/androidTest/assets/recorder_hello_world.wav +0 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/AudioFinalMetadataContractInstrumentedTest.kt +0 -190
- package/android/src/androidTest/java/net/siteed/audiostudio/AudioProcessorInstrumentedTest.kt +0 -197
- package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderInstrumentedTest.kt +0 -487
- package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderPerformanceInstrumentedTest.kt +0 -250
- package/android/src/androidTest/java/net/siteed/audiostudio/OpusRangeDecodeRegressionInstrumentedTest.kt +0 -186
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/AudioFocusStrategyIntegrationTest.kt +0 -332
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/BufferDurationIntegrationTest.kt +0 -324
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/CompressedOnlyOutputTest.kt +0 -253
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/DeviceDisconnectionFallbackTest.kt +0 -218
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/EventEmissionIntervalTest.kt +0 -120
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/M4aFormatTest.kt +0 -345
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/OutputControlIntegrationTest.kt +0 -340
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/PcmStreamingDurationTest.kt +0 -252
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/README.md +0 -95
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/run_integration_tests.sh +0 -43
- package/android/src/test/java/net/siteed/audiostudio/AndroidCallStateTest.kt +0 -37
- package/android/src/test/java/net/siteed/audiostudio/AndroidEventEmitterTest.kt +0 -28
- package/android/src/test/java/net/siteed/audiostudio/AudioFileHandlerTest.kt +0 -279
- package/android/src/test/java/net/siteed/audiostudio/AudioFocusStrategyTest.kt +0 -249
- package/android/src/test/java/net/siteed/audiostudio/AudioFormatTest.kt +0 -151
- package/android/src/test/java/net/siteed/audiostudio/AudioFormatUtilsTest.kt +0 -273
- package/android/src/test/java/net/siteed/audiostudio/DeviceDisconnectionFallbackUnitTest.kt +0 -140
- package/android/src/test/java/net/siteed/audiostudio/InterruptionAutoResumePolicyTest.kt +0 -49
- package/android/src/test/resources/chorus.wav +0 -0
- package/android/src/test/resources/generate_test_audio.py +0 -94
- package/android/src/test/resources/jfk.wav +0 -0
- package/android/src/test/resources/osr_us_000_0010_8k.wav +0 -0
- package/android/src/test/resources/recorder_hello_world.wav +0 -0
- package/ios/AudioStudioTests/AudioFileHandlerTests.swift +0 -338
- package/ios/AudioStudioTests/AudioFormatUtilsTests.swift +0 -331
- package/ios/AudioStudioTests/AudioTestHelpers.swift +0 -130
- package/ios/AudioStudioTests/CompressedOnlyOutputTests.swift +0 -334
- package/ios/AudioStudioTests/EventEmissionIntervalTests.swift +0 -105
- package/ios/AudioStudioTests/Info.plist +0 -22
- package/ios/AudioStudioTests/README.md +0 -39
- package/ios/AudioStudioTests/SimpleAudioTest.swift +0 -98
- package/ios/AudioStudioTests/TestAudioGenerator.swift +0 -75
- package/ios/tests/README.md +0 -41
- package/ios/tests/integration/buffer_and_fallback_test.swift +0 -178
- package/ios/tests/integration/buffer_duration_test.swift +0 -185
- package/ios/tests/integration/compressed_only_output_test.swift +0 -271
- package/ios/tests/integration/output_control_test.swift +0 -322
- package/ios/tests/integration/run_integration_tests.sh +0 -37
- package/ios/tests/opus_support_test_macos.swift +0 -154
- package/ios/tests/standalone/audio_processing_test.swift +0 -144
- package/ios/tests/standalone/audio_recording_test.swift +0 -277
- package/ios/tests/standalone/audio_streaming_test.swift +0 -249
- 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
|
-
|
|
351
|
-
|
|
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.
|
|
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
|