react-native-audio-api 0.3.0-rc1 → 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 +4 -4
- package/android/build.gradle +1 -3
- package/android/libs/include/miniaudio.h +92621 -0
- package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +10 -12
- package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +16 -9
- package/android/src/main/cpp/AudioDecoder/AudioDecoder.cpp +64 -0
- package/android/src/main/cpp/AudioDecoder/AudioDecoder.h +21 -0
- package/android/src/main/cpp/AudioPlayer/AudioPlayer.h +2 -2
- package/android/src/main/java/com/swmansion/audioapi/module/AudioAPIInstaller.kt +14 -4
- package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +2 -3
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +26 -27
- package/common/cpp/HostObjects/AudioBufferHostObject.h +79 -13
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +93 -14
- package/common/cpp/HostObjects/AudioContextHostObject.h +10 -19
- 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 -13
- 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.cpp +1 -0
- 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/BaseAudioContext.cpp +8 -5
- package/common/cpp/core/BaseAudioContext.h +5 -3
- 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/jsi/JsiPromise.cpp +65 -0
- 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 +3 -6
- package/ios/AudioDecoder/AudioDecoder.h +1 -1
- package/ios/AudioDecoder/AudioDecoder.m +14 -102
- package/ios/AudioDecoder/IOSAudioDecoder.h +2 -0
- package/ios/AudioDecoder/IOSAudioDecoder.mm +7 -1
- package/ios/AudioPlayer/AudioPlayer.m +3 -1
- package/lib/module/core/AudioBufferSourceNode.js +15 -0
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +2 -3
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/index.js +18 -3
- 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/core/BaseAudioContext.d.ts +2 -2
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/types.d.ts +0 -6
- package/lib/typescript/core/types.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +8 -4
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +5 -1
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/AudioBufferSourceNode.ts +23 -0
- package/src/core/BaseAudioContext.ts +3 -8
- package/src/core/types.ts +0 -7
- package/src/index.ts +26 -12
- package/src/interfaces.ts +6 -1
- package/android/libs/fftw3/x86/libfftw3.a +0 -0
- package/android/libs/fftw3/x86_64/libfftw3.a +0 -0
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +0 -54
- 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 -149
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +0 -79
- package/common/cpp/HostObjects/AudioContextHostObject.cpp +0 -54
- 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 -240
- 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.cpp +0 -59
- package/common/cpp/utils/JsiPromise.h +0 -42
- 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 -50
- 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/lib/module/utils/resolveAudioSource.js +0 -10
- package/lib/module/utils/resolveAudioSource.js.map +0 -1
- package/lib/typescript/utils/resolveAudioSource.d.ts +0 -3
- package/lib/typescript/utils/resolveAudioSource.d.ts.map +0 -1
- package/src/utils/resolveAudioSource.ts +0 -14
- /package/android/libs/{fftw3/arm64-v8a → arm64-v8a}/libfftw3.a +0 -0
- /package/android/libs/{fftw3/armeabi-v7a → armeabi-v7a}/libfftw3.a +0 -0
- /package/android/libs/include/{fftw3/fftw3.h → fftw3.h} +0 -0
|
@@ -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
|
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
#include <utility>
|
|
6
6
|
#include <vector>
|
|
7
7
|
|
|
8
|
-
#include
|
|
8
|
+
#include <JsiHostObject.h>
|
|
9
|
+
#include <JsiPromise.h>
|
|
10
|
+
|
|
9
11
|
#include "AudioBufferHostObject.h"
|
|
10
12
|
#include "AudioBufferSourceNodeHostObject.h"
|
|
11
13
|
#include "AudioDestinationNodeHostObject.h"
|
|
12
|
-
#include "
|
|
14
|
+
#include "BaseAudioContext.h"
|
|
13
15
|
#include "BiquadFilterNodeHostObject.h"
|
|
14
16
|
#include "GainNodeHostObject.h"
|
|
15
17
|
#include "OscillatorNodeHostObject.h"
|
|
@@ -19,23 +21,139 @@
|
|
|
19
21
|
namespace audioapi {
|
|
20
22
|
using namespace facebook;
|
|
21
23
|
|
|
22
|
-
class BaseAudioContextHostObject : public
|
|
24
|
+
class BaseAudioContextHostObject : public JsiHostObject {
|
|
23
25
|
public:
|
|
24
26
|
explicit BaseAudioContextHostObject(
|
|
25
|
-
const std::shared_ptr<
|
|
27
|
+
const std::shared_ptr<BaseAudioContext> &context,
|
|
28
|
+
const std::shared_ptr<PromiseVendor> &promiseVendor)
|
|
29
|
+
: context_(context), promiseVendor_(promiseVendor) {
|
|
30
|
+
addGetters(
|
|
31
|
+
JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, destination),
|
|
32
|
+
JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, state),
|
|
33
|
+
JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, sampleRate),
|
|
34
|
+
JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, currentTime));
|
|
35
|
+
|
|
36
|
+
addFunctions(
|
|
37
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createOscillator),
|
|
38
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createGain),
|
|
39
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createStereoPanner),
|
|
40
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBiquadFilter),
|
|
41
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferSource),
|
|
42
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
|
|
43
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
|
|
44
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, decodeAudioDataSource));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
JSI_PROPERTY_GETTER(destination) {
|
|
48
|
+
auto destination = std::make_shared<AudioDestinationNodeHostObject>(
|
|
49
|
+
context_->getDestination());
|
|
50
|
+
return jsi::Object::createFromHostObject(runtime, destination);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
JSI_PROPERTY_GETTER(state) {
|
|
54
|
+
return jsi::String::createFromUtf8(runtime, context_->getState());
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
JSI_PROPERTY_GETTER(sampleRate) {
|
|
58
|
+
return {context_->getSampleRate()};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
JSI_PROPERTY_GETTER(currentTime) {
|
|
62
|
+
return {context_->getCurrentTime()};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
JSI_HOST_FUNCTION(createOscillator) {
|
|
66
|
+
auto oscillator = context_->createOscillator();
|
|
67
|
+
auto oscillatorHostObject =
|
|
68
|
+
std::make_shared<OscillatorNodeHostObject>(oscillator);
|
|
69
|
+
return jsi::Object::createFromHostObject(runtime, oscillatorHostObject);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
JSI_HOST_FUNCTION(createGain) {
|
|
73
|
+
auto gain = context_->createGain();
|
|
74
|
+
auto gainHostObject = std::make_shared<GainNodeHostObject>(gain);
|
|
75
|
+
return jsi::Object::createFromHostObject(runtime, gainHostObject);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
JSI_HOST_FUNCTION(createStereoPanner) {
|
|
79
|
+
auto stereoPanner = context_->createStereoPanner();
|
|
80
|
+
auto stereoPannerHostObject =
|
|
81
|
+
std::make_shared<StereoPannerNodeHostObject>(stereoPanner);
|
|
82
|
+
return jsi::Object::createFromHostObject(runtime, stereoPannerHostObject);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
JSI_HOST_FUNCTION(createBiquadFilter) {
|
|
86
|
+
auto biquadFilter = context_->createBiquadFilter();
|
|
87
|
+
auto biquadFilterHostObject =
|
|
88
|
+
std::make_shared<BiquadFilterNodeHostObject>(biquadFilter);
|
|
89
|
+
return jsi::Object::createFromHostObject(runtime, biquadFilterHostObject);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
JSI_HOST_FUNCTION(createBufferSource) {
|
|
93
|
+
auto bufferSource = context_->createBufferSource();
|
|
94
|
+
auto bufferSourceHostObject =
|
|
95
|
+
std::make_shared<AudioBufferSourceNodeHostObject>(bufferSource);
|
|
96
|
+
return jsi::Object::createFromHostObject(runtime, bufferSourceHostObject);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
JSI_HOST_FUNCTION(createBuffer) {
|
|
100
|
+
auto numberOfChannels = static_cast<int>(args[0].getNumber());
|
|
101
|
+
auto length = static_cast<int>(args[1].getNumber());
|
|
102
|
+
auto sampleRate = static_cast<int>(args[2].getNumber());
|
|
103
|
+
auto buffer = context_->createBuffer(numberOfChannels, length, sampleRate);
|
|
104
|
+
auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
|
|
105
|
+
return jsi::Object::createFromHostObject(runtime, bufferHostObject);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
JSI_HOST_FUNCTION(createPeriodicWave) {
|
|
109
|
+
auto real = args[0].getObject(runtime).getArray(runtime);
|
|
110
|
+
auto imag = args[1].getObject(runtime).getArray(runtime);
|
|
111
|
+
auto disableNormalization = args[2].getBool();
|
|
112
|
+
auto length =
|
|
113
|
+
static_cast<int>(real.getProperty(runtime, "length").asNumber());
|
|
114
|
+
|
|
115
|
+
auto *realData = new float[length];
|
|
116
|
+
auto *imagData = new float[length];
|
|
117
|
+
|
|
118
|
+
for (size_t i = 0; i < real.length(runtime); i++) {
|
|
119
|
+
realData[i] =
|
|
120
|
+
static_cast<float>(real.getValueAtIndex(runtime, i).getNumber());
|
|
121
|
+
}
|
|
122
|
+
for (size_t i = 0; i < imag.length(runtime); i++) {
|
|
123
|
+
realData[i] =
|
|
124
|
+
static_cast<float>(imag.getValueAtIndex(runtime, i).getNumber());
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
auto periodicWave = context_->createPeriodicWave(
|
|
128
|
+
realData, imagData, disableNormalization, length);
|
|
129
|
+
auto periodicWaveHostObject =
|
|
130
|
+
std::make_shared<PeriodicWaveHostObject>(periodicWave);
|
|
131
|
+
return jsi::Object::createFromHostObject(runtime, periodicWaveHostObject);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
JSI_HOST_FUNCTION(decodeAudioDataSource) {
|
|
135
|
+
auto sourcePath = args[0].getString(runtime).utf8(runtime);
|
|
26
136
|
|
|
27
|
-
|
|
137
|
+
auto promise = promiseVendor_->createPromise(
|
|
138
|
+
[this, &runtime, sourcePath](std::shared_ptr<Promise> promise) {
|
|
139
|
+
std::thread([this,
|
|
140
|
+
&runtime,
|
|
141
|
+
sourcePath,
|
|
142
|
+
promise = std::move(promise)]() {
|
|
143
|
+
auto results = context_->decodeAudioDataSource(sourcePath);
|
|
144
|
+
auto audioBufferHostObject =
|
|
145
|
+
std::make_shared<AudioBufferHostObject>(results);
|
|
28
146
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
147
|
+
promise->resolve(jsi::Object::createFromHostObject(
|
|
148
|
+
runtime, audioBufferHostObject));
|
|
149
|
+
}).detach();
|
|
150
|
+
});
|
|
33
151
|
|
|
34
|
-
|
|
152
|
+
return promise;
|
|
153
|
+
}
|
|
35
154
|
|
|
36
155
|
protected:
|
|
37
|
-
std::shared_ptr<
|
|
38
|
-
std::shared_ptr<
|
|
39
|
-
std::shared_ptr<JsiPromise::PromiseVendor> promiseVendor_;
|
|
156
|
+
std::shared_ptr<BaseAudioContext> context_;
|
|
157
|
+
std::shared_ptr<PromiseVendor> promiseVendor_;
|
|
40
158
|
};
|
|
41
159
|
} // namespace audioapi
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
#include "AudioNodeHostObject.h"
|
|
8
8
|
#include "AudioParamHostObject.h"
|
|
9
|
-
#include "
|
|
9
|
+
#include "BiquadFilterNode.h"
|
|
10
10
|
|
|
11
11
|
namespace audioapi {
|
|
12
12
|
using namespace facebook;
|
|
@@ -14,29 +14,87 @@ using namespace facebook;
|
|
|
14
14
|
class BiquadFilterNodeHostObject : public AudioNodeHostObject {
|
|
15
15
|
public:
|
|
16
16
|
explicit BiquadFilterNodeHostObject(
|
|
17
|
-
const std::shared_ptr<
|
|
17
|
+
const std::shared_ptr<BiquadFilterNode> &node)
|
|
18
|
+
: AudioNodeHostObject(node) {
|
|
19
|
+
addGetters(
|
|
20
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, frequency),
|
|
21
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, detune),
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, Q),
|
|
23
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, gain),
|
|
24
|
+
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, type));
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
addFunctions(
|
|
27
|
+
JSI_EXPORT_FUNCTION(BiquadFilterNodeHostObject, getFrequencyResponse));
|
|
20
28
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
addSetters(JSI_EXPORT_PROPERTY_SETTER(BiquadFilterNodeHostObject, type));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
JSI_PROPERTY_GETTER(frequency) {
|
|
33
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
34
|
+
auto frequencyParam_ = std::make_shared<AudioParamHostObject>(
|
|
35
|
+
biquadFilterNode->getFrequencyParam());
|
|
36
|
+
return jsi::Object::createFromHostObject(runtime, frequencyParam_);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
JSI_PROPERTY_GETTER(detune) {
|
|
40
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
41
|
+
auto detuneParam_ = std::make_shared<AudioParamHostObject>(
|
|
42
|
+
biquadFilterNode->getDetuneParam());
|
|
43
|
+
return jsi::Object::createFromHostObject(runtime, detuneParam_);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
JSI_PROPERTY_GETTER(Q) {
|
|
47
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
48
|
+
auto QParam_ =
|
|
49
|
+
std::make_shared<AudioParamHostObject>(biquadFilterNode->getQParam());
|
|
50
|
+
return jsi::Object::createFromHostObject(runtime, QParam_);
|
|
51
|
+
}
|
|
25
52
|
|
|
26
|
-
|
|
53
|
+
JSI_PROPERTY_GETTER(gain) {
|
|
54
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
55
|
+
auto gainParam_ = std::make_shared<AudioParamHostObject>(
|
|
56
|
+
biquadFilterNode->getGainParam());
|
|
57
|
+
return jsi::Object::createFromHostObject(runtime, gainParam_);
|
|
58
|
+
}
|
|
27
59
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
60
|
+
JSI_PROPERTY_GETTER(type) {
|
|
61
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
62
|
+
auto type = biquadFilterNode->getType();
|
|
63
|
+
return jsi::String::createFromUtf8(runtime, type);
|
|
31
64
|
}
|
|
32
65
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
std::shared_ptr<AudioParamHostObject> gainParam_;
|
|
66
|
+
JSI_HOST_FUNCTION(getFrequencyResponse) {
|
|
67
|
+
auto frequencyArray = args[0].getObject(runtime).asArray(runtime);
|
|
68
|
+
auto magResponseOut = args[1].getObject(runtime).asArray(runtime);
|
|
69
|
+
auto phaseResponseOut = args[2].getObject(runtime).asArray(runtime);
|
|
38
70
|
|
|
39
|
-
|
|
40
|
-
|
|
71
|
+
std::vector<float> frequencyArrayVector(frequencyArray.length(runtime));
|
|
72
|
+
for (size_t i = 0; i < frequencyArray.length(runtime); i++) {
|
|
73
|
+
frequencyArrayVector[i] = static_cast<float>(
|
|
74
|
+
frequencyArray.getValueAtIndex(runtime, i).getNumber());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
std::vector<float> magResponseOutVector(magResponseOut.length(runtime));
|
|
78
|
+
std::vector<float> phaseResponseOutVector(phaseResponseOut.length(runtime));
|
|
79
|
+
|
|
80
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
81
|
+
biquadFilterNode->getFrequencyResponse(
|
|
82
|
+
frequencyArrayVector, magResponseOutVector, phaseResponseOutVector);
|
|
83
|
+
|
|
84
|
+
for (size_t i = 0; i < magResponseOutVector.size(); i++) {
|
|
85
|
+
magResponseOut.setValueAtIndex(runtime, i, magResponseOutVector[i]);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
for (size_t i = 0; i < phaseResponseOutVector.size(); i++) {
|
|
89
|
+
phaseResponseOut.setValueAtIndex(runtime, i, phaseResponseOutVector[i]);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return jsi::Value::undefined();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
JSI_PROPERTY_SETTER(type) {
|
|
96
|
+
auto biquadFilterNode = std::static_pointer_cast<BiquadFilterNode>(node_);
|
|
97
|
+
biquadFilterNode->setType(value.getString(runtime).utf8(runtime));
|
|
98
|
+
}
|
|
41
99
|
};
|
|
42
100
|
} // namespace audioapi
|
|
@@ -10,6 +10,8 @@ constexpr int SAMPLE_RATE = 44100;
|
|
|
10
10
|
constexpr int CHANNEL_COUNT = 2;
|
|
11
11
|
constexpr float MOST_POSITIVE_SINGLE_FLOAT =
|
|
12
12
|
static_cast<float>(std::numeric_limits<float>::max());
|
|
13
|
+
constexpr float MOST_NEGATIVE_SINGLE_FLOAT =
|
|
14
|
+
static_cast<float>(std::numeric_limits<float>::lowest());
|
|
13
15
|
constexpr float NYQUIST_FREQUENCY = SAMPLE_RATE / 2.0;
|
|
14
16
|
static float MAX_DETUNE = 1200 * std::log2(MOST_POSITIVE_SINGLE_FLOAT);
|
|
15
17
|
constexpr float MAX_GAIN = MOST_POSITIVE_SINGLE_FLOAT;
|
|
@@ -5,28 +5,23 @@
|
|
|
5
5
|
|
|
6
6
|
#include "AudioNodeHostObject.h"
|
|
7
7
|
#include "AudioParamHostObject.h"
|
|
8
|
-
#include "
|
|
8
|
+
#include "GainNode.h"
|
|
9
9
|
|
|
10
10
|
namespace audioapi {
|
|
11
11
|
using namespace facebook;
|
|
12
12
|
|
|
13
13
|
class GainNodeHostObject : public AudioNodeHostObject {
|
|
14
|
-
protected:
|
|
15
|
-
std::shared_ptr<AudioParamHostObject> gainParam_;
|
|
16
|
-
|
|
17
14
|
public:
|
|
18
|
-
explicit GainNodeHostObject(const std::shared_ptr<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
jsi::Runtime &runtime,
|
|
23
|
-
const jsi::PropNameID &name,
|
|
24
|
-
const jsi::Value &value) override;
|
|
25
|
-
std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
|
|
15
|
+
explicit GainNodeHostObject(const std::shared_ptr<GainNode> &node)
|
|
16
|
+
: AudioNodeHostObject(node) {
|
|
17
|
+
addGetters(JSI_EXPORT_PROPERTY_GETTER(GainNodeHostObject, gain));
|
|
18
|
+
}
|
|
26
19
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
JSI_PROPERTY_GETTER(gain) {
|
|
21
|
+
auto gainNode = std::static_pointer_cast<GainNode>(node_);
|
|
22
|
+
auto gainParam_ =
|
|
23
|
+
std::make_shared<AudioParamHostObject>(gainNode->getGainParam());
|
|
24
|
+
return jsi::Object::createFromHostObject(runtime, gainParam_);
|
|
30
25
|
}
|
|
31
26
|
};
|
|
32
27
|
} // namespace audioapi
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
#include "AudioParamHostObject.h"
|
|
8
8
|
#include "AudioScheduledSourceNodeHostObject.h"
|
|
9
|
-
#include "
|
|
9
|
+
#include "OscillatorNode.h"
|
|
10
10
|
#include "PeriodicWaveHostObject.h"
|
|
11
11
|
|
|
12
12
|
namespace audioapi {
|
|
@@ -14,28 +14,51 @@ using namespace facebook;
|
|
|
14
14
|
|
|
15
15
|
class OscillatorNodeHostObject : public AudioScheduledSourceNodeHostObject {
|
|
16
16
|
public:
|
|
17
|
-
explicit OscillatorNodeHostObject(
|
|
18
|
-
|
|
17
|
+
explicit OscillatorNodeHostObject(const std::shared_ptr<OscillatorNode> &node)
|
|
18
|
+
: AudioScheduledSourceNodeHostObject(node) {
|
|
19
|
+
addGetters(
|
|
20
|
+
JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, frequency),
|
|
21
|
+
JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, detune),
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, type));
|
|
19
23
|
|
|
20
|
-
|
|
24
|
+
addFunctions(
|
|
25
|
+
JSI_EXPORT_FUNCTION(OscillatorNodeHostObject, setPeriodicWave));
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
addSetters(JSI_EXPORT_PROPERTY_SETTER(OscillatorNodeHostObject, type));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
JSI_PROPERTY_GETTER(frequency) {
|
|
31
|
+
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
32
|
+
auto frequencyParam_ = std::make_shared<AudioParamHostObject>(
|
|
33
|
+
oscillatorNode->getFrequencyParam());
|
|
34
|
+
return jsi::Object::createFromHostObject(runtime, frequencyParam_);
|
|
35
|
+
}
|
|
26
36
|
|
|
27
|
-
|
|
37
|
+
JSI_PROPERTY_GETTER(detune) {
|
|
38
|
+
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
39
|
+
auto detuneParam_ = std::make_shared<AudioParamHostObject>(
|
|
40
|
+
oscillatorNode->getDetuneParam());
|
|
41
|
+
return jsi::Object::createFromHostObject(runtime, detuneParam_);
|
|
42
|
+
}
|
|
28
43
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
44
|
+
JSI_PROPERTY_GETTER(type) {
|
|
45
|
+
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
46
|
+
auto waveType = oscillatorNode->getType();
|
|
47
|
+
return jsi::String::createFromUtf8(runtime, waveType);
|
|
32
48
|
}
|
|
33
49
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
JSI_HOST_FUNCTION(setPeriodicWave) {
|
|
51
|
+
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
52
|
+
auto periodicWave =
|
|
53
|
+
args[0].getObject(runtime).getHostObject<PeriodicWaveHostObject>(
|
|
54
|
+
runtime);
|
|
55
|
+
oscillatorNode->setPeriodicWave(periodicWave->periodicWave_);
|
|
56
|
+
return jsi::Value::undefined();
|
|
57
|
+
}
|
|
37
58
|
|
|
38
|
-
|
|
39
|
-
|
|
59
|
+
JSI_PROPERTY_SETTER(type) {
|
|
60
|
+
auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
|
|
61
|
+
oscillatorNode->setType(value.getString(runtime).utf8(runtime));
|
|
62
|
+
}
|
|
40
63
|
};
|
|
41
64
|
} // namespace audioapi
|
|
@@ -4,30 +4,17 @@
|
|
|
4
4
|
#include <memory>
|
|
5
5
|
#include <vector>
|
|
6
6
|
|
|
7
|
-
#include "
|
|
7
|
+
#include "PeriodicWave.h"
|
|
8
8
|
|
|
9
9
|
namespace audioapi {
|
|
10
10
|
using namespace facebook;
|
|
11
11
|
|
|
12
12
|
class PeriodicWaveHostObject : public jsi::HostObject {
|
|
13
13
|
public:
|
|
14
|
-
std::shared_ptr<
|
|
14
|
+
std::shared_ptr<PeriodicWave> periodicWave_;
|
|
15
15
|
|
|
16
16
|
explicit PeriodicWaveHostObject(
|
|
17
|
-
const std::shared_ptr<
|
|
18
|
-
|
|
19
|
-
jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
|
|
20
|
-
|
|
21
|
-
void set(
|
|
22
|
-
jsi::Runtime &runtime,
|
|
23
|
-
const jsi::PropNameID &name,
|
|
24
|
-
const jsi::Value &value) override;
|
|
25
|
-
|
|
26
|
-
std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
|
|
27
|
-
|
|
28
|
-
static std::shared_ptr<PeriodicWaveHostObject> createFromWrapper(
|
|
29
|
-
const std::shared_ptr<PeriodicWaveWrapper> &wrapper) {
|
|
30
|
-
return std::make_shared<PeriodicWaveHostObject>(wrapper);
|
|
31
|
-
}
|
|
17
|
+
const std::shared_ptr<PeriodicWave> &periodicWave)
|
|
18
|
+
: periodicWave_(periodicWave) {}
|
|
32
19
|
};
|
|
33
20
|
} // namespace audioapi
|