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
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
4
|
+
#include <audioapi/core/sources/AudioBufferBaseSourceNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
AudioBufferBaseSourceNodeHostObject::AudioBufferBaseSourceNodeHostObject(
|
|
9
|
+
const std::shared_ptr<AudioBufferBaseSourceNode> &node)
|
|
10
|
+
: AudioScheduledSourceNodeHostObject(node) {
|
|
11
|
+
addGetters(
|
|
12
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, detune),
|
|
13
|
+
JSI_EXPORT_PROPERTY_GETTER(
|
|
14
|
+
AudioBufferBaseSourceNodeHostObject, playbackRate),
|
|
15
|
+
JSI_EXPORT_PROPERTY_GETTER(
|
|
16
|
+
AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
|
|
17
|
+
|
|
18
|
+
addSetters(
|
|
19
|
+
JSI_EXPORT_PROPERTY_SETTER(
|
|
20
|
+
AudioBufferBaseSourceNodeHostObject, onPositionChanged),
|
|
21
|
+
JSI_EXPORT_PROPERTY_SETTER(
|
|
22
|
+
AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
AudioBufferBaseSourceNodeHostObject::~AudioBufferBaseSourceNodeHostObject() {
|
|
26
|
+
auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
27
|
+
|
|
28
|
+
// When JSI object is garbage collected (together with the eventual callback),
|
|
29
|
+
// underlying source node might still be active and try to call the
|
|
30
|
+
// non-existing callback.
|
|
31
|
+
sourceNode->clearOnPositionChangedCallback();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferBaseSourceNodeHostObject, detune) {
|
|
35
|
+
auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
36
|
+
auto detune = sourceNode->getDetuneParam();
|
|
37
|
+
auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
|
|
38
|
+
return jsi::Object::createFromHostObject(runtime, detuneHostObject);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferBaseSourceNodeHostObject, playbackRate) {
|
|
42
|
+
auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
43
|
+
auto playbackRate = sourceNode->getPlaybackRateParam();
|
|
44
|
+
auto playbackRateHostObject =
|
|
45
|
+
std::make_shared<AudioParamHostObject>(playbackRate);
|
|
46
|
+
return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
JSI_PROPERTY_GETTER_IMPL(
|
|
50
|
+
AudioBufferBaseSourceNodeHostObject,
|
|
51
|
+
onPositionChangedInterval) {
|
|
52
|
+
auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
53
|
+
return {sourceNode->getOnPositionChangedInterval()};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
JSI_PROPERTY_SETTER_IMPL(
|
|
57
|
+
AudioBufferBaseSourceNodeHostObject,
|
|
58
|
+
onPositionChanged) {
|
|
59
|
+
auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
60
|
+
|
|
61
|
+
sourceNode->setOnPositionChangedCallbackId(
|
|
62
|
+
std::stoull(value.getString(runtime).utf8(runtime)));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
JSI_PROPERTY_SETTER_IMPL(
|
|
66
|
+
AudioBufferBaseSourceNodeHostObject,
|
|
67
|
+
onPositionChangedInterval) {
|
|
68
|
+
auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
69
|
+
|
|
70
|
+
sourceNode->setOnPositionChangedInterval(static_cast<int>(value.getNumber()));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <vector>
|
|
7
|
+
|
|
8
|
+
namespace audioapi {
|
|
9
|
+
using namespace facebook;
|
|
10
|
+
|
|
11
|
+
class AudioBufferBaseSourceNode;
|
|
12
|
+
|
|
13
|
+
class AudioBufferBaseSourceNodeHostObject
|
|
14
|
+
: public AudioScheduledSourceNodeHostObject {
|
|
15
|
+
public:
|
|
16
|
+
explicit AudioBufferBaseSourceNodeHostObject(
|
|
17
|
+
const std::shared_ptr<AudioBufferBaseSourceNode> &node);
|
|
18
|
+
|
|
19
|
+
~AudioBufferBaseSourceNodeHostObject() override;
|
|
20
|
+
|
|
21
|
+
JSI_PROPERTY_GETTER_DECL(detune);
|
|
22
|
+
JSI_PROPERTY_GETTER_DECL(playbackRate);
|
|
23
|
+
JSI_PROPERTY_GETTER_DECL(onPositionChangedInterval);
|
|
24
|
+
|
|
25
|
+
JSI_PROPERTY_SETTER_DECL(onPositionChanged);
|
|
26
|
+
JSI_PROPERTY_SETTER_DECL(onPositionChangedInterval);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/jsi/AudioArrayBuffer.h>
|
|
4
|
+
|
|
5
|
+
namespace audioapi {
|
|
6
|
+
|
|
7
|
+
AudioBufferHostObject::AudioBufferHostObject(
|
|
8
|
+
const std::shared_ptr<AudioBuffer> &audioBuffer)
|
|
9
|
+
: audioBuffer_(audioBuffer) {
|
|
10
|
+
addGetters(
|
|
11
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, sampleRate),
|
|
12
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, length),
|
|
13
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, duration),
|
|
14
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, numberOfChannels));
|
|
15
|
+
|
|
16
|
+
addFunctions(
|
|
17
|
+
JSI_EXPORT_FUNCTION(AudioBufferHostObject, getChannelData),
|
|
18
|
+
JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyFromChannel),
|
|
19
|
+
JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyToChannel));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
AudioBufferHostObject::AudioBufferHostObject(
|
|
23
|
+
AudioBufferHostObject &&other) noexcept
|
|
24
|
+
: JsiHostObject(std::move(other)),
|
|
25
|
+
audioBuffer_(std::move(other.audioBuffer_)) {}
|
|
26
|
+
|
|
27
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, sampleRate) {
|
|
28
|
+
return {audioBuffer_->getSampleRate()};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, length) {
|
|
32
|
+
return {static_cast<double>(audioBuffer_->getLength())};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, duration) {
|
|
36
|
+
return {audioBuffer_->getDuration()};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, numberOfChannels) {
|
|
40
|
+
return {audioBuffer_->getNumberOfChannels()};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferHostObject, getChannelData) {
|
|
44
|
+
auto channel = static_cast<int>(args[0].getNumber());
|
|
45
|
+
auto channelData =
|
|
46
|
+
reinterpret_cast<uint8_t *>(audioBuffer_->getChannelData(channel));
|
|
47
|
+
auto length = static_cast<int>(audioBuffer_->getLength());
|
|
48
|
+
auto size = static_cast<int>(length * sizeof(float));
|
|
49
|
+
|
|
50
|
+
// reading or writing from this ArrayBuffer could cause a crash
|
|
51
|
+
// if underlying channelData is deallocated
|
|
52
|
+
auto audioArrayBuffer = std::make_shared<AudioArrayBuffer>(channelData, size);
|
|
53
|
+
auto arrayBuffer = jsi::ArrayBuffer(runtime, audioArrayBuffer);
|
|
54
|
+
|
|
55
|
+
auto float32ArrayCtor =
|
|
56
|
+
runtime.global().getPropertyAsFunction(runtime, "Float32Array");
|
|
57
|
+
auto float32Array = float32ArrayCtor.callAsConstructor(runtime, arrayBuffer)
|
|
58
|
+
.getObject(runtime);
|
|
59
|
+
|
|
60
|
+
return float32Array;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferHostObject, copyFromChannel) {
|
|
64
|
+
auto arrayBuffer = args[0]
|
|
65
|
+
.getObject(runtime)
|
|
66
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
67
|
+
.getArrayBuffer(runtime);
|
|
68
|
+
auto destination = reinterpret_cast<float *>(arrayBuffer.data(runtime));
|
|
69
|
+
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
70
|
+
auto channelNumber = static_cast<int>(args[1].getNumber());
|
|
71
|
+
auto startInChannel = static_cast<size_t>(args[2].getNumber());
|
|
72
|
+
|
|
73
|
+
audioBuffer_->copyFromChannel(
|
|
74
|
+
destination, length, channelNumber, startInChannel);
|
|
75
|
+
|
|
76
|
+
return jsi::Value::undefined();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferHostObject, copyToChannel) {
|
|
80
|
+
auto arrayBuffer = args[0]
|
|
81
|
+
.getObject(runtime)
|
|
82
|
+
.getPropertyAsObject(runtime, "buffer")
|
|
83
|
+
.getArrayBuffer(runtime);
|
|
84
|
+
auto source = reinterpret_cast<float *>(arrayBuffer.data(runtime));
|
|
85
|
+
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
86
|
+
auto channelNumber = static_cast<int>(args[1].getNumber());
|
|
87
|
+
auto startInChannel = static_cast<size_t>(args[2].getNumber());
|
|
88
|
+
|
|
89
|
+
audioBuffer_->copyToChannel(source, length, channelNumber, startInChannel);
|
|
90
|
+
|
|
91
|
+
return jsi::Value::undefined();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/jsi/JsiHostObject.h>
|
|
4
|
+
#include <audioapi/core/sources/AudioBuffer.h>
|
|
5
|
+
|
|
6
|
+
#include <jsi/jsi.h>
|
|
7
|
+
#include <cstddef>
|
|
8
|
+
#include <memory>
|
|
9
|
+
#include <utility>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
namespace audioapi {
|
|
13
|
+
using namespace facebook;
|
|
14
|
+
|
|
15
|
+
class AudioBufferHostObject : public JsiHostObject {
|
|
16
|
+
public:
|
|
17
|
+
std::shared_ptr<AudioBuffer> audioBuffer_;
|
|
18
|
+
|
|
19
|
+
explicit AudioBufferHostObject(
|
|
20
|
+
const std::shared_ptr<AudioBuffer> &audioBuffer);
|
|
21
|
+
AudioBufferHostObject(const AudioBufferHostObject &) = delete;
|
|
22
|
+
AudioBufferHostObject &operator=(const AudioBufferHostObject &) = delete;
|
|
23
|
+
AudioBufferHostObject(AudioBufferHostObject &&other) noexcept;
|
|
24
|
+
AudioBufferHostObject &operator=(AudioBufferHostObject &&other) noexcept {
|
|
25
|
+
if (this != &other) {
|
|
26
|
+
JsiHostObject::operator=(std::move(other));
|
|
27
|
+
audioBuffer_ = std::move(other.audioBuffer_);
|
|
28
|
+
}
|
|
29
|
+
return *this;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[[nodiscard]] inline size_t getSizeInBytes() const {
|
|
33
|
+
return audioBuffer_->getLength() * audioBuffer_->getNumberOfChannels() *
|
|
34
|
+
sizeof(float);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
JSI_PROPERTY_GETTER_DECL(sampleRate);
|
|
38
|
+
JSI_PROPERTY_GETTER_DECL(length);
|
|
39
|
+
JSI_PROPERTY_GETTER_DECL(duration);
|
|
40
|
+
JSI_PROPERTY_GETTER_DECL(numberOfChannels);
|
|
41
|
+
|
|
42
|
+
JSI_HOST_FUNCTION_DECL(getChannelData);
|
|
43
|
+
JSI_HOST_FUNCTION_DECL(copyFromChannel);
|
|
44
|
+
JSI_HOST_FUNCTION_DECL(copyToChannel);
|
|
45
|
+
};
|
|
46
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
|
|
4
|
+
#include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
AudioBufferQueueSourceNodeHostObject::AudioBufferQueueSourceNodeHostObject(
|
|
9
|
+
const std::shared_ptr<AudioBufferQueueSourceNode> &node)
|
|
10
|
+
: AudioBufferBaseSourceNodeHostObject(node) {
|
|
11
|
+
addFunctions(
|
|
12
|
+
JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, enqueueBuffer),
|
|
13
|
+
JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, dequeueBuffer),
|
|
14
|
+
JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, clearBuffers),
|
|
15
|
+
JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, pause));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, pause) {
|
|
19
|
+
auto audioBufferQueueSourceNode =
|
|
20
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
21
|
+
|
|
22
|
+
audioBufferQueueSourceNode->pause();
|
|
23
|
+
|
|
24
|
+
return jsi::Value::undefined();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, enqueueBuffer) {
|
|
28
|
+
auto audioBufferQueueSourceNode =
|
|
29
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
30
|
+
|
|
31
|
+
auto audioBufferHostObject =
|
|
32
|
+
args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
33
|
+
|
|
34
|
+
auto bufferId = audioBufferQueueSourceNode->enqueueBuffer(
|
|
35
|
+
audioBufferHostObject->audioBuffer_);
|
|
36
|
+
|
|
37
|
+
return jsi::String::createFromUtf8(runtime, bufferId);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, dequeueBuffer) {
|
|
41
|
+
auto audioBufferQueueSourceNode =
|
|
42
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
43
|
+
|
|
44
|
+
auto bufferId = args[0].getNumber();
|
|
45
|
+
|
|
46
|
+
audioBufferQueueSourceNode->dequeueBuffer(bufferId);
|
|
47
|
+
|
|
48
|
+
return jsi::Value::undefined();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, clearBuffers) {
|
|
52
|
+
auto audioBufferQueueSourceNode =
|
|
53
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
54
|
+
|
|
55
|
+
audioBufferQueueSourceNode->clearBuffers();
|
|
56
|
+
|
|
57
|
+
return jsi::Value::undefined();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,25 @@
|
|
|
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 AudioBufferQueueSourceNode;
|
|
12
|
+
|
|
13
|
+
class AudioBufferQueueSourceNodeHostObject
|
|
14
|
+
: public AudioBufferBaseSourceNodeHostObject {
|
|
15
|
+
public:
|
|
16
|
+
explicit AudioBufferQueueSourceNodeHostObject(
|
|
17
|
+
const std::shared_ptr<AudioBufferQueueSourceNode> &node);
|
|
18
|
+
|
|
19
|
+
JSI_HOST_FUNCTION_DECL(pause);
|
|
20
|
+
JSI_HOST_FUNCTION_DECL(enqueueBuffer);
|
|
21
|
+
JSI_HOST_FUNCTION_DECL(dequeueBuffer);
|
|
22
|
+
JSI_HOST_FUNCTION_DECL(clearBuffers);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
|
|
4
|
+
#include <audioapi/core/sources/AudioBufferSourceNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
AudioBufferSourceNodeHostObject::AudioBufferSourceNodeHostObject(
|
|
9
|
+
const std::shared_ptr<AudioBufferSourceNode> &node)
|
|
10
|
+
: AudioBufferBaseSourceNodeHostObject(node) {
|
|
11
|
+
addGetters(
|
|
12
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
|
|
13
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
|
|
14
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
|
|
15
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
|
|
16
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd));
|
|
17
|
+
|
|
18
|
+
addSetters(
|
|
19
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
|
|
20
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopSkip),
|
|
21
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
|
|
22
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd));
|
|
23
|
+
|
|
24
|
+
// start method is overridden in this class
|
|
25
|
+
functions_->erase("start");
|
|
26
|
+
|
|
27
|
+
addFunctions(
|
|
28
|
+
JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, start),
|
|
29
|
+
JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, setBuffer));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
|
|
33
|
+
auto audioBufferSourceNode =
|
|
34
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
35
|
+
auto loop = audioBufferSourceNode->getLoop();
|
|
36
|
+
return {loop};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopSkip) {
|
|
40
|
+
auto audioBufferSourceNode =
|
|
41
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
42
|
+
auto loopSkip = audioBufferSourceNode->getLoopSkip();
|
|
43
|
+
return {loopSkip};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, buffer) {
|
|
47
|
+
auto audioBufferSourceNode =
|
|
48
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
49
|
+
auto buffer = audioBufferSourceNode->getBuffer();
|
|
50
|
+
|
|
51
|
+
if (!buffer) {
|
|
52
|
+
return jsi::Value::null();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
|
|
56
|
+
return jsi::Object::createFromHostObject(runtime, bufferHostObject);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopStart) {
|
|
60
|
+
auto audioBufferSourceNode =
|
|
61
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
62
|
+
auto loopStart = audioBufferSourceNode->getLoopStart();
|
|
63
|
+
return {loopStart};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopEnd) {
|
|
67
|
+
auto audioBufferSourceNode =
|
|
68
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
69
|
+
auto loopEnd = audioBufferSourceNode->getLoopEnd();
|
|
70
|
+
return {loopEnd};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
|
|
74
|
+
auto audioBufferSourceNode =
|
|
75
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
76
|
+
audioBufferSourceNode->setLoop(value.getBool());
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopSkip) {
|
|
80
|
+
auto audioBufferSourceNode =
|
|
81
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
82
|
+
audioBufferSourceNode->setLoopSkip(value.getBool());
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopStart) {
|
|
86
|
+
auto audioBufferSourceNode =
|
|
87
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
88
|
+
audioBufferSourceNode->setLoopStart(value.getNumber());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopEnd) {
|
|
92
|
+
auto audioBufferSourceNode =
|
|
93
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
94
|
+
audioBufferSourceNode->setLoopEnd(value.getNumber());
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, start) {
|
|
98
|
+
auto when = args[0].getNumber();
|
|
99
|
+
auto offset = args[1].getNumber();
|
|
100
|
+
|
|
101
|
+
auto audioBufferSourceNode =
|
|
102
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
103
|
+
|
|
104
|
+
if (args[2].isUndefined()) {
|
|
105
|
+
audioBufferSourceNode->start(when, offset);
|
|
106
|
+
|
|
107
|
+
return jsi::Value::undefined();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
auto duration = args[2].getNumber();
|
|
111
|
+
audioBufferSourceNode->start(when, offset, duration);
|
|
112
|
+
|
|
113
|
+
return jsi::Value::undefined();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, setBuffer) {
|
|
117
|
+
auto audioBufferSourceNode =
|
|
118
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
119
|
+
|
|
120
|
+
if (args[0].isNull()) {
|
|
121
|
+
audioBufferSourceNode->setBuffer(std::shared_ptr<AudioBuffer>(nullptr));
|
|
122
|
+
return jsi::Value::undefined();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
auto bufferHostObject =
|
|
126
|
+
args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
127
|
+
thisValue.asObject(runtime).setExternalMemoryPressure(
|
|
128
|
+
runtime, bufferHostObject->getSizeInBytes() + 16);
|
|
129
|
+
audioBufferSourceNode->setBuffer(bufferHostObject->audioBuffer_);
|
|
130
|
+
return jsi::Value::undefined();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
JSI_PROPERTY_GETTER_DECL(loop);
|
|
20
|
+
JSI_PROPERTY_GETTER_DECL(loopSkip);
|
|
21
|
+
JSI_PROPERTY_GETTER_DECL(buffer);
|
|
22
|
+
JSI_PROPERTY_GETTER_DECL(loopStart);
|
|
23
|
+
JSI_PROPERTY_GETTER_DECL(loopEnd);
|
|
24
|
+
|
|
25
|
+
JSI_PROPERTY_SETTER_DECL(loop);
|
|
26
|
+
JSI_PROPERTY_SETTER_DECL(loopSkip);
|
|
27
|
+
JSI_PROPERTY_SETTER_DECL(loopStart);
|
|
28
|
+
JSI_PROPERTY_SETTER_DECL(loopEnd);
|
|
29
|
+
|
|
30
|
+
JSI_HOST_FUNCTION_DECL(start);
|
|
31
|
+
JSI_HOST_FUNCTION_DECL(setBuffer);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
|
@@ -16,8 +16,7 @@ class RecorderAdapterNodeHostObject : public AudioNodeHostObject {
|
|
|
16
16
|
public:
|
|
17
17
|
explicit RecorderAdapterNodeHostObject(
|
|
18
18
|
const std::shared_ptr<RecorderAdapterNode> &node)
|
|
19
|
-
: AudioNodeHostObject(node) {
|
|
20
|
-
}
|
|
19
|
+
: AudioNodeHostObject(node) {}
|
|
21
20
|
|
|
22
21
|
private:
|
|
23
22
|
friend class AudioRecorderHostObject;
|