react-native-audio-api 0.6.5-rc.1 → 0.7.0-nightly-fba4835-20250717

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 (100) hide show
  1. package/README.md +4 -1
  2. package/android/src/main/cpp/audioapi/android/core/AudioDecoder.cpp +56 -47
  3. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +38 -8
  4. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.h +9 -3
  5. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +4 -0
  6. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +2 -2
  7. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +2 -2
  8. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +2 -2
  9. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +46 -0
  10. package/android/src/main/res/drawable/skip_backward_15.xml +16 -0
  11. package/android/src/main/res/drawable/skip_forward_15.xml +16 -0
  12. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
  13. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +9 -0
  14. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +3 -5
  15. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +11 -2
  16. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +24 -23
  17. package/common/cpp/audioapi/core/AudioContext.cpp +6 -4
  18. package/common/cpp/audioapi/core/AudioContext.h +1 -1
  19. package/common/cpp/audioapi/core/AudioParam.cpp +18 -4
  20. package/common/cpp/audioapi/core/AudioParam.h +3 -0
  21. package/common/cpp/audioapi/core/BaseAudioContext.cpp +3 -3
  22. package/common/cpp/audioapi/core/BaseAudioContext.h +4 -3
  23. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +2 -1
  24. package/common/cpp/audioapi/core/OfflineAudioContext.h +1 -1
  25. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  26. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +1 -0
  27. package/common/cpp/audioapi/core/sources/AudioBuffer.h +1 -0
  28. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +11 -0
  29. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +4 -1
  30. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +11 -0
  31. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +2 -1
  32. package/common/cpp/audioapi/core/utils/AudioDecoder.h +38 -1
  33. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +1 -0
  34. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +1 -2
  35. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  36. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +47 -17
  37. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +6 -5
  38. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +25 -0
  39. package/common/cpp/audioapi/jsi/JsiPromise.cpp +1 -0
  40. package/common/cpp/audioapi/libs/audio-stretch/stretch.c +610 -0
  41. package/common/cpp/audioapi/libs/audio-stretch/stretch.h +49 -0
  42. package/common/cpp/audioapi/utils/AudioArray.h +1 -0
  43. package/common/cpp/audioapi/utils/CircularAudioArray.h +1 -0
  44. package/common/cpp/test/CMakeLists.txt +63 -0
  45. package/common/cpp/test/GainTest.cpp +78 -0
  46. package/common/cpp/test/MockAudioEventHandlerRegistry.h +22 -0
  47. package/common/cpp/test/OscillatorTest.cpp +22 -0
  48. package/common/cpp/test/RunTests.sh +26 -0
  49. package/ios/audioapi/ios/AudioAPIModule.mm +17 -8
  50. package/ios/audioapi/ios/core/AudioDecoder.mm +37 -31
  51. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -1
  52. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +5 -2
  53. package/ios/audioapi/ios/system/AudioSessionManager.h +4 -0
  54. package/ios/audioapi/ios/system/AudioSessionManager.mm +26 -0
  55. package/ios/audioapi/ios/system/LockScreenManager.mm +2 -0
  56. package/lib/commonjs/core/AudioBufferSourceNode.js +2 -2
  57. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  58. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  59. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  60. package/lib/commonjs/core/BaseAudioContext.js +7 -6
  61. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  62. package/lib/commonjs/plugin/withAudioAPI.js +1 -1
  63. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  64. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  65. package/lib/commonjs/system/AudioManager.js +3 -0
  66. package/lib/commonjs/system/AudioManager.js.map +1 -1
  67. package/lib/module/core/AudioBufferSourceNode.js +2 -2
  68. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  69. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  70. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  71. package/lib/module/core/BaseAudioContext.js +7 -6
  72. package/lib/module/core/BaseAudioContext.js.map +1 -1
  73. package/lib/module/plugin/withAudioAPI.js +1 -1
  74. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  75. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  76. package/lib/module/system/AudioManager.js +3 -0
  77. package/lib/module/system/AudioManager.js.map +1 -1
  78. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  79. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +2 -2
  80. package/lib/typescript/core/BaseAudioContext.d.ts +4 -1
  81. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  82. package/lib/typescript/interfaces.d.ts +3 -3
  83. package/lib/typescript/interfaces.d.ts.map +1 -1
  84. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
  85. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  86. package/lib/typescript/system/AudioManager.d.ts +2 -1
  87. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  88. package/lib/typescript/system/types.d.ts +11 -0
  89. package/lib/typescript/system/types.d.ts.map +1 -1
  90. package/package.json +1 -1
  91. package/src/core/AudioBufferSourceNode.ts +2 -8
  92. package/src/core/AudioScheduledSourceNode.ts +4 -4
  93. package/src/core/BaseAudioContext.ts +12 -9
  94. package/src/interfaces.ts +6 -6
  95. package/src/plugin/withAudioAPI.ts +1 -1
  96. package/src/specs/NativeAudioAPIModule.ts +4 -1
  97. package/src/system/AudioManager.ts +10 -1
  98. package/src/system/types.ts +14 -0
  99. package/android/src/main/res/drawable/skip_backward_10.xml +0 -9
  100. package/android/src/main/res/drawable/skip_forward_10.xml +0 -9
