react-native-audio-api 0.8.3-nightly-d178688-20250925 → 0.8.3-nightly-cae1f96-20250927

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 (136) hide show
  1. package/RNAudioAPI.podspec +8 -5
  2. package/android/build.gradle +44 -4
  3. package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
  4. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
  6. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
  8. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
  9. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
  10. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
  11. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
  12. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
  13. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +31 -13
  14. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
  15. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
  16. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
  17. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
  18. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
  19. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
  20. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +292 -6
  21. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +26 -242
  22. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
  23. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
  24. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
  25. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
  26. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
  27. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
  28. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
  29. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
  30. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
  31. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
  32. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
  33. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
  34. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
  35. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
  36. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
  37. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
  38. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
  39. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
  40. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
  41. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
  42. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
  43. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +133 -0
  44. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +34 -0
  45. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
  46. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
  47. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
  48. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
  49. package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
  50. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
  51. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
  52. package/common/cpp/audioapi/core/AudioContext.cpp +3 -2
  53. package/common/cpp/audioapi/core/AudioContext.h +2 -1
  54. package/common/cpp/audioapi/core/AudioNode.h +1 -1
  55. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  56. package/common/cpp/audioapi/core/BaseAudioContext.cpp +15 -1
  57. package/common/cpp/audioapi/core/BaseAudioContext.h +7 -3
  58. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -3
  59. package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
  60. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  61. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +1 -1
  62. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +86 -0
  63. package/common/cpp/audioapi/core/effects/WorkletNode.h +64 -0
  64. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  65. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  66. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +1 -1
  67. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +1 -1
  68. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +1 -1
  69. package/common/cpp/audioapi/core/sources/StreamerNode.h +0 -8
  70. package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +1 -1
  71. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +45 -0
  72. package/common/cpp/audioapi/core/utils/worklets/UiWorkletsRunner.cpp +9 -0
  73. package/common/cpp/audioapi/core/utils/worklets/UiWorkletsRunner.h +73 -0
  74. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  75. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  76. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
  77. package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
  78. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  79. package/common/cpp/test/CMakeLists.txt +8 -3
  80. package/common/cpp/test/GainTest.cpp +1 -1
  81. package/common/cpp/test/OscillatorTest.cpp +1 -1
  82. package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
  83. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  84. package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -2
  85. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  86. package/lib/commonjs/api.js +7 -0
  87. package/lib/commonjs/api.js.map +1 -1
  88. package/lib/commonjs/core/BaseAudioContext.js +29 -0
  89. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  90. package/lib/commonjs/core/WorkletNode.js +11 -0
  91. package/lib/commonjs/core/WorkletNode.js.map +1 -0
  92. package/lib/commonjs/utils/index.js +9 -0
  93. package/lib/commonjs/utils/index.js.map +1 -1
  94. package/lib/module/api.js +1 -0
  95. package/lib/module/api.js.map +1 -1
  96. package/lib/module/core/BaseAudioContext.js +29 -0
  97. package/lib/module/core/BaseAudioContext.js.map +1 -1
  98. package/lib/module/core/WorkletNode.js +5 -0
  99. package/lib/module/core/WorkletNode.js.map +1 -0
  100. package/lib/module/utils/index.js +8 -0
  101. package/lib/module/utils/index.js.map +1 -1
  102. package/lib/typescript/api.d.ts +1 -0
  103. package/lib/typescript/api.d.ts.map +1 -1
  104. package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
  105. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  106. package/lib/typescript/core/WorkletNode.d.ts +4 -0
  107. package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
  108. package/lib/typescript/interfaces.d.ts +3 -0
  109. package/lib/typescript/interfaces.d.ts.map +1 -1
  110. package/lib/typescript/utils/index.d.ts +2 -0
  111. package/lib/typescript/utils/index.d.ts.map +1 -1
  112. package/package.json +3 -2
  113. package/src/api.ts +1 -0
  114. package/src/core/BaseAudioContext.ts +51 -0
  115. package/src/core/WorkletNode.ts +3 -0
  116. package/src/interfaces.ts +7 -0
  117. package/src/utils/index.ts +10 -0
  118. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
  119. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
  120. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
  121. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
  122. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
  123. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
  124. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
  125. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
  126. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
  127. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
  128. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
  129. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
  130. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
  131. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
  132. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
  133. /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
  134. /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
  135. /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
  136. /package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +0 -0
