react-native-audio-api 0.0.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +60 -1
  2. package/RNAudioAPI.podspec +46 -0
  3. package/android/CMakeLists.txt +74 -0
  4. package/android/build.gradle +194 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/libs/fftw3/arm64-v8a/libfftw3.a +0 -0
  7. package/android/libs/fftw3/armeabi-v7a/libfftw3.a +0 -0
  8. package/android/libs/fftw3/x86/libfftw3.a +0 -0
  9. package/android/libs/fftw3/x86_64/libfftw3.a +0 -0
  10. package/android/libs/include/fftw3/fftw3.h +413 -0
  11. package/android/src/main/AndroidManifest.xml +3 -0
  12. package/android/src/main/AndroidManifestNew.xml +2 -0
  13. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +22 -0
  14. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +48 -0
  15. package/android/src/main/cpp/AudioPlayer/AudioPlayer.cpp +66 -0
  16. package/android/src/main/cpp/AudioPlayer/AudioPlayer.h +33 -0
  17. package/android/src/main/cpp/OnLoad.cpp +9 -0
  18. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +14 -0
  19. package/android/src/main/java/com/swmansion/audioapi/module/AudioAPIInstaller.kt +21 -0
  20. package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +25 -0
  21. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +52 -0
  22. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +45 -0
  23. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +38 -0
  24. package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +16 -0
  25. package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +12 -0
  26. package/common/cpp/HostObjects/AudioBufferHostObject.cpp +143 -0
  27. package/common/cpp/HostObjects/AudioBufferHostObject.h +33 -0
  28. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +79 -0
  29. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +37 -0
  30. package/common/cpp/HostObjects/AudioContextHostObject.cpp +54 -0
  31. package/common/cpp/HostObjects/AudioContextHostObject.h +36 -0
  32. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +33 -0
  33. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +31 -0
  34. package/common/cpp/HostObjects/AudioNodeHostObject.cpp +102 -0
  35. package/common/cpp/HostObjects/AudioNodeHostObject.h +29 -0
  36. package/common/cpp/HostObjects/AudioParamHostObject.cpp +115 -0
  37. package/common/cpp/HostObjects/AudioParamHostObject.h +34 -0
  38. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +73 -0
  39. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +31 -0
  40. package/common/cpp/HostObjects/BaseAudioContextHostObject.cpp +214 -0
  41. package/common/cpp/HostObjects/BaseAudioContextHostObject.h +39 -0
  42. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +125 -0
  43. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +42 -0
  44. package/common/cpp/HostObjects/Constants.h +22 -0
  45. package/common/cpp/HostObjects/GainNodeHostObject.cpp +41 -0
  46. package/common/cpp/HostObjects/GainNodeHostObject.h +32 -0
  47. package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +88 -0
  48. package/common/cpp/HostObjects/OscillatorNodeHostObject.h +41 -0
  49. package/common/cpp/HostObjects/PeriodicWaveHostObject.cpp +33 -0
  50. package/common/cpp/HostObjects/PeriodicWaveHostObject.h +33 -0
  51. package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +41 -0
  52. package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +36 -0
  53. package/common/cpp/core/AudioArray.cpp +103 -0
  54. package/common/cpp/core/AudioArray.h +42 -0
  55. package/common/cpp/core/AudioBuffer.cpp +55 -0
  56. package/common/cpp/core/AudioBuffer.h +40 -0
  57. package/common/cpp/core/AudioBufferSourceNode.cpp +135 -0
  58. package/common/cpp/core/AudioBufferSourceNode.h +30 -0
  59. package/common/cpp/core/AudioBus.cpp +357 -0
  60. package/common/cpp/core/AudioBus.h +63 -0
  61. package/common/cpp/core/AudioContext.cpp +24 -0
  62. package/common/cpp/core/AudioContext.h +16 -0
  63. package/common/cpp/core/AudioDestinationNode.cpp +45 -0
  64. package/common/cpp/core/AudioDestinationNode.h +32 -0
  65. package/common/cpp/core/AudioNode.cpp +222 -0
  66. package/common/cpp/core/AudioNode.h +74 -0
  67. package/common/cpp/core/AudioNodeManager.cpp +72 -0
  68. package/common/cpp/core/AudioNodeManager.h +35 -0
  69. package/common/cpp/core/AudioParam.cpp +133 -0
  70. package/common/cpp/core/AudioParam.h +50 -0
  71. package/common/cpp/core/AudioScheduledSourceNode.cpp +53 -0
  72. package/common/cpp/core/AudioScheduledSourceNode.h +34 -0
  73. package/common/cpp/core/BaseAudioContext.cpp +157 -0
  74. package/common/cpp/core/BaseAudioContext.h +80 -0
  75. package/common/cpp/core/BiquadFilterNode.cpp +385 -0
  76. package/common/cpp/core/BiquadFilterNode.h +124 -0
  77. package/common/cpp/core/GainNode.cpp +30 -0
  78. package/common/cpp/core/GainNode.h +25 -0
  79. package/common/cpp/core/OscillatorNode.cpp +75 -0
  80. package/common/cpp/core/OscillatorNode.h +72 -0
  81. package/common/cpp/core/ParamChange.cpp +46 -0
  82. package/common/cpp/core/ParamChange.h +34 -0
  83. package/common/cpp/core/PeriodicWave.cpp +362 -0
  84. package/common/cpp/core/PeriodicWave.h +119 -0
  85. package/common/cpp/core/StereoPannerNode.cpp +56 -0
  86. package/common/cpp/core/StereoPannerNode.h +26 -0
  87. package/common/cpp/types/BiquadFilterType.h +19 -0
  88. package/common/cpp/types/ChannelCountMode.h +10 -0
  89. package/common/cpp/types/ChannelInterpretation.h +10 -0
  90. package/common/cpp/types/ContextState.h +10 -0
  91. package/common/cpp/types/OscillatorType.h +11 -0
  92. package/common/cpp/utils/FFTFrame.h +63 -0
  93. package/common/cpp/utils/Locker.h +47 -0
  94. package/common/cpp/utils/VectorMath.cpp +678 -0
  95. package/common/cpp/utils/VectorMath.h +71 -0
  96. package/common/cpp/utils/android/FFTFrame.cpp +22 -0
  97. package/common/cpp/utils/ios/FFTFrame.cpp +24 -0
  98. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +45 -0
  99. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +26 -0
  100. package/common/cpp/wrappers/AudioBufferWrapper.cpp +46 -0
  101. package/common/cpp/wrappers/AudioBufferWrapper.h +30 -0
  102. package/common/cpp/wrappers/AudioContextWrapper.cpp +17 -0
  103. package/common/cpp/wrappers/AudioContextWrapper.h +19 -0
  104. package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +16 -0
  105. package/common/cpp/wrappers/AudioNodeWrapper.cpp +37 -0
  106. package/common/cpp/wrappers/AudioNodeWrapper.h +25 -0
  107. package/common/cpp/wrappers/AudioParamWrapper.cpp +42 -0
  108. package/common/cpp/wrappers/AudioParamWrapper.h +25 -0
  109. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +23 -0
  110. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +23 -0
  111. package/common/cpp/wrappers/BaseAudioContextWrapper.cpp +76 -0
  112. package/common/cpp/wrappers/BaseAudioContextWrapper.h +49 -0
  113. package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +60 -0
  114. package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +37 -0
  115. package/common/cpp/wrappers/GainNodeWrapper.cpp +14 -0
  116. package/common/cpp/wrappers/GainNodeWrapper.h +20 -0
  117. package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +44 -0
  118. package/common/cpp/wrappers/OscillatorNodeWrapper.h +31 -0
  119. package/common/cpp/wrappers/PeriodicWaveWrapper.h +17 -0
  120. package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +16 -0
  121. package/common/cpp/wrappers/StereoPannerNodeWrapper.h +21 -0
  122. package/ios/AudioAPIModule.h +24 -0
  123. package/ios/AudioAPIModule.mm +44 -0
  124. package/ios/AudioPlayer/AudioPlayer.h +28 -0
  125. package/ios/AudioPlayer/AudioPlayer.m +119 -0
  126. package/ios/AudioPlayer/IOSAudioPlayer.h +33 -0
  127. package/ios/AudioPlayer/IOSAudioPlayer.mm +57 -0
  128. package/lib/module/core/AudioBuffer.js +37 -0
  129. package/lib/module/core/AudioBuffer.js.map +1 -0
  130. package/lib/module/core/AudioBufferSourceNode.js +28 -0
  131. package/lib/module/core/AudioBufferSourceNode.js.map +1 -0
  132. package/lib/module/core/AudioContext.js +10 -0
  133. package/lib/module/core/AudioContext.js.map +1 -0
  134. package/lib/module/core/AudioDestinationNode.js +7 -0
  135. package/lib/module/core/AudioDestinationNode.js.map +1 -0
  136. package/lib/module/core/AudioNode.js +22 -0
  137. package/lib/module/core/AudioNode.js.map +1 -0
  138. package/lib/module/core/AudioParam.js +35 -0
  139. package/lib/module/core/AudioParam.js.map +1 -0
  140. package/lib/module/core/AudioScheduledSourceNode.js +28 -0
  141. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -0
  142. package/lib/module/core/BaseAudioContext.js +57 -0
  143. package/lib/module/core/BaseAudioContext.js.map +1 -0
  144. package/lib/module/core/BiquadFilterNode.js +25 -0
  145. package/lib/module/core/BiquadFilterNode.js.map +1 -0
  146. package/lib/module/core/GainNode.js +9 -0
  147. package/lib/module/core/GainNode.js.map +1 -0
  148. package/lib/module/core/OscillatorNode.js +24 -0
  149. package/lib/module/core/OscillatorNode.js.map +1 -0
  150. package/lib/module/core/PeriodicWave.js +8 -0
  151. package/lib/module/core/PeriodicWave.js.map +1 -0
  152. package/lib/module/core/StereoPannerNode.js +9 -0
  153. package/lib/module/core/StereoPannerNode.js.map +1 -0
  154. package/lib/module/core/types.js +2 -0
  155. package/lib/module/core/types.js.map +1 -0
  156. package/lib/module/errors/IndexSizeError.js +8 -0
  157. package/lib/module/errors/IndexSizeError.js.map +1 -0
  158. package/lib/module/errors/InvalidAccessError.js +8 -0
  159. package/lib/module/errors/InvalidAccessError.js.map +1 -0
  160. package/lib/module/errors/InvalidStateError.js +8 -0
  161. package/lib/module/errors/InvalidStateError.js.map +1 -0
  162. package/lib/module/errors/RangeError.js +8 -0
  163. package/lib/module/errors/RangeError.js.map +1 -0
  164. package/lib/module/errors/index.js +5 -0
  165. package/lib/module/errors/index.js.map +1 -0
  166. package/lib/module/index.js +18 -0
  167. package/lib/module/index.js.map +1 -0
  168. package/lib/module/interfaces.js +2 -0
  169. package/lib/module/interfaces.js.map +1 -0
  170. package/lib/module/modules/global.d.js +2 -0
  171. package/lib/module/modules/global.d.js.map +1 -0
  172. package/lib/module/utils/install.js +22 -0
  173. package/lib/module/utils/install.js.map +1 -0
  174. package/lib/typescript/core/AudioBuffer.d.ts +12 -0
  175. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -0
  176. package/lib/typescript/core/AudioBufferSourceNode.d.ts +12 -0
  177. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -0
  178. package/lib/typescript/core/AudioContext.d.ts +6 -0
  179. package/lib/typescript/core/AudioContext.d.ts.map +1 -0
  180. package/lib/typescript/core/AudioDestinationNode.d.ts +7 -0
  181. package/lib/typescript/core/AudioDestinationNode.d.ts.map +1 -0
  182. package/lib/typescript/core/AudioNode.d.ts +16 -0
  183. package/lib/typescript/core/AudioNode.d.ts.map +1 -0
  184. package/lib/typescript/core/AudioParam.d.ts +14 -0
  185. package/lib/typescript/core/AudioParam.d.ts.map +1 -0
  186. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +10 -0
  187. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -0
  188. package/lib/typescript/core/BaseAudioContext.d.ts +26 -0
  189. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -0
  190. package/lib/typescript/core/BiquadFilterNode.d.ts +16 -0
  191. package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -0
  192. package/lib/typescript/core/GainNode.d.ts +9 -0
  193. package/lib/typescript/core/GainNode.d.ts.map +1 -0
  194. package/lib/typescript/core/OscillatorNode.d.ts +15 -0
  195. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -0
  196. package/lib/typescript/core/PeriodicWave.d.ts +5 -0
  197. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -0
  198. package/lib/typescript/core/StereoPannerNode.d.ts +9 -0
  199. package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -0
  200. package/lib/typescript/core/types.d.ts +9 -0
  201. package/lib/typescript/core/types.d.ts.map +1 -0
  202. package/lib/typescript/errors/IndexSizeError.d.ts +5 -0
  203. package/lib/typescript/errors/IndexSizeError.d.ts.map +1 -0
  204. package/lib/typescript/errors/InvalidAccessError.d.ts +5 -0
  205. package/lib/typescript/errors/InvalidAccessError.d.ts.map +1 -0
  206. package/lib/typescript/errors/InvalidStateError.d.ts +5 -0
  207. package/lib/typescript/errors/InvalidStateError.d.ts.map +1 -0
  208. package/lib/typescript/errors/RangeError.d.ts +5 -0
  209. package/lib/typescript/errors/RangeError.d.ts.map +1 -0
  210. package/lib/typescript/errors/index.d.ts +5 -0
  211. package/lib/typescript/errors/index.d.ts.map +1 -0
  212. package/lib/typescript/index.d.ts +14 -0
  213. package/lib/typescript/index.d.ts.map +1 -0
  214. package/lib/typescript/interfaces.d.ts +78 -0
  215. package/lib/typescript/interfaces.d.ts.map +1 -0
  216. package/lib/typescript/utils/install.d.ts +7 -0
  217. package/lib/typescript/utils/install.d.ts.map +1 -0
  218. package/package.json +104 -5
  219. package/src/core/AudioBuffer.ts +68 -0
  220. package/src/core/AudioBufferSourceNode.ts +35 -0
  221. package/src/core/AudioContext.ts +12 -0
  222. package/src/core/AudioDestinationNode.ts +9 -0
  223. package/src/core/AudioNode.ts +38 -0
  224. package/src/core/AudioParam.ts +55 -0
  225. package/src/core/AudioScheduledSourceNode.ts +43 -0
  226. package/src/core/BaseAudioContext.ts +97 -0
  227. package/src/core/BiquadFilterNode.ts +49 -0
  228. package/src/core/GainNode.ts +13 -0
  229. package/src/core/OscillatorNode.ts +37 -0
  230. package/src/core/PeriodicWave.ts +10 -0
  231. package/src/core/StereoPannerNode.ts +13 -0
  232. package/src/core/types.ts +26 -0
  233. package/src/errors/IndexSizeError.ts +8 -0
  234. package/src/errors/InvalidAccessError.ts +8 -0
  235. package/src/errors/InvalidStateError.ts +8 -0
  236. package/src/errors/RangeError.ts +8 -0
  237. package/src/errors/index.ts +4 -0
  238. package/src/index.ts +25 -0
  239. package/src/interfaces.ts +120 -0
  240. package/src/modules/global.d.ts +10 -0
  241. package/src/utils/install.ts +39 -0
  242. package/index.ts +0 -1
