react-native-audio-api 0.3.0-rc2 → 0.3.2

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 (197) hide show
  1. package/RNAudioAPI.podspec +40 -29
  2. package/android/CMakeLists.txt +17 -21
  3. package/android/build.gradle +26 -9
  4. package/android/src/main/cpp/OnLoad.cpp +1 -1
  5. package/android/src/main/cpp/core/AudioAPIInstaller.cpp +37 -0
  6. package/android/src/main/cpp/{AudioAPIInstaller → core}/AudioAPIInstaller.h +5 -16
  7. package/android/src/main/cpp/{AudioDecoder → core}/AudioDecoder.cpp +0 -8
  8. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +2 -0
  9. package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +6 -4
  10. package/common/cpp/HostObjects/AudioAPIInstallerHostObject.h +48 -0
  11. package/common/cpp/HostObjects/AudioBufferHostObject.h +79 -13
  12. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +93 -14
  13. package/common/cpp/HostObjects/AudioContextHostObject.h +10 -21
  14. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +3 -16
  15. package/common/cpp/HostObjects/AudioNodeHostObject.h +48 -11
  16. package/common/cpp/HostObjects/AudioParamHostObject.h +93 -14
  17. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +23 -16
  18. package/common/cpp/HostObjects/BaseAudioContextHostObject.h +131 -14
  19. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +76 -18
  20. package/common/cpp/HostObjects/GainNodeHostObject.h +10 -15
  21. package/common/cpp/HostObjects/OscillatorNodeHostObject.h +40 -17
  22. package/common/cpp/HostObjects/PeriodicWaveHostObject.h +4 -17
  23. package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +10 -17
  24. package/common/cpp/core/AudioBufferSourceNode.cpp +181 -73
  25. package/common/cpp/core/AudioBufferSourceNode.h +41 -1
  26. package/{android/src/main/cpp/AudioDecoder → common/cpp/core}/AudioDecoder.h +1 -3
  27. package/common/cpp/core/AudioDestinationNode.h +1 -1
  28. package/common/cpp/core/AudioParam.cpp +218 -58
  29. package/common/cpp/core/AudioParam.h +19 -15
  30. package/common/cpp/core/AudioScheduledSourceNode.cpp +94 -21
  31. package/common/cpp/core/AudioScheduledSourceNode.h +16 -5
  32. package/common/cpp/core/BaseAudioContext.cpp +3 -13
  33. package/common/cpp/core/BaseAudioContext.h +2 -4
  34. package/common/cpp/core/BiquadFilterNode.cpp +5 -7
  35. package/common/cpp/{HostObjects → core}/Constants.h +2 -2
  36. package/common/cpp/core/GainNode.cpp +1 -1
  37. package/common/cpp/core/OscillatorNode.cpp +11 -5
  38. package/common/cpp/core/ParamChangeEvent.cpp +58 -0
  39. package/common/cpp/core/{ParamChange.h → ParamChangeEvent.h} +11 -5
  40. package/common/cpp/core/StereoPannerNode.cpp +1 -1
  41. package/common/cpp/jsi/JsiHostObject.cpp +90 -0
  42. package/common/cpp/jsi/JsiHostObject.h +100 -0
  43. package/common/cpp/{utils → jsi}/JsiPromise.cpp +10 -9
  44. package/common/cpp/jsi/JsiPromise.h +48 -0
  45. package/common/cpp/jsi/RuntimeAwareCache.h +57 -0
  46. package/common/cpp/jsi/RuntimeLifecycleMonitor.cpp +61 -0
  47. package/common/cpp/jsi/RuntimeLifecycleMonitor.h +32 -0
  48. package/common/cpp/types/BiquadFilterType.h +0 -4
  49. package/common/cpp/types/ChannelCountMode.h +0 -3
  50. package/common/cpp/types/ChannelInterpretation.h +0 -3
  51. package/common/cpp/types/ContextState.h +0 -3
  52. package/common/cpp/types/OscillatorType.h +0 -4
  53. package/common/cpp/types/ParamChangeEventType.h +13 -0
  54. package/common/cpp/utils/AudioUtils.cpp +26 -0
  55. package/common/cpp/utils/AudioUtils.h +12 -0
  56. package/common/cpp/utils/{ios/FFTFrame.cpp → FFTFrame.cpp} +30 -3
  57. package/common/cpp/utils/VectorMath.h +7 -33
  58. package/ios/AudioAPIModule.h +4 -12
  59. package/ios/AudioAPIModule.mm +26 -25
  60. package/ios/core/AudioDecoder.mm +45 -0
  61. package/ios/{AudioPlayer → core}/AudioPlayer.m +2 -1
  62. package/lib/module/core/AudioBuffer.js +3 -1
  63. package/lib/module/core/AudioBuffer.js.map +1 -1
  64. package/lib/module/core/AudioBufferSourceNode.js +19 -2
  65. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  66. package/lib/module/core/AudioContext.js +3 -1
  67. package/lib/module/core/AudioContext.js.map +1 -1
  68. package/lib/module/core/AudioDestinationNode.js +4 -6
  69. package/lib/module/core/AudioDestinationNode.js.map +1 -1
  70. package/lib/module/core/AudioNode.js +3 -1
  71. package/lib/module/core/AudioNode.js.map +1 -1
  72. package/lib/module/core/AudioParam.js +27 -1
  73. package/lib/module/core/AudioParam.js.map +1 -1
  74. package/lib/module/core/AudioScheduledSourceNode.js +4 -5
  75. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  76. package/lib/module/core/BaseAudioContext.js +11 -9
  77. package/lib/module/core/BaseAudioContext.js.map +1 -1
  78. package/lib/module/core/BiquadFilterNode.js +5 -3
  79. package/lib/module/core/BiquadFilterNode.js.map +1 -1
  80. package/lib/module/core/GainNode.js +4 -2
  81. package/lib/module/core/GainNode.js.map +1 -1
  82. package/lib/module/core/OscillatorNode.js +5 -3
  83. package/lib/module/core/OscillatorNode.js.map +1 -1
  84. package/lib/module/core/PeriodicWave.js +2 -0
  85. package/lib/module/core/PeriodicWave.js.map +1 -1
  86. package/lib/module/core/StereoPannerNode.js +4 -2
  87. package/lib/module/core/StereoPannerNode.js.map +1 -1
  88. package/lib/module/core/types.js +1 -1
  89. package/lib/module/errors/IndexSizeError.js +2 -0
  90. package/lib/module/errors/IndexSizeError.js.map +1 -1
  91. package/lib/module/errors/InvalidAccessError.js +2 -0
  92. package/lib/module/errors/InvalidAccessError.js.map +1 -1
  93. package/lib/module/errors/InvalidStateError.js +2 -0
  94. package/lib/module/errors/InvalidStateError.js.map +1 -1
  95. package/lib/module/errors/RangeError.js +2 -0
  96. package/lib/module/errors/RangeError.js.map +1 -1
  97. package/lib/module/errors/index.js +6 -4
  98. package/lib/module/errors/index.js.map +1 -1
  99. package/lib/module/index.js +35 -10
  100. package/lib/module/index.js.map +1 -1
  101. package/lib/module/index.native.js +16 -14
  102. package/lib/module/index.native.js.map +1 -1
  103. package/lib/module/interfaces.js +2 -0
  104. package/lib/module/specs/global.d.js +4 -0
  105. package/lib/module/{modules → specs}/global.d.js.map +1 -1
  106. package/lib/module/{utils → specs}/install.js +5 -9
  107. package/lib/module/specs/install.js.map +1 -0
  108. package/lib/typescript/core/AudioBuffer.d.ts +2 -0
  109. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -1
  110. package/lib/typescript/core/AudioBufferSourceNode.d.ts +7 -0
  111. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  112. package/lib/typescript/core/AudioDestinationNode.d.ts +0 -3
  113. package/lib/typescript/core/AudioDestinationNode.d.ts.map +1 -1
  114. package/lib/typescript/core/AudioParam.d.ts +4 -0
  115. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  116. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +0 -3
  117. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
  118. package/lib/typescript/core/PeriodicWave.d.ts +2 -0
  119. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -1
  120. package/lib/typescript/index.d.ts +13 -3
  121. package/lib/typescript/index.d.ts.map +1 -1
  122. package/lib/typescript/interfaces.d.ts +8 -0
  123. package/lib/typescript/interfaces.d.ts.map +1 -1
  124. package/lib/typescript/{utils → specs}/install.d.ts.map +1 -1
  125. package/metro-config/index.d.ts +5 -0
  126. package/metro-config/index.js +41 -0
  127. package/metro-config/tsconfig.json +3 -0
  128. package/package.json +50 -16
  129. package/scripts/audioapi_utils.rb +56 -0
  130. package/src/core/AudioBufferSourceNode.ts +23 -0
  131. package/src/core/AudioDestinationNode.ts +1 -7
  132. package/src/core/AudioParam.ts +48 -0
  133. package/src/core/AudioScheduledSourceNode.ts +0 -5
  134. package/src/index.native.ts +1 -1
  135. package/src/index.ts +54 -13
  136. package/src/interfaces.ts +17 -0
  137. package/src/{modules → specs}/global.d.ts +2 -0
  138. package/src/{utils → specs}/install.ts +4 -11
  139. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +0 -26
  140. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +0 -58
  141. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +0 -51
  142. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +0 -38
  143. package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +0 -16
  144. package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +0 -12
  145. package/common/cpp/HostObjects/AudioBufferHostObject.cpp +0 -150
  146. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +0 -79
  147. package/common/cpp/HostObjects/AudioContextHostObject.cpp +0 -55
  148. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +0 -33
  149. package/common/cpp/HostObjects/AudioNodeHostObject.cpp +0 -102
  150. package/common/cpp/HostObjects/AudioParamHostObject.cpp +0 -115
  151. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +0 -73
  152. package/common/cpp/HostObjects/BaseAudioContextHostObject.cpp +0 -250
  153. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +0 -125
  154. package/common/cpp/HostObjects/GainNodeHostObject.cpp +0 -41
  155. package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +0 -88
  156. package/common/cpp/HostObjects/PeriodicWaveHostObject.cpp +0 -33
  157. package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +0 -41
  158. package/common/cpp/core/ParamChange.cpp +0 -46
  159. package/common/cpp/utils/JsiPromise.h +0 -48
  160. package/common/cpp/utils/android/FFTFrame.cpp +0 -23
  161. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +0 -45
  162. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +0 -26
  163. package/common/cpp/wrappers/AudioBufferWrapper.cpp +0 -46
  164. package/common/cpp/wrappers/AudioBufferWrapper.h +0 -30
  165. package/common/cpp/wrappers/AudioContextWrapper.cpp +0 -17
  166. package/common/cpp/wrappers/AudioContextWrapper.h +0 -19
  167. package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +0 -16
  168. package/common/cpp/wrappers/AudioNodeWrapper.cpp +0 -37
  169. package/common/cpp/wrappers/AudioNodeWrapper.h +0 -25
  170. package/common/cpp/wrappers/AudioParamWrapper.cpp +0 -42
  171. package/common/cpp/wrappers/AudioParamWrapper.h +0 -25
  172. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +0 -23
  173. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +0 -23
  174. package/common/cpp/wrappers/BaseAudioContextWrapper.cpp +0 -83
  175. package/common/cpp/wrappers/BaseAudioContextWrapper.h +0 -51
  176. package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +0 -60
  177. package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +0 -37
  178. package/common/cpp/wrappers/GainNodeWrapper.cpp +0 -14
  179. package/common/cpp/wrappers/GainNodeWrapper.h +0 -20
  180. package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +0 -44
  181. package/common/cpp/wrappers/OscillatorNodeWrapper.h +0 -31
  182. package/common/cpp/wrappers/PeriodicWaveWrapper.h +0 -17
  183. package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +0 -16
  184. package/common/cpp/wrappers/StereoPannerNodeWrapper.h +0 -21
  185. package/ios/AudioDecoder/AudioDecoder.h +0 -17
  186. package/ios/AudioDecoder/AudioDecoder.m +0 -80
  187. package/ios/AudioDecoder/IOSAudioDecoder.h +0 -28
  188. package/ios/AudioDecoder/IOSAudioDecoder.mm +0 -46
  189. package/lib/module/modules/global.d.js +0 -2
  190. package/lib/module/utils/install.js.map +0 -1
  191. /package/android/src/main/cpp/{AudioPlayer → core}/AudioPlayer.cpp +0 -0
  192. /package/android/src/main/cpp/{AudioPlayer → core}/AudioPlayer.h +0 -0
  193. /package/{android/libs/include → common/cpp/libs}/miniaudio.h +0 -0
  194. /package/ios/{AudioPlayer → core}/AudioPlayer.h +0 -0
  195. /package/ios/{AudioPlayer → core}/IOSAudioPlayer.h +0 -0
  196. /package/ios/{AudioPlayer → core}/IOSAudioPlayer.mm +0 -0
  197. /package/lib/typescript/{utils → specs}/install.d.ts +0 -0
