react-native-audio-api 0.11.0-nightly-141c86f-20251118 → 0.11.0-nightly-4e6f25c-20251119

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 (167) hide show
  1. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
  2. package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
  3. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +4 -4
  4. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +11 -20
  5. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +24 -46
  6. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +48 -78
  7. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -21
  8. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  9. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  10. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  11. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +42 -78
  12. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -1
  13. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +14 -18
  14. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  15. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  16. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  17. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  18. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  19. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +16 -28
  20. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  21. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +4 -6
  22. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  23. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  24. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  25. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  26. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  27. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  28. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +8 -10
  29. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +1 -1
  30. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +13 -27
  31. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +11 -12
  32. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +15 -22
  33. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  34. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +7 -12
  35. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -9
  36. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +16 -30
  37. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  38. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +6 -10
  39. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  40. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  41. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  42. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  43. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  44. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +2 -2
  45. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  46. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  47. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  48. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +4 -8
  49. package/common/cpp/audioapi/core/AudioContext.cpp +4 -4
  50. package/common/cpp/audioapi/core/AudioContext.h +5 -2
  51. package/common/cpp/audioapi/core/AudioNode.cpp +13 -19
  52. package/common/cpp/audioapi/core/AudioNode.h +14 -7
  53. package/common/cpp/audioapi/core/AudioParam.cpp +66 -98
  54. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  55. package/common/cpp/audioapi/core/BaseAudioContext.cpp +22 -34
  56. package/common/cpp/audioapi/core/BaseAudioContext.h +19 -15
  57. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  58. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  59. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  60. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  61. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  62. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  63. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +17 -36
  64. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +2 -9
  65. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +18 -28
  66. package/common/cpp/audioapi/core/effects/ConvolverNode.h +19 -10
  67. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  68. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  69. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  70. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  71. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  72. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  73. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  74. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  75. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  76. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  77. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +9 -8
  78. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +4 -5
  79. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  80. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  81. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +31 -53
  82. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +35 -33
  83. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +19 -20
  84. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +38 -36
  85. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +25 -40
  86. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +3 -1
  87. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +9 -9
  88. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +3 -3
  89. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  90. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  91. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  92. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  93. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -4
  94. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +18 -16
  95. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +7 -4
  96. package/common/cpp/audioapi/core/sources/StreamerNode.h +38 -30
  97. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  98. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  99. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  100. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  101. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  102. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  103. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +13 -22
  104. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  105. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  106. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  107. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  108. package/common/cpp/audioapi/core/utils/Constants.h +5 -3
  109. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  110. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  111. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +29 -34
  112. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +14 -16
  113. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  114. package/common/cpp/audioapi/dsp/AudioUtils.cpp +3 -9
  115. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  116. package/common/cpp/audioapi/dsp/Convolver.cpp +13 -25
  117. package/common/cpp/audioapi/dsp/Convolver.h +26 -24
  118. package/common/cpp/audioapi/dsp/FFT.cpp +1 -1
  119. package/common/cpp/audioapi/dsp/FFT.h +5 -13
  120. package/common/cpp/audioapi/dsp/VectorMath.cpp +9 -43
  121. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  122. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  123. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  124. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  125. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +44 -39
  126. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  127. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  128. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  129. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  130. package/common/cpp/audioapi/jsi/JsiPromise.cpp +11 -21
  131. package/common/cpp/audioapi/jsi/JsiPromise.h +55 -46
  132. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  133. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  134. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  135. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  136. package/common/cpp/audioapi/utils/AudioBus.cpp +51 -149
  137. package/common/cpp/audioapi/utils/AudioBus.h +15 -15
  138. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  139. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  140. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  141. package/common/cpp/test/src/AudioParamTest.cpp +3 -2
  142. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +14 -35
  143. package/common/cpp/test/src/ConstantSourceTest.cpp +4 -6
  144. package/common/cpp/test/src/GainTest.cpp +3 -4
  145. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  146. package/common/cpp/test/src/OscillatorTest.cpp +1 -0
  147. package/common/cpp/test/src/StereoPannerTest.cpp +5 -8
  148. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +10 -27
  149. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +7 -6
  150. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +16 -28
  151. package/common/cpp/test/src/biquad/BiquadFilterTest.h +13 -6
  152. package/ios/audioapi/ios/AudioAPIModule.h +4 -6
  153. package/ios/audioapi/ios/AudioAPIModule.mm +31 -46
  154. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +24 -33
  155. package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -2
  156. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +4 -6
  157. package/ios/audioapi/ios/core/NativeAudioPlayer.m +3 -5
  158. package/ios/audioapi/ios/core/NativeAudioRecorder.h +1 -2
  159. package/ios/audioapi/ios/core/NativeAudioRecorder.m +21 -33
  160. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +17 -37
  161. package/ios/audioapi/ios/system/AudioEngine.h +2 -4
  162. package/ios/audioapi/ios/system/AudioEngine.mm +7 -19
  163. package/ios/audioapi/ios/system/AudioSessionManager.h +2 -4
  164. package/ios/audioapi/ios/system/AudioSessionManager.mm +17 -32
  165. package/ios/audioapi/ios/system/LockScreenManager.mm +73 -105
  166. package/ios/audioapi/ios/system/NotificationManager.mm +43 -68
  167. package/package.json +2 -2
