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
@@ -1,4 +1,7 @@
1
1
  #include <audioapi/android/AudioAPIModule.h>
2
+ #include <memory>
3
+ #include <string>
4
+ #include <unordered_map>
2
5
 
3
6
  namespace audioapi {
4
7
 
@@ -25,20 +28,16 @@ jni::local_ref<AudioAPIModule::jhybriddata> AudioAPIModule::initHybrid(
25
28
  jni::alias_ref<jhybridobject> jThis,
26
29
  jni::alias_ref<jni::JObject> jWorkletsModule,
27
30
  jlong jsContext,
28
- jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
29
- jsCallInvokerHolder) {
31
+ jni::alias_ref<facebook::react::CallInvokerHolder::javaobject> jsCallInvokerHolder) {
30
32
  auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker();
31
33
  auto rnRuntime = reinterpret_cast<jsi::Runtime *>(jsContext);
32
34
  #if RN_AUDIO_API_ENABLE_WORKLETS
33
35
  if (jWorkletsModule) {
34
- auto castedModule =
35
- jni::static_ref_cast<WorkletsModule::javaobject>(jWorkletsModule);
36
+ auto castedModule = jni::static_ref_cast<WorkletsModule::javaobject>(jWorkletsModule);
36
37
  auto workletsModuleProxy = castedModule->cthis()->getWorkletsModuleProxy();
37
- return makeCxxInstance(
38
- jThis, workletsModuleProxy, rnRuntime, jsCallInvoker);
38
+ return makeCxxInstance(jThis, workletsModuleProxy, rnRuntime, jsCallInvoker);
39
39
  }
40
- throw std::runtime_error(
41
- "Worklets module is required but not provided from Java/Kotlin side");
40
+ throw std::runtime_error("Worklets module is required but not provided from Java/Kotlin side");
42
41
  #else
43
42
  return makeCxxInstance(jThis, rnRuntime, jsCallInvoker);
44
43
  #endif
@@ -57,16 +56,12 @@ void AudioAPIModule::registerNatives() {
57
56
 
58
57
  void AudioAPIModule::injectJSIBindings() {
59
58
  #if RN_AUDIO_API_ENABLE_WORKLETS
60
- auto uiWorkletRuntime =
61
- weakWorkletsModuleProxy_.lock()->getUIWorkletRuntime();
59
+ auto uiWorkletRuntime = weakWorkletsModuleProxy_.lock()->getUIWorkletRuntime();
62
60
  #else
63
61
  auto uiWorkletRuntime = nullptr;
64
62
  #endif
65
63
  AudioAPIModuleInstaller::injectJSIBindings(
66
- jsiRuntime_,
67
- jsCallInvoker_,
68
- audioEventHandlerRegistry_,
69
- uiWorkletRuntime);
64
+ jsiRuntime_, jsCallInvoker_, audioEventHandlerRegistry_, uiWorkletRuntime);
70
65
  }
71
66
 
72
67
  void AudioAPIModule::invokeHandlerWithEventNameAndEventBody(
@@ -98,8 +93,7 @@ void AudioAPIModule::invokeHandlerWithEventNameAndEventBody(
98
93
  }
99
94
 
100
95
  if (audioEventHandlerRegistry_ != nullptr) {
101
- audioEventHandlerRegistry_->invokeHandlerWithEventBody(
102
- eventName->toStdString(), body);
96
+ audioEventHandlerRegistry_->invokeHandlerWithEventBody(eventName->toStdString(), body);
103
97
  }
104
98
  }
105
99
 
@@ -5,6 +5,5 @@
5
5
  using namespace audioapi;
6
6
 
7
7
  JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
8
- return facebook::jni::initialize(
9
- vm, [] { AudioAPIModule::registerNatives(); });
8
+ return facebook::jni::initialize(vm, [] { AudioAPIModule::registerNatives(); });
10
9
  }
@@ -7,6 +7,8 @@
7
7
  #include <audioapi/utils/CircularAudioArray.h>
8
8
  #include <audioapi/utils/CircularOverflowableAudioArray.h>
9
9
 
10
+ #include <memory>
11
+
10
12
  namespace audioapi {
11
13
 
12
14
  AndroidAudioRecorder::AndroidAudioRecorder(
@@ -45,8 +47,7 @@ void AndroidAudioRecorder::start() {
45
47
  }
46
48
 
47
49
  if (mStream_) {
48
- jni::ThreadScope::WithClassLoader(
49
- [this]() { nativeAudioRecorder_->start(); });
50
+ jni::ThreadScope::WithClassLoader([this]() { nativeAudioRecorder_->start(); });
50
51
  mStream_->requestStart();
51
52
  }
52
53
 
@@ -61,8 +62,7 @@ void AndroidAudioRecorder::stop() {
61
62
  isRunning_.store(false);
62
63
 
63
64
  if (mStream_) {
64
- jni::ThreadScope::WithClassLoader(
65
- [this]() { nativeAudioRecorder_->stop(); });
65
+ jni::ThreadScope::WithClassLoader([this]() { nativeAudioRecorder_->stop(); });
66
66
  mStream_->requestStop();
67
67
  }
68
68
 
@@ -6,15 +6,16 @@
6
6
  #include <audioapi/utils/AudioBus.h>
7
7
  #include <jni.h>
8
8
 
9
+ #include <algorithm>
10
+ #include <memory>
11
+
9
12
  namespace audioapi {
10
13
 
11
14
  AudioPlayer::AudioPlayer(
12
15
  const std::function<void(std::shared_ptr<AudioBus>, int)> &renderAudio,
13
16
  float sampleRate,
14
17
  int channelCount)
15
- : renderAudio_(renderAudio),
16
- sampleRate_(sampleRate),
17
- channelCount_(channelCount) {
18
+ : renderAudio_(renderAudio), sampleRate_(sampleRate), channelCount_(channelCount) {
18
19
  isInitialized_ = openAudioStream();
19
20
 
20
21
  nativeAudioPlayer_ = jni::make_global(NativeAudioPlayer::create());
@@ -36,22 +37,17 @@ bool AudioPlayer::openAudioStream() {
36
37
  auto result = builder.openStream(mStream_);
37
38
  if (result != oboe::Result::OK || mStream_ == nullptr) {
38
39
  __android_log_print(
39
- ANDROID_LOG_ERROR,
40
- "AudioPlayer",
41
- "Failed to open stream: %s",
42
- oboe::convertToText(result));
40
+ ANDROID_LOG_ERROR, "AudioPlayer", "Failed to open stream: %s", oboe::convertToText(result));
43
41
  return false;
44
42
  }
45
43
 
46
- mBus_ = std::make_shared<AudioBus>(
47
- RENDER_QUANTUM_SIZE, channelCount_, sampleRate_);
44
+ mBus_ = std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, sampleRate_);
48
45
  return true;
49
46
  }
50
47
 
51
48
  bool AudioPlayer::start() {
52
49
  if (mStream_) {
53
- jni::ThreadScope::WithClassLoader(
54
- [this]() { nativeAudioPlayer_->start(); });
50
+ jni::ThreadScope::WithClassLoader([this]() { nativeAudioPlayer_->start(); });
55
51
  auto result = mStream_->requestStart();
56
52
  return result == oboe::Result::OK;
57
53
  }
@@ -94,10 +90,8 @@ bool AudioPlayer::isRunning() const {
94
90
  return mStream_ && mStream_->getState() == oboe::StreamState::Started;
95
91
  }
96
92
 
97
- DataCallbackResult AudioPlayer::onAudioReady(
98
- AudioStream *oboeStream,
99
- void *audioData,
100
- int32_t numFrames) {
93
+ DataCallbackResult
94
+ AudioPlayer::onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) {
101
95
  if (!isInitialized_) {
102
96
  return DataCallbackResult::Continue;
103
97
  }
@@ -108,8 +102,7 @@ DataCallbackResult AudioPlayer::onAudioReady(
108
102
  assert(buffer != nullptr);
109
103
 
110
104
  while (processedFrames < numFrames) {
111
- int framesToProcess =
112
- std::min(numFrames - processedFrames, RENDER_QUANTUM_SIZE);
105
+ int framesToProcess = std::min(numFrames - processedFrames, RENDER_QUANTUM_SIZE);
113
106
  renderAudio_(mBus_, framesToProcess);
114
107
 
115
108
  // TODO: optimize this with SIMD?
@@ -126,9 +119,7 @@ DataCallbackResult AudioPlayer::onAudioReady(
126
119
  return DataCallbackResult::Continue;
127
120
  }
128
121
 
129
- void AudioPlayer::onErrorAfterClose(
130
- oboe::AudioStream *stream,
131
- oboe::Result error) {
122
+ void AudioPlayer::onErrorAfterClose(oboe::AudioStream *stream, oboe::Result error) {
132
123
  if (error == oboe::Result::ErrorDisconnected) {
133
124
  cleanup();
134
125
  if (openAudioStream()) {
@@ -15,14 +15,16 @@
15
15
  #include <audioapi/libs/ffmpeg/FFmpegDecoding.h>
16
16
  #endif
17
17
 
18
+ #include <memory>
19
+ #include <string>
20
+ #include <vector>
21
+
18
22
  namespace audioapi {
19
23
 
20
24
  // Decoding audio in fixed-size chunks because total frame count can't be
21
25
  // determined in advance. Note: ma_decoder_get_length_in_pcm_frames() always
22
26
  // returns 0 for Vorbis decoders.
23
- std::vector<float> AudioDecoder::readAllPcmFrames(
24
- ma_decoder &decoder,
25
- int outputChannels) {
27
+ std::vector<float> AudioDecoder::readAllPcmFrames(ma_decoder &decoder, int outputChannels) {
26
28
  std::vector<float> buffer;
27
29
  std::vector<float> temp(CHUNK_SIZE * outputChannels);
28
30
  ma_uint64 outFramesRead = 0;
@@ -30,16 +32,12 @@ std::vector<float> AudioDecoder::readAllPcmFrames(
30
32
  #ifndef AUDIO_API_TEST_SUITE
31
33
  while (true) {
32
34
  ma_uint64 tempFramesDecoded = 0;
33
- ma_decoder_read_pcm_frames(
34
- &decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
35
+ ma_decoder_read_pcm_frames(&decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
35
36
  if (tempFramesDecoded == 0) {
36
37
  break;
37
38
  }
38
39
 
39
- buffer.insert(
40
- buffer.end(),
41
- temp.data(),
42
- temp.data() + tempFramesDecoded * outputChannels);
40
+ buffer.insert(buffer.end(), temp.data(), temp.data() + tempFramesDecoded * outputChannels);
43
41
  outFramesRead += tempFramesDecoded;
44
42
  }
45
43
 
@@ -59,8 +57,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
59
57
  }
60
58
 
61
59
  auto outputFrames = buffer.size() / outputChannels;
62
- auto audioBus = std::make_shared<AudioBus>(
63
- outputFrames, outputChannels, outputSampleRate);
60
+ auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, outputSampleRate);
64
61
 
65
62
  for (int ch = 0; ch < outputChannels; ++ch) {
66
63
  auto channelData = audioBus->getChannel(ch)->getData();
@@ -76,27 +73,21 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
76
73
  float sampleRate) {
77
74
  #ifndef AUDIO_API_TEST_SUITE
78
75
  if (AudioDecoder::pathHasExtension(path, {".mp4", ".m4a", ".aac"})) {
79
- auto buffer =
80
- ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
76
+ auto buffer = ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
81
77
  if (buffer == nullptr) {
82
78
  __android_log_print(
83
- ANDROID_LOG_ERROR,
84
- "AudioDecoder",
85
- "Failed to decode with FFmpeg: %s",
86
- path.c_str());
79
+ ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg: %s", path.c_str());
87
80
  return nullptr;
88
81
  }
89
82
  return buffer;
90
83
  }
91
84
  ma_decoder decoder;
92
- ma_decoder_config config =
93
- ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
85
+ ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
94
86
  ma_decoding_backend_vtable *customBackends[] = {
95
87
  ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
96
88
 
97
89
  config.ppCustomBackendVTables = customBackends;
98
- config.customBackendCount =
99
- sizeof(customBackends) / sizeof(customBackends[0]);
90
+ config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
100
91
 
101
92
  if (ma_decoder_init_file(path.c_str(), &config, &decoder) != MA_SUCCESS) {
102
93
  __android_log_print(
@@ -113,46 +104,36 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
113
104
 
114
105
  std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
115
106
  ma_decoder_uninit(&decoder);
116
- return makeAudioBufferFromFloatBuffer(
117
- buffer, outputSampleRate, outputChannels);
107
+ return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
118
108
  #else
119
109
  return nullptr;
120
110
  #endif
121
111
  }
122
112
 
123
- std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
124
- const void *data,
125
- size_t size,
126
- float sampleRate) {
113
+ std::shared_ptr<AudioBuffer>
114
+ AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleRate) {
127
115
  #ifndef AUDIO_API_TEST_SUITE
128
116
  const AudioFormat format = AudioDecoder::detectAudioFormat(data, size);
129
- if (format == AudioFormat::MP4 || format == AudioFormat::M4A ||
130
- format == AudioFormat::AAC) {
131
- auto buffer = ffmpegdecoder::decodeWithMemoryBlock(
132
- data, size, static_cast<int>(sampleRate));
117
+ if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
118
+ auto buffer = ffmpegdecoder::decodeWithMemoryBlock(data, size, static_cast<int>(sampleRate));
133
119
  if (buffer == nullptr) {
134
- __android_log_print(
135
- ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg");
120
+ __android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg");
136
121
  return nullptr;
137
122
  }
138
123
  return buffer;
139
124
  }
140
125
  ma_decoder decoder;
141
- ma_decoder_config config =
142
- ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
126
+ ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
143
127
 
144
128
  ma_decoding_backend_vtable *customBackends[] = {
145
129
  ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
146
130
 
147
131
  config.ppCustomBackendVTables = customBackends;
148
- config.customBackendCount =
149
- sizeof(customBackends) / sizeof(customBackends[0]);
132
+ config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
150
133
 
151
134
  if (ma_decoder_init_memory(data, size, &config, &decoder) != MA_SUCCESS) {
152
135
  __android_log_print(
153
- ANDROID_LOG_ERROR,
154
- "AudioDecoder",
155
- "Failed to initialize decoder for memory block");
136
+ ANDROID_LOG_ERROR, "AudioDecoder", "Failed to initialize decoder for memory block");
156
137
  ma_decoder_uninit(&decoder);
157
138
  return nullptr;
158
139
  }
@@ -162,8 +143,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
162
143
 
163
144
  std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
164
145
  ma_decoder_uninit(&decoder);
165
- return makeAudioBufferFromFloatBuffer(
166
- buffer, outputSampleRate, outputChannels);
146
+ return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
167
147
  #else
168
148
  return nullptr;
169
149
  #endif
@@ -176,11 +156,9 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
176
156
  bool interleaved) {
177
157
  auto decodedData = base64_decode(data, false);
178
158
  const auto uint8Data = reinterpret_cast<uint8_t *>(decodedData.data());
179
- size_t numFramesDecoded =
180
- decodedData.size() / (inputChannelCount * sizeof(int16_t));
159
+ size_t numFramesDecoded = decodedData.size() / (inputChannelCount * sizeof(int16_t));
181
160
 
182
- auto audioBus = std::make_shared<AudioBus>(
183
- numFramesDecoded, inputChannelCount, inputSampleRate);
161
+ auto audioBus = std::make_shared<AudioBus>(numFramesDecoded, inputChannelCount, inputSampleRate);
184
162
 
185
163
  for (int ch = 0; ch < inputChannelCount; ++ch) {
186
164
  auto channelData = audioBus->getChannel(ch)->getData();
@@ -30,8 +30,7 @@ class AudioAPIModuleInstaller {
30
30
  static void injectJSIBindings(
31
31
  jsi::Runtime *jsiRuntime,
32
32
  const std::shared_ptr<react::CallInvoker> &jsCallInvoker,
33
- const std::shared_ptr<AudioEventHandlerRegistry>
34
- &audioEventHandlerRegistry,
33
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
35
34
  std::shared_ptr<worklets::WorkletRuntime> uiRuntime = nullptr) {
36
35
  auto createAudioContext = getCreateAudioContextFunction(
37
36
  jsiRuntime, jsCallInvoker, audioEventHandlerRegistry, uiRuntime);
@@ -39,30 +38,22 @@ class AudioAPIModuleInstaller {
39
38
  getCreateAudioRecorderFunction(jsiRuntime, audioEventHandlerRegistry);
40
39
  auto createOfflineAudioContext = getCreateOfflineAudioContextFunction(
41
40
  jsiRuntime, jsCallInvoker, audioEventHandlerRegistry, uiRuntime);
42
- auto createAudioDecoder =
43
- getCreateAudioDecoderFunction(jsiRuntime, jsCallInvoker);
44
- auto createAudioStretcher =
45
- getCreateAudioStretcherFunction(jsiRuntime, jsCallInvoker);
41
+ auto createAudioDecoder = getCreateAudioDecoderFunction(jsiRuntime, jsCallInvoker);
42
+ auto createAudioStretcher = getCreateAudioStretcherFunction(jsiRuntime, jsCallInvoker);
46
43
 
47
- jsiRuntime->global().setProperty(
48
- *jsiRuntime, "createAudioContext", createAudioContext);
49
- jsiRuntime->global().setProperty(
50
- *jsiRuntime, "createAudioRecorder", createAudioRecorder);
44
+ jsiRuntime->global().setProperty(*jsiRuntime, "createAudioContext", createAudioContext);
45
+ jsiRuntime->global().setProperty(*jsiRuntime, "createAudioRecorder", createAudioRecorder);
51
46
  jsiRuntime->global().setProperty(
52
47
  *jsiRuntime, "createOfflineAudioContext", createOfflineAudioContext);
53
- jsiRuntime->global().setProperty(
54
- *jsiRuntime, "createAudioDecoder", createAudioDecoder);
55
- jsiRuntime->global().setProperty(
56
- *jsiRuntime, "createAudioStretcher", createAudioStretcher);
48
+ jsiRuntime->global().setProperty(*jsiRuntime, "createAudioDecoder", createAudioDecoder);
49
+ jsiRuntime->global().setProperty(*jsiRuntime, "createAudioStretcher", createAudioStretcher);
57
50
 
58
51
  auto audioEventHandlerRegistryHostObject =
59
- std::make_shared<AudioEventHandlerRegistryHostObject>(
60
- audioEventHandlerRegistry);
52
+ std::make_shared<AudioEventHandlerRegistryHostObject>(audioEventHandlerRegistry);
61
53
  jsiRuntime->global().setProperty(
62
54
  *jsiRuntime,
63
55
  "AudioEventEmitter",
64
- jsi::Object::createFromHostObject(
65
- *jsiRuntime, audioEventHandlerRegistryHostObject));
56
+ jsi::Object::createFromHostObject(*jsiRuntime, audioEventHandlerRegistryHostObject));
66
57
  }
67
58
 
68
59
  static void closeAllContexts() {
@@ -74,7 +65,7 @@ class AudioAPIModuleInstaller {
74
65
  }
75
66
 
76
67
  it = contexts_.erase(it);
77
- --it;
68
+ --it;
78
69
  }
79
70
  }
80
71
 
@@ -82,8 +73,7 @@ class AudioAPIModuleInstaller {
82
73
  static jsi::Function getCreateAudioContextFunction(
83
74
  jsi::Runtime *jsiRuntime,
84
75
  const std::shared_ptr<react::CallInvoker> &jsCallInvoker,
85
- const std::shared_ptr<AudioEventHandlerRegistry>
86
- &audioEventHandlerRegistry,
76
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
87
77
  const std::weak_ptr<worklets::WorkletRuntime> &uiRuntime) {
88
78
  return jsi::Function::createFromHostFunction(
89
79
  *jsiRuntime,
@@ -97,35 +87,29 @@ class AudioAPIModuleInstaller {
97
87
  std::shared_ptr<AudioContext> audioContext;
98
88
  auto sampleRate = static_cast<float>(args[0].getNumber());
99
89
 
100
- #if RN_AUDIO_API_ENABLE_WORKLETS
101
- auto runtimeRegistry = RuntimeRegistry{
102
- .uiRuntime = uiRuntime,
103
- .audioRuntime = worklets::extractWorkletRuntime(runtime, args[1])
104
- };
105
- #else
106
- auto runtimeRegistry = RuntimeRegistry{};
107
- #endif
90
+ #if RN_AUDIO_API_ENABLE_WORKLETS
91
+ auto runtimeRegistry = RuntimeRegistry{
92
+ .uiRuntime = uiRuntime,
93
+ .audioRuntime = worklets::extractWorkletRuntime(runtime, args[1])};
94
+ #else
95
+ auto runtimeRegistry = RuntimeRegistry{};
96
+ #endif
108
97
 
109
98
  audioContext = std::make_shared<AudioContext>(
110
- sampleRate,
111
- audioEventHandlerRegistry,
112
- runtimeRegistry);
99
+ sampleRate, audioEventHandlerRegistry, runtimeRegistry);
113
100
  AudioAPIModuleInstaller::contexts_.push_back(audioContext);
114
101
 
115
102
  auto audioContextHostObject =
116
- std::make_shared<AudioContextHostObject>(
117
- audioContext, &runtime, jsCallInvoker);
103
+ std::make_shared<AudioContextHostObject>(audioContext, &runtime, jsCallInvoker);
118
104
 
119
- return jsi::Object::createFromHostObject(
120
- runtime, audioContextHostObject);
105
+ return jsi::Object::createFromHostObject(runtime, audioContextHostObject);
121
106
  });
122
107
  }
123
108
 
124
109
  static jsi::Function getCreateOfflineAudioContextFunction(
125
110
  jsi::Runtime *jsiRuntime,
126
111
  const std::shared_ptr<react::CallInvoker> &jsCallInvoker,
127
- const std::shared_ptr<AudioEventHandlerRegistry>
128
- &audioEventHandlerRegistry,
112
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
129
113
  const std::weak_ptr<worklets::WorkletRuntime> &uiRuntime) {
130
114
  return jsi::Function::createFromHostFunction(
131
115
  *jsiRuntime,
@@ -140,35 +124,27 @@ class AudioAPIModuleInstaller {
140
124
  auto length = static_cast<size_t>(args[1].getNumber());
141
125
  auto sampleRate = static_cast<float>(args[2].getNumber());
142
126
 
143
- #if RN_AUDIO_API_ENABLE_WORKLETS
144
- auto runtimeRegistry = RuntimeRegistry{
145
- .uiRuntime = uiRuntime,
146
- .audioRuntime = worklets::extractWorkletRuntime(runtime, args[3])
147
- };
148
- #else
149
- auto runtimeRegistry = RuntimeRegistry{};
150
- #endif
151
-
152
- auto offlineAudioContext = std::make_shared<OfflineAudioContext>(
153
- numberOfChannels,
154
- length,
155
- sampleRate,
156
- audioEventHandlerRegistry,
157
- runtimeRegistry);
158
-
159
- auto audioContextHostObject =
160
- std::make_shared<OfflineAudioContextHostObject>(
161
- offlineAudioContext, &runtime, jsCallInvoker);
162
-
163
- return jsi::Object::createFromHostObject(
164
- runtime, audioContextHostObject);
127
+ #if RN_AUDIO_API_ENABLE_WORKLETS
128
+ auto runtimeRegistry = RuntimeRegistry{
129
+ .uiRuntime = uiRuntime,
130
+ .audioRuntime = worklets::extractWorkletRuntime(runtime, args[3])};
131
+ #else
132
+ auto runtimeRegistry = RuntimeRegistry{};
133
+ #endif
134
+
135
+ auto offlineAudioContext = std::make_shared<OfflineAudioContext>(
136
+ numberOfChannels, length, sampleRate, audioEventHandlerRegistry, runtimeRegistry);
137
+
138
+ auto audioContextHostObject = std::make_shared<OfflineAudioContextHostObject>(
139
+ offlineAudioContext, &runtime, jsCallInvoker);
140
+
141
+ return jsi::Object::createFromHostObject(runtime, audioContextHostObject);
165
142
  });
166
143
  }
167
144
 
168
145
  static jsi::Function getCreateAudioRecorderFunction(
169
146
  jsi::Runtime *jsiRuntime,
170
- const std::shared_ptr<AudioEventHandlerRegistry>
171
- &audioEventHandlerRegistry) {
147
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry) {
172
148
  return jsi::Function::createFromHostFunction(
173
149
  *jsiRuntime,
174
150
  jsi::PropNameID::forAscii(*jsiRuntime, "createAudioRecorder"),
@@ -180,18 +156,15 @@ class AudioAPIModuleInstaller {
180
156
  size_t count) -> jsi::Value {
181
157
  auto options = args[0].getObject(runtime);
182
158
 
183
- auto sampleRate = static_cast<float>(
184
- options.getProperty(runtime, "sampleRate").getNumber());
185
- auto bufferLength = static_cast<int>(
186
- options.getProperty(runtime, "bufferLengthInSamples")
187
- .getNumber());
159
+ auto sampleRate =
160
+ static_cast<float>(options.getProperty(runtime, "sampleRate").getNumber());
161
+ auto bufferLength =
162
+ static_cast<int>(options.getProperty(runtime, "bufferLengthInSamples").getNumber());
188
163
 
189
- auto audioRecorderHostObject =
190
- std::make_shared<AudioRecorderHostObject>(
191
- audioEventHandlerRegistry, sampleRate, bufferLength);
164
+ auto audioRecorderHostObject = std::make_shared<AudioRecorderHostObject>(
165
+ audioEventHandlerRegistry, sampleRate, bufferLength);
192
166
 
193
- auto jsiObject = jsi::Object::createFromHostObject(
194
- runtime, audioRecorderHostObject);
167
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, audioRecorderHostObject);
195
168
  jsiObject.setExternalMemoryPressure(
196
169
  runtime, sizeof(float) * bufferLength); // rough estimate of underlying buffer
197
170
 
@@ -213,8 +186,7 @@ class AudioAPIModuleInstaller {
213
186
  size_t count) -> jsi::Value {
214
187
  auto audioDecoderHostObject =
215
188
  std::make_shared<AudioDecoderHostObject>(&runtime, jsCallInvoker);
216
- return jsi::Object::createFromHostObject(
217
- runtime, audioDecoderHostObject);
189
+ return jsi::Object::createFromHostObject(runtime, audioDecoderHostObject);
218
190
  });
219
191
  }
220
192
 
@@ -231,10 +203,8 @@ class AudioAPIModuleInstaller {
231
203
  const jsi::Value *args,
232
204
  size_t count) -> jsi::Value {
233
205
  auto audioStretcherHostObject =
234
- std::make_shared<AudioStretcherHostObject>(
235
- &runtime, jsCallInvoker);
236
- return jsi::Object::createFromHostObject(
237
- runtime, audioStretcherHostObject);
206
+ std::make_shared<AudioStretcherHostObject>(&runtime, jsCallInvoker);
207
+ return jsi::Object::createFromHostObject(runtime, audioStretcherHostObject);
238
208
  });
239
209
  }
240
210
  };
@@ -1,6 +1,8 @@
1
1
  #include <audioapi/HostObjects/AudioContextHostObject.h>
2
2
 
3
3
  #include <audioapi/core/AudioContext.h>
4
+ #include <memory>
5
+ #include <utility>
4
6
 
5
7
  namespace audioapi {
6
8
 
@@ -17,38 +19,35 @@ AudioContextHostObject::AudioContextHostObject(
17
19
 
18
20
  JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, close) {
19
21
  auto audioContext = std::static_pointer_cast<AudioContext>(context_);
20
- auto promise = promiseVendor_->createAsyncPromise(
21
- [audioContext = std::move(audioContext)]() {
22
- return [audioContext](jsi::Runtime &runtime) {
23
- audioContext->close();
24
- return jsi::Value::undefined();
25
- };
26
- });
22
+ auto promise = promiseVendor_->createAsyncPromise([audioContext = std::move(audioContext)]() {
23
+ return [audioContext](jsi::Runtime &runtime) {
24
+ audioContext->close();
25
+ return jsi::Value::undefined();
26
+ };
27
+ });
27
28
 
28
29
  return promise;
29
30
  }
30
31
 
31
32
  JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, resume) {
32
33
  auto audioContext = std::static_pointer_cast<AudioContext>(context_);
33
- auto promise = promiseVendor_->createAsyncPromise(
34
- [audioContext = std::move(audioContext)]() {
35
- auto result = audioContext->resume();
36
- return [result](jsi::Runtime &runtime) {
37
- return jsi::Value(result);
38
- };
39
- });
34
+ auto promise = promiseVendor_->createAsyncPromise([audioContext = std::move(audioContext)]() {
35
+ auto result = audioContext->resume();
36
+ return [result](jsi::Runtime &runtime) {
37
+ return jsi::Value(result);
38
+ };
39
+ });
40
40
  return promise;
41
41
  }
42
42
 
43
43
  JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, suspend) {
44
44
  auto audioContext = std::static_pointer_cast<AudioContext>(context_);
45
- auto promise = promiseVendor_->createAsyncPromise(
46
- [audioContext = std::move(audioContext)]() {
47
- auto result = audioContext->suspend();
48
- return [result](jsi::Runtime &runtime) {
49
- return jsi::Value(result);
50
- };
51
- });
45
+ auto promise = promiseVendor_->createAsyncPromise([audioContext = std::move(audioContext)]() {
46
+ auto result = audioContext->suspend();
47
+ return [result](jsi::Runtime &runtime) {
48
+ return jsi::Value(result);
49
+ };
50
+ });
52
51
 
53
52
  return promise;
54
53
  }
@@ -2,11 +2,11 @@
2
2
 
3
3
  #include <audioapi/HostObjects/AudioParamHostObject.h>
4
4
  #include <audioapi/core/AudioNode.h>
5
+ #include <memory>
5
6
 
6
7
  namespace audioapi {
7
8
 
8
- AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
9
- : node_(node) {
9
+ AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node) : node_(node) {
10
10
  addGetters(
11
11
  JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
12
12
  JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
@@ -36,8 +36,7 @@ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelCountMode) {
36
36
  }
37
37
 
38
38
  JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelInterpretation) {
39
- return jsi::String::createFromUtf8(
40
- runtime, node_->getChannelInterpretation());
39
+ return jsi::String::createFromUtf8(runtime, node_->getChannelInterpretation());
41
40
  }
42
41
 
43
42
  JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, connect) {