@@ -0,0 +1,57 @@
1
+ #include <audioapi/HostObjects/AudioContextHostObject.h>
2
+
3
+ #include <audioapi/core/AudioContext.h>
4
+
5
+ namespace audioapi {
6
+
7
+ AudioContextHostObject::AudioContextHostObject(
8
+ const std::shared_ptr<AudioContext> &audioContext,
9
+ jsi::Runtime *runtime,
10
+ const std::shared_ptr<react::CallInvoker> &callInvoker)
11
+ : BaseAudioContextHostObject(audioContext, runtime, callInvoker) {
12
+ addFunctions(
13
+ JSI_EXPORT_FUNCTION(AudioContextHostObject, close),
14
+ JSI_EXPORT_FUNCTION(AudioContextHostObject, resume),
15
+ JSI_EXPORT_FUNCTION(AudioContextHostObject, suspend));
16
+ }
17
+
18
+ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, close) {
19
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
20
+ auto promise = promiseVendor_->createPromise(
21
+ [audioContext](const std::shared_ptr<Promise> &promise) {
22
+ audioContext->close();
23
+
24
+ promise->resolve(
25
+ [](jsi::Runtime &runtime) { return jsi::Value::undefined(); });
26
+ });
27
+
28
+ return promise;
29
+ }
30
+
31
+ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, resume) {
32
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
33
+ auto promise = promiseVendor_->createPromise(
34
+ [audioContext](const std::shared_ptr<Promise> &promise) {
35
+ auto result = audioContext->resume();
36
+
37
+ promise->resolve(
38
+ [result](jsi::Runtime &runtime) { return jsi::Value(result); });
39
+ });
40
+
41
+ return promise;
42
+ }
43
+
44
+ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, suspend) {
45
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
46
+ auto promise = promiseVendor_->createPromise(
47
+ [audioContext](const std::shared_ptr<Promise> &promise) {
48
+ auto result = audioContext->suspend();
49
+
50
+ promise->resolve(
51
+ [result](jsi::Runtime &runtime) { return jsi::Value(result); });
52
+ });
53
+
54
+ return promise;
55
+ }
56
+
57
+ } // namespace audioapi
@@ -1,6 +1,5 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/core/AudioContext.h>
4
3
  #include <audioapi/HostObjects/BaseAudioContextHostObject.h>
5
4
 
6
5
  #include <jsi/jsi.h>
@@ -11,56 +10,17 @@
11
10
  namespace audioapi {
12
11
  using namespace facebook;
13
12
 
13
+ class AudioContext;
14
+
14
15
  class AudioContextHostObject : public BaseAudioContextHostObject {
15
16
  public:
16
17
  explicit AudioContextHostObject(
17
18
  const std::shared_ptr<AudioContext> &audioContext,
18
19
  jsi::Runtime *runtime,
19
- const std::shared_ptr<react::CallInvoker> &callInvoker)
20
- : BaseAudioContextHostObject(audioContext, runtime, callInvoker) {
21
- addFunctions(
22
- JSI_EXPORT_FUNCTION(AudioContextHostObject, close),
23
- JSI_EXPORT_FUNCTION(AudioContextHostObject, resume),
24
- JSI_EXPORT_FUNCTION(AudioContextHostObject, suspend));
25
- }
26
-
27
- JSI_HOST_FUNCTION(close) {
28
- auto audioContext = std::static_pointer_cast<AudioContext>(context_);
29
- auto promise = promiseVendor_->createPromise([audioContext](const std::shared_ptr<Promise>& promise) {
30
- audioContext->close();
31
-
32
- promise->resolve([](jsi::Runtime &runtime) {
33
- return jsi::Value::undefined();
34
- });
35
- });
36
-
37
- return promise;
38
- }
39
-
40
- JSI_HOST_FUNCTION(resume) {
41
- auto audioContext = std::static_pointer_cast<AudioContext>(context_);
42
- auto promise = promiseVendor_->createPromise([audioContext](const std::shared_ptr<Promise>& promise) {
43
- auto result = audioContext->resume();
44
-
45
- promise->resolve([result](jsi::Runtime &runtime) {
46
- return jsi::Value(result);
47
- });
48
- });
49
-
50
- return promise;
51
- }
52
-
53
- JSI_HOST_FUNCTION(suspend) {
54
- auto audioContext = std::static_pointer_cast<AudioContext>(context_);
55
- auto promise = promiseVendor_->createPromise([audioContext](const std::shared_ptr<Promise>& promise) {
56
- auto result = audioContext->suspend();
57
-
58
- promise->resolve([result](jsi::Runtime &runtime) {
59
- return jsi::Value(result);
60
- });
61
- });
20
+ const std::shared_ptr<react::CallInvoker> &callInvoker);
62
21
 
63
- return promise;
64
- }
22
+ JSI_HOST_FUNCTION_DECL(close);
23
+ JSI_HOST_FUNCTION_DECL(resume);
24
+ JSI_HOST_FUNCTION_DECL(suspend);
65
25
  };
