react-native-audio-api 0.0.1 → 0.2.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 (242) hide show
  1. package/README.md +60 -1
  2. package/RNAudioAPI.podspec +46 -0
  3. package/android/CMakeLists.txt +74 -0
  4. package/android/build.gradle +194 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/libs/fftw3/arm64-v8a/libfftw3.a +0 -0
  7. package/android/libs/fftw3/armeabi-v7a/libfftw3.a +0 -0
  8. package/android/libs/fftw3/x86/libfftw3.a +0 -0
  9. package/android/libs/fftw3/x86_64/libfftw3.a +0 -0
  10. package/android/libs/include/fftw3/fftw3.h +413 -0
  11. package/android/src/main/AndroidManifest.xml +3 -0
  12. package/android/src/main/AndroidManifestNew.xml +2 -0
  13. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +22 -0
  14. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +48 -0
  15. package/android/src/main/cpp/AudioPlayer/AudioPlayer.cpp +66 -0
  16. package/android/src/main/cpp/AudioPlayer/AudioPlayer.h +33 -0
  17. package/android/src/main/cpp/OnLoad.cpp +9 -0
  18. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +14 -0
  19. package/android/src/main/java/com/swmansion/audioapi/module/AudioAPIInstaller.kt +21 -0
  20. package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +25 -0
  21. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +52 -0
  22. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +45 -0
  23. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +38 -0
  24. package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +16 -0
  25. package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +12 -0
  26. package/common/cpp/HostObjects/AudioBufferHostObject.cpp +143 -0
  27. package/common/cpp/HostObjects/AudioBufferHostObject.h +33 -0
  28. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +79 -0
  29. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +37 -0
  30. package/common/cpp/HostObjects/AudioContextHostObject.cpp +54 -0
  31. package/common/cpp/HostObjects/AudioContextHostObject.h +36 -0
  32. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +33 -0
  33. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +31 -0
  34. package/common/cpp/HostObjects/AudioNodeHostObject.cpp +102 -0
  35. package/common/cpp/HostObjects/AudioNodeHostObject.h +29 -0
  36. package/common/cpp/HostObjects/AudioParamHostObject.cpp +115 -0
  37. package/common/cpp/HostObjects/AudioParamHostObject.h +34 -0
  38. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +73 -0
  39. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +31 -0
  40. package/common/cpp/HostObjects/BaseAudioContextHostObject.cpp +214 -0
  41. package/common/cpp/HostObjects/BaseAudioContextHostObject.h +39 -0
  42. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +125 -0
  43. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +42 -0
  44. package/common/cpp/HostObjects/Constants.h +22 -0
  45. package/common/cpp/HostObjects/GainNodeHostObject.cpp +41 -0
  46. package/common/cpp/HostObjects/GainNodeHostObject.h +32 -0
  47. package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +88 -0
  48. package/common/cpp/HostObjects/OscillatorNodeHostObject.h +41 -0
  49. package/common/cpp/HostObjects/PeriodicWaveHostObject.cpp +33 -0
  50. package/common/cpp/HostObjects/PeriodicWaveHostObject.h +33 -0
  51. package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +41 -0
  52. package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +36 -0
  53. package/common/cpp/core/AudioArray.cpp +103 -0
  54. package/common/cpp/core/AudioArray.h +42 -0
  55. package/common/cpp/core/AudioBuffer.cpp +55 -0
  56. package/common/cpp/core/AudioBuffer.h +40 -0
  57. package/common/cpp/core/AudioBufferSourceNode.cpp +135 -0
  58. package/common/cpp/core/AudioBufferSourceNode.h +30 -0
  59. package/common/cpp/core/AudioBus.cpp +357 -0
  60. package/common/cpp/core/AudioBus.h +63 -0
  61. package/common/cpp/core/AudioContext.cpp +24 -0
  62. package/common/cpp/core/AudioContext.h +16 -0
  63. package/common/cpp/core/AudioDestinationNode.cpp +45 -0
  64. package/common/cpp/core/AudioDestinationNode.h +32 -0
  65. package/common/cpp/core/AudioNode.cpp +222 -0
  66. package/common/cpp/core/AudioNode.h +74 -0
  67. package/common/cpp/core/AudioNodeManager.cpp +72 -0
  68. package/common/cpp/core/AudioNodeManager.h +35 -0
  69. package/common/cpp/core/AudioParam.cpp +133 -0
  70. package/common/cpp/core/AudioParam.h +50 -0
  71. package/common/cpp/core/AudioScheduledSourceNode.cpp +53 -0
  72. package/common/cpp/core/AudioScheduledSourceNode.h +34 -0
  73. package/common/cpp/core/BaseAudioContext.cpp +157 -0
  74. package/common/cpp/core/BaseAudioContext.h +80 -0
  75. package/common/cpp/core/BiquadFilterNode.cpp +385 -0
  76. package/common/cpp/core/BiquadFilterNode.h +124 -0
  77. package/common/cpp/core/GainNode.cpp +30 -0
  78. package/common/cpp/core/GainNode.h +25 -0
  79. package/common/cpp/core/OscillatorNode.cpp +75 -0
  80. package/common/cpp/core/OscillatorNode.h +72 -0
  81. package/common/cpp/core/ParamChange.cpp +46 -0
  82. package/common/cpp/core/ParamChange.h +34 -0
  83. package/common/cpp/core/PeriodicWave.cpp +362 -0
  84. package/common/cpp/core/PeriodicWave.h +119 -0
  85. package/common/cpp/core/StereoPannerNode.cpp +56 -0
  86. package/common/cpp/core/StereoPannerNode.h +26 -0
  87. package/common/cpp/types/BiquadFilterType.h +19 -0
  88. package/common/cpp/types/ChannelCountMode.h +10 -0
  89. package/common/cpp/types/ChannelInterpretation.h +10 -0
  90. package/common/cpp/types/ContextState.h +10 -0
  91. package/common/cpp/types/OscillatorType.h +11 -0
  92. package/common/cpp/utils/FFTFrame.h +63 -0
  93. package/common/cpp/utils/Locker.h +47 -0
  94. package/common/cpp/utils/VectorMath.cpp +678 -0
  95. package/common/cpp/utils/VectorMath.h +71 -0
  96. package/common/cpp/utils/android/FFTFrame.cpp +22 -0
  97. package/common/cpp/utils/ios/FFTFrame.cpp +24 -0
  98. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +45 -0
  99. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +26 -0
  100. package/common/cpp/wrappers/AudioBufferWrapper.cpp +46 -0
  101. package/common/cpp/wrappers/AudioBufferWrapper.h +30 -0
  102. package/common/cpp/wrappers/AudioContextWrapper.cpp +17 -0
  103. package/common/cpp/wrappers/AudioContextWrapper.h +19 -0
  104. package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +16 -0
  105. package/common/cpp/wrappers/AudioNodeWrapper.cpp +37 -0
  106. package/common/cpp/wrappers/AudioNodeWrapper.h +25 -0
  107. package/common/cpp/wrappers/AudioParamWrapper.cpp +42 -0
  108. package/common/cpp/wrappers/AudioParamWrapper.h +25 -0
  109. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +23 -0
  110. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +23 -0
  111. package/common/cpp/wrappers/BaseAudioContextWrapper.cpp +76 -0
  112. package/common/cpp/wrappers/BaseAudioContextWrapper.h +49 -0
  113. package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +60 -0
  114. package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +37 -0
  115. package/common/cpp/wrappers/GainNodeWrapper.cpp +14 -0
  116. package/common/cpp/wrappers/GainNodeWrapper.h +20 -0
  117. package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +44 -0
  118. package/common/cpp/wrappers/OscillatorNodeWrapper.h +31 -0
  119. package/common/cpp/wrappers/PeriodicWaveWrapper.h +17 -0
  120. package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +16 -0
  121. package/common/cpp/wrappers/StereoPannerNodeWrapper.h +21 -0
  122. package/ios/AudioAPIModule.h +24 -0
  123. package/ios/AudioAPIModule.mm +44 -0
  124. package/ios/AudioPlayer/AudioPlayer.h +28 -0
  125. package/ios/AudioPlayer/AudioPlayer.m +119 -0
  126. package/ios/AudioPlayer/IOSAudioPlayer.h +33 -0
  127. package/ios/AudioPlayer/IOSAudioPlayer.mm +57 -0
  128. package/lib/module/core/AudioBuffer.js +37 -0
  129. package/lib/module/core/AudioBuffer.js.map +1 -0
  130. package/lib/module/core/AudioBufferSourceNode.js +28 -0
  131. package/lib/module/core/AudioBufferSourceNode.js.map +1 -0
  132. package/lib/module/core/AudioContext.js +10 -0
  133. package/lib/module/core/AudioContext.js.map +1 -0
  134. package/lib/module/core/AudioDestinationNode.js +7 -0
  135. package/lib/module/core/AudioDestinationNode.js.map +1 -0
  136. package/lib/module/core/AudioNode.js +22 -0
  137. package/lib/module/core/AudioNode.js.map +1 -0
  138. package/lib/module/core/AudioParam.js +35 -0
  139. package/lib/module/core/AudioParam.js.map +1 -0
  140. package/lib/module/core/AudioScheduledSourceNode.js +28 -0
  141. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -0
  142. package/lib/module/core/BaseAudioContext.js +57 -0
  143. package/lib/module/core/BaseAudioContext.js.map +1 -0
  144. package/lib/module/core/BiquadFilterNode.js +25 -0
  145. package/lib/module/core/BiquadFilterNode.js.map +1 -0
  146. package/lib/module/core/GainNode.js +9 -0
  147. package/lib/module/core/GainNode.js.map +1 -0
  148. package/lib/module/core/OscillatorNode.js +24 -0
  149. package/lib/module/core/OscillatorNode.js.map +1 -0
  150. package/lib/module/core/PeriodicWave.js +8 -0
  151. package/lib/module/core/PeriodicWave.js.map +1 -0
  152. package/lib/module/core/StereoPannerNode.js +9 -0
  153. package/lib/module/core/StereoPannerNode.js.map +1 -0
  154. package/lib/module/core/types.js +2 -0
  155. package/lib/module/core/types.js.map +1 -0
  156. package/lib/module/errors/IndexSizeError.js +8 -0
  157. package/lib/module/errors/IndexSizeError.js.map +1 -0
  158. package/lib/module/errors/InvalidAccessError.js +8 -0
  159. package/lib/module/errors/InvalidAccessError.js.map +1 -0
  160. package/lib/module/errors/InvalidStateError.js +8 -0
  161. package/lib/module/errors/InvalidStateError.js.map +1 -0
  162. package/lib/module/errors/RangeError.js +8 -0
  163. package/lib/module/errors/RangeError.js.map +1 -0
  164. package/lib/module/errors/index.js +5 -0
  165. package/lib/module/errors/index.js.map +1 -0
  166. package/lib/module/index.js +18 -0
  167. package/lib/module/index.js.map +1 -0
  168. package/lib/module/interfaces.js +2 -0
  169. package/lib/module/interfaces.js.map +1 -0
  170. package/lib/module/modules/global.d.js +2 -0
  171. package/lib/module/modules/global.d.js.map +1 -0
  172. package/lib/module/utils/install.js +22 -0
  173. package/lib/module/utils/install.js.map +1 -0
  174. package/lib/typescript/core/AudioBuffer.d.ts +12 -0
  175. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -0
  176. package/lib/typescript/core/AudioBufferSourceNode.d.ts +12 -0
  177. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -0
  178. package/lib/typescript/core/AudioContext.d.ts +6 -0
  179. package/lib/typescript/core/AudioContext.d.ts.map +1 -0
  180. package/lib/typescript/core/AudioDestinationNode.d.ts +7 -0
  181. package/lib/typescript/core/AudioDestinationNode.d.ts.map +1 -0
  182. package/lib/typescript/core/AudioNode.d.ts +16 -0
  183. package/lib/typescript/core/AudioNode.d.ts.map +1 -0
  184. package/lib/typescript/core/AudioParam.d.ts +14 -0
  185. package/lib/typescript/core/AudioParam.d.ts.map +1 -0
  186. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +10 -0
  187. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -0
  188. package/lib/typescript/core/BaseAudioContext.d.ts +26 -0
  189. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -0
  190. package/lib/typescript/core/BiquadFilterNode.d.ts +16 -0
  191. package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -0
  192. package/lib/typescript/core/GainNode.d.ts +9 -0
  193. package/lib/typescript/core/GainNode.d.ts.map +1 -0
  194. package/lib/typescript/core/OscillatorNode.d.ts +15 -0
  195. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -0
  196. package/lib/typescript/core/PeriodicWave.d.ts +5 -0
  197. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -0
  198. package/lib/typescript/core/StereoPannerNode.d.ts +9 -0
  199. package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -0
  200. package/lib/typescript/core/types.d.ts +9 -0
  201. package/lib/typescript/core/types.d.ts.map +1 -0
  202. package/lib/typescript/errors/IndexSizeError.d.ts +5 -0
  203. package/lib/typescript/errors/IndexSizeError.d.ts.map +1 -0
  204. package/lib/typescript/errors/InvalidAccessError.d.ts +5 -0
  205. package/lib/typescript/errors/InvalidAccessError.d.ts.map +1 -0
  206. package/lib/typescript/errors/InvalidStateError.d.ts +5 -0
  207. package/lib/typescript/errors/InvalidStateError.d.ts.map +1 -0
  208. package/lib/typescript/errors/RangeError.d.ts +5 -0
  209. package/lib/typescript/errors/RangeError.d.ts.map +1 -0
  210. package/lib/typescript/errors/index.d.ts +5 -0
  211. package/lib/typescript/errors/index.d.ts.map +1 -0
  212. package/lib/typescript/index.d.ts +14 -0
  213. package/lib/typescript/index.d.ts.map +1 -0
  214. package/lib/typescript/interfaces.d.ts +78 -0
  215. package/lib/typescript/interfaces.d.ts.map +1 -0
  216. package/lib/typescript/utils/install.d.ts +7 -0
  217. package/lib/typescript/utils/install.d.ts.map +1 -0
  218. package/package.json +104 -5
  219. package/src/core/AudioBuffer.ts +68 -0
  220. package/src/core/AudioBufferSourceNode.ts +35 -0
  221. package/src/core/AudioContext.ts +12 -0
  222. package/src/core/AudioDestinationNode.ts +9 -0
  223. package/src/core/AudioNode.ts +38 -0
  224. package/src/core/AudioParam.ts +55 -0
  225. package/src/core/AudioScheduledSourceNode.ts +43 -0
  226. package/src/core/BaseAudioContext.ts +97 -0
  227. package/src/core/BiquadFilterNode.ts +49 -0
  228. package/src/core/GainNode.ts +13 -0
  229. package/src/core/OscillatorNode.ts +37 -0
  230. package/src/core/PeriodicWave.ts +10 -0
  231. package/src/core/StereoPannerNode.ts +13 -0
  232. package/src/core/types.ts +26 -0
  233. package/src/errors/IndexSizeError.ts +8 -0
  234. package/src/errors/InvalidAccessError.ts +8 -0
  235. package/src/errors/InvalidStateError.ts +8 -0
  236. package/src/errors/RangeError.ts +8 -0
  237. package/src/errors/index.ts +4 -0
  238. package/src/index.ts +25 -0
  239. package/src/interfaces.ts +120 -0
  240. package/src/modules/global.d.ts +10 -0
  241. package/src/utils/install.ts +39 -0
  242. package/index.ts +0 -1
