react-native-audio-api 0.11.0-nightly-568a154-20251222 → 0.11.0-nightly-94b7f30-20251224

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 (207) hide show
  1. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +1 -1
  2. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +11 -3
  3. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +47 -79
  4. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +3 -2
  5. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +2 -0
  6. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +9 -1
  7. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -0
  8. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +6 -2
  9. package/common/cpp/audioapi/HostObjects/effects/WaveShaperNodeHostObject.cpp +72 -0
  10. package/common/cpp/audioapi/HostObjects/effects/WaveShaperNodeHostObject.h +23 -0
  11. package/common/cpp/audioapi/core/AudioContext.cpp +15 -13
  12. package/common/cpp/audioapi/core/AudioContext.h +2 -1
  13. package/common/cpp/audioapi/core/AudioNode.cpp +39 -24
  14. package/common/cpp/audioapi/core/AudioNode.h +3 -3
  15. package/common/cpp/audioapi/core/AudioParam.cpp +9 -6
  16. package/common/cpp/audioapi/core/AudioParam.h +2 -2
  17. package/common/cpp/audioapi/core/BaseAudioContext.cpp +32 -21
  18. package/common/cpp/audioapi/core/BaseAudioContext.h +5 -1
  19. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +8 -11
  20. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
  21. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +9 -3
  22. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
  23. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +18 -9
  24. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
  25. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +3 -3
  26. package/common/cpp/audioapi/core/effects/ConvolverNode.h +1 -1
  27. package/common/cpp/audioapi/core/effects/DelayNode.cpp +20 -11
  28. package/common/cpp/audioapi/core/effects/DelayNode.h +1 -1
  29. package/common/cpp/audioapi/core/effects/GainNode.cpp +12 -4
  30. package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
  31. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +6 -3
  32. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +1 -1
  33. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +7 -4
  34. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
  35. package/common/cpp/audioapi/core/effects/WaveShaperNode.cpp +79 -0
  36. package/common/cpp/audioapi/core/effects/WaveShaperNode.h +66 -0
  37. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +2 -2
  38. package/common/cpp/audioapi/core/effects/WorkletNode.h +2 -2
  39. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +7 -4
  40. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +6 -2
  41. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +2 -3
  42. package/common/cpp/audioapi/core/sources/AudioBuffer.h +1 -1
  43. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +59 -25
  44. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +4 -2
  45. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +18 -11
  46. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +3 -1
  47. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -21
  48. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +3 -3
  49. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +11 -11
  50. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +4 -2
  51. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +16 -8
  52. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +1 -1
  53. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +30 -18
  54. package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
  55. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +4 -4
  56. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
  57. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +24 -10
  58. package/common/cpp/audioapi/core/sources/StreamerNode.h +4 -3
  59. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +11 -4
  60. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +6 -2
  61. package/common/cpp/audioapi/core/types/OverSampleType.h +7 -0
  62. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +1 -0
  63. package/common/cpp/audioapi/dsp/Resampler.cpp +200 -0
  64. package/common/cpp/audioapi/dsp/Resampler.h +65 -0
  65. package/common/cpp/audioapi/dsp/WaveShaper.cpp +105 -0
  66. package/common/cpp/audioapi/dsp/WaveShaper.h +46 -0
  67. package/common/cpp/audioapi/utils/AudioArray.cpp +5 -0
  68. package/common/cpp/audioapi/utils/AudioArray.h +6 -0
  69. package/common/cpp/test/RunTests.sh +1 -1
  70. package/common/cpp/test/src/AudioParamTest.cpp +10 -10
  71. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +31 -15
  72. package/common/cpp/test/src/ConstantSourceTest.cpp +16 -14
  73. package/common/cpp/test/src/DelayTest.cpp +14 -13
  74. package/common/cpp/test/src/GainTest.cpp +10 -9
  75. package/common/cpp/test/src/IIRFilterTest.cpp +4 -4
  76. package/common/cpp/test/src/OscillatorTest.cpp +2 -2
  77. package/common/cpp/test/src/StereoPannerTest.cpp +14 -12
  78. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +25 -25
  79. package/common/cpp/test/src/biquad/BiquadFilterTest.h +3 -5
  80. package/common/cpp/test/src/core/effects/WaveShaperNodeTest.cpp +76 -0
  81. package/common/cpp/test/src/dsp/ResamplerTest.cpp +117 -0
  82. package/ios/audioapi/ios/AudioAPIModule.mm +4 -4
  83. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  84. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +9 -3
  85. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +0 -3
  86. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -1
  87. package/lib/commonjs/AudioAPIModule/AudioAPIModule.web.js +20 -0
  88. package/lib/commonjs/AudioAPIModule/AudioAPIModule.web.js.map +1 -0
  89. package/lib/commonjs/AudioAPIModule/ModuleInterfaces.js +6 -0
  90. package/lib/commonjs/AudioAPIModule/ModuleInterfaces.js.map +1 -0
  91. package/lib/commonjs/api.js +16 -0
  92. package/lib/commonjs/api.js.map +1 -1
  93. package/lib/commonjs/api.web.js +23 -0
  94. package/lib/commonjs/api.web.js.map +1 -1
  95. package/lib/commonjs/core/BaseAudioContext.js +4 -0
  96. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  97. package/lib/commonjs/core/WaveShaperNode.js +38 -0
  98. package/lib/commonjs/core/WaveShaperNode.js.map +1 -0
  99. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  100. package/lib/commonjs/specs/NativeAudioAPIModule.web.js +47 -0
  101. package/lib/commonjs/specs/NativeAudioAPIModule.web.js.map +1 -0
  102. package/lib/commonjs/system/AudioManager.js.map +1 -1
  103. package/lib/commonjs/system/types.js +4 -0
  104. package/lib/commonjs/web-core/AudioContext.js +4 -0
  105. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  106. package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
  107. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  108. package/lib/commonjs/web-core/WaveShaperNode.js +38 -0
  109. package/lib/commonjs/web-core/WaveShaperNode.js.map +1 -0
  110. package/lib/commonjs/web-system/AudioManager.js +30 -0
  111. package/lib/commonjs/web-system/AudioManager.js.map +1 -0
  112. package/lib/commonjs/web-system/index.js +12 -0
  113. package/lib/commonjs/web-system/index.js.map +1 -1
  114. package/lib/module/AudioAPIModule/AudioAPIModule.js +0 -4
  115. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -1
  116. package/lib/module/AudioAPIModule/AudioAPIModule.web.js +16 -0
  117. package/lib/module/AudioAPIModule/AudioAPIModule.web.js.map +1 -0
  118. package/lib/module/AudioAPIModule/ModuleInterfaces.js +4 -0
  119. package/lib/module/AudioAPIModule/ModuleInterfaces.js.map +1 -0
  120. package/lib/module/AudioAPIModule/index.js +1 -1
  121. package/lib/module/AudioAPIModule/index.js.map +1 -1
  122. package/lib/module/api.js +2 -0
  123. package/lib/module/api.js.map +1 -1
  124. package/lib/module/api.web.js +3 -1
  125. package/lib/module/api.web.js.map +1 -1
  126. package/lib/module/core/BaseAudioContext.js +4 -0
  127. package/lib/module/core/BaseAudioContext.js.map +1 -1
  128. package/lib/module/core/WaveShaperNode.js +32 -0
  129. package/lib/module/core/WaveShaperNode.js.map +1 -0
  130. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  131. package/lib/module/specs/NativeAudioAPIModule.web.js +44 -0
  132. package/lib/module/specs/NativeAudioAPIModule.web.js.map +1 -0
  133. package/lib/module/specs/index.js +1 -1
  134. package/lib/module/specs/index.js.map +1 -1
  135. package/lib/module/system/AudioManager.js.map +1 -1
  136. package/lib/module/system/types.js +2 -0
  137. package/lib/module/web-core/AudioContext.js +4 -0
  138. package/lib/module/web-core/AudioContext.js.map +1 -1
  139. package/lib/module/web-core/OfflineAudioContext.js +4 -0
  140. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  141. package/lib/module/web-core/WaveShaperNode.js +32 -0
  142. package/lib/module/web-core/WaveShaperNode.js.map +1 -0
  143. package/lib/module/web-system/AudioManager.js +26 -0
  144. package/lib/module/web-system/AudioManager.js.map +1 -0
  145. package/lib/module/web-system/index.js +1 -0
  146. package/lib/module/web-system/index.js.map +1 -1
  147. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +2 -10
  148. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -1
  149. package/lib/typescript/AudioAPIModule/AudioAPIModule.web.d.ts +13 -0
  150. package/lib/typescript/AudioAPIModule/AudioAPIModule.web.d.ts.map +1 -0
  151. package/lib/typescript/AudioAPIModule/ModuleInterfaces.d.ts +18 -0
  152. package/lib/typescript/AudioAPIModule/ModuleInterfaces.d.ts.map +1 -0
  153. package/lib/typescript/api.d.ts +2 -0
  154. package/lib/typescript/api.d.ts.map +1 -1
  155. package/lib/typescript/api.web.d.ts +3 -1
  156. package/lib/typescript/api.web.d.ts.map +1 -1
  157. package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
  158. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  159. package/lib/typescript/core/WaveShaperNode.d.ts +9 -0
  160. package/lib/typescript/core/WaveShaperNode.d.ts.map +1 -0
  161. package/lib/typescript/interfaces.d.ts +8 -2
  162. package/lib/typescript/interfaces.d.ts.map +1 -1
  163. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -1
  164. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  165. package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts +34 -0
  166. package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts.map +1 -0
  167. package/lib/typescript/system/AudioManager.d.ts +2 -2
  168. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  169. package/lib/typescript/system/notification/types.d.ts +1 -1
  170. package/lib/typescript/system/notification/types.d.ts.map +1 -1
  171. package/lib/typescript/system/types.d.ts +17 -0
  172. package/lib/typescript/system/types.d.ts.map +1 -1
  173. package/lib/typescript/types.d.ts +1 -0
  174. package/lib/typescript/types.d.ts.map +1 -1
  175. package/lib/typescript/web-core/AudioContext.d.ts +2 -0
  176. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  177. package/lib/typescript/web-core/BaseAudioContext.d.ts +3 -1
  178. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  179. package/lib/typescript/web-core/OfflineAudioContext.d.ts +2 -0
  180. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  181. package/lib/typescript/web-core/WaveShaperNode.d.ts +9 -0
  182. package/lib/typescript/web-core/WaveShaperNode.d.ts.map +1 -0
  183. package/lib/typescript/web-system/AudioManager.d.ts +24 -0
  184. package/lib/typescript/web-system/AudioManager.d.ts.map +1 -0
  185. package/lib/typescript/web-system/index.d.ts +1 -0
  186. package/lib/typescript/web-system/index.d.ts.map +1 -1
  187. package/package.json +1 -1
  188. package/src/AudioAPIModule/AudioAPIModule.ts +6 -17
  189. package/src/AudioAPIModule/AudioAPIModule.web.ts +18 -0
  190. package/src/AudioAPIModule/ModuleInterfaces.ts +25 -0
  191. package/src/api.ts +2 -0
  192. package/src/api.web.ts +3 -0
  193. package/src/core/BaseAudioContext.ts +5 -0
  194. package/src/core/WaveShaperNode.ts +43 -0
  195. package/src/interfaces.ts +9 -1
  196. package/src/specs/NativeAudioAPIModule.ts +5 -3
  197. package/src/specs/NativeAudioAPIModule.web.ts +93 -0
  198. package/src/system/AudioManager.ts +19 -14
  199. package/src/system/notification/types.ts +1 -1
  200. package/src/system/types.ts +22 -0
  201. package/src/types.ts +2 -0
  202. package/src/web-core/AudioContext.tsx +5 -0
  203. package/src/web-core/BaseAudioContext.tsx +3 -1
  204. package/src/web-core/OfflineAudioContext.tsx +5 -0
  205. package/src/web-core/WaveShaperNode.tsx +42 -0
  206. package/src/web-system/AudioManager.ts +33 -0
  207. package/src/web-system/index.ts +1 -0