66
26
  } // namespace audioapi
@@ -1,9 +1,73 @@
1
1
  #include <audioapi/HostObjects/AudioNodeHostObject.h>
2
2
 
3
- // Explicitly define destructors here, as they to exist in order to act as a
4
- // "key function" for the audio classes - this allow for RTTI to work
5
- // properly across dynamic library boundaries (i.e. dynamic_cast that is used by
6
- // isHostObject method), android specific issue
3
+ #include <audioapi/HostObjects/AudioParamHostObject.h>
4
+ #include <audioapi/core/AudioNode.h>
5
+
7
6
  namespace audioapi {
8
- AudioNodeHostObject::~AudioNodeHostObject() = default;
9
- }
7
+
8
+ AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
9
+ : node_(node) {
10
+ addGetters(
11
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
13
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCount),
14
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCountMode),
15
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelInterpretation));
16
+
17
+ addFunctions(
18
+ JSI_EXPORT_FUNCTION(AudioNodeHostObject, connect),
19
+ JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect));
20
+ }
21
+
22
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, numberOfInputs) {
23
+ return {node_->getNumberOfInputs()};
24
+ }
25
+
26
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, numberOfOutputs) {
27
+ return {node_->getNumberOfOutputs()};
28
+ }
29
+
30
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelCount) {
31
+ return {node_->getChannelCount()};
32
+ }
33
+
34
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelCountMode) {
35
+ return jsi::String::createFromUtf8(runtime, node_->getChannelCountMode());
36
+ }
37
+
38
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelInterpretation) {
39
+ return jsi::String::createFromUtf8(
40
+ runtime, node_->getChannelInterpretation());
41
+ }
42
+
43
+ JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, connect) {
44
+ auto obj = args[0].getObject(runtime);
45
+ if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
46
+ auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
47
+ node_->connect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
48
+ }
49
+ if (obj.isHostObject<AudioParamHostObject>(runtime)) {
50
+ auto param = obj.getHostObject<AudioParamHostObject>(runtime);
51
+ node_->connect(std::shared_ptr<AudioParamHostObject>(param)->param_);
52
+ }
53
+ return jsi::Value::undefined();
54
+ }
55
+
56
+ JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, disconnect) {
57
+ if (args[0].isUndefined()) {
58
+ node_->disconnect();
59
+ return jsi::Value::undefined();
60
+ }
61
+ auto obj = args[0].getObject(runtime);
62
+ if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
63
+ auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
64
+ node_->disconnect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
65
+ }
66
+
67
+ if (obj.isHostObject<AudioParamHostObject>(runtime)) {
68
+ auto param = obj.getHostObject<AudioParamHostObject>(runtime);
69
+ node_->disconnect(std::shared_ptr<AudioParamHostObject>(param)->param_);
70
+ }
71
+ return jsi::Value::undefined();
72
+ }
73
+ } // namespace audioapi
@@ -1,7 +1,5 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/HostObjects/AudioParamHostObject.h>
4
- #include <audioapi/core/AudioNode.h>
5
3
  #include <audioapi/jsi/JsiHostObject.h>
