react-native-audio-api 0.0.1 → 0.1.0

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.
Files changed (116) hide show
  1. package/README.md +58 -1
  2. package/RNAudioAPI.podspec +41 -0
  3. package/android/CMakeLists.txt +63 -0
  4. package/android/build.gradle +194 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/AndroidManifestNew.xml +2 -0
  8. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +22 -0
  9. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +48 -0
  10. package/android/src/main/cpp/AudioPlayer/AudioPlayer.cpp +45 -0
  11. package/android/src/main/cpp/AudioPlayer/AudioPlayer.h +30 -0
  12. package/android/src/main/cpp/OnLoad.cpp +9 -0
  13. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +14 -0
  14. package/android/src/main/java/com/swmansion/audioapi/module/AudioAPIInstaller.kt +21 -0
  15. package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +25 -0
  16. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +52 -0
  17. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +45 -0
  18. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +38 -0
  19. package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +16 -0
  20. package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +12 -0
  21. package/common/cpp/HostObjects/AudioBufferHostObject.cpp +143 -0
  22. package/common/cpp/HostObjects/AudioBufferHostObject.h +33 -0
  23. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +67 -0
  24. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +37 -0
  25. package/common/cpp/HostObjects/AudioContextHostObject.cpp +191 -0
  26. package/common/cpp/HostObjects/AudioContextHostObject.h +43 -0
  27. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +33 -0
  28. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +31 -0
  29. package/common/cpp/HostObjects/AudioNodeHostObject.cpp +108 -0
  30. package/common/cpp/HostObjects/AudioNodeHostObject.h +29 -0
  31. package/common/cpp/HostObjects/AudioParamHostObject.cpp +115 -0
  32. package/common/cpp/HostObjects/AudioParamHostObject.h +34 -0
  33. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +73 -0
  34. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +31 -0
  35. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +81 -0
  36. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +42 -0
  37. package/common/cpp/HostObjects/Constants.h +22 -0
  38. package/common/cpp/HostObjects/GainNodeHostObject.cpp +41 -0
  39. package/common/cpp/HostObjects/GainNodeHostObject.h +32 -0
  40. package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +67 -0
  41. package/common/cpp/HostObjects/OscillatorNodeHostObject.h +40 -0
  42. package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +41 -0
  43. package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +36 -0
  44. package/common/cpp/core/AudioBuffer.cpp +115 -0
  45. package/common/cpp/core/AudioBuffer.h +42 -0
  46. package/common/cpp/core/AudioBufferSourceNode.cpp +58 -0
  47. package/common/cpp/core/AudioBufferSourceNode.h +26 -0
  48. package/common/cpp/core/AudioContext.cpp +90 -0
  49. package/common/cpp/core/AudioContext.h +73 -0
  50. package/common/cpp/core/AudioDestinationNode.cpp +35 -0
  51. package/common/cpp/core/AudioDestinationNode.h +24 -0
  52. package/common/cpp/core/AudioNode.cpp +68 -0
  53. package/common/cpp/core/AudioNode.h +74 -0
  54. package/common/cpp/core/AudioParam.cpp +136 -0
  55. package/common/cpp/core/AudioParam.h +50 -0
  56. package/common/cpp/core/AudioScheduledSourceNode.cpp +39 -0
  57. package/common/cpp/core/AudioScheduledSourceNode.h +30 -0
  58. package/common/cpp/core/BiquadFilterNode.cpp +364 -0
  59. package/common/cpp/core/BiquadFilterNode.h +128 -0
  60. package/common/cpp/core/GainNode.cpp +30 -0
  61. package/common/cpp/core/GainNode.h +23 -0
  62. package/common/cpp/core/OscillatorNode.cpp +66 -0
  63. package/common/cpp/core/OscillatorNode.h +112 -0
  64. package/common/cpp/core/ParamChange.cpp +46 -0
  65. package/common/cpp/core/ParamChange.h +34 -0
  66. package/common/cpp/core/StereoPannerNode.cpp +58 -0
  67. package/common/cpp/core/StereoPannerNode.h +26 -0
  68. package/common/cpp/utils/VectorMath.cpp +609 -0
  69. package/common/cpp/utils/VectorMath.h +65 -0
  70. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +35 -0
  71. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +25 -0
  72. package/common/cpp/wrappers/AudioBufferWrapper.cpp +46 -0
  73. package/common/cpp/wrappers/AudioBufferWrapper.h +30 -0
  74. package/common/cpp/wrappers/AudioContextWrapper.cpp +70 -0
  75. package/common/cpp/wrappers/AudioContextWrapper.h +40 -0
  76. package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +16 -0
  77. package/common/cpp/wrappers/AudioNodeWrapper.cpp +37 -0
  78. package/common/cpp/wrappers/AudioNodeWrapper.h +25 -0
  79. package/common/cpp/wrappers/AudioParamWrapper.cpp +42 -0
  80. package/common/cpp/wrappers/AudioParamWrapper.h +25 -0
  81. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +23 -0
  82. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +23 -0
  83. package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +51 -0
  84. package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +32 -0
  85. package/common/cpp/wrappers/GainNodeWrapper.cpp +14 -0
  86. package/common/cpp/wrappers/GainNodeWrapper.h +20 -0
  87. package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +38 -0
  88. package/common/cpp/wrappers/OscillatorNodeWrapper.h +28 -0
  89. package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +16 -0
  90. package/common/cpp/wrappers/StereoPannerNodeWrapper.h +21 -0
  91. package/ios/AudioAPIModule.h +5 -0
  92. package/ios/AudioAPIModule.mm +44 -0
  93. package/ios/AudioPlayer/AudioPlayer.h +27 -0
  94. package/ios/AudioPlayer/AudioPlayer.m +121 -0
  95. package/ios/AudioPlayer/IOSAudioPlayer.h +29 -0
  96. package/ios/AudioPlayer/IOSAudioPlayer.mm +34 -0
  97. package/lib/module/index.js +39 -0
  98. package/lib/module/index.js.map +1 -0
  99. package/lib/module/modules/global.d.js +2 -0
  100. package/lib/module/modules/global.d.js.map +1 -0
  101. package/lib/module/types.js +2 -0
  102. package/lib/module/types.js.map +1 -0
  103. package/lib/module/utils/install.js +22 -0
  104. package/lib/module/utils/install.js.map +1 -0
  105. package/lib/typescript/index.d.ts +18 -0
  106. package/lib/typescript/index.d.ts.map +1 -0
  107. package/lib/typescript/types.d.ts +76 -0
  108. package/lib/typescript/types.d.ts.map +1 -0
  109. package/lib/typescript/utils/install.d.ts +7 -0
  110. package/lib/typescript/utils/install.d.ts.map +1 -0
  111. package/package.json +104 -5
  112. package/src/index.ts +79 -0
  113. package/src/modules/global.d.ts +10 -0
  114. package/src/types.ts +108 -0
  115. package/src/utils/install.ts +39 -0
  116. package/index.ts +0 -1