@@ -0,0 +1,63 @@
1
+ cmake_minimum_required(VERSION 3.14)
2
+ project(rnaudioapi_test)
3
+
4
+ set(CMAKE_CXX_STANDARD 17)
5
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
6
+ set(ROOT ${CMAKE_SOURCE_DIR}/../../../../..)
7
+ set(REACT_NATIVE_DIR "${ROOT}/node_modules/react-native")
8
+ set(JSI_DIR "${REACT_NATIVE_DIR}/ReactCommon/jsi")
9
+
10
+ include(FetchContent)
11
+ FetchContent_Declare(
12
+ googletest
13
+ URL https://github.com/google/googletest/archive/3983f67e32fb3e9294487b9d4f9586efa6e5d088.zip
14
+ )
15
+ # For Windows: Prevent overriding the parent project's compiler/linker settings
16
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
17
+ FetchContent_MakeAvailable(googletest)
18
+
19
+ enable_testing()
20
+
21
+ file(GLOB_RECURSE RNAUDIOAPI_SRC
22
+ CONFIGURE_DEPENDS
23
+ "${ROOT}/node_modules/react-native-audio-api/common/cpp/audioapi/*.cpp"
24
+ "${ROOT}/node_modules/react-native-audio-api/android/src/main/cpp/audioapi/android/core/AudioDecoder.cpp"
25
+ )
26
+
27
+ list(REMOVE_ITEM RNAUDIOAPI_SRC "${ROOT}/node_modules/react-native-audio-api/common/cpp/audioapi/core/AudioContext.cpp")
28
+
29
+ file(GLOB_RECURSE RNAUDIOAPI_LIBS
30
+ CONFIGURE_DEPENDS
31
+ "${ROOT}/node_modules/react-native-audio-api/common/cpp/audioapi/libs/*.c"
32
+ "${ROOT}/node_modules/react-native-audio-api/common/cpp/audioapi/libs/*.h"
33
+ )
34
+
35
+ add_library(rnaudioapi STATIC ${RNAUDIOAPI_SRC})
36
+ add_library(rnaudioapi_libs STATIC ${RNAUDIOAPI_LIBS})
37
+
38
+ target_include_directories(rnaudioapi PUBLIC
39
+ ${ROOT}/packages/react-native-audio-api/common/cpp
40
+ ${JSI_DIR}
41
+ "${REACT_NATIVE_DIR}/ReactCommon"
42
+ "${REACT_NATIVE_DIR}/ReactCommon/callinvoker"
43
+ )
44
+
45
+ target_include_directories(rnaudioapi_libs PUBLIC
46
+ ${ROOT}/packages/react-native-audio-api/common/cpp
47
+ )
48
+
49
+ add_executable(
50
+ tests
51
+ OscillatorTest.cpp
52
+ GainTest.cpp
53
+ )
54
+
55
+ target_link_libraries(tests
56
+ rnaudioapi
57
+ rnaudioapi_libs
58
+ GTest::gtest_main
59
+ GTest::gmock
60
+ )
61
+
62
+ include(GoogleTest)
63
+ gtest_discover_tests(tests)
@@ -0,0 +1,78 @@
1
+ #include <audioapi/core/OfflineAudioContext.h>
2
+ #include <audioapi/core/effects/GainNode.h>
3
+ #include <audioapi/utils/AudioArray.h>
4
+ #include <audioapi/utils/AudioBus.h>
5
+ #include <gtest/gtest.h>
6
+ #include "MockAudioEventHandlerRegistry.h"
7
+
8
+ class GainTest : public ::testing::Test {
9
+ protected:
10
+ std::shared_ptr<audioapi::IAudioEventHandlerRegistry> eventRegistry;
11
+ std::unique_ptr<audioapi::OfflineAudioContext> context;
12
+ static constexpr int sampleRate = 44100;
13
+
14
+ void SetUp() override {
15
+ eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
16
+ context = std::make_unique<audioapi::OfflineAudioContext>(
17
+ 2, 5 * sampleRate, sampleRate, eventRegistry);
18
+ }
19
+ };
20
+
21
+ class TestableGainNode : public audioapi::GainNode {
22
+ public:
23
+ explicit TestableGainNode(audioapi::BaseAudioContext *context)
24
+ : audioapi::GainNode(context) {}
25
+
26
+ void setGainParam(float value) {
27
+ getGainParam()->setValue(value);
28
+ }
29
+
30
+ void processNode(
31
+ const std::shared_ptr<audioapi::AudioBus> &processingBus,
32
+ int framesToProcess) override {
33
+ audioapi::GainNode::processNode(processingBus, framesToProcess);
34
+ }
35
+ };
36
+
37
+ TEST_F(GainTest, GainCanBeCreated) {
38
+ auto gain = context->createGain();
39
+ ASSERT_NE(gain, nullptr);
40
+ }
41
+
42
+ TEST_F(GainTest, GainModulatesVolumeCorrectly) {
43
+ static constexpr float GAIN_VALUE = 0.5f;
44
+ static constexpr int FRAMES_TO_PROCESS = 4;
45
+ auto gainNode = std::make_shared<TestableGainNode>(context.get());
46
+ gainNode->setGainParam(GAIN_VALUE);
47
+
48
+ auto bus =
49
+ std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 1, sampleRate);
50
+ for (size_t i = 0; i < bus->getSize(); ++i) {
51
+ bus->getChannel(0)->getData()[i] = i + 1;
52
+ }
53
+
54
+ gainNode->processNode(bus, FRAMES_TO_PROCESS);
55
+ for (size_t i = 0; i < bus->getSize(); ++i) {
56
+ EXPECT_FLOAT_EQ((*bus->getChannel(0))[i], (i + 1) * GAIN_VALUE);
57
+ }
58
+ }
59
+
60
+ TEST_F(GainTest, GainModulatesVolumeCorrectlyMultiChannel) {
61
+ static constexpr float GAIN_VALUE = 0.5f;
62
+ static constexpr int FRAMES_TO_PROCESS = 4;
63
+ auto gainNode = std::make_shared<TestableGainNode>(context.get());
64
+ gainNode->setGainParam(GAIN_VALUE);
65
+
66
+ auto bus =
67
+ std::make_shared<audioapi::AudioBus>(FRAMES_TO_PROCESS, 2, sampleRate);
68
+ for (size_t i = 0; i < bus->getSize(); ++i) {
69
+ bus->getChannel(0)->getData()[i] = i + 1;
70
+ bus->getChannel(1)->getData()[i] = -i - 1;
71
+ }
72
+
73
+ gainNode->processNode(bus, FRAMES_TO_PROCESS);
74
+ for (size_t i = 0; i < bus->getSize(); ++i) {
75
+ EXPECT_FLOAT_EQ((*bus->getChannel(0))[i], (i + 1) * GAIN_VALUE);
76
+ EXPECT_FLOAT_EQ((*bus->getChannel(1))[i], (-i - 1) * GAIN_VALUE);
77
+ }
78
+ }
@@ -0,0 +1,22 @@
1
+ #pragma once
2
+
3
+ #include <gmock/gmock.h>
4
+ #include <audioapi/events/IAudioEventHandlerRegistry.h>
5
+ #include <unordered_map>
6
+ #include <string>
7
+ #include <memory>
8
+
9
+ using EventMap = std::unordered_map<std::string, audioapi::EventValue>;
10
+
11
+ class MockAudioEventHandlerRegistry : public audioapi::IAudioEventHandlerRegistry {
12
+ public:
13
+ MOCK_METHOD(uint64_t, registerHandler,
14
+ (const std::string &eventName, const std::shared_ptr<facebook::jsi::Function> &handler), (override));
15
+ MOCK_METHOD(void, unregisterHandler,
16
+ (const std::string &eventName, uint64_t listenerId), (override));
17
+
18
+ MOCK_METHOD(void, invokeHandlerWithEventBody,
19
+ (const std::string &eventName, const EventMap &body), (override));
20
+ MOCK_METHOD(void, invokeHandlerWithEventBody,
21
+ (const std::string &eventName, uint64_t listenerId, const EventMap &body), (override));
22
+ };
@@ -0,0 +1,22 @@
1
+ #include <audioapi/core/OfflineAudioContext.h>
2
+ #include <audioapi/core/sources/OscillatorNode.h>
3
+ #include <gtest/gtest.h>
4
+ #include "MockAudioEventHandlerRegistry.h"
5
+
6
+ class OscillatorTest : public ::testing::Test {
7
+ protected:
8
+ std::shared_ptr<audioapi::IAudioEventHandlerRegistry> eventRegistry;
9
+ std::unique_ptr<audioapi::OfflineAudioContext> context;
10
+ static constexpr int sampleRate = 44100;
11
+
12
+ void SetUp() override {
13
+ eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
14
+ context = std::make_unique<audioapi::OfflineAudioContext>(
15
+ 2, 5 * sampleRate, sampleRate, eventRegistry);
16
+ }
17
+ };
18
+
19
+ TEST_F(OscillatorTest, OscillatorCanBeCreated) {
20
+ auto osc = context->createOscillator();
21
+ ASSERT_NE(osc, nullptr);
22
+ }
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ cleanup() {
6
+ echo "Cleaning up..."
7
+ rm -rf build/
8
+ }
9
+
10
+ trap cleanup EXIT
11
+ # Step 1: Move to the script's directory
12
+ cd packages/react-native-audio-api/common/cpp/test
13
+ # Step 2: Configure CMake project
14
+ # mkdir build
15
+ cmake -S . -B build
16
+
17
+ # Step 3: Build the project
18
+ cmake --build build
19
+
20
+ # Step 4: Run the test binary
21
+ cd build
22
+ ./tests
23
+ cd ..
24
+
25
+ # Step 5: Clean up build directory
26
+ rm -rf build/
@@ -85,8 +85,9 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
85
85
  return [self.audioSessionManager getDevicePreferredSampleRate];
