react-native-audio-api 0.3.0-rc2 → 0.3.1
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/android/CMakeLists.txt +2 -2
- package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +3 -9
- package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +0 -2
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +25 -28
- package/common/cpp/HostObjects/AudioBufferHostObject.h +79 -13
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +93 -14
- package/common/cpp/HostObjects/AudioContextHostObject.h +10 -21
- package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +3 -16
- package/common/cpp/HostObjects/AudioNodeHostObject.h +48 -11
- package/common/cpp/HostObjects/AudioParamHostObject.h +56 -14
- package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +23 -16
- package/common/cpp/HostObjects/BaseAudioContextHostObject.h +131 -14
- package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +76 -18
- package/common/cpp/HostObjects/Constants.h +2 -0
- package/common/cpp/HostObjects/GainNodeHostObject.h +10 -15
- package/common/cpp/HostObjects/OscillatorNodeHostObject.h +40 -17
- package/common/cpp/HostObjects/PeriodicWaveHostObject.h +4 -17
- package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +10 -17
- package/common/cpp/core/AudioBufferSourceNode.cpp +180 -73
- package/common/cpp/core/AudioBufferSourceNode.h +41 -1
- package/common/cpp/core/AudioDestinationNode.h +1 -1
- package/common/cpp/core/AudioScheduledSourceNode.cpp +86 -21
- package/common/cpp/core/AudioScheduledSourceNode.h +12 -4
- package/common/cpp/core/OscillatorNode.cpp +7 -2
- package/common/cpp/jsi/JsiHostObject.cpp +85 -0
- package/common/cpp/jsi/JsiHostObject.h +94 -0
- package/common/cpp/{utils → jsi}/JsiPromise.cpp +10 -9
- package/common/cpp/jsi/JsiPromise.h +48 -0
- package/common/cpp/utils/AudioUtils.cpp +26 -0
- package/common/cpp/utils/AudioUtils.h +16 -0
- package/ios/AudioAPIModule.mm +2 -6
- package/ios/AudioDecoder/AudioDecoder.m +9 -10
- package/ios/AudioPlayer/AudioPlayer.m +2 -1
- package/lib/module/core/AudioBufferSourceNode.js +15 -0
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/index.js +18 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +7 -0
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +6 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +4 -0
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/AudioBufferSourceNode.ts +23 -0
- package/src/index.ts +24 -0
- package/src/interfaces.ts +5 -0
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +0 -58
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +0 -38
- package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +0 -16
- package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +0 -12
- package/common/cpp/HostObjects/AudioBufferHostObject.cpp +0 -150
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +0 -79
- package/common/cpp/HostObjects/AudioContextHostObject.cpp +0 -55
- package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +0 -33
- package/common/cpp/HostObjects/AudioNodeHostObject.cpp +0 -102
- package/common/cpp/HostObjects/AudioParamHostObject.cpp +0 -115
- package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +0 -73
- package/common/cpp/HostObjects/BaseAudioContextHostObject.cpp +0 -250
- package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +0 -125
- package/common/cpp/HostObjects/GainNodeHostObject.cpp +0 -41
- package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +0 -88
- package/common/cpp/HostObjects/PeriodicWaveHostObject.cpp +0 -33
- package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +0 -41
- package/common/cpp/utils/JsiPromise.h +0 -48
- package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +0 -45
- package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +0 -26
- package/common/cpp/wrappers/AudioBufferWrapper.cpp +0 -46
- package/common/cpp/wrappers/AudioBufferWrapper.h +0 -30
- package/common/cpp/wrappers/AudioContextWrapper.cpp +0 -17
- package/common/cpp/wrappers/AudioContextWrapper.h +0 -19
- package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +0 -16
- package/common/cpp/wrappers/AudioNodeWrapper.cpp +0 -37
- package/common/cpp/wrappers/AudioNodeWrapper.h +0 -25
- package/common/cpp/wrappers/AudioParamWrapper.cpp +0 -42
- package/common/cpp/wrappers/AudioParamWrapper.h +0 -25
- package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +0 -23
- package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +0 -23
- package/common/cpp/wrappers/BaseAudioContextWrapper.cpp +0 -83
- package/common/cpp/wrappers/BaseAudioContextWrapper.h +0 -51
- package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +0 -60
- package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +0 -37
- package/common/cpp/wrappers/GainNodeWrapper.cpp +0 -14
- package/common/cpp/wrappers/GainNodeWrapper.h +0 -20
- package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +0 -44
- package/common/cpp/wrappers/OscillatorNodeWrapper.h +0 -31
- package/common/cpp/wrappers/PeriodicWaveWrapper.h +0 -17
- package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +0 -16
- package/common/cpp/wrappers/StereoPannerNodeWrapper.h +0 -21
package/android/CMakeLists.txt
CHANGED
|
@@ -21,12 +21,12 @@ file(GLOB_RECURSE SOURCE_FILES
|
|
|
21
21
|
"../common/cpp/*.h"
|
|
22
22
|
"../common/cpp/core/*.cpp"
|
|
23
23
|
"../common/cpp/core/*.h"
|
|
24
|
-
"../common/cpp/wrappers/*.cpp"
|
|
25
|
-
"../common/cpp/wrappers/*.h"
|
|
26
24
|
"../common/cpp/HostObjects/*.cpp"
|
|
27
25
|
"../common/cpp/HostObjects/*.h"
|
|
28
26
|
"../common/cpp/utils/*.cpp"
|
|
29
27
|
"../common/cpp/utils/*.h"
|
|
28
|
+
"../common/cpp/jsi/*.h"
|
|
29
|
+
"../common/cpp/jsi/*.cpp"
|
|
30
30
|
"../common/cpp/types/*.h"
|
|
31
31
|
)
|
|
32
32
|
|
|
@@ -13,14 +13,8 @@ AudioAPIInstaller::AudioAPIInstaller(
|
|
|
13
13
|
jsCallInvoker_(jsCallInvoker) {}
|
|
14
14
|
|
|
15
15
|
void AudioAPIInstaller::install() {
|
|
16
|
-
auto
|
|
17
|
-
std::make_shared<
|
|
18
|
-
|
|
19
|
-
audioAPIInstallerWrapper, rnRuntime_, jsCallInvoker_);
|
|
16
|
+
auto hostObject =
|
|
17
|
+
std::make_shared<AudioAPIInstallerHostObject>(rnRuntime_, jsCallInvoker_);
|
|
18
|
+
hostObject->install();
|
|
20
19
|
}
|
|
21
|
-
|
|
22
|
-
std::shared_ptr<AudioContext> AudioAPIInstaller::createAudioContext() {
|
|
23
|
-
return std::make_shared<AudioContext>();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
20
|
} // namespace audioapi
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
#include <utility>
|
|
9
9
|
|
|
10
10
|
#include "AudioAPIInstallerHostObject.h"
|
|
11
|
-
#include "AudioAPIInstallerWrapper.h"
|
|
12
11
|
#include "AudioContext.h"
|
|
13
12
|
|
|
14
13
|
namespace audioapi {
|
|
@@ -38,7 +37,6 @@ class AudioAPIInstaller : public jni::HybridClass<AudioAPIInstaller> {
|
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
std::shared_ptr<AudioContext> createAudioContext();
|
|
42
40
|
void install();
|
|
43
41
|
|
|
44
42
|
private:
|
|
@@ -6,46 +6,43 @@
|
|
|
6
6
|
#include <utility>
|
|
7
7
|
#include <vector>
|
|
8
8
|
|
|
9
|
-
#include
|
|
9
|
+
#include <JsiHostObject.h>
|
|
10
|
+
#include <JsiPromise.h>
|
|
10
11
|
#include "AudioContextHostObject.h"
|
|
11
|
-
#include "JsiPromise.h"
|
|
12
12
|
|
|
13
13
|
namespace audioapi {
|
|
14
14
|
using namespace facebook;
|
|
15
15
|
|
|
16
|
-
class
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
class AudioAPIInstallerHostObject
|
|
17
|
+
: public JsiHostObject,
|
|
18
|
+
public std::enable_shared_from_this<AudioAPIInstallerHostObject> {
|
|
19
19
|
public:
|
|
20
20
|
explicit AudioAPIInstallerHostObject(
|
|
21
|
-
const std::shared_ptr<AudioAPIInstallerWrapper> &wrapper,
|
|
22
21
|
jsi::Runtime *runtime,
|
|
23
|
-
const std::shared_ptr<react::CallInvoker> &jsInvoker)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
static void createAndInstallFromWrapper(
|
|
27
|
-
const std::shared_ptr<AudioAPIInstallerWrapper> &wrapper,
|
|
28
|
-
jsi::Runtime *rnRuntime,
|
|
29
|
-
const std::shared_ptr<react::CallInvoker> &jsInvoker) {
|
|
30
|
-
auto hostObject = std::make_shared<AudioAPIInstallerHostObject>(
|
|
31
|
-
wrapper, rnRuntime, jsInvoker);
|
|
32
|
-
auto object = jsi::Object::createFromHostObject(*rnRuntime, hostObject);
|
|
33
|
-
rnRuntime->global().setProperty(
|
|
34
|
-
*rnRuntime, "__AudioAPIInstaller", std::move(object));
|
|
35
|
-
}
|
|
36
|
-
#endif
|
|
22
|
+
const std::shared_ptr<react::CallInvoker> &jsInvoker)
|
|
23
|
+
: rnRuntime_(runtime) {
|
|
24
|
+
promiseVendor_ = std::make_shared<PromiseVendor>(runtime, jsInvoker);
|
|
37
25
|
|
|
38
|
-
|
|
26
|
+
addFunctions(
|
|
27
|
+
JSI_EXPORT_FUNCTION(AudioAPIInstallerHostObject, createAudioContext));
|
|
28
|
+
}
|
|
39
29
|
|
|
40
|
-
void
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
30
|
+
void install() {
|
|
31
|
+
auto object =
|
|
32
|
+
jsi::Object::createFromHostObject(*rnRuntime_, shared_from_this());
|
|
33
|
+
rnRuntime_->global().setProperty(
|
|
34
|
+
*rnRuntime_, "__AudioAPIInstaller", std::move(object));
|
|
35
|
+
}
|
|
44
36
|
|
|
45
|
-
|
|
37
|
+
JSI_HOST_FUNCTION(createAudioContext) {
|
|
38
|
+
auto audioContext = std::make_shared<AudioContext>();
|
|
39
|
+
auto audioContextHostObject =
|
|
40
|
+
std::make_shared<AudioContextHostObject>(audioContext, promiseVendor_);
|
|
41
|
+
return jsi::Object::createFromHostObject(runtime, audioContextHostObject);
|
|
42
|
+
}
|
|
46
43
|
|
|
47
44
|
private:
|
|
48
|
-
std::shared_ptr<
|
|
49
|
-
|
|
45
|
+
std::shared_ptr<PromiseVendor> promiseVendor_;
|
|
46
|
+
jsi::Runtime *rnRuntime_;
|
|
50
47
|
};
|
|
51
48
|
} // namespace audioapi
|
|
@@ -4,30 +4,96 @@
|
|
|
4
4
|
#include <memory>
|
|
5
5
|
#include <vector>
|
|
6
6
|
|
|
7
|
-
#include
|
|
7
|
+
#include <JsiHostObject.h>
|
|
8
|
+
#include "AudioBuffer.h"
|
|
8
9
|
|
|
9
10
|
namespace audioapi {
|
|
10
11
|
using namespace facebook;
|
|
11
12
|
|
|
12
|
-
class AudioBufferHostObject : public
|
|
13
|
+
class AudioBufferHostObject : public JsiHostObject {
|
|
13
14
|
public:
|
|
14
|
-
std::shared_ptr<
|
|
15
|
+
std::shared_ptr<AudioBuffer> audioBuffer_;
|
|
15
16
|
|
|
16
17
|
explicit AudioBufferHostObject(
|
|
17
|
-
const std::shared_ptr<
|
|
18
|
+
const std::shared_ptr<AudioBuffer> &audioBuffer)
|
|
19
|
+
: audioBuffer_(audioBuffer) {
|
|
20
|
+
addGetters(
|
|
21
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, sampleRate),
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, length),
|
|
23
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, duration),
|
|
24
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, numberOfChannels));
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
addFunctions(
|
|
27
|
+
JSI_EXPORT_FUNCTION(AudioBufferHostObject, getChannelData),
|
|
28
|
+
JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyFromChannel),
|
|
29
|
+
JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyToChannel));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
JSI_PROPERTY_GETTER(sampleRate) {
|
|
33
|
+
return {audioBuffer_->getSampleRate()};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
JSI_PROPERTY_GETTER(length) {
|
|
37
|
+
return {audioBuffer_->getLength()};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JSI_PROPERTY_GETTER(duration) {
|
|
41
|
+
return {audioBuffer_->getDuration()};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
JSI_PROPERTY_GETTER(numberOfChannels) {
|
|
45
|
+
return {audioBuffer_->getNumberOfChannels()};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
JSI_HOST_FUNCTION(getChannelData) {
|
|
49
|
+
int channel = static_cast<int>(args[0].getNumber());
|
|
50
|
+
float *channelData = audioBuffer_->getChannelData(channel);
|
|
51
|
+
|
|
52
|
+
auto array = jsi::Array(runtime, audioBuffer_->getLength());
|
|
53
|
+
for (int i = 0; i < audioBuffer_->getLength(); i++) {
|
|
54
|
+
array.setValueAtIndex(runtime, i, jsi::Value(channelData[i]));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return array;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
JSI_HOST_FUNCTION(copyFromChannel) {
|
|
61
|
+
auto destination = args[0].getObject(runtime).asArray(runtime);
|
|
62
|
+
auto destinationLength =
|
|
63
|
+
static_cast<int>(destination.getProperty(runtime, "length").asNumber());
|
|
64
|
+
auto channelNumber = static_cast<int>(args[1].getNumber());
|
|
65
|
+
auto startInChannel = static_cast<int>(args[2].getNumber());
|
|
66
|
+
|
|
67
|
+
auto *destinationData = new float[destinationLength];
|
|
68
|
+
|
|
69
|
+
audioBuffer_->copyFromChannel(
|
|
70
|
+
destinationData, destinationLength, channelNumber, startInChannel);
|
|
71
|
+
|
|
72
|
+
for (int i = 0; i < destinationLength; i++) {
|
|
73
|
+
destination.setValueAtIndex(runtime, i, jsi::Value(destinationData[i]));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return jsi::Value::undefined();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
JSI_HOST_FUNCTION(copyToChannel) {
|
|
80
|
+
auto source = args[0].getObject(runtime).asArray(runtime);
|
|
81
|
+
auto sourceLength =
|
|
82
|
+
static_cast<int>(source.getProperty(runtime, "length").asNumber());
|
|
83
|
+
auto channelNumber = static_cast<int>(args[1].getNumber());
|
|
84
|
+
auto startInChannel = static_cast<int>(args[2].getNumber());
|
|
85
|
+
|
|
86
|
+
auto *sourceData = new float[sourceLength];
|
|
20
87
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
88
|
+
for (int i = 0; i < sourceLength; i++) {
|
|
89
|
+
sourceData[i] =
|
|
90
|
+
static_cast<float>(source.getValueAtIndex(runtime, i).getNumber());
|
|
91
|
+
}
|
|
25
92
|
|
|
26
|
-
|
|
93
|
+
audioBuffer_->copyToChannel(
|
|
94
|
+
sourceData, sourceLength, channelNumber, startInChannel);
|
|
27
95
|
|
|
28
|
-
|
|
29
|
-
const std::shared_ptr<AudioBufferWrapper> &wrapper) {
|
|
30
|
-
return std::make_shared<AudioBufferHostObject>(wrapper);
|
|
96
|
+
return jsi::Value::undefined();
|
|
31
97
|
}
|
|
32
98
|
};
|
|
33
99
|
} // namespace audioapi
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
#include <vector>
|
|
5
5
|
|
|
6
6
|
#include "AudioBufferHostObject.h"
|
|
7
|
-
#include "
|
|
7
|
+
#include "AudioBufferSourceNode.h"
|
|
8
|
+
#include "AudioParamHostObject.h"
|
|
8
9
|
#include "AudioScheduledSourceNodeHostObject.h"
|
|
9
10
|
|
|
10
11
|
namespace audioapi {
|
|
@@ -14,24 +15,102 @@ class AudioBufferSourceNodeHostObject
|
|
|
14
15
|
: public AudioScheduledSourceNodeHostObject {
|
|
15
16
|
public:
|
|
16
17
|
explicit AudioBufferSourceNodeHostObject(
|
|
17
|
-
const std::shared_ptr<
|
|
18
|
+
const std::shared_ptr<AudioBufferSourceNode> &node)
|
|
19
|
+
: AudioScheduledSourceNodeHostObject(node) {
|
|
20
|
+
addGetters(
|
|
21
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
|
|
23
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
|
|
24
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd),
|
|
25
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, detune),
|
|
26
|
+
JSI_EXPORT_PROPERTY_GETTER(
|
|
27
|
+
AudioBufferSourceNodeHostObject, playbackRate));
|
|
28
|
+
addSetters(
|
|
29
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
|
|
30
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, buffer));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
JSI_PROPERTY_GETTER(loop) {
|
|
34
|
+
auto audioBufferSourceNode =
|
|
35
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
36
|
+
auto loop = audioBufferSourceNode->getLoop();
|
|
37
|
+
return {loop};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JSI_PROPERTY_GETTER(buffer) {
|
|
41
|
+
auto audioBufferSourceNode =
|
|
42
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
43
|
+
auto buffer = audioBufferSourceNode->getBuffer();
|
|
44
|
+
|
|
45
|
+
if (!buffer) {
|
|
46
|
+
return jsi::Value::null();
|
|
47
|
+
}
|
|
18
48
|
|
|
19
|
-
|
|
49
|
+
auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
|
|
50
|
+
return jsi::Object::createFromHostObject(runtime, bufferHostObject);
|
|
51
|
+
}
|
|
20
52
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
53
|
+
JSI_PROPERTY_GETTER(loopStart) {
|
|
54
|
+
auto audioBufferSourceNode =
|
|
55
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
56
|
+
auto loopStart = audioBufferSourceNode->getLoopStart();
|
|
57
|
+
return {loopStart};
|
|
58
|
+
}
|
|
25
59
|
|
|
26
|
-
|
|
60
|
+
JSI_PROPERTY_GETTER(loopEnd) {
|
|
61
|
+
auto audioBufferSourceNode =
|
|
62
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
63
|
+
auto loopEnd = audioBufferSourceNode->getLoopEnd();
|
|
64
|
+
return {loopEnd};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
JSI_PROPERTY_GETTER(detune) {
|
|
68
|
+
auto audioBufferSourceNode =
|
|
69
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
70
|
+
auto detune = audioBufferSourceNode->getDetuneParam();
|
|
71
|
+
auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
|
|
72
|
+
return jsi::Object::createFromHostObject(runtime, detuneHostObject);
|
|
73
|
+
}
|
|
27
74
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
75
|
+
JSI_PROPERTY_GETTER(playbackRate) {
|
|
76
|
+
auto audioBufferSourceNode =
|
|
77
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
78
|
+
auto playbackRate = audioBufferSourceNode->getPlaybackRateParam();
|
|
79
|
+
auto playbackRateHostObject =
|
|
80
|
+
std::make_shared<AudioParamHostObject>(playbackRate);
|
|
81
|
+
return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
|
|
31
82
|
}
|
|
32
83
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
84
|
+
JSI_PROPERTY_SETTER(loop) {
|
|
85
|
+
auto audioBufferSourceNode =
|
|
86
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
87
|
+
audioBufferSourceNode->setLoop(value.getBool());
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
JSI_PROPERTY_SETTER(buffer) {
|
|
91
|
+
auto audioBufferSourceNode =
|
|
92
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
93
|
+
if (value.isNull()) {
|
|
94
|
+
audioBufferSourceNode->setBuffer(std::shared_ptr<AudioBuffer>(nullptr));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
auto bufferHostObject =
|
|
99
|
+
value.getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
100
|
+
audioBufferSourceNode->setBuffer(bufferHostObject->audioBuffer_);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
JSI_PROPERTY_SETTER(loopStart) {
|
|
104
|
+
auto audioBufferSourceNode =
|
|
105
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
106
|
+
audioBufferSourceNode->setLoopStart(value.getNumber());
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
JSI_PROPERTY_SETTER(loopEnd) {
|
|
110
|
+
auto audioBufferSourceNode =
|
|
111
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
112
|
+
audioBufferSourceNode->setLoopEnd(value.getNumber());
|
|
113
|
+
}
|
|
36
114
|
};
|
|
115
|
+
|
|
37
116
|
} // namespace audioapi
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
#include <memory>
|
|
5
5
|
#include <vector>
|
|
6
6
|
|
|
7
|
-
#include "
|
|
7
|
+
#include "AudioContext.h"
|
|
8
8
|
#include "BaseAudioContextHostObject.h"
|
|
9
|
-
#include "JsiPromise.h"
|
|
10
9
|
|
|
11
10
|
namespace audioapi {
|
|
12
11
|
using namespace facebook;
|
|
@@ -14,26 +13,16 @@ using namespace facebook;
|
|
|
14
13
|
class AudioContextHostObject : public BaseAudioContextHostObject {
|
|
15
14
|
public:
|
|
16
15
|
explicit AudioContextHostObject(
|
|
17
|
-
const std::shared_ptr<
|
|
18
|
-
std::shared_ptr<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
void set(
|
|
23
|
-
jsi::Runtime &runtime,
|
|
24
|
-
const jsi::PropNameID &name,
|
|
25
|
-
const jsi::Value &value) override;
|
|
26
|
-
|
|
27
|
-
std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
|
|
28
|
-
|
|
29
|
-
static std::shared_ptr<AudioContextHostObject> createFromWrapper(
|
|
30
|
-
const std::shared_ptr<AudioContextWrapper> &wrapper,
|
|
31
|
-
std::shared_ptr<JsiPromise::PromiseVendor> promiseVendor) {
|
|
32
|
-
return std::make_shared<AudioContextHostObject>(wrapper, promiseVendor);
|
|
16
|
+
const std::shared_ptr<AudioContext> &audioContext,
|
|
17
|
+
const std::shared_ptr<PromiseVendor> &promiseVendor)
|
|
18
|
+
: BaseAudioContextHostObject(audioContext, promiseVendor) {
|
|
19
|
+
addFunctions(JSI_EXPORT_FUNCTION(AudioContextHostObject, close));
|
|
33
20
|
}
|
|
34
21
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
22
|
+
JSI_HOST_FUNCTION(close) {
|
|
23
|
+
auto audioContext = std::static_pointer_cast<AudioContext>(context_);
|
|
24
|
+
audioContext->close();
|
|
25
|
+
return jsi::Value::undefined();
|
|
26
|
+
}
|
|
38
27
|
};
|
|
39
28
|
} // namespace audioapi
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#include <memory>
|
|
4
4
|
#include <vector>
|
|
5
5
|
|
|
6
|
-
#include "
|
|
6
|
+
#include "AudioDestinationNode.h"
|
|
7
7
|
#include "AudioNodeHostObject.h"
|
|
8
8
|
|
|
9
9
|
namespace audioapi {
|
|
@@ -12,20 +12,7 @@ using namespace facebook;
|
|
|
12
12
|
class AudioDestinationNodeHostObject : public AudioNodeHostObject {
|
|
13
13
|
public:
|
|
14
14
|
explicit AudioDestinationNodeHostObject(
|
|
15
|
-
const std::shared_ptr<
|
|
16
|
-
|
|
17
|
-
jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
|
|
18
|
-
|
|
19
|
-
void set(
|
|
20
|
-
jsi::Runtime &runtime,
|
|
21
|
-
const jsi::PropNameID &name,
|
|
22
|
-
const jsi::Value &value) override;
|
|
23
|
-
|
|
24
|
-
std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
|
|
25
|
-
|
|
26
|
-
static std::shared_ptr<AudioDestinationNodeHostObject> createFromWrapper(
|
|
27
|
-
const std::shared_ptr<AudioDestinationNodeWrapper> &wrapper) {
|
|
28
|
-
return std::make_shared<AudioDestinationNodeHostObject>(wrapper);
|
|
29
|
-
}
|
|
15
|
+
const std::shared_ptr<AudioDestinationNode> &node)
|
|
16
|
+
: AudioNodeHostObject(node) {}
|
|
30
17
|
};
|
|
31
18
|
} // namespace audioapi
|
|
@@ -4,26 +4,63 @@
|
|
|
4
4
|
#include <memory>
|
|
5
5
|
#include <vector>
|
|
6
6
|
|
|
7
|
-
#include
|
|
7
|
+
#include <JsiHostObject.h>
|
|
8
|
+
#include "AudioNode.h"
|
|
8
9
|
|
|
9
10
|
namespace audioapi {
|
|
10
11
|
using namespace facebook;
|
|
11
12
|
|
|
12
|
-
class AudioNodeHostObject : public
|
|
13
|
+
class AudioNodeHostObject : public JsiHostObject {
|
|
13
14
|
public:
|
|
14
|
-
explicit AudioNodeHostObject(
|
|
15
|
-
|
|
15
|
+
explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
|
|
16
|
+
: node_(node) {
|
|
17
|
+
addGetters(
|
|
18
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
|
|
19
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
|
|
20
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCount),
|
|
21
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCountMode),
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelInterpretation));
|
|
23
|
+
addFunctions(
|
|
24
|
+
JSI_EXPORT_FUNCTION(AudioNodeHostObject, connect),
|
|
25
|
+
JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect));
|
|
26
|
+
}
|
|
16
27
|
|
|
17
|
-
|
|
28
|
+
JSI_PROPERTY_GETTER(numberOfInputs) {
|
|
29
|
+
return {node_->getNumberOfInputs()};
|
|
30
|
+
}
|
|
18
31
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const jsi::Value &value) override;
|
|
32
|
+
JSI_PROPERTY_GETTER(numberOfOutputs) {
|
|
33
|
+
return {node_->getNumberOfOutputs()};
|
|
34
|
+
}
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
JSI_PROPERTY_GETTER(channelCount) {
|
|
37
|
+
return {node_->getChannelCount()};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JSI_PROPERTY_GETTER(channelCountMode) {
|
|
41
|
+
return jsi::String::createFromUtf8(runtime, node_->getChannelCountMode());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
JSI_PROPERTY_GETTER(channelInterpretation) {
|
|
45
|
+
return jsi::String::createFromUtf8(
|
|
46
|
+
runtime, node_->getChannelInterpretation());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
JSI_HOST_FUNCTION(connect) {
|
|
50
|
+
auto node =
|
|
51
|
+
args[0].getObject(runtime).getHostObject<AudioNodeHostObject>(runtime);
|
|
52
|
+
node_->connect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
|
|
53
|
+
return jsi::Value::undefined();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
JSI_HOST_FUNCTION(disconnect) {
|
|
57
|
+
auto node =
|
|
58
|
+
args[0].getObject(runtime).getHostObject<AudioNodeHostObject>(runtime);
|
|
59
|
+
node_->disconnect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
|
|
60
|
+
return jsi::Value::undefined();
|
|
61
|
+
}
|
|
25
62
|
|
|
26
63
|
protected:
|
|
27
|
-
std::shared_ptr<
|
|
64
|
+
std::shared_ptr<AudioNode> node_;
|
|
28
65
|
};
|
|
29
66
|
} // namespace audioapi
|
|
@@ -4,31 +4,73 @@
|
|
|
4
4
|
#include <memory>
|
|
5
5
|
#include <vector>
|
|
6
6
|
|
|
7
|
-
#include
|
|
7
|
+
#include <JsiHostObject.h>
|
|
8
|
+
#include "AudioParam.h"
|
|
8
9
|
|
|
9
10
|
namespace audioapi {
|
|
10
11
|
using namespace facebook;
|
|
11
12
|
|
|
12
|
-
class AudioParamHostObject : public
|
|
13
|
+
class AudioParamHostObject : public JsiHostObject {
|
|
13
14
|
public:
|
|
14
|
-
explicit AudioParamHostObject(
|
|
15
|
-
|
|
15
|
+
explicit AudioParamHostObject(const std::shared_ptr<AudioParam> ¶m)
|
|
16
|
+
: param_(param) {
|
|
17
|
+
addGetters(
|
|
18
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, value),
|
|
19
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, defaultValue),
|
|
20
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, minValue),
|
|
21
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, maxValue));
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
addFunctions(
|
|
24
|
+
JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueAtTime),
|
|
25
|
+
JSI_EXPORT_FUNCTION(AudioParamHostObject, linearRampToValueAtTime),
|
|
26
|
+
JSI_EXPORT_FUNCTION(
|
|
27
|
+
AudioParamHostObject, exponentialRampToValueAtTime));
|
|
18
28
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioParamHostObject, value));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
JSI_PROPERTY_GETTER(value) {
|
|
33
|
+
return {param_->getValue()};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
JSI_PROPERTY_GETTER(defaultValue) {
|
|
37
|
+
return {param_->getDefaultValue()};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JSI_PROPERTY_GETTER(minValue) {
|
|
41
|
+
return {param_->getMinValue()};
|
|
42
|
+
}
|
|
23
43
|
|
|
24
|
-
|
|
44
|
+
JSI_PROPERTY_GETTER(maxValue) {
|
|
45
|
+
return {param_->getMaxValue()};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
JSI_HOST_FUNCTION(setValueAtTime) {
|
|
49
|
+
auto value = static_cast<float>(args[0].getNumber());
|
|
50
|
+
double startTime = args[1].getNumber();
|
|
51
|
+
param_->setValueAtTime(value, startTime);
|
|
52
|
+
return jsi::Value::undefined();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
JSI_HOST_FUNCTION(linearRampToValueAtTime) {
|
|
56
|
+
auto value = static_cast<float>(args[0].getNumber());
|
|
57
|
+
double endTime = args[1].getNumber();
|
|
58
|
+
param_->linearRampToValueAtTime(value, endTime);
|
|
59
|
+
return jsi::Value::undefined();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
JSI_HOST_FUNCTION(exponentialRampToValueAtTime) {
|
|
63
|
+
auto value = static_cast<float>(args[0].getNumber());
|
|
64
|
+
double endTime = args[1].getNumber();
|
|
65
|
+
param_->exponentialRampToValueAtTime(value, endTime);
|
|
66
|
+
return jsi::Value::undefined();
|
|
67
|
+
}
|
|
25
68
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return std::make_shared<AudioParamHostObject>(wrapper);
|
|
69
|
+
JSI_PROPERTY_SETTER(value) {
|
|
70
|
+
param_->setValue(static_cast<float>(value.getNumber()));
|
|
29
71
|
}
|
|
30
72
|
|
|
31
73
|
private:
|
|
32
|
-
std::shared_ptr<
|
|
74
|
+
std::shared_ptr<AudioParam> param_;
|
|
33
75
|
};
|
|
34
76
|
} // namespace audioapi
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
#include <vector>
|
|
5
5
|
|
|
6
6
|
#include "AudioNodeHostObject.h"
|
|
7
|
-
#include "
|
|
7
|
+
#include "AudioScheduledSourceNode.h"
|
|
8
8
|
|
|
9
9
|
namespace audioapi {
|
|
10
10
|
using namespace facebook;
|
|
@@ -12,20 +12,27 @@ using namespace facebook;
|
|
|
12
12
|
class AudioScheduledSourceNodeHostObject : public AudioNodeHostObject {
|
|
13
13
|
public:
|
|
14
14
|
explicit AudioScheduledSourceNodeHostObject(
|
|
15
|
-
const std::shared_ptr<
|
|
16
|
-
: AudioNodeHostObject(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
const std::shared_ptr<AudioScheduledSourceNode> &node)
|
|
16
|
+
: AudioNodeHostObject(node) {
|
|
17
|
+
addFunctions(
|
|
18
|
+
JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, start),
|
|
19
|
+
JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, stop));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
JSI_HOST_FUNCTION(start) {
|
|
23
|
+
auto time = args[0].getNumber();
|
|
24
|
+
auto audioScheduleSourceNode =
|
|
25
|
+
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
26
|
+
audioScheduleSourceNode->start(time);
|
|
27
|
+
return jsi::Value::undefined();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
JSI_HOST_FUNCTION(stop) {
|
|
31
|
+
auto time = args[0].getNumber();
|
|
32
|
+
auto audioScheduleSourceNode =
|
|
33
|
+
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
34
|
+
audioScheduleSourceNode->stop(time);
|
|
35
|
+
return jsi::Value::undefined();
|
|
36
|
+
}
|
|
30
37
|
};
|
|
31
38
|
} // namespace audioapi
|