@@ -4,9 +4,8 @@
4
4
  #include <memory>
5
5
  #include <vector>
6
6
 
7
- #include "AudioContextWrapper.h"
7
+ #include "AudioContext.h"
8
8
  #include "BaseAudioContextHostObject.h"
9
- #include "JsiPromise.h"
10
9
 
11
10
  namespace audioapi {
12
11
  using namespace facebook;
@@ -14,26 +13,16 @@ using namespace facebook;
14
13
  class AudioContextHostObject : public BaseAudioContextHostObject {
15
14
  public:
16
15
  explicit AudioContextHostObject(
17
- const std::shared_ptr<AudioContextWrapper> &wrapper,
18
- std::shared_ptr<JsiPromise::PromiseVendor> promiseVendor);
19
-
20
- jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
21
-
22
- void set(
23
- jsi::Runtime &runtime,
24
- const jsi::PropNameID &name,
25
- const jsi::Value &value) override;
26
-
27
- std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
28
-
29
- static std::shared_ptr<AudioContextHostObject> createFromWrapper(
30
- const std::shared_ptr<AudioContextWrapper> &wrapper,
31
- std::shared_ptr<JsiPromise::PromiseVendor> promiseVendor) {
32
- return std::make_shared<AudioContextHostObject>(wrapper, promiseVendor);
16
+ const std::shared_ptr<AudioContext> &audioContext,
17
+ const std::shared_ptr<PromiseVendor> &promiseVendor)
18
+ : BaseAudioContextHostObject(audioContext, promiseVendor) {
19
+ addFunctions(JSI_EXPORT_FUNCTION(AudioContextHostObject, close));
33
20
  }
34
21
 
35
- private:
36
- std::shared_ptr<AudioContextWrapper>
37
- getAudioContextWrapperFromBaseAudioContextWrapper();
22
+ JSI_HOST_FUNCTION(close) {
23
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
24
+ audioContext->close();
25
+ return jsi::Value::undefined();
26
+ }
38
27
  };
39
28
  } // namespace audioapi