86
86
  }
87
87
 
88
- RCT_EXPORT_METHOD(setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)
89
- resolve reject : (RCTPromiseRejectBlock)reject)
88
+ RCT_EXPORT_METHOD(
89
+ setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)
90
+ reject)
90
91
  {
91
92
  if ([self.audioSessionManager setActive:enabled]) {
92
93
  resolve(@"true");
@@ -96,8 +97,9 @@ RCT_EXPORT_METHOD(setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseR
96
97
  resolve(@"false");
97
98
  }
98
99
 
99
- RCT_EXPORT_METHOD(setAudioSessionOptions : (NSString *)category mode : (NSString *)mode options : (NSArray *)
100
- options allowHaptics : (BOOL)allowHaptics)
100
+ RCT_EXPORT_METHOD(
101
+ setAudioSessionOptions : (NSString *)category mode : (NSString *)mode options : (NSArray *)
102
+ options allowHaptics : (BOOL)allowHaptics)
101
103
  {
102
104
  [self.audioSessionManager setAudioSessionOptions:category mode:mode options:options allowHaptics:allowHaptics];
103
105
  }
@@ -127,18 +129,25 @@ RCT_EXPORT_METHOD(observeVolumeChanges : (BOOL)enabled)
127
129
  [self.notificationManager observeVolumeChanges:(BOOL)enabled];
128
130
  }
129
131
 
130
- RCT_EXPORT_METHOD(requestRecordingPermissions : (nonnull RCTPromiseResolveBlock)
131
- resolve reject : (nonnull RCTPromiseRejectBlock)reject)
132
+ RCT_EXPORT_METHOD(
133
+ requestRecordingPermissions : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)
134
+ reject)
132
135
  {
133
136
  [self.audioSessionManager requestRecordingPermissions:resolve reject:reject];
134
137
  }
135
138
 
136
- RCT_EXPORT_METHOD(checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)
137
- resolve reject : (nonnull RCTPromiseRejectBlock)reject)
139
+ RCT_EXPORT_METHOD(
140
+ checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)reject)
138
141
  {
139
142
  [self.audioSessionManager checkRecordingPermissions:resolve reject:reject];
140
143
  }
141
144
 
145
+ RCT_EXPORT_METHOD(getDevicesInfo : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)
146
+ reject)
147
+ {
148
+ [self.audioSessionManager getDevicesInfo:resolve reject:reject];
149
+ }
150
+
142
151
  #ifdef RCT_NEW_ARCH_ENABLED
143
152
  - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
144
153
  (const facebook::react::ObjCTurboModule::InitParams &)params
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include <audioapi/core/utils/AudioDecoder.h>
5
5
  #include <audioapi/dsp/VectorMath.h>
6
+ #include <audioapi/libs/audio-stretch/stretch.h>
6
7
  #include <audioapi/libs/base64/base64.h>
7
8
  #include <audioapi/utils/AudioArray.h>
8
9
  #include <audioapi/utils/AudioBus.h>
