@siteed/audio-studio 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +535 -0
- package/LICENSE +21 -0
- package/README.md +167 -0
- package/android/build.gradle +143 -0
- 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/AudioProcessorInstrumentedTest.kt +197 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderInstrumentedTest.kt +541 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/AudioRecorderPerformanceInstrumentedTest.kt +234 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/AudioFocusStrategyIntegrationTest.kt +332 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/BufferDurationIntegrationTest.kt +324 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/CompressedOnlyOutputTest.kt +253 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/DeviceDisconnectionFallbackTest.kt +218 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/EventEmissionIntervalTest.kt +120 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/M4aFormatTest.kt +345 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/OutputControlIntegrationTest.kt +340 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/PcmStreamingDurationTest.kt +252 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/README.md +95 -0
- package/android/src/androidTest/java/net/siteed/audiostudio/integration/run_integration_tests.sh +43 -0
- package/android/src/main/AndroidManifest.xml +30 -0
- package/android/src/main/CMakeLists.txt +29 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioAnalysisData.kt +188 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioDataEncoder.kt +9 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioDeviceManager.kt +1741 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioFeaturesNative.kt +26 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioFileHandler.kt +136 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioFormatUtils.kt +354 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioNotificationsManager.kt +439 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioProcessor.kt +2237 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioRecorderManager.kt +2163 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioRecordingService.kt +167 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioStudioModule.kt +1112 -0
- package/android/src/main/java/net/siteed/audiostudio/AudioTrimmer.kt +1099 -0
- package/android/src/main/java/net/siteed/audiostudio/Constants.kt +37 -0
- package/android/src/main/java/net/siteed/audiostudio/EventSender.kt +7 -0
- package/android/src/main/java/net/siteed/audiostudio/FFT.kt +100 -0
- package/android/src/main/java/net/siteed/audiostudio/Features.kt +98 -0
- package/android/src/main/java/net/siteed/audiostudio/LogUtils.kt +93 -0
- package/android/src/main/java/net/siteed/audiostudio/MelSpectrogramNative.kt +36 -0
- package/android/src/main/java/net/siteed/audiostudio/NotificationConfig.kt +72 -0
- package/android/src/main/java/net/siteed/audiostudio/PermissionUtils.kt +68 -0
- package/android/src/main/java/net/siteed/audiostudio/RecordingActionReceiver.kt +59 -0
- package/android/src/main/java/net/siteed/audiostudio/RecordingConfig.kt +259 -0
- package/android/src/main/java/net/siteed/audiostudio/WaveformConfig.kt +19 -0
- package/android/src/main/java/net/siteed/audiostudio/WaveformRenderer.kt +159 -0
- package/android/src/main/jni/AudioFeaturesJNI.cpp +152 -0
- package/android/src/main/jni/MelSpectrogramJNI.cpp +165 -0
- package/android/src/main/res/drawable/ic_default_action_icon.xml +16 -0
- package/android/src/main/res/drawable/ic_microphone.xml +13 -0
- package/android/src/main/res/drawable/ic_pause.xml +10 -0
- package/android/src/main/res/drawable/ic_play.xml +10 -0
- package/android/src/main/res/drawable/ic_stop.xml +10 -0
- package/android/src/main/res/layout/notification_recording.xml +37 -0
- package/android/src/test/java/net/siteed/audiostudio/AudioFileHandlerTest.kt +279 -0
- package/android/src/test/java/net/siteed/audiostudio/AudioFocusStrategyTest.kt +249 -0
- package/android/src/test/java/net/siteed/audiostudio/AudioFormatTest.kt +151 -0
- package/android/src/test/java/net/siteed/audiostudio/AudioFormatUtilsTest.kt +273 -0
- package/android/src/test/java/net/siteed/audiostudio/DeviceDisconnectionFallbackUnitTest.kt +140 -0
- package/android/src/test/resources/chorus.wav +0 -0
- package/android/src/test/resources/generate_test_audio.py +94 -0
- 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/app.plugin.js +3 -0
- package/build/cjs/AudioAnalysis/AudioAnalysis.types.js +4 -0
- package/build/cjs/AudioAnalysis/AudioAnalysis.types.js.map +1 -0
- package/build/cjs/AudioAnalysis/audioFeaturesWasm.js +164 -0
- package/build/cjs/AudioAnalysis/audioFeaturesWasm.js.map +1 -0
- package/build/cjs/AudioAnalysis/extractAudioAnalysis.js +213 -0
- package/build/cjs/AudioAnalysis/extractAudioAnalysis.js.map +1 -0
- package/build/cjs/AudioAnalysis/extractAudioData.js +21 -0
- package/build/cjs/AudioAnalysis/extractAudioData.js.map +1 -0
- package/build/cjs/AudioAnalysis/extractMelSpectrogram.js +90 -0
- package/build/cjs/AudioAnalysis/extractMelSpectrogram.js.map +1 -0
- package/build/cjs/AudioAnalysis/extractPreview.js +28 -0
- package/build/cjs/AudioAnalysis/extractPreview.js.map +1 -0
- package/build/cjs/AudioAnalysis/extractWaveform.js +18 -0
- package/build/cjs/AudioAnalysis/extractWaveform.js.map +1 -0
- package/build/cjs/AudioAnalysis/melSpectrogramWasm.js +149 -0
- package/build/cjs/AudioAnalysis/melSpectrogramWasm.js.map +1 -0
- package/build/cjs/AudioDeviceManager.js +688 -0
- package/build/cjs/AudioDeviceManager.js.map +1 -0
- package/build/cjs/AudioRecorder.provider.js +78 -0
- package/build/cjs/AudioRecorder.provider.js.map +1 -0
- package/build/cjs/AudioStudio.native.js +8 -0
- package/build/cjs/AudioStudio.native.js.map +1 -0
- package/build/cjs/AudioStudio.types.js +11 -0
- package/build/cjs/AudioStudio.types.js.map +1 -0
- package/build/cjs/AudioStudio.web.js +708 -0
- package/build/cjs/AudioStudio.web.js.map +1 -0
- package/build/cjs/AudioStudioModule.js +718 -0
- package/build/cjs/AudioStudioModule.js.map +1 -0
- package/build/cjs/WebRecorder.web.js +865 -0
- package/build/cjs/WebRecorder.web.js.map +1 -0
- package/build/cjs/constants/platformLimitations.js +99 -0
- package/build/cjs/constants/platformLimitations.js.map +1 -0
- package/build/cjs/constants.js +20 -0
- package/build/cjs/constants.js.map +1 -0
- package/build/cjs/events.js +29 -0
- package/build/cjs/events.js.map +1 -0
- package/build/cjs/hooks/useAudioDevices.js +179 -0
- package/build/cjs/hooks/useAudioDevices.js.map +1 -0
- package/build/cjs/index.js +64 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/trimAudio.js +76 -0
- package/build/cjs/trimAudio.js.map +1 -0
- package/build/cjs/useAudioRecorder.js +535 -0
- package/build/cjs/useAudioRecorder.js.map +1 -0
- package/build/cjs/utils/BlobFix.js +502 -0
- package/build/cjs/utils/BlobFix.js.map +1 -0
- package/build/cjs/utils/audioProcessing.js +136 -0
- package/build/cjs/utils/audioProcessing.js.map +1 -0
- package/build/cjs/utils/cleanNativeOptions.js +22 -0
- package/build/cjs/utils/cleanNativeOptions.js.map +1 -0
- package/build/cjs/utils/concatenateBuffers.js +25 -0
- package/build/cjs/utils/concatenateBuffers.js.map +1 -0
- package/build/cjs/utils/convertPCMToFloat32.js +124 -0
- package/build/cjs/utils/convertPCMToFloat32.js.map +1 -0
- package/build/cjs/utils/crc32.js +52 -0
- package/build/cjs/utils/crc32.js.map +1 -0
- package/build/cjs/utils/encodingToBitDepth.js +17 -0
- package/build/cjs/utils/encodingToBitDepth.js.map +1 -0
- package/build/cjs/utils/getWavFileInfo.js +96 -0
- package/build/cjs/utils/getWavFileInfo.js.map +1 -0
- package/build/cjs/utils/writeWavHeader.js +88 -0
- package/build/cjs/utils/writeWavHeader.js.map +1 -0
- package/build/cjs/workers/InlineFeaturesExtractor.web.js +294 -0
- package/build/cjs/workers/InlineFeaturesExtractor.web.js.map +1 -0
- package/build/cjs/workers/inlineAudioWebWorker.web.js +190 -0
- package/build/cjs/workers/inlineAudioWebWorker.web.js.map +1 -0
- package/build/cjs/workers/wasmGlueString.web.js +27 -0
- package/build/cjs/workers/wasmGlueString.web.js.map +1 -0
- package/build/esm/AudioAnalysis/AudioAnalysis.types.js +3 -0
- package/build/esm/AudioAnalysis/AudioAnalysis.types.js.map +1 -0
- package/build/esm/AudioAnalysis/audioFeaturesWasm.js +126 -0
- package/build/esm/AudioAnalysis/audioFeaturesWasm.js.map +1 -0
- package/build/esm/AudioAnalysis/extractAudioAnalysis.js +205 -0
- package/build/esm/AudioAnalysis/extractAudioAnalysis.js.map +1 -0
- package/build/esm/AudioAnalysis/extractAudioData.js +14 -0
- package/build/esm/AudioAnalysis/extractAudioData.js.map +1 -0
- package/build/esm/AudioAnalysis/extractMelSpectrogram.js +86 -0
- package/build/esm/AudioAnalysis/extractMelSpectrogram.js.map +1 -0
- package/build/esm/AudioAnalysis/extractPreview.js +25 -0
- package/build/esm/AudioAnalysis/extractPreview.js.map +1 -0
- package/build/esm/AudioAnalysis/extractWaveform.js +11 -0
- package/build/esm/AudioAnalysis/extractWaveform.js.map +1 -0
- package/build/esm/AudioAnalysis/melSpectrogramWasm.js +111 -0
- package/build/esm/AudioAnalysis/melSpectrogramWasm.js.map +1 -0
- package/build/esm/AudioDeviceManager.js +681 -0
- package/build/esm/AudioDeviceManager.js.map +1 -0
- package/build/esm/AudioRecorder.provider.js +40 -0
- package/build/esm/AudioRecorder.provider.js.map +1 -0
- package/build/esm/AudioStudio.native.js +6 -0
- package/build/esm/AudioStudio.native.js.map +1 -0
- package/build/esm/AudioStudio.types.js +8 -0
- package/build/esm/AudioStudio.types.js.map +1 -0
- package/build/esm/AudioStudio.web.js +704 -0
- package/build/esm/AudioStudio.web.js.map +1 -0
- package/build/esm/AudioStudioModule.js +713 -0
- package/build/esm/AudioStudioModule.js.map +1 -0
- package/build/esm/WebRecorder.web.js +861 -0
- package/build/esm/WebRecorder.web.js.map +1 -0
- package/build/esm/constants/platformLimitations.js +90 -0
- package/build/esm/constants/platformLimitations.js.map +1 -0
- package/build/esm/constants.js +17 -0
- package/build/esm/constants.js.map +1 -0
- package/build/esm/events.js +21 -0
- package/build/esm/events.js.map +1 -0
- package/build/esm/hooks/useAudioDevices.js +176 -0
- package/build/esm/hooks/useAudioDevices.js.map +1 -0
- package/build/esm/index.js +23 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/trimAudio.js +69 -0
- package/build/esm/trimAudio.js.map +1 -0
- package/build/esm/useAudioRecorder.js +529 -0
- package/build/esm/useAudioRecorder.js.map +1 -0
- package/build/esm/utils/BlobFix.js +498 -0
- package/build/esm/utils/BlobFix.js.map +1 -0
- package/build/esm/utils/audioProcessing.js +133 -0
- package/build/esm/utils/audioProcessing.js.map +1 -0
- package/build/esm/utils/cleanNativeOptions.js +19 -0
- package/build/esm/utils/cleanNativeOptions.js.map +1 -0
- package/build/esm/utils/concatenateBuffers.js +21 -0
- package/build/esm/utils/concatenateBuffers.js.map +1 -0
- package/build/esm/utils/convertPCMToFloat32.js +120 -0
- package/build/esm/utils/convertPCMToFloat32.js.map +1 -0
- package/build/esm/utils/crc32.js +50 -0
- package/build/esm/utils/crc32.js.map +1 -0
- package/build/esm/utils/encodingToBitDepth.js +13 -0
- package/build/esm/utils/encodingToBitDepth.js.map +1 -0
- package/build/esm/utils/getWavFileInfo.js +92 -0
- package/build/esm/utils/getWavFileInfo.js.map +1 -0
- package/build/esm/utils/writeWavHeader.js +84 -0
- package/build/esm/utils/writeWavHeader.js.map +1 -0
- package/build/esm/workers/InlineFeaturesExtractor.web.js +291 -0
- package/build/esm/workers/InlineFeaturesExtractor.web.js.map +1 -0
- package/build/esm/workers/inlineAudioWebWorker.web.js +187 -0
- package/build/esm/workers/inlineAudioWebWorker.web.js.map +1 -0
- package/build/esm/workers/wasmGlueString.web.js +24 -0
- package/build/esm/workers/wasmGlueString.web.js.map +1 -0
- package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts +198 -0
- package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts.map +1 -0
- package/build/types/AudioAnalysis/audioFeaturesWasm.d.ts +24 -0
- package/build/types/AudioAnalysis/audioFeaturesWasm.d.ts.map +1 -0
- package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts +74 -0
- package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts.map +1 -0
- package/build/types/AudioAnalysis/extractAudioData.d.ts +3 -0
- package/build/types/AudioAnalysis/extractAudioData.d.ts.map +1 -0
- package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts +20 -0
- package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts.map +1 -0
- package/build/types/AudioAnalysis/extractPreview.d.ts +11 -0
- package/build/types/AudioAnalysis/extractPreview.d.ts.map +1 -0
- package/build/types/AudioAnalysis/extractWaveform.d.ts +8 -0
- package/build/types/AudioAnalysis/extractWaveform.d.ts.map +1 -0
- package/build/types/AudioAnalysis/melSpectrogramWasm.d.ts +16 -0
- package/build/types/AudioAnalysis/melSpectrogramWasm.d.ts.map +1 -0
- package/build/types/AudioDeviceManager.d.ts +187 -0
- package/build/types/AudioDeviceManager.d.ts.map +1 -0
- package/build/types/AudioRecorder.provider.d.ts +11 -0
- package/build/types/AudioRecorder.provider.d.ts.map +1 -0
- package/build/types/AudioStudio.native.d.ts +3 -0
- package/build/types/AudioStudio.native.d.ts.map +1 -0
- package/build/types/AudioStudio.types.d.ts +760 -0
- package/build/types/AudioStudio.types.d.ts.map +1 -0
- package/build/types/AudioStudio.web.d.ts +96 -0
- package/build/types/AudioStudio.web.d.ts.map +1 -0
- package/build/types/AudioStudioModule.d.ts +3 -0
- package/build/types/AudioStudioModule.d.ts.map +1 -0
- package/build/types/WebRecorder.web.d.ts +208 -0
- package/build/types/WebRecorder.web.d.ts.map +1 -0
- package/build/types/constants/platformLimitations.d.ts +40 -0
- package/build/types/constants/platformLimitations.d.ts.map +1 -0
- package/build/types/constants.d.ts +14 -0
- package/build/types/constants.d.ts.map +1 -0
- package/build/types/events.d.ts +29 -0
- package/build/types/events.d.ts.map +1 -0
- package/build/types/hooks/useAudioDevices.d.ts +15 -0
- package/build/types/hooks/useAudioDevices.d.ts.map +1 -0
- package/build/types/index.d.ts +21 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/trimAudio.d.ts +25 -0
- package/build/types/trimAudio.d.ts.map +1 -0
- package/build/types/useAudioRecorder.d.ts +22 -0
- package/build/types/useAudioRecorder.d.ts.map +1 -0
- package/build/types/utils/BlobFix.d.ts +9 -0
- package/build/types/utils/BlobFix.d.ts.map +1 -0
- package/build/types/utils/audioProcessing.d.ts +24 -0
- package/build/types/utils/audioProcessing.d.ts.map +1 -0
- package/build/types/utils/cleanNativeOptions.d.ts +15 -0
- package/build/types/utils/cleanNativeOptions.d.ts.map +1 -0
- package/build/types/utils/concatenateBuffers.d.ts +8 -0
- package/build/types/utils/concatenateBuffers.d.ts.map +1 -0
- package/build/types/utils/convertPCMToFloat32.d.ts +13 -0
- package/build/types/utils/convertPCMToFloat32.d.ts.map +1 -0
- package/build/types/utils/crc32.d.ts +7 -0
- package/build/types/utils/crc32.d.ts.map +1 -0
- package/build/types/utils/encodingToBitDepth.d.ts +5 -0
- package/build/types/utils/encodingToBitDepth.d.ts.map +1 -0
- package/build/types/utils/getWavFileInfo.d.ts +26 -0
- package/build/types/utils/getWavFileInfo.d.ts.map +1 -0
- package/build/types/utils/writeWavHeader.d.ts +34 -0
- package/build/types/utils/writeWavHeader.d.ts.map +1 -0
- package/build/types/workers/InlineFeaturesExtractor.web.d.ts +2 -0
- package/build/types/workers/InlineFeaturesExtractor.web.d.ts.map +1 -0
- package/build/types/workers/inlineAudioWebWorker.web.d.ts +2 -0
- package/build/types/workers/inlineAudioWebWorker.web.d.ts.map +1 -0
- package/build/types/workers/wasmGlueString.web.d.ts +2 -0
- package/build/types/workers/wasmGlueString.web.d.ts.map +1 -0
- package/cpp/AudioFeatures.cpp +274 -0
- package/cpp/AudioFeatures.h +85 -0
- package/cpp/AudioFeaturesBridge.cpp +146 -0
- package/cpp/AudioFeaturesBridge.h +47 -0
- package/cpp/MelSpectrogram.cpp +227 -0
- package/cpp/MelSpectrogram.h +82 -0
- package/cpp/MelSpectrogramBridge.cpp +112 -0
- package/cpp/MelSpectrogramBridge.h +33 -0
- package/cpp/kiss_fft/COPYING +11 -0
- package/cpp/kiss_fft/_kiss_fft_guts.h +167 -0
- package/cpp/kiss_fft/kiss_fft.c +424 -0
- package/cpp/kiss_fft/kiss_fft.h +160 -0
- package/cpp/kiss_fft/kiss_fft_log.h +36 -0
- package/cpp/kiss_fft/kiss_fftr.c +155 -0
- package/cpp/kiss_fft/kiss_fftr.h +54 -0
- package/expo-module.config.json +10 -0
- package/ios/AudioAnalysisData.swift +74 -0
- package/ios/AudioDeviceManager.swift +670 -0
- package/ios/AudioFeaturesWrapper.h +21 -0
- package/ios/AudioFeaturesWrapper.mm +63 -0
- package/ios/AudioNotificationManager.swift +154 -0
- package/ios/AudioProcessingHelpers.swift +797 -0
- package/ios/AudioProcessor.swift +1191 -0
- package/ios/AudioStreamError.swift +7 -0
- package/ios/AudioStreamManager.swift +2369 -0
- package/ios/AudioStreamManagerDelegate.swift +16 -0
- package/ios/AudioStudio.podspec +39 -0
- package/ios/AudioStudioModule.swift +1111 -0
- package/ios/AudioStudioTests/AudioFileHandlerTests.swift +338 -0
- package/ios/AudioStudioTests/AudioFormatUtilsTests.swift +331 -0
- package/ios/AudioStudioTests/AudioTestHelpers.swift +130 -0
- package/ios/AudioStudioTests/CompressedOnlyOutputTests.swift +294 -0
- package/ios/AudioStudioTests/EventEmissionIntervalTests.swift +105 -0
- package/ios/AudioStudioTests/Info.plist +22 -0
- package/ios/AudioStudioTests/README.md +39 -0
- package/ios/AudioStudioTests/SimpleAudioTest.swift +98 -0
- package/ios/AudioStudioTests/TestAudioGenerator.swift +75 -0
- package/ios/DataPoint.swift +54 -0
- package/ios/DecodingConfig.swift +59 -0
- package/ios/FFT.swift +62 -0
- package/ios/Features.swift +95 -0
- package/ios/ISSUE_IOS.md +68 -0
- package/ios/Logger.swift +39 -0
- package/ios/MelSpectrogramWrapper.h +30 -0
- package/ios/MelSpectrogramWrapper.mm +97 -0
- package/ios/NotificationExtension.swift +15 -0
- package/ios/RecordingResult.swift +22 -0
- package/ios/RecordingSettings.swift +311 -0
- package/ios/WaveformExtractor.swift +105 -0
- package/ios/tests/README.md +41 -0
- package/ios/tests/integration/buffer_and_fallback_test.swift +178 -0
- package/ios/tests/integration/buffer_duration_test.swift +185 -0
- package/ios/tests/integration/compressed_only_output_test.swift +271 -0
- package/ios/tests/integration/output_control_test.swift +322 -0
- package/ios/tests/integration/run_integration_tests.sh +37 -0
- package/ios/tests/opus_support_test_macos.swift +154 -0
- package/ios/tests/standalone/audio_processing_test.swift +144 -0
- package/ios/tests/standalone/audio_recording_test.swift +277 -0
- package/ios/tests/standalone/audio_streaming_test.swift +249 -0
- package/ios/tests/standalone/standalone_test.swift +144 -0
- package/package.json +146 -0
- package/plugin/build/index.cjs +194 -0
- package/plugin/build/index.d.cts +22 -0
- package/plugin/build/index.js +194 -0
- package/plugin/src/index.ts +285 -0
- package/plugin/tsconfig.json +10 -0
- package/plugin/tsconfig.tsbuildinfo +1 -0
- package/prebuilt/wasm/mel-spectrogram.js +18 -0
- package/src/AudioAnalysis/AudioAnalysis.types.ts +226 -0
- package/src/AudioAnalysis/audio-features-wasm.d.ts +37 -0
- package/src/AudioAnalysis/audioFeaturesWasm.ts +200 -0
- package/src/AudioAnalysis/extractAudioAnalysis.ts +350 -0
- package/src/AudioAnalysis/extractAudioData.ts +17 -0
- package/src/AudioAnalysis/extractMelSpectrogram.ts +140 -0
- package/src/AudioAnalysis/extractPreview.ts +34 -0
- package/src/AudioAnalysis/extractWaveform.ts +22 -0
- package/src/AudioAnalysis/mel-spectrogram-wasm.d.ts +48 -0
- package/src/AudioAnalysis/melSpectrogramWasm.ts +179 -0
- package/src/AudioDeviceManager.ts +800 -0
- package/src/AudioRecorder.provider.tsx +57 -0
- package/src/AudioStudio.native.ts +6 -0
- package/src/AudioStudio.types.ts +899 -0
- package/src/AudioStudio.web.ts +911 -0
- package/src/AudioStudioModule.ts +984 -0
- package/src/WebRecorder.web.ts +1114 -0
- package/src/constants/platformLimitations.ts +118 -0
- package/src/constants.ts +21 -0
- package/src/events.ts +63 -0
- package/src/hooks/useAudioDevices.ts +213 -0
- package/src/index.ts +67 -0
- package/src/trimAudio.ts +94 -0
- package/src/types/crc-32.d.ts +9 -0
- package/src/useAudioRecorder.tsx +784 -0
- package/src/utils/BlobFix.ts +561 -0
- package/src/utils/audioProcessing.ts +205 -0
- package/src/utils/cleanNativeOptions.ts +18 -0
- package/src/utils/concatenateBuffers.ts +24 -0
- package/src/utils/convertPCMToFloat32.ts +170 -0
- package/src/utils/crc32.ts +59 -0
- package/src/utils/encodingToBitDepth.ts +18 -0
- package/src/utils/getWavFileInfo.ts +132 -0
- package/src/utils/writeWavHeader.ts +115 -0
- package/src/workers/InlineFeaturesExtractor.web.tsx +291 -0
- package/src/workers/inlineAudioWebWorker.web.tsx +186 -0
- package/src/workers/wasmGlueString.web.ts +23 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides functions for extracting and analyzing audio data.
|
|
3
|
+
* - `extractAudioAnalysis`: For detailed analysis with customizable ranges and decoding options.
|
|
4
|
+
* - `extractWavAudioAnalysis`: For analyzing WAV files without decoding, preserving original PCM values.
|
|
5
|
+
* - `extractPreview`: For generating quick previews of audio waveforms, optimized for UI rendering.
|
|
6
|
+
*/
|
|
7
|
+
import { ConsoleLike } from '../AudioStudio.types';
|
|
8
|
+
import { AudioAnalysis, AudioFeaturesOptions, DecodingConfig } from './AudioAnalysis.types';
|
|
9
|
+
import { WavFileInfo } from '../utils/getWavFileInfo';
|
|
10
|
+
export interface ExtractWavAudioAnalysisProps {
|
|
11
|
+
fileUri?: string;
|
|
12
|
+
wavMetadata?: WavFileInfo;
|
|
13
|
+
arrayBuffer?: ArrayBuffer;
|
|
14
|
+
bitDepth?: number;
|
|
15
|
+
durationMs?: number;
|
|
16
|
+
sampleRate?: number;
|
|
17
|
+
numberOfChannels?: number;
|
|
18
|
+
position?: number;
|
|
19
|
+
length?: number;
|
|
20
|
+
segmentDurationMs?: number;
|
|
21
|
+
features?: AudioFeaturesOptions;
|
|
22
|
+
featuresExtratorUrl?: string;
|
|
23
|
+
logger?: ConsoleLike;
|
|
24
|
+
decodingOptions?: DecodingConfig;
|
|
25
|
+
}
|
|
26
|
+
interface BaseExtractOptions {
|
|
27
|
+
fileUri?: string;
|
|
28
|
+
arrayBuffer?: ArrayBuffer;
|
|
29
|
+
/**
|
|
30
|
+
* Duration of each analysis segment in milliseconds. Defaults to 100ms if not specified.
|
|
31
|
+
*/
|
|
32
|
+
segmentDurationMs?: number;
|
|
33
|
+
features?: AudioFeaturesOptions;
|
|
34
|
+
decodingOptions?: DecodingConfig;
|
|
35
|
+
logger?: ConsoleLike;
|
|
36
|
+
}
|
|
37
|
+
interface TimeRangeOptions extends BaseExtractOptions {
|
|
38
|
+
startTimeMs?: number;
|
|
39
|
+
endTimeMs?: number;
|
|
40
|
+
position?: never;
|
|
41
|
+
length?: never;
|
|
42
|
+
}
|
|
43
|
+
interface ByteRangeOptions extends BaseExtractOptions {
|
|
44
|
+
position?: number;
|
|
45
|
+
length?: number;
|
|
46
|
+
startTimeMs?: never;
|
|
47
|
+
endTimeMs?: never;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Options for extracting audio analysis.
|
|
51
|
+
* - For time-based analysis, provide `startTimeMs` and `endTimeMs`.
|
|
52
|
+
* - For byte-based analysis, provide `position` and `length`.
|
|
53
|
+
* - Do not mix time and byte ranges.
|
|
54
|
+
*/
|
|
55
|
+
export type ExtractAudioAnalysisProps = TimeRangeOptions | ByteRangeOptions;
|
|
56
|
+
/**
|
|
57
|
+
* Extracts detailed audio analysis from the specified audio file or buffer.
|
|
58
|
+
* Supports either time-based or byte-based ranges for flexibility in analysis.
|
|
59
|
+
*
|
|
60
|
+
* @param props - The options for extraction, including file URI, ranges, and decoding settings.
|
|
61
|
+
* @returns A promise that resolves to the audio analysis data.
|
|
62
|
+
* @throws {Error} If both time and byte ranges are provided or if required parameters are missing.
|
|
63
|
+
*/
|
|
64
|
+
export declare function extractAudioAnalysis(props: ExtractAudioAnalysisProps): Promise<AudioAnalysis>;
|
|
65
|
+
/**
|
|
66
|
+
* Analyzes WAV files without decoding, preserving original PCM values.
|
|
67
|
+
* Use this function when you need to ensure the analysis matches other software by avoiding any transformations.
|
|
68
|
+
*
|
|
69
|
+
* @param props - The options for WAV analysis, including file URI and range.
|
|
70
|
+
* @returns A promise that resolves to the audio analysis data.
|
|
71
|
+
*/
|
|
72
|
+
export declare const extractRawWavAnalysis: ({ fileUri, segmentDurationMs, arrayBuffer, bitDepth, durationMs, sampleRate, numberOfChannels, features, logger, position, length, }: ExtractWavAudioAnalysisProps) => Promise<AudioAnalysis>;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=extractAudioAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractAudioAnalysis.d.ts","sourceRoot":"","sources":["../../../src/AudioAnalysis/extractAudioAnalysis.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD,OAAO,EACH,aAAa,EACb,oBAAoB,EAEpB,cAAc,EACjB,MAAM,uBAAuB,CAAA;AAK9B,OAAO,EAAkB,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAgBrE,MAAM,WAAW,4BAA4B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,eAAe,CAAC,EAAE,cAAc,CAAA;CACnC;AAGD,UAAU,kBAAkB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,MAAM,CAAC,EAAE,WAAW,CAAA;CACvB;AAGD,UAAU,gBAAiB,SAAQ,kBAAkB;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,MAAM,CAAC,EAAE,KAAK,CAAA;CACjB;AAGD,UAAU,gBAAiB,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,SAAS,CAAC,EAAE,KAAK,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,GAAG,gBAAgB,CAAA;AAE3E;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACtC,KAAK,EAAE,yBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CA8HxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAU,sIAYzC,4BAA4B,KAAG,OAAO,CAAC,aAAa,CAsGtD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractAudioData.d.ts","sourceRoot":"","sources":["../../../src/AudioAnalysis/extractAudioData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAK9D,eAAO,MAAM,gBAAgB,GAAU,OAAO,uBAAuB,iBAWpE,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @experimental This feature is experimental and currently only available on Android.
|
|
3
|
+
* The API may change in future versions.
|
|
4
|
+
*/
|
|
5
|
+
import { ExtractMelSpectrogramOptions, MelSpectrogram } from './AudioAnalysis.types';
|
|
6
|
+
/**
|
|
7
|
+
* Maximum duration in milliseconds that extractMelSpectrogram will process in a single call.
|
|
8
|
+
* The C++ core requires the entire trimmed range as a contiguous float array in memory,
|
|
9
|
+
* so this bound prevents OOM on all platforms. Callers needing longer ranges can iterate
|
|
10
|
+
* in windows of this size using startTimeMs/endTimeMs.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MAX_DURATION_MS = 30000;
|
|
13
|
+
/**
|
|
14
|
+
* Extracts a mel spectrogram from audio data
|
|
15
|
+
*
|
|
16
|
+
* @experimental This feature is experimental.
|
|
17
|
+
* Uses shared C++ implementation on all platforms (native on iOS/Android, WASM on web).
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractMelSpectrogram(options: ExtractMelSpectrogramOptions): Promise<MelSpectrogram>;
|
|
20
|
+
//# sourceMappingURL=extractMelSpectrogram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractMelSpectrogram.d.ts","sourceRoot":"","sources":["../../../src/AudioAnalysis/extractMelSpectrogram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,4BAA4B,EAC5B,cAAc,EACjB,MAAM,uBAAuB,CAAA;AAQ9B;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAS,CAAA;AAErC;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACvC,OAAO,EAAE,4BAA4B,GACtC,OAAO,CAAC,cAAc,CAAC,CAyGzB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PreviewOptions, AudioAnalysis } from './AudioAnalysis.types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a simplified preview of the audio waveform for quick visualization.
|
|
4
|
+
* Ideal for UI rendering with a specified number of points.
|
|
5
|
+
*
|
|
6
|
+
* @param options - The options for the preview, including file URI and time range.
|
|
7
|
+
* @returns A promise that resolves to the audio preview data.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractPreview({ fileUri, numberOfPoints, startTimeMs, endTimeMs, // First 30 seconds
|
|
10
|
+
decodingOptions, logger, }: PreviewOptions): Promise<AudioAnalysis>;
|
|
11
|
+
//# sourceMappingURL=extractPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractPreview.d.ts","sourceRoot":"","sources":["../../../src/AudioAnalysis/extractPreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrE;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,EACjC,OAAO,EACP,cAAoB,EACpB,WAAe,EACf,SAAiB,EAAE,mBAAmB;AACtC,eAAe,EACf,MAAM,GACT,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBzC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ExtractWaveformProps {
|
|
2
|
+
fileUri: string;
|
|
3
|
+
numberOfSamples: number;
|
|
4
|
+
offset?: number;
|
|
5
|
+
length?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const extractWaveform: ({ fileUri, numberOfSamples, offset, length, }: ExtractWaveformProps) => Promise<unknown>;
|
|
8
|
+
//# sourceMappingURL=extractWaveform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractWaveform.d.ts","sourceRoot":"","sources":["../../../src/AudioAnalysis/extractWaveform.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AACD,eAAO,MAAM,eAAe,GAAU,+CAKnC,oBAAoB,KAAG,OAAO,CAAC,OAAO,CAQxC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialise the WASM streaming processor. Call once before computeMelFrame().
|
|
3
|
+
* Re-initialises only when config changes.
|
|
4
|
+
*/
|
|
5
|
+
export declare function initMelStreamingWasm(sampleRate: number, nMels?: number, fftLength?: number, windowSizeSamples?: number, hopLengthSamples?: number, fMin?: number, fMax?: number): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Compute a single mel spectrogram frame from raw PCM samples via WASM C++.
|
|
8
|
+
* Returns null if not initialised or on error.
|
|
9
|
+
*/
|
|
10
|
+
export declare function computeMelFrameWasm(samples: Float32Array): number[] | null;
|
|
11
|
+
/**
|
|
12
|
+
* Computes a mel spectrogram via the WASM-compiled C++ implementation.
|
|
13
|
+
* Lazy-loads the WASM module on first call.
|
|
14
|
+
*/
|
|
15
|
+
export declare function computeMelSpectrogramWasm(audioData: Float32Array, sampleRate: number, nMels: number, windowSizeSamples: number, hopLengthSamples: number, fMin: number, fMax: number, windowType: 'hann' | 'hamming', normalize: boolean, logScale: boolean): Promise<number[][]>;
|
|
16
|
+
//# sourceMappingURL=melSpectrogramWasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"melSpectrogramWasm.d.ts","sourceRoot":"","sources":["../../../src/AudioAnalysis/melSpectrogramWasm.ts"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,wBAAsB,oBAAoB,CACtC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAM,EACX,SAAS,SAAO,EAChB,iBAAiB,SAAM,EACvB,gBAAgB,SAAM,EACtB,IAAI,SAAI,EACR,IAAI,SAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,IAAI,CA4B1E;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC3C,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAgErB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { AudioDevice, DeviceDisconnectionBehavior, ConsoleLike } from './AudioStudio.types';
|
|
2
|
+
/**
|
|
3
|
+
* Class that provides a cross-platform API for managing audio input devices
|
|
4
|
+
*
|
|
5
|
+
* EVENT API SPECIFICATION:
|
|
6
|
+
* ========================
|
|
7
|
+
*
|
|
8
|
+
* Device Events (deviceChangedEvent):
|
|
9
|
+
* ```
|
|
10
|
+
* {
|
|
11
|
+
* type: "deviceConnected" | "deviceDisconnected",
|
|
12
|
+
* deviceId: string
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Recording Interruption Events (recordingInterruptedEvent):
|
|
17
|
+
* ```
|
|
18
|
+
* {
|
|
19
|
+
* reason: "userPaused" | "userResumed" | "audioFocusLoss" | "audioFocusGain" |
|
|
20
|
+
* "deviceFallback" | "deviceSwitchFailed" | "phoneCall" | "phoneCallEnded",
|
|
21
|
+
* isPaused: boolean,
|
|
22
|
+
* timestamp: number
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* NOTE: Device events use "type" field, interruption events use "reason" field.
|
|
27
|
+
* This is intentional to distinguish between different event categories.
|
|
28
|
+
*/
|
|
29
|
+
export declare class AudioDeviceManager {
|
|
30
|
+
private eventEmitter;
|
|
31
|
+
private currentDeviceId;
|
|
32
|
+
private availableDevices;
|
|
33
|
+
private deviceChangeListeners;
|
|
34
|
+
private webDeviceChangeHandler?;
|
|
35
|
+
private lastRefreshTime;
|
|
36
|
+
private refreshInProgress;
|
|
37
|
+
private refreshDebounceMs;
|
|
38
|
+
private logger?;
|
|
39
|
+
private temporarilyDisconnectedDevices;
|
|
40
|
+
private disconnectionTimeouts;
|
|
41
|
+
private readonly DISCONNECTION_TIMEOUT_MS;
|
|
42
|
+
constructor(options?: {
|
|
43
|
+
logger?: ConsoleLike;
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* Set up device event listeners for the current platform
|
|
47
|
+
*/
|
|
48
|
+
private setupDeviceEventListeners;
|
|
49
|
+
/**
|
|
50
|
+
* Set up native device event listener for iOS/Android
|
|
51
|
+
*/
|
|
52
|
+
private setupNativeDeviceEventListener;
|
|
53
|
+
/**
|
|
54
|
+
* Initialize the device manager with a logger
|
|
55
|
+
* @param logger A logger instance that implements the ConsoleLike interface
|
|
56
|
+
* @returns The manager instance for chaining
|
|
57
|
+
*/
|
|
58
|
+
initWithLogger(logger: ConsoleLike): AudioDeviceManager;
|
|
59
|
+
/**
|
|
60
|
+
* Set the logger instance
|
|
61
|
+
* @param logger A logger instance that implements the ConsoleLike interface
|
|
62
|
+
*/
|
|
63
|
+
setLogger(logger: ConsoleLike): void;
|
|
64
|
+
/**
|
|
65
|
+
* Initialize or reinitialize device detection
|
|
66
|
+
* Useful for restarting device detection if initial setup failed
|
|
67
|
+
*/
|
|
68
|
+
initializeDeviceDetection(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get the current logger instance
|
|
71
|
+
* @returns The logger instance or undefined if not set
|
|
72
|
+
*/
|
|
73
|
+
getLogger(): ConsoleLike | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Get all available audio input devices
|
|
76
|
+
* @param options Optional settings to force refresh the device list. Can include a refresh flag.
|
|
77
|
+
* @returns Promise resolving to an array of audio devices conforming to AudioDevice interface
|
|
78
|
+
*/
|
|
79
|
+
getAvailableDevices(options?: {
|
|
80
|
+
refresh?: boolean;
|
|
81
|
+
}): Promise<AudioDevice[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Get the currently selected audio input device
|
|
84
|
+
* @returns Promise resolving to the current device (conforming to AudioDevice) or null
|
|
85
|
+
*/
|
|
86
|
+
getCurrentDevice(): Promise<AudioDevice | null>;
|
|
87
|
+
/**
|
|
88
|
+
* Select a specific audio input device for recording
|
|
89
|
+
* @param deviceId The ID of the device to select
|
|
90
|
+
* @returns Promise resolving to a boolean indicating success
|
|
91
|
+
*/
|
|
92
|
+
selectDevice(deviceId: string): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Reset to the default audio input device
|
|
95
|
+
* @returns Promise resolving to a boolean indicating success
|
|
96
|
+
*/
|
|
97
|
+
resetToDefaultDevice(): Promise<boolean>;
|
|
98
|
+
/**
|
|
99
|
+
* Register a listener for device changes
|
|
100
|
+
* @param listener Function to call when devices change (receives AudioDevice[])
|
|
101
|
+
* @returns Function to remove the listener
|
|
102
|
+
*/
|
|
103
|
+
addDeviceChangeListener(listener: (devices: AudioDevice[]) => void): () => void;
|
|
104
|
+
/**
|
|
105
|
+
* Mark a device as temporarily disconnected (for UI filtering)
|
|
106
|
+
* @param deviceId The ID of the device that was disconnected
|
|
107
|
+
* @param notify Whether to notify listeners immediately (default: true)
|
|
108
|
+
*/
|
|
109
|
+
markDeviceAsDisconnected(deviceId: string, notify?: boolean): void;
|
|
110
|
+
/**
|
|
111
|
+
* Mark a device as reconnected (remove from disconnected set)
|
|
112
|
+
* @param deviceId The ID of the device that was reconnected
|
|
113
|
+
*/
|
|
114
|
+
markDeviceAsReconnected(deviceId: string): void;
|
|
115
|
+
/**
|
|
116
|
+
* Get filtered device list (excluding temporarily disconnected devices)
|
|
117
|
+
* @returns Array of available devices excluding temporarily disconnected ones
|
|
118
|
+
*/
|
|
119
|
+
private getFilteredDevices;
|
|
120
|
+
/**
|
|
121
|
+
* Get the raw device list (including temporarily disconnected devices)
|
|
122
|
+
* @returns Array of all available devices from native layer
|
|
123
|
+
*/
|
|
124
|
+
getRawDevices(): AudioDevice[];
|
|
125
|
+
/**
|
|
126
|
+
* Get the IDs of temporarily disconnected devices
|
|
127
|
+
* @returns Set of device IDs that are temporarily hidden from UI
|
|
128
|
+
*/
|
|
129
|
+
getTemporarilyDisconnectedDeviceIds(): ReadonlySet<string>;
|
|
130
|
+
/**
|
|
131
|
+
* Clean up timeouts and listeners (useful for testing or cleanup)
|
|
132
|
+
*/
|
|
133
|
+
cleanup(): void;
|
|
134
|
+
/**
|
|
135
|
+
* Force refresh devices without debouncing (for device events)
|
|
136
|
+
* @returns Promise resolving to the updated device list (AudioDevice[])
|
|
137
|
+
*/
|
|
138
|
+
forceRefreshDevices(): Promise<AudioDevice[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Refresh the list of available devices with debouncing and notify listeners.
|
|
141
|
+
* @returns Promise resolving to the updated device list (AudioDevice[])
|
|
142
|
+
*/
|
|
143
|
+
refreshDevices(): Promise<AudioDevice[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Get audio input devices using the Web Audio API
|
|
146
|
+
* @returns Promise resolving to an array of AudioDevice objects
|
|
147
|
+
*/
|
|
148
|
+
private getWebAudioDevices;
|
|
149
|
+
/**
|
|
150
|
+
* Check the current microphone permission status
|
|
151
|
+
* @returns Permission state ('prompt', 'granted', or 'denied')
|
|
152
|
+
*/
|
|
153
|
+
private checkMicrophonePermission;
|
|
154
|
+
/**
|
|
155
|
+
* Setup listener for device changes in web environment
|
|
156
|
+
*/
|
|
157
|
+
private setupWebDeviceChangeListener;
|
|
158
|
+
/**
|
|
159
|
+
* Check if the current browser is Safari or iOS WebKit
|
|
160
|
+
*/
|
|
161
|
+
private isSafariOrIOS;
|
|
162
|
+
/**
|
|
163
|
+
* Create enhanced device information for Safari and privacy-restricted browsers
|
|
164
|
+
* @param devices Array of AudioDevice objects, potentially unlabeled
|
|
165
|
+
* @returns Array of enhanced AudioDevice objects
|
|
166
|
+
*/
|
|
167
|
+
private enhanceDevicesForSafari;
|
|
168
|
+
/**
|
|
169
|
+
* Map a Web MediaDeviceInfo to our AudioDevice format
|
|
170
|
+
* @param device The MediaDeviceInfo object from the browser
|
|
171
|
+
* @returns An object conforming to the AudioDevice interface
|
|
172
|
+
*/
|
|
173
|
+
private mapWebDeviceToAudioDevice;
|
|
174
|
+
/**
|
|
175
|
+
* Try to infer the device type from its name
|
|
176
|
+
* @param deviceName The label of the device
|
|
177
|
+
* @returns A string representing the inferred device type
|
|
178
|
+
*/
|
|
179
|
+
private inferDeviceType;
|
|
180
|
+
/**
|
|
181
|
+
* Notify all registered listeners about device changes.
|
|
182
|
+
*/
|
|
183
|
+
notifyListeners(): void;
|
|
184
|
+
}
|
|
185
|
+
export declare const audioDeviceManager: AudioDeviceManager;
|
|
186
|
+
export { DeviceDisconnectionBehavior };
|
|
187
|
+
//# sourceMappingURL=AudioDeviceManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioDeviceManager.d.ts","sourceRoot":"","sources":["../../src/AudioDeviceManager.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,WAAW,EAEX,2BAA2B,EAC3B,WAAW,EACd,MAAM,qBAAqB,CAAA;AA0C5B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,qBAAqB,CAChB;IACb,OAAO,CAAC,sBAAsB,CAAC,CAAY;IAC3C,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,MAAM,CAAC,CAAa;IAG5B,OAAO,CAAC,8BAA8B,CAAyB;IAC/D,OAAO,CAAC,qBAAqB,CAChB;IACb,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAO;gBAEpC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE;IAQ9C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAqCtC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB;IAKvD;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW;IAI7B;;;OAGG;IACH,yBAAyB,IAAI,IAAI;IAkBjC;;;OAGG;IACH,SAAS,IAAI,WAAW,GAAG,SAAS;IAIpC;;;;OAIG;IACG,mBAAmB,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,CAAC,EAAE,OAAO,CAAA;KACpB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwB1B;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA6BrD;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BtD;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB9C;;;;OAIG;IACH,uBAAuB,CACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,GAC3C,MAAM,IAAI;IAcb;;;;OAIG;IACH,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,IAAI;IAiCxE;;;OAGG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgB/C;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;OAGG;IACH,aAAa,IAAI,WAAW,EAAE;IAI9B;;;OAGG;IACH,mCAAmC,IAAI,WAAW,CAAC,MAAM,CAAC;IAI1D;;OAEG;IACH,OAAO,IAAI,IAAI;IAuBf;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAqBnD;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAuC9C;;;OAGG;YACW,kBAAkB;IAqEhC;;;OAGG;YACW,yBAAyB;IAmBvC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAmCpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAqC/B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,eAAe,IAAI,IAAI;CAiB1B;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAA;AAE1D,OAAO,EAAE,2BAA2B,EAAE,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { UseAudioRecorderState } from './AudioStudio.types';
|
|
3
|
+
import { UseAudioRecorderProps } from './useAudioRecorder';
|
|
4
|
+
interface AudioRecorderProviderProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
config?: UseAudioRecorderProps;
|
|
7
|
+
}
|
|
8
|
+
export declare const AudioRecorderProvider: React.FC<AudioRecorderProviderProps>;
|
|
9
|
+
export declare const useSharedAudioRecorder: () => UseAudioRecorderState;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=AudioRecorder.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioRecorder.provider.d.ts","sourceRoot":"","sources":["../../src/AudioRecorder.provider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAoB,MAAM,oBAAoB,CAAA;AA2B5E,UAAU,0BAA0B;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE,qBAAqB,CAAA;CACjC;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAUtE,CAAA;AAED,eAAO,MAAM,sBAAsB,6BAQlC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioStudio.native.d.ts","sourceRoot":"","sources":["../../src/AudioStudio.native.ts"],"names":[],"mappings":";AAKA,wBAAiD"}
|