react-native-audio-api 0.6.2-rc.3 → 0.6.2-rc.5
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/java/com/swmansion/audioapi/AudioAPIModule.kt +1 -0
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -3
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +3 -26
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +1 -1
- package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +6 -5
- package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +32 -1
- package/common/cpp/audioapi/core/AudioParam.cpp +12 -7
- package/common/cpp/audioapi/core/AudioParam.h +1 -0
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +0 -1
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +49 -4
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +12 -0
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +17 -0
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +17 -0
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +5 -0
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +4 -1
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/AudioBufferSourceNode.ts +25 -0
- package/src/interfaces.ts +7 -1
|
@@ -143,32 +143,9 @@ class MediaNotificationManager(
|
|
|
143
143
|
pause = createAction("pause", "Pause", mask, PlaybackStateCompat.ACTION_PAUSE, pause)
|
|
144
144
|
stop = createAction("stop", "Stop", mask, PlaybackStateCompat.ACTION_STOP, stop)
|
|
145
145
|
next = createAction("next", "Next", mask, PlaybackStateCompat.ACTION_SKIP_TO_NEXT, next)
|
|
146
|
-
previous =
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
"Previous",
|
|
150
|
-
mask,
|
|
151
|
-
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS,
|
|
152
|
-
previous,
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
skipForward =
|
|
156
|
-
createAction(
|
|
157
|
-
"skip_forward_10",
|
|
158
|
-
"Skip Forward",
|
|
159
|
-
mask,
|
|
160
|
-
PlaybackStateCompat.ACTION_FAST_FORWARD,
|
|
161
|
-
skipForward,
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
skipBackward =
|
|
165
|
-
createAction(
|
|
166
|
-
"skip_backward_10",
|
|
167
|
-
"Skip Backward",
|
|
168
|
-
mask,
|
|
169
|
-
PlaybackStateCompat.ACTION_REWIND,
|
|
170
|
-
skipBackward,
|
|
171
|
-
)
|
|
146
|
+
previous = createAction("previous", "Previous", mask, PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS, previous)
|
|
147
|
+
skipForward = createAction("skip_forward_10", "Skip Forward", mask, PlaybackStateCompat.ACTION_FAST_FORWARD, skipForward)
|
|
148
|
+
skipBackward = createAction("skip_backward_10", "Skip Backward", mask, PlaybackStateCompat.ACTION_REWIND, skipBackward)
|
|
172
149
|
}
|
|
173
150
|
|
|
174
151
|
private fun createAction(
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
@ReactMethod
|
|
50
50
|
@DoNotStrip
|
|
51
|
-
public abstract void setAudioSessionOptions(String category, String mode, ReadableArray options);
|
|
51
|
+
public abstract void setAudioSessionOptions(String category, String mode, ReadableArray options, boolean allowHaptics);
|
|
52
52
|
|
|
53
53
|
@ReactMethod
|
|
54
54
|
@DoNotStrip
|
|
@@ -71,13 +71,14 @@ class AudioBufferQueueSourceNodeHostObject
|
|
|
71
71
|
auto audioBufferQueueSourceNode =
|
|
72
72
|
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
audioBufferQueueSourceNode->start(when, offset);
|
|
74
|
+
double offset = -1.0;
|
|
75
|
+
|
|
76
|
+
if (args[1].isNumber()) {
|
|
77
|
+
offset = args[1].asNumber();
|
|
79
78
|
}
|
|
80
79
|
|
|
80
|
+
audioBufferQueueSourceNode->start(when, offset);
|
|
81
|
+
|
|
81
82
|
return jsi::Value::undefined();
|
|
82
83
|
}
|
|
83
84
|
|
|
@@ -19,6 +19,7 @@ class AudioBufferSourceNodeHostObject
|
|
|
19
19
|
: AudioScheduledSourceNodeHostObject(node) {
|
|
20
20
|
addGetters(
|
|
21
21
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
|
|
22
23
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
|
|
23
24
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
|
|
24
25
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd),
|
|
@@ -27,9 +28,12 @@ class AudioBufferSourceNodeHostObject
|
|
|
27
28
|
|
|
28
29
|
addSetters(
|
|
29
30
|
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
|
|
31
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopSkip),
|
|
30
32
|
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, buffer),
|
|
31
33
|
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
|
|
32
|
-
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd)
|
|
34
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd),
|
|
35
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, onPositionChanged),
|
|
36
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, onPositionChangedInterval));
|
|
33
37
|
|
|
34
38
|
// start method is overridden in this class
|
|
35
39
|
functions_->erase("start");
|
|
@@ -45,6 +49,13 @@ class AudioBufferSourceNodeHostObject
|
|
|
45
49
|
return {loop};
|
|
46
50
|
}
|
|
47
51
|
|
|
52
|
+
JSI_PROPERTY_GETTER(loopSkip) {
|
|
53
|
+
auto audioBufferSourceNode =
|
|
54
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
55
|
+
auto loopSkip = audioBufferSourceNode->getLoopSkip();
|
|
56
|
+
return {loopSkip};
|
|
57
|
+
}
|
|
58
|
+
|
|
48
59
|
JSI_PROPERTY_GETTER(buffer) {
|
|
49
60
|
auto audioBufferSourceNode =
|
|
50
61
|
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
@@ -95,6 +106,12 @@ class AudioBufferSourceNodeHostObject
|
|
|
95
106
|
audioBufferSourceNode->setLoop(value.getBool());
|
|
96
107
|
}
|
|
97
108
|
|
|
109
|
+
JSI_PROPERTY_SETTER(loopSkip) {
|
|
110
|
+
auto audioBufferSourceNode =
|
|
111
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
112
|
+
audioBufferSourceNode->setLoopSkip(value.getBool());
|
|
113
|
+
}
|
|
114
|
+
|
|
98
115
|
JSI_PROPERTY_SETTER(buffer) {
|
|
99
116
|
auto audioBufferSourceNode =
|
|
100
117
|
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
@@ -120,6 +137,20 @@ class AudioBufferSourceNodeHostObject
|
|
|
120
137
|
audioBufferSourceNode->setLoopEnd(value.getNumber());
|
|
121
138
|
}
|
|
122
139
|
|
|
140
|
+
JSI_PROPERTY_SETTER(onPositionChanged) {
|
|
141
|
+
auto audioBufferSourceNode =
|
|
142
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
143
|
+
|
|
144
|
+
audioBufferSourceNode->setOnPositionChangedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
JSI_PROPERTY_SETTER(onPositionChangedInterval) {
|
|
148
|
+
auto audioBufferSourceNode =
|
|
149
|
+
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
150
|
+
|
|
151
|
+
audioBufferSourceNode->setOnPositionChangedInterval(value.getNumber());
|
|
152
|
+
}
|
|
153
|
+
|
|
123
154
|
JSI_HOST_FUNCTION(start) {
|
|
124
155
|
auto when = args[0].getNumber();
|
|
125
156
|
auto offset = args[1].getNumber();
|
|
@@ -284,15 +284,21 @@ void AudioParam::removeInputNode(AudioNode *node) {
|
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
-
std::shared_ptr<AudioBus> AudioParam::
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
auto processingBus = audioBus_;
|
|
287
|
+
std::shared_ptr<AudioBus> AudioParam::calculateInputs(
|
|
288
|
+
const std::shared_ptr<AudioBus> &processingBus,
|
|
289
|
+
int framesToProcess) {
|
|
291
290
|
processingBus->zero();
|
|
292
291
|
if (!inputNodes_.empty()) {
|
|
293
292
|
processInputs(processingBus, framesToProcess, true);
|
|
294
293
|
mixInputsBuses(processingBus);
|
|
295
294
|
}
|
|
295
|
+
return processingBus;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
std::shared_ptr<AudioBus> AudioParam::processARateParam(
|
|
299
|
+
int framesToProcess,
|
|
300
|
+
double time) {
|
|
301
|
+
auto processingBus = calculateInputs(audioBus_, framesToProcess);
|
|
296
302
|
for (size_t i = 0; i < framesToProcess; i++) {
|
|
297
303
|
auto sample = getValueAtTime(time + i / context_->getSampleRate());
|
|
298
304
|
processingBus->getChannel(0)->getData()[i] += sample;
|
|
@@ -302,9 +308,8 @@ std::shared_ptr<AudioBus> AudioParam::processARateParam(
|
|
|
302
308
|
}
|
|
303
309
|
|
|
304
310
|
float AudioParam::processKRateParam(int framesToProcess, double time) {
|
|
305
|
-
auto processingBus =
|
|
306
|
-
|
|
307
|
-
return processingBus->getChannel(0)->getData()[0];
|
|
311
|
+
auto processingBus = calculateInputs(audioBus_, framesToProcess);
|
|
312
|
+
return processingBus->getChannel(0)->getData()[0] + getValueAtTime(time);
|
|
308
313
|
}
|
|
309
314
|
|
|
310
315
|
double AudioParam::getQueueEndTime() {
|
|
@@ -63,6 +63,7 @@ class AudioParam {
|
|
|
63
63
|
void updateQueue(ParamChangeEvent &event);
|
|
64
64
|
void processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
|
|
65
65
|
void mixInputsBuses(const std::shared_ptr<AudioBus>& processingBus);
|
|
66
|
+
std::shared_ptr<AudioBus> calculateInputs(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess);
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
} // namespace audioapi
|
|
@@ -47,15 +47,12 @@ std::shared_ptr<AudioParam> AudioBufferQueueSourceNode::getPlaybackRateParam()
|
|
|
47
47
|
return playbackRateParam_;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
void AudioBufferQueueSourceNode::start(double when) {
|
|
51
|
-
AudioScheduledSourceNode::start(when);
|
|
52
|
-
isPaused_ = false;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
50
|
void AudioBufferQueueSourceNode::start(double when, double offset) {
|
|
56
|
-
start(when);
|
|
51
|
+
AudioScheduledSourceNode::start(when);
|
|
57
52
|
|
|
58
|
-
|
|
53
|
+
if (offset >= 0.0) {
|
|
54
|
+
vReadIndex_ = static_cast<double>(context_->getSampleRate() * offset);
|
|
55
|
+
}
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
void AudioBufferQueueSourceNode::stop(double when) {
|
|
@@ -23,7 +23,6 @@ class AudioBufferQueueSourceNode : public AudioScheduledSourceNode {
|
|
|
23
23
|
[[nodiscard]] std::shared_ptr<AudioParam> getDetuneParam() const;
|
|
24
24
|
[[nodiscard]] std::shared_ptr<AudioParam> getPlaybackRateParam() const;
|
|
25
25
|
|
|
26
|
-
void start(double when) override;
|
|
27
26
|
void start(double when, double offset);
|
|
28
27
|
void stop(double when) override;
|
|
29
28
|
void pause();
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#include <audioapi/core/sources/AudioBufferSourceNode.h>
|
|
5
5
|
#include <audioapi/core/utils/Locker.h>
|
|
6
6
|
#include <audioapi/dsp/AudioUtils.h>
|
|
7
|
+
#include <audioapi/events/AudioEventHandlerRegistry.h>
|
|
7
8
|
#include <audioapi/utils/AudioArray.h>
|
|
8
9
|
#include <audioapi/utils/AudioBus.h>
|
|
9
10
|
|
|
@@ -46,6 +47,10 @@ bool AudioBufferSourceNode::getLoop() const {
|
|
|
46
47
|
return loop_;
|
|
47
48
|
}
|
|
48
49
|
|
|
50
|
+
bool AudioBufferSourceNode::getLoopSkip() const {
|
|
51
|
+
return loopSkip_;
|
|
52
|
+
}
|
|
53
|
+
|
|
49
54
|
double AudioBufferSourceNode::getLoopStart() const {
|
|
50
55
|
return loopStart_;
|
|
51
56
|
}
|
|
@@ -71,7 +76,14 @@ void AudioBufferSourceNode::setLoop(bool loop) {
|
|
|
71
76
|
loop_ = loop;
|
|
72
77
|
}
|
|
73
78
|
|
|
79
|
+
void AudioBufferSourceNode::setLoopSkip(bool loopSkip) {
|
|
80
|
+
loopSkip_ = loopSkip;
|
|
81
|
+
}
|
|
82
|
+
|
|
74
83
|
void AudioBufferSourceNode::setLoopStart(double loopStart) {
|
|
84
|
+
if (loopSkip_) {
|
|
85
|
+
vReadIndex_ = loopStart * context_->getSampleRate();
|
|
86
|
+
}
|
|
75
87
|
loopStart_ = loopStart;
|
|
76
88
|
}
|
|
77
89
|
|
|
@@ -136,6 +148,30 @@ std::mutex &AudioBufferSourceNode::getBufferLock() {
|
|
|
136
148
|
return bufferLock_;
|
|
137
149
|
}
|
|
138
150
|
|
|
151
|
+
void AudioBufferSourceNode::sendOnPositionChangedEvent() {
|
|
152
|
+
if (onPositionChangedTime_ > onPositionChangedInterval_) {
|
|
153
|
+
std::unordered_map<std::string, EventValue> body = {
|
|
154
|
+
{"value", getStopTime()}};
|
|
155
|
+
|
|
156
|
+
context_->audioEventHandlerRegistry_->invokeHandlerWithEventBody(
|
|
157
|
+
"positionChanged", onPositionChangedCallbackId_, body);
|
|
158
|
+
|
|
159
|
+
onPositionChangedTime_ = 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
onPositionChangedTime_ += RENDER_QUANTUM_SIZE;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
void AudioBufferSourceNode::setOnPositionChangedInterval(int interval) {
|
|
166
|
+
onPositionChangedInterval_ = static_cast<int>(
|
|
167
|
+
context_->getSampleRate() * static_cast<float>(interval) / 1000);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
void AudioBufferSourceNode::setOnPositionChangedCallbackId(
|
|
171
|
+
uint64_t callbackId) {
|
|
172
|
+
onPositionChangedCallbackId_ = callbackId;
|
|
173
|
+
}
|
|
174
|
+
|
|
139
175
|
void AudioBufferSourceNode::processNode(
|
|
140
176
|
const std::shared_ptr<AudioBus> &processingBus,
|
|
141
177
|
int framesToProcess) {
|
|
@@ -153,6 +189,7 @@ void AudioBufferSourceNode::processNode(
|
|
|
153
189
|
}
|
|
154
190
|
|
|
155
191
|
handleStopScheduled();
|
|
192
|
+
sendOnPositionChangedEvent();
|
|
156
193
|
} else {
|
|
157
194
|
processingBus->zero();
|
|
158
195
|
}
|
|
@@ -160,7 +197,7 @@ void AudioBufferSourceNode::processNode(
|
|
|
160
197
|
|
|
161
198
|
double AudioBufferSourceNode::getStopTime() const {
|
|
162
199
|
return dsp::sampleFrameToTime(
|
|
163
|
-
static_cast<int>(vReadIndex_),
|
|
200
|
+
static_cast<int>(vReadIndex_), buffer_->getSampleRate());
|
|
164
201
|
}
|
|
165
202
|
|
|
166
203
|
/**
|
|
@@ -247,8 +284,13 @@ void AudioBufferSourceNode::processWithoutInterpolation(
|
|
|
247
284
|
|
|
248
285
|
size_t framesLeft = offsetLength;
|
|
249
286
|
|
|
250
|
-
if
|
|
251
|
-
|
|
287
|
+
// if we are moving towards loop, we do nothing because we will achieve it
|
|
288
|
+
// otherwise, we wrap to the start of the loop if necessary
|
|
289
|
+
if (loop_ &&
|
|
290
|
+
((readIndex >= frameEnd && direction == 1) ||
|
|
291
|
+
(readIndex < frameStart && direction == -1))) {
|
|
292
|
+
readIndex = frameStart +
|
|
293
|
+
((long long int)readIndex - (long long int)frameStart) % frameDelta;
|
|
252
294
|
}
|
|
253
295
|
|
|
254
296
|
while (framesLeft > 0) {
|
|
@@ -278,7 +320,10 @@ void AudioBufferSourceNode::processWithoutInterpolation(
|
|
|
278
320
|
readIndex += framesToCopy * direction;
|
|
279
321
|
framesLeft -= framesToCopy;
|
|
280
322
|
|
|
281
|
-
if
|
|
323
|
+
// if we are moving towards loop, we do nothing because we will achieve it
|
|
324
|
+
// otherwise, we wrap to the start of the loop if necessary
|
|
325
|
+
if ((readIndex >= frameEnd && direction == 1) ||
|
|
326
|
+
(readIndex < frameStart && direction == -1)) {
|
|
282
327
|
readIndex -= direction * frameDelta;
|
|
283
328
|
|
|
284
329
|
if (!loop_) {
|
|
@@ -20,6 +20,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
|
20
20
|
~AudioBufferSourceNode() override;
|
|
21
21
|
|
|
22
22
|
[[nodiscard]] bool getLoop() const;
|
|
23
|
+
[[nodiscard]] bool getLoopSkip() const;
|
|
23
24
|
[[nodiscard]] double getLoopStart() const;
|
|
24
25
|
[[nodiscard]] double getLoopEnd() const;
|
|
25
26
|
[[nodiscard]] std::shared_ptr<AudioParam> getDetuneParam() const;
|
|
@@ -27,6 +28,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
|
27
28
|
[[nodiscard]] std::shared_ptr<AudioBuffer> getBuffer() const;
|
|
28
29
|
|
|
29
30
|
void setLoop(bool loop);
|
|
31
|
+
void setLoopSkip(bool loopSkip);
|
|
30
32
|
void setLoopStart(double loopStart);
|
|
31
33
|
void setLoopEnd(double loopEnd);
|
|
32
34
|
void setBuffer(const std::shared_ptr<AudioBuffer> &buffer);
|
|
@@ -34,6 +36,10 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
|
34
36
|
void start(double when, double offset, double duration = -1);
|
|
35
37
|
void disable() override;
|
|
36
38
|
|
|
39
|
+
void setOnPositionChangedCallbackId(uint64_t callbackId);
|
|
40
|
+
void setOnPositionChangedInterval(int interval);
|
|
41
|
+
void sendOnPositionChangedEvent();
|
|
42
|
+
|
|
37
43
|
protected:
|
|
38
44
|
std::mutex &getBufferLock();
|
|
39
45
|
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
|
|
@@ -42,6 +48,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
|
42
48
|
private:
|
|
43
49
|
// Looping related properties
|
|
44
50
|
bool loop_;
|
|
51
|
+
bool loopSkip_;
|
|
45
52
|
double loopStart_;
|
|
46
53
|
double loopEnd_;
|
|
47
54
|
std::mutex bufferLock_;
|
|
@@ -63,6 +70,11 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
|
63
70
|
std::shared_ptr<AudioBuffer> buffer_;
|
|
64
71
|
std::shared_ptr<AudioBus> alignedBus_;
|
|
65
72
|
|
|
73
|
+
// positionChanged event props: callbackId, update interval in frames, time since last update in frames
|
|
74
|
+
uint64_t onPositionChangedCallbackId_ = 0;
|
|
75
|
+
int onPositionChangedInterval_;
|
|
76
|
+
int onPositionChangedTime_ = 0;
|
|
77
|
+
|
|
66
78
|
void processWithoutPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
|
|
67
79
|
int framesToProcess);
|
|
68
80
|
|
|
@@ -28,7 +28,7 @@ class AudioScheduledSourceNode : public AudioNode {
|
|
|
28
28
|
enum class PlaybackState { UNSCHEDULED, SCHEDULED, PLAYING, STOP_SCHEDULED, FINISHED };
|
|
29
29
|
explicit AudioScheduledSourceNode(BaseAudioContext *context);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
void start(double when);
|
|
32
32
|
virtual void stop(double when);
|
|
33
33
|
|
|
34
34
|
bool isUnscheduled();
|
|
@@ -29,6 +29,12 @@ class AudioBufferSourceNode extends _AudioScheduledSourceNode.default {
|
|
|
29
29
|
}
|
|
30
30
|
this.node.buffer = buffer.buffer;
|
|
31
31
|
}
|
|
32
|
+
get loopSkip() {
|
|
33
|
+
return this.node.loopSkip;
|
|
34
|
+
}
|
|
35
|
+
set loopSkip(value) {
|
|
36
|
+
this.node.loopSkip = value;
|
|
37
|
+
}
|
|
32
38
|
get loop() {
|
|
33
39
|
return this.node.loop;
|
|
34
40
|
}
|
|
@@ -63,6 +69,17 @@ class AudioBufferSourceNode extends _AudioScheduledSourceNode.default {
|
|
|
63
69
|
this.hasBeenStarted = true;
|
|
64
70
|
this.node.start(when, offset, duration);
|
|
65
71
|
}
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line accessor-pairs
|
|
74
|
+
set onPositionChanged(callback) {
|
|
75
|
+
const subscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
|
|
76
|
+
this.node.onPositionChanged = subscription.subscriptionId;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// eslint-disable-next-line accessor-pairs
|
|
80
|
+
set onPositionChangedInterval(value) {
|
|
81
|
+
this.node.onPositionChangedInterval = value;
|
|
82
|
+
}
|
|
66
83
|
}
|
|
67
84
|
exports.default = AudioBufferSourceNode;
|
|
68
85
|
//# sourceMappingURL=AudioBufferSourceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioScheduledSourceNode","_interopRequireDefault","require","_AudioBuffer","_AudioParam","_errors","e","__esModule","default","AudioBufferSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","buffer","AudioBuffer","
|
|
1
|
+
{"version":3,"names":["_AudioScheduledSourceNode","_interopRequireDefault","require","_AudioBuffer","_AudioParam","_errors","e","__esModule","default","AudioBufferSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","buffer","AudioBuffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","onPositionChanged","callback","subscription","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -24,6 +24,12 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
24
24
|
}
|
|
25
25
|
this.node.buffer = buffer.buffer;
|
|
26
26
|
}
|
|
27
|
+
get loopSkip() {
|
|
28
|
+
return this.node.loopSkip;
|
|
29
|
+
}
|
|
30
|
+
set loopSkip(value) {
|
|
31
|
+
this.node.loopSkip = value;
|
|
32
|
+
}
|
|
27
33
|
get loop() {
|
|
28
34
|
return this.node.loop;
|
|
29
35
|
}
|
|
@@ -58,5 +64,16 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
58
64
|
this.hasBeenStarted = true;
|
|
59
65
|
this.node.start(when, offset, duration);
|
|
60
66
|
}
|
|
67
|
+
|
|
68
|
+
// eslint-disable-next-line accessor-pairs
|
|
69
|
+
set onPositionChanged(callback) {
|
|
70
|
+
const subscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
|
|
71
|
+
this.node.onPositionChanged = subscription.subscriptionId;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// eslint-disable-next-line accessor-pairs
|
|
75
|
+
set onPositionChangedInterval(value) {
|
|
76
|
+
this.node.onPositionChangedInterval = value;
|
|
77
|
+
}
|
|
61
78
|
}
|
|
62
79
|
//# sourceMappingURL=AudioBufferSourceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioParam","InvalidStateError","RangeError","AudioBufferSourceNode","constructor","context","node","detune","playbackRate","buffer","
|
|
1
|
+
{"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioParam","InvalidStateError","RangeError","AudioBufferSourceNode","constructor","context","node","detune","playbackRate","buffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","hasBeenStarted","onPositionChanged","callback","subscription","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,12 +3,15 @@ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
|
3
3
|
import BaseAudioContext from './BaseAudioContext';
|
|
4
4
|
import AudioBuffer from './AudioBuffer';
|
|
5
5
|
import AudioParam from './AudioParam';
|
|
6
|
+
import { EventTypeWithValue } from '../events/types';
|
|
6
7
|
export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
7
8
|
readonly playbackRate: AudioParam;
|
|
8
9
|
readonly detune: AudioParam;
|
|
9
10
|
constructor(context: BaseAudioContext, node: IAudioBufferSourceNode);
|
|
10
11
|
get buffer(): AudioBuffer | null;
|
|
11
12
|
set buffer(buffer: AudioBuffer | null);
|
|
13
|
+
get loopSkip(): boolean;
|
|
14
|
+
set loopSkip(value: boolean);
|
|
12
15
|
get loop(): boolean;
|
|
13
16
|
set loop(value: boolean);
|
|
14
17
|
get loopStart(): number;
|
|
@@ -16,5 +19,7 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
16
19
|
get loopEnd(): number;
|
|
17
20
|
set loopEnd(value: number);
|
|
18
21
|
start(when?: number, offset?: number, duration?: number): void;
|
|
22
|
+
set onPositionChanged(callback: (event: EventTypeWithValue) => void);
|
|
23
|
+
set onPositionChangedInterval(value: number);
|
|
19
24
|
}
|
|
20
25
|
//# sourceMappingURL=AudioBufferSourceNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioBufferSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioBufferSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,wBAAwB;IACzE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB;IAOnE,IAAW,MAAM,IAAI,WAAW,GAAG,IAAI,CAMtC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAO3C;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IAED,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,OAAO,EAE7B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,MAAM,EAEjC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAE/B;IAEM,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA4B3E,IAAW,iBAAiB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,EAQzE;IAGD,IAAW,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAEjD;CACF"}
|
|
@@ -68,11 +68,14 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
|
|
|
68
68
|
export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
|
|
69
69
|
buffer: IAudioBuffer | null;
|
|
70
70
|
loop: boolean;
|
|
71
|
+
loopSkip: boolean;
|
|
71
72
|
loopStart: number;
|
|
72
73
|
loopEnd: number;
|
|
73
74
|
detune: IAudioParam;
|
|
74
75
|
playbackRate: IAudioParam;
|
|
75
|
-
start: (when
|
|
76
|
+
start: (when?: number, offset?: number, duration?: number) => void;
|
|
77
|
+
onPositionChanged: string;
|
|
78
|
+
onPositionChangedInterval: number;
|
|
76
79
|
}
|
|
77
80
|
export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
|
|
78
81
|
detune: IAudioParam;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,gBAAgB,IAAI,eAAe,CAAC;IACpC,UAAU,IAAI,SAAS,CAAC;IACxB,kBAAkB,IAAI,iBAAiB,CAAC;IACxC,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;IAC5C,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,sBAAsB,CAAC;IACzE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;IAC3D,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,YAAY,CAAC;IAClB,kBAAkB,EAAE,CAClB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,oBAAoB,EAAE,OAAO,KAC1B,aAAa,CAAC;IACnB,cAAc,EAAE,MAAM,aAAa,CAAC;IACpC,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,0BAA0B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEtD,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,GAAG,WAAW,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IAEvB,oBAAoB,CAClB,cAAc,EAAE,YAAY,EAC5B,iBAAiB,EAAE,YAAY,EAC/B,mBAAmB,EAAE,YAAY,GAChC,IAAI,CAAC;CACT;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;CAAG;AAE5D,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC3D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAG7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,yBAAyB;IAChE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IAErB,eAAe,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAE1B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.6.2-rc.
|
|
3
|
+
"version": "0.6.2-rc.5",
|
|
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"
|
|
@@ -4,6 +4,7 @@ import BaseAudioContext from './BaseAudioContext';
|
|
|
4
4
|
import AudioBuffer from './AudioBuffer';
|
|
5
5
|
import AudioParam from './AudioParam';
|
|
6
6
|
import { InvalidStateError, RangeError } from '../errors';
|
|
7
|
+
import { EventTypeWithValue } from '../events/types';
|
|
7
8
|
|
|
8
9
|
export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
9
10
|
readonly playbackRate: AudioParam;
|
|
@@ -33,6 +34,14 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
33
34
|
(this.node as IAudioBufferSourceNode).buffer = buffer.buffer;
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
public get loopSkip(): boolean {
|
|
38
|
+
return (this.node as IAudioBufferSourceNode).loopSkip;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public set loopSkip(value: boolean) {
|
|
42
|
+
(this.node as IAudioBufferSourceNode).loopSkip = value;
|
|
43
|
+
}
|
|
44
|
+
|
|
36
45
|
public get loop(): boolean {
|
|
37
46
|
return (this.node as IAudioBufferSourceNode).loop;
|
|
38
47
|
}
|
|
@@ -83,4 +92,20 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
83
92
|
this.hasBeenStarted = true;
|
|
84
93
|
(this.node as IAudioBufferSourceNode).start(when, offset, duration);
|
|
85
94
|
}
|
|
95
|
+
|
|
96
|
+
// eslint-disable-next-line accessor-pairs
|
|
97
|
+
public set onPositionChanged(callback: (event: EventTypeWithValue) => void) {
|
|
98
|
+
const subscription = this.audioEventEmitter.addAudioEventListener(
|
|
99
|
+
'positionChanged',
|
|
100
|
+
callback
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
(this.node as IAudioBufferSourceNode).onPositionChanged =
|
|
104
|
+
subscription.subscriptionId;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// eslint-disable-next-line accessor-pairs
|
|
108
|
+
public set onPositionChangedInterval(value: number) {
|
|
109
|
+
(this.node as IAudioBufferSourceNode).onPositionChangedInterval = value;
|
|
110
|
+
}
|
|
86
111
|
}
|
package/src/interfaces.ts
CHANGED
|
@@ -103,12 +103,18 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
|
|
|
103
103
|
export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
|
|
104
104
|
buffer: IAudioBuffer | null;
|
|
105
105
|
loop: boolean;
|
|
106
|
+
loopSkip: boolean;
|
|
106
107
|
loopStart: number;
|
|
107
108
|
loopEnd: number;
|
|
108
109
|
detune: IAudioParam;
|
|
109
110
|
playbackRate: IAudioParam;
|
|
110
111
|
|
|
111
|
-
start: (when
|
|
112
|
+
start: (when?: number, offset?: number, duration?: number) => void;
|
|
113
|
+
|
|
114
|
+
// passing subscriptionId(uint_64 in cpp, string in js) to the cpp
|
|
115
|
+
onPositionChanged: string;
|
|
116
|
+
// set how often the onPositionChanged event is called
|
|
117
|
+
onPositionChangedInterval: number;
|
|
112
118
|
}
|
|
113
119
|
|
|
114
120
|
export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
|