@@ -12,7 +13,7 @@ namespace audioapi {
12
13
  std::shared_ptr<AudioBus> AudioDecoder::decodeWithFilePath(const std::string &path) const
13
14
  {
14
15
  ma_decoder decoder;
15
- ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 2, sampleRate_);
16
+ ma_decoder_config config = ma_decoder_config_init(ma_format_s16, numChannels_, static_cast<int>(sampleRate_));
16
17
  ma_result result = ma_decoder_init_file(path.c_str(), &config, &decoder);
17
18
  if (result != MA_SUCCESS) {
18
19
  NSLog(@"Failed to initialize decoder for file: %s", path.c_str());
@@ -25,29 +26,27 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithFilePath(const std::string &pa
25
26
  ma_uint64 totalFrameCount;
26
27
  ma_decoder_get_length_in_pcm_frames(&decoder, &totalFrameCount);
27
28
 
28
- auto audioBus = std::make_shared<AudioBus>(static_cast<int>(totalFrameCount), 2, sampleRate_);
29
- auto *buffer = new float[totalFrameCount * 2];
29
+ std::vector<int16_t> buffer(totalFrameCount * numChannels_);
30
30
 
31
31
  ma_uint64 framesDecoded;
32
- ma_decoder_read_pcm_frames(&decoder, buffer, totalFrameCount, &framesDecoded);
32
+ ma_decoder_read_pcm_frames(&decoder, buffer.data(), totalFrameCount, &framesDecoded);
33
33
  if (framesDecoded == 0) {
34
34
  NSLog(@"Failed to decode");
35
35
 
36
- delete[] buffer;
37
36
  ma_decoder_uninit(&decoder);
38
-
39
37
  return nullptr;
40
38
  }
41
39
 
42
- for (int i = 0; i < decoder.outputChannels; ++i) {
43
- float *channelData = audioBus->getChannel(i)->getData();
40
+ auto outputFrames = buffer.size() / numChannels_;
41
+ auto audioBus = std::make_shared<AudioBus>(outputFrames, numChannels_, sampleRate_);
44
42
 
45
- for (ma_uint64 j = 0; j < framesDecoded; ++j) {
46
- channelData[j] = buffer[j * decoder.outputChannels + i];
43
+ for (int i = 0; i < numChannels_; ++i) {
44
+ auto channelData = audioBus->getChannel(i)->getData();
45
+ for (int j = 0; j < outputFrames; ++j) {
46
+ channelData[j] = int16ToFloat(buffer[j * numChannels_ + i]);
47
47
  }
48
48
  }
49
49
 
50
- delete[] buffer;
51
50
  ma_decoder_uninit(&decoder);
52
51
 
53
52
  return audioBus;
@@ -56,7 +55,7 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithFilePath(const std::string &pa
56
55
  std::shared_ptr<AudioBus> AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size) const
57
56
  {
58
57
  ma_decoder decoder;
59
- ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 2, sampleRate_);
58
+ ma_decoder_config config = ma_decoder_config_init(ma_format_s16, numChannels_, static_cast<int>(sampleRate_));
60
59
  ma_result result = ma_decoder_init_memory(data, size, &config, &decoder);
61
60
  if (result != MA_SUCCESS) {
62
61
  NSLog(@"Failed to initialize decoder for memory block");
@@ -69,50 +68,57 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithMemoryBlock(const void *data,
69
68
  ma_uint64 totalFrameCount;
70
69
  ma_decoder_get_length_in_pcm_frames(&decoder, &totalFrameCount);
71
70
 
72
- auto audioBus = std::make_shared<AudioBus>(static_cast<int>(totalFrameCount), 2, sampleRate_);
73
- auto *buffer = new float[totalFrameCount * 2];
71
+ std::vector<int16_t> buffer(totalFrameCount * numChannels_);
74
72
 
75
73
  ma_uint64 framesDecoded;
76
- ma_decoder_read_pcm_frames(&decoder, buffer, totalFrameCount, &framesDecoded);
74
+ ma_decoder_read_pcm_frames(&decoder, buffer.data(), totalFrameCount, &framesDecoded);
75
+
77
76
  if (framesDecoded == 0) {
78
77
  NSLog(@"Failed to decode");
79
78
 
80
- delete[] buffer;
81
79
  ma_decoder_uninit(&decoder);
82
-
83
80
  return nullptr;
84
81
  }
85
82
 
86
- for (int i = 0; i < decoder.outputChannels; ++i) {
87
- float *channelData = audioBus->getChannel(i)->getData();
83
+ auto outputFrames = buffer.size() / numChannels_;
84
+ auto audioBus = std::make_shared<AudioBus>(outputFrames, numChannels_, sampleRate_);
88
85
 
89
- for (ma_uint64 j = 0; j < framesDecoded; ++j) {
90
- channelData[j] = buffer[j * decoder.outputChannels + i];
86
+ for (int i = 0; i < numChannels_; ++i) {
87
+ auto channelData = audioBus->getChannel(i)->getData();
88
+ for (int j = 0; j < outputFrames; ++j) {
89
+ channelData[j] = int16ToFloat(buffer[j * numChannels_ + i]);
91
90
  }
92
91
  }
93
92
 
94
- delete[] buffer;
95
93
  ma_decoder_uninit(&decoder);
96
94
 
97
95
  return audioBus;
98
96
  }
99
97
 
100
- std::shared_ptr<AudioBus> AudioDecoder::decodeWithPCMInBase64(const std::string &data) const
98
+ std::shared_ptr<AudioBus> AudioDecoder::decodeWithPCMInBase64(const std::string &data, float playbackSpeed) const
101
99
  {
102
100
  auto decodedData = base64_decode(data, false);
103
101
 
104
102
  const auto uint8Data = reinterpret_cast<uint8_t *>(decodedData.data());
105
- size_t frameCount = decodedData.size() / 2;
106
-
107
- auto audioBus = std::make_shared<AudioBus>(frameCount, 1, sampleRate_);
108
- auto channelData = audioBus->getChannel(0)->getData();
103
+ size_t framesDecoded = decodedData.size() / 2;
109
104
 
110
- for (size_t i = 0; i < frameCount; ++i) {
111
- auto sample = static_cast<int16_t>((uint8Data[i * 2 + 1] << 8) | uint8Data[i * 2]);
112
- channelData[i] = static_cast<float>(sample);
105
+ std::vector<int16_t> buffer(framesDecoded);
106
+ for (size_t i = 0; i < framesDecoded; ++i) {
107
+ buffer[i] = static_cast<int16_t>((uint8Data[i * 2 + 1] << 8) | uint8Data[i * 2]);
113
108
  }
114
109
 
115
- dsp::multiplyByScalar(channelData, 1.0f / 32768.0f, channelData, frameCount);
110
+ changePlaybackSpeedIfNeeded(buffer, framesDecoded, 1, playbackSpeed);
111
+ auto outputFrames = buffer.size();
112
+
113
+ auto audioBus = std::make_shared<AudioBus>(outputFrames, numChannels_, sampleRate_);
114
+ auto leftChannelData = audioBus->getChannel(0)->getData();
115
+ auto rightChannelData = audioBus->getChannel(1)->getData();
116
+
117
+ for (size_t i = 0; i < outputFrames; ++i) {
118
+ auto sample = int16ToFloat(buffer[i]);
119
+ leftChannelData[i] = sample;
120
+ rightChannelData[i] = sample;
121
+ }
116
122
 
117
123
  return audioBus;
118
124
  }
@@ -17,7 +17,8 @@ class IOSAudioPlayer {
17
17
  public:
18
18
  IOSAudioPlayer(
19
19
  const std::function<void(std::shared_ptr<AudioBus>, int)> &renderAudio,
20
- float sampleRate);
20
+ float sampleRate,
21
+ int channelCount);
21
22
  ~IOSAudioPlayer();
22
23
 
23
24
  void start();
@@ -8,8 +8,11 @@
8
8
 
9
9
  namespace audioapi {
10
10
 
11
- IOSAudioPlayer::IOSAudioPlayer(const std::function<void(std::shared_ptr<AudioBus>, int)> &renderAudio, float sampleRate)
12
- : channelCount_(2), renderAudio_(renderAudio), audioBus_(0), isRunning_(false)
11
+ IOSAudioPlayer::IOSAudioPlayer(
12
+ const std::function<void(std::shared_ptr<AudioBus>, int)> &renderAudio,
13
+ float sampleRate,
14
+ int channelCount)
15
+ : renderAudio_(renderAudio), channelCount_(channelCount), audioBus_(0), isRunning_(false)
13
16
  {
14
17
  RenderAudioBlock renderAudioBlock = ^(AudioBufferList *outputData, int numFrames) {
15
18
  int processedFrames = 0;
@@ -26,7 +26,11 @@
26
26
  options:(NSArray *)options
27
27
  allowHaptics:(BOOL)allowHaptics;
28
28
  - (bool)setActive:(bool)active;
29
+
29
30
  - (void)requestRecordingPermissions:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
30
31
  - (void)checkRecordingPermissions:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
31
32
 
33
+ - (void)getDevicesInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
34
+ - (NSArray<NSDictionary *> *)parseDeviceList:(NSArray<AVAudioSessionPortDescription *> *)devices;
35
+
32
36
  @end
@@ -292,4 +292,30 @@
292
292
  }
293
293
  }
294
294
 
295
+ - (void)getDevicesInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
296
+ {
297
+ NSMutableDictionary *devicesInfo = [[NSMutableDictionary alloc] init];
298
+
299
+ [devicesInfo setValue:[self parseDeviceList:[self.audioSession availableInputs]] forKey:@"availableInputs"];
300
+ [devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute] inputs]] forKey:@"currentInputs"];
301
+ [devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute] outputs]] forKey:@"availableOutputs"];
302
+ [devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute] outputs]] forKey:@"currentOutputs"];
303
+
304
+ resolve(devicesInfo);
305
+ }
306
+
307
+ - (NSArray<NSDictionary *> *)parseDeviceList:(NSArray<AVAudioSessionPortDescription *> *)devices
308
+ {
309
+ NSMutableArray<NSDictionary *> *deviceList = [[NSMutableArray alloc] init];
310
+
311
+ for (AVAudioSessionPortDescription *device in devices) {
312
+ [deviceList addObject:@{
313
+ @"name" : device.portName,
314
+ @"category" : device.portType,
315
+ }];
316
+ }
317
+
318
+ return deviceList;
319
+ }
320
+
295
321
  @end
@@ -189,8 +189,10 @@
189
189
  } else if ([name isEqual:@"remotePreviousTrack"]) {
190
190
  [self enableCommand:remoteCenter.previousTrackCommand withSelector:@selector(onPreviousTrack:) enabled:enabled];
191
191
  } else if ([name isEqual:@"remoteSkipForward"]) {
192
+ remoteCenter.skipForwardCommand.preferredIntervals = @[ @15 ];
192
193
  [self enableCommand:remoteCenter.skipForwardCommand withSelector:@selector(onSkipForward:) enabled:enabled];
193
194
  } else if ([name isEqual:@"remoteSkipBackward"]) {
195
+ remoteCenter.skipBackwardCommand.preferredIntervals = @[ @15 ];
194
196
  [self enableCommand:remoteCenter.skipBackwardCommand withSelector:@selector(onSkipBackward:) enabled:enabled];
195
197
  } else if ([name isEqual:@"remoteSeekForward"]) {
196
198
  [self enableCommand:remoteCenter.seekForwardCommand withSelector:@selector(onSeekForward:) enabled:enabled];
@@ -18,10 +18,10 @@ class AudioBufferSourceNode extends _AudioBufferBaseSourceNode.default {
18
18
  }
19
19
  set buffer(buffer) {
20
20
  if (!buffer) {
21
- this.node.setBuffer(this.node, null);
21
+ this.node.setBuffer(null);
22
22
  return;
23
23
  }
24
- this.node.setBuffer(this.node, buffer.buffer);
24
+ this.node.setBuffer(buffer.buffer);
25
25
  }
26
26
  get loopSkip() {
27
27
  return this.node.loopSkip;
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioBufferBaseSourceNode","_interopRequireDefault","require","_AudioBuffer","_errors","e","__esModule","default","AudioBufferSourceNode","AudioBufferBaseSourceNode","buffer","node","AudioBuffer","setBuffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAA0D,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3C,MAAMG,qBAAqB,SAASC,kCAAyB,CAAC;EAC3E,IAAWC,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACC,IAAI,CAA4BD,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIE,oBAAW,CAACF,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACC,IAAI,CAA4BE,SAAS,CAC7C,IAAI,CAACF,IAAI,EACT,IACF,CAAC;MACD;IACF;IAEC,IAAI,CAACA,IAAI,CAA4BE,SAAS,CAC7C,IAAI,CAACF,IAAI,EACTD,MAAM,CAACA,MACT,CAAC;EACH;EAEA,IAAWI,QAAQA,CAAA,EAAY;IAC7B,OAAQ,IAAI,CAACH,IAAI,CAA4BG,QAAQ;EACvD;EAEA,IAAWA,QAAQA,CAACC,KAAc,EAAE;IACjC,IAAI,CAACJ,IAAI,CAA4BG,QAAQ,GAAGC,KAAK;EACxD;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACL,IAAI,CAA4BK,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACD,KAAc,EAAE;IAC7B,IAAI,CAACJ,IAAI,CAA4BK,IAAI,GAAGD,KAAK;EACpD;EAEA,IAAWE,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACN,IAAI,CAA4BM,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACF,KAAa,EAAE;IACjC,IAAI,CAACJ,IAAI,CAA4BM,SAAS,GAAGF,KAAK;EACzD;EAEA,IAAWG,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACH,KAAa,EAAE;IAC/B,IAAI,CAACJ,IAAI,CAA4BO,OAAO,GAAGH,KAAK;EACvD;EAEOI,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIG,kBAAU,CAClB,8CAA8CH,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIE,kBAAU,CAClB,gDAAgDF,MAAM,EACxD,CAAC;IACH;IAEA,IAAIC,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIC,kBAAU,CAClB,kDAAkDD,QAAQ,EAC5D,CAAC;IACH;IAEA,IAAI,IAAI,CAACE,cAAc,EAAE;MACvB,MAAM,IAAIC,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACD,cAAc,GAAG,IAAI;IACzB,IAAI,CAACb,IAAI,CAA4BQ,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;AACF;AAACI,OAAA,CAAAnB,OAAA,GAAAC,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AudioBufferBaseSourceNode","_interopRequireDefault","require","_AudioBuffer","_errors","e","__esModule","default","AudioBufferSourceNode","AudioBufferBaseSourceNode","buffer","node","AudioBuffer","setBuffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAA0D,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3C,MAAMG,qBAAqB,SAASC,kCAAyB,CAAC;EAC3E,IAAWC,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACC,IAAI,CAA4BD,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIE,oBAAW,CAACF,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACC,IAAI,CAA4BE,SAAS,CAAC,IAAI,CAAC;MACrD;IACF;IAEC,IAAI,CAACF,IAAI,CAA4BE,SAAS,CAACH,MAAM,CAACA,MAAM,CAAC;EAChE;EAEA,IAAWI,QAAQA,CAAA,EAAY;IAC7B,OAAQ,IAAI,CAACH,IAAI,CAA4BG,QAAQ;EACvD;EAEA,IAAWA,QAAQA,CAACC,KAAc,EAAE;IACjC,IAAI,CAACJ,IAAI,CAA4BG,QAAQ,GAAGC,KAAK;EACxD;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACL,IAAI,CAA4BK,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACD,KAAc,EAAE;IAC7B,IAAI,CAACJ,IAAI,CAA4BK,IAAI,GAAGD,KAAK;EACpD;EAEA,IAAWE,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACN,IAAI,CAA4BM,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACF,KAAa,EAAE;IACjC,IAAI,CAACJ,IAAI,CAA4BM,SAAS,GAAGF,KAAK;EACzD;EAEA,IAAWG,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACH,KAAa,EAAE;IAC/B,IAAI,CAACJ,IAAI,CAA4BO,OAAO,GAAGH,KAAK;EACvD;EAEOI,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIG,kBAAU,CAClB,8CAA8CH,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIE,kBAAU,CAClB,gDAAgDF,MAAM,EACxD,CAAC;IACH;IAEA,IAAIC,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIC,kBAAU,CAClB,kDAAkDD,QAAQ,EAC5D,CAAC;IACH;IAEA,IAAI,IAAI,CAACE,cAAc,EAAE;MACvB,MAAM,IAAIC,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACD,cAAc,GAAG,IAAI;IACzB,IAAI,CAACb,IAAI,CAA4BQ,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;AACF;AAACI,OAAA,CAAAnB,OAAA,GAAAC,qBAAA","ignoreList":[]}
@@ -30,12 +30,12 @@ class AudioScheduledSourceNode extends _AudioNode.default {
30
30
  }
31
31
  this.node.stop(when);
32
32
  }
33
- get onended() {
33
+ get onEnded() {
34
34
  return this.onEndedCallback;
35
35
  }
36
- set onended(callback) {
36
+ set onEnded(callback) {
37
37
  if (!callback) {
38
- this.node.onended = '0';
38
+ this.node.onEnded = '0';
39
39
  this.onendedSubscription?.remove();
40
40
  this.onendedSubscription = undefined;
41
41
  this.onEndedCallback = undefined;
@@ -43,7 +43,7 @@ class AudioScheduledSourceNode extends _AudioNode.default {
43
43
  }
44
44
  this.onEndedCallback = callback;
45
45
  this.onendedSubscription = this.audioEventEmitter.addAudioEventListener('ended', callback);
46
- this.node.onended = this.onendedSubscription.subscriptionId;
46
+ this.node.onEnded = this.onendedSubscription.subscriptionId;
47
47
  }
48
48
  }
49
49
  exports.default = AudioScheduledSourceNode;
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioNode","_interopRequireDefault","require","_errors","_events","e","__esModule","default","AudioScheduledSourceNode","AudioNode","hasBeenStarted","audioEventEmitter","AudioEventEmitter","global","start","when","RangeError","InvalidStateError","node","stop","onended","onEndedCallback","callback","onendedSubscription","remove","undefined","addAudioEventListener","subscriptionId","exports"],"sourceRoot":"../../../src","sources":["core/AudioScheduledSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAAsE,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEvD,MAAMG,wBAAwB,SAASC,kBAAS,CAAC;EACpDC,cAAc,GAAY,KAAK;EACtBC,iBAAiB,GAAG,IAAIC,yBAAiB,CAC1DC,MAAM,CAACD,iBACT,CAAC;EAKME,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAQ;IACnC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIC,kBAAU,CAClB,8CAA8CD,IAAI,EACpD,CAAC;IACH;IAEA,IAAI,IAAI,CAACL,cAAc,EAAE;MACvB,MAAM,IAAIO,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACP,cAAc,GAAG,IAAI;IACzB,IAAI,CAACQ,IAAI,CAA+BJ,KAAK,CAACC,IAAI,CAAC;EACtD;EAEOI,IAAIA,CAACJ,IAAY,GAAG,CAAC,EAAQ;IAClC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIC,kBAAU,CAClB,8CAA8CD,IAAI,EACpD,CAAC;IACH;IAEA,IAAI,CAAC,IAAI,CAACL,cAAc,EAAE;MACxB,MAAM,IAAIO,yBAAiB,CACzB,8CACF,CAAC;IACH;IAEC,IAAI,CAACC,IAAI,CAA+BC,IAAI,CAACJ,IAAI,CAAC;EACrD;EAEA,IAAWK,OAAOA,CAAA,EAAkD;IAClE,OAAO,IAAI,CAACC,eAAe;EAC7B;EAEA,IAAWD,OAAOA,CAACE,QAAkD,EAAE;IACrE,IAAI,CAACA,QAAQ,EAAE;MACZ,IAAI,CAACJ,IAAI,CAA+BE,OAAO,GAAG,GAAG;MACtD,IAAI,CAACG,mBAAmB,EAAEC,MAAM,CAAC,CAAC;MAClC,IAAI,CAACD,mBAAmB,GAAGE,SAAS;MACpC,IAAI,CAACJ,eAAe,GAAGI,SAAS;MAChC;IACF;IAEA,IAAI,CAACJ,eAAe,GAAGC,QAAQ;IAC/B,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACZ,iBAAiB,CAACe,qBAAqB,CACrE,OAAO,EACPJ,QACF,CAAC;IAEA,IAAI,CAACJ,IAAI,CAA+BE,OAAO,GAC9C,IAAI,CAACG,mBAAmB,CAACI,cAAc;EAC3C;AACF;AAACC,OAAA,CAAArB,OAAA,GAAAC,wBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AudioNode","_interopRequireDefault","require","_errors","_events","e","__esModule","default","AudioScheduledSourceNode","AudioNode","hasBeenStarted","audioEventEmitter","AudioEventEmitter","global","start","when","RangeError","InvalidStateError","node","stop","onEnded","onEndedCallback","callback","onendedSubscription","remove","undefined","addAudioEventListener","subscriptionId","exports"],"sourceRoot":"../../../src","sources":["core/AudioScheduledSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAAsE,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEvD,MAAMG,wBAAwB,SAASC,kBAAS,CAAC;EACpDC,cAAc,GAAY,KAAK;EACtBC,iBAAiB,GAAG,IAAIC,yBAAiB,CAC1DC,MAAM,CAACD,iBACT,CAAC;EAKME,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAQ;IACnC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIC,kBAAU,CAClB,8CAA8CD,IAAI,EACpD,CAAC;IACH;IAEA,IAAI,IAAI,CAACL,cAAc,EAAE;MACvB,MAAM,IAAIO,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACP,cAAc,GAAG,IAAI;IACzB,IAAI,CAACQ,IAAI,CAA+BJ,KAAK,CAACC,IAAI,CAAC;EACtD;EAEOI,IAAIA,CAACJ,IAAY,GAAG,CAAC,EAAQ;IAClC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIC,kBAAU,CAClB,8CAA8CD,IAAI,EACpD,CAAC;IACH;IAEA,IAAI,CAAC,IAAI,CAACL,cAAc,EAAE;MACxB,MAAM,IAAIO,yBAAiB,CACzB,8CACF,CAAC;IACH;IAEC,IAAI,CAACC,IAAI,CAA+BC,IAAI,CAACJ,IAAI,CAAC;EACrD;EAEA,IAAWK,OAAOA,CAAA,EAAkD;IAClE,OAAO,IAAI,CAACC,eAAe;EAC7B;EAEA,IAAWD,OAAOA,CAACE,QAAkD,EAAE;IACrE,IAAI,CAACA,QAAQ,EAAE;MACZ,IAAI,CAACJ,IAAI,CAA+BE,OAAO,GAAG,GAAG;MACtD,IAAI,CAACG,mBAAmB,EAAEC,MAAM,CAAC,CAAC;MAClC,IAAI,CAACD,mBAAmB,GAAGE,SAAS;MACpC,IAAI,CAACJ,eAAe,GAAGI,SAAS;MAChC;IACF;IAEA,IAAI,CAACJ,eAAe,GAAGC,QAAQ;IAC/B,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACZ,iBAAiB,CAACe,qBAAqB,CACrE,OAAO,EACPJ,QACF,CAAC;IAEA,IAAI,CAACJ,IAAI,CAA+BE,OAAO,GAC9C,IAAI,CAACG,mBAAmB,CAACI,cAAc;EAC3C;AACF;AAACC,OAAA,CAAArB,OAAA,GAAAC,wBAAA","ignoreList":[]}
@@ -73,6 +73,8 @@ class BaseAudioContext {
73
73
  createAnalyser() {
74
74
  return new _AnalyserNode.default(this, this.context.createAnalyser());
75
75
  }
76
+
77
+ /** Decodes audio data from a local file path. */
76
78
  async decodeAudioDataSource(sourcePath) {
77
79
  // Remove the file:// prefix if it exists
78
80
  if (sourcePath.startsWith('file://')) {
@@ -80,15 +82,14 @@ class BaseAudioContext {
80
82
  }
81
83
  return new _AudioBuffer.default(await this.context.decodeAudioDataSource(sourcePath));
82
84
  }
83
- async decodeAudioData(data) {
84
- // pcm data in base64
85
- if (typeof data === 'string') {
86
- return new _AudioBuffer.default(await this.context.decodePCMAudioDataInBase64(data));
87
- }
88
85
 
89
- // data in array buffer
86
+ /** Decodes audio data from an ArrayBuffer. */
87
+ async decodeAudioData(data) {
90
88
  return new _AudioBuffer.default(await this.context.decodeAudioData(new Uint8Array(data)));
91
89
  }
90
+ async decodePCMInBase64Data(base64, playbackRate = 1.0) {
91
+ return new _AudioBuffer.default(await this.context.decodePCMAudioDataInBase64(base64, playbackRate));
92
+ }
92
93
  }
93
94
  exports.default = BaseAudioContext;
94
95
  //# sourceMappingURL=BaseAudioContext.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioDestinationNode","_interopRequireDefault","require","_OscillatorNode","_CustomProcessorNode","_GainNode","_StereoPannerNode","_BiquadFilterNode","_AudioBufferSourceNode","_AudioBuffer","_PeriodicWave","_AnalyserNode","_AudioBufferQueueSourceNode","_errors","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createOscillator","OscillatorNode","createCustomProcessor","identifier","CustomProcessorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","NotSupportedError","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","decodePCMAudioDataInBase64","Uint8Array","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_AudioDestinationNode","_interopRequireDefault","require","_OscillatorNode","_CustomProcessorNode","_GainNode","_StereoPannerNode","_BiquadFilterNode","_AudioBufferSourceNode","_AudioBuffer","_PeriodicWave","_AnalyserNode","_AudioBufferQueueSourceNode","_errors","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createOscillator","OscillatorNode","createCustomProcessor","identifier","CustomProcessorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","NotSupportedError","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":";;;;;;AAMA,IAAAA,qBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,oBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,SAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,iBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,sBAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,YAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,aAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,aAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,2BAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AAAkE,SAAAD,uBAAAa,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnD,MAAMG,gBAAgB,CAAC;EAKpCC,WAAWA,CAACC,OAA0B,EAAE;IACtC,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,WAAW,GAAG,IAAIC,6BAAoB,CAAC,IAAI,EAAEF,OAAO,CAACC,WAAW,CAAC;IACtE,IAAI,CAACE,UAAU,GAAGH,OAAO,CAACG,UAAU;EACtC;EAEA,IAAWC,WAAWA,CAAA,EAAW;IAC/B,OAAO,IAAI,CAACJ,OAAO,CAACI,WAAW;EACjC;EAEA,IAAWC,KAAKA,CAAA,EAAiB;IAC/B,OAAO,IAAI,CAACL,OAAO,CAACK,KAAK;EAC3B;EAEAC,gBAAgBA,CAAA,EAAmB;IACjC,OAAO,IAAIC,uBAAc,CAAC,IAAI,EAAE,IAAI,CAACP,OAAO,CAACM,gBAAgB,CAAC,CAAC,CAAC;EAClE;EAEAE,qBAAqBA,CAACC,UAAkB,EAAuB;IAC7D,OAAO,IAAIC,4BAAmB,CAC5B,IAAI,EACJ,IAAI,CAACV,OAAO,CAACQ,qBAAqB,CAACC,UAAU,CAC/C,CAAC;EACH;EAEAE,UAAUA,CAAA,EAAa;IACrB,OAAO,IAAIC,iBAAQ,CAAC,IAAI,EAAE,IAAI,CAACZ,OAAO,CAACW,UAAU,CAAC,CAAC,CAAC;EACtD;EAEAE,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIC,yBAAgB,CAAC,IAAI,EAAE,IAAI,CAACd,OAAO,CAACa,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAE,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIC,yBAAgB,CAAC,IAAI,EAAE,IAAI,CAAChB,OAAO,CAACe,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAE,kBAAkBA,CAChBC,OAAsC,EACf;IACvB,MAAMC,eAAe,GAAGD,OAAO,EAAEC,eAAe,IAAI,KAAK;IAEzD,OAAO,IAAIC,8BAAqB,CAC9B,IAAI,EACJ,IAAI,CAACpB,OAAO,CAACiB,kBAAkB,CAACE,eAAe,CACjD,CAAC;EACH;EAEAE,uBAAuBA,CAAA,EAA+B;IACpD,OAAO,IAAIC,mCAA0B,CACnC,IAAI,EACJ,IAAI,CAACtB,OAAO,CAACqB,uBAAuB,CAAC,CACvC,CAAC;EACH;EAEAE,YAAYA,CACVC,aAAqB,EACrBC,MAAc,EACdtB,UAAkB,EACL;IACb,IAAIqB,aAAa,GAAG,CAAC,IAAIA,aAAa,IAAI,EAAE,EAAE;MAC5C,MAAM,IAAIE,yBAAiB,CACzB,oCAAoCF,aAAa,gCACnD,CAAC;IACH;IAEA,IAAIC,MAAM,IAAI,CAAC,EAAE;MACf,MAAM,IAAIC,yBAAiB,CACzB,kCAAkCD,MAAM,kDAC1C,CAAC;IACH;IAEA,IAAItB,UAAU,GAAG,IAAI,IAAIA,UAAU,GAAG,KAAK,EAAE;MAC3C,MAAM,IAAIuB,yBAAiB,CACzB,6BAA6BvB,UAAU,sCACzC,CAAC;IACH;IAEA,OAAO,IAAIwB,oBAAW,CACpB,IAAI,CAAC3B,OAAO,CAACuB,YAAY,CAACC,aAAa,EAAEC,MAAM,EAAEtB,UAAU,CAC7D,CAAC;EACH;EAEAyB,kBAAkBA,CAChBC,IAAkB,EAClBC,IAAkB,EAClBC,WAAqC,EACvB;IACd,IAAIF,IAAI,CAACJ,MAAM,KAAKK,IAAI,CAACL,MAAM,EAAE;MAC/B,MAAM,IAAIO,0BAAkB,CAC1B,4BAA4BH,IAAI,CAACJ,MAAM,oBAAoBK,IAAI,CAACL,MAAM,sBACxE,CAAC;IACH;IAEA,MAAMQ,oBAAoB,GAAGF,WAAW,EAAEE,oBAAoB,IAAI,KAAK;IAEvE,OAAO,IAAIC,qBAAY,CACrB,IAAI,CAAClC,OAAO,CAAC4B,kBAAkB,CAACC,IAAI,EAAEC,IAAI,EAAEG,oBAAoB,CAClE,CAAC;EACH;EAEAE,cAAcA,CAAA,EAAiB;IAC7B,OAAO,IAAIC,qBAAY,CAAC,IAAI,EAAE,IAAI,CAACpC,OAAO,CAACmC,cAAc,CAAC,CAAC,CAAC;EAC9D;;EAEA;EACA,MAAME,qBAAqBA,CAACC,UAAkB,EAAwB;IACpE;IACA,IAAIA,UAAU,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE;MACpCD,UAAU,GAAGA,UAAU,CAACE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAChD;IAEA,OAAO,IAAIb,oBAAW,CACpB,MAAM,IAAI,CAAC3B,OAAO,CAACqC,qBAAqB,CAACC,UAAU,CACrD,CAAC;EACH;;EAEA;EACA,MAAMG,eAAeA,CAACC,IAAiB,EAAwB;IAC7D,OAAO,IAAIf,oBAAW,CACpB,MAAM,IAAI,CAAC3B,OAAO,CAACyC,eAAe,CAAC,IAAIE,UAAU,CAACD,IAAI,CAAC,CACzD,CAAC;EACH;EAEA,MAAME,qBAAqBA,CACzBC,MAAc,EACdC,YAAoB,GAAG,GAAG,EACJ;IACtB,OAAO,IAAInB,oBAAW,CACpB,MAAM,IAAI,CAAC3B,OAAO,CAAC+C,0BAA0B,CAACF,MAAM,EAAEC,YAAY,CACpE,CAAC;EACH;AACF;AAACE,OAAA,CAAAnD,OAAA,GAAAC,gBAAA","ignoreList":[]}
@@ -9,7 +9,7 @@ const pkg = require('react-native-audio-api/package.json');
9
9
  const withDefaultOptions = options => {
10
10
  return {
11
11
  iosBackgroundMode: true,
12
- androidPermissions: ['android.permission.FOREGROUND_SERVICE', 'android.permission.WAKE_LOCK'],
12
+ androidPermissions: ['android.permission.FOREGROUND_SERVICE', 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK'],
13
13
  androidForegroundService: true,
14
14
  androidFSTypes: ['mediaPlayback'],
15
15
  ...options
@@ -1 +1 @@
1
- {"version":3,"names":["_configPlugins","require","pkg","withDefaultOptions","options","iosBackgroundMode","androidPermissions","androidForegroundService","androidFSTypes","withBackgroundAudio","config","withInfoPlist","iosConfig","modResults","UIBackgroundModes","Array","from","Set","withAndroidPermissions","AndroidConfig","Permissions","withPermissions","withForegroundService","withAndroidManifest","mod","manifest","mainApplication","Manifest","getMainApplicationOrThrow","SFTypes","join","serviceElement","$","intentFilter","service","push","withAudioAPI","optionsIn","_default","exports","default","createRunOncePlugin","name","version"],"sourceRoot":"../../../src","sources":["plugin/withAudioAPI.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAOA,MAAMC,GAAG,GAAGD,OAAO,CAAC,qCAAqC,CAAC;AAS1D,MAAME,kBAAkB,GAAIC,OAAyB,IAAc;EACjE,OAAO;IACLC,iBAAiB,EAAE,IAAI;IACvBC,kBAAkB,EAAE,CAClB,uCAAuC,EACvC,8BAA8B,CAC/B;IACDC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,CAAC,eAAe,CAAC;IACjC,GAAGJ;EACL,CAAC;AACH,CAAC;AAED,MAAMK,mBAAiC,GAAIC,MAAM,IAAK;EACpD,OAAO,IAAAC,4BAAa,EAACD,MAAM,EAAGE,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACC,iBAAiB,GAAG,CACvC,GAAGC,KAAK,CAACC,IAAI,CACX,IAAIC,GAAG,CAAC,CAAC,IAAIL,SAAS,CAACC,UAAU,CAACC,iBAAiB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC,CACF;IAED,OAAOF,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMM,sBAA6C,GAAGA,CACpDR,MAAM,EACN;EAAEJ;AAA4B,CAAC,KAC5B;EACH,OAAOa,4BAAa,CAACC,WAAW,CAACC,eAAe,CAACX,MAAM,EAAEJ,kBAAkB,CAAC;AAC9E,CAAC;AAED,MAAMgB,qBAA4C,GAAGA,CACnDZ,MAAM,EACN;EAAEF;AAAwB,CAAC,KACxB;EACH,OAAO,IAAAe,kCAAmB,EAACb,MAAM,EAAGc,GAAG,IAAK;IAC1C,MAAMC,QAAQ,GAAGD,GAAG,CAACX,UAAU;IAC/B,MAAMa,eAAe,GACnBP,4BAAa,CAACQ,QAAQ,CAACC,yBAAyB,CAACH,QAAQ,CAAC;IAE5D,MAAMI,OAAO,GAAGrB,cAAc,CAACsB,IAAI,CAAC,GAAG,CAAC;IAExC,MAAMC,cAAc,GAAG;MACrBC,CAAC,EAAE;QACD,cAAc,EACZ,4EAA4E;QAC9E,sBAAsB,EAAE,MAAM;QAC9B,+BAA+B,EAAEH;MACnC,CAAC;MACDI,YAAY,EAAE;IAChB,CAAC;IAED,IAAI,CAACP,eAAe,CAACQ,OAAO,EAAE;MAC5BR,eAAe,CAACQ,OAAO,GAAG,EAAE;IAC9B;IAEAR,eAAe,CAACQ,OAAO,CAACC,IAAI,CAACJ,cAAc,CAAC;IAE5C,OAAOP,GAAG;EACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAMY,YAAmC,GAAGA,CAAC1B,MAAM,EAAE2B,SAAS,KAAK;EACjE,MAAMjC,OAAO,GAAGD,kBAAkB,CAACkC,SAAS,IAAI,CAAC,CAAC,CAAC;EAEnD,IAAIjC,OAAO,CAACC,iBAAiB,EAAE;IAC7BK,MAAM,GAAGD,mBAAmB,CAACC,MAAM,CAAC;EACtC;EAEAA,MAAM,GAAGQ,sBAAsB,CAACR,MAAM,EAAEN,OAAO,CAAC;EAEhD,IAAIA,OAAO,CAACG,wBAAwB,EAAE;IACpCG,MAAM,GAAGY,qBAAqB,CAACZ,MAAM,EAAEN,OAAO,CAAC;EACjD;EAEA,OAAOM,MAAM;AACf,CAAC;AAAC,IAAA4B,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,kCAAmB,EAACL,YAAY,EAAElC,GAAG,CAACwC,IAAI,EAAExC,GAAG,CAACyC,OAAO,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_configPlugins","require","pkg","withDefaultOptions","options","iosBackgroundMode","androidPermissions","androidForegroundService","androidFSTypes","withBackgroundAudio","config","withInfoPlist","iosConfig","modResults","UIBackgroundModes","Array","from","Set","withAndroidPermissions","AndroidConfig","Permissions","withPermissions","withForegroundService","withAndroidManifest","mod","manifest","mainApplication","Manifest","getMainApplicationOrThrow","SFTypes","join","serviceElement","$","intentFilter","service","push","withAudioAPI","optionsIn","_default","exports","default","createRunOncePlugin","name","version"],"sourceRoot":"../../../src","sources":["plugin/withAudioAPI.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAOA,MAAMC,GAAG,GAAGD,OAAO,CAAC,qCAAqC,CAAC;AAS1D,MAAME,kBAAkB,GAAIC,OAAyB,IAAc;EACjE,OAAO;IACLC,iBAAiB,EAAE,IAAI;IACvBC,kBAAkB,EAAE,CAClB,uCAAuC,EACvC,sDAAsD,CACvD;IACDC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,CAAC,eAAe,CAAC;IACjC,GAAGJ;EACL,CAAC;AACH,CAAC;AAED,MAAMK,mBAAiC,GAAIC,MAAM,IAAK;EACpD,OAAO,IAAAC,4BAAa,EAACD,MAAM,EAAGE,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACC,iBAAiB,GAAG,CACvC,GAAGC,KAAK,CAACC,IAAI,CACX,IAAIC,GAAG,CAAC,CAAC,IAAIL,SAAS,CAACC,UAAU,CAACC,iBAAiB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC,CACF;IAED,OAAOF,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMM,sBAA6C,GAAGA,CACpDR,MAAM,EACN;EAAEJ;AAA4B,CAAC,KAC5B;EACH,OAAOa,4BAAa,CAACC,WAAW,CAACC,eAAe,CAACX,MAAM,EAAEJ,kBAAkB,CAAC;AAC9E,CAAC;AAED,MAAMgB,qBAA4C,GAAGA,CACnDZ,MAAM,EACN;EAAEF;AAAwB,CAAC,KACxB;EACH,OAAO,IAAAe,kCAAmB,EAACb,MAAM,EAAGc,GAAG,IAAK;IAC1C,MAAMC,QAAQ,GAAGD,GAAG,CAACX,UAAU;IAC/B,MAAMa,eAAe,GACnBP,4BAAa,CAACQ,QAAQ,CAACC,yBAAyB,CAACH,QAAQ,CAAC;IAE5D,MAAMI,OAAO,GAAGrB,cAAc,CAACsB,IAAI,CAAC,GAAG,CAAC;IAExC,MAAMC,cAAc,GAAG;MACrBC,CAAC,EAAE;QACD,cAAc,EACZ,4EAA4E;QAC9E,sBAAsB,EAAE,MAAM;QAC9B,+BAA+B,EAAEH;MACnC,CAAC;MACDI,YAAY,EAAE;IAChB,CAAC;IAED,IAAI,CAACP,eAAe,CAACQ,OAAO,EAAE;MAC5BR,eAAe,CAACQ,OAAO,GAAG,EAAE;IAC9B;IAEAR,eAAe,CAACQ,OAAO,CAACC,IAAI,CAACJ,cAAc,CAAC;IAE5C,OAAOP,GAAG;EACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAMY,YAAmC,GAAGA,CAAC1B,MAAM,EAAE2B,SAAS,KAAK;EACjE,MAAMjC,OAAO,GAAGD,kBAAkB,CAACkC,SAAS,IAAI,CAAC,CAAC,CAAC;EAEnD,IAAIjC,OAAO,CAACC,iBAAiB,EAAE;IAC7BK,MAAM,GAAGD,mBAAmB,CAACC,MAAM,CAAC;EACtC;EAEAA,MAAM,GAAGQ,sBAAsB,CAACR,MAAM,EAAEN,OAAO,CAAC;EAEhD,IAAIA,OAAO,CAACG,wBAAwB,EAAE;IACpCG,MAAM,GAAGY,qBAAqB,CAACZ,MAAM,EAAEN,OAAO,CAAC;EACjD;EAEA,OAAOM,MAAM;AACf,CAAC;AAAC,IAAA4B,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,kCAAmB,EAACL,YAAY,EAAElC,GAAG,CAACwC,IAAI,EAAExC,GAAG,CAACyC,OAAO,CAAC","ignoreList":[]}