react-native-audio-api 0.6.4-nightly-e199fd6-20250715 → 0.6.4-nightly-c1e4367-20250715
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.
- package/android/src/main/cpp/audioapi/android/core/AudioDecoder.cpp +12 -14
- package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -9
- package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -9
- package/common/cpp/audioapi/core/AudioParam.cpp +5 -4
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +0 -10
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +0 -11
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +1 -3
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +0 -11
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -2
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +17 -44
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +1 -0
- package/common/cpp/test/CMakeLists.txt +7 -24
- package/ios/audioapi/ios/AudioAPIModule.mm +13 -10
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#define MINIAUDIO_IMPLEMENTATION
|
|
8
8
|
#include <audioapi/libs/miniaudio/miniaudio.h>
|
|
9
9
|
|
|
10
|
-
#include <android/log.h>
|
|
10
|
+
// #include <android/log.h>
|
|
11
11
|
|
|
12
12
|
namespace audioapi {
|
|
13
13
|
|
|
@@ -18,12 +18,11 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithFilePath(
|
|
|
18
18
|
ma_decoder_config_init(ma_format_f32, 2, static_cast<int>(sampleRate_));
|
|
19
19
|
ma_result result = ma_decoder_init_file(path.c_str(), &config, &decoder);
|
|
20
20
|
if (result != MA_SUCCESS) {
|
|
21
|
-
__android_log_print(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
// __android_log_print(
|
|
22
|
+
// ANDROID_LOG_ERROR,
|
|
23
|
+
// "AudioDecoder",
|
|
24
|
+
// "Failed to initialize decoder for file: %s",
|
|
25
|
+
// path.c_str());
|
|
27
26
|
ma_decoder_uninit(&decoder);
|
|
28
27
|
|
|
29
28
|
return nullptr;
|
|
@@ -40,7 +39,7 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithFilePath(
|
|
|
40
39
|
ma_decoder_read_pcm_frames(&decoder, buffer, totalFrameCount, &framesDecoded);
|
|
41
40
|
|
|
42
41
|
if (framesDecoded == 0) {
|
|
43
|
-
__android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode");
|
|
42
|
+
// __android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode");
|
|
44
43
|
|
|
45
44
|
delete[] buffer;
|
|
46
45
|
ma_decoder_uninit(&decoder);
|
|
@@ -70,11 +69,10 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithMemoryBlock(
|
|
|
70
69
|
ma_decoder_config_init(ma_format_f32, 2, static_cast<int>(sampleRate_));
|
|
71
70
|
ma_result result = ma_decoder_init_memory(data, size, &config, &decoder);
|
|
72
71
|
if (result != MA_SUCCESS) {
|
|
73
|
-
__android_log_print(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
// __android_log_print(
|
|
73
|
+
// ANDROID_LOG_ERROR,
|
|
74
|
+
// "AudioDecoder",
|
|
75
|
+
// "Failed to initialize decoder for memory block");
|
|
78
76
|
ma_decoder_uninit(&decoder);
|
|
79
77
|
|
|
80
78
|
return nullptr;
|
|
@@ -90,7 +88,7 @@ std::shared_ptr<AudioBus> AudioDecoder::decodeWithMemoryBlock(
|
|
|
90
88
|
ma_uint64 framesDecoded;
|
|
91
89
|
ma_decoder_read_pcm_frames(&decoder, buffer, totalFrameCount, &framesDecoded);
|
|
92
90
|
if (framesDecoded == 0) {
|
|
93
|
-
__android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode");
|
|
91
|
+
// __android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode");
|
|
94
92
|
|
|
95
93
|
delete[] buffer;
|
|
96
94
|
ma_decoder_uninit(&decoder);
|
|
@@ -26,15 +26,6 @@ class AudioBufferBaseSourceNodeHostObject
|
|
|
26
26
|
JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
~AudioBufferBaseSourceNodeHostObject() {
|
|
30
|
-
auto sourceNode =
|
|
31
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
32
|
-
|
|
33
|
-
// When JSI object is garbage collected (together with the eventual callback),
|
|
34
|
-
// underlying source node might still be active and try to call the non-existing callback.
|
|
35
|
-
sourceNode->clearOnPositionChangedCallback();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
29
|
JSI_PROPERTY_GETTER(detune) {
|
|
39
30
|
auto sourceNode =
|
|
40
31
|
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
@@ -21,15 +21,6 @@ class AudioScheduledSourceNodeHostObject : public AudioNodeHostObject {
|
|
|
21
21
|
JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, stop));
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
~AudioScheduledSourceNodeHostObject() {
|
|
25
|
-
auto audioScheduledSourceNode =
|
|
26
|
-
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
27
|
-
|
|
28
|
-
// When JSI object is garbage collected (together with the eventual callback),
|
|
29
|
-
// underlying source node might still be active and try to call the non-existing callback.
|
|
30
|
-
audioScheduledSourceNode->clearOnEndedCallback();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
24
|
JSI_PROPERTY_SETTER(onEnded) {
|
|
34
25
|
auto audioScheduleSourceNode =
|
|
35
26
|
std::static_pointer_cast<AudioScheduledSourceNode>(node_);
|
|
@@ -18,10 +18,11 @@ AudioParam::AudioParam(
|
|
|
18
18
|
minValue_(minValue),
|
|
19
19
|
maxValue_(maxValue),
|
|
20
20
|
context_(context),
|
|
21
|
-
audioBus_(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
audioBus_(
|
|
22
|
+
std::make_shared<AudioBus>(
|
|
23
|
+
RENDER_QUANTUM_SIZE,
|
|
24
|
+
1,
|
|
25
|
+
context->getSampleRate())) {
|
|
25
26
|
startTime_ = 0;
|
|
26
27
|
endTime_ = 0;
|
|
27
28
|
startValue_ = value_;
|
|
@@ -119,7 +119,6 @@ std::shared_ptr<AnalyserNode> BaseAudioContext::createAnalyser() {
|
|
|
119
119
|
|
|
120
120
|
std::shared_ptr<AudioBuffer> BaseAudioContext::decodeAudioDataSource(
|
|
121
121
|
const std::string &path) {
|
|
122
|
-
#ifndef AUDIO_API_TEST_SUITE
|
|
123
122
|
auto audioBus = audioDecoder_->decodeWithFilePath(path);
|
|
124
123
|
|
|
125
124
|
if (!audioBus) {
|
|
@@ -127,15 +126,11 @@ std::shared_ptr<AudioBuffer> BaseAudioContext::decodeAudioDataSource(
|
|
|
127
126
|
}
|
|
128
127
|
|
|
129
128
|
return std::make_shared<AudioBuffer>(audioBus);
|
|
130
|
-
#else
|
|
131
|
-
return nullptr;
|
|
132
|
-
#endif // AUDIO_API_TEST_SUITE
|
|
133
129
|
}
|
|
134
130
|
|
|
135
131
|
std::shared_ptr<AudioBuffer> BaseAudioContext::decodeAudioData(
|
|
136
132
|
const void *data,
|
|
137
133
|
size_t size) {
|
|
138
|
-
#ifndef AUDIO_API_TEST_SUITE
|
|
139
134
|
auto audioBus = audioDecoder_->decodeWithMemoryBlock(data, size);
|
|
140
135
|
|
|
141
136
|
if (!audioBus) {
|
|
@@ -143,14 +138,10 @@ std::shared_ptr<AudioBuffer> BaseAudioContext::decodeAudioData(
|
|
|
143
138
|
}
|
|
144
139
|
|
|
145
140
|
return std::make_shared<AudioBuffer>(audioBus);
|
|
146
|
-
#else
|
|
147
|
-
return nullptr;
|
|
148
|
-
#endif // AUDIO_API_TEST_SUITE
|
|
149
141
|
}
|
|
150
142
|
|
|
151
143
|
std::shared_ptr<AudioBuffer> BaseAudioContext::decodeWithPCMInBase64(
|
|
152
144
|
const std::string &data) {
|
|
153
|
-
#ifndef AUDIO_API_TEST_SUITE
|
|
154
145
|
auto audioBus = audioDecoder_->decodeWithPCMInBase64(data);
|
|
155
146
|
|
|
156
147
|
if (!audioBus) {
|
|
@@ -158,7 +149,6 @@ std::shared_ptr<AudioBuffer> BaseAudioContext::decodeWithPCMInBase64(
|
|
|
158
149
|
}
|
|
159
150
|
|
|
160
151
|
return std::make_shared<AudioBuffer>(audioBus);
|
|
161
|
-
#endif // AUDIO_API_TEST_SUITE
|
|
162
152
|
}
|
|
163
153
|
|
|
164
154
|
AudioNodeManager *BaseAudioContext::getNodeManager() {
|
|
@@ -41,17 +41,6 @@ std::shared_ptr<AudioParam> AudioBufferBaseSourceNode::getPlaybackRateParam()
|
|
|
41
41
|
return playbackRateParam_;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
void AudioBufferBaseSourceNode::clearOnPositionChangedCallback() {
|
|
45
|
-
if (onPositionChangedCallbackId_ == 0 || context_ == nullptr ||
|
|
46
|
-
context_->audioEventHandlerRegistry_ == nullptr) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
context_->audioEventHandlerRegistry_->unregisterHandler(
|
|
51
|
-
"positionChanged", onPositionChangedCallbackId_);
|
|
52
|
-
onPositionChangedCallbackId_ = 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
44
|
void AudioBufferBaseSourceNode::setOnPositionChangedCallbackId(
|
|
56
45
|
uint64_t callbackId) {
|
|
57
46
|
onPositionChangedCallbackId_ = callbackId;
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
#include <memory>
|
|
7
7
|
#include <mutex>
|
|
8
|
-
#include <atomic>
|
|
9
8
|
|
|
10
9
|
namespace audioapi {
|
|
11
10
|
|
|
@@ -20,7 +19,6 @@ class AudioBufferBaseSourceNode : public AudioScheduledSourceNode {
|
|
|
20
19
|
[[nodiscard]] std::shared_ptr<AudioParam> getDetuneParam() const;
|
|
21
20
|
[[nodiscard]] std::shared_ptr<AudioParam> getPlaybackRateParam() const;
|
|
22
21
|
|
|
23
|
-
void clearOnPositionChangedCallback();
|
|
24
22
|
void setOnPositionChangedCallbackId(uint64_t callbackId);
|
|
25
23
|
void setOnPositionChangedInterval(int interval);
|
|
26
24
|
[[nodiscard]] int getOnPositionChangedInterval();
|
|
@@ -39,7 +37,7 @@ class AudioBufferBaseSourceNode : public AudioScheduledSourceNode {
|
|
|
39
37
|
// internal helper
|
|
40
38
|
double vReadIndex_;
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
uint64_t onPositionChangedCallbackId_ = 0; // 0 means no callback
|
|
43
41
|
int onPositionChangedInterval_;
|
|
44
42
|
int onPositionChangedTime_ = 0;
|
|
45
43
|
|
|
@@ -54,17 +54,6 @@ bool AudioScheduledSourceNode::isStopScheduled() {
|
|
|
54
54
|
return playbackState_ == PlaybackState::STOP_SCHEDULED;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
void AudioScheduledSourceNode::clearOnEndedCallback() {
|
|
58
|
-
if (onEndedCallbackId_ == 0 || context_ == nullptr ||
|
|
59
|
-
context_->audioEventHandlerRegistry_ == nullptr) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
context_->audioEventHandlerRegistry_->unregisterHandler(
|
|
64
|
-
"ended", onEndedCallbackId_);
|
|
65
|
-
onEndedCallbackId_ = 0;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
57
|
void AudioScheduledSourceNode::setOnEndedCallbackId(const uint64_t callbackId) {
|
|
69
58
|
onEndedCallbackId_ = callbackId;
|
|
70
59
|
}
|
|
@@ -38,7 +38,6 @@ class AudioScheduledSourceNode : public AudioNode {
|
|
|
38
38
|
bool isFinished();
|
|
39
39
|
bool isStopScheduled();
|
|
40
40
|
|
|
41
|
-
void clearOnEndedCallback();
|
|
42
41
|
void setOnEndedCallbackId(uint64_t callbackId);
|
|
43
42
|
|
|
44
43
|
void disable() override;
|
|
@@ -49,7 +48,7 @@ class AudioScheduledSourceNode : public AudioNode {
|
|
|
49
48
|
|
|
50
49
|
PlaybackState playbackState_;
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
uint64_t onEndedCallbackId_ = 0;
|
|
53
52
|
|
|
54
53
|
void updatePlaybackInfo(
|
|
55
54
|
const std::shared_ptr<AudioBus>& processingBus,
|
|
@@ -92,18 +92,8 @@ void AudioEventHandlerRegistry::invokeHandlerWithEventBody(
|
|
|
92
92
|
continue;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
handler->call(*runtime_, eventObject);
|
|
98
|
-
} catch (const std::exception &e) {
|
|
99
|
-
// re-throw the exception to be handled by the caller
|
|
100
|
-
// std::exception is safe to parse by the rn bridge
|
|
101
|
-
throw;
|
|
102
|
-
} catch (...) {
|
|
103
|
-
printf(
|
|
104
|
-
"Unknown exception occurred while invoking handler for event: %s\n",
|
|
105
|
-
eventName.c_str());
|
|
106
|
-
}
|
|
95
|
+
auto eventObject = createEventObject(body);
|
|
96
|
+
handler->call(*runtime_, eventObject);
|
|
107
97
|
}
|
|
108
98
|
});
|
|
109
99
|
}
|
|
@@ -133,26 +123,8 @@ void AudioEventHandlerRegistry::invokeHandlerWithEventBody(
|
|
|
133
123
|
return;
|
|
134
124
|
}
|
|
135
125
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
// side, but it is still processed on the audio thread, leading to a crash
|
|
139
|
-
// when f.e. `positionChanged` event is triggered.
|
|
140
|
-
|
|
141
|
-
// In case of debugging this, please increment the hours spent counter
|
|
142
|
-
|
|
143
|
-
// Hours spent on this: 5
|
|
144
|
-
try {
|
|
145
|
-
auto eventObject = createEventObject(body);
|
|
146
|
-
handlerIt->second->call(*runtime_, eventObject);
|
|
147
|
-
} catch (const std::exception &e) {
|
|
148
|
-
// re-throw the exception to be handled by the caller
|
|
149
|
-
// std::exception is safe to parse by the rn bridge
|
|
150
|
-
throw;
|
|
151
|
-
} catch (...) {
|
|
152
|
-
printf(
|
|
153
|
-
"Unknown exception occurred while invoking handler for event: %s\n",
|
|
154
|
-
eventName.c_str());
|
|
155
|
-
}
|
|
126
|
+
auto eventObject = createEventObject(body);
|
|
127
|
+
handlerIt->second->call(*runtime_, eventObject);
|
|
156
128
|
});
|
|
157
129
|
}
|
|
158
130
|
|
|
@@ -164,19 +136,20 @@ jsi::Object AudioEventHandlerRegistry::createEventObject(
|
|
|
164
136
|
const auto name = pair.first.data();
|
|
165
137
|
const auto &value = pair.second;
|
|
166
138
|
|
|
167
|
-
if (holds_alternative<int>(value)) {
|
|
168
|
-
eventObject.setProperty(*runtime_, name, get<int>(value));
|
|
169
|
-
} else if (holds_alternative<double>(value)) {
|
|
170
|
-
eventObject.setProperty(*runtime_, name, get<double>(value));
|
|
171
|
-
} else if (holds_alternative<float>(value)) {
|
|
172
|
-
eventObject.setProperty(*runtime_, name, get<float>(value));
|
|
173
|
-
} else if (holds_alternative<bool>(value)) {
|
|
174
|
-
eventObject.setProperty(*runtime_, name, get<bool>(value));
|
|
175
|
-
} else if (holds_alternative<std::string>(value)) {
|
|
176
|
-
eventObject.setProperty(*runtime_, name, get<std::string>(value));
|
|
177
|
-
} else if (holds_alternative<std::shared_ptr<jsi::HostObject>>(
|
|
139
|
+
if (std::holds_alternative<int>(value)) {
|
|
140
|
+
eventObject.setProperty(*runtime_, name, std::get<int>(value));
|
|
141
|
+
} else if (std::holds_alternative<double>(value)) {
|
|
142
|
+
eventObject.setProperty(*runtime_, name, std::get<double>(value));
|
|
143
|
+
} else if (std::holds_alternative<float>(value)) {
|
|
144
|
+
eventObject.setProperty(*runtime_, name, std::get<float>(value));
|
|
145
|
+
} else if (std::holds_alternative<bool>(value)) {
|
|
146
|
+
eventObject.setProperty(*runtime_, name, std::get<bool>(value));
|
|
147
|
+
} else if (std::holds_alternative<std::string>(value)) {
|
|
148
|
+
eventObject.setProperty(*runtime_, name, std::get<std::string>(value));
|
|
149
|
+
} else if (std::holds_alternative<std::shared_ptr<jsi::HostObject>>(
|
|
150
|
+
value)) {
|
|
178
151
|
auto hostObject = jsi::Object::createFromHostObject(
|
|
179
|
-
*runtime_, get<std::shared_ptr<jsi::HostObject>>(value));
|
|
152
|
+
*runtime_, std::get<std::shared_ptr<jsi::HostObject>>(value));
|
|
180
153
|
eventObject.setProperty(*runtime_, name, hostObject);
|
|
181
154
|
}
|
|
182
155
|
}
|
|
@@ -7,46 +7,29 @@ set(ROOT ${CMAKE_SOURCE_DIR}/../../../../..)
|
|
|
7
7
|
set(REACT_NATIVE_DIR "${ROOT}/node_modules/react-native")
|
|
8
8
|
set(JSI_DIR "${REACT_NATIVE_DIR}/ReactCommon/jsi")
|
|
9
9
|
|
|
10
|
-
include(CMakePrintHelpers)
|
|
11
|
-
cmake_print_variables(ROOT)
|
|
12
|
-
|
|
13
10
|
include(FetchContent)
|
|
14
11
|
FetchContent_Declare(
|
|
15
12
|
googletest
|
|
16
|
-
URL https://github.com/google/googletest/archive/
|
|
13
|
+
URL https://github.com/google/googletest/archive/3983f67e32fb3e9294487b9d4f9586efa6e5d088.zip
|
|
17
14
|
)
|
|
18
15
|
# For Windows: Prevent overriding the parent project's compiler/linker settings
|
|
19
16
|
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
20
17
|
FetchContent_MakeAvailable(googletest)
|
|
21
18
|
|
|
22
|
-
message(STATUS "Using C++ compiler: ${CMAKE_CXX_COMPILER}")
|
|
23
|
-
|
|
24
19
|
enable_testing()
|
|
25
|
-
add_compile_definitions(AUDIO_API_TEST_SUITE)
|
|
26
20
|
|
|
27
21
|
file(GLOB_RECURSE RNAUDIOAPI_SRC
|
|
28
22
|
CONFIGURE_DEPENDS
|
|
29
|
-
"${ROOT}/
|
|
30
|
-
"${ROOT}/
|
|
31
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/BaseAudioContext.cpp"
|
|
32
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/OfflineAudioContext.cpp"
|
|
33
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/analysis/*.cpp"
|
|
34
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/destinations/*.cpp"
|
|
35
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/effects/*.cpp"
|
|
36
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/inputs/*.cpp"
|
|
37
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/sources/*.cpp"
|
|
38
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/types/*.cpp"
|
|
39
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/core/utils/*.cpp"
|
|
40
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/dsp/*.cpp"
|
|
41
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/utils/*.cpp"
|
|
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"
|
|
42
25
|
)
|
|
43
26
|
|
|
27
|
+
list(REMOVE_ITEM RNAUDIOAPI_SRC "${ROOT}/node_modules/react-native-audio-api/common/cpp/audioapi/core/AudioContext.cpp")
|
|
28
|
+
|
|
44
29
|
file(GLOB_RECURSE RNAUDIOAPI_LIBS
|
|
45
30
|
CONFIGURE_DEPENDS
|
|
46
|
-
"${ROOT}/
|
|
47
|
-
"${ROOT}/
|
|
48
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/libs/pffft/*.c"
|
|
49
|
-
"${ROOT}/packages/react-native-audio-api/common/cpp/audioapi/libs/signalsmith-stretch/*.h"
|
|
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"
|
|
50
33
|
)
|
|
51
34
|
|
|
52
35
|
add_library(rnaudioapi STATIC ${RNAUDIOAPI_SRC})
|
|
@@ -85,8 +85,9 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
|
|
|
85
85
|
return [self.audioSessionManager getDevicePreferredSampleRate];
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
RCT_EXPORT_METHOD(
|
|
89
|
-
|
|
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(
|
|
100
|
-
|
|
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,20 +129,21 @@ RCT_EXPORT_METHOD(observeVolumeChanges : (BOOL)enabled)
|
|
|
127
129
|
[self.notificationManager observeVolumeChanges:(BOOL)enabled];
|
|
128
130
|
}
|
|
129
131
|
|
|
130
|
-
RCT_EXPORT_METHOD(
|
|
131
|
-
|
|
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(
|
|
137
|
-
|
|
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
|
|
|
142
|
-
RCT_EXPORT_METHOD(
|
|
143
|
-
|
|
145
|
+
RCT_EXPORT_METHOD(
|
|
146
|
+
getDevicesInfo : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
144
147
|
{
|
|
145
148
|
[self.audioSessionManager getDevicesInfo:resolve reject:reject];
|
|
146
149
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.6.4-nightly-
|
|
3
|
+
"version": "0.6.4-nightly-c1e4367-20250715",
|
|
4
4
|
"description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
|
|
5
5
|
"bin": {
|
|
6
6
|
"setup-rn-audio-api-web": "./scripts/setup-rn-audio-api-web.js"
|