react-native-audio-api 0.6.1-rc.2 → 0.6.1-rc.4
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/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +21 -3
- package/common/cpp/audioapi/core/BaseAudioContext.h +1 -3
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +54 -4
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +12 -2
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +1 -1
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +2 -2
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +3 -4
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +13 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +13 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +4 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +4 -3
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +8 -2
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +3 -1
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/AudioBufferQueueSourceNode.ts +22 -0
- package/src/core/AudioScheduledSourceNode.ts +3 -3
- package/src/events/types.ts +9 -2
- package/src/interfaces.ts +10 -1
|
@@ -21,6 +21,10 @@ class AudioBufferQueueSourceNodeHostObject
|
|
|
21
21
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferQueueSourceNodeHostObject, detune),
|
|
22
22
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferQueueSourceNodeHostObject, playbackRate));
|
|
23
23
|
|
|
24
|
+
addSetters(
|
|
25
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onPositionChanged),
|
|
26
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onPositionChangedInterval));
|
|
27
|
+
|
|
24
28
|
// start method is overridden in this class
|
|
25
29
|
functions_->erase("start");
|
|
26
30
|
|
|
@@ -46,6 +50,20 @@ class AudioBufferQueueSourceNodeHostObject
|
|
|
46
50
|
return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
|
|
47
51
|
}
|
|
48
52
|
|
|
53
|
+
JSI_PROPERTY_SETTER(onPositionChanged) {
|
|
54
|
+
auto audioBufferQueueSourceNode =
|
|
55
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
56
|
+
|
|
57
|
+
audioBufferQueueSourceNode->setOnPositionChangedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
JSI_PROPERTY_SETTER(onPositionChangedInterval) {
|
|
61
|
+
auto audioBufferQueueSourceNode =
|
|
62
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
63
|
+
|
|
64
|
+
audioBufferQueueSourceNode->setOnPositionChangedInterval(value.getNumber());
|
|
65
|
+
}
|
|
66
|
+
|
|
49
67
|
JSI_HOST_FUNCTION(start) {
|
|
50
68
|
auto when = args[0].getNumber();
|
|
51
69
|
auto offset = args[1].getNumber();
|
|
@@ -64,10 +82,10 @@ class AudioBufferQueueSourceNodeHostObject
|
|
|
64
82
|
|
|
65
83
|
auto audioBufferHostObject =
|
|
66
84
|
args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
85
|
+
int bufferId = args[1].asNumber();
|
|
86
|
+
auto isLastBuffer = args[2].asBool();
|
|
67
87
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
audioBufferQueueSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_, isLastBuffer);
|
|
88
|
+
audioBufferQueueSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_, bufferId, isLastBuffer);
|
|
71
89
|
|
|
72
90
|
return jsi::Value::undefined();
|
|
73
91
|
}
|
|
@@ -81,9 +81,7 @@ class BaseAudioContext {
|
|
|
81
81
|
std::shared_ptr<PeriodicWave> cachedSawtoothWave_ = nullptr;
|
|
82
82
|
std::shared_ptr<PeriodicWave> cachedTriangleWave_ = nullptr;
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
friend class AudioScheduledSourceNode;
|
|
86
|
-
|
|
84
|
+
public:
|
|
87
85
|
std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
|
|
88
86
|
};
|
|
89
87
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#include <audioapi/core/sources/AudioBufferQueueSourceNode.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
|
|
|
@@ -26,6 +27,8 @@ AudioBufferQueueSourceNode::AudioBufferQueueSourceNode(
|
|
|
26
27
|
std::make_shared<signalsmith::stretch::SignalsmithStretch<float>>();
|
|
27
28
|
stretch_->presetDefault(channelCount_, context_->getSampleRate(), true);
|
|
28
29
|
|
|
30
|
+
onPositionChangedInterval_ = static_cast<int>(context_->getSampleRate() / 10);
|
|
31
|
+
|
|
29
32
|
isInitialized_ = true;
|
|
30
33
|
}
|
|
31
34
|
|
|
@@ -52,15 +55,29 @@ void AudioBufferQueueSourceNode::start(double when, double offset) {
|
|
|
52
55
|
|
|
53
56
|
void AudioBufferQueueSourceNode::enqueueBuffer(
|
|
54
57
|
const std::shared_ptr<AudioBuffer> &buffer,
|
|
58
|
+
int bufferId,
|
|
55
59
|
bool isLastBuffer) {
|
|
56
60
|
auto locker = Locker(getBufferLock());
|
|
57
|
-
buffers_.
|
|
61
|
+
buffers_.emplace(bufferId, buffer);
|
|
58
62
|
|
|
59
63
|
isLastBuffer_ = isLastBuffer;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
void AudioBufferQueueSourceNode::disable() {
|
|
63
|
-
|
|
67
|
+
audioapi::AudioNode::disable();
|
|
68
|
+
|
|
69
|
+
std::string state = "stopped";
|
|
70
|
+
|
|
71
|
+
// if it has not been stopped, it is ended
|
|
72
|
+
if (stopTime_ < 0) {
|
|
73
|
+
state = "ended";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
std::unordered_map<std::string, EventValue> body = {
|
|
77
|
+
{"value", getStopTime()}, {"state", state}, {"bufferId", bufferId_}};
|
|
78
|
+
|
|
79
|
+
context_->audioEventHandlerRegistry_->invokeHandlerWithEventBody(
|
|
80
|
+
"ended", onEndedCallbackId_, body);
|
|
64
81
|
buffers_ = {};
|
|
65
82
|
}
|
|
66
83
|
|
|
@@ -91,6 +108,30 @@ double AudioBufferQueueSourceNode::getStopTime() const {
|
|
|
91
108
|
static_cast<int>(vReadIndex_), context_->getSampleRate());
|
|
92
109
|
}
|
|
93
110
|
|
|
111
|
+
void AudioBufferQueueSourceNode::setOnPositionChangedCallbackId(
|
|
112
|
+
uint64_t callbackId) {
|
|
113
|
+
onPositionChangedCallbackId_ = callbackId;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
void AudioBufferQueueSourceNode::sendOnPositionChangedEvent() {
|
|
117
|
+
if (onPositionChangedTime_ > onPositionChangedInterval_) {
|
|
118
|
+
std::unordered_map<std::string, EventValue> body = {
|
|
119
|
+
{"value", getStopTime()}, {"bufferId", bufferId_}};
|
|
120
|
+
|
|
121
|
+
context_->audioEventHandlerRegistry_->invokeHandlerWithEventBody(
|
|
122
|
+
"positionChanged", onPositionChangedCallbackId_, body);
|
|
123
|
+
|
|
124
|
+
onPositionChangedTime_ = 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
onPositionChangedTime_ += RENDER_QUANTUM_SIZE;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
void AudioBufferQueueSourceNode::setOnPositionChangedInterval(int interval) {
|
|
131
|
+
onPositionChangedInterval_ = static_cast<int>(
|
|
132
|
+
context_->getSampleRate() * static_cast<float>(interval) / 1000);
|
|
133
|
+
}
|
|
134
|
+
|
|
94
135
|
/**
|
|
95
136
|
* Helper functions
|
|
96
137
|
*/
|
|
@@ -118,6 +159,9 @@ void AudioBufferQueueSourceNode::processWithPitchCorrection(
|
|
|
118
159
|
return;
|
|
119
160
|
}
|
|
120
161
|
|
|
162
|
+
// Send position changed event
|
|
163
|
+
sendOnPositionChangedEvent();
|
|
164
|
+
|
|
121
165
|
auto framesNeededToStretch =
|
|
122
166
|
static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
|
|
123
167
|
auto stretchedStartOffset =
|
|
@@ -146,7 +190,10 @@ void AudioBufferQueueSourceNode::processWithoutInterpolation(
|
|
|
146
190
|
auto readIndex = static_cast<size_t>(vReadIndex_);
|
|
147
191
|
size_t writeIndex = startOffset;
|
|
148
192
|
|
|
149
|
-
auto
|
|
193
|
+
auto queueData = buffers_.front();
|
|
194
|
+
bufferId_ = queueData.first;
|
|
195
|
+
auto buffer = queueData.second;
|
|
196
|
+
|
|
150
197
|
size_t framesLeft = offsetLength;
|
|
151
198
|
|
|
152
199
|
while (framesLeft > 0) {
|
|
@@ -177,7 +224,10 @@ void AudioBufferQueueSourceNode::processWithoutInterpolation(
|
|
|
177
224
|
}
|
|
178
225
|
break;
|
|
179
226
|
} else {
|
|
180
|
-
|
|
227
|
+
queueData = buffers_.front();
|
|
228
|
+
bufferId_ = queueData.first;
|
|
229
|
+
buffer = queueData.second;
|
|
230
|
+
|
|
181
231
|
readIndex = 0;
|
|
182
232
|
}
|
|
183
233
|
}
|
|
@@ -24,9 +24,13 @@ class AudioBufferQueueSourceNode : public AudioScheduledSourceNode {
|
|
|
24
24
|
[[nodiscard]] std::shared_ptr<AudioParam> getPlaybackRateParam() const;
|
|
25
25
|
|
|
26
26
|
void start(double when, double offset);
|
|
27
|
-
void enqueueBuffer(const std::shared_ptr<AudioBuffer> &buffer, bool isLastBuffer);
|
|
27
|
+
void enqueueBuffer(const std::shared_ptr<AudioBuffer> &buffer, int bufferId, bool isLastBuffer);
|
|
28
28
|
void disable() override;
|
|
29
29
|
|
|
30
|
+
void setOnPositionChangedCallbackId(uint64_t callbackId);
|
|
31
|
+
void setOnPositionChangedInterval(int interval);
|
|
32
|
+
void sendOnPositionChangedEvent();
|
|
33
|
+
|
|
30
34
|
protected:
|
|
31
35
|
std::mutex &getBufferLock();
|
|
32
36
|
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
|
|
@@ -47,9 +51,15 @@ class AudioBufferQueueSourceNode : public AudioScheduledSourceNode {
|
|
|
47
51
|
double vReadIndex_;
|
|
48
52
|
|
|
49
53
|
// User provided buffers
|
|
50
|
-
std::queue<std::shared_ptr<AudioBuffer
|
|
54
|
+
std::queue<std::pair<int, std::shared_ptr<AudioBuffer>>> buffers_;
|
|
55
|
+
int bufferId_ = 0;
|
|
51
56
|
bool isLastBuffer_ = false;
|
|
52
57
|
|
|
58
|
+
// positionChanged event props: callbackId, update interval in frames, time since last update in frames
|
|
59
|
+
uint64_t onPositionChangedCallbackId_ = 0;
|
|
60
|
+
int onPositionChangedInterval_;
|
|
61
|
+
int onPositionChangedTime_ = 0;
|
|
62
|
+
|
|
53
63
|
void processWithPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
|
|
54
64
|
int framesToProcess);
|
|
55
65
|
|
|
@@ -17,7 +17,7 @@ class AudioParam;
|
|
|
17
17
|
class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
18
18
|
public:
|
|
19
19
|
explicit AudioBufferSourceNode(BaseAudioContext *context, bool pitchCorrection);
|
|
20
|
-
~AudioBufferSourceNode();
|
|
20
|
+
~AudioBufferSourceNode() override;
|
|
21
21
|
|
|
22
22
|
[[nodiscard]] bool getLoop() const;
|
|
23
23
|
[[nodiscard]] double getLoopStart() const;
|
|
@@ -10,9 +10,9 @@ namespace audioapi {
|
|
|
10
10
|
|
|
11
11
|
AudioScheduledSourceNode::AudioScheduledSourceNode(BaseAudioContext *context)
|
|
12
12
|
: AudioNode(context),
|
|
13
|
-
playbackState_(PlaybackState::UNSCHEDULED),
|
|
14
13
|
startTime_(-1.0),
|
|
15
|
-
stopTime_(-1.0)
|
|
14
|
+
stopTime_(-1.0),
|
|
15
|
+
playbackState_(PlaybackState::UNSCHEDULED) {
|
|
16
16
|
numberOfInputs_ = 0;
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -43,6 +43,9 @@ class AudioScheduledSourceNode : public AudioNode {
|
|
|
43
43
|
void disable() override;
|
|
44
44
|
|
|
45
45
|
protected:
|
|
46
|
+
double startTime_;
|
|
47
|
+
double stopTime_;
|
|
48
|
+
|
|
46
49
|
PlaybackState playbackState_;
|
|
47
50
|
|
|
48
51
|
void updatePlaybackInfo(
|
|
@@ -53,10 +56,6 @@ class AudioScheduledSourceNode : public AudioNode {
|
|
|
53
56
|
|
|
54
57
|
void handleStopScheduled();
|
|
55
58
|
|
|
56
|
-
private:
|
|
57
|
-
double startTime_;
|
|
58
|
-
double stopTime_;
|
|
59
|
-
|
|
60
59
|
uint64_t onEndedCallbackId_ = 0;
|
|
61
60
|
};
|
|
62
61
|
|
|
@@ -49,9 +49,10 @@ class AudioEventHandlerRegistry {
|
|
|
49
49
|
"volumeChange",
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
static constexpr std::array<std::string_view,
|
|
52
|
+
static constexpr std::array<std::string_view, 5> AUDIO_API_EVENT_NAMES = {
|
|
53
53
|
"ended",
|
|
54
54
|
"audioReady",
|
|
55
|
+
"positionChanged",
|
|
55
56
|
"audioError",
|
|
56
57
|
"systemStateChanged"
|
|
57
58
|
};
|
|
@@ -14,8 +14,8 @@ class AudioBufferQueueSourceNode extends _AudioScheduledSourceNode.default {
|
|
|
14
14
|
this.detune = new _AudioParam.default(node.detune, context);
|
|
15
15
|
this.playbackRate = new _AudioParam.default(node.playbackRate, context);
|
|
16
16
|
}
|
|
17
|
-
enqueueBuffer(buffer, isLastBuffer = false) {
|
|
18
|
-
this.node.enqueueBuffer(buffer.buffer, isLastBuffer);
|
|
17
|
+
enqueueBuffer(buffer, bufferId = 0, isLastBuffer = false) {
|
|
18
|
+
this.node.enqueueBuffer(buffer.buffer, bufferId, isLastBuffer);
|
|
19
19
|
}
|
|
20
20
|
start(when = 0, offset = 0) {
|
|
21
21
|
if (when < 0) {
|
|
@@ -30,6 +30,17 @@ class AudioBufferQueueSourceNode extends _AudioScheduledSourceNode.default {
|
|
|
30
30
|
this.hasBeenStarted = true;
|
|
31
31
|
this.node.start(when, offset);
|
|
32
32
|
}
|
|
33
|
+
|
|
34
|
+
// eslint-disable-next-line accessor-pairs
|
|
35
|
+
set onPositionChanged(callback) {
|
|
36
|
+
const subscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
|
|
37
|
+
this.node.onPositionChanged = subscription.subscriptionId;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// eslint-disable-next-line accessor-pairs
|
|
41
|
+
set onPositionChangedInterval(value) {
|
|
42
|
+
this.node.onPositionChangedInterval = value;
|
|
43
|
+
}
|
|
33
44
|
}
|
|
34
45
|
exports.default = AudioBufferQueueSourceNode;
|
|
35
46
|
//# sourceMappingURL=AudioBufferQueueSourceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioScheduledSourceNode","_interopRequireDefault","require","_AudioParam","_errors","e","__esModule","default","AudioBufferQueueSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","enqueueBuffer","buffer","isLastBuffer","start","when","offset","RangeError","hasBeenStarted","InvalidStateError","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferQueueSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,yBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,WAAA,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;
|
|
1
|
+
{"version":3,"names":["_AudioScheduledSourceNode","_interopRequireDefault","require","_AudioParam","_errors","e","__esModule","default","AudioBufferQueueSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","enqueueBuffer","buffer","bufferId","isLastBuffer","start","when","offset","RangeError","hasBeenStarted","InvalidStateError","onPositionChanged","callback","subscription","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval","value","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferQueueSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,yBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,WAAA,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;AAG3C,MAAMG,0BAA0B,SAASC,iCAAwB,CAAC;EAI/EC,WAAWA,CAACC,OAAyB,EAAEC,IAAiC,EAAE;IACxE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIC,mBAAU,CAACF,IAAI,CAACC,MAAM,EAAEF,OAAO,CAAC;IAClD,IAAI,CAACI,YAAY,GAAG,IAAID,mBAAU,CAACF,IAAI,CAACG,YAAY,EAAEJ,OAAO,CAAC;EAChE;EAEOK,aAAaA,CAClBC,MAAmB,EACnBC,QAAgB,GAAG,CAAC,EACpBC,YAAqB,GAAG,KAAK,EACvB;IACL,IAAI,CAACP,IAAI,CAAiCI,aAAa,CACtDC,MAAM,CAACA,MAAM,EACbC,QAAQ,EACRC,YACF,CAAC;EACH;EAEOC,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAQ;IACvD,IAAID,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIE,kBAAU,CAClB,8CAA8CF,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIC,kBAAU,CAClB,gDAAgDD,MAAM,EACxD,CAAC;IACH;IAEA,IAAI,IAAI,CAACE,cAAc,EAAE;MACvB,MAAM,IAAIC,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACD,cAAc,GAAG,IAAI;IACzB,IAAI,CAACZ,IAAI,CAAiCQ,KAAK,CAACC,IAAI,EAAEC,MAAM,CAAC;EAChE;;EAEA;EACA,IAAWI,iBAAiBA,CAC1BC,QAAqD,EACrD;IACA,MAAMC,YAAY,GAAG,IAAI,CAACC,iBAAiB,CAACC,qBAAqB,CAC/D,iBAAiB,EACjBH,QACF,CAAC;IAEA,IAAI,CAACf,IAAI,CAAiCc,iBAAiB,GAC1DE,YAAY,CAACG,cAAc;EAC/B;;EAEA;EACA,IAAWC,yBAAyBA,CAACC,KAAa,EAAE;IACjD,IAAI,CAACrB,IAAI,CAAiCoB,yBAAyB,GAClEC,KAAK;EACT;AACF;AAACC,OAAA,CAAA3B,OAAA,GAAAC,0BAAA","ignoreList":[]}
|
|
@@ -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","callback","subscription","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;AAA8C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE/B,MAAMG,wBAAwB,SAASC,kBAAS,CAAC;EACpDC,cAAc,GAAY,KAAK;
|
|
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","callback","subscription","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;AAA8C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE/B,MAAMG,wBAAwB,SAASC,kBAAS,CAAC;EACpDC,cAAc,GAAY,KAAK;EACtBC,iBAAiB,GAAG,IAAIC,yBAAiB,CAC1DC,MAAM,CAACD,iBACT,CAAC;EAEME,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;EACA,IAAWK,OAAOA,CAACC,QAA2C,EAAE;IAC9D,MAAMC,YAAY,GAAG,IAAI,CAACX,iBAAiB,CAACY,qBAAqB,CAC/D,OAAO,EACPF,QACF,CAAC;IAEA,IAAI,CAACH,IAAI,CAA+BE,OAAO,GAC9CE,YAAY,CAACE,cAAc;EAC/B;AACF;AAACC,OAAA,CAAAlB,OAAA,GAAAC,wBAAA","ignoreList":[]}
|
|
@@ -9,8 +9,8 @@ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode
|
|
|
9
9
|
this.detune = new AudioParam(node.detune, context);
|
|
10
10
|
this.playbackRate = new AudioParam(node.playbackRate, context);
|
|
11
11
|
}
|
|
12
|
-
enqueueBuffer(buffer, isLastBuffer = false) {
|
|
13
|
-
this.node.enqueueBuffer(buffer.buffer, isLastBuffer);
|
|
12
|
+
enqueueBuffer(buffer, bufferId = 0, isLastBuffer = false) {
|
|
13
|
+
this.node.enqueueBuffer(buffer.buffer, bufferId, isLastBuffer);
|
|
14
14
|
}
|
|
15
15
|
start(when = 0, offset = 0) {
|
|
16
16
|
if (when < 0) {
|
|
@@ -25,5 +25,16 @@ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode
|
|
|
25
25
|
this.hasBeenStarted = true;
|
|
26
26
|
this.node.start(when, offset);
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
// eslint-disable-next-line accessor-pairs
|
|
30
|
+
set onPositionChanged(callback) {
|
|
31
|
+
const subscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
|
|
32
|
+
this.node.onPositionChanged = subscription.subscriptionId;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// eslint-disable-next-line accessor-pairs
|
|
36
|
+
set onPositionChangedInterval(value) {
|
|
37
|
+
this.node.onPositionChangedInterval = value;
|
|
38
|
+
}
|
|
28
39
|
}
|
|
29
40
|
//# sourceMappingURL=AudioBufferQueueSourceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioScheduledSourceNode","AudioParam","InvalidStateError","RangeError","AudioBufferQueueSourceNode","constructor","context","node","detune","playbackRate","enqueueBuffer","buffer","isLastBuffer","start","when","offset","hasBeenStarted"],"sourceRoot":"../../../src","sources":["core/AudioBufferQueueSourceNode.ts"],"mappings":";;AACA,OAAOA,wBAAwB,MAAM,+BAA4B;AAGjE,OAAOC,UAAU,MAAM,iBAAc;AACrC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;
|
|
1
|
+
{"version":3,"names":["AudioScheduledSourceNode","AudioParam","InvalidStateError","RangeError","AudioBufferQueueSourceNode","constructor","context","node","detune","playbackRate","enqueueBuffer","buffer","bufferId","isLastBuffer","start","when","offset","hasBeenStarted","onPositionChanged","callback","subscription","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval","value"],"sourceRoot":"../../../src","sources":["core/AudioBufferQueueSourceNode.ts"],"mappings":";;AACA,OAAOA,wBAAwB,MAAM,+BAA4B;AAGjE,OAAOC,UAAU,MAAM,iBAAc;AACrC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAGzD,eAAe,MAAMC,0BAA0B,SAASJ,wBAAwB,CAAC;EAI/EK,WAAWA,CAACC,OAAyB,EAAEC,IAAiC,EAAE;IACxE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIP,UAAU,CAACM,IAAI,CAACC,MAAM,EAAEF,OAAO,CAAC;IAClD,IAAI,CAACG,YAAY,GAAG,IAAIR,UAAU,CAACM,IAAI,CAACE,YAAY,EAAEH,OAAO,CAAC;EAChE;EAEOI,aAAaA,CAClBC,MAAmB,EACnBC,QAAgB,GAAG,CAAC,EACpBC,YAAqB,GAAG,KAAK,EACvB;IACL,IAAI,CAACN,IAAI,CAAiCG,aAAa,CACtDC,MAAM,CAACA,MAAM,EACbC,QAAQ,EACRC,YACF,CAAC;EACH;EAEOC,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAQ;IACvD,IAAID,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIZ,UAAU,CAClB,8CAA8CY,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIb,UAAU,CAClB,gDAAgDa,MAAM,EACxD,CAAC;IACH;IAEA,IAAI,IAAI,CAACC,cAAc,EAAE;MACvB,MAAM,IAAIf,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACe,cAAc,GAAG,IAAI;IACzB,IAAI,CAACV,IAAI,CAAiCO,KAAK,CAACC,IAAI,EAAEC,MAAM,CAAC;EAChE;;EAEA;EACA,IAAWE,iBAAiBA,CAC1BC,QAAqD,EACrD;IACA,MAAMC,YAAY,GAAG,IAAI,CAACC,iBAAiB,CAACC,qBAAqB,CAC/D,iBAAiB,EACjBH,QACF,CAAC;IAEA,IAAI,CAACZ,IAAI,CAAiCW,iBAAiB,GAC1DE,YAAY,CAACG,cAAc;EAC/B;;EAEA;EACA,IAAWC,yBAAyBA,CAACC,KAAa,EAAE;IACjD,IAAI,CAAClB,IAAI,CAAiCiB,yBAAyB,GAClEC,KAAK;EACT;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioNode","InvalidStateError","RangeError","AudioEventEmitter","AudioScheduledSourceNode","hasBeenStarted","audioEventEmitter","global","start","when","node","stop","onended","callback","subscription","addAudioEventListener","subscriptionId"],"sourceRoot":"../../../src","sources":["core/AudioScheduledSourceNode.ts"],"mappings":";;AACA,OAAOA,SAAS,MAAM,gBAAa;AACnC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAEzD,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,wBAAwB,SAASJ,SAAS,CAAC;EACpDK,cAAc,GAAY,KAAK;
|
|
1
|
+
{"version":3,"names":["AudioNode","InvalidStateError","RangeError","AudioEventEmitter","AudioScheduledSourceNode","hasBeenStarted","audioEventEmitter","global","start","when","node","stop","onended","callback","subscription","addAudioEventListener","subscriptionId"],"sourceRoot":"../../../src","sources":["core/AudioScheduledSourceNode.ts"],"mappings":";;AACA,OAAOA,SAAS,MAAM,gBAAa;AACnC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAEzD,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,wBAAwB,SAASJ,SAAS,CAAC;EACpDK,cAAc,GAAY,KAAK;EACtBC,iBAAiB,GAAG,IAAIH,iBAAiB,CAC1DI,MAAM,CAACJ,iBACT,CAAC;EAEMK,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAQ;IACnC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIP,UAAU,CAClB,8CAA8CO,IAAI,EACpD,CAAC;IACH;IAEA,IAAI,IAAI,CAACJ,cAAc,EAAE;MACvB,MAAM,IAAIJ,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACI,cAAc,GAAG,IAAI;IACzB,IAAI,CAACK,IAAI,CAA+BF,KAAK,CAACC,IAAI,CAAC;EACtD;EAEOE,IAAIA,CAACF,IAAY,GAAG,CAAC,EAAQ;IAClC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIP,UAAU,CAClB,8CAA8CO,IAAI,EACpD,CAAC;IACH;IAEA,IAAI,CAAC,IAAI,CAACJ,cAAc,EAAE;MACxB,MAAM,IAAIJ,iBAAiB,CACzB,8CACF,CAAC;IACH;IAEC,IAAI,CAACS,IAAI,CAA+BC,IAAI,CAACF,IAAI,CAAC;EACrD;;EAEA;EACA,IAAWG,OAAOA,CAACC,QAA2C,EAAE;IAC9D,MAAMC,YAAY,GAAG,IAAI,CAACR,iBAAiB,CAACS,qBAAqB,CAC/D,OAAO,EACPF,QACF,CAAC;IAEA,IAAI,CAACH,IAAI,CAA+BE,OAAO,GAC9CE,YAAY,CAACE,cAAc;EAC/B;AACF","ignoreList":[]}
|
|
@@ -3,11 +3,14 @@ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
|
3
3
|
import BaseAudioContext from './BaseAudioContext';
|
|
4
4
|
import AudioBuffer from './AudioBuffer';
|
|
5
5
|
import AudioParam from './AudioParam';
|
|
6
|
+
import { OnPositionChangedEventType } from '../events/types';
|
|
6
7
|
export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
|
|
7
8
|
readonly playbackRate: AudioParam;
|
|
8
9
|
readonly detune: AudioParam;
|
|
9
10
|
constructor(context: BaseAudioContext, node: IAudioBufferQueueSourceNode);
|
|
10
|
-
enqueueBuffer(buffer: AudioBuffer, isLastBuffer?: boolean): void;
|
|
11
|
+
enqueueBuffer(buffer: AudioBuffer, bufferId?: number, isLastBuffer?: boolean): void;
|
|
11
12
|
start(when?: number, offset?: number): void;
|
|
13
|
+
set onPositionChanged(callback: (event: OnPositionChangedEventType) => void);
|
|
14
|
+
set onPositionChangedInterval(value: number);
|
|
12
15
|
}
|
|
13
16
|
//# sourceMappingURL=AudioBufferQueueSourceNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioBufferQueueSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferQueueSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,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":"AudioBufferQueueSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferQueueSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,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,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,wBAAwB;IAC9E,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,2BAA2B;IAOjE,aAAa,CAClB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,MAAU,EACpB,YAAY,GAAE,OAAe,GAC5B,IAAI;IAQA,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;IAsBxD,IAAW,iBAAiB,CAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,EAStD;IAGD,IAAW,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAGjD;CACF"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
-
import {
|
|
2
|
+
import { OnEndedEventType } from '../events/types';
|
|
3
|
+
import { AudioEventEmitter } from '../events';
|
|
3
4
|
export default class AudioScheduledSourceNode extends AudioNode {
|
|
4
5
|
protected hasBeenStarted: boolean;
|
|
5
|
-
|
|
6
|
+
protected readonly audioEventEmitter: AudioEventEmitter;
|
|
6
7
|
start(when?: number): void;
|
|
7
8
|
stop(when?: number): void;
|
|
8
|
-
set onended(callback: (event:
|
|
9
|
+
set onended(callback: (event: OnEndedEventType) => void);
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=AudioScheduledSourceNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioScheduledSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioScheduledSourceNode.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"AudioScheduledSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioScheduledSourceNode.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC7D,SAAS,CAAC,cAAc,EAAE,OAAO,CAAS;IAC1C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,oBAElC;IAEK,KAAK,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAe7B,IAAI,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAiBnC,IAAW,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EAQ7D;CACF"}
|
|
@@ -4,9 +4,14 @@ interface EventEmptyType {
|
|
|
4
4
|
export interface EventTypeWithValue {
|
|
5
5
|
value: number;
|
|
6
6
|
}
|
|
7
|
-
export interface
|
|
7
|
+
export interface OnEndedEventType {
|
|
8
8
|
value: number;
|
|
9
9
|
state: 'stopped' | 'ended';
|
|
10
|
+
bufferId: number | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface OnPositionChangedEventType {
|
|
13
|
+
value: number;
|
|
14
|
+
bufferId: number;
|
|
10
15
|
}
|
|
11
16
|
interface OnInterruptionEventType {
|
|
12
17
|
type: 'ended' | 'began';
|
|
@@ -38,8 +43,9 @@ export interface OnAudioReadyEventType {
|
|
|
38
43
|
when: number;
|
|
39
44
|
}
|
|
40
45
|
interface AudioAPIEvents {
|
|
41
|
-
ended:
|
|
46
|
+
ended: OnEndedEventType;
|
|
42
47
|
audioReady: OnAudioReadyEventType;
|
|
48
|
+
positionChanged: OnPositionChangedEventType;
|
|
43
49
|
audioError: EventEmptyType;
|
|
44
50
|
systemStateChanged: EventEmptyType;
|
|
45
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAE9C,UAAU,cAAc;CAAG;AAE3B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAE9C,UAAU,cAAc;CAAG;AAE3B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,qBAAqB,EAAE,cAAc,CAAC;IACtC,wBAAwB,EAAE,kBAAkB,CAAC;IAC7C,eAAe,EAAE,cAAc,CAAC;IAChC,mBAAmB,EAAE,cAAc,CAAC;IACpC,iBAAiB,EAAE,cAAc,CAAC;IAClC,kBAAkB,EAAE,cAAc,CAAC;IACnC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,4BAA4B,EAAE,kBAAkB,CAAC;IACjD,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,uBAAuB,CAAC;IACtC,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,qBAAqB,CAAC;IAClC,eAAe,EAAE,0BAA0B,CAAC;IAC5C,UAAU,EAAE,cAAc,CAAC;IAC3B,kBAAkB,EAAE,cAAc,CAAC;CACpC;AAED,KAAK,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;AACjD,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,eAAe,IAAI,CAC9D,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,MAAM,cAAc,CAAC;AACrD,MAAM,MAAM,qBAAqB,CAAC,IAAI,SAAS,iBAAiB,IAAI,CAClE,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KACxB,IAAI,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC;AAC/C,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,cAAc,IAAI,CAC5D,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KACrB,IAAI,CAAC"}
|
|
@@ -76,8 +76,10 @@ export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
|
|
|
76
76
|
export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
|
|
77
77
|
detune: IAudioParam;
|
|
78
78
|
playbackRate: IAudioParam;
|
|
79
|
-
enqueueBuffer: (audioBuffer: IAudioBuffer, isLastBuffer: boolean) => void;
|
|
79
|
+
enqueueBuffer: (audioBuffer: IAudioBuffer, bufferId: number, isLastBuffer: boolean) => void;
|
|
80
80
|
start: (when?: number, offset?: number) => void;
|
|
81
|
+
onPositionChanged: string;
|
|
82
|
+
onPositionChangedInterval: number;
|
|
81
83
|
}
|
|
82
84
|
export interface IAudioBuffer {
|
|
83
85
|
readonly length: number;
|
|
@@ -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;CACtE;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,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,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,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC5E,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAE1B,aAAa,EAAE,
|
|
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.1-rc.
|
|
3
|
+
"version": "0.6.1-rc.4",
|
|
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 { OnPositionChangedEventType } from '../events/types';
|
|
7
8
|
|
|
8
9
|
export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
|
|
9
10
|
readonly playbackRate: AudioParam;
|
|
@@ -18,10 +19,12 @@ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode
|
|
|
18
19
|
|
|
19
20
|
public enqueueBuffer(
|
|
20
21
|
buffer: AudioBuffer,
|
|
22
|
+
bufferId: number = 0,
|
|
21
23
|
isLastBuffer: boolean = false
|
|
22
24
|
): void {
|
|
23
25
|
(this.node as IAudioBufferQueueSourceNode).enqueueBuffer(
|
|
24
26
|
buffer.buffer,
|
|
27
|
+
bufferId,
|
|
25
28
|
isLastBuffer
|
|
26
29
|
);
|
|
27
30
|
}
|
|
@@ -46,4 +49,23 @@ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode
|
|
|
46
49
|
this.hasBeenStarted = true;
|
|
47
50
|
(this.node as IAudioBufferQueueSourceNode).start(when, offset);
|
|
48
51
|
}
|
|
52
|
+
|
|
53
|
+
// eslint-disable-next-line accessor-pairs
|
|
54
|
+
public set onPositionChanged(
|
|
55
|
+
callback: (event: OnPositionChangedEventType) => void
|
|
56
|
+
) {
|
|
57
|
+
const subscription = this.audioEventEmitter.addAudioEventListener(
|
|
58
|
+
'positionChanged',
|
|
59
|
+
callback
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
(this.node as IAudioBufferQueueSourceNode).onPositionChanged =
|
|
63
|
+
subscription.subscriptionId;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// eslint-disable-next-line accessor-pairs
|
|
67
|
+
public set onPositionChangedInterval(value: number) {
|
|
68
|
+
(this.node as IAudioBufferQueueSourceNode).onPositionChangedInterval =
|
|
69
|
+
value;
|
|
70
|
+
}
|
|
49
71
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { IAudioScheduledSourceNode } from '../interfaces';
|
|
2
2
|
import AudioNode from './AudioNode';
|
|
3
3
|
import { InvalidStateError, RangeError } from '../errors';
|
|
4
|
-
import {
|
|
4
|
+
import { OnEndedEventType } from '../events/types';
|
|
5
5
|
import { AudioEventEmitter } from '../events';
|
|
6
6
|
|
|
7
7
|
export default class AudioScheduledSourceNode extends AudioNode {
|
|
8
8
|
protected hasBeenStarted: boolean = false;
|
|
9
|
-
|
|
9
|
+
protected readonly audioEventEmitter = new AudioEventEmitter(
|
|
10
10
|
global.AudioEventEmitter
|
|
11
11
|
);
|
|
12
12
|
|
|
@@ -42,7 +42,7 @@ export default class AudioScheduledSourceNode extends AudioNode {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// eslint-disable-next-line accessor-pairs
|
|
45
|
-
public set onended(callback: (event:
|
|
45
|
+
public set onended(callback: (event: OnEndedEventType) => void) {
|
|
46
46
|
const subscription = this.audioEventEmitter.addAudioEventListener(
|
|
47
47
|
'ended',
|
|
48
48
|
callback
|
package/src/events/types.ts
CHANGED
|
@@ -6,9 +6,15 @@ export interface EventTypeWithValue {
|
|
|
6
6
|
value: number;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface OnEndedEventType {
|
|
10
10
|
value: number;
|
|
11
11
|
state: 'stopped' | 'ended';
|
|
12
|
+
bufferId: number | undefined;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface OnPositionChangedEventType {
|
|
16
|
+
value: number;
|
|
17
|
+
bufferId: number;
|
|
12
18
|
}
|
|
13
19
|
|
|
14
20
|
interface OnInterruptionEventType {
|
|
@@ -45,8 +51,9 @@ export interface OnAudioReadyEventType {
|
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
interface AudioAPIEvents {
|
|
48
|
-
ended:
|
|
54
|
+
ended: OnEndedEventType;
|
|
49
55
|
audioReady: OnAudioReadyEventType;
|
|
56
|
+
positionChanged: OnPositionChangedEventType;
|
|
50
57
|
audioError: EventEmptyType; // to change
|
|
51
58
|
systemStateChanged: EventEmptyType; // to change
|
|
52
59
|
}
|
package/src/interfaces.ts
CHANGED
|
@@ -114,8 +114,17 @@ export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
|
|
|
114
114
|
detune: IAudioParam;
|
|
115
115
|
playbackRate: IAudioParam;
|
|
116
116
|
|
|
117
|
-
enqueueBuffer: (
|
|
117
|
+
enqueueBuffer: (
|
|
118
|
+
audioBuffer: IAudioBuffer,
|
|
119
|
+
bufferId: number,
|
|
120
|
+
isLastBuffer: boolean
|
|
121
|
+
) => void;
|
|
118
122
|
start: (when?: number, offset?: number) => void;
|
|
123
|
+
|
|
124
|
+
// passing subscriptionId(uint_64 in cpp, string in js) to the cpp
|
|
125
|
+
onPositionChanged: string;
|
|
126
|
+
// set how often the onPositionChanged event is called
|
|
127
|
+
onPositionChangedInterval: number;
|
|
119
128
|
}
|
|
120
129
|
|
|
121
130
|
export interface IAudioBuffer {
|