@@ -0,0 +1,102 @@
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
+ return propertyNames;
25
+ }
26
+
27
+ jsi::Value AudioNodeHostObject::get(
28
+ jsi::Runtime &runtime,
29
+ const jsi::PropNameID &propNameId) {
30
+ auto propName = propNameId.utf8(runtime);
31
+
32
+ if (propName == "connect") {
33
+ return jsi::Function::createFromHostFunction(
34
+ runtime,
35
+ propNameId,
36
+ 1,
37
+ [this](
38
+ jsi::Runtime &rt,
39
+ const jsi::Value &thisValue,
40
+ const jsi::Value *args,
41
+ size_t count) -> jsi::Value {
42
+ auto node =
43
+ args[0].getObject(rt).getHostObject<AudioNodeHostObject>(rt);
44
+ wrapper_->connect(
45
+ std::shared_ptr<AudioNodeHostObject>(node)->wrapper_);
46
+ return jsi::Value::undefined();
47
+ });
48
+ }
49
+
50
+ if (propName == "disconnect") {
51
+ return jsi::Function::createFromHostFunction(
52
+ runtime,
53
+ propNameId,
54
+ 1,
55
+ [this](
56
+ jsi::Runtime &rt,
57
+ const jsi::Value &thisValue,
58
+ const jsi::Value *args,
59
+ size_t count) -> jsi::Value {
60
+ auto node =
61
+ args[0].getObject(rt).getHostObject<AudioNodeHostObject>(rt);
62
+ wrapper_->disconnect(
63
+ std::shared_ptr<AudioNodeHostObject>(node)->wrapper_);
64
+ return jsi::Value::undefined();
65
+ });
66
+ }
67
+
68
+ if (propName == "numberOfInputs") {
69
+ return {wrapper_->getNumberOfInputs()};
70
+ }
71
+
72
+ if (propName == "numberOfOutputs") {
73
+ return {wrapper_->getNumberOfOutputs()};
74
+ }
75
+
76
+ if (propName == "channelCount") {
77
+ return {wrapper_->getChannelCount()};
78
+ }
79
+
80
+ if (propName == "channelCountMode") {
81
+ return jsi::String::createFromUtf8(
82
+ runtime, wrapper_->getChannelCountMode());
83
+ }
84
+
85
+ if (propName == "channelInterpretation") {
86
+ return jsi::String::createFromUtf8(
87
+ runtime, wrapper_->getChannelInterpretation());
88
+ }
89
+
90
+ throw std::runtime_error("Not yet implemented!");
91
+ }
92
+
93
+ void AudioNodeHostObject::set(
94
+ jsi::Runtime &runtime,
95
+ const jsi::PropNameID &propNameId,
96
+ const jsi::Value &value) {
97
+ auto propName = propNameId.utf8(runtime);
98
+
99
+ throw std::runtime_error("Not yet implemented!");
100
+ }
101
+
102
+ } // 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,214 @@
1
+ #include "BaseAudioContextHostObject.h"
2
+
3
+ namespace audioapi {
4
+ using namespace facebook;
5
+
6
+ BaseAudioContextHostObject::BaseAudioContextHostObject(
7
+ const std::shared_ptr<BaseAudioContextWrapper> &wrapper)
8
+ : wrapper_(wrapper) {
9
+ auto destinationNodeWrapper = wrapper_->getDestination();
10
+ destination_ =
11
+ AudioDestinationNodeHostObject::createFromWrapper(destinationNodeWrapper);
12
+ }
13
+
14
+ std::vector<jsi::PropNameID> BaseAudioContextHostObject::getPropertyNames(
15
+ jsi::Runtime &runtime) {
16
+ std::vector<jsi::PropNameID> propertyNames;
17
+ propertyNames.push_back(jsi::PropNameID::forUtf8(runtime, "destination"));
18
+ propertyNames.push_back(jsi::PropNameID::forUtf8(runtime, "state"));
19
+ propertyNames.push_back(jsi::PropNameID::forUtf8(runtime, "sampleRate"));
20
+ propertyNames.push_back(jsi::PropNameID::forUtf8(runtime, "currentTime"));
21
+ propertyNames.push_back(
22
+ jsi::PropNameID::forUtf8(runtime, "createOscillator"));
23
+ propertyNames.push_back(jsi::PropNameID::forUtf8(runtime, "createGain"));
24
+ propertyNames.push_back(
25
+ jsi::PropNameID::forUtf8(runtime, "createStereoPanner"));
26
+ propertyNames.push_back(
27
+ jsi::PropNameID::forUtf8(runtime, "createBiquadFilter"));
28
+ propertyNames.push_back(
29
+ jsi::PropNameID::forUtf8(runtime, "createBufferSource"));
30
+ propertyNames.push_back(jsi::PropNameID::forUtf8(runtime, "createBuffer"));
31
+ propertyNames.push_back(
32
+ jsi::PropNameID::forUtf8(runtime, "createPeriodicWave"));
33
+ return propertyNames;
34
+ }
35
+
36
+ jsi::Value BaseAudioContextHostObject::get(
37
+ jsi::Runtime &runtime,
38
+ const jsi::PropNameID &propNameId) {
39
+ auto propName = propNameId.utf8(runtime);
40
+
41
+ if (propName == "destination") {
42
+ return jsi::Object::createFromHostObject(runtime, destination_);
43
+ }
44
+
45
+ if (propName == "state") {
46
+ return jsi::String::createFromUtf8(runtime, wrapper_->getState());
47
+ }
48
+
49
+ if (propName == "sampleRate") {
50
+ return {wrapper_->getSampleRate()};
51
+ }
52
+
53
+ if (propName == "currentTime") {
54
+ return {wrapper_->getCurrentTime()};
55
+ }
56
+
57
+ if (propName == "createOscillator") {
58
+ return jsi::Function::createFromHostFunction(
59
+ runtime,
60
+ propNameId,
61
+ 0,
62
+ [this](
63
+ jsi::Runtime &runtime,
64
+ const jsi::Value &thisValue,
65
+ const jsi::Value *arguments,
66
+ size_t count) -> jsi::Value {
67
+ auto oscillator = wrapper_->createOscillator();
68
+ auto oscillatorHostObject =
69
+ OscillatorNodeHostObject::createFromWrapper(oscillator);
70
+ return jsi::Object::createFromHostObject(
71
+ runtime, oscillatorHostObject);
72
+ });
73
+ }
74
+
75
+ if (propName == "createGain") {
76
+ return jsi::Function::createFromHostFunction(
77
+ runtime,
78
+ propNameId,
79
+ 0,
80
+ [this](
81
+ jsi::Runtime &runtime,
82
+ const jsi::Value &thisValue,
83
+ const jsi::Value *arguments,
84
+ size_t count) -> jsi::Value {
85
+ auto gain = wrapper_->createGain();
86
+ auto gainHostObject = GainNodeHostObject::createFromWrapper(gain);
87
+ return jsi::Object::createFromHostObject(runtime, gainHostObject);
88
+ });
89
+ }
90
+
91
+ if (propName == "createStereoPanner") {
92
+ return jsi::Function::createFromHostFunction(
93
+ runtime,
94
+ propNameId,
95
+ 0,
96
+ [this](
97
+ jsi::Runtime &runtime,
98
+ const jsi::Value &thisValue,
99
+ const jsi::Value *arguments,
100
+ size_t count) -> jsi::Value {
101
+ auto stereoPanner = wrapper_->createStereoPanner();
102
+ auto stereoPannerHostObject =
103
+ StereoPannerNodeHostObject::createFromWrapper(stereoPanner);
104
+ return jsi::Object::createFromHostObject(
105
+ runtime, stereoPannerHostObject);
106
+ });
107
+ }
108
+
109
+ if (propName == "createBiquadFilter") {
110
+ return jsi::Function::createFromHostFunction(
111
+ runtime,
112
+ propNameId,
113
+ 0,
114
+ [this](
115
+ jsi::Runtime &runtime,
116
+ const jsi::Value &thisValue,
117
+ const jsi::Value *arguments,
118
+ size_t count) -> jsi::Value {
119
+ auto biquadFilter = wrapper_->createBiquadFilter();
120
+ auto biquadFilterHostObject =
121
+ BiquadFilterNodeHostObject::createFromWrapper(biquadFilter);
122
+ return jsi::Object::createFromHostObject(
123
+ runtime, biquadFilterHostObject);
124
+ });
125
+ }
126
+
127
+ if (propName == "createBufferSource") {
128
+ return jsi::Function::createFromHostFunction(
129
+ runtime,
130
+ propNameId,
131
+ 0,
132
+ [this](
133
+ jsi::Runtime &runtime,
134
+ const jsi::Value &thisValue,
135
+ const jsi::Value *arguments,
136
+ size_t count) -> jsi::Value {
137
+ auto bufferSource = wrapper_->createBufferSource();
138
+ auto bufferSourceHostObject =
139
+ AudioBufferSourceNodeHostObject::createFromWrapper(bufferSource);
140
+ return jsi::Object::createFromHostObject(
141
+ runtime, bufferSourceHostObject);
142
+ });
143
+ }
144
+
145
+ if (propName == "createBuffer") {
146
+ return jsi::Function::createFromHostFunction(
147
+ runtime,
148
+ propNameId,
149
+ 3,
150
+ [this](
151
+ jsi::Runtime &runtime,
152
+ const jsi::Value &thisValue,
153
+ const jsi::Value *arguments,
154
+ size_t count) -> jsi::Value {
155
+ auto numberOfChannels = static_cast<int>(arguments[0].getNumber());
156
+ auto length = static_cast<int>(arguments[1].getNumber());
157
+ auto sampleRate = static_cast<int>(arguments[2].getNumber());
158
+ auto buffer =
159
+ wrapper_->createBuffer(numberOfChannels, length, sampleRate);
160
+ auto bufferHostObject =
161
+ AudioBufferHostObject::createFromWrapper(buffer);
162
+ return jsi::Object::createFromHostObject(runtime, bufferHostObject);
163
+ });
164
+ }
165
+
166
+ if (propName == "createPeriodicWave") {
167
+ return jsi::Function::createFromHostFunction(
168
+ runtime,
169
+ propNameId,
170
+ 3,
171
+ [this](
172
+ jsi::Runtime &runtime,
173
+ const jsi::Value &thisValue,
174
+ const jsi::Value *arguments,
175
+ size_t count) -> jsi::Value {
176
+ auto real = arguments[0].getObject(runtime).getArray(runtime);
177
+ auto imag = arguments[1].getObject(runtime).getArray(runtime);
178
+ auto disableNormalization = arguments[2].getBool();
179
+ auto length =
180
+ static_cast<int>(real.getProperty(runtime, "length").asNumber());
181
+
182
+ auto *realData = new float[length];
183
+ auto *imagData = new float[length];
184
+
185
+ for (size_t i = 0; i < real.length(runtime); i++) {
186
+ realData[i] = static_cast<float>(
187
+ real.getValueAtIndex(runtime, i).getNumber());
188
+ }
189
+ for (size_t i = 0; i < imag.length(runtime); i++) {
190
+ realData[i] = static_cast<float>(
191
+ imag.getValueAtIndex(runtime, i).getNumber());
192
+ }
193
+
194
+ auto periodicWave = wrapper_->createPeriodicWave(
195
+ realData, imagData, disableNormalization, length);
196
+ auto periodicWaveHostObject =
197
+ PeriodicWaveHostObject::createFromWrapper(periodicWave);
198
+ return jsi::Object::createFromHostObject(
199
+ runtime, periodicWaveHostObject);
200
+ });
201
+ }
202
+
203
+ throw std::runtime_error("Not yet implemented!");
204
+ }
205
+
206
+ void BaseAudioContextHostObject::set(
207
+ jsi::Runtime &runtime,
208
+ const jsi::PropNameID &propNameId,
209
+ const jsi::Value &value) {
210
+ auto propName = propNameId.utf8(runtime);
211
+
212
+ throw std::runtime_error("Not yet implemented!");
213
+ }
214
+ } // namespace audioapi
@@ -0,0 +1,39 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <memory>
5
+ #include <utility>
6
+ #include <vector>
7
+
8
+ #include "AudioBufferHostObject.h"
9
+ #include "AudioBufferSourceNodeHostObject.h"
10
+ #include "AudioDestinationNodeHostObject.h"
11
+ #include "BaseAudioContextWrapper.h"
12
+ #include "BiquadFilterNodeHostObject.h"
13
+ #include "GainNodeHostObject.h"
14
+ #include "OscillatorNodeHostObject.h"
15
+ #include "PeriodicWaveHostObject.h"
16
+ #include "StereoPannerNodeHostObject.h"
17
+
18
+ namespace audioapi {
19
+ using namespace facebook;
20
+
21
+ class BaseAudioContextHostObject : public jsi::HostObject {
22
+ public:
23
+ explicit BaseAudioContextHostObject(
24
+ const std::shared_ptr<BaseAudioContextWrapper> &wrapper);
25
+
26
+ jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
27
+
28
+ void set(
29
+ jsi::Runtime &runtime,
30
+ const jsi::PropNameID &name,
31
+ const jsi::Value &value) override;
32
+
33
+ std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
34
+
35
+ protected:
36
+ std::shared_ptr<BaseAudioContextWrapper> wrapper_;
37
+ std::shared_ptr<AudioDestinationNodeHostObject> destination_;
38
+ };
39
+ } // namespace audioapi