@@ -14,14 +14,14 @@ using namespace audioapi;
14
14
  class IIRFilterTest : public ::testing::Test {
15
15
  protected:
16
16
  std::shared_ptr<MockAudioEventHandlerRegistry> eventRegistry;
17
- std::unique_ptr<OfflineAudioContext> context;
17
+ std::shared_ptr<OfflineAudioContext> context;
18
18
  static constexpr int sampleRate = 44100;
19
19
  static constexpr float nyquistFrequency = sampleRate / 2.0f;
20
20
  static constexpr float tolerance = 0.0001f;
21
21
 
22
22
  void SetUp() override {
23
23
  eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
24
- context = std::make_unique<OfflineAudioContext>(
24
+ context = std::make_shared<OfflineAudioContext>(
25
25
  2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
26
26
  }
27
27
 
@@ -99,7 +99,7 @@ TEST_F(IIRFilterTest, GetFrequencyResponse) {
99
99
  const std::vector<float> feedforward = {0.0050662636, 0.0101325272, 0.0050662636};
100
100
  const std::vector<float> feedback = {1.0632762845, -1.9797349456, 0.9367237155};
101
101
 
102
- auto node = std::make_shared<IIRFilterNode>(context.get(), feedforward, feedback);
102
+ auto node = IIRFilterNode(context, feedforward, feedback);
103
103
 
104
104
  float frequency = 1000.0f;
105
105
  float normalizedFrequency = frequency / nyquistFrequency;
@@ -120,7 +120,7 @@ TEST_F(IIRFilterTest, GetFrequencyResponse) {
120
120
  std::vector<float> magResponseExpected(TestFrequencies.size());
121
121
  std::vector<float> phaseResponseExpected(TestFrequencies.size());
122
122
 
123
- node->getFrequencyResponse(
123
+ node.getFrequencyResponse(
124
124
  TestFrequencies.data(),
125
125
  magResponseNode.data(),
126
126
  phaseResponseNode.data(),
@@ -10,12 +10,12 @@ using namespace audioapi;
10
10
  class OscillatorTest : public ::testing::Test {
11
11
  protected:
12
12
  std::shared_ptr<MockAudioEventHandlerRegistry> eventRegistry;
13
- std::unique_ptr<OfflineAudioContext> context;
13
+ std::shared_ptr<OfflineAudioContext> context;
14
14
  static constexpr int sampleRate = 44100;
15
15
 
16
16
  void SetUp() override {
17
17
  eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
18
- context = std::make_unique<OfflineAudioContext>(
18
+ context = std::make_shared<OfflineAudioContext>(
19
19
  2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
20
20
  }
21
21
  };
@@ -12,19 +12,21 @@ using namespace audioapi;
12
12
  class StereoPannerTest : public ::testing::Test {
13
13
  protected:
14
14
  std::shared_ptr<MockAudioEventHandlerRegistry> eventRegistry;
15
- std::unique_ptr<OfflineAudioContext> context;
15
+ std::shared_ptr<OfflineAudioContext> context;
16
16
  static constexpr int sampleRate = 44100;
17
17
 
18
18
  void SetUp() override {
19
19
  eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
20
- context = std::make_unique<OfflineAudioContext>(
20
+ context = std::make_shared<OfflineAudioContext>(
21
21
  2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
22
+ context->initialize();
22
23
  }
23
24
  };
24
25
 
25
26
  class TestableStereoPannerNode : public StereoPannerNode {
26
27
  public:
27
- explicit TestableStereoPannerNode(BaseAudioContext *context) : StereoPannerNode(context) {}
28
+ explicit TestableStereoPannerNode(std::shared_ptr<BaseAudioContext> context)
29
+ : StereoPannerNode(context) {}
28
30
 
29
31
  void setPanParam(float value) {
30
32
  getPanParam()->setValue(value);
@@ -45,15 +47,15 @@ TEST_F(StereoPannerTest, StereoPannerCanBeCreated) {
45
47
  TEST_F(StereoPannerTest, PanModulatesInputMonoCorrectly) {
46
48
  static constexpr float PAN_VALUE = 0.5;
47
49
  static constexpr int FRAMES_TO_PROCESS = 4;
48
- auto panNode = std::make_shared<TestableStereoPannerNode>(context.get());
49
- panNode->setPanParam(PAN_VALUE);
50
+ auto panNode = TestableStereoPannerNode(context);
51
+ panNode.setPanParam(PAN_VALUE);
50
52
 
51
53
  auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
52
54
  for (size_t i = 0; i < bus->getSize(); ++i) {
53
55
  (*bus->getChannelByType(AudioBus::ChannelLeft))[i] = i + 1;
54
56
  }
55
57
 
56
- auto resultBus = panNode->processNode(bus, FRAMES_TO_PROCESS);
58
+ auto resultBus = panNode.processNode(bus, FRAMES_TO_PROCESS);
57
59
  // x = (0.5 + 1) / 2 = 0.75
58
60
  // gainL = cos(x * (π / 2)) = cos(0.75 * (π / 2)) = 0.38268343236508984
59
61
  // gainR = sin(x * (π / 2)) = sin(0.75 * (π / 2)) = 0.9238795325112867
@@ -72,8 +74,8 @@ TEST_F(StereoPannerTest, PanModulatesInputMonoCorrectly) {
72
74
  TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithNegativePan) {
73
75
  static constexpr float PAN_VALUE = -0.5;
74
76
  static constexpr int FRAMES_TO_PROCESS = 4;
75
- auto panNode = std::make_shared<TestableStereoPannerNode>(context.get());
76
- panNode->setPanParam(PAN_VALUE);
77
+ auto panNode = TestableStereoPannerNode(context);
78
+ panNode.setPanParam(PAN_VALUE);
77
79
 
78
80
  auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
79
81
  for (size_t i = 0; i < bus->getSize(); ++i) {
@@ -81,7 +83,7 @@ TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithNegativePan) {
81
83
  (*bus->getChannelByType(AudioBus::ChannelRight))[i] = i + 1;
82
84
  }
83
85
 
84
- auto resultBus = panNode->processNode(bus, FRAMES_TO_PROCESS);
86
+ auto resultBus = panNode.processNode(bus, FRAMES_TO_PROCESS);
85
87
  // x = -0.5 + 1 = 0.5
86
88
  // gainL = cos(x * (π / 2)) = cos(0.5 * (π / 2)) = 0.7071067811865476
87
89
  // gainR = sin(x * (π / 2)) = sin(0.5 * (π / 2)) = 0.7071067811865476
@@ -100,8 +102,8 @@ TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithNegativePan) {
100
102
  TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithPositivePan) {
101
103
  static constexpr float PAN_VALUE = 0.75;
102
104
  static constexpr int FRAMES_TO_PROCESS = 4;
103
- auto panNode = std::make_shared<TestableStereoPannerNode>(context.get());
104
- panNode->setPanParam(PAN_VALUE);
105
+ auto panNode = TestableStereoPannerNode(context);
106
+ panNode.setPanParam(PAN_VALUE);
105
107
 
106
108
  auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
107
109
  for (size_t i = 0; i < bus->getSize(); ++i) {
@@ -109,7 +111,7 @@ TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithPositivePan) {
109
111
  (*bus->getChannelByType(AudioBus::ChannelRight))[i] = i + 1;
110
112
  }
111
113
 
112
- auto resultBus = panNode->processNode(bus, FRAMES_TO_PROCESS);
114
+ auto resultBus = panNode.processNode(bus, FRAMES_TO_PROCESS);
113
115
  // x = 0.75
114
116
  // gainL = cos(x * (π / 2)) = cos(0.75 * (π / 2)) = 0.38268343236508984
115
117
  // gainR = sin(x * (π / 2)) = sin(0.75 * (π / 2)) = 0.9238795325112867
@@ -6,76 +6,76 @@
6
6
  namespace audioapi {
7
7
 
8
8
  void BiquadFilterTest::expectCoefficientsNear(
9
- const std::shared_ptr<BiquadFilterNode> &biquadNode,
9
+ const BiquadFilterNode &biquadNode,
10
10
  const BiquadCoefficients &expected) {
11
- EXPECT_NEAR(biquadNode->b0_, expected.b0, tolerance);
12
- EXPECT_NEAR(biquadNode->b1_, expected.b1, tolerance);
13
- EXPECT_NEAR(biquadNode->b2_, expected.b2, tolerance);
14
- EXPECT_NEAR(biquadNode->a1_, expected.a1, tolerance);
15
- EXPECT_NEAR(biquadNode->a2_, expected.a2, tolerance);
11
+ EXPECT_NEAR(biquadNode.b0_, expected.b0, tolerance);
12
+ EXPECT_NEAR(biquadNode.b1_, expected.b1, tolerance);
13
+ EXPECT_NEAR(biquadNode.b2_, expected.b2, tolerance);
14
+ EXPECT_NEAR(biquadNode.a1_, expected.a1, tolerance);
15
+ EXPECT_NEAR(biquadNode.a2_, expected.a2, tolerance);
16
16
  }
17
17
 
18
18
  void BiquadFilterTest::testLowpass(float frequency, float Q) {
19
- auto node = std::make_shared<BiquadFilterNode>(context.get());
19
+ auto node = BiquadFilterNode(context);
20
20
  float normalizedFrequency = frequency / nyquistFrequency;
21
21
 
22
- node->setLowpassCoefficients(normalizedFrequency, Q);
22
+ node.setLowpassCoefficients(normalizedFrequency, Q);
23
23
  expectCoefficientsNear(node, calculateLowpassCoefficients(normalizedFrequency, Q));
24
24
  }
25
25
 
26
26
  void BiquadFilterTest::testHighpass(float frequency, float Q) {
27
- auto node = std::make_shared<BiquadFilterNode>(context.get());
27
+ auto node = BiquadFilterNode(context);
28
28
  float normalizedFrequency = frequency / nyquistFrequency;
29
29
 
30
- node->setHighpassCoefficients(normalizedFrequency, Q);
30
+ node.setHighpassCoefficients(normalizedFrequency, Q);
31
31
  expectCoefficientsNear(node, calculateHighpassCoefficients(normalizedFrequency, Q));
32
32
  }
33
33
 
34
34
  void BiquadFilterTest::testBandpass(float frequency, float Q) {
35
- auto node = std::make_shared<BiquadFilterNode>(context.get());
35
+ auto node = BiquadFilterNode(context);
36
36
  float normalizedFrequency = frequency / nyquistFrequency;
37
37
 
38
- node->setBandpassCoefficients(normalizedFrequency, Q);
38
+ node.setBandpassCoefficients(normalizedFrequency, Q);
39
39
  expectCoefficientsNear(node, calculateBandpassCoefficients(normalizedFrequency, Q));
40
40
  }
41
41
 
42
42
  void BiquadFilterTest::testNotch(float frequency, float Q) {
43
- auto node = std::make_shared<BiquadFilterNode>(context.get());
43
+ auto node = BiquadFilterNode(context);
44
44
  float normalizedFrequency = frequency / nyquistFrequency;
45
45
 
46
- node->setNotchCoefficients(normalizedFrequency, Q);
46
+ node.setNotchCoefficients(normalizedFrequency, Q);
47
47
  expectCoefficientsNear(node, calculateNotchCoefficients(normalizedFrequency, Q));
48
48
  }
49
49
 
50
50
  void BiquadFilterTest::testAllpass(float frequency, float Q) {
51
- auto node = std::make_shared<BiquadFilterNode>(context.get());
51
+ auto node = BiquadFilterNode(context);
52
52
  float normalizedFrequency = frequency / nyquistFrequency;
53
53
 
54
- node->setAllpassCoefficients(normalizedFrequency, Q);
54
+ node.setAllpassCoefficients(normalizedFrequency, Q);
55
55
  expectCoefficientsNear(node, calculateAllpassCoefficients(normalizedFrequency, Q));
56
56
  }
57
57
 
58
58
  void BiquadFilterTest::testPeaking(float frequency, float Q, float gain) {
59
- auto node = std::make_shared<BiquadFilterNode>(context.get());
59
+ auto node = BiquadFilterNode(context);
60
60
  float normalizedFrequency = frequency / nyquistFrequency;
61
61
 
62
- node->setPeakingCoefficients(normalizedFrequency, Q, gain);
62
+ node.setPeakingCoefficients(normalizedFrequency, Q, gain);
63
63
  expectCoefficientsNear(node, calculatePeakingCoefficients(normalizedFrequency, Q, gain));
64
64
  }
65
65
 
66
66
  void BiquadFilterTest::testLowshelf(float frequency, float gain) {
67
- auto node = std::make_shared<BiquadFilterNode>(context.get());
67
+ auto node = BiquadFilterNode(context);
68
68
  float normalizedFrequency = frequency / nyquistFrequency;
69
69
 
70
- node->setLowshelfCoefficients(normalizedFrequency, gain);
70
+ node.setLowshelfCoefficients(normalizedFrequency, gain);
71
71
  expectCoefficientsNear(node, calculateLowshelfCoefficients(normalizedFrequency, gain));
72
72
  }
73
73
 
74
74
  void BiquadFilterTest::testHighshelf(float frequency, float gain) {
75
- auto node = std::make_shared<BiquadFilterNode>(context.get());
75
+ auto node = BiquadFilterNode(context);
76
76
  float normalizedFrequency = frequency / nyquistFrequency;
77
77
 
78
- node->setHighshelfCoefficients(normalizedFrequency, gain);
78
+ node.setHighshelfCoefficients(normalizedFrequency, gain);
79
79
  expectCoefficientsNear(node, calculateHighshelfCoefficients(normalizedFrequency, gain));
80
80
  }
81
81
 
@@ -218,13 +218,13 @@ TEST_P(BiquadFilterGainTest, SetHighshelfCoefficients) {
218
218
  }
219
219
 
220
220
  TEST_F(BiquadFilterTest, GetFrequencyResponse) {
221
- auto node = std::make_shared<BiquadFilterNode>(context.get());
221
+ auto node = BiquadFilterNode(context);
222
222
 
223
223
  float frequency = 1000.0f;
224
224
  float Q = 1.0f;
225
225
  float normalizedFrequency = frequency / nyquistFrequency;
226
226
 
227
- node->setLowpassCoefficients(normalizedFrequency, Q);
227
+ node.setLowpassCoefficients(normalizedFrequency, Q);
228
228
  auto coeffs = calculateLowpassCoefficients(normalizedFrequency, Q);
229
229
 
230
230
  std::vector<float> TestFrequencies = {
@@ -243,7 +243,7 @@ TEST_F(BiquadFilterTest, GetFrequencyResponse) {
243
243
  std::vector<float> magResponseExpected(TestFrequencies.size());
244
244
  std::vector<float> phaseResponseExpected(TestFrequencies.size());
245
245
 
246
- node->getFrequencyResponse(
246
+ node.getFrequencyResponse(
247
247
  TestFrequencies.data(),
248
248
  magResponseNode.data(),
249
249
  phaseResponseNode.data(),
@@ -15,17 +15,15 @@ namespace audioapi {
15
15
  class BiquadFilterTest : public ::testing::Test {
16
16
  protected:
17
17
  std::shared_ptr<MockAudioEventHandlerRegistry> eventRegistry;
18
- std::unique_ptr<OfflineAudioContext> context;
18
+ std::shared_ptr<OfflineAudioContext> context;
19
19
 
20
20
  void SetUp() override {
21
21
  eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
22
- context = std::make_unique<OfflineAudioContext>(
22
+ context = std::make_shared<OfflineAudioContext>(
23
23
  2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
24
24
  }
25
25
 
26
- void expectCoefficientsNear(
27
- const std::shared_ptr<BiquadFilterNode> &node,
28
- const BiquadCoefficients &expected);
26
+ void expectCoefficientsNear(const BiquadFilterNode &node, const BiquadCoefficients &expected);
29
27
  void testLowpass(float frequency, float Q);
30
28
  void testHighpass(float frequency, float Q);
31
29
  void testBandpass(float frequency, float Q);
@@ -0,0 +1,76 @@
1
+ #include <audioapi/core/OfflineAudioContext.h>
2
+ #include <audioapi/core/effects/WaveShaperNode.h>
3
+ #include <audioapi/core/utils/worklets/SafeIncludes.h>
4
+ #include <audioapi/utils/AudioArray.h>
5
+ #include <audioapi/utils/AudioBus.h>
6
+ #include <gtest/gtest.h>
7
+ #include <test/src/MockAudioEventHandlerRegistry.h>
8
+ #include <memory>
9
+
10
+ using namespace audioapi;
11
+
12
+ class WaveShaperNodeTest : public ::testing::Test {
13
+ protected:
14
+ std::shared_ptr<MockAudioEventHandlerRegistry> eventRegistry;
15
+ std::shared_ptr<OfflineAudioContext> context;
16
+ static constexpr int sampleRate = 44100;
17
+
18
+ void SetUp() override {
19
+ eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
20
+ context = std::make_shared<OfflineAudioContext>(
21
+ 2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
22
+ }
23
+ };
24
+
25
+ class TestableWaveShaperNode : public WaveShaperNode {
26
+ public:
27
+ explicit TestableWaveShaperNode(std::shared_ptr<BaseAudioContext> context)
28
+ : WaveShaperNode(context) {
29
+ testCurve_ = std::make_shared<AudioArray>(3);
30
+ auto data = testCurve_->getData();
31
+ data[0] = -2.0f;
32
+ data[1] = 0.0f;
33
+ data[2] = 2.0f;
34
+ }
35
+
36
+ std::shared_ptr<AudioBus> processNode(
37
+ const std::shared_ptr<AudioBus> &processingBus,
38
+ int framesToProcess) override {
39
+ return WaveShaperNode::processNode(processingBus, framesToProcess);
40
+ }
41
+
42
+ std::shared_ptr<AudioArray> testCurve_;
43
+ };
44
+
45
+ TEST_F(WaveShaperNodeTest, WaveShaperNodeCanBeCreated) {
46
+ auto waveShaper = context->createWaveShaper();
47
+ ASSERT_NE(waveShaper, nullptr);
48
+ }
49
+
50
+ TEST_F(WaveShaperNodeTest, NullCanBeAsignedToCurve) {
51
+ auto waveShaper = context->createWaveShaper();
52
+ ASSERT_NO_THROW(waveShaper->setCurve(nullptr));
53
+ ASSERT_EQ(waveShaper->getCurve(), nullptr);
54
+ }
55
+
56
+ TEST_F(WaveShaperNodeTest, NoneOverSamplingProcessesCorrectly) {
57
+ static constexpr int FRAMES_TO_PROCESS = 5;
58
+ auto waveShaper = std::make_shared<TestableWaveShaperNode>(context);
59
+ waveShaper->setOversample("none");
60
+ waveShaper->setCurve(waveShaper->testCurve_);
61
+
62
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
63
+ for (size_t i = 0; i < bus->getSize(); ++i) {
64
+ bus->getChannel(0)->getData()[i] = -1.0f + i * 0.5f;
65
+ }
66
+
67
+ auto resultBus = waveShaper->processNode(bus, FRAMES_TO_PROCESS);
68
+ auto curveData = waveShaper->testCurve_->getData();
69
+ auto resultData = resultBus->getChannel(0)->getData();
70
+
71
+ EXPECT_FLOAT_EQ(resultData[0], curveData[0]);
72
+ EXPECT_FLOAT_EQ(resultData[1], -1.0f);
73
+ EXPECT_FLOAT_EQ(resultData[2], 0.0f);
74
+ EXPECT_FLOAT_EQ(resultData[3], 1.0f);
75
+ EXPECT_FLOAT_EQ(resultData[4], curveData[2]);
76
+ }
@@ -0,0 +1,117 @@
1
+ #include <audioapi/core/utils/worklets/SafeIncludes.h>
2
+ #include <audioapi/dsp/Resampler.h>
3
+ #include <audioapi/utils/AudioArray.h>
4
+ #include <audioapi/utils/AudioBus.h>
5
+ #include <audioapi/core/utils/Constants.h>
6
+ #include <gtest/gtest.h>
7
+ #include <memory>
8
+
9
+ using namespace audioapi;
10
+
11
+ class ResamplerTest : public ::testing::Test {
12
+ protected:
13
+ static constexpr int KERNEL_SIZE = RENDER_QUANTUM_SIZE;
14
+ };
15
+
16
+ class TestableUpSampler : public UpSampler {
17
+ public:
18
+ explicit TestableUpSampler(int maxBlockSize, int kernelSize)
19
+ : UpSampler(maxBlockSize, kernelSize) {}
20
+
21
+ std::shared_ptr<AudioArray> getKernel() {
22
+ return kernel_;
23
+ }
24
+ };
25
+
26
+ class TestableDownSampler : public DownSampler {
27
+ public:
28
+ explicit TestableDownSampler(int maxBlockSize, int kernelSize)
29
+ : DownSampler(maxBlockSize, kernelSize) {}
30
+
31
+ std::shared_ptr<AudioArray> getKernel() {
32
+ return kernel_;
33
+ }
34
+ };
35
+
36
+ TEST_F(ResamplerTest, UpSamplerCanBeCreated) {
37
+ auto upSampler = std::make_unique<UpSampler>(RENDER_QUANTUM_SIZE, RENDER_QUANTUM_SIZE);
38
+ ASSERT_NE(upSampler, nullptr);
39
+ }
40
+
41
+ TEST_F(ResamplerTest, DownSamplerCanBeCreated) {
42
+ auto downSampler = std::make_unique<DownSampler>(RENDER_QUANTUM_SIZE * 2, RENDER_QUANTUM_SIZE * 2);
43
+ ASSERT_NE(downSampler, nullptr);
44
+ }
45
+
46
+ TEST_F(ResamplerTest, UpSamplerKernelSymmetry) {
47
+ auto upSampler = std::make_unique<TestableUpSampler>(RENDER_QUANTUM_SIZE, RENDER_QUANTUM_SIZE);
48
+ auto kernel = upSampler->getKernel();
49
+
50
+ // check for symmetry around the center point
51
+ for (size_t i = 0; i < kernel->getSize() / 2; ++i) {
52
+ EXPECT_NEAR((*kernel)[i], (*kernel)[kernel->getSize() - 1 - i], 1e-6);
53
+ }
54
+ }
55
+
56
+ TEST_F(ResamplerTest, DownSamplerKernelSymmetry) {
57
+ auto downSampler =
58
+ std::make_unique<TestableDownSampler>(RENDER_QUANTUM_SIZE * 2, RENDER_QUANTUM_SIZE * 2);
59
+ auto kernel = downSampler->getKernel();
60
+
61
+ // check for symmetry around the center point
62
+ // as the kernel size is even, we compare pairs around the center -> kernel[size/2 - 1]
63
+ // last value is skipped
64
+ for (size_t i = 0; i < kernel->getSize() / 2; ++i) {
65
+ EXPECT_NEAR((*kernel)[i], (*kernel)[kernel->getSize() - 2 - i], 1e-6);
66
+ }
67
+
68
+ EXPECT_FLOAT_EQ((*kernel)[kernel->getSize() / 2 - 1], 0.5f);
69
+ }
70
+
71
+ TEST_F(ResamplerTest, UpSamplerKernelSum) {
72
+ auto upSampler = std::make_unique<TestableUpSampler>(RENDER_QUANTUM_SIZE, RENDER_QUANTUM_SIZE);
73
+ auto kernel = upSampler->getKernel();
74
+
75
+ float sum = 0.0f;
76
+ for (size_t i = 0; i < kernel->getSize(); ++i) {
77
+ sum += (*kernel)[i];
78
+ }
79
+
80
+ EXPECT_NEAR(sum, 1.0f, 1e-6);
81
+ }
82
+
83
+ TEST_F(ResamplerTest, DownSamplerKernelSum) {
84
+ auto downSampler =
85
+ std::make_unique<TestableDownSampler>(RENDER_QUANTUM_SIZE * 2, RENDER_QUANTUM_SIZE * 2);
86
+ auto kernel = downSampler->getKernel();
87
+
88
+ float sum = 0.0f;
89
+ for (size_t i = 0; i < kernel->getSize(); ++i) {
90
+ sum += (*kernel)[i];
91
+ }
92
+
93
+ EXPECT_NEAR(sum, 1.0f, 1e-6);
94
+ }
95
+
96
+ TEST_F(ResamplerTest, UpDownSamplingProcess) {
97
+ auto upSampler = std::make_unique<TestableUpSampler>(RENDER_QUANTUM_SIZE, RENDER_QUANTUM_SIZE);
98
+ auto downSampler =
99
+ std::make_unique<TestableDownSampler>(RENDER_QUANTUM_SIZE * 2, RENDER_QUANTUM_SIZE * 2);
100
+
101
+ auto inputArray = std::make_shared<AudioArray>(4);
102
+ (*inputArray)[0] = 1.0f;
103
+ (*inputArray)[1] = 0.0f;
104
+ (*inputArray)[2] = -1.0f;
105
+ (*inputArray)[3] = 1.0f;
106
+
107
+ auto outputArray = std::make_shared<AudioArray>(8);
108
+
109
+ int upSamplerOutputFrames;
110
+ int downSamplerOutputFrames;
111
+
112
+ EXPECT_NO_THROW(upSamplerOutputFrames = upSampler->process(inputArray, outputArray, 4));
113
+ EXPECT_NO_THROW(downSamplerOutputFrames = downSampler->process(outputArray, inputArray, 8));
114
+
115
+ EXPECT_EQ(upSamplerOutputFrames, 8);
116
+ EXPECT_EQ(downSamplerOutputFrames, 4);
117
+ }
@@ -181,8 +181,8 @@ RCT_EXPORT_METHOD(
181
181
  {
182
182
  // iOS doesn't require explicit notification permissions for media controls
183
183
  // MPNowPlayingInfoCenter and MPRemoteCommandCenter work without permissions
184
- // Return 'granted' to match the spec interface
185
- resolve(@"granted");
184
+ // Return 'Granted' to match the spec interface
185
+ resolve(@"Granted");
186
186
  }
187
187
 
188
188
  RCT_EXPORT_METHOD(
@@ -190,8 +190,8 @@ RCT_EXPORT_METHOD(
190
190
  resolve reject : (nonnull RCTPromiseRejectBlock)reject)
191
191
  {
192
192
  // iOS doesn't require explicit notification permissions for media controls
193
- // Return 'granted' to match the spec interface
194
- resolve(@"granted");
193
+ // Return 'Granted' to match the spec interface
194
+ resolve(@"Granted");
195
195
  }
196
196
 
197
197
  RCT_EXPORT_METHOD(
@@ -73,7 +73,7 @@ IOSAudioRecorder::~IOSAudioRecorder()
73
73
  /// @returns Result containing the file path if recording started successfully, or an error message.
74
74
  Result<std::string, std::string> IOSAudioRecorder::start()
75
75
  {
76
- if (isRecording()) {
76
+ if (!isIdle()) {
77
77
  return Result<std::string, std::string>::Err("Recorder is already recording");
78
78
  }
79
79
 
@@ -97,7 +97,9 @@ Result<NoneType, std::string> IOSRecorderCallback::prepare(
97
97
  void IOSRecorderCallback::cleanup()
98
98
  {
99
99
  @autoreleasepool {
100
- emitAudioData(true);
100
+ if (circularBus_[0]->getNumberOfAvailableFrames() > 0) {
101
+ emitAudioData(true);
102
+ }
101
103
 
102
104
  converter_ = nil;
103
105
  bufferFormat_ = nil;
@@ -133,7 +135,9 @@ void IOSRecorderCallback::receiveAudioData(const AudioBufferList *inputBuffer, i
133
135
  circularBus_[i]->push_back(inputChannel, numFrames);
134
136
  }
135
137
 
136
- emitAudioData();
138
+ if (circularBus_[0]->getNumberOfAvailableFrames() >= bufferLength_) {
139
+ emitAudioData();
140
+ }
137
141
  return;
138
142
  }
139
143
 
@@ -178,7 +182,9 @@ void IOSRecorderCallback::receiveAudioData(const AudioBufferList *inputBuffer, i
178
182
  circularBus_[i]->push_back(inputChannel, outputFrameCount);
179
183
  }
180
184
 
181
- emitAudioData();
185
+ if (circularBus_[0]->getNumberOfAvailableFrames() >= bufferLength_) {
186
+ emitAudioData();
187
+ }
182
188
  }
183
189
  }
184
190
 
@@ -5,9 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _specs = require("../specs");
8
- // Hint: Copied from react-native-worklets
9
- // Doesn't really matter what is inside, just need a unique type
10
-
11
8
  class AudioAPIModule {
12
9
  #workletsModule_ = null;
13
10
  #canUseWorklets_ = false;
@@ -1 +1 @@
1
- {"version":3,"names":["_specs","require","AudioAPIModule","workletsModule_","canUseWorklets_","workletsVersion","workletsAvailable_","supportedWorkletsVersion","constructor","verifyWorklets","verifyInstallation","NativeAudioAPIModule","Error","install","#verifyWorklets","workletsPackage","workletsPackageJson","version","includes","#verifyInstallation","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","workletsModule","canUseWorklets","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","createWorkletRuntime","_default","exports","default"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.ts"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;;AAcA,MAAMC,cAAc,CAAC;EACnB,CAACC,eAAe,GAA2B,IAAI;EAC/C,CAACC,eAAe,GAAG,KAAK;EACxB,CAACC,eAAe,GAAG,SAAS;EAC5B,CAACC,kBAAkB,GAAG,KAAK;EAEpBC,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;EAEpDC,WAAWA,CAAA,EAAG;IACZ;IACA;IACA;IACA,IAAI,CAAC,CAACC,cAAc,CAAC,CAAC;IAEtB,IAAI,IAAI,CAAC,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC9B;IACF;IAEA,IAAI,CAACC,2BAAoB,EAAE;MACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;IACH;IAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;EAChC;EAEA,CAACJ,cAAcK,CAAA,EAAY;IACzB,IAAI;MACF,MAAMC,eAAe,GAAGd,OAAO,CAAC,uBAAuB,CAAC;MACxD,MAAMe,mBAAmB,GAAGf,OAAO,CAAC,oCAAoC,CAAC;MACzE,IAAI,CAAC,CAACI,eAAe,GAAGW,mBAAmB,CAACC,OAAO;MACnD,IAAI,CAAC,CAACX,kBAAkB,GAAG,IAAI;MAE/B,IAAI,CAAC,CAACF,eAAe,GAAG,IAAI,CAACG,wBAAwB,CAACW,QAAQ,CAC5DF,mBAAmB,CAACC,OACtB,CAAC;MAED,IAAI,IAAI,CAAC,CAACb,eAAe,EAAE;QACzB,IAAI,CAAC,CAACD,eAAe,GAAGY,eAAe;MACzC;MAEA,OAAO,IAAI,CAAC,CAACX,eAAe;IAC9B,CAAC,CAAC,MAAM;MACN,IAAI,CAAC,CAACA,eAAe,GAAG,KAAK;MAC7B,OAAO,KAAK;IACd;EACF;EAEA,CAACM,kBAAkBS,CAAA,EAAY;IAC7B,OACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,iBAAiB,IAAI,IAAI;EAEpC;EAEA,IAAIC,cAAcA,CAAA,EAA2B;IAC3C,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIyB,cAAcA,CAAA,EAAY;IAC5B,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;EACA,IAAIC,eAAeA,CAAA,EAAW;IAC5B,OAAO,IAAI,CAAC,CAACA,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,oBAAoBA,CAAA,EAAY;IAClC,OAAO,IAAI,CAAC,CAACvB,kBAAkB;EACjC;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,0BAA0BA,CAAA,EAAY;IACxC;IACA,OAAO,IAAI,CAAC,CAAC1B,eAAe;EAC9B;EAEO2B,kBAAkBA,CAAA,EAA0B;IACjD,IAAI,CAAC,IAAI,CAAC,CAAC3B,eAAe,EAAE;MAC1B,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAAC,CAACD,eAAe,CAAE6B,oBAAoB,CAAC,qBAAqB,CAAC;EAC3E;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIjC,cAAc,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_specs","require","AudioAPIModule","workletsModule_","canUseWorklets_","workletsVersion","workletsAvailable_","supportedWorkletsVersion","constructor","verifyWorklets","verifyInstallation","NativeAudioAPIModule","Error","install","#verifyWorklets","workletsPackage","workletsPackageJson","version","includes","#verifyInstallation","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","workletsModule","canUseWorklets","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","createWorkletRuntime","_default","exports","default"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAOA,MAAMC,cAAc,CAA4B;EAC9C,CAACC,eAAe,GAA2B,IAAI;EAC/C,CAACC,eAAe,GAAG,KAAK;EACxB,CAACC,eAAe,GAAG,SAAS;EAC5B,CAACC,kBAAkB,GAAG,KAAK;EAEpBC,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;EAEpDC,WAAWA,CAAA,EAAG;IACZ;IACA;IACA;IACA,IAAI,CAAC,CAACC,cAAc,CAAC,CAAC;IAEtB,IAAI,IAAI,CAAC,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC9B;IACF;IAEA,IAAI,CAACC,2BAAoB,EAAE;MACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;IACH;IAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;EAChC;EAEA,CAACJ,cAAcK,CAAA,EAAY;IACzB,IAAI;MACF,MAAMC,eAAe,GAAGd,OAAO,CAAC,uBAAuB,CAAC;MACxD,MAAMe,mBAAmB,GAAGf,OAAO,CAAC,oCAAoC,CAAC;MACzE,IAAI,CAAC,CAACI,eAAe,GAAGW,mBAAmB,CAACC,OAAO;MACnD,IAAI,CAAC,CAACX,kBAAkB,GAAG,IAAI;MAE/B,IAAI,CAAC,CAACF,eAAe,GAAG,IAAI,CAACG,wBAAwB,CAACW,QAAQ,CAC5DF,mBAAmB,CAACC,OACtB,CAAC;MAED,IAAI,IAAI,CAAC,CAACb,eAAe,EAAE;QACzB,IAAI,CAAC,CAACD,eAAe,GAAGY,eAAe;MACzC;MAEA,OAAO,IAAI,CAAC,CAACX,eAAe;IAC9B,CAAC,CAAC,MAAM;MACN,IAAI,CAAC,CAACA,eAAe,GAAG,KAAK;MAC7B,OAAO,KAAK;IACd;EACF;EAEA,CAACM,kBAAkBS,CAAA,EAAY;IAC7B,OACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,iBAAiB,IAAI,IAAI;EAEpC;EAEA,IAAIC,cAAcA,CAAA,EAA2B;IAC3C,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIyB,cAAcA,CAAA,EAAY;IAC5B,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;EACA,IAAIC,eAAeA,CAAA,EAAW;IAC5B,OAAO,IAAI,CAAC,CAACA,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,oBAAoBA,CAAA,EAAY;IAClC,OAAO,IAAI,CAAC,CAACvB,kBAAkB;EACjC;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,0BAA0BA,CAAA,EAAY;IACxC;IACA,OAAO,IAAI,CAAC,CAAC1B,eAAe;EAC9B;EAEO2B,kBAAkBA,CAAA,EAA0B;IACjD,IAAI,CAAC,IAAI,CAAC,CAAC3B,eAAe,EAAE;MAC1B,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAAC,CAACD,eAAe,CAAE6B,oBAAoB,CAAC,qBAAqB,CAAC;EAC3E;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIjC,cAAc,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const mockGetter = value => value;
8
+ class AudioAPIModule {
9
+ supportedWorkletsVersion = [];
10
+ workletsModule = mockGetter(null);
11
+ canUseWorklets = mockGetter(false);
12
+ workletsVersion = mockGetter('unknown');
13
+ areWorkletsAvailable = mockGetter(false);
14
+ isWorkletsVersionSupported = mockGetter(false);
15
+ createAudioRuntime() {
16
+ return null;
17
+ }
18
+ }
19
+ var _default = exports.default = new AudioAPIModule();
20
+ //# sourceMappingURL=AudioAPIModule.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mockGetter","value","AudioAPIModule","supportedWorkletsVersion","workletsModule","canUseWorklets","workletsVersion","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","_default","exports","default"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.web.ts"],"mappings":";;;;;;AAEA,MAAMA,UAAU,GAAOC,KAAQ,IAAKA,KAAK;AAEzC,MAAMC,cAAc,CAA4B;EACvCC,wBAAwB,GAAG,EAAE;EACpCC,cAAc,GAAGJ,UAAU,CAAC,IAA8B,CAAC;EAC3DK,cAAc,GAAGL,UAAU,CAAC,KAAK,CAAC;EAClCM,eAAe,GAAGN,UAAU,CAAC,SAAS,CAAC;EACvCO,oBAAoB,GAAGP,UAAU,CAAC,KAAK,CAAC;EACxCQ,0BAA0B,GAAGR,UAAU,CAAC,KAAK,CAAC;EAE9CS,kBAAkBA,CAAA,EAAG;IACnB,OAAO,IAAI;EACb;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIV,cAAc,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=ModuleInterfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["AudioAPIModule/ModuleInterfaces.ts"],"mappings":"","ignoreList":[]}
@@ -21,12 +21,14 @@ var _exportNames = {
21
21
  BiquadFilterNode: true,
22
22
  ConstantSourceNode: true,
23
23
  ConvolverNode: true,
24
+ DelayNode: true,
24
25
  GainNode: true,
25
26
  OfflineAudioContext: true,
26
27
  OscillatorNode: true,
27
28
  RecorderAdapterNode: true,
28
29
  StereoPannerNode: true,
29
30
  StreamerNode: true,
31
+ WaveShaperNode: true,
30
32
  WorkletNode: true,
31
33
  WorkletProcessingNode: true,
32
34
  WorkletSourceNode: true,
@@ -134,6 +136,12 @@ Object.defineProperty(exports, "ConvolverNode", {
134
136
  return _ConvolverNode.default;
135
137
  }
136
138
  });
139
+ Object.defineProperty(exports, "DelayNode", {
140
+ enumerable: true,
141
+ get: function () {
142
+ return _DelayNode.default;
143
+ }
144
+ });
137
145
  Object.defineProperty(exports, "FilePreset", {
138
146
  enumerable: true,
139
147
  get: function () {
@@ -236,6 +244,12 @@ Object.defineProperty(exports, "StreamerNode", {
236
244
  return _StreamerNode.default;
237
245
  }
238
246
  });
247
+ Object.defineProperty(exports, "WaveShaperNode", {
248
+ enumerable: true,
249
+ get: function () {
250
+ return _WaveShaperNode.default;
251
+ }
252
+ });
239
253
  Object.defineProperty(exports, "WorkletNode", {
240
254
  enumerable: true,
241
255
  get: function () {
@@ -295,12 +309,14 @@ var _BaseAudioContext = _interopRequireDefault(require("./core/BaseAudioContext"
295
309
  var _BiquadFilterNode = _interopRequireDefault(require("./core/BiquadFilterNode"));
296
310
  var _ConstantSourceNode = _interopRequireDefault(require("./core/ConstantSourceNode"));
297
311
  var _ConvolverNode = _interopRequireDefault(require("./core/ConvolverNode"));
312
+ var _DelayNode = _interopRequireDefault(require("./core/DelayNode"));
298
313
  var _GainNode = _interopRequireDefault(require("./core/GainNode"));
299
314
  var _OfflineAudioContext = _interopRequireDefault(require("./core/OfflineAudioContext"));
300
315
  var _OscillatorNode = _interopRequireDefault(require("./core/OscillatorNode"));
301
316
  var _RecorderAdapterNode = _interopRequireDefault(require("./core/RecorderAdapterNode"));
302
317
  var _StereoPannerNode = _interopRequireDefault(require("./core/StereoPannerNode"));
303
318
  var _StreamerNode = _interopRequireDefault(require("./core/StreamerNode"));
319
+ var _WaveShaperNode = _interopRequireDefault(require("./core/WaveShaperNode"));
304
320
  var _WorkletNode = _interopRequireDefault(require("./core/WorkletNode"));
305
321
  var _WorkletProcessingNode = _interopRequireDefault(require("./core/WorkletProcessingNode"));
306
322
  var _WorkletSourceNode = _interopRequireDefault(require("./core/WorkletSourceNode"));