react-native-audio-api 0.8.3-nightly-ea268f4-20251006 → 0.8.3
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/README.md +39 -40
- package/RNAudioAPI.podspec +12 -17
- package/android/build.gradle +4 -44
- package/android/src/main/cpp/audioapi/CMakeLists.txt +0 -65
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +1 -29
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +0 -14
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +1 -7
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -6
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +1 -11
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +2 -15
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +18 -53
- package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +149 -0
- package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +76 -0
- package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +120 -0
- package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +67 -0
- package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +142 -0
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +46 -6
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +6 -70
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +66 -10
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +91 -17
- package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +86 -0
- package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +56 -0
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +6 -362
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +241 -29
- package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +89 -0
- package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +27 -0
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +50 -6
- package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +65 -0
- package/common/cpp/audioapi/HostObjects/{sources/RecorderAdapterNodeHostObject.h → RecorderAdapterNodeHostObject.h} +2 -1
- package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +30 -0
- package/common/cpp/audioapi/core/AudioContext.cpp +2 -3
- package/common/cpp/audioapi/core/AudioContext.h +1 -2
- package/common/cpp/audioapi/core/AudioNode.h +1 -1
- package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
- package/common/cpp/audioapi/core/AudioParam.h +1 -1
- package/common/cpp/audioapi/core/{utils/AudioParamEventQueue.cpp → AudioParamEventQueue.cpp} +7 -13
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +3 -47
- package/common/cpp/audioapi/core/BaseAudioContext.h +4 -13
- package/common/cpp/audioapi/core/{utils/Constants.h → Constants.h} +0 -5
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +3 -4
- package/common/cpp/audioapi/core/OfflineAudioContext.h +1 -2
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +1 -1
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +10 -47
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +3 -18
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +12 -94
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -8
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +42 -33
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +6 -1
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.h +8 -0
- package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -2
- package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +48 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +1 -14
- package/common/cpp/audioapi/jsi/JsiHostObject.h +12 -6
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +0 -49
- package/common/cpp/audioapi/jsi/JsiPromise.h +1 -29
- package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
- package/common/cpp/test/CMakeLists.txt +3 -11
- package/common/cpp/test/GainTest.cpp +1 -2
- package/common/cpp/test/OscillatorTest.cpp +1 -2
- package/ios/audioapi/ios/AudioAPIModule.mm +5 -32
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -2
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +7 -0
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +12 -0
- package/lib/commonjs/api.js +2 -36
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +0 -8
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +6 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +0 -15
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +1 -10
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +11 -66
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/OfflineAudioContext.js +2 -11
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/core/OscillatorNode.js +0 -6
- package/lib/commonjs/core/OscillatorNode.js.map +1 -1
- package/lib/commonjs/hooks/{useSystemVolume.js → useSytemVolume.js} +1 -1
- package/lib/commonjs/hooks/useSytemVolume.js.map +1 -0
- package/lib/commonjs/utils/index.js +0 -9
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +0 -4
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/web-core/OfflineAudioContext.js +0 -4
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/api.js +2 -6
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +0 -1
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +6 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +0 -15
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +1 -10
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioScheduledSourceNode.js +4 -4
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +11 -66
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/OfflineAudioContext.js +2 -11
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/core/OscillatorNode.js +0 -6
- package/lib/module/core/OscillatorNode.js.map +1 -1
- package/lib/module/hooks/{useSystemVolume.js → useSytemVolume.js} +1 -1
- package/lib/module/hooks/useSytemVolume.js.map +1 -0
- package/lib/module/utils/index.js +0 -8
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +0 -4
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/web-core/OfflineAudioContext.js +0 -4
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/api.d.ts +4 -8
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +0 -1
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +0 -4
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +0 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +11 -19
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts +0 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/OscillatorNode.d.ts +0 -3
- package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +0 -2
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/hooks/{useSystemVolume.d.ts → useSytemVolume.d.ts} +1 -1
- package/lib/typescript/hooks/useSytemVolume.d.ts.map +1 -0
- package/lib/typescript/interfaces.d.ts +3 -21
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +1 -2
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +0 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +2 -4
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +0 -2
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +2 -4
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/api.ts +3 -12
- package/src/api.web.ts +0 -1
- package/src/core/AudioBufferBaseSourceNode.ts +9 -9
- package/src/core/AudioBufferQueueSourceNode.ts +9 -1
- package/src/core/AudioBufferSourceNode.ts +0 -28
- package/src/core/AudioContext.ts +1 -12
- package/src/core/AudioScheduledSourceNode.ts +5 -5
- package/src/core/BaseAudioContext.ts +13 -149
- package/src/core/OfflineAudioContext.ts +2 -18
- package/src/core/OscillatorNode.ts +0 -11
- package/src/events/types.ts +0 -2
- package/src/interfaces.ts +5 -59
- package/src/types.ts +1 -3
- package/src/utils/index.ts +0 -21
- package/src/web-core/AudioBufferSourceNode.tsx +1 -1
- package/src/web-core/AudioContext.tsx +2 -7
- package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
- package/src/web-core/BaseAudioContext.tsx +0 -2
- package/src/web-core/OfflineAudioContext.tsx +2 -7
- package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +0 -36
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +0 -24
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +0 -57
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +0 -105
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +0 -70
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +0 -18
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +0 -18
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +0 -148
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +0 -37
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +0 -92
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +0 -29
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +0 -20
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +0 -19
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +0 -21
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +0 -21
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +0 -41
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +0 -28
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +0 -69
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +0 -33
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +0 -73
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +0 -29
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +0 -94
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +0 -46
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +0 -60
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +0 -25
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +0 -152
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +0 -37
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +0 -52
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +0 -25
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +0 -19
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +0 -21
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +0 -55
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +0 -27
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +0 -22
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +0 -28
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +0 -18
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +0 -87
- package/common/cpp/audioapi/core/effects/WorkletNode.h +0 -65
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +0 -89
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +0 -52
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +0 -51
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +0 -26
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +0 -82
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +0 -47
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +0 -52
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +0 -9
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +0 -73
- package/common/cpp/audioapi/utils/ThreadPool.hpp +0 -104
- package/common/cpp/test/AudioParamTest.cpp +0 -204
- package/lib/commonjs/core/ConstantSourceNode.js +0 -17
- package/lib/commonjs/core/ConstantSourceNode.js.map +0 -1
- package/lib/commonjs/core/WorkletNode.js +0 -11
- package/lib/commonjs/core/WorkletNode.js.map +0 -1
- package/lib/commonjs/core/WorkletProcessingNode.js +0 -11
- package/lib/commonjs/core/WorkletProcessingNode.js.map +0 -1
- package/lib/commonjs/core/WorkletSourceNode.js +0 -11
- package/lib/commonjs/core/WorkletSourceNode.js.map +0 -1
- package/lib/commonjs/hooks/useSystemVolume.js.map +0 -1
- package/lib/commonjs/web-core/ConstantSourceNode.js +0 -17
- package/lib/commonjs/web-core/ConstantSourceNode.js.map +0 -1
- package/lib/module/core/ConstantSourceNode.js +0 -11
- package/lib/module/core/ConstantSourceNode.js.map +0 -1
- package/lib/module/core/WorkletNode.js +0 -5
- package/lib/module/core/WorkletNode.js.map +0 -1
- package/lib/module/core/WorkletProcessingNode.js +0 -5
- package/lib/module/core/WorkletProcessingNode.js.map +0 -1
- package/lib/module/core/WorkletSourceNode.js +0 -5
- package/lib/module/core/WorkletSourceNode.js.map +0 -1
- package/lib/module/hooks/useSystemVolume.js.map +0 -1
- package/lib/module/web-core/ConstantSourceNode.js +0 -11
- package/lib/module/web-core/ConstantSourceNode.js.map +0 -1
- package/lib/typescript/core/ConstantSourceNode.d.ts +0 -9
- package/lib/typescript/core/ConstantSourceNode.d.ts.map +0 -1
- package/lib/typescript/core/WorkletNode.d.ts +0 -4
- package/lib/typescript/core/WorkletNode.d.ts.map +0 -1
- package/lib/typescript/core/WorkletProcessingNode.d.ts +0 -4
- package/lib/typescript/core/WorkletProcessingNode.d.ts.map +0 -1
- package/lib/typescript/core/WorkletSourceNode.d.ts +0 -4
- package/lib/typescript/core/WorkletSourceNode.d.ts.map +0 -1
- package/lib/typescript/hooks/useSystemVolume.d.ts.map +0 -1
- package/lib/typescript/web-core/ConstantSourceNode.d.ts +0 -8
- package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +0 -1
- package/src/core/ConstantSourceNode.ts +0 -13
- package/src/core/WorkletNode.ts +0 -3
- package/src/core/WorkletProcessingNode.ts +0 -3
- package/src/core/WorkletSourceNode.ts +0 -3
- package/src/web-core/ConstantSourceNode.tsx +0 -12
- /package/common/cpp/audioapi/HostObjects/{destinations/AudioDestinationNodeHostObject.h → AudioDestinationNodeHostObject.h} +0 -0
- /package/common/cpp/audioapi/HostObjects/{effects/PeriodicWaveHostObject.h → PeriodicWaveHostObject.h} +0 -0
- /package/common/cpp/audioapi/core/{utils/AudioParamEventQueue.h → AudioParamEventQueue.h} +0 -0
- /package/src/hooks/{useSystemVolume.ts → useSytemVolume.ts} +0 -0
package/README.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/react-native-audio-api)
|
|
6
6
|
[](https://www.npmjs.com/package/react-native-audio-api?activeTab=versions)
|
|
7
|
-
<br />
|
|
8
7
|
[](https://github.com/software-mansion/react-native-audio-api/actions/workflows/ci.yml)
|
|
8
|
+
[](https://github.com/software-mansion/react-native-audio-api/actions/workflows/npm-publish-nightly.yml)
|
|
9
9
|
[](https://github.com/software-mansion/react-native-audio-api/actions/workflows/tests.yml)
|
|
10
10
|
|
|
11
11
|
`react-native-audio-api` provides system for controlling audio in React Native environment compatible with Web Audio API specification,
|
|
@@ -17,56 +17,55 @@ check out the [Getting Started](https://docs.swmansion.com/react-native-audio-ap
|
|
|
17
17
|
|
|
18
18
|
## Roadmap
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.1.0)</sub> <br />
|
|
21
|
+
**Sound synthesis and system audio** 🐣 <br />
|
|
22
|
+
Access to devices audio engines and threads, basic nodes for sound synthesis, simple effects and audio graph implementation
|
|
23
|
+
<br />
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.2.0)</sub> <br />
|
|
26
|
+
**Graph Processing** 🛎️ <br />
|
|
27
|
+
Support for multi-channel audio processing, audio-graph route optimizations, improved react-native layer for managing audio nodes
|
|
28
|
+
<br />
|
|
23
29
|
|
|
24
|
-
-
|
|
25
|
-
|
|
30
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.3.2)</sub> <br />
|
|
31
|
+
**Audio Files** 🎸 <br />
|
|
32
|
+
Support for local and remote audio file resources: MP3, WAV, FLAC.
|
|
33
|
+
<br />
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.4.0)</sub> <br />
|
|
36
|
+
**Analyser Node** 🌊 <br />
|
|
37
|
+
Ability to draw, animate or simply debug audio data in time or frequency domain.
|
|
38
|
+
<br />
|
|
28
39
|
|
|
29
|
-
-
|
|
30
|
-
|
|
40
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.5.0)</sub> <br />
|
|
41
|
+
**Pitch correction, extending the web** 💥 <br />
|
|
42
|
+
Ability to modify playback speed without affecting pitch of the sound
|
|
43
|
+
<br />
|
|
31
44
|
|
|
32
|
-
-
|
|
33
|
-
|
|
45
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.6.0)</sub> <br />
|
|
46
|
+
**System configuration** 🛠️ <br />
|
|
47
|
+
Full control of system audio settings, remote controls, lock screen integration and most importantly configurable background modes
|
|
34
48
|
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
**Connect audio param** 🤞 <br />
|
|
50
|
+
Ability to connect Audio nodes to audio params, which will allow for powerful and efficient modulation of audio parameters, creating effects like tremolo, vibrato or complex envelope followers. <br />
|
|
37
51
|
|
|
38
|
-
-
|
|
39
|
-
|
|
52
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.7.0)</sub> <br />
|
|
53
|
+
**Microphone support** 🎙️ <br />
|
|
54
|
+
Grab audio data from device microphone or connected device, connect it to the audio graph or stream through the internet <br />
|
|
40
55
|
|
|
41
|
-
|
|
42
|
-
|
|
56
|
+
**Custom Audio Processor** ⚙️ <br />
|
|
57
|
+
Write your own processing AudioNode <br />
|
|
43
58
|
|
|
44
|
-
-
|
|
45
|
-
|
|
59
|
+
- <sub>[](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.8.0)</sub> <br />
|
|
60
|
+
**Decoding support for m4a/mp4/aac/ogg/opus** 📁 <br />
|
|
61
|
+
Ability to decode m4a/mp4/aac/ogg/opus audio files, allowing for playback of these formats in the audio graph. <br />
|
|
46
62
|
|
|
47
|
-
|
|
48
|
-
|
|
63
|
+
**HLS streaming support** 🌊 <br />
|
|
64
|
+
Ability to stream audio from HLS sources, allowing for playback of live audio streams or pre-recorded audio files. <br />
|
|
49
65
|
|
|
50
|
-
- **JS Audio Worklets
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.8.0"><img src="https://img.shields.io/badge/Released_in-0.8.0-green" /></a>
|
|
54
|
-
|
|
55
|
-
- **Decoding support for m4a/mp4/aac/ogg/opus 📁** <br />
|
|
56
|
-
Decode m4a/mp4/aac/ogg/opus audio files, allowing for playback of these formats in the audio graph.
|
|
57
|
-
|
|
58
|
-
- **HLS streaming support** 🌊 <br />
|
|
59
|
-
Stream audio from HLS sources, allowing for playback of live audio streams or pre-recorded audio files.
|
|
60
|
-
|
|
61
|
-
### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.7.0"><img src="https://img.shields.io/badge/Released_in-0.7.0-green" /></a>
|
|
62
|
-
|
|
63
|
-
- **Microphone support 🎙️** <br />
|
|
64
|
-
Grab audio data from device microphone or connected device, connect it to the audio graph or stream through the internet.
|
|
65
|
-
|
|
66
|
-
- **Custom Audio Processor ⚙️** <br />
|
|
67
|
-
Write your own processing AudioNode.
|
|
68
|
-
|
|
69
|
-
See more in [Changelog](./ghdocs/changelog.md)
|
|
66
|
+
- **JS Audio Worklets** 🐎 <br />
|
|
67
|
+
Ability to run JS functions connected to the audio graph running on audio thread allowing for full customization of what happens to the audio signal.
|
|
68
|
+
<br />
|
|
70
69
|
|
|
71
70
|
## Web Audio API Specification Coverage
|
|
72
71
|
|
package/RNAudioAPI.podspec
CHANGED
|
@@ -4,7 +4,7 @@ package_json = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
|
4
4
|
|
|
5
5
|
$new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
|
|
6
6
|
|
|
7
|
-
folly_flags = "-DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32"
|
|
7
|
+
folly_flags = "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32"
|
|
8
8
|
fabric_flags = $new_arch_enabled ? '-DRCT_NEW_ARCH_ENABLED' : ''
|
|
9
9
|
version_flag = "-DAUDIOAPI_VERSION=#{package_json['version']}"
|
|
10
10
|
|
|
@@ -20,12 +20,12 @@ Pod::Spec.new do |s|
|
|
|
20
20
|
s.source = { :git => "https://github.com/software-mansion/react-native-audio-api.git", :tag => "#{s.version}" }
|
|
21
21
|
|
|
22
22
|
s.subspec "audioapi" do |ss|
|
|
23
|
-
ss.source_files = "common/cpp/audioapi/**/*.{cpp,c,h
|
|
23
|
+
ss.source_files = "common/cpp/audioapi/**/*.{cpp,c,h}"
|
|
24
24
|
ss.header_dir = "audioapi"
|
|
25
25
|
ss.header_mappings_dir = "common/cpp/audioapi"
|
|
26
26
|
|
|
27
27
|
ss.subspec "ios" do |sss|
|
|
28
|
-
sss.source_files = "ios/audioapi/**/*.{mm,h,m
|
|
28
|
+
sss.source_files = "ios/audioapi/**/*.{mm,h,m}"
|
|
29
29
|
sss.header_dir = "audioapi"
|
|
30
30
|
sss.header_mappings_dir = "ios/audioapi"
|
|
31
31
|
end
|
|
@@ -42,18 +42,16 @@ Pod::Spec.new do |s|
|
|
|
42
42
|
# Assumes Pods dir is nested under ios project dir
|
|
43
43
|
ios_dir = File.join(Pod::Config.instance.project_pods_root, '..')
|
|
44
44
|
rn_audio_dir_relative = Pathname.new(__dir__).relative_path_from(ios_dir).to_s
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
external_dir = File.join(__dir__, "common/cpp/audioapi/external")
|
|
50
|
-
|
|
45
|
+
external_dir = "common/cpp/audioapi/external"
|
|
46
|
+
lib_dir = "$(PROJECT_DIR)/#{rn_audio_dir_relative}/#{external_dir}/$(PLATFORM_NAME)"
|
|
47
|
+
|
|
51
48
|
s.ios.vendored_frameworks = [
|
|
52
49
|
'common/cpp/audioapi/external/libavcodec.xcframework',
|
|
53
50
|
'common/cpp/audioapi/external/libavformat.xcframework',
|
|
54
51
|
'common/cpp/audioapi/external/libavutil.xcframework',
|
|
55
52
|
'common/cpp/audioapi/external/libswresample.xcframework'
|
|
56
53
|
]
|
|
54
|
+
|
|
57
55
|
s.pod_target_xcconfig = {
|
|
58
56
|
"USE_HEADERMAP" => "YES",
|
|
59
57
|
"CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
|
|
@@ -61,15 +59,12 @@ s.pod_target_xcconfig = {
|
|
|
61
59
|
"HEADER_SEARCH_PATHS" => %W[
|
|
62
60
|
$(PODS_TARGET_SRCROOT)/common/cpp
|
|
63
61
|
$(PODS_TARGET_SRCROOT)/ios
|
|
64
|
-
$(
|
|
65
|
-
$(
|
|
66
|
-
$(PODS_TARGET_SRCROOT)/#{
|
|
67
|
-
$(PODS_TARGET_SRCROOT)
|
|
68
|
-
$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/vorbis
|
|
69
|
-
$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/ffmpeg_include
|
|
62
|
+
$(PODS_TARGET_SRCROOT)/#{external_dir}/include
|
|
63
|
+
$(PODS_TARGET_SRCROOT)/#{external_dir}/include/opus
|
|
64
|
+
$(PODS_TARGET_SRCROOT)/#{external_dir}/include/vorbis
|
|
65
|
+
$(PODS_TARGET_SRCROOT)/common/cpp/audioapi/external/ffmpeg_include
|
|
70
66
|
].join(" "),
|
|
71
|
-
'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}"
|
|
72
|
-
'OTHER_CPLUSPLUSFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}"
|
|
67
|
+
'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}"
|
|
73
68
|
}
|
|
74
69
|
|
|
75
70
|
s.user_target_xcconfig = {
|
package/android/build.gradle
CHANGED
|
@@ -65,15 +65,6 @@ def resolveReactNativeDirectory() {
|
|
|
65
65
|
)
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
def resolveReactNativeWorkletsDirectory() {
|
|
69
|
-
def rnWorklets = rootProject.subprojects.find { it.name == 'react-native-worklets' }
|
|
70
|
-
if (rnWorklets != null) {
|
|
71
|
-
return rnWorklets.projectDir
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
68
|
def toPlatformFileString(String path) {
|
|
78
69
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
79
70
|
path = path.replace(File.separatorChar, '/' as char)
|
|
@@ -91,8 +82,6 @@ static def supportsNamespace() {
|
|
|
91
82
|
}
|
|
92
83
|
|
|
93
84
|
def reactNativeRootDir = resolveReactNativeDirectory()
|
|
94
|
-
def reactNativeWorkletsRootDir = resolveReactNativeWorkletsDirectory()
|
|
95
|
-
def isWorkletsAvailable = reactNativeWorkletsRootDir != null
|
|
96
85
|
|
|
97
86
|
def reactProperties = new Properties()
|
|
98
87
|
file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
|
|
@@ -123,30 +112,17 @@ android {
|
|
|
123
112
|
defaultConfig {
|
|
124
113
|
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
125
114
|
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
126
|
-
|
|
127
115
|
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
128
|
-
buildConfigField "boolean", "RN_AUDIO_API_ENABLE_WORKLETS", "${isWorkletsAvailable}"
|
|
129
|
-
|
|
130
|
-
|
|
131
116
|
|
|
132
117
|
externalNativeBuild {
|
|
133
118
|
cmake {
|
|
134
119
|
abiFilters (*reactNativeArchitectures())
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
"-DANDROID_TOOLCHAIN=clang",
|
|
140
|
-
"-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}",
|
|
141
|
-
"-DRN_AUDIO_API_WORKLETS_ENABLED=${isWorkletsAvailable}",
|
|
120
|
+
arguments "-DANDROID_STL=c++_shared",
|
|
121
|
+
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
122
|
+
"-DANDROID_TOOLCHAIN=clang",
|
|
123
|
+
"-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}",
|
|
142
124
|
"-DIS_NEW_ARCHITECTURE_ENABLED=${IS_NEW_ARCHITECTURE_ENABLED}",
|
|
143
125
|
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
|
|
144
|
-
]
|
|
145
|
-
|
|
146
|
-
if (isWorkletsAvailable) {
|
|
147
|
-
cmakeArgs << "-DREACT_NATIVE_WORKLETS_DIR=${toPlatformFileString(reactNativeWorkletsRootDir.path)}"
|
|
148
|
-
}
|
|
149
|
-
arguments = cmakeArgs
|
|
150
126
|
}
|
|
151
127
|
}
|
|
152
128
|
}
|
|
@@ -249,24 +225,8 @@ dependencies {
|
|
|
249
225
|
implementation 'com.facebook.fbjni:fbjni:0.6.0'
|
|
250
226
|
implementation 'com.google.oboe:oboe:1.9.3'
|
|
251
227
|
implementation 'androidx.media:media:1.7.0'
|
|
252
|
-
|
|
253
|
-
if (isWorkletsAvailable) {
|
|
254
|
-
implementation(rootProject.subprojects.find { it.name == 'react-native-worklets' })
|
|
255
|
-
}
|
|
256
228
|
}
|
|
257
229
|
|
|
258
|
-
if (isWorkletsAvailable) {
|
|
259
|
-
// Ensure worklets is built before react-native-audio-api
|
|
260
|
-
def rnWorkletsProject = rootProject.subprojects.find { it.name == 'react-native-worklets' }
|
|
261
|
-
evaluationDependsOn(rnWorkletsProject.path)
|
|
262
|
-
|
|
263
|
-
afterEvaluate {
|
|
264
|
-
tasks.getByName("buildCMakeDebug").dependsOn(rnWorkletsProject.tasks.getByName("mergeDebugNativeLibs"))
|
|
265
|
-
tasks.getByName("buildCMakeRelWithDebInfo").dependsOn(rnWorkletsProject.tasks.getByName("mergeReleaseNativeLibs"))
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
|
|
270
230
|
def assertMinimalReactNativeVersion = task assertMinimalReactNativeVersionTask {
|
|
271
231
|
// If you change the minimal React Native version remember to update Compatibility Table in docs
|
|
272
232
|
def minimalReactNativeVersion = 76
|
|
@@ -27,12 +27,6 @@ find_package(ReactAndroid REQUIRED CONFIG)
|
|
|
27
27
|
find_package(fbjni REQUIRED CONFIG)
|
|
28
28
|
find_package(oboe REQUIRED CONFIG)
|
|
29
29
|
|
|
30
|
-
if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
|
|
31
|
-
set(BUILD_TYPE "debug")
|
|
32
|
-
else()
|
|
33
|
-
set(BUILD_TYPE "release")
|
|
34
|
-
endif()
|
|
35
|
-
|
|
36
30
|
target_include_directories(
|
|
37
31
|
react-native-audio-api
|
|
38
32
|
PRIVATE
|
|
@@ -54,69 +48,10 @@ set(LINK_LIBRARIES
|
|
|
54
48
|
oboe::oboe
|
|
55
49
|
)
|
|
56
50
|
|
|
57
|
-
set(INCLUDE_LIBRARIES
|
|
58
|
-
"${COMMON_CPP_DIR}"
|
|
59
|
-
"${ANDROID_CPP_DIR}"
|
|
60
|
-
"${INCLUDE_DIR}"
|
|
61
|
-
"${INCLUDE_DIR}/opus"
|
|
62
|
-
"${INCLUDE_DIR}/vorbis"
|
|
63
|
-
"${REACT_NATIVE_DIR}/ReactCommon"
|
|
64
|
-
"${REACT_NATIVE_DIR}/ReactCommon/jsiexecutor"
|
|
65
|
-
"${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule"
|
|
66
|
-
"${REACT_NATIVE_DIR}/ReactCommon/callinvoker"
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
if(RN_AUDIO_API_WORKLETS_ENABLED)
|
|
70
|
-
# Import the worklets library (similar to how Reanimated does it)
|
|
71
|
-
add_library(worklets SHARED IMPORTED)
|
|
72
|
-
set_target_properties(
|
|
73
|
-
worklets
|
|
74
|
-
PROPERTIES
|
|
75
|
-
IMPORTED_LOCATION
|
|
76
|
-
"${REACT_NATIVE_WORKLETS_DIR}/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libworklets.so"
|
|
77
|
-
)
|
|
78
|
-
list(APPEND INCLUDE_LIBRARIES
|
|
79
|
-
"${REACT_NATIVE_WORKLETS_DIR}/../Common/cpp"
|
|
80
|
-
"${REACT_NATIVE_WORKLETS_DIR}/src/main/cpp"
|
|
81
|
-
)
|
|
82
|
-
list(APPEND LINK_LIBRARIES worklets)
|
|
83
|
-
endif()
|
|
84
|
-
|
|
85
|
-
target_include_directories(
|
|
86
|
-
react-native-audio-api
|
|
87
|
-
PRIVATE
|
|
88
|
-
${INCLUDE_LIBRARIES}
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
92
|
-
set(RN_VERSION_LINK_LIBRARIES
|
|
93
|
-
ReactAndroid::reactnative
|
|
94
|
-
)
|
|
95
|
-
else()
|
|
96
|
-
set(RN_VERSION_LINK_LIBRARIES
|
|
97
|
-
ReactAndroid::folly_runtime
|
|
98
|
-
ReactAndroid::react_nativemodule_core
|
|
99
|
-
ReactAndroid::glog
|
|
100
|
-
ReactAndroid::reactnativejni
|
|
101
|
-
)
|
|
102
|
-
endif()
|
|
103
|
-
|
|
104
51
|
set(RN_VERSION_LINK_LIBRARIES
|
|
105
52
|
ReactAndroid::reactnative
|
|
106
53
|
)
|
|
107
54
|
|
|
108
|
-
if(RN_AUDIO_API_WORKLETS_ENABLED)
|
|
109
|
-
target_compile_definitions(
|
|
110
|
-
react-native-audio-api
|
|
111
|
-
PRIVATE RN_AUDIO_API_ENABLE_WORKLETS=1
|
|
112
|
-
)
|
|
113
|
-
else()
|
|
114
|
-
target_compile_definitions(
|
|
115
|
-
react-native-audio-api
|
|
116
|
-
PRIVATE RN_AUDIO_API_ENABLE_WORKLETS=0
|
|
117
|
-
)
|
|
118
|
-
endif()
|
|
119
|
-
|
|
120
55
|
target_link_libraries(react-native-audio-api
|
|
121
56
|
${LINK_LIBRARIES}
|
|
122
57
|
${RN_VERSION_LINK_LIBRARIES}
|
|
@@ -6,16 +6,10 @@ using namespace facebook::jni;
|
|
|
6
6
|
|
|
7
7
|
AudioAPIModule::AudioAPIModule(
|
|
8
8
|
jni::alias_ref<AudioAPIModule::jhybridobject> &jThis,
|
|
9
|
-
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
10
|
-
std::weak_ptr<WorkletsModuleProxy> weakWorkletsModuleProxy,
|
|
11
|
-
#endif
|
|
12
9
|
jsi::Runtime *jsiRuntime,
|
|
13
10
|
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker)
|
|
14
11
|
: javaPart_(make_global(jThis)),
|
|
15
12
|
jsiRuntime_(jsiRuntime),
|
|
16
|
-
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
17
|
-
weakWorkletsModuleProxy_(weakWorkletsModuleProxy),
|
|
18
|
-
#endif
|
|
19
13
|
jsCallInvoker_(jsCallInvoker) {
|
|
20
14
|
audioEventHandlerRegistry_ =
|
|
21
15
|
std::make_shared<AudioEventHandlerRegistry>(jsiRuntime, jsCallInvoker);
|
|
@@ -23,25 +17,12 @@ AudioAPIModule::AudioAPIModule(
|
|
|
23
17
|
|
|
24
18
|
jni::local_ref<AudioAPIModule::jhybriddata> AudioAPIModule::initHybrid(
|
|
25
19
|
jni::alias_ref<jhybridobject> jThis,
|
|
26
|
-
jni::alias_ref<jni::JObject> jWorkletsModule,
|
|
27
20
|
jlong jsContext,
|
|
28
21
|
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
|
|
29
22
|
jsCallInvokerHolder) {
|
|
30
23
|
auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker();
|
|
31
24
|
auto rnRuntime = reinterpret_cast<jsi::Runtime *>(jsContext);
|
|
32
|
-
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
33
|
-
if (jWorkletsModule) {
|
|
34
|
-
auto castedModule =
|
|
35
|
-
jni::static_ref_cast<WorkletsModule::javaobject>(jWorkletsModule);
|
|
36
|
-
auto workletsModuleProxy = castedModule->cthis()->getWorkletsModuleProxy();
|
|
37
|
-
return makeCxxInstance(
|
|
38
|
-
jThis, workletsModuleProxy, rnRuntime, jsCallInvoker);
|
|
39
|
-
}
|
|
40
|
-
throw std::runtime_error(
|
|
41
|
-
"Worklets module is required but not provided from Java/Kotlin side");
|
|
42
|
-
#else
|
|
43
25
|
return makeCxxInstance(jThis, rnRuntime, jsCallInvoker);
|
|
44
|
-
#endif
|
|
45
26
|
}
|
|
46
27
|
|
|
47
28
|
void AudioAPIModule::registerNatives() {
|
|
@@ -55,17 +36,8 @@ void AudioAPIModule::registerNatives() {
|
|
|
55
36
|
}
|
|
56
37
|
|
|
57
38
|
void AudioAPIModule::injectJSIBindings() {
|
|
58
|
-
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
59
|
-
auto uiWorkletRuntime =
|
|
60
|
-
weakWorkletsModuleProxy_.lock()->getUIWorkletRuntime();
|
|
61
|
-
#else
|
|
62
|
-
auto uiWorkletRuntime = nullptr;
|
|
63
|
-
#endif
|
|
64
39
|
AudioAPIModuleInstaller::injectJSIBindings(
|
|
65
|
-
jsiRuntime_,
|
|
66
|
-
jsCallInvoker_,
|
|
67
|
-
audioEventHandlerRegistry_,
|
|
68
|
-
uiWorkletRuntime);
|
|
40
|
+
jsiRuntime_, jsCallInvoker_, audioEventHandlerRegistry_);
|
|
69
41
|
}
|
|
70
42
|
|
|
71
43
|
void AudioAPIModule::invokeHandlerWithEventNameAndEventBody(
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
#include <fbjni/fbjni.h>
|
|
8
8
|
#include <react/jni/CxxModuleWrapper.h>
|
|
9
9
|
#include <react/jni/JMessageQueueThread.h>
|
|
10
|
-
#include <audioapi/core/utils/worklets/SafeIncludes.h>
|
|
11
10
|
#include <memory>
|
|
12
11
|
#include <utility>
|
|
13
12
|
#include <unordered_map>
|
|
@@ -16,7 +15,6 @@ namespace audioapi {
|
|
|
16
15
|
|
|
17
16
|
using namespace facebook;
|
|
18
17
|
using namespace react;
|
|
19
|
-
using namespace worklets;
|
|
20
18
|
|
|
21
19
|
class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
|
|
22
20
|
public:
|
|
@@ -25,7 +23,6 @@ class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
|
|
|
25
23
|
|
|
26
24
|
static jni::local_ref<AudioAPIModule::jhybriddata> initHybrid(
|
|
27
25
|
jni::alias_ref<jhybridobject> jThis,
|
|
28
|
-
jni::alias_ref<jni::JObject> jWorkletsModule, // it will be null if RN_AUDIO_API_ENABLE_WORKLETS is false
|
|
29
26
|
jlong jsContext,
|
|
30
27
|
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
|
|
31
28
|
jsCallInvokerHolder);
|
|
@@ -40,24 +37,13 @@ class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
|
|
|
40
37
|
|
|
41
38
|
jni::global_ref<AudioAPIModule::javaobject> javaPart_;
|
|
42
39
|
jsi::Runtime *jsiRuntime_;
|
|
43
|
-
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
44
|
-
std::weak_ptr<worklets::WorkletsModuleProxy> weakWorkletsModuleProxy_;
|
|
45
|
-
#endif
|
|
46
40
|
std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker_;
|
|
47
41
|
std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
|
|
48
42
|
|
|
49
|
-
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
50
43
|
explicit AudioAPIModule(
|
|
51
44
|
jni::alias_ref<AudioAPIModule::jhybridobject> &jThis,
|
|
52
|
-
std::weak_ptr<worklets::WorkletsModuleProxy> weakWorkletsModuleProxy,
|
|
53
45
|
jsi::Runtime *jsiRuntime,
|
|
54
46
|
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker);
|
|
55
|
-
#else
|
|
56
|
-
explicit AudioAPIModule(
|
|
57
|
-
jni::alias_ref<AudioAPIModule::jhybridobject> &jThis,
|
|
58
|
-
jsi::Runtime *jsiRuntime,
|
|
59
|
-
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker);
|
|
60
|
-
#endif
|
|
61
47
|
};
|
|
62
48
|
|
|
63
49
|
} // namespace audioapi
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#include <audioapi/android/core/AndroidAudioRecorder.h>
|
|
2
|
+
#include <audioapi/core/Constants.h>
|
|
2
3
|
#include <audioapi/core/sources/RecorderAdapterNode.h>
|
|
3
|
-
#include <audioapi/core/utils/Constants.h>
|
|
4
4
|
#include <audioapi/events/AudioEventHandlerRegistry.h>
|
|
5
5
|
#include <audioapi/utils/AudioArray.h>
|
|
6
6
|
#include <audioapi/utils/AudioBus.h>
|
|
@@ -25,13 +25,9 @@ AndroidAudioRecorder::AndroidAudioRecorder(
|
|
|
25
25
|
->setDataCallback(this)
|
|
26
26
|
->setSampleRate(static_cast<int>(sampleRate))
|
|
27
27
|
->openStream(mStream_);
|
|
28
|
-
|
|
29
|
-
nativeAudioRecorder_ = jni::make_global(NativeAudioRecorder::create());
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
AndroidAudioRecorder::~AndroidAudioRecorder() {
|
|
33
|
-
nativeAudioRecorder_.release();
|
|
34
|
-
|
|
35
31
|
if (mStream_) {
|
|
36
32
|
mStream_->requestStop();
|
|
37
33
|
mStream_->close();
|
|
@@ -45,7 +41,6 @@ void AndroidAudioRecorder::start() {
|
|
|
45
41
|
}
|
|
46
42
|
|
|
47
43
|
if (mStream_) {
|
|
48
|
-
nativeAudioRecorder_->start();
|
|
49
44
|
mStream_->requestStart();
|
|
50
45
|
}
|
|
51
46
|
|
|
@@ -60,7 +55,6 @@ void AndroidAudioRecorder::stop() {
|
|
|
60
55
|
isRunning_.store(false);
|
|
61
56
|
|
|
62
57
|
if (mStream_) {
|
|
63
|
-
nativeAudioRecorder_->stop();
|
|
64
58
|
mStream_->requestStop();
|
|
65
59
|
}
|
|
66
60
|
|
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
#include <functional>
|
|
7
7
|
#include <memory>
|
|
8
8
|
|
|
9
|
-
#include <audioapi/android/core/NativeAudioRecorder.hpp>
|
|
10
|
-
|
|
11
9
|
namespace audioapi {
|
|
12
10
|
|
|
13
11
|
using namespace oboe;
|
|
@@ -18,8 +16,7 @@ class AndroidAudioRecorder : public AudioStreamDataCallback, public AudioRecorde
|
|
|
18
16
|
public:
|
|
19
17
|
AndroidAudioRecorder(float sampleRate,
|
|
20
18
|
int bufferLength,
|
|
21
|
-
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry
|
|
22
|
-
);
|
|
19
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
|
|
23
20
|
|
|
24
21
|
~AndroidAudioRecorder() override;
|
|
25
22
|
|
|
@@ -33,8 +30,6 @@ class AndroidAudioRecorder : public AudioStreamDataCallback, public AudioRecorde
|
|
|
33
30
|
|
|
34
31
|
private:
|
|
35
32
|
std::shared_ptr<AudioStream> mStream_;
|
|
36
|
-
|
|
37
|
-
facebook::jni::global_ref<NativeAudioRecorder> nativeAudioRecorder_;
|
|
38
33
|
};
|
|
39
34
|
|
|
40
35
|
} // namespace audioapi
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#include <android/log.h>
|
|
2
2
|
#include <audioapi/android/core/AudioPlayer.h>
|
|
3
3
|
#include <audioapi/core/AudioContext.h>
|
|
4
|
-
#include <audioapi/core/
|
|
4
|
+
#include <audioapi/core/Constants.h>
|
|
5
5
|
#include <audioapi/utils/AudioArray.h>
|
|
6
6
|
#include <audioapi/utils/AudioBus.h>
|
|
7
7
|
|
|
@@ -26,7 +26,6 @@ class AudioAPIModule(
|
|
|
26
26
|
private val mHybridData: HybridData
|
|
27
27
|
|
|
28
28
|
external fun initHybrid(
|
|
29
|
-
workletsModule: Any?,
|
|
30
29
|
jsContext: Long,
|
|
31
30
|
callInvoker: CallInvokerHolderImpl,
|
|
32
31
|
): HybridData
|
|
@@ -42,16 +41,7 @@ class AudioAPIModule(
|
|
|
42
41
|
try {
|
|
43
42
|
System.loadLibrary("react-native-audio-api")
|
|
44
43
|
val jsCallInvokerHolder = reactContext.jsCallInvokerHolder as CallInvokerHolderImpl
|
|
45
|
-
|
|
46
|
-
var workletsModule: Any? = null
|
|
47
|
-
if (BuildConfig.RN_AUDIO_API_ENABLE_WORKLETS) {
|
|
48
|
-
try {
|
|
49
|
-
workletsModule = reactContext.getNativeModule("WorkletsModule")
|
|
50
|
-
} catch (ex: Exception) {
|
|
51
|
-
throw RuntimeException("WorkletsModule not found - make sure react-native-worklets is properly installed")
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
mHybridData = initHybrid(workletsModule, reactContext.javaScriptContextHolder!!.get(), jsCallInvokerHolder)
|
|
44
|
+
mHybridData = initHybrid(reactContext.javaScriptContextHolder!!.get(), jsCallInvokerHolder)
|
|
55
45
|
} catch (exception: UnsatisfiedLinkError) {
|
|
56
46
|
throw RuntimeException("Could not load native module AudioAPIModule", exception)
|
|
57
47
|
}
|
|
@@ -21,7 +21,6 @@ import com.facebook.react.modules.core.PermissionAwareActivity
|
|
|
21
21
|
import com.facebook.react.modules.core.PermissionListener
|
|
22
22
|
import com.swmansion.audioapi.AudioAPIModule
|
|
23
23
|
import com.swmansion.audioapi.core.NativeAudioPlayer
|
|
24
|
-
import com.swmansion.audioapi.core.NativeAudioRecorder
|
|
25
24
|
import com.swmansion.audioapi.system.PermissionRequestListener.Companion.RECORDING_REQUEST_CODE
|
|
26
25
|
import java.lang.ref.WeakReference
|
|
27
26
|
import java.util.UUID
|
|
@@ -43,7 +42,6 @@ object MediaSessionManager {
|
|
|
43
42
|
private var isServiceRunning = false
|
|
44
43
|
private val serviceStateLock = Any()
|
|
45
44
|
private val nativeAudioPlayers = mutableMapOf<String, NativeAudioPlayer>()
|
|
46
|
-
private val nativeAudioRecorders = mutableMapOf<String, NativeAudioRecorder>()
|
|
47
45
|
|
|
48
46
|
fun initialize(
|
|
49
47
|
audioAPIModule: WeakReference<AudioAPIModule>,
|
|
@@ -97,25 +95,14 @@ object MediaSessionManager {
|
|
|
97
95
|
nativeAudioPlayers.remove(uuid)
|
|
98
96
|
}
|
|
99
97
|
|
|
100
|
-
fun attachAudioRecorder(recorder: NativeAudioRecorder): String {
|
|
101
|
-
val uuid = UUID.randomUUID().toString()
|
|
102
|
-
nativeAudioRecorders[uuid] = recorder
|
|
103
|
-
|
|
104
|
-
return uuid
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
fun detachAudioRecorder(uuid: String) {
|
|
108
|
-
nativeAudioRecorders.remove(uuid)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
98
|
fun startForegroundServiceIfNecessary() {
|
|
112
|
-
if (nativeAudioPlayers.isNotEmpty()
|
|
99
|
+
if (nativeAudioPlayers.isNotEmpty()) {
|
|
113
100
|
startForegroundService()
|
|
114
101
|
}
|
|
115
102
|
}
|
|
116
103
|
|
|
117
104
|
fun stopForegroundServiceIfNecessary() {
|
|
118
|
-
if (nativeAudioPlayers.isEmpty()
|
|
105
|
+
if (nativeAudioPlayers.isEmpty()) {
|
|
119
106
|
stopForegroundService()
|
|
120
107
|
}
|
|
121
108
|
}
|