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
@@ -5,6 +5,7 @@
5
5
  #include <audioapi/utils/AudioBus.h>
6
6
  #include <gtest/gtest.h>
7
7
  #include <test/src/MockAudioEventHandlerRegistry.h>
8
+ #include <memory>
8
9
 
9
10
  using namespace audioapi;
10
11
 
@@ -23,8 +24,7 @@ class ConstantSourceTest : public ::testing::Test {
23
24
 
24
25
  class TestableConstantSourceNode : public ConstantSourceNode {
25
26
  public:
26
- explicit TestableConstantSourceNode(BaseAudioContext *context)
27
- : ConstantSourceNode(context) {}
27
+ explicit TestableConstantSourceNode(BaseAudioContext *context) : ConstantSourceNode(context) {}
28
28
 
29
29
  void setOffsetParam(float value) {
30
30
  getOffsetParam()->setValue(value);
@@ -45,10 +45,8 @@ TEST_F(ConstantSourceTest, ConstantSourceCanBeCreated) {
45
45
  TEST_F(ConstantSourceTest, ConstantSourceOutputsConstantValue) {
46
46
  static constexpr int FRAMES_TO_PROCESS = 4;
47
47
 
48
- auto bus =
49
- std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
50
- auto constantSource =
51
- std::make_shared<TestableConstantSourceNode>(context.get());
48
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
49
+ auto constantSource = std::make_shared<TestableConstantSourceNode>(context.get());
52
50
  constantSource->start(context->getCurrentTime());
53
51
  auto resultBus = constantSource->processNode(bus, FRAMES_TO_PROCESS);
54
52
 
@@ -5,6 +5,7 @@
5
5
  #include <audioapi/utils/AudioBus.h>
6
6
  #include <gtest/gtest.h>
7
7
  #include <test/src/MockAudioEventHandlerRegistry.h>
8
+ #include <memory>
8
9
 
9
10
  using namespace audioapi;
10
11
 
@@ -47,8 +48,7 @@ TEST_F(GainTest, GainModulatesVolumeCorrectly) {
47
48
  auto gainNode = std::make_shared<TestableGainNode>(context.get());
48
49
  gainNode->setGainParam(GAIN_VALUE);
49
50
 
50
- auto bus =
51
- std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
51
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
52
52
  for (size_t i = 0; i < bus->getSize(); ++i) {
53
53
  bus->getChannel(0)->getData()[i] = i + 1;
54
54
  }
@@ -65,8 +65,7 @@ TEST_F(GainTest, GainModulatesVolumeCorrectlyMultiChannel) {
65
65
  auto gainNode = std::make_shared<TestableGainNode>(context.get());
66
66
  gainNode->setGainParam(GAIN_VALUE);
67
67
 
68
- auto bus =
69
- std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
68
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
70
69
  for (size_t i = 0; i < bus->getSize(); ++i) {
71
70
  bus->getChannel(0)->getData()[i] = i + 1;
72
71
  bus->getChannel(1)->getData()[i] = -i - 1;
@@ -1,10 +1,10 @@
1
1
  #pragma once
2
2
 
3
- #include <gmock/gmock.h>
4
3
  #include <audioapi/events/IAudioEventHandlerRegistry.h>
5
- #include <unordered_map>
6
- #include <string>
4
+ #include <gmock/gmock.h>
7
5
  #include <memory>
6
+ #include <string>
7
+ #include <unordered_map>
8
8
 
9
9
  using namespace audioapi;
10
10
 
@@ -12,13 +12,21 @@ using EventMap = std::unordered_map<std::string, EventValue>;
12
12
 
13
13
  class MockAudioEventHandlerRegistry : public IAudioEventHandlerRegistry {
14
14
  public:
15
- MOCK_METHOD(uint64_t, registerHandler,
16
- (const std::string &eventName, const std::shared_ptr<facebook::jsi::Function> &handler), (override));
17
- MOCK_METHOD(void, unregisterHandler,
18
- (const std::string &eventName, uint64_t listenerId), (override));
15
+ MOCK_METHOD(
16
+ uint64_t,
17
+ registerHandler,
18
+ (const std::string &eventName, const std::shared_ptr<facebook::jsi::Function> &handler),
19
+ (override));
20
+ MOCK_METHOD(
21
+ void,
22
+ unregisterHandler,
23
+ (const std::string &eventName, uint64_t listenerId),
24
+ (override));
19
25
 
20
- MOCK_METHOD2(invokeHandlerWithEventBody, void
21
- (const std::string &eventName, const EventMap &body));
22
- MOCK_METHOD3(invokeHandlerWithEventBody, void
23
- (const std::string &eventName, uint64_t listenerId, const EventMap &body));
26
+ MOCK_METHOD2(
27
+ invokeHandlerWithEventBody,
28
+ void(const std::string &eventName, const EventMap &body));
29
+ MOCK_METHOD3(
30
+ invokeHandlerWithEventBody,
31
+ void(const std::string &eventName, uint64_t listenerId, const EventMap &body));
24
32
  };
@@ -3,6 +3,7 @@
3
3
  #include <audioapi/core/utils/worklets/SafeIncludes.h>
4
4
  #include <gtest/gtest.h>
5
5
  #include <test/src/MockAudioEventHandlerRegistry.h>
6
+ #include <memory>
6
7
 
7
8
  using namespace audioapi;
8
9
 
@@ -5,6 +5,7 @@
5
5
  #include <audioapi/utils/AudioBus.h>
6
6
  #include <gtest/gtest.h>
7
7
  #include <test/src/MockAudioEventHandlerRegistry.h>
8
+ #include <memory>
8
9
 
9
10
  using namespace audioapi;
10
11
 
@@ -23,8 +24,7 @@ class StereoPannerTest : public ::testing::Test {
23
24
 
24
25
  class TestableStereoPannerNode : public StereoPannerNode {
25
26
  public:
26
- explicit TestableStereoPannerNode(BaseAudioContext *context)
27
- : StereoPannerNode(context) {}
27
+ explicit TestableStereoPannerNode(BaseAudioContext *context) : StereoPannerNode(context) {}
28
28
 
29
29
  void setPanParam(float value) {
30
30
  getPanParam()->setValue(value);
@@ -48,8 +48,7 @@ TEST_F(StereoPannerTest, PanModulatesInputMonoCorrectly) {
48
48
  auto panNode = std::make_shared<TestableStereoPannerNode>(context.get());
49
49
  panNode->setPanParam(PAN_VALUE);
50
50
 
51
- auto bus =
52
- std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
51
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
53
52
  for (size_t i = 0; i < bus->getSize(); ++i) {
54
53
  (*bus->getChannelByType(AudioBus::ChannelLeft))[i] = i + 1;
55
54
  }
@@ -76,8 +75,7 @@ TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithNegativePan) {
76
75
  auto panNode = std::make_shared<TestableStereoPannerNode>(context.get());
77
76
  panNode->setPanParam(PAN_VALUE);
78
77
 
79
- auto bus =
80
- std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
78
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
81
79
  for (size_t i = 0; i < bus->getSize(); ++i) {
82
80
  (*bus->getChannelByType(AudioBus::ChannelLeft))[i] = i + 1;
83
81
  (*bus->getChannelByType(AudioBus::ChannelRight))[i] = i + 1;
@@ -105,8 +103,7 @@ TEST_F(StereoPannerTest, PanModulatesInputStereoCorrectlyWithPositivePan) {
105
103
  auto panNode = std::make_shared<TestableStereoPannerNode>(context.get());
106
104
  panNode->setPanParam(PAN_VALUE);
107
105
 
108
- auto bus =
109
- std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
106
+ auto bus = std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
110
107
  for (size_t i = 0; i < bus->getSize(); ++i) {
111
108
  (*bus->getChannelByType(AudioBus::ChannelLeft))[i] = i + 1;
112
109
  (*bus->getChannelByType(AudioBus::ChannelRight))[i] = i + 1;
@@ -86,32 +86,22 @@ void getFrequencyResponse(
86
86
  phase_response[k] = std::nanf("");
87
87
  } else {
88
88
  double omega = -PI * normalizedFreq[k];
89
- std::complex<double> z =
90
- std::complex<double>(std::cos(omega), std::sin(omega));
89
+ std::complex<double> z = std::complex<double>(std::cos(omega), std::sin(omega));
91
90
  std::complex<double> numerator = b0 + (b1 + b2 * z) * z;
92
- std::complex<double> denominator =
93
- std::complex<double>(1, 0) + (a1 + a2 * z) * z;
91
+ std::complex<double> denominator = std::complex<double>(1, 0) + (a1 + a2 * z) * z;
94
92
  std::complex<double> response = numerator / denominator;
95
93
  mag_response[k] = static_cast<float>(abs(response));
96
- phase_response[k] =
97
- static_cast<float>(std::atan2(imag(response), real(response)));
94
+ phase_response[k] = static_cast<float>(std::atan2(imag(response), real(response)));
98
95
  }
99
96
  }
100
97
  }
101
98
 
102
- BiquadCoefficients normalizeCoefficients(
103
- double b0,
104
- double b1,
105
- double b2,
106
- double a0,
107
- double a1,
108
- double a2) {
99
+ BiquadCoefficients
100
+ normalizeCoefficients(double b0, double b1, double b2, double a0, double a1, double a2) {
109
101
  return BiquadCoefficients{b0 / a0, b1 / a0, b2 / a0, a1 / a0, a2 / a0};
110
102
  }
111
103
 
112
- BiquadCoefficients calculateLowpassCoefficients(
113
- double cutoff,
114
- double resonance) {
104
+ BiquadCoefficients calculateLowpassCoefficients(double cutoff, double resonance) {
115
105
  // Limit cutoff to 0 to 1.
116
106
  cutoff = std::clamp(cutoff, 0.0, 1.0);
117
107
 
@@ -144,9 +134,7 @@ BiquadCoefficients calculateLowpassCoefficients(
144
134
  }
145
135
  }
146
136
 
147
- BiquadCoefficients calculateHighpassCoefficients(
148
- double cutoff,
149
- double resonance) {
137
+ BiquadCoefficients calculateHighpassCoefficients(double cutoff, double resonance) {
150
138
  // Limit cutoff to 0 to 1.
151
139
  cutoff = std::clamp(cutoff, 0.0, 1.0);
152
140
 
@@ -180,9 +168,7 @@ BiquadCoefficients calculateHighpassCoefficients(
180
168
  }
181
169
  }
182
170
 
183
- BiquadCoefficients calculateLowshelfCoefficients(
184
- double frequency,
185
- double db_gain) {
171
+ BiquadCoefficients calculateLowshelfCoefficients(double frequency, double db_gain) {
186
172
  // Clip frequencies to between 0 and 1, inclusive.
187
173
  frequency = std::clamp(frequency, 0.0, 1.0);
188
174
 
@@ -214,9 +200,7 @@ BiquadCoefficients calculateLowshelfCoefficients(
214
200
  }
215
201
  }
216
202
 
217
- BiquadCoefficients calculateHighshelfCoefficients(
218
- double frequency,
219
- double db_gain) {
203
+ BiquadCoefficients calculateHighshelfCoefficients(double frequency, double db_gain) {
220
204
  // Clip frequencies to between 0 and 1, inclusive.
221
205
  frequency = std::clamp(frequency, 0.0, 1.0);
222
206
 
@@ -248,8 +232,7 @@ BiquadCoefficients calculateHighshelfCoefficients(
248
232
  }
249
233
  }
250
234
 
251
- BiquadCoefficients
252
- calculatePeakingCoefficients(double frequency, double q, double db_gain) {
235
+ BiquadCoefficients calculatePeakingCoefficients(double frequency, double q, double db_gain) {
253
236
  // Clip frequencies to between 0 and 1, inclusive.
254
237
  frequency = std::clamp(frequency, 0.0, 1.0);
255
238
 
@@ -44,13 +44,14 @@ struct BiquadCoefficients {
44
44
  };
45
45
 
46
46
  void getFrequencyResponse(
47
- const BiquadCoefficients &coeffs,
48
- std::span<const float> frequency,
49
- std::span<float> mag_response,
50
- std::span<float> phase_response,
51
- float nyquistFrequency);
47
+ const BiquadCoefficients &coeffs,
48
+ std::span<const float> frequency,
49
+ std::span<float> mag_response,
50
+ std::span<float> phase_response,
51
+ float nyquistFrequency);
52
52
 
53
- BiquadCoefficients normalizeCoefficients(double b0, double b1, double b2, double a0, double a1, double a2);
53
+ BiquadCoefficients
54
+ normalizeCoefficients(double b0, double b1, double b2, double a0, double a1, double a2);
54
55
 
55
56
  BiquadCoefficients calculateLowpassCoefficients(double cutoff, double Q);
56
57
  BiquadCoefficients calculateHighpassCoefficients(double cutoff, double Q);
@@ -1,5 +1,7 @@
1
1
  #include <test/src/biquad/BiquadFilterChromium.h>
2
2
  #include <test/src/biquad/BiquadFilterTest.h>
3
+ #include <memory>
4
+ #include <vector>
3
5
 
4
6
  namespace audioapi {
5
7
 
@@ -18,8 +20,7 @@ void BiquadFilterTest::testLowpass(float frequency, float Q) {
18
20
  float normalizedFrequency = frequency / nyquistFrequency;
19
21
 
20
22
  node->setLowpassCoefficients(normalizedFrequency, Q);
21
- expectCoefficientsNear(
22
- node, calculateLowpassCoefficients(normalizedFrequency, Q));
23
+ expectCoefficientsNear(node, calculateLowpassCoefficients(normalizedFrequency, Q));
23
24
  }
24
25
 
25
26
  void BiquadFilterTest::testHighpass(float frequency, float Q) {
@@ -27,8 +28,7 @@ void BiquadFilterTest::testHighpass(float frequency, float Q) {
27
28
  float normalizedFrequency = frequency / nyquistFrequency;
28
29
 
29
30
  node->setHighpassCoefficients(normalizedFrequency, Q);
30
- expectCoefficientsNear(
31
- node, calculateHighpassCoefficients(normalizedFrequency, Q));
31
+ expectCoefficientsNear(node, calculateHighpassCoefficients(normalizedFrequency, Q));
32
32
  }
33
33
 
34
34
  void BiquadFilterTest::testBandpass(float frequency, float Q) {
@@ -36,8 +36,7 @@ void BiquadFilterTest::testBandpass(float frequency, float Q) {
36
36
  float normalizedFrequency = frequency / nyquistFrequency;
37
37
 
38
38
  node->setBandpassCoefficients(normalizedFrequency, Q);
39
- expectCoefficientsNear(
40
- node, calculateBandpassCoefficients(normalizedFrequency, Q));
39
+ expectCoefficientsNear(node, calculateBandpassCoefficients(normalizedFrequency, Q));
41
40
  }
42
41
 
43
42
  void BiquadFilterTest::testNotch(float frequency, float Q) {
@@ -45,8 +44,7 @@ void BiquadFilterTest::testNotch(float frequency, float Q) {
45
44
  float normalizedFrequency = frequency / nyquistFrequency;
46
45
 
47
46
  node->setNotchCoefficients(normalizedFrequency, Q);
48
- expectCoefficientsNear(
49
- node, calculateNotchCoefficients(normalizedFrequency, Q));
47
+ expectCoefficientsNear(node, calculateNotchCoefficients(normalizedFrequency, Q));
50
48
  }
51
49
 
52
50
  void BiquadFilterTest::testAllpass(float frequency, float Q) {
@@ -54,8 +52,7 @@ void BiquadFilterTest::testAllpass(float frequency, float Q) {
54
52
  float normalizedFrequency = frequency / nyquistFrequency;
55
53
 
56
54
  node->setAllpassCoefficients(normalizedFrequency, Q);
57
- expectCoefficientsNear(
58
- node, calculateAllpassCoefficients(normalizedFrequency, Q));
55
+ expectCoefficientsNear(node, calculateAllpassCoefficients(normalizedFrequency, Q));
59
56
  }
60
57
 
61
58
  void BiquadFilterTest::testPeaking(float frequency, float Q, float gain) {
@@ -63,8 +60,7 @@ void BiquadFilterTest::testPeaking(float frequency, float Q, float gain) {
63
60
  float normalizedFrequency = frequency / nyquistFrequency;
64
61
 
65
62
  node->setPeakingCoefficients(normalizedFrequency, Q, gain);
66
- expectCoefficientsNear(
67
- node, calculatePeakingCoefficients(normalizedFrequency, Q, gain));
63
+ expectCoefficientsNear(node, calculatePeakingCoefficients(normalizedFrequency, Q, gain));
68
64
  }
69
65
 
70
66
  void BiquadFilterTest::testLowshelf(float frequency, float gain) {
@@ -72,8 +68,7 @@ void BiquadFilterTest::testLowshelf(float frequency, float gain) {
72
68
  float normalizedFrequency = frequency / nyquistFrequency;
73
69
 
74
70
  node->setLowshelfCoefficients(normalizedFrequency, gain);
75
- expectCoefficientsNear(
76
- node, calculateLowshelfCoefficients(normalizedFrequency, gain));
71
+ expectCoefficientsNear(node, calculateLowshelfCoefficients(normalizedFrequency, gain));
77
72
  }
78
73
 
79
74
  void BiquadFilterTest::testHighshelf(float frequency, float gain) {
@@ -81,17 +76,16 @@ void BiquadFilterTest::testHighshelf(float frequency, float gain) {
81
76
  float normalizedFrequency = frequency / nyquistFrequency;
82
77
 
83
78
  node->setHighshelfCoefficients(normalizedFrequency, gain);
84
- expectCoefficientsNear(
85
- node, calculateHighshelfCoefficients(normalizedFrequency, gain));
79
+ expectCoefficientsNear(node, calculateHighshelfCoefficients(normalizedFrequency, gain));
86
80
  }
87
81
 
88
82
  INSTANTIATE_TEST_SUITE_P(
89
83
  Frequencies,
90
84
  BiquadFilterFrequencyTest,
91
85
  ::testing::Values(
92
- 0.0f, // 0 Hz - the filter should block all input signal
93
- 10.0f, // very low frequency
94
- 350.0f, // default
86
+ 0.0f, // 0 Hz - the filter should block all input signal
87
+ 10.0f, // very low frequency
88
+ 350.0f, // default
95
89
  nyquistFrequency - 0.0001f, // frequency near Nyquist
96
90
  nyquistFrequency)); // maximal frequency
97
91
 
@@ -255,25 +249,19 @@ TEST_F(BiquadFilterTest, GetFrequencyResponse) {
255
249
  phaseResponseNode.data(),
256
250
  TestFrequencies.size());
257
251
  getFrequencyResponse(
258
- coeffs,
259
- TestFrequencies,
260
- magResponseExpected,
261
- phaseResponseExpected,
262
- nyquistFrequency);
252
+ coeffs, TestFrequencies, magResponseExpected, phaseResponseExpected, nyquistFrequency);
263
253
 
264
254
  for (size_t i = 0; i < TestFrequencies.size(); ++i) {
265
255
  float f = TestFrequencies[i];
266
256
  if (std::isnan(magResponseExpected[i])) {
267
- EXPECT_TRUE(std::isnan(magResponseNode[i]))
268
- << "Expected NaN at frequency " << f;
257
+ EXPECT_TRUE(std::isnan(magResponseNode[i])) << "Expected NaN at frequency " << f;
269
258
  } else {
270
259
  EXPECT_NEAR(magResponseNode[i], magResponseExpected[i], tolerance)
271
260
  << "Magnitude mismatch at " << f << " Hz";
272
261
  }
273
262
 
274
263
  if (std::isnan(phaseResponseExpected[i])) {
275
- EXPECT_TRUE(std::isnan(phaseResponseNode[i]))
276
- << "Expected NaN at frequency " << f;
264
+ EXPECT_TRUE(std::isnan(phaseResponseNode[i])) << "Expected NaN at frequency " << f;
277
265
  } else {
278
266
  EXPECT_NEAR(phaseResponseNode[i], phaseResponseExpected[i], tolerance)
279
267
  << "Phase mismatch at " << f << " Hz";
@@ -19,10 +19,13 @@ class BiquadFilterTest : public ::testing::Test {
19
19
 
20
20
  void SetUp() override {
21
21
  eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
22
- context = std::make_unique<OfflineAudioContext>(2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
22
+ context = std::make_unique<OfflineAudioContext>(
23
+ 2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
23
24
  }
24
25
 
25
- void expectCoefficientsNear(const std::shared_ptr<BiquadFilterNode> &node, const BiquadCoefficients &expected);
26
+ void expectCoefficientsNear(
27
+ const std::shared_ptr<BiquadFilterNode> &node,
28
+ const BiquadCoefficients &expected);
26
29
  void testLowpass(float frequency, float Q);
27
30
  void testHighpass(float frequency, float Q);
28
31
  void testBandpass(float frequency, float Q);
@@ -33,8 +36,12 @@ class BiquadFilterTest : public ::testing::Test {
33
36
  void testHighshelf(float frequency, float gain);
34
37
  };
35
38
 
36
- class BiquadFilterQTestLowpassHighpass : public BiquadFilterTest, public ::testing::WithParamInterface<float> {};
37
- class BiquadFilterQTestRestTypes : public BiquadFilterTest, public ::testing::WithParamInterface<float> {};
38
- class BiquadFilterFrequencyTest : public BiquadFilterTest, public ::testing::WithParamInterface<float> {};
39
- class BiquadFilterGainTest : public BiquadFilterTest, public ::testing::WithParamInterface<float> {};
39
+ class BiquadFilterQTestLowpassHighpass : public BiquadFilterTest,
40
+ public ::testing::WithParamInterface<float> {};
41
+ class BiquadFilterQTestRestTypes : public BiquadFilterTest,
42
+ public ::testing::WithParamInterface<float> {};
43
+ class BiquadFilterFrequencyTest : public BiquadFilterTest,
44
+ public ::testing::WithParamInterface<float> {};
45
+ class BiquadFilterGainTest : public BiquadFilterTest,
46
+ public ::testing::WithParamInterface<float> {};
40
47
  } // namespace audioapi
@@ -13,12 +13,11 @@
13
13
  @class AudioSessionManager;
14
14
  @class LockScreenManager;
15
15
 
16
- @interface AudioAPIModule
17
- : RCTEventEmitter
16
+ @interface AudioAPIModule : RCTEventEmitter
18
17
  #ifdef RCT_NEW_ARCH_ENABLED
19
- <NativeAudioAPIModuleSpec, RCTCallInvokerModule, RCTInvalidating>
18
+ <NativeAudioAPIModuleSpec, RCTCallInvokerModule, RCTInvalidating>
20
19
  #else
21
- <RCTBridgeModule>
20
+ <RCTBridgeModule>
22
21
  #endif // RCT_NEW_ARCH_ENABLED
23
22
 
24
23
  @property (nonatomic, strong) AudioEngine *audioEngine;
@@ -26,7 +25,6 @@
26
25
  @property (nonatomic, strong) AudioSessionManager *audioSessionManager;
27
26
  @property (nonatomic, strong) LockScreenManager *lockScreenManager;
28
27
 
29
- - (void)invokeHandlerWithEventName:(NSString *)eventName
30
- eventBody:(NSDictionary *)eventBody;
28
+ - (void)invokeHandlerWithEventName:(NSString *)eventName eventBody:(NSDictionary *)eventBody;
31
29
 
32
30
  @end
@@ -62,15 +62,11 @@ RCT_EXPORT_MODULE(AudioAPIModule);
62
62
  RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
63
63
  {
64
64
  self.audioSessionManager = [[AudioSessionManager alloc] init];
65
- self.audioEngine = [[AudioEngine alloc]
66
- initWithAudioSessionManager:self.audioSessionManager];
67
- self.lockScreenManager =
68
- [[LockScreenManager alloc] initWithAudioAPIModule:self];
69
- self.notificationManager =
70
- [[NotificationManager alloc] initWithAudioAPIModule:self];
65
+ self.audioEngine = [[AudioEngine alloc] initWithAudioSessionManager:self.audioSessionManager];
66
+ self.lockScreenManager = [[LockScreenManager alloc] initWithAudioAPIModule:self];
67
+ self.notificationManager = [[NotificationManager alloc] initWithAudioAPIModule:self];
71
68
 
72
- auto jsiRuntime =
73
- reinterpret_cast<facebook::jsi::Runtime *>(self.bridge.runtime);
69
+ auto jsiRuntime = reinterpret_cast<facebook::jsi::Runtime *>(self.bridge.runtime);
74
70
 
75
71
  #if defined(RCT_NEW_ARCH_ENABLED)
76
72
  auto jsCallInvoker = _callInvoker.callInvoker;
@@ -80,12 +76,10 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
80
76
 
81
77
  assert(jsiRuntime != nullptr);
82
78
 
83
- _eventHandler =
84
- std::make_shared<AudioEventHandlerRegistry>(jsiRuntime, jsCallInvoker);
79
+ _eventHandler = std::make_shared<AudioEventHandlerRegistry>(jsiRuntime, jsCallInvoker);
85
80
 
86
81
  #if RN_AUDIO_API_ENABLE_WORKLETS
87
- WorkletsModule *workletsModule =
88
- [_moduleRegistry moduleForName:"WorkletsModule"];
82
+ WorkletsModule *workletsModule = [_moduleRegistry moduleForName:"WorkletsModule"];
89
83
 
90
84
  if (!workletsModule) {
91
85
  NSLog(@"WorkletsModule not found in module registry");
@@ -109,8 +103,7 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
109
103
  audioapi::AudioAPIModuleInstaller::injectJSIBindings(
110
104
  jsiRuntime, jsCallInvoker, _eventHandler, uiWorkletRuntime);
111
105
  #else
112
- audioapi::AudioAPIModuleInstaller::injectJSIBindings(
113
- jsiRuntime, jsCallInvoker, _eventHandler);
106
+ audioapi::AudioAPIModuleInstaller::injectJSIBindings(jsiRuntime, jsCallInvoker, _eventHandler);
114
107
  #endif
115
108
 
116
109
  NSLog(@"Successfully installed JSI bindings for react-native-audio-api!");
@@ -126,22 +119,21 @@ RCT_EXPORT_METHOD(
126
119
  setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)
127
120
  resolve reject : (RCTPromiseRejectBlock)reject)
128
121
  {
129
- dispatch_async(
130
- dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
131
- if (!self.audioSessionManager.shouldManageSession) {
132
- [self.audioSessionManager setShouldManageSession:true];
133
- }
134
- if ([self.audioSessionManager setActive:enabled]) {
135
- resolve(@"true");
136
- return;
137
- }
138
- resolve(@"false");
139
- });
122
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
123
+ if (!self.audioSessionManager.shouldManageSession) {
124
+ [self.audioSessionManager setShouldManageSession:true];
125
+ }
126
+ if ([self.audioSessionManager setActive:enabled]) {
127
+ resolve(@"true");
128
+ return;
129
+ }
130
+ resolve(@"false");
131
+ });
140
132
  }
141
133
 
142
134
  RCT_EXPORT_METHOD(
143
- setAudioSessionOptions : (NSString *)category mode : (NSString *)
144
- mode options : (NSArray *)options allowHaptics : (BOOL)allowHaptics)
135
+ setAudioSessionOptions : (NSString *)category mode : (NSString *)mode options : (NSArray *)
136
+ options allowHaptics : (BOOL)allowHaptics)
145
137
  {
146
138
  if (!self.audioSessionManager.shouldManageSession) {
147
139
  [self.audioSessionManager setShouldManageSession:true];
@@ -162,8 +154,7 @@ RCT_EXPORT_METHOD(resetLockScreenInfo)
162
154
  [self.lockScreenManager resetLockScreenInfo];
163
155
  }
164
156
 
165
- RCT_EXPORT_METHOD(
166
- enableRemoteCommand : (NSString *)name enabled : (BOOL)enabled)
157
+ RCT_EXPORT_METHOD(enableRemoteCommand : (NSString *)name enabled : (BOOL)enabled)
167
158
  {
168
159
  [self.lockScreenManager enableRemoteCommand:name enabled:enabled];
169
160
  }
@@ -187,31 +178,27 @@ RCT_EXPORT_METHOD(
187
178
  requestRecordingPermissions : (nonnull RCTPromiseResolveBlock)
188
179
  resolve reject : (nonnull RCTPromiseRejectBlock)reject)
189
180
  {
190
- dispatch_async(
191
- dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
192
- [self.audioSessionManager requestRecordingPermissions:resolve
193
- reject:reject];
194
- });
181
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
182
+ [self.audioSessionManager requestRecordingPermissions:resolve reject:reject];
183
+ });
195
184
  }
196
185
 
197
186
  RCT_EXPORT_METHOD(
198
187
  checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)
199
188
  resolve reject : (nonnull RCTPromiseRejectBlock)reject)
200
189
  {
201
- dispatch_async(
202
- dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
203
- [self.audioSessionManager checkRecordingPermissions:resolve
204
- reject:reject];
205
- });
190
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
191
+ [self.audioSessionManager checkRecordingPermissions:resolve reject:reject];
192
+ });
206
193
  }
207
194
 
208
195
  RCT_EXPORT_METHOD(
209
196
  getDevicesInfo : (nonnull RCTPromiseResolveBlock)
210
197
  resolve reject : (nonnull RCTPromiseRejectBlock)reject)
211
198
  {
212
- dispatch_async(
213
- dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
214
- ^{ [self.audioSessionManager getDevicesInfo:resolve reject:reject]; });
199
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
200
+ [self.audioSessionManager getDevicesInfo:resolve reject:reject];
201
+ });
215
202
  }
216
203
 
217
204
  RCT_EXPORT_METHOD(disableSessionManagement)
@@ -227,8 +214,7 @@ RCT_EXPORT_METHOD(disableSessionManagement)
227
214
  }
228
215
  #endif // RCT_NEW_ARCH_ENABLED
229
216
 
230
- - (void)invokeHandlerWithEventName:(NSString *)eventName
231
- eventBody:(NSDictionary *)eventBody
217
+ - (void)invokeHandlerWithEventName:(NSString *)eventName eventBody:(NSDictionary *)eventBody
232
218
  {
233
219
  auto name = [eventName UTF8String];
234
220
 
@@ -262,8 +248,7 @@ RCT_EXPORT_METHOD(disableSessionManagement)
262
248
 
263
249
  - (dispatch_queue_t)methodQueue
264
250
  {
265
- return dispatch_queue_create(
266
- "swmansion.audioapi.Queue", DISPATCH_QUEUE_SERIAL);
251
+ return dispatch_queue_create("swmansion.audioapi.Queue", DISPATCH_QUEUE_SERIAL);
267
252
  }
268
253
 
269
254
  @end
@@ -13,45 +13,36 @@ IOSAudioPlayer::IOSAudioPlayer(
13
13
  const std::function<void(std::shared_ptr<AudioBus>, int)> &renderAudio,
14
14
  float sampleRate,
15
15
  int channelCount)
16
- : renderAudio_(renderAudio),
17
- channelCount_(channelCount),
18
- audioBus_(0),
19
- isRunning_(false)
16
+ : renderAudio_(renderAudio), channelCount_(channelCount), audioBus_(0), isRunning_(false)
20
17
  {
21
- RenderAudioBlock renderAudioBlock =
22
- ^(AudioBufferList *outputData, int numFrames) {
23
- int processedFrames = 0;
24
-
25
- while (processedFrames < numFrames) {
26
- int framesToProcess =
27
- std::min(numFrames - processedFrames, RENDER_QUANTUM_SIZE);
28
-
29
- if (isRunning_.load()) {
30
- renderAudio_(audioBus_, framesToProcess);
31
- } else {
32
- audioBus_->zero();
33
- }
34
-
35
- for (int channel = 0; channel < channelCount_; channel += 1) {
36
- float *outputChannel = (float *)outputData->mBuffers[channel].mData;
37
- auto *inputChannel = audioBus_->getChannel(channel)->getData();
38
-
39
- memcpy(
40
- outputChannel + processedFrames,
41
- inputChannel,
42
- framesToProcess * sizeof(float));
43
- }
44
-
45
- processedFrames += framesToProcess;
46
- }
47
- };
18
+ RenderAudioBlock renderAudioBlock = ^(AudioBufferList *outputData, int numFrames) {
19
+ int processedFrames = 0;
20
+
21
+ while (processedFrames < numFrames) {
22
+ int framesToProcess = std::min(numFrames - processedFrames, RENDER_QUANTUM_SIZE);
23
+
24
+ if (isRunning_.load()) {
25
+ renderAudio_(audioBus_, framesToProcess);
26
+ } else {
27
+ audioBus_->zero();
28
+ }
29
+
30
+ for (int channel = 0; channel < channelCount_; channel += 1) {
31
+ float *outputChannel = (float *)outputData->mBuffers[channel].mData;
32
+ auto *inputChannel = audioBus_->getChannel(channel)->getData();
33
+
34
+ memcpy(outputChannel + processedFrames, inputChannel, framesToProcess * sizeof(float));
35
+ }
36
+
37
+ processedFrames += framesToProcess;
38
+ }
39
+ };
48
40
 
49
41
  audioPlayer_ = [[NativeAudioPlayer alloc] initWithRenderAudio:renderAudioBlock
50
42
  sampleRate:sampleRate
51
43
  channelCount:channelCount_];
52
44
 
53
- audioBus_ = std::make_shared<AudioBus>(
54
- RENDER_QUANTUM_SIZE, channelCount_, sampleRate);
45
+ audioBus_ = std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, sampleRate);
55
46
  }
56
47
 
57
48
  IOSAudioPlayer::~IOSAudioPlayer()