@@ -0,0 +1,108 @@
1
+ #include "AudioNodeHostObject.h"
2
+ #include "AudioContextHostObject.h"
3
+
4
+ namespace audioapi {
5
+ using namespace facebook;
6
+
7
+ AudioNodeHostObject::AudioNodeHostObject(
8
+ const std::shared_ptr<AudioNodeWrapper> &wrapper)
9
+ : wrapper_(wrapper) {}
10
+
11
+ std::vector<jsi::PropNameID> AudioNodeHostObject::getPropertyNames(
12
+ jsi::Runtime &runtime) {
13
+ std::vector<jsi::PropNameID> propertyNames;
14
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "connect"));
15
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "disconnect"));
16
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "numberOfInputs"));
17
+ propertyNames.push_back(
18
+ jsi::PropNameID::forAscii(runtime, "numberOfOutputs"));
19
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "channelCount"));
20
+ propertyNames.push_back(
21
+ jsi::PropNameID::forAscii(runtime, "channelCountMode"));
22
+ propertyNames.push_back(
23
+ jsi::PropNameID::forAscii(runtime, "channelInterpretation"));
24
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "context"));
25
+ return propertyNames;
26
+ }
27
+
28
+ jsi::Value AudioNodeHostObject::get(
29
+ jsi::Runtime &runtime,
30
+ const jsi::PropNameID &propNameId) {
31
+ auto propName = propNameId.utf8(runtime);
32
+
33
+ if (propName == "connect") {
34
+ return jsi::Function::createFromHostFunction(
35
+ runtime,
36
+ propNameId,
37
+ 1,
38
+ [this](
39
+ jsi::Runtime &rt,
40
+ const jsi::Value &thisValue,
41
+ const jsi::Value *args,
42
+ size_t count) -> jsi::Value {
43
+ auto node =
44
+ args[0].getObject(rt).getHostObject<AudioNodeHostObject>(rt);
45
+ wrapper_->connect(
46
+ std::shared_ptr<AudioNodeHostObject>(node)->wrapper_);
47
+ return jsi::Value::undefined();
48
+ });
49
+ }
50
+
51
+ if (propName == "disconnect") {
52
+ return jsi::Function::createFromHostFunction(
53
+ runtime,
54
+ propNameId,
55
+ 1,
56
+ [this](
57
+ jsi::Runtime &rt,
58
+ const jsi::Value &thisValue,
59
+ const jsi::Value *args,
60
+ size_t count) -> jsi::Value {
61
+ auto node =
62
+ args[0].getObject(rt).getHostObject<AudioNodeHostObject>(rt);
63
+ wrapper_->disconnect(
64
+ std::shared_ptr<AudioNodeHostObject>(node)->wrapper_);
65
+ return jsi::Value::undefined();
66
+ });
67
+ }
68
+
69
+ if (propName == "numberOfInputs") {
70
+ return {wrapper_->getNumberOfInputs()};
71
+ }
72
+
73
+ if (propName == "numberOfOutputs") {
74
+ return {wrapper_->getNumberOfOutputs()};
75
+ }
76
+
77
+ if (propName == "channelCount") {
78
+ return {wrapper_->getChannelCount()};
79
+ }
80
+
81
+ if (propName == "channelCountMode") {
82
+ return jsi::String::createFromUtf8(
83
+ runtime, wrapper_->getChannelCountMode());
84
+ }
85
+
86
+ if (propName == "channelInterpretation") {
87
+ return jsi::String::createFromUtf8(
88
+ runtime, wrapper_->getChannelInterpretation());
89
+ }
90
+
91
+ if (propName == "context") {
92
+ // TODO fix this
93
+ return jsi::Value::undefined();
94
+ }
95
+
96
+ throw std::runtime_error("Not yet implemented!");
97
+ }
98
+
99
+ void AudioNodeHostObject::set(
100
+ jsi::Runtime &runtime,
101
+ const jsi::PropNameID &propNameId,
102
+ const jsi::Value &value) {
103
+ auto propName = propNameId.utf8(runtime);
104
+
105
+ throw std::runtime_error("Not yet implemented!");
106
+ }
107
+
108
+ } // namespace audioapi
@@ -0,0 +1,29 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <memory>
5
+ #include <vector>
6
+
7
+ #include "AudioNodeWrapper.h"
8
+
9
+ namespace audioapi {
10
+ using namespace facebook;
11
+
12
+ class AudioNodeHostObject : public jsi::HostObject {
13
+ public:
14
+ explicit AudioNodeHostObject(
15
+ const std::shared_ptr<AudioNodeWrapper> &wrapper);
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
+ protected:
27
+ std::shared_ptr<AudioNodeWrapper> wrapper_;
28
+ };
29
+ } // namespace audioapi
@@ -0,0 +1,115 @@
1
+ #include "AudioParamHostObject.h"
2
+
3
+ namespace audioapi {
4
+ using namespace facebook;
5
+
6
+ AudioParamHostObject::AudioParamHostObject(
7
+ const std::shared_ptr<AudioParamWrapper> &wrapper)
8
+ : wrapper_(wrapper) {}
9
+
10
+ std::vector<jsi::PropNameID> AudioParamHostObject::getPropertyNames(
11
+ jsi::Runtime &runtime) {
12
+ std::vector<jsi::PropNameID> propertyNames;
13
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "value"));
14
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "defaultValue"));
15
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "minValue"));
16
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "maxValue"));
17
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "setValueAtTime"));
18
+ propertyNames.push_back(
19
+ jsi::PropNameID::forAscii(runtime, "linearRampToValueAtTime"));
20
+ propertyNames.push_back(
21
+ jsi::PropNameID::forAscii(runtime, "exponentialRampToValueAtTime"));
22
+ return propertyNames;
23
+ }
24
+
25
+ jsi::Value AudioParamHostObject::get(
26
+ jsi::Runtime &runtime,
27
+ const jsi::PropNameID &propNameId) {
28
+ auto propName = propNameId.utf8(runtime);
29
+
30
+ if (propName == "value") {
31
+ return {wrapper_->getValue()};
32
+ }
33
+
34
+ if (propName == "defaultValue") {
35
+ return {wrapper_->getDefaultValue()};
36
+ }
37
+
38
+ if (propName == "minValue") {
39
+ return {wrapper_->getMinValue()};
40
+ }
41
+
42
+ if (propName == "maxValue") {
43
+ return {wrapper_->getMaxValue()};
44
+ }
45
+
46
+ if (propName == "setValueAtTime") {
47
+ return jsi::Function::createFromHostFunction(
48
+ runtime,
49
+ propNameId,
50
+ 2,
51
+ [this](
52
+ jsi::Runtime &rt,
53
+ const jsi::Value &thisVal,
54
+ const jsi::Value *args,
55
+ size_t count) -> jsi::Value {
56
+ double value = args[0].getNumber();
57
+ double startTime = args[1].getNumber();
58
+ wrapper_->setValueAtTime(value, startTime);
59
+ return jsi::Value::undefined();
60
+ });
61
+ }
62
+
63
+ if (propName == "linearRampToValueAtTime") {
64
+ return jsi::Function::createFromHostFunction(
65
+ runtime,
66
+ propNameId,
67
+ 2,
68
+ [this](
69
+ jsi::Runtime &rt,
70
+ const jsi::Value &thisVal,
71
+ const jsi::Value *args,
72
+ size_t count) -> jsi::Value {
73
+ double value = args[0].getNumber();
74
+ double endTime = args[1].getNumber();
75
+ wrapper_->linearRampToValueAtTime(value, endTime);
76
+ return jsi::Value::undefined();
77
+ });
78
+ }
79
+
80
+ if (propName == "exponentialRampToValueAtTime") {
81
+ return jsi::Function::createFromHostFunction(
82
+ runtime,
83
+ propNameId,
84
+ 2,
85
+ [this](
86
+ jsi::Runtime &rt,
87
+ const jsi::Value &thisVal,
88
+ const jsi::Value *args,
89
+ size_t count) -> jsi::Value {
90
+ double value = args[0].getNumber();
91
+ double endTime = args[1].getNumber();
92
+ wrapper_->exponentialRampToValueAtTime(value, endTime);
93
+ return jsi::Value::undefined();
94
+ });
95
+ }
96
+
97
+ throw std::runtime_error("Not yet implemented!");
98
+ }
99
+
100
+ void AudioParamHostObject::set(
101
+ jsi::Runtime &runtime,
102
+ const jsi::PropNameID &propNameId,
103
+ const jsi::Value &value) {
104
+ auto propName = propNameId.utf8(runtime);
105
+
106
+ if (propName == "value") {
107
+ double paramValue = value.getNumber();
108
+ wrapper_->setValue(paramValue);
109
+ return;
110
+ }
111
+
112
+ throw std::runtime_error("Not yet implemented!");
113
+ }
114
+
115
+ } // namespace audioapi
@@ -0,0 +1,34 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <memory>
5
+ #include <vector>
6
+
7
+ #include "AudioParamWrapper.h"
8
+
9
+ namespace audioapi {
10
+ using namespace facebook;
11
+
12
+ class AudioParamHostObject : public jsi::HostObject {
13
+ public:
14
+ explicit AudioParamHostObject(
15
+ const std::shared_ptr<AudioParamWrapper> &wrapper);
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<AudioParamHostObject> createFromWrapper(
27
+ const std::shared_ptr<AudioParamWrapper> &wrapper) {
28
+ return std::make_shared<AudioParamHostObject>(wrapper);
29
+ }
30
+
31
+ private:
32
+ std::shared_ptr<AudioParamWrapper> wrapper_;
33
+ };
34
+ } // namespace audioapi
@@ -0,0 +1,73 @@
1
+ #include "AudioScheduledSourceNodeHostObject.h"
2
+
3
+ namespace audioapi {
4
+ using namespace facebook;
5
+
6
+ std::shared_ptr<AudioScheduledSourceNodeWrapper>
7
+ AudioScheduledSourceNodeHostObject::
8
+ getAudioScheduledSourceNodeWrapperFromAudioNodeWrapper() {
9
+ return std::static_pointer_cast<AudioScheduledSourceNodeWrapper>(wrapper_);
10
+ }
11
+
12
+ std::vector<jsi::PropNameID>
13
+ AudioScheduledSourceNodeHostObject::getPropertyNames(jsi::Runtime &runtime) {
14
+ std::vector<jsi::PropNameID> propertyNames =
15
+ AudioNodeHostObject::getPropertyNames(runtime);
16
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "start"));
17
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "stop"));
18
+ return propertyNames;
19
+ }
20
+
21
+ jsi::Value AudioScheduledSourceNodeHostObject::get(
22
+ jsi::Runtime &runtime,
23
+ const jsi::PropNameID &propNameId) {
24
+ auto propName = propNameId.utf8(runtime);
25
+
26
+ if (propName == "start") {
27
+ return jsi::Function::createFromHostFunction(
28
+ runtime,
29
+ propNameId,
30
+ 1,
31
+ [this](
32
+ jsi::Runtime &rt,
33
+ const jsi::Value &thisValue,
34
+ const jsi::Value *args,
35
+ size_t count) -> jsi::Value {
36
+ auto time = args[0].getNumber();
37
+ auto wrapper =
38
+ getAudioScheduledSourceNodeWrapperFromAudioNodeWrapper();
39
+ wrapper->start(time);
40
+ return jsi::Value::undefined();
41
+ });
42
+ }
43
+
44
+ if (propName == "stop") {
45
+ return jsi::Function::createFromHostFunction(
46
+ runtime,
47
+ propNameId,
48
+ 1,
49
+ [this](
50
+ jsi::Runtime &rt,
51
+ const jsi::Value &thisValue,
52
+ const jsi::Value *args,
53
+ size_t count) -> jsi::Value {
54
+ auto time = args[0].getNumber();
55
+ auto wrapper =
56
+ getAudioScheduledSourceNodeWrapperFromAudioNodeWrapper();
57
+ wrapper->stop(time);
58
+ return jsi::Value::undefined();
59
+ });
60
+ }
61
+
62
+ return AudioNodeHostObject::get(runtime, propNameId);
63
+ }
64
+
65
+ void AudioScheduledSourceNodeHostObject::set(
66
+ jsi::Runtime &runtime,
67
+ const jsi::PropNameID &propNameId,
68
+ const jsi::Value &value) {
69
+ auto propName = propNameId.utf8(runtime);
70
+
71
+ return AudioNodeHostObject::set(runtime, propNameId, value);
72
+ }
73
+ } // namespace audioapi
@@ -0,0 +1,31 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <vector>
5
+
6
+ #include "AudioNodeHostObject.h"
7
+ #include "AudioScheduledSourceNodeWrapper.h"
8
+
9
+ namespace audioapi {
10
+ using namespace facebook;
11
+
12
+ class AudioScheduledSourceNodeHostObject : public AudioNodeHostObject {
13
+ public:
14
+ explicit AudioScheduledSourceNodeHostObject(
15
+ const std::shared_ptr<AudioScheduledSourceNodeWrapper> &wrapper)
16
+ : AudioNodeHostObject(wrapper) {}
17
+
18
+ jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
19
+
20
+ void set(
21
+ jsi::Runtime &runtime,
22
+ const jsi::PropNameID &name,
23
+ const jsi::Value &value) override;
24
+
25
+ std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
26
+
27
+ private:
28
+ std::shared_ptr<AudioScheduledSourceNodeWrapper>
29
+ getAudioScheduledSourceNodeWrapperFromAudioNodeWrapper();
30
+ };
31
+ } // namespace audioapi
@@ -0,0 +1,81 @@
1
+ #include "BiquadFilterNodeHostObject.h"
2
+
3
+ namespace audioapi {
4
+ using namespace facebook;
5
+
6
+ std::shared_ptr<BiquadFilterNodeWrapper>
7
+ BiquadFilterNodeHostObject::getBiquadFilterNodeWrapperFromAudioNodeWrapper() {
8
+ return std::static_pointer_cast<BiquadFilterNodeWrapper>(wrapper_);
9
+ }
10
+
11
+ BiquadFilterNodeHostObject::BiquadFilterNodeHostObject(
12
+ const std::shared_ptr<BiquadFilterNodeWrapper> &wrapper)
13
+ : AudioNodeHostObject(wrapper) {
14
+ auto frequencyParam = wrapper->getFrequencyParam();
15
+ frequencyParam_ = AudioParamHostObject::createFromWrapper(frequencyParam);
16
+ auto detuneParam = wrapper->getDetuneParam();
17
+ detuneParam_ = AudioParamHostObject::createFromWrapper(detuneParam);
18
+ auto QParam = wrapper->getQParam();
19
+ QParam_ = AudioParamHostObject::createFromWrapper(QParam);
20
+ auto gainParam = wrapper->getGainParam();
21
+ gainParam_ = AudioParamHostObject::createFromWrapper(gainParam);
22
+ }
23
+
24
+ std::vector<jsi::PropNameID> BiquadFilterNodeHostObject::getPropertyNames(
25
+ jsi::Runtime &runtime) {
26
+ std::vector<jsi::PropNameID> propertyNames =
27
+ AudioNodeHostObject::getPropertyNames(runtime);
28
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "frequency"));
29
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "detune"));
30
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "Q"));
31
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "gain"));
32
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "type"));
33
+ return propertyNames;
34
+ }
35
+
36
+ jsi::Value BiquadFilterNodeHostObject::get(
37
+ jsi::Runtime &runtime,
38
+ const jsi::PropNameID &propNameId) {
39
+ auto propName = propNameId.utf8(runtime);
40
+
41
+ if (propName == "frequency") {
42
+ return jsi::Object::createFromHostObject(runtime, frequencyParam_);
43
+ }
44
+
45
+ if (propName == "detune") {
46
+ return jsi::Object::createFromHostObject(runtime, detuneParam_);
47
+ }
48
+
49
+ if (propName == "Q") {
50
+ return jsi::Object::createFromHostObject(runtime, QParam_);
51
+ }
52
+
53
+ if (propName == "gain") {
54
+ return jsi::Object::createFromHostObject(runtime, gainParam_);
55
+ }
56
+
57
+ if (propName == "type") {
58
+ auto wrapper = getBiquadFilterNodeWrapperFromAudioNodeWrapper();
59
+ auto waveType = wrapper->getType();
60
+ return jsi::String::createFromUtf8(runtime, waveType);
61
+ }
62
+
63
+ return AudioNodeHostObject::get(runtime, propNameId);
64
+ }
65
+
66
+ void BiquadFilterNodeHostObject::set(
67
+ jsi::Runtime &runtime,
68
+ const jsi::PropNameID &propNameId,
69
+ const jsi::Value &value) {
70
+ auto propName = propNameId.utf8(runtime);
71
+
72
+ if (propName == "type") {
73
+ std::string filterType = value.getString(runtime).utf8(runtime);
74
+ auto wrapper = getBiquadFilterNodeWrapperFromAudioNodeWrapper();
75
+ wrapper->setType(filterType);
76
+ return;
77
+ }
78
+
79
+ return AudioNodeHostObject::set(runtime, propNameId, value);
80
+ }
81
+ } // namespace audioapi
@@ -0,0 +1,42 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+ #include <vector>
6
+
7
+ #include "AudioNodeHostObject.h"
8
+ #include "AudioParamHostObject.h"
9
+ #include "BiquadFilterNodeWrapper.h"
10
+
11
+ namespace audioapi {
12
+ using namespace facebook;
13
+
14
+ class BiquadFilterNodeHostObject : public AudioNodeHostObject {
15
+ public:
16
+ explicit BiquadFilterNodeHostObject(
17
+ const std::shared_ptr<BiquadFilterNodeWrapper> &wrapper);
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<BiquadFilterNodeHostObject> createFromWrapper(
29
+ const std::shared_ptr<BiquadFilterNodeWrapper> &wrapper) {
30
+ return std::make_shared<BiquadFilterNodeHostObject>(wrapper);
31
+ }
32
+
33
+ private:
34
+ std::shared_ptr<AudioParamHostObject> frequencyParam_;
35
+ std::shared_ptr<AudioParamHostObject> detuneParam_;
36
+ std::shared_ptr<AudioParamHostObject> QParam_;
37
+ std::shared_ptr<AudioParamHostObject> gainParam_;
38
+
39
+ std::shared_ptr<BiquadFilterNodeWrapper>
40
+ getBiquadFilterNodeWrapperFromAudioNodeWrapper();
41
+ };
42
+ } // namespace audioapi
@@ -0,0 +1,22 @@
1
+ #pragma once
2
+
3
+ #include <cmath>
4
+ #include <limits>
5
+
6
+ // https://webaudio.github.io/web-audio-api/
7
+
8
+ namespace audioapi {
9
+ constexpr int SAMPLE_RATE = 44100;
10
+ constexpr int CHANNEL_COUNT = 2;
11
+ constexpr float MOST_POSITIVE_SINGLE_FLOAT =
12
+ static_cast<float>(std::numeric_limits<float>::max());
13
+ constexpr float NYQUIST_FREQUENCY = SAMPLE_RATE / 2.0;
14
+ static float MAX_DETUNE = 1200 * std::log2(MOST_POSITIVE_SINGLE_FLOAT);
15
+ constexpr float MAX_GAIN = MOST_POSITIVE_SINGLE_FLOAT;
16
+ constexpr float MAX_PAN = 1.0;
17
+ constexpr float MAX_FILTER_Q = MOST_POSITIVE_SINGLE_FLOAT;
18
+ constexpr float MAX_FILTER_FREQUENCY = NYQUIST_FREQUENCY;
19
+ constexpr float MIN_FILTER_FREQUENCY = 0.0;
20
+ static float MAX_FILTER_GAIN = 40 * std::log10(MOST_POSITIVE_SINGLE_FLOAT);
21
+ constexpr float MIN_FILTER_GAIN = -MAX_GAIN;
22
+ } // namespace audioapi
@@ -0,0 +1,41 @@
1
+ #include "GainNodeHostObject.h"
2
+
3
+ namespace audioapi {
4
+ using namespace facebook;
5
+
6
+ GainNodeHostObject::GainNodeHostObject(
7
+ const std::shared_ptr<GainNodeWrapper> &wrapper)
8
+ : AudioNodeHostObject(wrapper) {
9
+ auto gainParamWrapper = wrapper->getGainParam();
10
+ gainParam_ = AudioParamHostObject::createFromWrapper(gainParamWrapper);
11
+ }
12
+
13
+ std::vector<jsi::PropNameID> GainNodeHostObject::getPropertyNames(
14
+ jsi::Runtime &runtime) {
15
+ std::vector<jsi::PropNameID> propertyNames =
16
+ AudioNodeHostObject::getPropertyNames(runtime);
17
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "gain"));
18
+ return propertyNames;
19
+ }
20
+
21
+ jsi::Value GainNodeHostObject::get(
22
+ jsi::Runtime &runtime,
23
+ const jsi::PropNameID &propNameId) {
24
+ auto propName = propNameId.utf8(runtime);
25
+
26
+ if (propName == "gain") {
27
+ return jsi::Object::createFromHostObject(runtime, gainParam_);
28
+ }
29
+
30
+ return AudioNodeHostObject::get(runtime, propNameId);
31
+ }
32
+
33
+ void GainNodeHostObject::set(
34
+ jsi::Runtime &runtime,
35
+ const jsi::PropNameID &propNameId,
36
+ const jsi::Value &value) {
37
+ auto propName = propNameId.utf8(runtime);
38
+
39
+ return AudioNodeHostObject::set(runtime, propNameId, value);
40
+ }
41
+ } // namespace audioapi
@@ -0,0 +1,32 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <vector>
5
+
6
+ #include "AudioNodeHostObject.h"
7
+ #include "AudioParamHostObject.h"
8
+ #include "GainNodeWrapper.h"
9
+
10
+ namespace audioapi {
11
+ using namespace facebook;
12
+
13
+ class GainNodeHostObject : public AudioNodeHostObject {
14
+ protected:
15
+ std::shared_ptr<AudioParamHostObject> gainParam_;
16
+
17
+ public:
18
+ explicit GainNodeHostObject(const std::shared_ptr<GainNodeWrapper> &wrapper);
19
+
20
+ jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
21
+ void set(
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;
26
+
27
+ static std::shared_ptr<GainNodeHostObject> createFromWrapper(
28
+ const std::shared_ptr<GainNodeWrapper> &wrapper) {
29
+ return std::make_shared<GainNodeHostObject>(wrapper);
30
+ }
31
+ };
32
+ } // namespace audioapi
@@ -0,0 +1,67 @@
1
+ #include "OscillatorNodeHostObject.h"
2
+
3
+ namespace audioapi {
4
+ using namespace facebook;
5
+
6
+ std::shared_ptr<OscillatorNodeWrapper>
7
+ OscillatorNodeHostObject::getOscillatorNodeWrapperFromAudioNodeWrapper() {
8
+ return std::static_pointer_cast<OscillatorNodeWrapper>(wrapper_);
9
+ }
10
+
11
+ OscillatorNodeHostObject::OscillatorNodeHostObject(
12
+ const std::shared_ptr<OscillatorNodeWrapper> &wrapper)
13
+ : AudioScheduledSourceNodeHostObject(wrapper) {
14
+ auto frequencyParam = wrapper->getFrequencyParam();
15
+ frequencyParam_ = AudioParamHostObject::createFromWrapper(frequencyParam);
16
+ auto detuneParam = wrapper->getDetuneParam();
17
+ detuneParam_ = AudioParamHostObject::createFromWrapper(detuneParam);
18
+ }
19
+
20
+ std::vector<jsi::PropNameID> OscillatorNodeHostObject::getPropertyNames(
21
+ jsi::Runtime &runtime) {
22
+ std::vector<jsi::PropNameID> propertyNames =
23
+ AudioScheduledSourceNodeHostObject::getPropertyNames(runtime);
24
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "frequency"));
25
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "detune"));
26
+ propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "type"));
27
+ return propertyNames;
28
+ }
29
+
30
+ jsi::Value OscillatorNodeHostObject::get(
31
+ jsi::Runtime &runtime,
32
+ const jsi::PropNameID &propNameId) {
33
+ auto propName = propNameId.utf8(runtime);
34
+
35
+ if (propName == "frequency") {
36
+ return jsi::Object::createFromHostObject(runtime, frequencyParam_);
37
+ }
38
+
39
+ if (propName == "detune") {
40
+ return jsi::Object::createFromHostObject(runtime, detuneParam_);
41
+ }
42
+
43
+ if (propName == "type") {
44
+ auto wrapper = getOscillatorNodeWrapperFromAudioNodeWrapper();
45
+ auto waveType = wrapper->getType();
46
+ return jsi::String::createFromUtf8(runtime, waveType);
47
+ }
48
+
49
+ return AudioScheduledSourceNodeHostObject::get(runtime, propNameId);
50
+ }
51
+
52
+ void OscillatorNodeHostObject::set(
53
+ jsi::Runtime &runtime,
54
+ const jsi::PropNameID &propNameId,
55
+ const jsi::Value &value) {
56
+ auto propName = propNameId.utf8(runtime);
57
+
58
+ if (propName == "type") {
59
+ std::string waveType = value.getString(runtime).utf8(runtime);
60
+ auto wrapper = getOscillatorNodeWrapperFromAudioNodeWrapper();
61
+ wrapper->setType(waveType);
62
+ return;
63
+ }
64
+
65
+ return AudioScheduledSourceNodeHostObject::set(runtime, propNameId, value);
66
+ }
67
+ } // namespace audioapi