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
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h>
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <vector>
|
|
7
|
-
|
|
8
|
-
namespace audioapi {
|
|
9
|
-
using namespace facebook;
|
|
10
|
-
|
|
11
|
-
class AudioBufferSourceNode;
|
|
12
|
-
|
|
13
|
-
class AudioBufferSourceNodeHostObject
|
|
14
|
-
: public AudioBufferBaseSourceNodeHostObject {
|
|
15
|
-
public:
|
|
16
|
-
explicit AudioBufferSourceNodeHostObject(
|
|
17
|
-
const std::shared_ptr<AudioBufferSourceNode> &node);
|
|
18
|
-
|
|
19
|
-
~AudioBufferSourceNodeHostObject() override;
|
|
20
|
-
|
|
21
|
-
JSI_PROPERTY_GETTER_DECL(loop);
|
|
22
|
-
JSI_PROPERTY_GETTER_DECL(loopSkip);
|
|
23
|
-
JSI_PROPERTY_GETTER_DECL(buffer);
|
|
24
|
-
JSI_PROPERTY_GETTER_DECL(loopStart);
|
|
25
|
-
JSI_PROPERTY_GETTER_DECL(loopEnd);
|
|
26
|
-
|
|
27
|
-
JSI_PROPERTY_SETTER_DECL(loop);
|
|
28
|
-
JSI_PROPERTY_SETTER_DECL(loopSkip);
|
|
29
|
-
JSI_PROPERTY_SETTER_DECL(loopStart);
|
|
30
|
-
JSI_PROPERTY_SETTER_DECL(loopEnd);
|
|
31
|
-
JSI_PROPERTY_SETTER_DECL(onLoopEnded);
|
|
32
|
-
|
|
33
|
-
JSI_HOST_FUNCTION_DECL(start);
|
|
34
|
-
JSI_HOST_FUNCTION_DECL(setBuffer);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
} // namespace audioapi
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
|
|
2
|
-
|
|
3
|
-
#include <audioapi/core/sources/AudioScheduledSourceNode.h>
|
|
4
|
-
|
|
5
|
-
namespace audioapi {
|
|
6
|
-
|
|
7
|
-
AudioScheduledSourceNodeHostObject::AudioScheduledSourceNodeHostObject(
|
|
8
|
-
const std::shared_ptr<AudioScheduledSourceNode> &node)
|
|
9
|
-
: AudioNodeHostObject(node) {
|
|
10
|
-
addSetters(
|
|
11
|
-
JSI_EXPORT_PROPERTY_SETTER(AudioScheduledSourceNodeHostObject, onEnded));
|
|
12
|
-
|
|
13
|
-
addFunctions(
|
|
14
|
-
JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, start),
|
|
15
|
-
JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, stop));
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
AudioScheduledSourceNodeHostObject::~AudioScheduledSourceNodeHostObject() {
|
|
19
|
-
auto audioScheduledSourceNode =
|
|
20
|
-
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
21
|
-
|
|
22
|
-
// When JSI object is garbage collected (together with the eventual callback),
|
|
23
|
-
// underlying source node might still be active and try to call the
|
|
24
|
-
// non-existing callback.
|
|
25
|
-
audioScheduledSourceNode->clearOnEndedCallback();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
JSI_PROPERTY_SETTER_IMPL(AudioScheduledSourceNodeHostObject, onEnded) {
|
|
29
|
-
auto audioScheduleSourceNode =
|
|
30
|
-
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
31
|
-
|
|
32
|
-
audioScheduleSourceNode->setOnEndedCallbackId(
|
|
33
|
-
std::stoull(value.getString(runtime).utf8(runtime)));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
JSI_HOST_FUNCTION_IMPL(AudioScheduledSourceNodeHostObject, start) {
|
|
37
|
-
auto when = args[0].getNumber();
|
|
38
|
-
auto audioScheduleSourceNode =
|
|
39
|
-
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
40
|
-
audioScheduleSourceNode->start(when);
|
|
41
|
-
return jsi::Value::undefined();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
JSI_HOST_FUNCTION_IMPL(AudioScheduledSourceNodeHostObject, stop) {
|
|
45
|
-
auto time = args[0].getNumber();
|
|
46
|
-
auto audioScheduleSourceNode =
|
|
47
|
-
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
48
|
-
audioScheduleSourceNode->stop(time);
|
|
49
|
-
return jsi::Value::undefined();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
} // namespace audioapi
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <vector>
|
|
7
|
-
|
|
8
|
-
namespace audioapi {
|
|
9
|
-
using namespace facebook;
|
|
10
|
-
|
|
11
|
-
class AudioScheduledSourceNode;
|
|
12
|
-
|
|
13
|
-
class AudioScheduledSourceNodeHostObject : public AudioNodeHostObject {
|
|
14
|
-
public:
|
|
15
|
-
explicit AudioScheduledSourceNodeHostObject(
|
|
16
|
-
const std::shared_ptr<AudioScheduledSourceNode> &node);
|
|
17
|
-
|
|
18
|
-
~AudioScheduledSourceNodeHostObject() override;
|
|
19
|
-
|
|
20
|
-
JSI_PROPERTY_SETTER_DECL(onEnded);
|
|
21
|
-
|
|
22
|
-
JSI_HOST_FUNCTION_DECL(start);
|
|
23
|
-
JSI_HOST_FUNCTION_DECL(stop);
|
|
24
|
-
};
|
|
25
|
-
} // namespace audioapi
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
2
|
-
#include <audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h>
|
|
3
|
-
#include <audioapi/core/sources/ConstantSourceNode.h>
|
|
4
|
-
|
|
5
|
-
namespace audioapi {
|
|
6
|
-
|
|
7
|
-
ConstantSourceNodeHostObject::ConstantSourceNodeHostObject(
|
|
8
|
-
const std::shared_ptr<ConstantSourceNode> &node)
|
|
9
|
-
: AudioScheduledSourceNodeHostObject(node) {
|
|
10
|
-
addGetters(JSI_EXPORT_PROPERTY_GETTER(ConstantSourceNodeHostObject, offset));
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
JSI_PROPERTY_GETTER_IMPL(ConstantSourceNodeHostObject, offset) {
|
|
14
|
-
auto constantSourceNode = std::static_pointer_cast<ConstantSourceNode>(node_);
|
|
15
|
-
auto offsetParam_ = std::make_shared<AudioParamHostObject>(
|
|
16
|
-
constantSourceNode->getOffsetParam());
|
|
17
|
-
return jsi::Object::createFromHostObject(runtime, offsetParam_);
|
|
18
|
-
}
|
|
19
|
-
} // namespace audioapi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <string>
|
|
7
|
-
#include <vector>
|
|
8
|
-
|
|
9
|
-
namespace audioapi {
|
|
10
|
-
using namespace facebook;
|
|
11
|
-
|
|
12
|
-
class ConstantSourceNode;
|
|
13
|
-
|
|
14
|
-
class ConstantSourceNodeHostObject : public AudioScheduledSourceNodeHostObject {
|
|
15
|
-
public:
|
|
16
|
-
explicit ConstantSourceNodeHostObject(
|
|
17
|
-
const std::shared_ptr<ConstantSourceNode> &node);
|
|
18
|
-
|
|
19
|
-
JSI_PROPERTY_GETTER_DECL(offset);
|
|
20
|
-
};
|
|
21
|
-
} // namespace audioapi
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#include <audioapi/HostObjects/sources/OscillatorNodeHostObject.h>
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
4
|
-
#include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
|
|
5
|
-
#include <audioapi/core/sources/OscillatorNode.h>
|
|
6
|
-
|
|
7
|
-
namespace audioapi {
|
|
8
|
-
|
|
9
|
-
OscillatorNodeHostObject::OscillatorNodeHostObject(
|
|
10
|
-
const std::shared_ptr<OscillatorNode> &node)
|
|
11
|
-
: AudioScheduledSourceNodeHostObject(node) {
|
|
12
|
-
addGetters(
|
|
13
|
-
JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, frequency),
|
|
14
|
-
JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, detune),
|
|
15
|
-
JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, type));
|
|
16
|
-
|
|
17
|
-
addFunctions(JSI_EXPORT_FUNCTION(OscillatorNodeHostObject, setPeriodicWave));
|
|
18
|
-
|
|
19
|
-
addSetters(JSI_EXPORT_PROPERTY_SETTER(OscillatorNodeHostObject, type));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
JSI_PROPERTY_GETTER_IMPL(OscillatorNodeHostObject, frequency) {
|
|
23
|
-
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
24
|
-
auto frequencyParam_ = std::make_shared<AudioParamHostObject>(
|
|
25
|
-
oscillatorNode->getFrequencyParam());
|
|
26
|
-
return jsi::Object::createFromHostObject(runtime, frequencyParam_);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
JSI_PROPERTY_GETTER_IMPL(OscillatorNodeHostObject, detune) {
|
|
30
|
-
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
31
|
-
auto detuneParam_ =
|
|
32
|
-
std::make_shared<AudioParamHostObject>(oscillatorNode->getDetuneParam());
|
|
33
|
-
return jsi::Object::createFromHostObject(runtime, detuneParam_);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
JSI_PROPERTY_GETTER_IMPL(OscillatorNodeHostObject, type) {
|
|
37
|
-
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
38
|
-
auto waveType = oscillatorNode->getType();
|
|
39
|
-
return jsi::String::createFromUtf8(runtime, waveType);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
JSI_HOST_FUNCTION_IMPL(OscillatorNodeHostObject, setPeriodicWave) {
|
|
43
|
-
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
44
|
-
auto periodicWave =
|
|
45
|
-
args[0].getObject(runtime).getHostObject<PeriodicWaveHostObject>(runtime);
|
|
46
|
-
oscillatorNode->setPeriodicWave(periodicWave->periodicWave_);
|
|
47
|
-
return jsi::Value::undefined();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
JSI_PROPERTY_SETTER_IMPL(OscillatorNodeHostObject, type) {
|
|
51
|
-
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
52
|
-
oscillatorNode->setType(value.getString(runtime).utf8(runtime));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
} // namespace audioapi
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <string>
|
|
7
|
-
#include <vector>
|
|
8
|
-
|
|
9
|
-
namespace audioapi {
|
|
10
|
-
using namespace facebook;
|
|
11
|
-
|
|
12
|
-
class OscillatorNode;
|
|
13
|
-
|
|
14
|
-
class OscillatorNodeHostObject : public AudioScheduledSourceNodeHostObject {
|
|
15
|
-
public:
|
|
16
|
-
explicit OscillatorNodeHostObject(
|
|
17
|
-
const std::shared_ptr<OscillatorNode> &node);
|
|
18
|
-
|
|
19
|
-
JSI_PROPERTY_GETTER_DECL(frequency);
|
|
20
|
-
JSI_PROPERTY_GETTER_DECL(detune);
|
|
21
|
-
JSI_PROPERTY_GETTER_DECL(type);
|
|
22
|
-
|
|
23
|
-
JSI_HOST_FUNCTION_DECL(setPeriodicWave);
|
|
24
|
-
|
|
25
|
-
JSI_PROPERTY_SETTER_DECL(type);
|
|
26
|
-
};
|
|
27
|
-
} // namespace audioapi
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#include <audioapi/HostObjects/sources/StreamerNodeHostObject.h>
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
4
|
-
#include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
|
|
5
|
-
#include <audioapi/core/sources/StreamerNode.h>
|
|
6
|
-
|
|
7
|
-
namespace audioapi {
|
|
8
|
-
|
|
9
|
-
StreamerNodeHostObject::StreamerNodeHostObject(
|
|
10
|
-
const std::shared_ptr<StreamerNode> &node)
|
|
11
|
-
: AudioScheduledSourceNodeHostObject(node) {
|
|
12
|
-
addFunctions(JSI_EXPORT_FUNCTION(StreamerNodeHostObject, initialize));
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
JSI_HOST_FUNCTION_IMPL(StreamerNodeHostObject, initialize) {
|
|
16
|
-
auto streamerNode = std::static_pointer_cast<StreamerNode>(node_);
|
|
17
|
-
auto path = args[0].getString(runtime).utf8(runtime);
|
|
18
|
-
auto result = streamerNode->initialize(path);
|
|
19
|
-
return {result};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
} // namespace audioapi
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <string>
|
|
7
|
-
#include <vector>
|
|
8
|
-
|
|
9
|
-
namespace audioapi {
|
|
10
|
-
using namespace facebook;
|
|
11
|
-
|
|
12
|
-
class StreamerNode;
|
|
13
|
-
|
|
14
|
-
class StreamerNodeHostObject : public AudioScheduledSourceNodeHostObject {
|
|
15
|
-
public:
|
|
16
|
-
explicit StreamerNodeHostObject(
|
|
17
|
-
const std::shared_ptr<StreamerNode> &node);
|
|
18
|
-
|
|
19
|
-
[[nodiscard]] static inline size_t getSizeInBytes() {
|
|
20
|
-
return SIZE;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
JSI_HOST_FUNCTION_DECL(initialize);
|
|
24
|
-
|
|
25
|
-
private:
|
|
26
|
-
static constexpr size_t SIZE = 4'000'000; // 4MB
|
|
27
|
-
};
|
|
28
|
-
} // namespace audioapi
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
|
|
4
|
-
#include <audioapi/core/sources/WorkletSourceNode.h>
|
|
5
|
-
|
|
6
|
-
#include <memory>
|
|
7
|
-
#include <vector>
|
|
8
|
-
|
|
9
|
-
namespace audioapi {
|
|
10
|
-
using namespace facebook;
|
|
11
|
-
|
|
12
|
-
class WorkletSourceNodeHostObject : public AudioScheduledSourceNodeHostObject {
|
|
13
|
-
public:
|
|
14
|
-
explicit WorkletSourceNodeHostObject(const std::shared_ptr<WorkletSourceNode> &node)
|
|
15
|
-
: AudioScheduledSourceNodeHostObject(node) {
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
} // namespace audioapi
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
#include <audioapi/core/effects/WorkletNode.h>
|
|
2
|
-
|
|
3
|
-
namespace audioapi {
|
|
4
|
-
|
|
5
|
-
WorkletNode::WorkletNode(
|
|
6
|
-
BaseAudioContext *context,
|
|
7
|
-
std::shared_ptr<worklets::SerializableWorklet> &worklet,
|
|
8
|
-
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
9
|
-
size_t bufferLength,
|
|
10
|
-
size_t inputChannelCount)
|
|
11
|
-
: AudioNode(context),
|
|
12
|
-
buffRealLength_(bufferLength * sizeof(float)),
|
|
13
|
-
bufferLength_(bufferLength),
|
|
14
|
-
workletRunner_(runtime),
|
|
15
|
-
shareableWorklet_(worklet),
|
|
16
|
-
inputChannelCount_(inputChannelCount),
|
|
17
|
-
curBuffIndex_(0) {
|
|
18
|
-
buffs_.reserve(inputChannelCount_);
|
|
19
|
-
for (size_t i = 0; i < inputChannelCount_; ++i) {
|
|
20
|
-
buffs_.emplace_back(new uint8_t[buffRealLength_]);
|
|
21
|
-
}
|
|
22
|
-
isInitialized_ = true;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
WorkletNode::~WorkletNode() {
|
|
26
|
-
for (auto &buff : buffs_) {
|
|
27
|
-
delete[] buff;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
void WorkletNode::processNode(
|
|
32
|
-
const std::shared_ptr<AudioBus> &processingBus,
|
|
33
|
-
int framesToProcess) {
|
|
34
|
-
size_t processed = 0;
|
|
35
|
-
size_t channelCount_ = std::min(
|
|
36
|
-
inputChannelCount_,
|
|
37
|
-
static_cast<size_t>(processingBus->getNumberOfChannels()));
|
|
38
|
-
while (processed < framesToProcess) {
|
|
39
|
-
size_t framesToWorkletInvoke = bufferLength_ - curBuffIndex_;
|
|
40
|
-
size_t needsToProcess = framesToProcess - processed;
|
|
41
|
-
size_t shouldProcess = std::min(framesToWorkletInvoke, needsToProcess);
|
|
42
|
-
|
|
43
|
-
for (size_t ch = 0; ch < channelCount_; ch++) {
|
|
44
|
-
/// here we copy
|
|
45
|
-
/// to uint8_t* [curBuffIndex_, curBuffIndex_ + shouldProcess]
|
|
46
|
-
/// from float* [processed, processed + shouldProcess]
|
|
47
|
-
/// so as the we need to copy shouldProcess * sizeof(float) bytes
|
|
48
|
-
auto channelData = processingBus->getChannel(ch)->getData();
|
|
49
|
-
std::memcpy(
|
|
50
|
-
/* dest */ buffs_[ch] + curBuffIndex_ * sizeof(float),
|
|
51
|
-
/* src */ reinterpret_cast<const uint8_t *>(channelData + processed),
|
|
52
|
-
/* size */ shouldProcess * sizeof(float));
|
|
53
|
-
}
|
|
54
|
-
processed += shouldProcess;
|
|
55
|
-
curBuffIndex_ += shouldProcess;
|
|
56
|
-
|
|
57
|
-
/// If we filled the entire buffer, we need to execute the worklet
|
|
58
|
-
if (curBuffIndex_ == bufferLength_) {
|
|
59
|
-
// Reset buffer index, channel buffers and execute worklet
|
|
60
|
-
curBuffIndex_ = 0;
|
|
61
|
-
workletRunner_.executeOnRuntimeGuardedSync(
|
|
62
|
-
[this, channelCount_](jsi::Runtime &uiRuntimeRaw) {
|
|
63
|
-
/// Arguments preparation
|
|
64
|
-
auto jsArray = jsi::Array(uiRuntimeRaw, channelCount_);
|
|
65
|
-
for (size_t ch = 0; ch < channelCount_; ch++) {
|
|
66
|
-
uint8_t *buffPtr = buffs_[ch];
|
|
67
|
-
buffs_[ch] = new uint8_t[buffRealLength_];
|
|
68
|
-
auto sharedAudioArray =
|
|
69
|
-
std::make_shared<AudioArrayBuffer>(buffPtr, buffRealLength_);
|
|
70
|
-
auto arrayBuffer =
|
|
71
|
-
jsi::ArrayBuffer(uiRuntimeRaw, std::move(sharedAudioArray));
|
|
72
|
-
jsArray.setValueAtIndex(uiRuntimeRaw, ch, std::move(arrayBuffer));
|
|
73
|
-
}
|
|
74
|
-
jsArray.setExternalMemoryPressure(
|
|
75
|
-
uiRuntimeRaw, channelCount_ * buffRealLength_);
|
|
76
|
-
|
|
77
|
-
workletRunner_.executeWorklet(
|
|
78
|
-
shareableWorklet_,
|
|
79
|
-
std::move(jsArray),
|
|
80
|
-
jsi::Value(uiRuntimeRaw, static_cast<int>(channelCount_)));
|
|
81
|
-
return jsi::Value::undefined();
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
} // namespace audioapi
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
#include <jsi/jsi.h>
|
|
5
|
-
#include <audioapi/core/utils/worklets/WorkletsRunner.h>
|
|
6
|
-
#include <audioapi/core/AudioNode.h>
|
|
7
|
-
#include <audioapi/core/BaseAudioContext.h>
|
|
8
|
-
#include <audioapi/utils/AudioBus.h>
|
|
9
|
-
#include <audioapi/utils/AudioArray.h>
|
|
10
|
-
#include <audioapi/jsi/AudioArrayBuffer.h>
|
|
11
|
-
|
|
12
|
-
#include <memory>
|
|
13
|
-
#include <vector>
|
|
14
|
-
|
|
15
|
-
namespace audioapi {
|
|
16
|
-
|
|
17
|
-
#if RN_AUDIO_API_TEST
|
|
18
|
-
class WorkletNode : public AudioNode {
|
|
19
|
-
public:
|
|
20
|
-
explicit WorkletNode(
|
|
21
|
-
BaseAudioContext *context,
|
|
22
|
-
std::shared_ptr<worklets::SerializableWorklet> &worklet,
|
|
23
|
-
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
24
|
-
size_t bufferLength,
|
|
25
|
-
size_t inputChannelCount
|
|
26
|
-
) : AudioNode(context) {}
|
|
27
|
-
|
|
28
|
-
protected:
|
|
29
|
-
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override {}
|
|
30
|
-
};
|
|
31
|
-
#else
|
|
32
|
-
|
|
33
|
-
using namespace facebook;
|
|
34
|
-
|
|
35
|
-
class WorkletNode : public AudioNode {
|
|
36
|
-
public:
|
|
37
|
-
explicit WorkletNode(
|
|
38
|
-
BaseAudioContext *context,
|
|
39
|
-
std::shared_ptr<worklets::SerializableWorklet> &worklet,
|
|
40
|
-
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
41
|
-
size_t bufferLength,
|
|
42
|
-
size_t inputChannelCount
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
~WorkletNode() override;
|
|
46
|
-
|
|
47
|
-
protected:
|
|
48
|
-
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
private:
|
|
52
|
-
WorkletsRunner workletRunner_;
|
|
53
|
-
std::shared_ptr<worklets::SerializableWorklet> shareableWorklet_;
|
|
54
|
-
std::vector<uint8_t*> buffs_;
|
|
55
|
-
|
|
56
|
-
/// @brief Length of the byte buffer that will be passed to the AudioArrayBuffer
|
|
57
|
-
size_t buffRealLength_;
|
|
58
|
-
size_t bufferLength_;
|
|
59
|
-
size_t inputChannelCount_;
|
|
60
|
-
size_t curBuffIndex_;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
#endif // RN_AUDIO_API_TEST
|
|
64
|
-
|
|
65
|
-
} // namespace audioapi
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
#include <audioapi/core/effects/WorkletProcessingNode.h>
|
|
2
|
-
#include <audioapi/core/utils/Constants.h>
|
|
3
|
-
|
|
4
|
-
namespace audioapi {
|
|
5
|
-
|
|
6
|
-
WorkletProcessingNode::WorkletProcessingNode(
|
|
7
|
-
BaseAudioContext *context,
|
|
8
|
-
std::shared_ptr<worklets::SerializableWorklet> &worklet,
|
|
9
|
-
std::weak_ptr<worklets::WorkletRuntime> runtime)
|
|
10
|
-
: AudioNode(context), workletRunner_(runtime), shareableWorklet_(worklet) {
|
|
11
|
-
isInitialized_ = true;
|
|
12
|
-
|
|
13
|
-
// Pre-allocate buffers for max 128 frames and 2 channels (stereo)
|
|
14
|
-
size_t maxChannelCount = 2;
|
|
15
|
-
inputBuffsHandles_.resize(maxChannelCount);
|
|
16
|
-
outputBuffsHandles_.resize(maxChannelCount);
|
|
17
|
-
|
|
18
|
-
for (size_t i = 0; i < maxChannelCount; ++i) {
|
|
19
|
-
auto inputBuff = new uint8_t[RENDER_QUANTUM_SIZE * sizeof(float)];
|
|
20
|
-
inputBuffsHandles_[i] = std::make_shared<AudioArrayBuffer>(
|
|
21
|
-
inputBuff, RENDER_QUANTUM_SIZE * sizeof(float));
|
|
22
|
-
|
|
23
|
-
auto outputBuff = new uint8_t[RENDER_QUANTUM_SIZE * sizeof(float)];
|
|
24
|
-
outputBuffsHandles_[i] = std::make_shared<AudioArrayBuffer>(
|
|
25
|
-
outputBuff, RENDER_QUANTUM_SIZE * sizeof(float));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
void WorkletProcessingNode::processNode(
|
|
30
|
-
const std::shared_ptr<AudioBus> &processingBus,
|
|
31
|
-
int framesToProcess) {
|
|
32
|
-
size_t channelCount = std::min(
|
|
33
|
-
static_cast<size_t>(2), // Fixed to stereo for now
|
|
34
|
-
static_cast<size_t>(processingBus->getNumberOfChannels()));
|
|
35
|
-
|
|
36
|
-
// Copy input data to pre-allocated input buffers
|
|
37
|
-
for (size_t ch = 0; ch < channelCount; ch++) {
|
|
38
|
-
auto channelData = processingBus->getChannel(ch)->getData();
|
|
39
|
-
std::memcpy(
|
|
40
|
-
/* dest */ inputBuffsHandles_[ch]->data(),
|
|
41
|
-
/* src */ reinterpret_cast<const uint8_t *>(channelData),
|
|
42
|
-
/* size */ framesToProcess * sizeof(float));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Execute the worklet
|
|
46
|
-
auto result = workletRunner_.executeOnRuntimeGuardedSync(
|
|
47
|
-
[this, channelCount, framesToProcess](jsi::Runtime &rt) {
|
|
48
|
-
auto inputJsArray = jsi::Array(rt, channelCount);
|
|
49
|
-
auto outputJsArray = jsi::Array(rt, channelCount);
|
|
50
|
-
|
|
51
|
-
for (size_t ch = 0; ch < channelCount; ch++) {
|
|
52
|
-
// Create input array buffer
|
|
53
|
-
auto inputArrayBuffer = jsi::ArrayBuffer(rt, inputBuffsHandles_[ch]);
|
|
54
|
-
inputJsArray.setValueAtIndex(rt, ch, inputArrayBuffer);
|
|
55
|
-
|
|
56
|
-
// Create output array buffer
|
|
57
|
-
auto outputArrayBuffer =
|
|
58
|
-
jsi::ArrayBuffer(rt, outputBuffsHandles_[ch]);
|
|
59
|
-
outputJsArray.setValueAtIndex(rt, ch, outputArrayBuffer);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return workletRunner_
|
|
63
|
-
.executeWorklet(
|
|
64
|
-
shareableWorklet_,
|
|
65
|
-
inputJsArray,
|
|
66
|
-
outputJsArray,
|
|
67
|
-
jsi::Value(rt, static_cast<int>(framesToProcess)),
|
|
68
|
-
jsi::Value(rt, this->context_->getCurrentTime()))
|
|
69
|
-
.value_or(jsi::Value::undefined());
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// Copy processed output data back to the processing bus or zero on failure
|
|
73
|
-
for (size_t ch = 0; ch < channelCount; ch++) {
|
|
74
|
-
auto channelData = processingBus->getChannel(ch)->getData();
|
|
75
|
-
|
|
76
|
-
if (result.has_value()) {
|
|
77
|
-
// Copy processed output data
|
|
78
|
-
std::memcpy(
|
|
79
|
-
/* dest */ reinterpret_cast<uint8_t *>(channelData),
|
|
80
|
-
/* src */ outputBuffsHandles_[ch]->data(),
|
|
81
|
-
/* size */ framesToProcess * sizeof(float));
|
|
82
|
-
} else {
|
|
83
|
-
// Zero the output on worklet execution failure
|
|
84
|
-
std::memset(channelData, 0, framesToProcess * sizeof(float));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
} // namespace audioapi
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <jsi/jsi.h>
|
|
4
|
-
#include <audioapi/core/utils/worklets/WorkletsRunner.h>
|
|
5
|
-
#include <audioapi/core/AudioNode.h>
|
|
6
|
-
#include <audioapi/core/BaseAudioContext.h>
|
|
7
|
-
#include <audioapi/utils/AudioBus.h>
|
|
8
|
-
#include <audioapi/utils/AudioArray.h>
|
|
9
|
-
#include <audioapi/jsi/AudioArrayBuffer.h>
|
|
10
|
-
|
|
11
|
-
#include <memory>
|
|
12
|
-
#include <vector>
|
|
13
|
-
|
|
14
|
-
namespace audioapi {
|
|
15
|
-
|
|
16
|
-
#if RN_AUDIO_API_TEST
|
|
17
|
-
class WorkletProcessingNode : public AudioNode {
|
|
18
|
-
public:
|
|
19
|
-
explicit WorkletProcessingNode(
|
|
20
|
-
BaseAudioContext *context,
|
|
21
|
-
std::shared_ptr<worklets::SerializableWorklet> &worklet,
|
|
22
|
-
std::weak_ptr<worklets::WorkletRuntime> runtime
|
|
23
|
-
) : AudioNode(context) {}
|
|
24
|
-
|
|
25
|
-
protected:
|
|
26
|
-
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override {}
|
|
27
|
-
};
|
|
28
|
-
#else
|
|
29
|
-
|
|
30
|
-
using namespace facebook;
|
|
31
|
-
|
|
32
|
-
class WorkletProcessingNode : public AudioNode {
|
|
33
|
-
public:
|
|
34
|
-
explicit WorkletProcessingNode(
|
|
35
|
-
BaseAudioContext *context,
|
|
36
|
-
std::shared_ptr<worklets::SerializableWorklet> &worklet,
|
|
37
|
-
std::weak_ptr<worklets::WorkletRuntime> runtime
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
protected:
|
|
41
|
-
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
|
|
42
|
-
|
|
43
|
-
private:
|
|
44
|
-
WorkletsRunner workletRunner_;
|
|
45
|
-
std::shared_ptr<worklets::SerializableWorklet> shareableWorklet_;
|
|
46
|
-
std::vector<std::shared_ptr<AudioArrayBuffer>> inputBuffsHandles_;
|
|
47
|
-
std::vector<std::shared_ptr<AudioArrayBuffer>> outputBuffsHandles_;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
#endif // RN_AUDIO_API_TEST
|
|
51
|
-
|
|
52
|
-
} // namespace audioapi
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
#include <audioapi/core/BaseAudioContext.h>
|
|
2
|
-
#include <audioapi/core/sources/ConstantSourceNode.h>
|
|
3
|
-
#include <audioapi/dsp/AudioUtils.h>
|
|
4
|
-
#include <audioapi/utils/AudioArray.h>
|
|
5
|
-
#include <audioapi/utils/AudioBus.h>
|
|
6
|
-
|
|
7
|
-
namespace audioapi {
|
|
8
|
-
ConstantSourceNode::ConstantSourceNode(BaseAudioContext *context)
|
|
9
|
-
: AudioScheduledSourceNode(context) {
|
|
10
|
-
offsetParam_ = std::make_shared<AudioParam>(
|
|
11
|
-
1.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
|
|
12
|
-
isInitialized_ = true;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
std::shared_ptr<AudioParam> ConstantSourceNode::getOffsetParam() const {
|
|
16
|
-
return offsetParam_;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
void ConstantSourceNode::processNode(
|
|
20
|
-
const std::shared_ptr<AudioBus> &processingBus,
|
|
21
|
-
int framesToProcess) {
|
|
22
|
-
size_t startOffset = 0;
|
|
23
|
-
size_t offsetLength = 0;
|
|
24
|
-
|
|
25
|
-
updatePlaybackInfo(processingBus, framesToProcess, startOffset, offsetLength);
|
|
26
|
-
|
|
27
|
-
if (!isPlaying() && !isStopScheduled()) {
|
|
28
|
-
processingBus->zero();
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
auto offsetBus = offsetParam_->processARateParam(
|
|
33
|
-
framesToProcess, context_->getCurrentTime());
|
|
34
|
-
|
|
35
|
-
auto offsetChannelData = offsetBus->getChannel(0)->getData();
|
|
36
|
-
|
|
37
|
-
for (int channel = 0; channel < processingBus->getNumberOfChannels();
|
|
38
|
-
++channel) {
|
|
39
|
-
auto outputChannelData = processingBus->getChannel(channel)->getData();
|
|
40
|
-
|
|
41
|
-
std::copy(
|
|
42
|
-
offsetChannelData + startOffset,
|
|
43
|
-
offsetChannelData + startOffset + offsetLength,
|
|
44
|
-
outputChannelData + startOffset);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (isStopScheduled()) {
|
|
48
|
-
handleStopScheduled();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
} // namespace audioapi
|