react-native-audio-api 0.8.3-nightly-d178688-20250925 → 0.8.3-nightly-2295d0d-20250926
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/RNAudioAPI.podspec +8 -5
- package/android/build.gradle +44 -4
- package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
- package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +31 -13
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +292 -6
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +26 -242
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +133 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +34 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
- package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
- package/common/cpp/audioapi/core/AudioContext.cpp +3 -2
- package/common/cpp/audioapi/core/AudioContext.h +2 -1
- package/common/cpp/audioapi/core/AudioNode.h +1 -1
- package/common/cpp/audioapi/core/AudioParam.h +1 -1
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +15 -1
- package/common/cpp/audioapi/core/BaseAudioContext.h +7 -3
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -3
- package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
- 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/effects/WorkletNode.cpp +86 -0
- package/common/cpp/audioapi/core/effects/WorkletNode.h +64 -0
- 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 +1 -1
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +1 -1
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +1 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.h +0 -8
- package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +1 -1
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +45 -0
- package/common/cpp/audioapi/core/utils/worklets/UiWorkletsRunner.cpp +9 -0
- package/common/cpp/audioapi/core/utils/worklets/UiWorkletsRunner.h +73 -0
- package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
- package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
- package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
- package/common/cpp/test/CMakeLists.txt +8 -3
- package/common/cpp/test/GainTest.cpp +1 -1
- package/common/cpp/test/OscillatorTest.cpp +1 -1
- package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
- 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/lib/commonjs/api.js +7 -0
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +29 -0
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/WorkletNode.js +11 -0
- package/lib/commonjs/core/WorkletNode.js.map +1 -0
- package/lib/commonjs/utils/index.js +9 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/api.js +1 -0
- package/lib/module/api.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +29 -0
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/WorkletNode.js +5 -0
- package/lib/module/core/WorkletNode.js.map +1 -0
- package/lib/module/utils/index.js +8 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/api.d.ts +1 -0
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/WorkletNode.d.ts +4 -0
- package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
- package/lib/typescript/interfaces.d.ts +3 -0
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +2 -0
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/api.ts +1 -0
- package/src/core/BaseAudioContext.ts +51 -0
- package/src/core/WorkletNode.ts +3 -0
- package/src/interfaces.ts +7 -0
- package/src/utils/index.ts +10 -0
- package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
- package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
- package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
- package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
- package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
- package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
- package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
- package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
- package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
- package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
- package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
- package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
- package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
- /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
- /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
- /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
- /package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include <audioapi/core/OfflineAudioContext.h>
|
|
4
3
|
#include <audioapi/HostObjects/BaseAudioContextHostObject.h>
|
|
5
4
|
|
|
6
5
|
#include <jsi/jsi.h>
|
|
@@ -11,60 +10,17 @@
|
|
|
11
10
|
namespace audioapi {
|
|
12
11
|
using namespace facebook;
|
|
13
12
|
|
|
13
|
+
class OfflineAudioContext;
|
|
14
|
+
|
|
14
15
|
class OfflineAudioContextHostObject : public BaseAudioContextHostObject {
|
|
15
16
|
public:
|
|
16
17
|
explicit OfflineAudioContextHostObject(
|
|
17
18
|
const std::shared_ptr<OfflineAudioContext> &offlineAudioContext,
|
|
18
19
|
jsi::Runtime *runtime,
|
|
19
|
-
const std::shared_ptr<react::CallInvoker> &callInvoker)
|
|
20
|
-
: BaseAudioContextHostObject(offlineAudioContext, runtime, callInvoker) {
|
|
21
|
-
addFunctions(
|
|
22
|
-
JSI_EXPORT_FUNCTION(OfflineAudioContextHostObject, resume),
|
|
23
|
-
JSI_EXPORT_FUNCTION(OfflineAudioContextHostObject, suspend),
|
|
24
|
-
JSI_EXPORT_FUNCTION(OfflineAudioContextHostObject, startRendering));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
JSI_HOST_FUNCTION(resume) {
|
|
28
|
-
auto promise = promiseVendor_->createPromise([this](const std::shared_ptr<Promise>& promise) {
|
|
29
|
-
auto audioContext = std::static_pointer_cast<OfflineAudioContext>(context_);
|
|
30
|
-
audioContext->resume();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
return promise;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
JSI_HOST_FUNCTION(suspend) {
|
|
37
|
-
double when = args[0].getNumber();
|
|
38
|
-
|
|
39
|
-
auto promise = promiseVendor_->createPromise([this, when](const std::shared_ptr<Promise>& promise) {
|
|
40
|
-
auto audioContext = std::static_pointer_cast<OfflineAudioContext>(context_);
|
|
41
|
-
OfflineAudioContextSuspendCallback callback = [promise]() {
|
|
42
|
-
promise->resolve([](jsi::Runtime &runtime) {
|
|
43
|
-
return jsi::Value::undefined();
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
audioContext->suspend(when, callback);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
return promise;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
JSI_HOST_FUNCTION(startRendering) {
|
|
53
|
-
auto promise = promiseVendor_->createPromise([this](const std::shared_ptr<Promise>& promise) {
|
|
54
|
-
auto audioContext = std::static_pointer_cast<OfflineAudioContext>(context_);
|
|
55
|
-
|
|
56
|
-
OfflineAudioContextResultCallback callback =
|
|
57
|
-
[promise](const std::shared_ptr<AudioBuffer>& audioBuffer) -> void {
|
|
58
|
-
auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(audioBuffer);
|
|
59
|
-
promise->resolve([audioBufferHostObject = std::move(audioBufferHostObject)](jsi::Runtime &runtime) {
|
|
60
|
-
return jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
audioContext->startRendering(callback);
|
|
65
|
-
});
|
|
20
|
+
const std::shared_ptr<react::CallInvoker> &callInvoker);
|
|
66
21
|
|
|
67
|
-
|
|
68
|
-
|
|
22
|
+
JSI_HOST_FUNCTION_DECL(resume);
|
|
23
|
+
JSI_HOST_FUNCTION_DECL(suspend);
|
|
24
|
+
JSI_HOST_FUNCTION_DECL(startRendering);
|
|
69
25
|
};
|
|
70
26
|
} // namespace audioapi
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
4
|
+
#include <audioapi/core/effects/WorkletNode.h>
|
|
5
|
+
|
|
6
|
+
#include <memory>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
namespace audioapi {
|
|
10
|
+
using namespace facebook;
|
|
11
|
+
|
|
12
|
+
class WorkletNodeHostObject : public AudioNodeHostObject {
|
|
13
|
+
public:
|
|
14
|
+
explicit WorkletNodeHostObject(const std::shared_ptr<WorkletNode> &node)
|
|
15
|
+
: AudioNodeHostObject(node) {
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/analysis/AnalyserNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/core/analysis/AnalyserNode.h>
|
|
4
|
+
|
|
5
|
+
namespace audioapi {
|
|
6
|
+
|
|
7
|
+
AnalyserNodeHostObject::AnalyserNodeHostObject(
|
|
8
|
+
const std::shared_ptr<AnalyserNode> &node)
|
|
9
|
+
: AudioNodeHostObject(node) {
|
|
10
|
+
addGetters(
|
|
11
|
+
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, fftSize),
|
|
12
|
+
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, frequencyBinCount),
|
|
13
|
+
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, minDecibels),
|
|
14
|
+
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, maxDecibels),
|
|
15
|
+
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, smoothingTimeConstant),
|
|
16
|
+
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, window));
|
|
17
|
+
|
|
18
|
+
addSetters(
|
|
19
|
+
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, fftSize),
|
|
20
|
+
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, minDecibels),
|
|
21
|
+
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, maxDecibels),
|
|
22
|
+
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, smoothingTimeConstant),
|
|
23
|
+
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, window));
|
|
24
|
+
|
|
25
|
+
addFunctions(
|
|
26
|
+
JSI_EXPORT_FUNCTION(AnalyserNodeHostObject, getFloatFrequencyData),
|
|
27
|
+
JSI_EXPORT_FUNCTION(AnalyserNodeHostObject, getByteFrequencyData),
|
|
28
|
+
JSI_EXPORT_FUNCTION(AnalyserNodeHostObject, getFloatTimeDomainData),
|
|
29
|
+
JSI_EXPORT_FUNCTION(AnalyserNodeHostObject, getByteTimeDomainData));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
JSI_PROPERTY_GETTER_IMPL(AnalyserNodeHostObject, fftSize) {
|
|
33
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
34
|
+
return {static_cast<int>(analyserNode->getFftSize())};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
JSI_PROPERTY_GETTER_IMPL(AnalyserNodeHostObject, frequencyBinCount) {
|
|
38
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
39
|
+
return {static_cast<int>(analyserNode->getFrequencyBinCount())};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
JSI_PROPERTY_GETTER_IMPL(AnalyserNodeHostObject, minDecibels) {
|
|
43
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
44
|
+
return {analyserNode->getMinDecibels()};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
JSI_PROPERTY_GETTER_IMPL(AnalyserNodeHostObject, maxDecibels) {
|
|
48
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
49
|
+
return {analyserNode->getMaxDecibels()};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
JSI_PROPERTY_GETTER_IMPL(AnalyserNodeHostObject, smoothingTimeConstant) {
|
|
53
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
54
|
+
return {analyserNode->getSmoothingTimeConstant()};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
JSI_PROPERTY_GETTER_IMPL(AnalyserNodeHostObject, window) {
|
|
58
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
59
|
+
auto windowType = analyserNode->getWindowType();
|
|
60
|
+
return jsi::String::createFromUtf8(runtime, windowType);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
JSI_PROPERTY_SETTER_IMPL(AnalyserNodeHostObject, fftSize) {
|
|
64
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
65
|
+
auto fftSize = static_cast<int>(value.getNumber());
|
|
66
|
+
analyserNode->setFftSize(fftSize);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
JSI_PROPERTY_SETTER_IMPL(AnalyserNodeHostObject, minDecibels) {
|
|
70
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
71
|
+
auto minDecibels = static_cast<float>(value.getNumber());
|
|
72
|
+
analyserNode->setMinDecibels(minDecibels);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
JSI_PROPERTY_SETTER_IMPL(AnalyserNodeHostObject, maxDecibels) {
|
|
76
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
77
|
+
auto maxDecibels = static_cast<float>(value.getNumber());
|
|
78
|
+
analyserNode->setMaxDecibels(maxDecibels);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
JSI_PROPERTY_SETTER_IMPL(AnalyserNodeHostObject, smoothingTimeConstant) {
|
|
82
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
83
|
+
auto smoothingTimeConstant = static_cast<float>(value.getNumber());
|
|
84
|
+
analyserNode->setSmoothingTimeConstant(smoothingTimeConstant);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
JSI_PROPERTY_SETTER_IMPL(AnalyserNodeHostObject, window) {
|
|
88
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
89
|
+
analyserNode->setWindowType(value.getString(runtime).utf8(runtime));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
JSI_HOST_FUNCTION_IMPL(AnalyserNodeHostObject, getFloatFrequencyData) {
|
|
93
|
+
auto arrayBuffer = args[0]
|
|
94
|
+
.getObject(runtime)
|
|
95
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
96
|
+
.getArrayBuffer(runtime);
|
|
97
|
+
auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
|
|
98
|
+
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
99
|
+
|
|
100
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
101
|
+
analyserNode->getFloatFrequencyData(data, length);
|
|
102
|
+
|
|
103
|
+
return jsi::Value::undefined();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
JSI_HOST_FUNCTION_IMPL(AnalyserNodeHostObject, getByteFrequencyData) {
|
|
107
|
+
auto arrayBuffer = args[0]
|
|
108
|
+
.getObject(runtime)
|
|
109
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
110
|
+
.getArrayBuffer(runtime);
|
|
111
|
+
auto data = arrayBuffer.data(runtime);
|
|
112
|
+
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
113
|
+
|
|
114
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
115
|
+
analyserNode->getByteFrequencyData(data, length);
|
|
116
|
+
|
|
117
|
+
return jsi::Value::undefined();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
JSI_HOST_FUNCTION_IMPL(AnalyserNodeHostObject, getFloatTimeDomainData) {
|
|
121
|
+
auto arrayBuffer = args[0]
|
|
122
|
+
.getObject(runtime)
|
|
123
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
124
|
+
.getArrayBuffer(runtime);
|
|
125
|
+
auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
|
|
126
|
+
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
127
|
+
|
|
128
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
129
|
+
analyserNode->getFloatTimeDomainData(data, length);
|
|
130
|
+
|
|
131
|
+
return jsi::Value::undefined();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
JSI_HOST_FUNCTION_IMPL(AnalyserNodeHostObject, getByteTimeDomainData) {
|
|
135
|
+
auto arrayBuffer = args[0]
|
|
136
|
+
.getObject(runtime)
|
|
137
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
138
|
+
.getArrayBuffer(runtime);
|
|
139
|
+
auto data = arrayBuffer.data(runtime);
|
|
140
|
+
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
141
|
+
|
|
142
|
+
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
143
|
+
analyserNode->getByteTimeDomainData(data, length);
|
|
144
|
+
|
|
145
|
+
return jsi::Value::undefined();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
namespace audioapi {
|
|
10
|
+
using namespace facebook;
|
|
11
|
+
|
|
12
|
+
class AnalyserNode;
|
|
13
|
+
|
|
14
|
+
class AnalyserNodeHostObject : public AudioNodeHostObject {
|
|
15
|
+
public:
|
|
16
|
+
explicit AnalyserNodeHostObject(const std::shared_ptr<AnalyserNode> &node);
|
|
17
|
+
|
|
18
|
+
JSI_PROPERTY_GETTER_DECL(fftSize);
|
|
19
|
+
JSI_PROPERTY_GETTER_DECL(frequencyBinCount);
|
|
20
|
+
JSI_PROPERTY_GETTER_DECL(minDecibels);
|
|
21
|
+
JSI_PROPERTY_GETTER_DECL(maxDecibels);
|
|
22
|
+
JSI_PROPERTY_GETTER_DECL(smoothingTimeConstant);
|
|
23
|
+
JSI_PROPERTY_GETTER_DECL(window);
|
|
24
|
+
|
|
25
|
+
JSI_PROPERTY_SETTER_DECL(fftSize);
|
|
26
|
+
JSI_PROPERTY_SETTER_DECL(minDecibels);
|
|
27
|
+
JSI_PROPERTY_SETTER_DECL(maxDecibels);
|
|
28
|
+
JSI_PROPERTY_SETTER_DECL(smoothingTimeConstant);
|
|
29
|
+
JSI_PROPERTY_SETTER_DECL(window);
|
|
30
|
+
|
|
31
|
+
JSI_HOST_FUNCTION_DECL(getFloatFrequencyData);
|
|
32
|
+
JSI_HOST_FUNCTION_DECL(getByteFrequencyData);
|
|
33
|
+
JSI_HOST_FUNCTION_DECL(getFloatTimeDomainData);
|
|
34
|
+
JSI_HOST_FUNCTION_DECL(getByteTimeDomainData);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
4
|
+
#include <audioapi/core/effects/BiquadFilterNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
BiquadFilterNodeHostObject::BiquadFilterNodeHostObject(
|
|
9
|
+
const std::shared_ptr<BiquadFilterNode> &node)
|
|
10
|
+
: AudioNodeHostObject(node) {
|
|
11
|
+
addGetters(
|
|
12
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, frequency),
|
|
13
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, detune),
|
|
14
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, Q),
|
|
15
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, gain),
|
|
16
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, type));
|
|
17
|
+
|
|
18
|
+
addSetters(JSI_EXPORT_PROPERTY_SETTER(BiquadFilterNodeHostObject, type));
|
|
19
|
+
|
|
20
|
+
addFunctions(
|
|
21
|
+
JSI_EXPORT_FUNCTION(BiquadFilterNodeHostObject, getFrequencyResponse));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
JSI_PROPERTY_GETTER_IMPL(BiquadFilterNodeHostObject, frequency) {
|
|
25
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
26
|
+
auto frequencyParam_ = std::make_shared<AudioParamHostObject>(
|
|
27
|
+
biquadFilterNode->getFrequencyParam());
|
|
28
|
+
return jsi::Object::createFromHostObject(runtime, frequencyParam_);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
JSI_PROPERTY_GETTER_IMPL(BiquadFilterNodeHostObject, detune) {
|
|
32
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
33
|
+
auto detuneParam_ = std::make_shared<AudioParamHostObject>(
|
|
34
|
+
biquadFilterNode->getDetuneParam());
|
|
35
|
+
return jsi::Object::createFromHostObject(runtime, detuneParam_);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
JSI_PROPERTY_GETTER_IMPL(BiquadFilterNodeHostObject, Q) {
|
|
39
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
40
|
+
auto QParam_ =
|
|
41
|
+
std::make_shared<AudioParamHostObject>(biquadFilterNode->getQParam());
|
|
42
|
+
return jsi::Object::createFromHostObject(runtime, QParam_);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
JSI_PROPERTY_GETTER_IMPL(BiquadFilterNodeHostObject, gain) {
|
|
46
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
47
|
+
auto gainParam_ =
|
|
48
|
+
std::make_shared<AudioParamHostObject>(biquadFilterNode->getGainParam());
|
|
49
|
+
return jsi::Object::createFromHostObject(runtime, gainParam_);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
JSI_PROPERTY_GETTER_IMPL(BiquadFilterNodeHostObject, type) {
|
|
53
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
54
|
+
auto type = biquadFilterNode->getType();
|
|
55
|
+
return jsi::String::createFromUtf8(runtime, type);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
JSI_PROPERTY_SETTER_IMPL(BiquadFilterNodeHostObject, type) {
|
|
59
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
60
|
+
biquadFilterNode->setType(value.getString(runtime).utf8(runtime));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
JSI_HOST_FUNCTION_IMPL(BiquadFilterNodeHostObject, getFrequencyResponse) {
|
|
64
|
+
auto arrayBufferFrequency = args[0]
|
|
65
|
+
.getObject(runtime)
|
|
66
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
67
|
+
.getArrayBuffer(runtime);
|
|
68
|
+
auto frequencyArray =
|
|
69
|
+
reinterpret_cast<float *>(arrayBufferFrequency.data(runtime));
|
|
70
|
+
auto length = static_cast<int>(arrayBufferFrequency.size(runtime));
|
|
71
|
+
|
|
72
|
+
auto arrayBufferMag = args[1]
|
|
73
|
+
.getObject(runtime)
|
|
74
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
75
|
+
.getArrayBuffer(runtime);
|
|
76
|
+
auto magResponseOut = reinterpret_cast<float *>(arrayBufferMag.data(runtime));
|
|
77
|
+
|
|
78
|
+
auto arrayBufferPhase = args[2]
|
|
79
|
+
.getObject(runtime)
|
|
80
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
81
|
+
.getArrayBuffer(runtime);
|
|
82
|
+
auto phaseResponseOut =
|
|
83
|
+
reinterpret_cast<float *>(arrayBufferPhase.data(runtime));
|
|
84
|
+
|
|
85
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
86
|
+
biquadFilterNode->getFrequencyResponse(
|
|
87
|
+
frequencyArray, magResponseOut, phaseResponseOut, length);
|
|
88
|
+
|
|
89
|
+
return jsi::Value::undefined();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
namespace audioapi {
|
|
10
|
+
using namespace facebook;
|
|
11
|
+
|
|
12
|
+
class BiquadFilterNode;
|
|
13
|
+
|
|
14
|
+
class BiquadFilterNodeHostObject : public AudioNodeHostObject {
|
|
15
|
+
public:
|
|
16
|
+
explicit BiquadFilterNodeHostObject(
|
|
17
|
+
const std::shared_ptr<BiquadFilterNode> &node);
|
|
18
|
+
|
|
19
|
+
JSI_PROPERTY_GETTER_DECL(frequency);
|
|
20
|
+
JSI_PROPERTY_GETTER_DECL(detune);
|
|
21
|
+
JSI_PROPERTY_GETTER_DECL(Q);
|
|
22
|
+
JSI_PROPERTY_GETTER_DECL(gain);
|
|
23
|
+
JSI_PROPERTY_GETTER_DECL(type);
|
|
24
|
+
|
|
25
|
+
JSI_PROPERTY_SETTER_DECL(type);
|
|
26
|
+
|
|
27
|
+
JSI_HOST_FUNCTION_DECL(getFrequencyResponse);
|
|
28
|
+
};
|
|
29
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/effects/GainNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
4
|
+
#include <audioapi/core/effects/GainNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
GainNodeHostObject::GainNodeHostObject(const std::shared_ptr<GainNode> &node)
|
|
9
|
+
: AudioNodeHostObject(node) {
|
|
10
|
+
addGetters(JSI_EXPORT_PROPERTY_GETTER(GainNodeHostObject, gain));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
JSI_PROPERTY_GETTER_IMPL(GainNodeHostObject, gain) {
|
|
14
|
+
auto gainNode = std::static_pointer_cast<GainNode>(node_);
|
|
15
|
+
auto gainParam =
|
|
16
|
+
std::make_shared<AudioParamHostObject>(gainNode->getGainParam());
|
|
17
|
+
return jsi::Object::createFromHostObject(runtime, gainParam);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,19 @@
|
|
|
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 GainNode;
|
|
12
|
+
|
|
13
|
+
class GainNodeHostObject : public AudioNodeHostObject {
|
|
14
|
+
public:
|
|
15
|
+
explicit GainNodeHostObject(const std::shared_ptr<GainNode> &node);
|
|
16
|
+
|
|
17
|
+
JSI_PROPERTY_GETTER_DECL(gain);
|
|
18
|
+
};
|
|
19
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/effects/StereoPannerNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
4
|
+
#include <audioapi/core/effects/StereoPannerNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
StereoPannerNodeHostObject::StereoPannerNodeHostObject(
|
|
9
|
+
const std::shared_ptr<StereoPannerNode> &node)
|
|
10
|
+
: AudioNodeHostObject(node) {
|
|
11
|
+
addGetters(JSI_EXPORT_PROPERTY_GETTER(StereoPannerNodeHostObject, pan));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
JSI_PROPERTY_GETTER_IMPL(StereoPannerNodeHostObject, pan) {
|
|
15
|
+
auto stereoPannerNode = std::static_pointer_cast<StereoPannerNode>(node_);
|
|
16
|
+
auto panParam_ =
|
|
17
|
+
std::make_shared<AudioParamHostObject>(stereoPannerNode->getPanParam());
|
|
18
|
+
return jsi::Object::createFromHostObject(runtime, panParam_);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
namespace audioapi {
|
|
10
|
+
using namespace facebook;
|
|
11
|
+
|
|
12
|
+
class StereoPannerNode;
|
|
13
|
+
|
|
14
|
+
class StereoPannerNodeHostObject : public AudioNodeHostObject {
|
|
15
|
+
public:
|
|
16
|
+
explicit StereoPannerNodeHostObject(
|
|
17
|
+
const std::shared_ptr<StereoPannerNode> &node);
|
|
18
|
+
|
|
19
|
+
JSI_PROPERTY_GETTER_DECL(pan);
|
|
20
|
+
};
|
|
21
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/events/AudioEventHandlerRegistry.h>
|
|
4
|
+
|
|
5
|
+
namespace audioapi {
|
|
6
|
+
|
|
7
|
+
AudioEventHandlerRegistryHostObject::AudioEventHandlerRegistryHostObject(
|
|
8
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &eventHandlerRegistry) {
|
|
9
|
+
eventHandlerRegistry_ = eventHandlerRegistry;
|
|
10
|
+
|
|
11
|
+
addFunctions(
|
|
12
|
+
JSI_EXPORT_FUNCTION(
|
|
13
|
+
AudioEventHandlerRegistryHostObject, addAudioEventListener),
|
|
14
|
+
JSI_EXPORT_FUNCTION(
|
|
15
|
+
AudioEventHandlerRegistryHostObject, removeAudioEventListener));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
JSI_HOST_FUNCTION_IMPL(
|
|
19
|
+
AudioEventHandlerRegistryHostObject,
|
|
20
|
+
addAudioEventListener) {
|
|
21
|
+
auto eventName = args[0].getString(runtime).utf8(runtime);
|
|
22
|
+
auto callback = std::make_shared<jsi::Function>(
|
|
23
|
+
args[1].getObject(runtime).getFunction(runtime));
|
|
24
|
+
|
|
25
|
+
auto listenerId = eventHandlerRegistry_->registerHandler(eventName, callback);
|
|
26
|
+
|
|
27
|
+
return jsi::String::createFromUtf8(runtime, std::to_string(listenerId));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
JSI_HOST_FUNCTION_IMPL(
|
|
31
|
+
AudioEventHandlerRegistryHostObject,
|
|
32
|
+
removeAudioEventListener) {
|
|
33
|
+
auto eventName = args[0].getString(runtime).utf8(runtime);
|
|
34
|
+
uint64_t listenerId = std::stoull(args[1].getString(runtime).utf8(runtime));
|
|
35
|
+
|
|
36
|
+
eventHandlerRegistry_->unregisterHandler(eventName, listenerId);
|
|
37
|
+
|
|
38
|
+
return jsi::Value::undefined();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/jsi/JsiHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <jsi/jsi.h>
|
|
6
|
+
#include <ReactCommon/CallInvoker.h>
|
|
7
|
+
#include <memory>
|
|
8
|
+
#include <unordered_map>
|
|
9
|
+
#include <vector>
|
|
10
|
+
#include <string>
|
|
11
|
+
|
|
12
|
+
namespace audioapi {
|
|
13
|
+
using namespace facebook;
|
|
14
|
+
|
|
15
|
+
class AudioEventHandlerRegistry;
|
|
16
|
+
|
|
17
|
+
class AudioEventHandlerRegistryHostObject : public JsiHostObject {
|
|
18
|
+
public:
|
|
19
|
+
explicit AudioEventHandlerRegistryHostObject(const std::shared_ptr<AudioEventHandlerRegistry>& eventHandlerRegistry);
|
|
20
|
+
|
|
21
|
+
JSI_HOST_FUNCTION_DECL(addAudioEventListener);
|
|
22
|
+
JSI_HOST_FUNCTION_DECL(removeAudioEventListener);
|
|
23
|
+
|
|
24
|
+
private:
|
|
25
|
+
std::shared_ptr<AudioEventHandlerRegistry> eventHandlerRegistry_;
|
|
26
|
+
};
|
|
27
|
+
} // namespace audioapi
|
|
28
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/inputs/AudioRecorderHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
|
|
4
|
+
#include <audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h>
|
|
5
|
+
#include <audioapi/core/inputs/AudioRecorder.h>
|
|
6
|
+
#include <audioapi/core/sources/AudioBuffer.h>
|
|
7
|
+
#include <audioapi/events/AudioEventHandlerRegistry.h>
|
|
8
|
+
#ifdef ANDROID
|
|
9
|
+
#include <audioapi/android/core/AndroidAudioRecorder.h>
|
|
10
|
+
#else
|
|
11
|
+
#include <audioapi/ios/core/IOSAudioRecorder.h>
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
namespace audioapi {
|
|
15
|
+
|
|
16
|
+
AudioRecorderHostObject::AudioRecorderHostObject(
|
|
17
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
18
|
+
float sampleRate,
|
|
19
|
+
int bufferLength) {
|
|
20
|
+
#ifdef ANDROID
|
|
21
|
+
audioRecorder_ = std::make_shared<AndroidAudioRecorder>(
|
|
22
|
+
sampleRate, bufferLength, audioEventHandlerRegistry);
|
|
23
|
+
#else
|
|
24
|
+
audioRecorder_ = std::make_shared<IOSAudioRecorder>(
|
|
25
|
+
sampleRate, bufferLength, audioEventHandlerRegistry);
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioRecorderHostObject, onAudioReady));
|
|
29
|
+
|
|
30
|
+
addFunctions(
|
|
31
|
+
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, start),
|
|
32
|
+
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop),
|
|
33
|
+
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, connect),
|
|
34
|
+
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
JSI_PROPERTY_SETTER_IMPL(AudioRecorderHostObject, onAudioReady) {
|
|
38
|
+
audioRecorder_->setOnAudioReadyCallbackId(
|
|
39
|
+
std::stoull(value.getString(runtime).utf8(runtime)));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
|
|
43
|
+
auto adapterNodeHostObject =
|
|
44
|
+
args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(
|
|
45
|
+
runtime);
|
|
46
|
+
audioRecorder_->connect(
|
|
47
|
+
std::static_pointer_cast<RecorderAdapterNode>(
|
|
48
|
+
adapterNodeHostObject->node_));
|
|
49
|
+
return jsi::Value::undefined();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disconnect) {
|
|
53
|
+
audioRecorder_->disconnect();
|
|
54
|
+
return jsi::Value::undefined();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
|
|
58
|
+
audioRecorder_->start();
|
|
59
|
+
|
|
60
|
+
return jsi::Value::undefined();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
|
|
64
|
+
audioRecorder_->stop();
|
|
65
|
+
|
|
66
|
+
return jsi::Value::undefined();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/jsi/JsiHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <utility>
|
|
7
|
+
#include <vector>
|
|
8
|
+
#include <cstdio>
|
|
9
|
+
|
|
10
|
+
namespace audioapi {
|
|
11
|
+
using namespace facebook;
|
|
12
|
+
|
|
13
|
+
class AudioRecorder;
|
|
14
|
+
class AudioEventHandlerRegistry;
|
|
15
|
+
|
|
16
|
+
class AudioRecorderHostObject : public JsiHostObject {
|
|
17
|
+
public:
|
|
18
|
+
explicit AudioRecorderHostObject(
|
|
19
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
20
|
+
float sampleRate,
|
|
21
|
+
int bufferLength);
|
|
22
|
+
|
|
23
|
+
JSI_PROPERTY_SETTER_DECL(onAudioReady);
|
|
24
|
+
|
|
25
|
+
JSI_HOST_FUNCTION_DECL(connect);
|
|
26
|
+
JSI_HOST_FUNCTION_DECL(disconnect);
|
|
27
|
+
JSI_HOST_FUNCTION_DECL(start);
|
|
28
|
+
JSI_HOST_FUNCTION_DECL(stop);
|
|
29
|
+
|
|
30
|
+
private:
|
|
31
|
+
std::shared_ptr<AudioRecorder> audioRecorder_;
|
|
32
|
+
};
|
|
33
|
+
} // namespace audioapi
|