@@ -3,7 +3,7 @@
3
3
  #include <memory>
4
4
  #include <vector>
5
5
 
6
- #include "AudioDestinationNodeWrapper.h"
6
+ #include "AudioDestinationNode.h"
7
7
  #include "AudioNodeHostObject.h"
8
8
 
9
9
  namespace audioapi {
@@ -12,20 +12,7 @@ using namespace facebook;
12
12
  class AudioDestinationNodeHostObject : public AudioNodeHostObject {
13
13
  public:
14
14
  explicit AudioDestinationNodeHostObject(
15
- const std::shared_ptr<AudioDestinationNodeWrapper> &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<AudioDestinationNodeHostObject> createFromWrapper(
27
- const std::shared_ptr<AudioDestinationNodeWrapper> &wrapper) {
28
- return std::make_shared<AudioDestinationNodeHostObject>(wrapper);
29
- }
15
+ const std::shared_ptr<AudioDestinationNode> &node)
16
+ : AudioNodeHostObject(node) {}
30
17
  };
31
18
  } // namespace audioapi
@@ -4,26 +4,63 @@
4
4
  #include <memory>
5
5
  #include <vector>
6
6
 
7
- #include "AudioNodeWrapper.h"
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 jsi::HostObject {
13
+ class AudioNodeHostObject : public JsiHostObject {
13
14
  public:
14
- explicit AudioNodeHostObject(
15
- const std::shared_ptr<AudioNodeWrapper> &wrapper);
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
- jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
28
+ JSI_PROPERTY_GETTER(numberOfInputs) {
29
+ return {node_->getNumberOfInputs()};
30
+ }
18
31
 
19
- void set(
20
- jsi::Runtime &runtime,
21
- const jsi::PropNameID &name,
22
- const jsi::Value &value) override;
32
+ JSI_PROPERTY_GETTER(numberOfOutputs) {
33
+ return {node_->getNumberOfOutputs()};
34
+ }
23
35
 
24
- std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
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<AudioNodeWrapper> wrapper_;
64
+ std::shared_ptr<AudioNode> node_;
28
65
  };
29
66
  } // namespace audioapi