@@ -0,0 +1,60 @@
1
+ #include "BiquadFilterNodeWrapper.h"
2
+
3
+ namespace audioapi {
4
+
5
+ std::shared_ptr<BiquadFilterNode>
6
+ BiquadFilterNodeWrapper::getBiquadFilterNodeFromAudioNode() {
7
+ return std::static_pointer_cast<BiquadFilterNode>(node_);
8
+ }
9
+
10
+ BiquadFilterNodeWrapper::BiquadFilterNodeWrapper(
11
+ const std::shared_ptr<BiquadFilterNode> &biquadFilterNode)
12
+ : AudioNodeWrapper(biquadFilterNode) {
13
+ auto frequencyParam = biquadFilterNode->getFrequencyParam();
14
+ frequencyParam_ = std::make_shared<AudioParamWrapper>(frequencyParam);
15
+ auto detuneParam = biquadFilterNode->getDetuneParam();
16
+ detuneParam_ = std::make_shared<AudioParamWrapper>(detuneParam);
17
+ auto QParam = biquadFilterNode->getQParam();
18
+ QParam_ = std::make_shared<AudioParamWrapper>(QParam);
19
+ auto gainParam = biquadFilterNode->getGainParam();
20
+ gainParam_ = std::make_shared<AudioParamWrapper>(gainParam);
21
+ }
22
+
23
+ std::shared_ptr<AudioParamWrapper> BiquadFilterNodeWrapper::getFrequencyParam()
24
+ const {
25
+ return frequencyParam_;
26
+ }
27
+
28
+ std::shared_ptr<AudioParamWrapper> BiquadFilterNodeWrapper::getDetuneParam()
29
+ const {
30
+ return detuneParam_;
31
+ }
32
+
33
+ std::shared_ptr<AudioParamWrapper> BiquadFilterNodeWrapper::getQParam() const {
34
+ return QParam_;
35
+ }
36
+
37
+ std::shared_ptr<AudioParamWrapper> BiquadFilterNodeWrapper::getGainParam()
38
+ const {
39
+ return gainParam_;
40
+ }
41
+
42
+ std::string BiquadFilterNodeWrapper::getType() {
43
+ auto biquadFilterNode_ = getBiquadFilterNodeFromAudioNode();
44
+ return biquadFilterNode_->getType();
45
+ }
46
+
47
+ void BiquadFilterNodeWrapper::setType(const std::string &filterType) {
48
+ auto biquadFilterNode_ = getBiquadFilterNodeFromAudioNode();
49
+ biquadFilterNode_->setType(filterType);
50
+ }
51
+
52
+ void BiquadFilterNodeWrapper::getFrequencyResponse(
53
+ const std::vector<float> &frequencyArray,
54
+ std::vector<float> &magResponseOutput,
55
+ std::vector<float> &phaseResponseOutput) {
56
+ auto biquadFilterNode_ = getBiquadFilterNodeFromAudioNode();
57
+ biquadFilterNode_->getFrequencyResponse(
58
+ frequencyArray, magResponseOutput, phaseResponseOutput);
59
+ }
60
+ } // namespace audioapi
@@ -0,0 +1,37 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+ #include <vector>
6
+
7
+ #include "AudioNodeWrapper.h"
8
+ #include "AudioParamWrapper.h"
9
+ #include "BiquadFilterNode.h"
10
+
11
+ namespace audioapi {
12
+
13
+ class BiquadFilterNodeWrapper : public AudioNodeWrapper {
14
+ public:
15
+ explicit BiquadFilterNodeWrapper(
16
+ const std::shared_ptr<BiquadFilterNode> &biquadFilterNode);
17
+
18
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getFrequencyParam() const;
19
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getDetuneParam() const;
20
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getQParam() const;
21
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getGainParam() const;
22
+ std::string getType();
23
+ void setType(const std::string &filterType);
24
+ void getFrequencyResponse(
25
+ const std::vector<float> &frequencyArray,
26
+ std::vector<float> &magResponseOutput,
27
+ std::vector<float> &phaseResponseOutput);
28
+
29
+ private:
30
+ std::shared_ptr<AudioParamWrapper> frequencyParam_;
31
+ std::shared_ptr<AudioParamWrapper> detuneParam_;
32
+ std::shared_ptr<AudioParamWrapper> QParam_;
33
+ std::shared_ptr<AudioParamWrapper> gainParam_;
34
+
35
+ std::shared_ptr<BiquadFilterNode> getBiquadFilterNodeFromAudioNode();
36
+ };
37
+ } // namespace audioapi
@@ -0,0 +1,14 @@
1
+ #include "GainNodeWrapper.h"
2
+
3
+ namespace audioapi {
4
+
5
+ GainNodeWrapper::GainNodeWrapper(const std::shared_ptr<GainNode> &gainNode)
6
+ : AudioNodeWrapper(gainNode) {
7
+ auto gainParam = gainNode->getGainParam();
8
+ gainParam_ = std::make_shared<AudioParamWrapper>(gainParam);
9
+ }
10
+
11
+ std::shared_ptr<AudioParamWrapper> GainNodeWrapper::getGainParam() const {
12
+ return gainParam_;
13
+ }
14
+ } // namespace audioapi
@@ -0,0 +1,20 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "AudioNodeWrapper.h"
6
+ #include "AudioParamWrapper.h"
7
+ #include "GainNode.h"
8
+
9
+ namespace audioapi {
10
+
11
+ class GainNodeWrapper : public AudioNodeWrapper {
12
+ public:
13
+ explicit GainNodeWrapper(const std::shared_ptr<GainNode> &gainNode);
14
+
15
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getGainParam() const;
16
+
17
+ private:
18
+ std::shared_ptr<AudioParamWrapper> gainParam_;
19
+ };
20
+ } // namespace audioapi
@@ -0,0 +1,44 @@
1
+ #include "OscillatorNodeWrapper.h"
2
+
3
+ namespace audioapi {
4
+
5
+ std::shared_ptr<OscillatorNode>
6
+ OscillatorNodeWrapper::getOscillatorNodeFromAudioNode() {
7
+ return std::static_pointer_cast<OscillatorNode>(node_);
8
+ }
9
+
10
+ OscillatorNodeWrapper::OscillatorNodeWrapper(
11
+ const std::shared_ptr<OscillatorNode> &oscillator)
12
+ : AudioScheduledSourceNodeWrapper(oscillator) {
13
+ auto frequencyParam = oscillator->getFrequencyParam();
14
+ frequencyParam_ = std::make_shared<AudioParamWrapper>(frequencyParam);
15
+ auto detuneParam = oscillator->getDetuneParam();
16
+ detuneParam_ = std::make_shared<AudioParamWrapper>(detuneParam);
17
+ }
18
+
19
+ std::shared_ptr<AudioParamWrapper> OscillatorNodeWrapper::getFrequencyParam()
20
+ const {
21
+ return frequencyParam_;
22
+ }
23
+
24
+ std::shared_ptr<AudioParamWrapper> OscillatorNodeWrapper::getDetuneParam()
25
+ const {
26
+ return detuneParam_;
27
+ }
28
+
29
+ std::string OscillatorNodeWrapper::getType() {
30
+ auto oscillatorNode_ = getOscillatorNodeFromAudioNode();
31
+ return oscillatorNode_->getType();
32
+ }
33
+
34
+ void OscillatorNodeWrapper::setType(const std::string &type) {
35
+ auto oscillatorNode_ = getOscillatorNodeFromAudioNode();
36
+ oscillatorNode_->setType(type);
37
+ }
38
+
39
+ void OscillatorNodeWrapper::setPeriodicWave(
40
+ const std::shared_ptr<PeriodicWaveWrapper> &periodicWave) {
41
+ auto oscillatorNode_ = getOscillatorNodeFromAudioNode();
42
+ oscillatorNode_->setPeriodicWave(periodicWave->periodicWave_);
43
+ }
44
+ } // namespace audioapi
@@ -0,0 +1,31 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+
6
+ #include "AudioParamWrapper.h"
7
+ #include "AudioScheduledSourceNodeWrapper.h"
8
+ #include "OscillatorNode.h"
9
+ #include "PeriodicWaveWrapper.h"
10
+
11
+ namespace audioapi {
12
+
13
+ class OscillatorNodeWrapper : public AudioScheduledSourceNodeWrapper {
14
+ public:
15
+ explicit OscillatorNodeWrapper(
16
+ const std::shared_ptr<OscillatorNode> &oscillatorNode);
17
+
18
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getFrequencyParam() const;
19
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getDetuneParam() const;
20
+ std::string getType();
21
+ void setType(const std::string &type);
22
+ void setPeriodicWave(
23
+ const std::shared_ptr<PeriodicWaveWrapper> &periodicWave);
24
+
25
+ private:
26
+ std::shared_ptr<AudioParamWrapper> frequencyParam_;
27
+ std::shared_ptr<AudioParamWrapper> detuneParam_;
28
+
29
+ std::shared_ptr<OscillatorNode> getOscillatorNodeFromAudioNode();
30
+ };
31
+ } // namespace audioapi
@@ -0,0 +1,17 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "PeriodicWave.h"
6
+
7
+ namespace audioapi {
8
+
9
+ class PeriodicWaveWrapper {
10
+ public:
11
+ explicit PeriodicWaveWrapper(
12
+ const std::shared_ptr<PeriodicWave> &periodicWave)
13
+ : periodicWave_(periodicWave) {}
14
+
15
+ std::shared_ptr<PeriodicWave> periodicWave_;
16
+ };
17
+ } // namespace audioapi
@@ -0,0 +1,16 @@
1
+ #include "StereoPannerNodeWrapper.h"
2
+
3
+ namespace audioapi {
4
+
5
+ StereoPannerNodeWrapper::StereoPannerNodeWrapper(
6
+ const std::shared_ptr<StereoPannerNode> &stereoPannerNode)
7
+ : AudioNodeWrapper(stereoPannerNode) {
8
+ auto panParam = stereoPannerNode->getPanParam();
9
+ panParam_ = std::make_shared<AudioParamWrapper>(panParam);
10
+ }
11
+
12
+ std::shared_ptr<AudioParamWrapper> StereoPannerNodeWrapper::getPanParam()
13
+ const {
14
+ return panParam_;
15
+ }
16
+ } // namespace audioapi
@@ -0,0 +1,21 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "AudioNodeWrapper.h"
6
+ #include "AudioParamWrapper.h"
7
+ #include "StereoPannerNode.h"
8
+
9
+ namespace audioapi {
10
+
11
+ class StereoPannerNodeWrapper : public AudioNodeWrapper {
12
+ public:
13
+ explicit StereoPannerNodeWrapper(
14
+ const std::shared_ptr<StereoPannerNode> &stereoPannerNode);
15
+
16
+ [[nodiscard]] std::shared_ptr<AudioParamWrapper> getPanParam() const;
17
+
18
+ private:
19
+ std::shared_ptr<AudioParamWrapper> panParam_;
20
+ };
21
+ } // namespace audioapi
@@ -0,0 +1,24 @@
1
+ #ifdef RCT_NEW_ARCH_ENABLED
2
+ #import <React/RCTInitializing.h>
3
+ #if REACT_NATIVE_MINOR_VERSION >= 74
4
+ #import <React/RCTRuntimeExecutorModule.h>
5
+ #import <ReactCommon/RCTRuntimeExecutor.h>
6
+ #endif // REACT_NATIVE_MINOR_VERSION >= 74
7
+ #else // RCT_NEW_ARCH_ENABLED
8
+ #import <React/RCTBridgeModule.h>
9
+ #endif // RCT_NEW_ARCH_ENABLED
10
+
11
+ #import <React/RCTEventEmitter.h>
12
+
13
+ @interface AudioAPIModule : RCTEventEmitter
14
+ #ifdef RCT_NEW_ARCH_ENABLED
15
+ <RCTInitializing
16
+ #if REACT_NATIVE_MINOR_VERSION >= 74
17
+ ,
18
+ RCTRuntimeExecutorModule
19
+ #endif // REACT_NATIVE_MINOR_VERSION >= 74
20
+ #else
21
+ <RCTBridgeModule
22
+ #endif // RCT_NEW_ARCH_ENABLED
23
+ >
24
+ @end
@@ -0,0 +1,44 @@
1
+ #import "AudioAPIModule.h"
2
+
3
+ #import <React/RCTBridge+Private.h>
4
+ #import <React/RCTUtils.h>
5
+ #import <jsi/jsi.h>
6
+
7
+ #import "AudioAPIInstallerHostObject.h"
8
+ #import "AudioAPIInstallerWrapper.h"
9
+
10
+ @implementation AudioAPIModule
11
+
12
+ RCT_EXPORT_MODULE(AudioAPIModule)
13
+
14
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
15
+ {
16
+ NSLog(@"Installing JSI bindings for react-native-audio-api...");
17
+ RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
18
+
19
+ if (cxxBridge == nil) {
20
+ NSLog(@"Error during getting bridge!");
21
+ return @false;
22
+ }
23
+
24
+ using namespace facebook;
25
+
26
+ auto jsRuntime = (jsi::Runtime *)cxxBridge.runtime;
27
+
28
+ if (jsRuntime == nil) {
29
+ NSLog(@"Error during getting jsRuntime!");
30
+ return @false;
31
+ }
32
+
33
+ auto &runtime = *jsRuntime;
34
+
35
+ auto wrapper = std::make_shared<audioapi::AudioAPIInstallerWrapper>();
36
+ auto hostObject = std::make_shared<audioapi::AudioAPIInstallerHostObject>(wrapper);
37
+ auto object = jsi::Object::createFromHostObject(runtime, hostObject);
38
+ runtime.global().setProperty(runtime, "__AudioAPIInstaller", std::move(object));
39
+
40
+ NSLog(@"Successfully installed JSI bindings for react-native-audio-api!");
41
+ return @true;
42
+ }
43
+
44
+ @end
@@ -0,0 +1,28 @@
1
+ #pragma once
2
+
3
+ #import <AVFoundation/AVFoundation.h>
4
+ #import <Foundation/Foundation.h>
5
+
6
+ typedef void (^RenderAudioBlock)(AudioBufferList* outputBuffer, int numFrames);
7
+
8
+ @interface AudioPlayer : NSObject
9
+
10
+ @property (nonatomic, strong) AVAudioEngine *audioEngine;
11
+ @property (nonatomic, weak) AVAudioSession *audioSession;
12
+ @property (nonatomic, strong) AVAudioFormat *format;
13
+ @property (nonatomic, strong) AVAudioSourceNode *sourceNode;
14
+ @property (nonatomic, copy) RenderAudioBlock renderAudio;
15
+
16
+ - (instancetype)initWithRenderAudioBlock:(RenderAudioBlock)renderAudio;
17
+
18
+ - (int)getSampleRate;
19
+
20
+ - (int)getBufferSizeInFrames;
21
+
22
+ - (void)start;
23
+
24
+ - (void)stop;
25
+
26
+ - (void)cleanup;
27
+
28
+ @end
@@ -0,0 +1,119 @@
1
+ #import <AudioPlayer.h>
2
+
3
+ @implementation AudioPlayer
4
+
5
+ - (instancetype)initWithRenderAudioBlock:(RenderAudioBlock)renderAudio
6
+ {
7
+ if (self = [super init]) {
8
+ self.renderAudio = [renderAudio copy];
9
+ self.audioEngine = [[AVAudioEngine alloc] init];
10
+ self.audioEngine.mainMixerNode.outputVolume = 1;
11
+
12
+ self.audioSession = AVAudioSession.sharedInstance;
13
+ NSError *error = nil;
14
+
15
+ // TODO:
16
+ // We will probably want to change it to AVAudioSessionCategoryPlayAndRecord in the future.
17
+ // Eventually we to make this a dynamic setting, if user of the lib wants to use recording features.
18
+ // But setting a recording category might require some setup first, so lets skip it for now :)
19
+ [self.audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
20
+
21
+ if (error != nil) {
22
+ @throw error;
23
+ }
24
+
25
+ [self.audioSession setActive:true error:&error];
26
+
27
+ if (error != nil) {
28
+ @throw error;
29
+ }
30
+
31
+ _format = [[AVAudioFormat alloc] initStandardFormatWithSampleRate:[self.audioSession sampleRate] channels:2];
32
+
33
+ __weak typeof(self) weakSelf = self;
34
+ _sourceNode = [[AVAudioSourceNode alloc] initWithFormat:self.format
35
+ renderBlock:^OSStatus(
36
+ BOOL *isSilence,
37
+ const AudioTimeStamp *timestamp,
38
+ AVAudioFrameCount frameCount,
39
+ AudioBufferList *outputData) {
40
+ return [weakSelf renderCallbackWithIsSilence:isSilence
41
+ timestamp:timestamp
42
+ frameCount:frameCount
43
+ outputData:outputData];
44
+ }];
45
+ }
46
+
47
+ return self;
48
+ }
49
+
50
+ - (int)getSampleRate
51
+ {
52
+ return [self.audioSession sampleRate];
53
+ }
54
+
55
+ - (int)getBufferSizeInFrames
56
+ {
57
+ // Note: might be important in the future.
58
+ // For some reason audioSession.IOBufferDuration is always 0.01, which for sample rate of 48k
59
+ // gives exactly 480 frames, while at the same time frameCount requested by AVAudioSourceEngine
60
+ // might vary f.e. between 555-560.
61
+ // preferredIOBufferDuration seems to be double the value (resulting in 960 frames),
62
+ // which is safer to base our internal AudioBus sizes.
63
+ // Buut no documentation => no guarantee :)
64
+ // If something is crackling when it should play silence, start here 📻
65
+ return (int)(self.audioSession.preferredIOBufferDuration * self.audioSession.sampleRate);
66
+ }
67
+
68
+ - (void)start
69
+ {
70
+ [self.audioEngine attachNode:self.sourceNode];
71
+ [self.audioEngine connect:self.sourceNode to:self.audioEngine.mainMixerNode format:self.format];
72
+
73
+
74
+ if (!self.audioEngine.isRunning) {
75
+ NSError *error = nil;
76
+ if (![self.audioEngine startAndReturnError:&error]) {
77
+ NSLog(@"Error starting audio engine: %@", [error localizedDescription]);
78
+ }
79
+ }
80
+ }
81
+
82
+ - (void)stop
83
+ {
84
+ [self.audioEngine detachNode:self.sourceNode];
85
+
86
+ if (self.audioEngine.isRunning) {
87
+ [self.audioEngine stop];
88
+ }
89
+
90
+ NSError *error = nil;
91
+ [self.audioSession setActive:false error:&error];
92
+
93
+ if (error != nil) {
94
+ @throw error;
95
+ }
96
+ }
97
+
98
+ - (void)cleanup
99
+ {
100
+ self.audioEngine = nil;
101
+ self.audioSession = nil;
102
+ self.renderAudio = nil;
103
+ }
104
+
105
+ - (OSStatus)renderCallbackWithIsSilence:(BOOL *)isSilence
106
+ timestamp:(const AudioTimeStamp *)timestamp
107
+ frameCount:(AVAudioFrameCount)frameCount
108
+ outputData:(AudioBufferList *)outputData
109
+ {
110
+ if (outputData->mNumberBuffers < 2) {
111
+ return noErr; // Ensure we have stereo output
112
+ }
113
+
114
+ self.renderAudio(outputData, frameCount);
115
+
116
+ return noErr;
117
+ }
118
+
119
+ @end
@@ -0,0 +1,33 @@
1
+ #pragma once
2
+
3
+ #ifdef __OBJC__ // when compiled as Objective-C++
4
+ #import <AudioPlayer.h>
5
+ #else // when compiled as C++
6
+ typedef struct objc_object AudioPlayer;
7
+ #endif // __OBJC__
8
+
9
+ #include <functional>
10
+
11
+ namespace audioapi {
12
+
13
+ class AudioContext;
14
+ class AudioBus;
15
+
16
+ class IOSAudioPlayer {
17
+ protected:
18
+ AudioBus* audioBus_;
19
+ AudioPlayer* audioPlayer_;
20
+ std::function<void(AudioBus*, int)> renderAudio_;
21
+
22
+ public:
23
+ explicit IOSAudioPlayer(const std::function<void(AudioBus*, int)> &renderAudio);
24
+ ~IOSAudioPlayer();
25
+
26
+ int getSampleRate() const;
27
+ int getBufferSizeInFrames() const;
28
+
29
+ void start();
30
+ void stop();
31
+
32
+ };
33
+ } // namespace audioapi
@@ -0,0 +1,57 @@
1
+ #import <AVFoundation/AVFoundation.h>
2
+
3
+ #include <AudioBus.h>
4
+ #include <Constants.h>
5
+ #include <AudioArray.h>
6
+ #include <IOSAudioPlayer.h>
7
+
8
+ namespace audioapi {
9
+
10
+ IOSAudioPlayer::IOSAudioPlayer(const std::function<void(AudioBus*, int)> &renderAudio) : renderAudio_(renderAudio), audioBus_(0)
11
+ {
12
+ RenderAudioBlock renderAudioBlock = ^(AudioBufferList* outputData, int numFrames) {
13
+ renderAudio_(audioBus_, numFrames);
14
+
15
+ for (int i = 0; i < outputData->mNumberBuffers; i += 1) {
16
+ float *outputBuffer = (float *)outputData->mBuffers[i].mData;
17
+
18
+ memcpy(outputBuffer, audioBus_->getChannel(i)->getData(), sizeof(float) * numFrames);
19
+ }
20
+ };
21
+
22
+ audioPlayer_ = [[AudioPlayer alloc] initWithRenderAudioBlock:renderAudioBlock];
23
+ audioBus_ = new AudioBus(getSampleRate(), getBufferSizeInFrames(), CHANNEL_COUNT);
24
+ }
25
+
26
+ IOSAudioPlayer::~IOSAudioPlayer()
27
+ {
28
+ stop();
29
+ [audioPlayer_ cleanup];
30
+
31
+ if (audioBus_) {
32
+ delete audioBus_;
33
+ audioBus_ = 0;
34
+ }
35
+ }
36
+
37
+ void IOSAudioPlayer::start()
38
+ {
39
+ return [audioPlayer_ start];
40
+ }
41
+
42
+ void IOSAudioPlayer::stop()
43
+ {
44
+ return [audioPlayer_ stop];
45
+ }
46
+
47
+ int IOSAudioPlayer::getSampleRate() const
48
+ {
49
+ return [audioPlayer_ getSampleRate];
50
+ }
51
+
52
+ int IOSAudioPlayer::getBufferSizeInFrames() const
53
+ {
54
+ return [audioPlayer_ getBufferSizeInFrames];
55
+ }
56
+
57
+ } // namespace audioapi
@@ -0,0 +1,37 @@
1
+ import { IndexSizeError } from '../errors';
2
+ export default class AudioBuffer {
3
+ /** @internal */
4
+
5
+ constructor(buffer) {
6
+ this.buffer = buffer;
7
+ this.length = buffer.length;
8
+ this.duration = buffer.duration;
9
+ this.sampleRate = buffer.sampleRate;
10
+ this.numberOfChannels = buffer.numberOfChannels;
11
+ }
12
+ getChannelData(channel) {
13
+ if (channel < 0 || channel >= this.numberOfChannels) {
14
+ throw new IndexSizeError(`The channel number provided (${channel}) is outside the range [0, ${this.numberOfChannels - 1}]`);
15
+ }
16
+ return this.buffer.getChannelData(channel);
17
+ }
18
+ copyFromChannel(destination, channelNumber, startInChannel = 0) {
19
+ if (channelNumber < 0 || channelNumber >= this.numberOfChannels) {
20
+ throw new IndexSizeError(`The channel number provided (${channelNumber}) is outside the range [0, ${this.numberOfChannels - 1}]`);
21
+ }
22
+ if (startInChannel < 0 || startInChannel >= this.length) {
23
+ throw new IndexSizeError(`The startInChannel number provided (${startInChannel}) is outside the range [0, ${this.length - 1}]`);
24
+ }
25
+ this.buffer.copyFromChannel(destination, channelNumber, startInChannel);
26
+ }
27
+ copyToChannel(source, channelNumber, startInChannel = 0) {
28
+ if (channelNumber < 0 || channelNumber >= this.numberOfChannels) {
29
+ throw new IndexSizeError(`The channel number provided (${channelNumber}) is outside the range [0, ${this.numberOfChannels - 1}]`);
30
+ }
31
+ if (startInChannel < 0 || startInChannel >= this.length) {
32
+ throw new IndexSizeError(`The startInChannel number provided (${startInChannel}) is outside the range [0, ${this.length - 1}]`);
33
+ }
34
+ this.buffer.copyToChannel(source, channelNumber, startInChannel);
35
+ }
36
+ }
37
+ //# sourceMappingURL=AudioBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["IndexSizeError","AudioBuffer","constructor","buffer","length","duration","sampleRate","numberOfChannels","getChannelData","channel","copyFromChannel","destination","channelNumber","startInChannel","copyToChannel","source"],"sourceRoot":"../../../src","sources":["core/AudioBuffer.ts"],"mappings":"AACA,SAASA,cAAc,QAAQ,WAAW;AAE1C,eAAe,MAAMC,WAAW,CAAC;EAK/B;;EAGAC,WAAWA,CAACC,MAAoB,EAAE;IAChC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,MAAM,GAAGD,MAAM,CAACC,MAAM;IAC3B,IAAI,CAACC,QAAQ,GAAGF,MAAM,CAACE,QAAQ;IAC/B,IAAI,CAACC,UAAU,GAAGH,MAAM,CAACG,UAAU;IACnC,IAAI,CAACC,gBAAgB,GAAGJ,MAAM,CAACI,gBAAgB;EACjD;EAEOC,cAAcA,CAACC,OAAe,EAAY;IAC/C,IAAIA,OAAO,GAAG,CAAC,IAAIA,OAAO,IAAI,IAAI,CAACF,gBAAgB,EAAE;MACnD,MAAM,IAAIP,cAAc,CACtB,gCAAgCS,OAAO,8BAA8B,IAAI,CAACF,gBAAgB,GAAG,CAAC,GAChG,CAAC;IACH;IACA,OAAO,IAAI,CAACJ,MAAM,CAACK,cAAc,CAACC,OAAO,CAAC;EAC5C;EAEOC,eAAeA,CACpBC,WAAqB,EACrBC,aAAqB,EACrBC,cAAsB,GAAG,CAAC,EACpB;IACN,IAAID,aAAa,GAAG,CAAC,IAAIA,aAAa,IAAI,IAAI,CAACL,gBAAgB,EAAE;MAC/D,MAAM,IAAIP,cAAc,CACtB,gCAAgCY,aAAa,8BAA8B,IAAI,CAACL,gBAAgB,GAAG,CAAC,GACtG,CAAC;IACH;IAEA,IAAIM,cAAc,GAAG,CAAC,IAAIA,cAAc,IAAI,IAAI,CAACT,MAAM,EAAE;MACvD,MAAM,IAAIJ,cAAc,CACtB,uCAAuCa,cAAc,8BAA8B,IAAI,CAACT,MAAM,GAAG,CAAC,GACpG,CAAC;IACH;IAEA,IAAI,CAACD,MAAM,CAACO,eAAe,CAACC,WAAW,EAAEC,aAAa,EAAEC,cAAc,CAAC;EACzE;EAEOC,aAAaA,CAClBC,MAAgB,EAChBH,aAAqB,EACrBC,cAAsB,GAAG,CAAC,EACpB;IACN,IAAID,aAAa,GAAG,CAAC,IAAIA,aAAa,IAAI,IAAI,CAACL,gBAAgB,EAAE;MAC/D,MAAM,IAAIP,cAAc,CACtB,gCAAgCY,aAAa,8BAA8B,IAAI,CAACL,gBAAgB,GAAG,CAAC,GACtG,CAAC;IACH;IAEA,IAAIM,cAAc,GAAG,CAAC,IAAIA,cAAc,IAAI,IAAI,CAACT,MAAM,EAAE;MACvD,MAAM,IAAIJ,cAAc,CACtB,uCAAuCa,cAAc,8BAA8B,IAAI,CAACT,MAAM,GAAG,CAAC,GACpG,CAAC;IACH;IAEA,IAAI,CAACD,MAAM,CAACW,aAAa,CAACC,MAAM,EAAEH,aAAa,EAAEC,cAAc,CAAC;EAClE;AACF","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
2
+ import AudioBuffer from './AudioBuffer';
3
+ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
4
+ constructor(context, node) {
5
+ super(context, node);
6
+ }
7
+ get buffer() {
8
+ const buffer = this.node.buffer;
9
+ if (!buffer) {
10
+ return null;
11
+ }
12
+ return new AudioBuffer(buffer);
13
+ }
14
+ set buffer(buffer) {
15
+ if (!buffer) {
16
+ this.node.buffer = null;
17
+ return;
18
+ }
19
+ this.node.buffer = buffer.buffer;
20
+ }
21
+ get loop() {
22
+ return this.node.loop;
23
+ }
24
+ set loop(value) {
25
+ this.node.loop = value;
26
+ }
27
+ }
28
+ //# sourceMappingURL=AudioBufferSourceNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioBufferSourceNode","constructor","context","node","buffer","loop","value"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":"AACA,OAAOA,wBAAwB,MAAM,4BAA4B;AAEjE,OAAOC,WAAW,MAAM,eAAe;AAEvC,eAAe,MAAMC,qBAAqB,SAASF,wBAAwB,CAAC;EAC1EG,WAAWA,CAACC,OAAyB,EAAEC,IAA4B,EAAE;IACnE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;EACtB;EAEA,IAAWC,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACD,IAAI,CAA4BC,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIL,WAAW,CAACK,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACD,IAAI,CAA4BC,MAAM,GAAG,IAAI;MACnD;IACF;IAEC,IAAI,CAACD,IAAI,CAA4BC,MAAM,GAAGA,MAAM,CAACA,MAAM;EAC9D;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACF,IAAI,CAA4BE,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACC,KAAc,EAAE;IAC7B,IAAI,CAACH,IAAI,CAA4BE,IAAI,GAAGC,KAAK;EACpD;AACF","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import BaseAudioContext from './BaseAudioContext';
2
+ export default class AudioContext extends BaseAudioContext {
3
+ constructor() {
4
+ super(global.__AudioAPIInstaller.createAudioContext());
5
+ }
6
+ close() {
7
+ this.context.close();
8
+ }
9
+ }
10
+ //# sourceMappingURL=AudioContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BaseAudioContext","AudioContext","constructor","global","__AudioAPIInstaller","createAudioContext","close","context"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":"AACA,OAAOA,gBAAgB,MAAM,oBAAoB;AAEjD,eAAe,MAAMC,YAAY,SAASD,gBAAgB,CAAC;EACzDE,WAAWA,CAAA,EAAG;IACZ,KAAK,CAACC,MAAM,CAACC,mBAAmB,CAACC,kBAAkB,CAAC,CAAC,CAAC;EACxD;EAEAC,KAAKA,CAAA,EAAS;IACX,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EACzC;AACF","ignoreList":[]}