6
4
 
7
5
  #include <jsi/jsi.h>
@@ -11,74 +9,20 @@
11
9
  namespace audioapi {
12
10
  using namespace facebook;
13
11
 
12
+ class AudioNode;
13
+
14
14
  class AudioNodeHostObject : public JsiHostObject {
15
15
  public:
16
- explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
17
- : node_(node) {
18
- addGetters(
19
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
20
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCount),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCountMode),
23
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelInterpretation));
24
- addFunctions(
25
- JSI_EXPORT_FUNCTION(AudioNodeHostObject, connect),
26
- JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect));
27
- }
28
-
29
- ~AudioNodeHostObject() override;
30
-
31
- JSI_PROPERTY_GETTER(numberOfInputs) {
32
- return {node_->getNumberOfInputs()};
33
- }
34
-
35
- JSI_PROPERTY_GETTER(numberOfOutputs) {
36
- return {node_->getNumberOfOutputs()};
37
- }
38
-
39
- JSI_PROPERTY_GETTER(channelCount) {
40
- return {node_->getChannelCount()};
41
- }
42
-
43
- JSI_PROPERTY_GETTER(channelCountMode) {
44
- return jsi::String::createFromUtf8(runtime, node_->getChannelCountMode());
45
- }
46
-
47
- JSI_PROPERTY_GETTER(channelInterpretation) {
48
- return jsi::String::createFromUtf8(
49
- runtime, node_->getChannelInterpretation());
50
- }
51
-
52
- JSI_HOST_FUNCTION(connect) {
53
- auto obj = args[0].getObject(runtime);
54
- if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
55
- auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
56
- node_->connect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
57
- }
58
- if (obj.isHostObject<AudioParamHostObject>(runtime)) {
59
- auto param = obj.getHostObject<AudioParamHostObject>(runtime);
60
- node_->connect(std::shared_ptr<AudioParamHostObject>(param)->param_);
61
- }
62
- return jsi::Value::undefined();
63
- }
16
+ explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node);
64
17
 
65
- JSI_HOST_FUNCTION(disconnect) {
66
- if (args[0].isUndefined()) {
67
- node_->disconnect();
68
- return jsi::Value::undefined();
69
- }
70
- auto obj = args[0].getObject(runtime);
71
- if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
72
- auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
73
- node_->disconnect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
74
- }
18
+ JSI_PROPERTY_GETTER_DECL(numberOfInputs);
19
+ JSI_PROPERTY_GETTER_DECL(numberOfOutputs);
20
+ JSI_PROPERTY_GETTER_DECL(channelCount);
21
+ JSI_PROPERTY_GETTER_DECL(channelCountMode);
22
+ JSI_PROPERTY_GETTER_DECL(channelInterpretation);
75
23
 
76
- if (obj.isHostObject<AudioParamHostObject>(runtime)) {
77
- auto param = obj.getHostObject<AudioParamHostObject>(runtime);
78
- node_->disconnect(std::shared_ptr<AudioParamHostObject>(param)->param_);
79
- }
80
- return jsi::Value::undefined();
81
- }
24
+ JSI_HOST_FUNCTION_DECL(connect);
25
+ JSI_HOST_FUNCTION_DECL(disconnect);
82
26
 
83
27
  protected:
84
28
  std::shared_ptr<AudioNode> node_;