@@ -4,31 +4,110 @@
4
4
  #include <memory>
5
5
  #include <vector>
6
6
 
7
- #include "AudioParamWrapper.h"
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 jsi::HostObject {
13
+ class AudioParamHostObject : public JsiHostObject {
13
14
  public:
14
- explicit AudioParamHostObject(
15
- const std::shared_ptr<AudioParamWrapper> &wrapper);
15
+ explicit AudioParamHostObject(const std::shared_ptr<AudioParam> &param)
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
- jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
23
+ addFunctions(
24
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueAtTime),
25
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, linearRampToValueAtTime),
26
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, exponentialRampToValueAtTime),
27
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setTargetAtTime),
28
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueCurveAtTime),
29
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelScheduledValues),
30
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelAndHoldAtTime));
18
31
 
19
- void set(
20
- jsi::Runtime &runtime,
21
- const jsi::PropNameID &name,
22
- const jsi::Value &value) override;
32
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioParamHostObject, value));
33
+ }
34
+
35
+ JSI_PROPERTY_GETTER(value) {
36
+ return {param_->getValue()};
37
+ }
38
+
39
+ JSI_PROPERTY_GETTER(defaultValue) {
40
+ return {param_->getDefaultValue()};
41
+ }
42
+
43
+ JSI_PROPERTY_GETTER(minValue) {
44
+ return {param_->getMinValue()};
45
+ }
46
+
47
+ JSI_PROPERTY_GETTER(maxValue) {
48
+ return {param_->getMaxValue()};
49
+ }
50
+
51
+ JSI_HOST_FUNCTION(setValueAtTime) {
52
+ auto value = static_cast<float>(args[0].getNumber());
53
+ double startTime = args[1].getNumber();
54
+ param_->setValueAtTime(value, startTime);
55
+ return jsi::Value::undefined();
56
+ }
23
57
 