@@ -3,13 +3,13 @@
3
3
  #include <audioapi/core/utils/Constants.h>
4
4
  #include <audioapi/utils/AudioArray.h>
5
5
  #include <audioapi/utils/AudioBus.h>
6
+ #include <memory>
6
7
 
7
8
  // https://webaudio.github.io/web-audio-api/#stereopanner-algorithm
8
9
 
9
10
  namespace audioapi {
10
11
 
11
- StereoPannerNode::StereoPannerNode(BaseAudioContext *context)
12
- : AudioNode(context) {
12
+ StereoPannerNode::StereoPannerNode(BaseAudioContext *context) : AudioNode(context) {
13
13
  channelCountMode_ = ChannelCountMode::CLAMPED_MAX;
14
14
  panParam_ = std::make_shared<AudioParam>(0.0, -1.0f, 1.0f, context);
15
15
  isInitialized_ = true;
@@ -26,9 +26,8 @@ std::shared_ptr<AudioBus> StereoPannerNode::processNode(
26
26
  double deltaTime = 1.0 / context_->getSampleRate();
27
27
 
28
28
  auto *inputLeft = processingBus->getChannelByType(AudioBus::ChannelLeft);
29
- auto panParamValues = panParam_->processARateParam(framesToProcess, time)
30
- ->getChannel(0)
31
- ->getData();
29
+ auto panParamValues =
30
+ panParam_->processARateParam(framesToProcess, time)->getChannel(0)->getData();
32
31
 
33
32
  auto *outputLeft = audioBus_->getChannelByType(AudioBus::ChannelLeft);
34
33
  auto *outputRight = audioBus_->getChannelByType(AudioBus::ChannelRight);
@@ -4,8 +4,8 @@
4
4
  #include <audioapi/core/AudioParam.h>
5
5
 
6
6
  #include <algorithm>
7
- #include <memory>
8
7
  #include <cassert>
8
+ #include <memory>
9
9
 
10
10
  namespace audioapi {
11
11
 
@@ -18,7 +18,9 @@ class StereoPannerNode : public AudioNode {
18
18
  [[nodiscard]] std::shared_ptr<AudioParam> getPanParam() const;
19
19
 
20
20
  protected:
21
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
21
+ std::shared_ptr<AudioBus> processNode(
22
+ const std::shared_ptr<AudioBus> &processingBus,
23
+ int framesToProcess) override;
22
24
 
23
25
  private:
24
26
  std::shared_ptr<AudioParam> panParam_;
@@ -1,4 +1,8 @@
1
1
  #include <audioapi/core/effects/WorkletNode.h>
2
+ #include <algorithm>
3
+ #include <memory>
4
+ #include <utility>
5
+ #include <vector>
2
6
 
3
7
  namespace audioapi {
4
8
 
@@ -12,8 +16,7 @@ WorkletNode::WorkletNode(
12
16
  bufferLength_(bufferLength),
13
17
  inputChannelCount_(inputChannelCount),
14
18
  curBuffIndex_(0) {
15
- bus_ = std::make_shared<AudioBus>(
16
- bufferLength, inputChannelCount, context->getSampleRate());
19
+ bus_ = std::make_shared<AudioBus>(bufferLength, inputChannelCount, context->getSampleRate());
17
20
  isInitialized_ = true;
18
21
  }
19
22
 
@@ -21,9 +24,8 @@ std::shared_ptr<AudioBus> WorkletNode::processNode(
21
24
  const std::shared_ptr<AudioBus> &processingBus,
22
25
  int framesToProcess) {
23
26
  size_t processed = 0;
24
- size_t channelCount_ = std::min(
25
- inputChannelCount_,
26
- static_cast<size_t>(processingBus->getNumberOfChannels()));
27
+ size_t channelCount_ =
28
+ std::min(inputChannelCount_, static_cast<size_t>(processingBus->getNumberOfChannels()));
27
29
  while (processed < framesToProcess) {
28
30
  size_t framesToWorkletInvoke = bufferLength_ - curBuffIndex_;
29
31
  size_t needsToProcess = framesToProcess - processed;
@@ -43,8 +45,7 @@ std::shared_ptr<AudioBus> WorkletNode::processNode(
43
45
  }
44
46
  // Reset buffer index, channel buffers and execute worklet
45
47
  curBuffIndex_ = 0;
46
- workletRunner_.executeOnRuntimeSync([this, channelCount_](
47
- jsi::Runtime &uiRuntimeRaw) {
48
+ workletRunner_.executeOnRuntimeSync([this, channelCount_](jsi::Runtime &uiRuntimeRaw) {
48
49
  /// Arguments preparation
49
50
  auto jsArray = jsi::Array(uiRuntimeRaw, channelCount_);
50
51
  for (size_t ch = 0; ch < channelCount_; ch++) {
@@ -52,10 +53,8 @@ std::shared_ptr<AudioBus> WorkletNode::processNode(
52
53
  audioArray->copy(bus_->getChannel(ch));
53
54
  auto sharedAudioArray = std::make_shared<AudioArrayBuffer>(audioArray);
54
55
  auto sharedAudioArraySize = sharedAudioArray->size();
55
- auto arrayBuffer =
56
- jsi::ArrayBuffer(uiRuntimeRaw, std::move(sharedAudioArray));
57
- arrayBuffer.setExternalMemoryPressure(
58
- uiRuntimeRaw, sharedAudioArraySize);
56
+ auto arrayBuffer = jsi::ArrayBuffer(uiRuntimeRaw, std::move(sharedAudioArray));
57
+ arrayBuffer.setExternalMemoryPressure(uiRuntimeRaw, sharedAudioArraySize);
59
58
  jsArray.setValueAtIndex(uiRuntimeRaw, ch, std::move(arrayBuffer));
60
59
  }
61
60
 
@@ -63,8 +62,7 @@ std::shared_ptr<AudioBus> WorkletNode::processNode(
63
62
 
64
63
  /// Call the worklet
65
64
  workletRunner_.callUnsafe(
66
- std::move(jsArray),
67
- jsi::Value(uiRuntimeRaw, static_cast<int>(channelCount_)));
65
+ std::move(jsArray), jsi::Value(uiRuntimeRaw, static_cast<int>(channelCount_)));
68
66
 
69
67
  return jsi::Value::undefined();
70
68
  });
@@ -1,13 +1,12 @@
1
1
  #pragma once
2
2
 
3
-
4
- #include <jsi/jsi.h>
5
- #include <audioapi/core/utils/worklets/WorkletsRunner.h>
6
3
  #include <audioapi/core/AudioNode.h>
7
4
  #include <audioapi/core/BaseAudioContext.h>
8
- #include <audioapi/utils/AudioBus.h>
9
- #include <audioapi/utils/AudioArray.h>
5
+ #include <audioapi/core/utils/worklets/WorkletsRunner.h>
10
6
  #include <audioapi/jsi/AudioArrayBuffer.h>
7
+ #include <audioapi/utils/AudioArray.h>
8
+ #include <audioapi/utils/AudioBus.h>
9
+ #include <jsi/jsi.h>
11
10
 
12
11
  #include <memory>
13
12
  #include <vector>
@@ -21,11 +20,15 @@ class WorkletNode : public AudioNode {
21
20
  BaseAudioContext *context,
22
21
  size_t bufferLength,
23
22
  size_t inputChannelCount,
24
- WorkletsRunner &&workletRunner
25
- ) : AudioNode(context) {}
23
+ WorkletsRunner &&workletRunner)
24
+ : AudioNode(context) {}
26
25
 
27
26
  protected:
28
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override { return processingBus; }
27
+ std::shared_ptr<AudioBus> processNode(
28
+ const std::shared_ptr<AudioBus> &processingBus,
29
+ int framesToProcess) override {
30
+ return processingBus;
31
+ }
29
32
  };
30
33
  #else
31
34
 
@@ -37,14 +40,14 @@ class WorkletNode : public AudioNode {
37
40
  BaseAudioContext *context,
38
41
  size_t bufferLength,
39
42
  size_t inputChannelCount,
40
- WorkletsRunner &&workletRunner
41
- );
43
+ WorkletsRunner &&workletRunner);
42
44
 
43
45
  ~WorkletNode() override = default;
44
46
 
45
47
  protected:
46
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
47
-
48
+ std::shared_ptr<AudioBus> processNode(
49
+ const std::shared_ptr<AudioBus> &processingBus,
50
+ int framesToProcess) override;
48
51
 
49
52
  private:
50
53
  WorkletsRunner workletRunner_;
@@ -1,5 +1,7 @@
1
1
  #include <audioapi/core/effects/WorkletProcessingNode.h>
2
2
  #include <audioapi/core/utils/Constants.h>
3
+ #include <memory>
4
+ #include <utility>
3
5
 
4
6
  namespace audioapi {
5
7
 
@@ -19,8 +21,7 @@ WorkletProcessingNode::WorkletProcessingNode(
19
21
  inputBuffsHandles_[i] = std::make_shared<AudioArrayBuffer>(inputAudioArray);
20
22
 
21
23
  auto outputAudioArray = std::make_shared<AudioArray>(RENDER_QUANTUM_SIZE);
22
- outputBuffsHandles_[i] =
23
- std::make_shared<AudioArrayBuffer>(outputAudioArray);
24
+ outputBuffsHandles_[i] = std::make_shared<AudioArrayBuffer>(outputAudioArray);
24
25
  }
25
26
  }
26
27
 
@@ -52,8 +53,7 @@ std::shared_ptr<AudioBus> WorkletProcessingNode::processNode(
52
53
  inputJsArray.setValueAtIndex(rt, ch, inputArrayBuffer);
53
54
 
54
55
  // Create output array buffer
55
- auto outputArrayBuffer =
56
- jsi::ArrayBuffer(rt, outputBuffsHandles_[ch]);
56
+ auto outputArrayBuffer = jsi::ArrayBuffer(rt, outputBuffsHandles_[ch]);
57
57
  outputJsArray.setValueAtIndex(rt, ch, outputArrayBuffer);
58
58
  }
59
59
 
@@ -1,12 +1,12 @@
1
1
  #pragma once
2
2
 
3
- #include <jsi/jsi.h>
4
- #include <audioapi/core/utils/worklets/WorkletsRunner.h>
5
3
  #include <audioapi/core/AudioNode.h>
6
4
  #include <audioapi/core/BaseAudioContext.h>
7
- #include <audioapi/utils/AudioBus.h>
8
- #include <audioapi/utils/AudioArray.h>
5
+ #include <audioapi/core/utils/worklets/WorkletsRunner.h>
9
6
  #include <audioapi/jsi/AudioArrayBuffer.h>
7
+ #include <audioapi/utils/AudioArray.h>
8
+ #include <audioapi/utils/AudioBus.h>
9
+ #include <jsi/jsi.h>
10
10
 
11
11
  #include <memory>
12
12
  #include <vector>
@@ -16,13 +16,15 @@ namespace audioapi {
16
16
  #if RN_AUDIO_API_TEST
17
17
  class WorkletProcessingNode : public AudioNode {
18
18
  public:
19
- explicit WorkletProcessingNode(
20
- BaseAudioContext *context,
21
- WorkletsRunner &&workletRunner
22
- ) : AudioNode(context) {}
19
+ explicit WorkletProcessingNode(BaseAudioContext *context, WorkletsRunner &&workletRunner)
20
+ : AudioNode(context) {}
23
21
 
24
22
  protected:
25
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override { return processingBus; }
23
+ std::shared_ptr<AudioBus> processNode(
24
+ const std::shared_ptr<AudioBus> &processingBus,
25
+ int framesToProcess) override {
26
+ return processingBus;
27
+ }
26
28
  };
27
29
  #else
28
30
 
@@ -30,13 +32,12 @@ using namespace facebook;
30
32
 
31
33
  class WorkletProcessingNode : public AudioNode {
32
34
  public:
33
- explicit WorkletProcessingNode(
34
- BaseAudioContext *context,
35
- WorkletsRunner &&workletRunner
36
- );
35
+ explicit WorkletProcessingNode(BaseAudioContext *context, WorkletsRunner &&workletRunner);
37
36
 
38
37
  protected:
39
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
38
+ std::shared_ptr<AudioBus> processNode(
39
+ const std::shared_ptr<AudioBus> &processingBus,
40
+ int framesToProcess) override;
40
41
 
41
42
  private:
42
43
  WorkletsRunner workletRunner_;
@@ -6,6 +6,10 @@
6
6
  #include <audioapi/utils/AudioBus.h>
7
7
  #include <audioapi/utils/CircularAudioArray.h>
8
8
  #include <audioapi/utils/CircularOverflowableAudioArray.h>
9
+ #include <algorithm>
10
+ #include <memory>
11
+ #include <string>
12
+ #include <unordered_map>
9
13
 
10
14
  namespace audioapi {
11
15
 
@@ -30,8 +34,7 @@ void AudioRecorder::invokeOnAudioReadyCallback(
30
34
  const std::shared_ptr<AudioBus> &bus,
31
35
  int numFrames) {
32
36
  auto audioBuffer = std::make_shared<AudioBuffer>(bus);
33
- auto audioBufferHostObject =
34
- std::make_shared<AudioBufferHostObject>(audioBuffer);
37
+ auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(audioBuffer);
35
38
 
36
39
  std::unordered_map<std::string, EventValue> body = {};
37
40
  body.insert({"buffer", audioBufferHostObject});
@@ -44,14 +47,12 @@ void AudioRecorder::invokeOnAudioReadyCallback(
44
47
  }
45
48
 
46
49
  void AudioRecorder::sendRemainingData() {
47
- auto bus = std::make_shared<AudioBus>(
48
- circularBuffer_->getNumberOfAvailableFrames(), 1, sampleRate_);
50
+ auto bus =
51
+ std::make_shared<AudioBus>(circularBuffer_->getNumberOfAvailableFrames(), 1, sampleRate_);
49
52
  auto *outputChannel = bus->getChannel(0)->getData();
50
- auto availableFrames =
51
- static_cast<int>(circularBuffer_->getNumberOfAvailableFrames());
53
+ auto availableFrames = static_cast<int>(circularBuffer_->getNumberOfAvailableFrames());
52
54
 
53
- circularBuffer_->pop_front(
54
- outputChannel, circularBuffer_->getNumberOfAvailableFrames());
55
+ circularBuffer_->pop_front(outputChannel, circularBuffer_->getNumberOfAvailableFrames());
55
56
 
56
57
  invokeOnAudioReadyCallback(bus, availableFrames);
57
58
  }
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include <memory>
4
3
  #include <atomic>
4
+ #include <memory>
5
5
  #include <mutex>
6
6
 
7
7
  namespace audioapi {
@@ -15,10 +15,9 @@ class AudioEventHandlerRegistry;
15
15
  class AudioRecorder {
16
16
  public:
17
17
  explicit AudioRecorder(
18
- float sampleRate,
19
- int bufferLength,
20
- const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry
21
- );
18
+ float sampleRate,
19
+ int bufferLength,
20
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
22
21
 
23
22
  virtual ~AudioRecorder() = default;
24
23
 
@@ -2,14 +2,13 @@
2
2
  #include <audioapi/utils/AudioArray.h>
3
3
  #include <audioapi/utils/AudioBus.h>
4
4
 
5
+ #include <algorithm>
6
+ #include <memory>
5
7
  #include <utility>
6
8
 
7
9
  namespace audioapi {
8
10
 
9
- AudioBuffer::AudioBuffer(
10
- int numberOfChannels,
11
- size_t length,
12
- float sampleRate) {
11
+ AudioBuffer::AudioBuffer(int numberOfChannels, size_t length, float sampleRate) {
13
12
  bus_ = std::make_shared<AudioBus>(length, numberOfChannels, sampleRate);
14
13
  }
15
14
 
@@ -45,8 +44,7 @@ void AudioBuffer::copyFromChannel(
45
44
  memcpy(
46
45
  destination,
47
46
  bus_->getChannel(channelNumber)->getData() + startInChannel,
48
- std::min(destinationLength, getLength() - startInChannel) *
49
- sizeof(float));
47
+ std::min(destinationLength, getLength() - startInChannel) * sizeof(float));
50
48
  }
51
49
 
52
50
  void AudioBuffer::copyToChannel(
@@ -1,11 +1,11 @@
1
1
  #pragma once
2
2
 
3
3
  #include <algorithm>
4
+ #include <cstddef>
5
+ #include <cstring>
4
6
  #include <memory>
5
7
  #include <string>
6
8
  #include <vector>
7
- #include <cstddef>
8
- #include <cstring>
9
9
 
10
10
  namespace audioapi {
11
11
 
@@ -28,11 +28,8 @@ class AudioBuffer : public std::enable_shared_from_this<AudioBuffer> {
28
28
  size_t destinationLength,
29
29
  int channelNumber,
30
30
  size_t startInChannel) const;
31
- void copyToChannel(
32
- const float *source,
33
- size_t sourceLength,
34
- int channelNumber,
35
- size_t startInChannel);
31
+ void
32
+ copyToChannel(const float *source, size_t sourceLength, int channelNumber, size_t startInChannel);
36
33
 
37
34
  private:
38
35
  friend class AudioBufferSourceNode;
@@ -5,14 +5,15 @@
5
5
  #include <audioapi/events/AudioEventHandlerRegistry.h>
6
6
  #include <audioapi/utils/AudioArray.h>
7
7
  #include <audioapi/utils/AudioBus.h>
8
+ #include <memory>
9
+ #include <string>
10
+ #include <unordered_map>
8
11
 
9
12
  namespace audioapi {
10
13
  AudioBufferBaseSourceNode::AudioBufferBaseSourceNode(
11
14
  BaseAudioContext *context,
12
15
  bool pitchCorrection)
13
- : AudioScheduledSourceNode(context),
14
- pitchCorrection_(pitchCorrection),
15
- vReadIndex_(0.0) {
16
+ : AudioScheduledSourceNode(context), pitchCorrection_(pitchCorrection), vReadIndex_(0.0) {
16
17
  onPositionChangedInterval_ = static_cast<int>(context->getSampleRate() * 0.1);
17
18
 
18
19
  detuneParam_ = std::make_shared<AudioParam>(
@@ -20,36 +21,31 @@ AudioBufferBaseSourceNode::AudioBufferBaseSourceNode(
20
21
  playbackRateParam_ = std::make_shared<AudioParam>(
21
22
  1.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
22
23
 
23
- playbackRateBus_ = std::make_shared<AudioBus>(
24
- RENDER_QUANTUM_SIZE * 3, channelCount_, context_->getSampleRate());
24
+ playbackRateBus_ =
25
+ std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE * 3, channelCount_, context_->getSampleRate());
25
26
 
26
- stretch_ =
27
- std::make_shared<signalsmith::stretch::SignalsmithStretch<float>>();
27
+ stretch_ = std::make_shared<signalsmith::stretch::SignalsmithStretch<float>>();
28
28
  }
29
29
 
30
30
  std::shared_ptr<AudioParam> AudioBufferBaseSourceNode::getDetuneParam() const {
31
31
  return detuneParam_;
32
32
  }
33
33
 
34
- std::shared_ptr<AudioParam> AudioBufferBaseSourceNode::getPlaybackRateParam()
35
- const {
34
+ std::shared_ptr<AudioParam> AudioBufferBaseSourceNode::getPlaybackRateParam() const {
36
35
  return playbackRateParam_;
37
36
  }
38
37
 
39
- void AudioBufferBaseSourceNode::setOnPositionChangedCallbackId(
40
- uint64_t callbackId) {
41
- auto oldCallbackId = onPositionChangedCallbackId_.exchange(
42
- callbackId, std::memory_order_acq_rel);
38
+ void AudioBufferBaseSourceNode::setOnPositionChangedCallbackId(uint64_t callbackId) {
39
+ auto oldCallbackId = onPositionChangedCallbackId_.exchange(callbackId, std::memory_order_acq_rel);
43
40
 
44
41
  if (oldCallbackId != 0) {
45
- audioEventHandlerRegistry_->unregisterHandler(
46
- "positionChanged", oldCallbackId);
42
+ audioEventHandlerRegistry_->unregisterHandler("positionChanged", oldCallbackId);
47
43
  }
48
44
  }
49
45
 
50
46
  void AudioBufferBaseSourceNode::setOnPositionChangedInterval(int interval) {
51
- onPositionChangedInterval_ = static_cast<int>(
52
- context_->getSampleRate() * static_cast<float>(interval) / 1000);
47
+ onPositionChangedInterval_ =
48
+ static_cast<int>(context_->getSampleRate() * static_cast<float>(interval) / 1000);
53
49
  }
54
50
 
55
51
  int AudioBufferBaseSourceNode::getOnPositionChangedInterval() const {
@@ -62,28 +58,23 @@ std::mutex &AudioBufferBaseSourceNode::getBufferLock() {
62
58
 
63
59
  double AudioBufferBaseSourceNode::getInputLatency() const {
64
60
  if (pitchCorrection_) {
65
- return static_cast<double>(stretch_->inputLatency()) /
66
- context_->getSampleRate();
61
+ return static_cast<double>(stretch_->inputLatency()) / context_->getSampleRate();
67
62
  }
68
63
  return 0;
69
64
  }
70
65
 
71
66
  double AudioBufferBaseSourceNode::getOutputLatency() const {
72
67
  if (pitchCorrection_) {
73
- return static_cast<double>(stretch_->outputLatency()) /
74
- context_->getSampleRate();
68
+ return static_cast<double>(stretch_->outputLatency()) / context_->getSampleRate();
75
69
  }
76
70
  return 0;
77
71
  }
78
72
 
79
73
  void AudioBufferBaseSourceNode::sendOnPositionChangedEvent() {
80
- auto onPositionChangedCallbackId =
81
- onPositionChangedCallbackId_.load(std::memory_order_acquire);
74
+ auto onPositionChangedCallbackId = onPositionChangedCallbackId_.load(std::memory_order_acquire);
82
75
 
83
- if (onPositionChangedCallbackId != 0 &&
84
- onPositionChangedTime_ > onPositionChangedInterval_) {
85
- std::unordered_map<std::string, EventValue> body = {
86
- {"value", getCurrentPosition()}};
76
+ if (onPositionChangedCallbackId != 0 && onPositionChangedTime_ > onPositionChangedInterval_) {
77
+ std::unordered_map<std::string, EventValue> body = {{"value", getCurrentPosition()}};
87
78
 
88
79
  audioEventHandlerRegistry_->invokeHandlerWithEventBody(
89
80
  "positionChanged", onPositionChangedCallbackId, body);
@@ -101,34 +92,26 @@ void AudioBufferBaseSourceNode::processWithPitchCorrection(
101
92
  size_t offsetLength = 0;
102
93
 
103
94
  auto time = context_->getCurrentTime();
104
- auto playbackRate = std::clamp(
105
- playbackRateParam_->processKRateParam(framesToProcess, time), 0.0f, 3.0f);
106
- auto detune = std::clamp(
107
- detuneParam_->processKRateParam(framesToProcess, time) / 100.0f,
108
- -12.0f,
109
- 12.0f);
95
+ auto playbackRate =
96
+ std::clamp(playbackRateParam_->processKRateParam(framesToProcess, time), 0.0f, 3.0f);
97
+ auto detune =
98
+ std::clamp(detuneParam_->processKRateParam(framesToProcess, time) / 100.0f, -12.0f, 12.0f);
110
99
 
111
100
  playbackRateBus_->zero();
112
101
 
113
- auto framesNeededToStretch =
114
- static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
102
+ auto framesNeededToStretch = static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
115
103
 
116
- updatePlaybackInfo(
117
- playbackRateBus_, framesNeededToStretch, startOffset, offsetLength);
104
+ updatePlaybackInfo(playbackRateBus_, framesNeededToStretch, startOffset, offsetLength);
118
105
 
119
106
  if (playbackRate == 0.0f || (!isPlaying() && !isStopScheduled())) {
120
107
  processingBus->zero();
121
108
  return;
122
109
  }
123
110
 
124
- processWithoutInterpolation(
125
- playbackRateBus_, startOffset, offsetLength, playbackRate);
111
+ processWithoutInterpolation(playbackRateBus_, startOffset, offsetLength, playbackRate);
126
112
 
127
113
  stretch_->process(
128
- playbackRateBus_.get()[0],
129
- framesNeededToStretch,
130
- processingBus.get()[0],
131
- framesToProcess);
114
+ playbackRateBus_.get()[0], framesNeededToStretch, processingBus.get()[0], framesToProcess);
132
115
 
133
116
  if (detune != 0.0f) {
134
117
  stretch_->setTransposeSemitones(detune);
@@ -152,24 +135,19 @@ void AudioBufferBaseSourceNode::processWithoutPitchCorrection(
152
135
  }
153
136
 
154
137
  if (std::fabs(computedPlaybackRate) == 1.0) {
155
- processWithoutInterpolation(
156
- processingBus, startOffset, offsetLength, computedPlaybackRate);
138
+ processWithoutInterpolation(processingBus, startOffset, offsetLength, computedPlaybackRate);
157
139
  } else {
158
- processWithInterpolation(
159
- processingBus, startOffset, offsetLength, computedPlaybackRate);
140
+ processWithInterpolation(processingBus, startOffset, offsetLength, computedPlaybackRate);
160
141
  }
161
142
 
162
143
  sendOnPositionChangedEvent();
163
144
  }
164
145
 
165
- float AudioBufferBaseSourceNode::getComputedPlaybackRateValue(
166
- int framesToProcess) {
146
+ float AudioBufferBaseSourceNode::getComputedPlaybackRateValue(int framesToProcess) {
167
147
  auto time = context_->getCurrentTime();
168
148
 
169
- auto playbackRate =
170
- playbackRateParam_->processKRateParam(framesToProcess, time);
171
- auto detune = std::pow(
172
- 2.0f, detuneParam_->processKRateParam(framesToProcess, time) / 1200.0f);
149
+ auto playbackRate = playbackRateParam_->processKRateParam(framesToProcess, time);
150
+ auto detune = std::pow(2.0f, detuneParam_->processKRateParam(framesToProcess, time) / 1200.0f);
173
151
 
174
152
  return playbackRate * detune;
175
153
  }
@@ -3,9 +3,9 @@
3
3
  #include <audioapi/core/sources/AudioScheduledSourceNode.h>
4
4
  #include <audioapi/libs/signalsmith-stretch/signalsmith-stretch.h>
5
5
 
6
+ #include <atomic>
6
7
  #include <memory>
7
8
  #include <mutex>
8
- #include <atomic>
9
9
 
10
10
  namespace audioapi {
11
11
 
@@ -26,49 +26,51 @@ class AudioBufferBaseSourceNode : public AudioScheduledSourceNode {
26
26
  [[nodiscard]] double getOutputLatency() const;
27
27
 
28
28
  protected:
29
- // pitch correction
30
- bool pitchCorrection_;
29
+ // pitch correction
30
+ bool pitchCorrection_;
31
31
 
32
- std::mutex bufferLock_;
32
+ std::mutex bufferLock_;
33
33
 
34
- // pitch correction
35
- std::shared_ptr<signalsmith::stretch::SignalsmithStretch<float>> stretch_;
36
- std::shared_ptr<AudioBus> playbackRateBus_;
34
+ // pitch correction
35
+ std::shared_ptr<signalsmith::stretch::SignalsmithStretch<float>> stretch_;
36
+ std::shared_ptr<AudioBus> playbackRateBus_;
37
37
 
38
- // k-rate params
39
- std::shared_ptr<AudioParam> detuneParam_;
40
- std::shared_ptr<AudioParam> playbackRateParam_;
38
+ // k-rate params
39
+ std::shared_ptr<AudioParam> detuneParam_;
40
+ std::shared_ptr<AudioParam> playbackRateParam_;
41
41
 
42
- // internal helper
43
- double vReadIndex_;
42
+ // internal helper
43
+ double vReadIndex_;
44
44
 
45
- std::atomic<uint64_t> onPositionChangedCallbackId_ = 0; // 0 means no callback
46
- int onPositionChangedInterval_;
47
- int onPositionChangedTime_ = 0;
45
+ std::atomic<uint64_t> onPositionChangedCallbackId_ = 0; // 0 means no callback
46
+ int onPositionChangedInterval_;
47
+ int onPositionChangedTime_ = 0;
48
48
 
49
- std::mutex &getBufferLock();
50
- virtual double getCurrentPosition() const = 0;
49
+ std::mutex &getBufferLock();
50
+ virtual double getCurrentPosition() const = 0;
51
51
 
52
- void sendOnPositionChangedEvent();
52
+ void sendOnPositionChangedEvent();
53
53
 
54
- void processWithPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
55
- int framesToProcess);
56
- void processWithoutPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
57
- int framesToProcess);
54
+ void processWithPitchCorrection(
55
+ const std::shared_ptr<AudioBus> &processingBus,
56
+ int framesToProcess);
57
+ void processWithoutPitchCorrection(
58
+ const std::shared_ptr<AudioBus> &processingBus,
59
+ int framesToProcess);
58
60
 
59
- float getComputedPlaybackRateValue(int framesToProcess);
61
+ float getComputedPlaybackRateValue(int framesToProcess);
60
62
 
61
- virtual void processWithoutInterpolation(
62
- const std::shared_ptr<AudioBus>& processingBus,
63
- size_t startOffset,
64
- size_t offsetLength,
65
- float playbackRate) = 0;
63
+ virtual void processWithoutInterpolation(
64
+ const std::shared_ptr<AudioBus> &processingBus,
65
+ size_t startOffset,
66
+ size_t offsetLength,
67
+ float playbackRate) = 0;
66
68
 
67
- virtual void processWithInterpolation(
68
- const std::shared_ptr<AudioBus>& processingBus,
69
- size_t startOffset,
70
- size_t offsetLength,
71
- float playbackRate) = 0;
69
+ virtual void processWithInterpolation(
70
+ const std::shared_ptr<AudioBus> &processingBus,
71
+ size_t startOffset,
72
+ size_t offsetLength,
73
+ float playbackRate) = 0;
72
74
  };
73
75
 
74
76
  } // namespace audioapi