@@ -0,0 +1,105 @@
1
+ #include <audioapi/HostObjects/AudioParamHostObject.h>
2
+
3
+ #include <audioapi/core/AudioParam.h>
4
+
5
+ namespace audioapi {
6
+
7
+ AudioParamHostObject::AudioParamHostObject(
8
+ const std::shared_ptr<AudioParam> &param)
9
+ : param_(param) {
10
+ addGetters(
11
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, value),
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, defaultValue),
13
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, minValue),
14
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, maxValue));
15
+
16
+ addFunctions(
17
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueAtTime),
18
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, linearRampToValueAtTime),
19
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, exponentialRampToValueAtTime),
20
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setTargetAtTime),
21
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueCurveAtTime),
22
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelScheduledValues),
23
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelAndHoldAtTime));
24
+
25
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioParamHostObject, value));
26
+ }
27
+
28
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, value) {
29
+ return {param_->getValue()};
30
+ }
31
+
32
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, defaultValue) {
33
+ return {param_->getDefaultValue()};
34
+ }
35
+
36
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, minValue) {
37
+ return {param_->getMinValue()};
38
+ }
39
+
40
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, maxValue) {
41
+ return {param_->getMaxValue()};
42
+ }
43
+
44
+ JSI_PROPERTY_SETTER_IMPL(AudioParamHostObject, value) {
45
+ param_->setValue(static_cast<float>(value.getNumber()));
46
+ }
47
+
48
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, 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_IMPL(AudioParamHostObject, 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_IMPL(AudioParamHostObject, 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
+ }
68
+
69
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, setTargetAtTime) {
70
+ auto target = static_cast<float>(args[0].getNumber());
71
+ double startTime = args[1].getNumber();
72
+ double timeConstant = args[2].getNumber();
73
+ param_->setTargetAtTime(target, startTime, timeConstant);
74
+ return jsi::Value::undefined();
75
+ }
76
+
77
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, setValueCurveAtTime) {
78
+ auto arrayBuffer = args[0]
79
+ .getObject(runtime)
80
+ .getPropertyAsObject(runtime, "buffer")
81
+ .getArrayBuffer(runtime);
82
+ auto rawValues = reinterpret_cast<float *>(arrayBuffer.data(runtime));
83
+ auto length = static_cast<int>(arrayBuffer.size(runtime));
84
+ auto values =
85
+ std::make_unique<std::vector<float>>(rawValues, rawValues + length);
86
+
87
+ double startTime = args[1].getNumber();
88
+ double duration = args[2].getNumber();
89
+ param_->setValueCurveAtTime(std::move(values), length, startTime, duration);
90
+ return jsi::Value::undefined();
91
+ }
92
+
93
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, cancelScheduledValues) {
94
+ double cancelTime = args[0].getNumber();
95
+ param_->cancelScheduledValues(cancelTime);
96
+ return jsi::Value::undefined();
97
+ }
98
+
99
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, cancelAndHoldAtTime) {
100
+ double cancelTime = args[0].getNumber();
101
+ param_->cancelAndHoldAtTime(cancelTime);
102
+ return jsi::Value::undefined();
103
+ }
104
+
105
+ } // namespace audioapi
@@ -1,7 +1,6 @@
1
1
  #pragma once
2
2
 
3
3
  #include <audioapi/jsi/JsiHostObject.h>
4
- #include <audioapi/core/AudioParam.h>
5
4
 
6
5
  #include <jsi/jsi.h>
7
6
  #include <utility>
@@ -12,103 +11,30 @@
12
11
  namespace audioapi {
13
12
  using namespace facebook;
14
13
 
14
+ class AudioParam;
15
+
15
16
  class AudioParamHostObject : public JsiHostObject {
16
17
  public:
17
- explicit AudioParamHostObject(const std::shared_ptr<AudioParam> &param)
18
- : param_(param) {
19
- addGetters(
20
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, value),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, defaultValue),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, minValue),
23
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, maxValue));
24
-
25
- addFunctions(
26
- JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueAtTime),
27
- JSI_EXPORT_FUNCTION(AudioParamHostObject, linearRampToValueAtTime),
28
- JSI_EXPORT_FUNCTION(AudioParamHostObject, exponentialRampToValueAtTime),
29
- JSI_EXPORT_FUNCTION(AudioParamHostObject, setTargetAtTime),
30
- JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueCurveAtTime),
31
- JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelScheduledValues),
32
- JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelAndHoldAtTime));
33
-
34
- addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioParamHostObject, value));
35
- }
36
- friend class AudioNodeHostObject;
37
-
38
- JSI_PROPERTY_GETTER(value) {
39
- return {param_->getValue()};
40
- }
41
-
42
- JSI_PROPERTY_GETTER(defaultValue) {
43
- return {param_->getDefaultValue()};
44
- }
45
-
46
- JSI_PROPERTY_GETTER(minValue) {
47
- return {param_->getMinValue()};
48
- }
49
-
50
- JSI_PROPERTY_GETTER(maxValue) {
51
- return {param_->getMaxValue()};
52
- }
18
+ explicit AudioParamHostObject(const std::shared_ptr<AudioParam> &param);
53
19
 