24
- std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
58
+ JSI_HOST_FUNCTION(linearRampToValueAtTime) {
59
+ auto value = static_cast<float>(args[0].getNumber());
60
+ double endTime = args[1].getNumber();
61
+ param_->linearRampToValueAtTime(value, endTime);
62
+ return jsi::Value::undefined();
63
+ }
64
+
65
+ JSI_HOST_FUNCTION(exponentialRampToValueAtTime) {
66
+ auto value = static_cast<float>(args[0].getNumber());
67
+ double endTime = args[1].getNumber();
68
+ param_->exponentialRampToValueAtTime(value, endTime);
69
+ return jsi::Value::undefined();
70
+ }
71
+
72
+ JSI_HOST_FUNCTION(setTargetAtTime) {
73
+ auto target = static_cast<float>(args[0].getNumber());
74
+ double startTime = args[1].getNumber();
75
+ double timeConstant = args[2].getNumber();
76
+ param_->setTargetAtTime(target, startTime, timeConstant);
77
+ return jsi::Value::undefined();
78
+ }
79
+
80
+ JSI_HOST_FUNCTION(setValueCurveAtTime) {
81
+ auto values = args[0].getObject(runtime).asArray(runtime);
82
+ auto length = static_cast<int>(values.length(runtime));
83
+ auto valuesData = new float[length];
84
+ for (size_t i = 0; i < values.length(runtime); i++) {
85
+ valuesData[i] =
86
+ static_cast<float>(values.getValueAtIndex(runtime, i).getNumber());
87
+ }
88
+ double startTime = args[1].getNumber();
89
+ double duration = args[2].getNumber();
90
+ param_->setValueCurveAtTime(valuesData, length, startTime, duration);
91
+ return jsi::Value::undefined();
92
+ }
93
+
94
+ JSI_HOST_FUNCTION(cancelScheduledValues) {
95
+ double cancelTime = args[0].getNumber();
96
+ param_->cancelScheduledValues(cancelTime);
97
+ return jsi::Value::undefined();
98
+ }
99
+
100
+ JSI_HOST_FUNCTION(cancelAndHoldAtTime) {
101
+ double cancelTime = args[0].getNumber();
102
+ param_->cancelAndHoldAtTime(cancelTime);
103
+ return jsi::Value::undefined();
104
+ }
25
105
 
26
- static std::shared_ptr<AudioParamHostObject> createFromWrapper(
27
- const std::shared_ptr<AudioParamWrapper> &wrapper) {
28
- return std::make_shared<AudioParamHostObject>(wrapper);
106
+ JSI_PROPERTY_SETTER(value) {
107
+ param_->setValue(static_cast<float>(value.getNumber()));
29
108
  }
30
109
 
31
110
  private:
32
- std::shared_ptr<AudioParamWrapper> wrapper_;
111
+ std::shared_ptr<AudioParam> param_;
33
112
  };
