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

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