54
- JSI_HOST_FUNCTION(setValueAtTime) {
55
- auto value = static_cast<float>(args[0].getNumber());
56
- double startTime = args[1].getNumber();
57
- param_->setValueAtTime(value, startTime);
58
- return jsi::Value::undefined();
59
- }
20
+ JSI_PROPERTY_GETTER_DECL(value);
21
+ JSI_PROPERTY_GETTER_DECL(defaultValue);
22
+ JSI_PROPERTY_GETTER_DECL(minValue);
23
+ JSI_PROPERTY_GETTER_DECL(maxValue);
60
24
 
61
- JSI_HOST_FUNCTION(linearRampToValueAtTime) {
62
- auto value = static_cast<float>(args[0].getNumber());
63
- double endTime = args[1].getNumber();
64
- param_->linearRampToValueAtTime(value, endTime);
65
- return jsi::Value::undefined();
66
- }
25
+ JSI_PROPERTY_SETTER_DECL(value);
67
26
 
68
- JSI_HOST_FUNCTION(exponentialRampToValueAtTime) {
69
- auto value = static_cast<float>(args[0].getNumber());
70
- double endTime = args[1].getNumber();
71
- param_->exponentialRampToValueAtTime(value, endTime);
72
- return jsi::Value::undefined();
73
- }
74
-
75
- JSI_HOST_FUNCTION(setTargetAtTime) {
76
- auto target = static_cast<float>(args[0].getNumber());
77
- double startTime = args[1].getNumber();
78
- double timeConstant = args[2].getNumber();
79
- param_->setTargetAtTime(target, startTime, timeConstant);
80
- return jsi::Value::undefined();
81
- }
82
-
83
- JSI_HOST_FUNCTION(setValueCurveAtTime) {
84
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
85
- auto rawValues = reinterpret_cast<float *>(arrayBuffer.data(runtime));
86
- auto length = static_cast<int>(arrayBuffer.size(runtime));
87
- auto values = std::make_unique<std::vector<float>>(rawValues, rawValues + length);
88
-
89
- double startTime = args[1].getNumber();
90
- double duration = args[2].getNumber();
91
- param_->setValueCurveAtTime(std::move(values), length, startTime, duration);
92
- return jsi::Value::undefined();
93
- }
94
-
95
- JSI_HOST_FUNCTION(cancelScheduledValues) {
96
- double cancelTime = args[0].getNumber();
97
- param_->cancelScheduledValues(cancelTime);
98
- return jsi::Value::undefined();
99
- }
100
-
101
- JSI_HOST_FUNCTION(cancelAndHoldAtTime) {
102
- double cancelTime = args[0].getNumber();
103
- param_->cancelAndHoldAtTime(cancelTime);
104
- return jsi::Value::undefined();
105
- }
106
-
107
- JSI_PROPERTY_SETTER(value) {
108
- param_->setValue(static_cast<float>(value.getNumber()));
109
- }
27
+ JSI_HOST_FUNCTION_DECL(setValueAtTime);
28
+ JSI_HOST_FUNCTION_DECL(linearRampToValueAtTime);
29
+ JSI_HOST_FUNCTION_DECL(exponentialRampToValueAtTime);
30
+ JSI_HOST_FUNCTION_DECL(setTargetAtTime);
31
+ JSI_HOST_FUNCTION_DECL(setValueCurveAtTime);
32
+ JSI_HOST_FUNCTION_DECL(cancelScheduledValues);
33
+ JSI_HOST_FUNCTION_DECL(cancelAndHoldAtTime);
110
34
 
111
35
  private:
36
+ friend class AudioNodeHostObject;
37
+
112
38
  std::shared_ptr<AudioParam> param_;
113
39
  };
114
40
  } // namespace audioapi