34
113
  } // namespace audioapi
@@ -4,7 +4,7 @@
4
4
  #include <vector>
5
5
 
6
6
  #include "AudioNodeHostObject.h"
7
- #include "AudioScheduledSourceNodeWrapper.h"
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<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();
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,13 +5,15 @@
5
5
  #include <utility>
6
6
  #include <vector>
7
7
 
8
+ #include <JsiHostObject.h>
9
+ #include <JsiPromise.h>
10
+
8
11
  #include "AudioBufferHostObject.h"
9
12
  #include "AudioBufferSourceNodeHostObject.h"
10
13
  #include "AudioDestinationNodeHostObject.h"
11
- #include "BaseAudioContextWrapper.h"
14
+ #include "BaseAudioContext.h"
12
15
  #include "BiquadFilterNodeHostObject.h"
13
16
  #include "GainNodeHostObject.h"
14
- #include "JsiPromise.h"
15
17
  #include "OscillatorNodeHostObject.h"
16
18
  #include "PeriodicWaveHostObject.h"
17
19
  #include "StereoPannerNodeHostObject.h"
@@ -19,24 +21,139 @@
19
21
  namespace audioapi {
20
22
  using namespace facebook;
21
23
 
22
- class BaseAudioContextHostObject : public jsi::HostObject {
24
+ class BaseAudioContextHostObject : public JsiHostObject {
23
25
  public:
24
26
  explicit BaseAudioContextHostObject(
25
- const std::shared_ptr<BaseAudioContextWrapper> &wrapper,
26
- std::shared_ptr<JsiPromise::PromiseVendor> promiseVendor);
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);
27
136
 
28
- jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
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);
29
146
 
30
- void set(
31
- jsi::Runtime &runtime,
32
- const jsi::PropNameID &name,
33
- const jsi::Value &value) override;
147
+ promise->resolve(jsi::Object::createFromHostObject(
148
+ runtime, audioBufferHostObject));
149
+ }).detach();
150
+ });
34
151
 
35
- std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
152
+ return promise;
153
+ }
36
154
 
37
155
  protected:
38
- std::shared_ptr<BaseAudioContextWrapper> wrapper_;
39
- std::shared_ptr<AudioDestinationNodeHostObject> destination_;
40
- std::shared_ptr<JsiPromise::PromiseVendor> promiseVendor_;
156
+ std::shared_ptr<BaseAudioContext> context_;
157
+ std::shared_ptr<PromiseVendor> promiseVendor_;
41
158
  };
42
159
  } // namespace audioapi
@@ -6,7 +6,7 @@
6
6
 
7
7
  #include "AudioNodeHostObject.h"
8
8
  #include "AudioParamHostObject.h"
9
- #include "BiquadFilterNodeWrapper.h"
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<BiquadFilterNodeWrapper> &wrapper);
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
- jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
26
+ addFunctions(
27
+ JSI_EXPORT_FUNCTION(BiquadFilterNodeHostObject, getFrequencyResponse));
20
28
 
21
- void set(
22
- jsi::Runtime &runtime,
23
- const jsi::PropNameID &name,
24
- const jsi::Value &value) override;
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
- std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
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
- static std::shared_ptr<BiquadFilterNodeHostObject> createFromWrapper(
29
- const std::shared_ptr<BiquadFilterNodeWrapper> &wrapper) {
30
- return std::make_shared<BiquadFilterNodeHostObject>(wrapper);
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
- 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_;
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
- std::shared_ptr<BiquadFilterNodeWrapper>
40
- getBiquadFilterNodeWrapperFromAudioNodeWrapper();
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
@@ -5,28 +5,23 @@
5
5
 
6
6
  #include "AudioNodeHostObject.h"
7
7
  #include "AudioParamHostObject.h"
8
- #include "GainNodeWrapper.h"
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<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;
15
+ explicit GainNodeHostObject(const std::shared_ptr<GainNode> &node)
16
+ : AudioNodeHostObject(node) {
17
+ addGetters(JSI_EXPORT_PROPERTY_GETTER(GainNodeHostObject, gain));
18
+ }
26
19
 
27
- static std::shared_ptr<GainNodeHostObject> createFromWrapper(
28
- const std::shared_ptr<GainNodeWrapper> &wrapper) {
29
- return std::make_shared<GainNodeHostObject>(wrapper);
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