react-native-audio-api 0.6.1-rc.1 → 0.6.1-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +94 -0
  2. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +9 -0
  3. package/common/cpp/audioapi/core/BaseAudioContext.cpp +8 -0
  4. package/common/cpp/audioapi/core/BaseAudioContext.h +3 -3
  5. package/common/cpp/audioapi/core/sources/AudioBuffer.h +1 -0
  6. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +240 -0
  7. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +72 -0
  8. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +1 -1
  9. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +2 -2
  10. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +3 -4
  11. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
  12. package/lib/commonjs/api.js +7 -0
  13. package/lib/commonjs/api.js.map +1 -1
  14. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +46 -0
  15. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -0
  16. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  17. package/lib/commonjs/core/BaseAudioContext.js +4 -0
  18. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  19. package/lib/module/api.js +1 -0
  20. package/lib/module/api.js.map +1 -1
  21. package/lib/module/core/AudioBufferQueueSourceNode.js +40 -0
  22. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -0
  23. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  24. package/lib/module/core/BaseAudioContext.js +4 -0
  25. package/lib/module/core/BaseAudioContext.js.map +1 -1
  26. package/lib/typescript/api.d.ts +1 -0
  27. package/lib/typescript/api.d.ts.map +1 -1
  28. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +16 -0
  29. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -0
  30. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +4 -3
  31. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
  32. package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
  33. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  34. package/lib/typescript/events/types.d.ts +8 -2
  35. package/lib/typescript/events/types.d.ts.map +1 -1
  36. package/lib/typescript/interfaces.d.ts +9 -0
  37. package/lib/typescript/interfaces.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/src/api.ts +1 -0
  40. package/src/core/AudioBufferQueueSourceNode.ts +71 -0
  41. package/src/core/AudioScheduledSourceNode.ts +3 -3
  42. package/src/core/BaseAudioContext.ts +8 -0
  43. package/src/events/types.ts +9 -2
  44. package/src/interfaces.ts +18 -0
@@ -0,0 +1,94 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/AudioBufferHostObject.h>
4
+ #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
5
+ #include <audioapi/HostObjects/AudioParamHostObject.h>
6
+ #include <audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h>
7
+
8
+ #include <memory>
9
+ #include <vector>
10
+
11
+ namespace audioapi {
12
+ using namespace facebook;
13
+
14
+ class AudioBufferQueueSourceNodeHostObject
15
+ : public AudioScheduledSourceNodeHostObject {
16
+ public:
17
+ explicit AudioBufferQueueSourceNodeHostObject(
18
+ const std::shared_ptr<AudioBufferQueueSourceNode> &node)
19
+ : AudioScheduledSourceNodeHostObject(node) {
20
+ addGetters(
21
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferQueueSourceNodeHostObject, detune),
22
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferQueueSourceNodeHostObject, playbackRate));
23
+
24
+ addSetters(
25
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onPositionChanged),
26
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onPositionChangedInterval));
27
+
28
+ // start method is overridden in this class
29
+ functions_->erase("start");
30
+
31
+ addFunctions(
32
+ JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, start),
33
+ JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, enqueueBuffer));
34
+ }
35
+
36
+ JSI_PROPERTY_GETTER(detune) {
37
+ auto audioBufferSourceNode =
38
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
39
+ auto detune = audioBufferSourceNode->getDetuneParam();
40
+ auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
41
+ return jsi::Object::createFromHostObject(runtime, detuneHostObject);
42
+ }
43
+
44
+ JSI_PROPERTY_GETTER(playbackRate) {
45
+ auto audioBufferSourceNode =
46
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
47
+ auto playbackRate = audioBufferSourceNode->getPlaybackRateParam();
48
+ auto playbackRateHostObject =
49
+ std::make_shared<AudioParamHostObject>(playbackRate);
50
+ return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
51
+ }
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
+
67
+ JSI_HOST_FUNCTION(start) {
68
+ auto when = args[0].getNumber();
69
+ auto offset = args[1].getNumber();
70
+
71
+ auto audioBufferQueueSourceNode =
72
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
73
+
74
+ audioBufferQueueSourceNode->start(when, offset);
75
+
76
+ return jsi::Value::undefined();
77
+ }
78
+
79
+ JSI_HOST_FUNCTION(enqueueBuffer) {
80
+ auto audioBufferQueueSourceNode =
81
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
82
+
83
+ auto audioBufferHostObject =
84
+ args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
85
+ int bufferId = args[1].asNumber();
86
+ auto isLastBuffer = args[2].asBool();
87
+
88
+ audioBufferQueueSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_, bufferId, isLastBuffer);
89
+
90
+ return jsi::Value::undefined();
91
+ }
92
+ };
93
+
94
+ } // namespace audioapi
@@ -4,6 +4,7 @@
4
4
  #include <audioapi/jsi/JsiPromise.h>
5
5
  #include <audioapi/HostObjects/AudioBufferHostObject.h>
6
6
  #include <audioapi/HostObjects/AudioBufferSourceNodeHostObject.h>
7
+ #include <audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h>
7
8
  #include <audioapi/HostObjects/AudioDestinationNodeHostObject.h>
8
9
  #include <audioapi/core/BaseAudioContext.h>
9
10
  #include <audioapi/HostObjects/BiquadFilterNodeHostObject.h>
@@ -43,6 +44,7 @@ class BaseAudioContextHostObject : public JsiHostObject {
43
44
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createStereoPanner),
44
45
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBiquadFilter),
45
46
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferSource),
47
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferQueueSource),
46
48
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
47
49
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
48
50
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createAnalyser),
@@ -103,6 +105,13 @@ class BaseAudioContextHostObject : public JsiHostObject {
103
105
  return jsi::Object::createFromHostObject(runtime, bufferSourceHostObject);
104
106
  }
105
107
 
108
+ JSI_HOST_FUNCTION(createBufferQueueSource) {
109
+ auto bufferSource = context_->createBufferQueueSource();
110
+ auto bufferStreamSourceHostObject =
111
+ std::make_shared<AudioBufferQueueSourceNodeHostObject>(bufferSource);
112
+ return jsi::Object::createFromHostObject(runtime, bufferStreamSourceHostObject);
113
+ }
114
+
106
115
  JSI_HOST_FUNCTION(createBuffer) {
107
116
  auto numberOfChannels = static_cast<int>(args[0].getNumber());
108
117
  auto length = static_cast<size_t>(args[1].getNumber());
@@ -5,6 +5,7 @@
5
5
  #include <audioapi/core/effects/GainNode.h>
6
6
  #include <audioapi/core/effects/StereoPannerNode.h>
7
7
  #include <audioapi/core/sources/AudioBuffer.h>
8
+ #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
8
9
  #include <audioapi/core/sources/AudioBufferSourceNode.h>
9
10
  #include <audioapi/core/sources/OscillatorNode.h>
10
11
  #include <audioapi/core/utils/AudioDecoder.h>
@@ -79,6 +80,13 @@ std::shared_ptr<AudioBufferSourceNode> BaseAudioContext::createBufferSource(
79
80
  return bufferSource;
80
81
  }
81
82
 
83
+ std::shared_ptr<AudioBufferQueueSourceNode>
84
+ BaseAudioContext::createBufferQueueSource() {
85
+ auto bufferSource = std::make_shared<AudioBufferQueueSourceNode>(this);
86
+ nodeManager_->addSourceNode(bufferSource);
87
+ return bufferSource;
88
+ }
89
+
82
90
  std::shared_ptr<AudioBuffer> BaseAudioContext::createBuffer(
83
91
  int numberOfChannels,
84
92
  size_t length,
@@ -24,6 +24,7 @@ class AudioNodeManager;
24
24
  class BiquadFilterNode;
25
25
  class AudioDestinationNode;
26
26
  class AudioBufferSourceNode;
27
+ class AudioBufferQueueSourceNode;
27
28
  class AudioDecoder;
28
29
  class AnalyserNode;
29
30
  class AudioEventHandlerRegistry;
@@ -44,6 +45,7 @@ class BaseAudioContext {
44
45
  std::shared_ptr<StereoPannerNode> createStereoPanner();
45
46
  std::shared_ptr<BiquadFilterNode> createBiquadFilter();
46
47
  std::shared_ptr<AudioBufferSourceNode> createBufferSource(bool pitchCorrection);
48
+ std::shared_ptr<AudioBufferQueueSourceNode> createBufferQueueSource();
47
49
  static std::shared_ptr<AudioBuffer>
48
50
  createBuffer(int numberOfChannels, size_t length, float sampleRate);
49
51
  std::shared_ptr<PeriodicWave> createPeriodicWave(
@@ -79,9 +81,7 @@ class BaseAudioContext {
79
81
  std::shared_ptr<PeriodicWave> cachedSawtoothWave_ = nullptr;
80
82
  std::shared_ptr<PeriodicWave> cachedTriangleWave_ = nullptr;
81
83
 
82
- protected:
83
- friend class AudioScheduledSourceNode;
84
-
84
+ public:
85
85
  std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
86
86
  };
87
87
 
@@ -35,6 +35,7 @@ class AudioBuffer : public std::enable_shared_from_this<AudioBuffer> {
35
35
 
36
36
  private:
37
37
  friend class AudioBufferSourceNode;
38
+ friend class AudioBufferQueueSourceNode;
38
39
 
39
40
  std::shared_ptr<AudioBus> bus_;
40
41
  };
@@ -0,0 +1,240 @@
1
+ #include <audioapi/core/AudioParam.h>
2
+ #include <audioapi/core/BaseAudioContext.h>
3
+ #include <audioapi/core/Constants.h>
4
+ #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
5
+ #include <audioapi/core/utils/Locker.h>
6
+ #include <audioapi/dsp/AudioUtils.h>
7
+ #include <audioapi/events/AudioEventHandlerRegistry.h>
8
+ #include <audioapi/utils/AudioArray.h>
9
+ #include <audioapi/utils/AudioBus.h>
10
+
11
+ namespace audioapi {
12
+
13
+ AudioBufferQueueSourceNode::AudioBufferQueueSourceNode(
14
+ BaseAudioContext *context)
15
+ : AudioScheduledSourceNode(context), vReadIndex_(0.0) {
16
+ buffers_ = {};
17
+
18
+ detuneParam_ = std::make_shared<AudioParam>(
19
+ 0.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
20
+ playbackRateParam_ = std::make_shared<AudioParam>(
21
+ 1.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
22
+
23
+ playbackRateBus_ = std::make_shared<AudioBus>(
24
+ RENDER_QUANTUM_SIZE * 3, channelCount_, context_->getSampleRate());
25
+
26
+ stretch_ =
27
+ std::make_shared<signalsmith::stretch::SignalsmithStretch<float>>();
28
+ stretch_->presetDefault(channelCount_, context_->getSampleRate(), true);
29
+
30
+ onPositionChangedInterval_ = static_cast<int>(context_->getSampleRate() / 10);
31
+
32
+ isInitialized_ = true;
33
+ }
34
+
35
+ AudioBufferQueueSourceNode::~AudioBufferQueueSourceNode() {
36
+ Locker locker(getBufferLock());
37
+
38
+ buffers_ = {};
39
+ }
40
+
41
+ std::shared_ptr<AudioParam> AudioBufferQueueSourceNode::getDetuneParam() const {
42
+ return detuneParam_;
43
+ }
44
+
45
+ std::shared_ptr<AudioParam> AudioBufferQueueSourceNode::getPlaybackRateParam()
46
+ const {
47
+ return playbackRateParam_;
48
+ }
49
+
50
+ void AudioBufferQueueSourceNode::start(double when, double offset) {
51
+ AudioScheduledSourceNode::start(when);
52
+
53
+ vReadIndex_ = static_cast<double>(context_->getSampleRate() * offset);
54
+ }
55
+
56
+ void AudioBufferQueueSourceNode::enqueueBuffer(
57
+ const std::shared_ptr<AudioBuffer> &buffer,
58
+ int bufferId,
59
+ bool isLastBuffer) {
60
+ auto locker = Locker(getBufferLock());
61
+ buffers_.emplace(bufferId, buffer);
62
+
63
+ isLastBuffer_ = isLastBuffer;
64
+ }
65
+
66
+ void AudioBufferQueueSourceNode::disable() {
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);
81
+ buffers_ = {};
82
+ }
83
+
84
+ std::mutex &AudioBufferQueueSourceNode::getBufferLock() {
85
+ return bufferLock_;
86
+ }
87
+
88
+ void AudioBufferQueueSourceNode::processNode(
89
+ const std::shared_ptr<AudioBus> &processingBus,
90
+ int framesToProcess) {
91
+ if (auto locker = Locker::tryLock(getBufferLock())) {
92
+ // No audio data to fill, zero the output and return.
93
+ if (buffers_.empty()) {
94
+ processingBus->zero();
95
+ return;
96
+ }
97
+
98
+ processWithPitchCorrection(processingBus, framesToProcess);
99
+
100
+ handleStopScheduled();
101
+ } else {
102
+ processingBus->zero();
103
+ }
104
+ }
105
+
106
+ double AudioBufferQueueSourceNode::getStopTime() const {
107
+ return dsp::sampleFrameToTime(
108
+ static_cast<int>(vReadIndex_), context_->getSampleRate());
109
+ }
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() * 1000 / static_cast<float>(interval));
133
+ }
134
+
135
+ /**
136
+ * Helper functions
137
+ */
138
+
139
+ void AudioBufferQueueSourceNode::processWithPitchCorrection(
140
+ const std::shared_ptr<AudioBus> &processingBus,
141
+ int framesToProcess) {
142
+ size_t startOffset = 0;
143
+ size_t offsetLength = 0;
144
+
145
+ auto time = context_->getCurrentTime();
146
+ auto playbackRate = std::clamp(
147
+ playbackRateParam_->processKRateParam(framesToProcess, time), 0.0f, 3.0f);
148
+ auto detune = std::clamp(
149
+ detuneParam_->processKRateParam(framesToProcess, time) / 100.0f,
150
+ -12.0f,
151
+ 12.0f);
152
+
153
+ playbackRateBus_->zero();
154
+
155
+ updatePlaybackInfo(processingBus, framesToProcess, startOffset, offsetLength);
156
+
157
+ if (playbackRate == 0.0f || (!isPlaying() && !isStopScheduled())) {
158
+ processingBus->zero();
159
+ return;
160
+ }
161
+
162
+ // Send position changed event
163
+ sendOnPositionChangedEvent();
164
+
165
+ auto framesNeededToStretch =
166
+ static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
167
+ auto stretchedStartOffset =
168
+ static_cast<size_t>(static_cast<float>(startOffset) * playbackRate);
169
+ auto stretchedOffsetLength =
170
+ static_cast<size_t>(static_cast<float>(offsetLength) * playbackRate);
171
+
172
+ processWithoutInterpolation(
173
+ playbackRateBus_, stretchedStartOffset, stretchedOffsetLength);
174
+
175
+ stretch_->process(
176
+ playbackRateBus_.get()[0],
177
+ framesNeededToStretch,
178
+ processingBus.get()[0],
179
+ framesToProcess);
180
+
181
+ if (detune != 0.0f) {
182
+ stretch_->setTransposeSemitones(detune);
183
+ }
184
+ }
185
+
186
+ void AudioBufferQueueSourceNode::processWithoutInterpolation(
187
+ const std::shared_ptr<AudioBus> &processingBus,
188
+ size_t startOffset,
189
+ size_t offsetLength) {
190
+ auto readIndex = static_cast<size_t>(vReadIndex_);
191
+ size_t writeIndex = startOffset;
192
+
193
+ auto queueData = buffers_.front();
194
+ bufferId_ = queueData.first;
195
+ auto buffer = queueData.second;
196
+
197
+ size_t framesLeft = offsetLength;
198
+
199
+ while (framesLeft > 0) {
200
+ size_t framesToEnd = buffer->getLength() - readIndex;
201
+ size_t framesToCopy = std::min(framesToEnd, framesLeft);
202
+ framesToCopy = framesToCopy > 0 ? framesToCopy : 0;
203
+
204
+ assert(readIndex >= 0);
205
+ assert(writeIndex >= 0);
206
+ assert(writeIndex + framesToCopy <= processingBus->getSize());
207
+
208
+ processingBus->copy(
209
+ buffer->bus_.get(), readIndex, writeIndex, framesToCopy);
210
+
211
+ writeIndex += framesToCopy;
212
+ readIndex += framesToCopy;
213
+ framesLeft -= framesToCopy;
214
+
215
+ if (readIndex >= buffer->getLength()) {
216
+ buffers_.pop();
217
+
218
+ if (buffers_.empty()) {
219
+ processingBus->zero(writeIndex, framesLeft);
220
+ readIndex = 0;
221
+
222
+ if (isLastBuffer_) {
223
+ playbackState_ = PlaybackState::STOP_SCHEDULED;
224
+ }
225
+ break;
226
+ } else {
227
+ queueData = buffers_.front();
228
+ bufferId_ = queueData.first;
229
+ buffer = queueData.second;
230
+
231
+ readIndex = 0;
232
+ }
233
+ }
234
+ }
235
+
236
+ // update reading index for next render quantum
237
+ vReadIndex_ = static_cast<double>(readIndex);
238
+ }
239
+
240
+ } // namespace audioapi
@@ -0,0 +1,72 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/core/sources/AudioBuffer.h>
4
+ #include <audioapi/core/sources/AudioScheduledSourceNode.h>
5
+ #include <audioapi/libs/signalsmith-stretch/signalsmith-stretch.h>
6
+
7
+ #include <memory>
8
+ #include <cstddef>
9
+ #include <algorithm>
10
+ #include <string>
11
+ #include <queue>
12
+
13
+ namespace audioapi {
14
+
15
+ class AudioBus;
16
+ class AudioParam;
17
+
18
+ class AudioBufferQueueSourceNode : public AudioScheduledSourceNode {
19
+ public:
20
+ explicit AudioBufferQueueSourceNode(BaseAudioContext *context);
21
+ ~AudioBufferQueueSourceNode() override;
22
+
23
+ [[nodiscard]] std::shared_ptr<AudioParam> getDetuneParam() const;
24
+ [[nodiscard]] std::shared_ptr<AudioParam> getPlaybackRateParam() const;
25
+
26
+ void start(double when, double offset);
27
+ void enqueueBuffer(const std::shared_ptr<AudioBuffer> &buffer, int bufferId, bool isLastBuffer);
28
+ void disable() override;
29
+
30
+ void setOnPositionChangedCallbackId(uint64_t callbackId);
31
+ void setOnPositionChangedInterval(int interval);
32
+ void sendOnPositionChangedEvent();
33
+
34
+ protected:
35
+ std::mutex &getBufferLock();
36
+ void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
37
+ double getStopTime() const override;
38
+
39
+ private:
40
+ std::mutex bufferLock_;
41
+
42
+ // pitch correction
43
+ std::shared_ptr<signalsmith::stretch::SignalsmithStretch<float>> stretch_;
44
+ std::shared_ptr<AudioBus> playbackRateBus_;
45
+
46
+ // k-rate params
47
+ std::shared_ptr<AudioParam> detuneParam_;
48
+ std::shared_ptr<AudioParam> playbackRateParam_;
49
+
50
+ // internal helper
51
+ double vReadIndex_;
52
+
53
+ // User provided buffers
54
+ std::queue<std::pair<int, std::shared_ptr<AudioBuffer>>> buffers_;
55
+ int bufferId_ = 0;
56
+ bool isLastBuffer_ = false;
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
+
63
+ void processWithPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
64
+ int framesToProcess);
65
+
66
+ void processWithoutInterpolation(
67
+ const std::shared_ptr<AudioBus>& processingBus,
68
+ size_t startOffset,
69
+ size_t offsetLength);
70
+ };
71
+
72
+ } // namespace audioapi
@@ -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, 4> AUDIO_API_EVENT_NAMES = {
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
  };
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "AudioBuffer", {
15
15
  return _AudioBuffer.default;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "AudioBufferQueueSourceNode", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _AudioBufferQueueSourceNode.default;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "AudioBufferSourceNode", {
19
25
  enumerable: true,
20
26
  get: function () {
@@ -180,6 +186,7 @@ Object.defineProperty(exports, "useSystemVolume", {
180
186
  var _specs = require("./specs");
181
187
  var _AudioBuffer = _interopRequireDefault(require("./core/AudioBuffer"));
182
188
  var _AudioBufferSourceNode = _interopRequireDefault(require("./core/AudioBufferSourceNode"));
189
+ var _AudioBufferQueueSourceNode = _interopRequireDefault(require("./core/AudioBufferQueueSourceNode"));
183
190
  var _AudioContext = _interopRequireDefault(require("./core/AudioContext"));
184
191
  var _OfflineAudioContext = _interopRequireDefault(require("./core/OfflineAudioContext"));
185
192
  var _AudioDestinationNode = _interopRequireDefault(require("./core/AudioDestinationNode"));
@@ -1 +1 @@
1
- {"version":3,"names":["_specs","require","_AudioBuffer","_interopRequireDefault","_AudioBufferSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_system","_useSytemVolume","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAuCA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,aAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,oBAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,qBAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,UAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,aAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,WAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,yBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,iBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,iBAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,SAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,eAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,iBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,cAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,OAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,eAAA,GAAAhB,sBAAA,CAAAF,OAAA;AAEA,IAAAmB,MAAA,GAAAnB,OAAA;AAUA,IAAAoB,OAAA,GAAApB,OAAA;AAMkB,SAAAE,uBAAAmB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAhElB;;AAaA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACC,2BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC","ignoreList":[]}
1
+ {"version":3,"names":["_specs","require","_AudioBuffer","_interopRequireDefault","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_system","_useSytemVolume","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAuCA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,2BAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,aAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,oBAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,qBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,UAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,WAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,yBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,iBAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,iBAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,SAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,eAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,iBAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,cAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,OAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,eAAA,GAAAjB,sBAAA,CAAAF,OAAA;AAEA,IAAAoB,MAAA,GAAApB,OAAA;AAUA,IAAAqB,OAAA,GAAArB,OAAA;AAMkB,SAAAE,uBAAAoB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAjElB;;AAaA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACC,2BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _AudioScheduledSourceNode = _interopRequireDefault(require("./AudioScheduledSourceNode"));
8
+ var _AudioParam = _interopRequireDefault(require("./AudioParam"));
9
+ var _errors = require("../errors");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ class AudioBufferQueueSourceNode extends _AudioScheduledSourceNode.default {
12
+ constructor(context, node) {
13
+ super(context, node);
14
+ this.detune = new _AudioParam.default(node.detune, context);
15
+ this.playbackRate = new _AudioParam.default(node.playbackRate, context);
16
+ }
17
+ enqueueBuffer(buffer, bufferId = 0, isLastBuffer = false) {
18
+ this.node.enqueueBuffer(buffer.buffer, bufferId, isLastBuffer);
19
+ }
20
+ start(when = 0, offset = 0) {
21
+ if (when < 0) {
22
+ throw new _errors.RangeError(`when must be a finite non-negative number: ${when}`);
23
+ }
24
+ if (offset < 0) {
25
+ throw new _errors.RangeError(`offset must be a finite non-negative number: ${offset}`);
26
+ }
27
+ if (this.hasBeenStarted) {
28
+ throw new _errors.InvalidStateError('Cannot call start more than once');
29
+ }
30
+ this.hasBeenStarted = true;
31
+ this.node.start(when, offset);
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
+ }
44
+ }
45
+ exports.default = AudioBufferQueueSourceNode;
46
+ //# sourceMappingURL=AudioBufferQueueSourceNode.js.map
@@ -0,0 +1 @@
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;EACxBC,iBAAiB,GAAG,IAAIC,yBAAiB,CACxDC,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,QAAqD,EAAE;IACxE,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":[]}
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":[]}
@@ -13,6 +13,7 @@ var _AudioBufferSourceNode = _interopRequireDefault(require("./AudioBufferSource
13
13
  var _AudioBuffer = _interopRequireDefault(require("./AudioBuffer"));
14
14
  var _PeriodicWave = _interopRequireDefault(require("./PeriodicWave"));
15
15
  var _AnalyserNode = _interopRequireDefault(require("./AnalyserNode"));
16
+ var _AudioBufferQueueSourceNode = _interopRequireDefault(require("./AudioBufferQueueSourceNode"));
16
17
  var _errors = require("../errors");
17
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
19
  class BaseAudioContext {
@@ -43,6 +44,9 @@ class BaseAudioContext {
43
44
  const pitchCorrection = options?.pitchCorrection ?? false;
44
45
  return new _AudioBufferSourceNode.default(this, this.context.createBufferSource(pitchCorrection));
45
46
  }
47
+ createBufferQueueSource() {
48
+ return new _AudioBufferQueueSourceNode.default(this, this.context.createBufferQueueSource());
49
+ }
46
50
  createBuffer(numOfChannels, length, sampleRate) {
47
51
  if (numOfChannels < 1 || numOfChannels >= 32) {
48
52
  throw new _errors.NotSupportedError(`The number of channels provided (${numOfChannels}) is outside the range [1, 32]`);
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioDestinationNode","_interopRequireDefault","require","_OscillatorNode","_GainNode","_StereoPannerNode","_BiquadFilterNode","_AudioBufferSourceNode","_AudioBuffer","_PeriodicWave","_AnalyserNode","_errors","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createOscillator","OscillatorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBuffer","numOfChannels","length","NotSupportedError","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","arrayBuffer","Uint8Array","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":";;;;;;AAMA,IAAAA,qBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,iBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,sBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,YAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,aAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,aAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,OAAA,GAAAT,OAAA;AAAkE,SAAAD,uBAAAW,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnD,MAAMG,gBAAgB,CAAC;EAKpCC,WAAWA,CAACC,OAA0B,EAAE;IACtC,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,WAAW,GAAG,IAAIC,6BAAoB,CAAC,IAAI,EAAEF,OAAO,CAACC,WAAW,CAAC;IACtE,IAAI,CAACE,UAAU,GAAGH,OAAO,CAACG,UAAU;EACtC;EAEA,IAAWC,WAAWA,CAAA,EAAW;IAC/B,OAAO,IAAI,CAACJ,OAAO,CAACI,WAAW;EACjC;EAEA,IAAWC,KAAKA,CAAA,EAAiB;IAC/B,OAAO,IAAI,CAACL,OAAO,CAACK,KAAK;EAC3B;EAEAC,gBAAgBA,CAAA,EAAmB;IACjC,OAAO,IAAIC,uBAAc,CAAC,IAAI,EAAE,IAAI,CAACP,OAAO,CAACM,gBAAgB,CAAC,CAAC,CAAC;EAClE;EAEAE,UAAUA,CAAA,EAAa;IACrB,OAAO,IAAIC,iBAAQ,CAAC,IAAI,EAAE,IAAI,CAACT,OAAO,CAACQ,UAAU,CAAC,CAAC,CAAC;EACtD;EAEAE,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIC,yBAAgB,CAAC,IAAI,EAAE,IAAI,CAACX,OAAO,CAACU,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAE,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIC,yBAAgB,CAAC,IAAI,EAAE,IAAI,CAACb,OAAO,CAACY,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAE,kBAAkBA,CAChBC,OAAsC,EACf;IACvB,MAAMC,eAAe,GAAGD,OAAO,EAAEC,eAAe,IAAI,KAAK;IAEzD,OAAO,IAAIC,8BAAqB,CAC9B,IAAI,EACJ,IAAI,CAACjB,OAAO,CAACc,kBAAkB,CAACE,eAAe,CACjD,CAAC;EACH;EAEAE,YAAYA,CACVC,aAAqB,EACrBC,MAAc,EACdjB,UAAkB,EACL;IACb,IAAIgB,aAAa,GAAG,CAAC,IAAIA,aAAa,IAAI,EAAE,EAAE;MAC5C,MAAM,IAAIE,yBAAiB,CACzB,oCAAoCF,aAAa,gCACnD,CAAC;IACH;IAEA,IAAIC,MAAM,IAAI,CAAC,EAAE;MACf,MAAM,IAAIC,yBAAiB,CACzB,kCAAkCD,MAAM,kDAC1C,CAAC;IACH;IAEA,IAAIjB,UAAU,GAAG,IAAI,IAAIA,UAAU,GAAG,KAAK,EAAE;MAC3C,MAAM,IAAIkB,yBAAiB,CACzB,6BAA6BlB,UAAU,sCACzC,CAAC;IACH;IAEA,OAAO,IAAImB,oBAAW,CACpB,IAAI,CAACtB,OAAO,CAACkB,YAAY,CAACC,aAAa,EAAEC,MAAM,EAAEjB,UAAU,CAC7D,CAAC;EACH;EAEAoB,kBAAkBA,CAChBC,IAAkB,EAClBC,IAAkB,EAClBC,WAAqC,EACvB;IACd,IAAIF,IAAI,CAACJ,MAAM,KAAKK,IAAI,CAACL,MAAM,EAAE;MAC/B,MAAM,IAAIO,0BAAkB,CAC1B,4BAA4BH,IAAI,CAACJ,MAAM,oBAAoBK,IAAI,CAACL,MAAM,sBACxE,CAAC;IACH;IAEA,MAAMQ,oBAAoB,GAAGF,WAAW,EAAEE,oBAAoB,IAAI,KAAK;IAEvE,OAAO,IAAIC,qBAAY,CACrB,IAAI,CAAC7B,OAAO,CAACuB,kBAAkB,CAACC,IAAI,EAAEC,IAAI,EAAEG,oBAAoB,CAClE,CAAC;EACH;EAEAE,cAAcA,CAAA,EAAiB;IAC7B,OAAO,IAAIC,qBAAY,CAAC,IAAI,EAAE,IAAI,CAAC/B,OAAO,CAAC8B,cAAc,CAAC,CAAC,CAAC;EAC9D;EAEA,MAAME,qBAAqBA,CAACC,UAAkB,EAAwB;IACpE;IACA,IAAIA,UAAU,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE;MACpCD,UAAU,GAAGA,UAAU,CAACE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAChD;IAEA,OAAO,IAAIb,oBAAW,CACpB,MAAM,IAAI,CAACtB,OAAO,CAACgC,qBAAqB,CAACC,UAAU,CACrD,CAAC;EACH;EAEA,MAAMG,eAAeA,CAACC,WAAwB,EAAwB;IACpE,OAAO,IAAIf,oBAAW,CACpB,MAAM,IAAI,CAACtB,OAAO,CAACoC,eAAe,CAAC,IAAIE,UAAU,CAACD,WAAW,CAAC,CAChE,CAAC;EACH;AACF;AAACE,OAAA,CAAA1C,OAAA,GAAAC,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AudioDestinationNode","_interopRequireDefault","require","_OscillatorNode","_GainNode","_StereoPannerNode","_BiquadFilterNode","_AudioBufferSourceNode","_AudioBuffer","_PeriodicWave","_AnalyserNode","_AudioBufferQueueSourceNode","_errors","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createOscillator","OscillatorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","NotSupportedError","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","arrayBuffer","Uint8Array","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":";;;;;;AAMA,IAAAA,qBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,iBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,sBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,YAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,aAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,aAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,2BAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,OAAA,GAAAV,OAAA;AAAkE,SAAAD,uBAAAY,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnD,MAAMG,gBAAgB,CAAC;EAKpCC,WAAWA,CAACC,OAA0B,EAAE;IACtC,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,WAAW,GAAG,IAAIC,6BAAoB,CAAC,IAAI,EAAEF,OAAO,CAACC,WAAW,CAAC;IACtE,IAAI,CAACE,UAAU,GAAGH,OAAO,CAACG,UAAU;EACtC;EAEA,IAAWC,WAAWA,CAAA,EAAW;IAC/B,OAAO,IAAI,CAACJ,OAAO,CAACI,WAAW;EACjC;EAEA,IAAWC,KAAKA,CAAA,EAAiB;IAC/B,OAAO,IAAI,CAACL,OAAO,CAACK,KAAK;EAC3B;EAEAC,gBAAgBA,CAAA,EAAmB;IACjC,OAAO,IAAIC,uBAAc,CAAC,IAAI,EAAE,IAAI,CAACP,OAAO,CAACM,gBAAgB,CAAC,CAAC,CAAC;EAClE;EAEAE,UAAUA,CAAA,EAAa;IACrB,OAAO,IAAIC,iBAAQ,CAAC,IAAI,EAAE,IAAI,CAACT,OAAO,CAACQ,UAAU,CAAC,CAAC,CAAC;EACtD;EAEAE,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIC,yBAAgB,CAAC,IAAI,EAAE,IAAI,CAACX,OAAO,CAACU,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAE,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIC,yBAAgB,CAAC,IAAI,EAAE,IAAI,CAACb,OAAO,CAACY,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAE,kBAAkBA,CAChBC,OAAsC,EACf;IACvB,MAAMC,eAAe,GAAGD,OAAO,EAAEC,eAAe,IAAI,KAAK;IAEzD,OAAO,IAAIC,8BAAqB,CAC9B,IAAI,EACJ,IAAI,CAACjB,OAAO,CAACc,kBAAkB,CAACE,eAAe,CACjD,CAAC;EACH;EAEAE,uBAAuBA,CAAA,EAA+B;IACpD,OAAO,IAAIC,mCAA0B,CACnC,IAAI,EACJ,IAAI,CAACnB,OAAO,CAACkB,uBAAuB,CAAC,CACvC,CAAC;EACH;EAEAE,YAAYA,CACVC,aAAqB,EACrBC,MAAc,EACdnB,UAAkB,EACL;IACb,IAAIkB,aAAa,GAAG,CAAC,IAAIA,aAAa,IAAI,EAAE,EAAE;MAC5C,MAAM,IAAIE,yBAAiB,CACzB,oCAAoCF,aAAa,gCACnD,CAAC;IACH;IAEA,IAAIC,MAAM,IAAI,CAAC,EAAE;MACf,MAAM,IAAIC,yBAAiB,CACzB,kCAAkCD,MAAM,kDAC1C,CAAC;IACH;IAEA,IAAInB,UAAU,GAAG,IAAI,IAAIA,UAAU,GAAG,KAAK,EAAE;MAC3C,MAAM,IAAIoB,yBAAiB,CACzB,6BAA6BpB,UAAU,sCACzC,CAAC;IACH;IAEA,OAAO,IAAIqB,oBAAW,CACpB,IAAI,CAACxB,OAAO,CAACoB,YAAY,CAACC,aAAa,EAAEC,MAAM,EAAEnB,UAAU,CAC7D,CAAC;EACH;EAEAsB,kBAAkBA,CAChBC,IAAkB,EAClBC,IAAkB,EAClBC,WAAqC,EACvB;IACd,IAAIF,IAAI,CAACJ,MAAM,KAAKK,IAAI,CAACL,MAAM,EAAE;MAC/B,MAAM,IAAIO,0BAAkB,CAC1B,4BAA4BH,IAAI,CAACJ,MAAM,oBAAoBK,IAAI,CAACL,MAAM,sBACxE,CAAC;IACH;IAEA,MAAMQ,oBAAoB,GAAGF,WAAW,EAAEE,oBAAoB,IAAI,KAAK;IAEvE,OAAO,IAAIC,qBAAY,CACrB,IAAI,CAAC/B,OAAO,CAACyB,kBAAkB,CAACC,IAAI,EAAEC,IAAI,EAAEG,oBAAoB,CAClE,CAAC;EACH;EAEAE,cAAcA,CAAA,EAAiB;IAC7B,OAAO,IAAIC,qBAAY,CAAC,IAAI,EAAE,IAAI,CAACjC,OAAO,CAACgC,cAAc,CAAC,CAAC,CAAC;EAC9D;EAEA,MAAME,qBAAqBA,CAACC,UAAkB,EAAwB;IACpE;IACA,IAAIA,UAAU,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE;MACpCD,UAAU,GAAGA,UAAU,CAACE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAChD;IAEA,OAAO,IAAIb,oBAAW,CACpB,MAAM,IAAI,CAACxB,OAAO,CAACkC,qBAAqB,CAACC,UAAU,CACrD,CAAC;EACH;EAEA,MAAMG,eAAeA,CAACC,WAAwB,EAAwB;IACpE,OAAO,IAAIf,oBAAW,CACpB,MAAM,IAAI,CAACxB,OAAO,CAACsC,eAAe,CAAC,IAAIE,UAAU,CAACD,WAAW,CAAC,CAChE,CAAC;EACH;AACF;AAACE,OAAA,CAAA5C,OAAA,GAAAC,gBAAA","ignoreList":[]}
package/lib/module/api.js CHANGED
@@ -14,6 +14,7 @@ if (global.createAudioContext == null || global.createOfflineAudioContext == nul
14
14
  }
15
15
  export { default as AudioBuffer } from "./core/AudioBuffer.js";
16
16
  export { default as AudioBufferSourceNode } from "./core/AudioBufferSourceNode.js";
17
+ export { default as AudioBufferQueueSourceNode } from "./core/AudioBufferQueueSourceNode.js";
17
18
  export { default as AudioContext } from "./core/AudioContext.js";
18
19
  export { default as OfflineAudioContext } from "./core/OfflineAudioContext.js";
19
20
  export { default as AudioDestinationNode } from "./core/AudioDestinationNode.js";
@@ -1 +1 @@
1
- {"version":3,"names":["NativeAudioAPIModule","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","Error","install","default","AudioBuffer","AudioBufferSourceNode","AudioContext","OfflineAudioContext","AudioDestinationNode","AudioNode","AnalyserNode","AudioParam","AudioScheduledSourceNode","BaseAudioContext","BiquadFilterNode","GainNode","OscillatorNode","StereoPannerNode","AudioRecorder","AudioManager","useSystemVolume","OscillatorType","BiquadFilterType","ChannelCountMode","ChannelInterpretation","ContextState","WindowType","PeriodicWaveConstraints","IndexSizeError","InvalidAccessError","InvalidStateError","RangeError","NotSupportedError"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,kBAAS;;AAS9C;;AAaA;;AAEA,IACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACL,oBAAoB,EAAE;IACzB,MAAM,IAAIM,KAAK,CACb,iFACF,CAAC;EACH;EAEAN,oBAAoB,CAACO,OAAO,CAAC,CAAC;AAChC;AAEA,SAASC,OAAO,IAAIC,WAAW,QAAQ,uBAAoB;AAC3D,SAASD,OAAO,IAAIE,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASF,OAAO,IAAIG,YAAY,QAAQ,wBAAqB;AAC7D,SAASH,OAAO,IAAII,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASJ,OAAO,IAAIK,oBAAoB,QAAQ,gCAA6B;AAC7E,SAASL,OAAO,IAAIM,SAAS,QAAQ,qBAAkB;AACvD,SAASN,OAAO,IAAIO,YAAY,QAAQ,wBAAqB;AAC7D,SAASP,OAAO,IAAIQ,UAAU,QAAQ,sBAAmB;AACzD,SAASR,OAAO,IAAIS,wBAAwB,QAAQ,oCAAiC;AACrF,SAAST,OAAO,IAAIU,gBAAgB,QAAQ,4BAAyB;AACrE,SAASV,OAAO,IAAIW,gBAAgB,QAAQ,4BAAyB;AACrE,SAASX,OAAO,IAAIY,QAAQ,QAAQ,oBAAiB;AACrD,SAASZ,OAAO,IAAIa,cAAc,QAAQ,0BAAuB;AACjE,SAASb,OAAO,IAAIc,gBAAgB,QAAQ,4BAAyB;AACrE,SAASd,OAAO,IAAIe,aAAa,QAAQ,yBAAsB;AAC/D,SAASf,OAAO,IAAIgB,YAAY,QAAQ,mBAAU;AAClD,SAAShB,OAAO,IAAIiB,eAAe,QAAQ,2BAAwB;AAEnE,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,YAAY,EACZC,UAAU,EACVC,uBAAuB,QAClB,YAAS;AAEhB,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAU,EACVC,iBAAiB,QACZ,mBAAU","ignoreList":[]}
1
+ {"version":3,"names":["NativeAudioAPIModule","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","Error","install","default","AudioBuffer","AudioBufferSourceNode","AudioBufferQueueSourceNode","AudioContext","OfflineAudioContext","AudioDestinationNode","AudioNode","AnalyserNode","AudioParam","AudioScheduledSourceNode","BaseAudioContext","BiquadFilterNode","GainNode","OscillatorNode","StereoPannerNode","AudioRecorder","AudioManager","useSystemVolume","OscillatorType","BiquadFilterType","ChannelCountMode","ChannelInterpretation","ContextState","WindowType","PeriodicWaveConstraints","IndexSizeError","InvalidAccessError","InvalidStateError","RangeError","NotSupportedError"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,kBAAS;;AAS9C;;AAaA;;AAEA,IACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACL,oBAAoB,EAAE;IACzB,MAAM,IAAIM,KAAK,CACb,iFACF,CAAC;EACH;EAEAN,oBAAoB,CAACO,OAAO,CAAC,CAAC;AAChC;AAEA,SAASC,OAAO,IAAIC,WAAW,QAAQ,uBAAoB;AAC3D,SAASD,OAAO,IAAIE,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASF,OAAO,IAAIG,0BAA0B,QAAQ,sCAAmC;AACzF,SAASH,OAAO,IAAII,YAAY,QAAQ,wBAAqB;AAC7D,SAASJ,OAAO,IAAIK,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASL,OAAO,IAAIM,oBAAoB,QAAQ,gCAA6B;AAC7E,SAASN,OAAO,IAAIO,SAAS,QAAQ,qBAAkB;AACvD,SAASP,OAAO,IAAIQ,YAAY,QAAQ,wBAAqB;AAC7D,SAASR,OAAO,IAAIS,UAAU,QAAQ,sBAAmB;AACzD,SAAST,OAAO,IAAIU,wBAAwB,QAAQ,oCAAiC;AACrF,SAASV,OAAO,IAAIW,gBAAgB,QAAQ,4BAAyB;AACrE,SAASX,OAAO,IAAIY,gBAAgB,QAAQ,4BAAyB;AACrE,SAASZ,OAAO,IAAIa,QAAQ,QAAQ,oBAAiB;AACrD,SAASb,OAAO,IAAIc,cAAc,QAAQ,0BAAuB;AACjE,SAASd,OAAO,IAAIe,gBAAgB,QAAQ,4BAAyB;AACrE,SAASf,OAAO,IAAIgB,aAAa,QAAQ,yBAAsB;AAC/D,SAAShB,OAAO,IAAIiB,YAAY,QAAQ,mBAAU;AAClD,SAASjB,OAAO,IAAIkB,eAAe,QAAQ,2BAAwB;AAEnE,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,YAAY,EACZC,UAAU,EACVC,uBAAuB,QAClB,YAAS;AAEhB,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAU,EACVC,iBAAiB,QACZ,mBAAU","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ import AudioScheduledSourceNode from "./AudioScheduledSourceNode.js";
4
+ import AudioParam from "./AudioParam.js";
5
+ import { InvalidStateError, RangeError } from "../errors/index.js";
6
+ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
7
+ constructor(context, node) {
8
+ super(context, node);
9
+ this.detune = new AudioParam(node.detune, context);
10
+ this.playbackRate = new AudioParam(node.playbackRate, context);
11
+ }
12
+ enqueueBuffer(buffer, bufferId = 0, isLastBuffer = false) {
13
+ this.node.enqueueBuffer(buffer.buffer, bufferId, isLastBuffer);
14
+ }
15
+ start(when = 0, offset = 0) {
16
+ if (when < 0) {
17
+ throw new RangeError(`when must be a finite non-negative number: ${when}`);
18
+ }
19
+ if (offset < 0) {
20
+ throw new RangeError(`offset must be a finite non-negative number: ${offset}`);
21
+ }
22
+ if (this.hasBeenStarted) {
23
+ throw new InvalidStateError('Cannot call start more than once');
24
+ }
25
+ this.hasBeenStarted = true;
26
+ this.node.start(when, offset);
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
+ }
39
+ }
40
+ //# sourceMappingURL=AudioBufferQueueSourceNode.js.map
@@ -0,0 +1 @@
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;EACxBC,iBAAiB,GAAG,IAAIH,iBAAiB,CACxDI,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,QAAqD,EAAE;IACxE,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":[]}
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":[]}
@@ -9,6 +9,7 @@ import AudioBufferSourceNode from "./AudioBufferSourceNode.js";
9
9
  import AudioBuffer from "./AudioBuffer.js";
10
10
  import PeriodicWave from "./PeriodicWave.js";
11
11
  import AnalyserNode from "./AnalyserNode.js";
12
+ import AudioBufferQueueSourceNode from "./AudioBufferQueueSourceNode.js";
12
13
  import { InvalidAccessError, NotSupportedError } from "../errors/index.js";
13
14
  export default class BaseAudioContext {
14
15
  constructor(context) {
@@ -38,6 +39,9 @@ export default class BaseAudioContext {
38
39
  const pitchCorrection = options?.pitchCorrection ?? false;
39
40
  return new AudioBufferSourceNode(this, this.context.createBufferSource(pitchCorrection));
40
41
  }
42
+ createBufferQueueSource() {
43
+ return new AudioBufferQueueSourceNode(this, this.context.createBufferQueueSource());
44
+ }
41
45
  createBuffer(numOfChannels, length, sampleRate) {
42
46
  if (numOfChannels < 1 || numOfChannels >= 32) {
43
47
  throw new NotSupportedError(`The number of channels provided (${numOfChannels}) is outside the range [1, 32]`);
@@ -1 +1 @@
1
- {"version":3,"names":["AudioDestinationNode","OscillatorNode","GainNode","StereoPannerNode","BiquadFilterNode","AudioBufferSourceNode","AudioBuffer","PeriodicWave","AnalyserNode","InvalidAccessError","NotSupportedError","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createOscillator","createGain","createStereoPanner","createBiquadFilter","createBufferSource","options","pitchCorrection","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","arrayBuffer","Uint8Array"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["AudioDestinationNode","OscillatorNode","GainNode","StereoPannerNode","BiquadFilterNode","AudioBufferSourceNode","AudioBuffer","PeriodicWave","AnalyserNode","AudioBufferQueueSourceNode","InvalidAccessError","NotSupportedError","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createOscillator","createGain","createStereoPanner","createBiquadFilter","createBufferSource","options","pitchCorrection","createBufferQueueSource","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","arrayBuffer","Uint8Array"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,7 @@ declare global {
8
8
  }
9
9
  export { default as AudioBuffer } from './core/AudioBuffer';
10
10
  export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
11
+ export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
11
12
  export { default as AudioContext } from './core/AudioContext';
12
13
  export { default as OfflineAudioContext } from './core/OfflineAudioContext';
13
14
  export { default as AudioDestinationNode } from './core/AudioDestinationNode';
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/D,IAAI,yBAAyB,EAAE,CAC7B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,oBAAoB,CAAC;IAE1B,IAAI,mBAAmB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAE3E,IAAI,iBAAiB,EAAE,kBAAkB,CAAC;CAC3C;AAkBD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/D,IAAI,yBAAyB,EAAE,CAC7B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,oBAAoB,CAAC;IAE1B,IAAI,mBAAmB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAE3E,IAAI,iBAAiB,EAAE,kBAAkB,CAAC;CAC3C;AAkBD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { IAudioBufferQueueSourceNode } from '../interfaces';
2
+ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
+ import BaseAudioContext from './BaseAudioContext';
4
+ import AudioBuffer from './AudioBuffer';
5
+ import AudioParam from './AudioParam';
6
+ import { OnPositionChangedEventType } from '../events/types';
7
+ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
8
+ readonly playbackRate: AudioParam;
9
+ readonly detune: AudioParam;
10
+ constructor(context: BaseAudioContext, node: IAudioBufferQueueSourceNode);
11
+ enqueueBuffer(buffer: AudioBuffer, bufferId?: number, isLastBuffer?: boolean): void;
12
+ start(when?: number, offset?: number): void;
13
+ set onPositionChanged(callback: (event: OnPositionChangedEventType) => void);
14
+ set onPositionChangedInterval(value: number);
15
+ }
16
+ //# sourceMappingURL=AudioBufferQueueSourceNode.d.ts.map
@@ -0,0 +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;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 { EventTypeWithValueAndState } from '../events/types';
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
- private readonly audioEventEmitter;
6
+ protected readonly audioEventEmitter: AudioEventEmitter;
6
7
  start(when?: number): void;
7
8
  stop(when?: number): void;
8
- set onended(callback: (event: EventTypeWithValueAndState) => void);
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,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG7D,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC7D,SAAS,CAAC,cAAc,EAAE,OAAO,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAEhC;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,0BAA0B,KAAK,IAAI,EAQvE;CACF"}
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"}
@@ -9,6 +9,7 @@ import AudioBufferSourceNode from './AudioBufferSourceNode';
9
9
  import AudioBuffer from './AudioBuffer';
10
10
  import PeriodicWave from './PeriodicWave';
11
11
  import AnalyserNode from './AnalyserNode';
12
+ import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
12
13
  export default class BaseAudioContext {
13
14
  readonly destination: AudioDestinationNode;
14
15
  readonly sampleRate: number;
@@ -21,6 +22,7 @@ export default class BaseAudioContext {
21
22
  createStereoPanner(): StereoPannerNode;
22
23
  createBiquadFilter(): BiquadFilterNode;
23
24
  createBufferSource(options?: AudioBufferSourceNodeOptions): AudioBufferSourceNode;
25
+ createBufferQueueSource(): AudioBufferQueueSourceNode;
24
26
  createBuffer(numOfChannels: number, length: number, sampleRate: number): AudioBuffer;
25
27
  createPeriodicWave(real: Float32Array, imag: Float32Array, constraints?: PeriodicWaveConstraints): PeriodicWave;
26
28
  createAnalyser(): AnalyserNode;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/BaseAudioContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAElC,OAAO,EAAE,iBAAiB;IAMtC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,CAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB;IASxB,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAW/D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAKtE"}
1
+ {"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/BaseAudioContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAGtE,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAElC,OAAO,EAAE,iBAAiB;IAMtC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,CAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB;IASxB,uBAAuB,IAAI,0BAA0B;IAOrD,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAW/D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAKtE"}
@@ -4,9 +4,14 @@ interface EventEmptyType {
4
4
  export interface EventTypeWithValue {
5
5
  value: number;
6
6
  }
7
- export interface EventTypeWithValueAndState {
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: EventTypeWithValueAndState;
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,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B;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,0BAA0B,CAAC;IAClC,UAAU,EAAE,qBAAqB,CAAC;IAClC,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"}
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"}
@@ -10,6 +10,7 @@ export interface IBaseAudioContext {
10
10
  createStereoPanner(): IStereoPannerNode;
11
11
  createBiquadFilter: () => IBiquadFilterNode;
12
12
  createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
13
+ createBufferQueueSource: () => IAudioBufferQueueSourceNode;
13
14
  createBuffer: (channels: number, length: number, sampleRate: number) => IAudioBuffer;
14
15
  createPeriodicWave: (real: Float32Array, imag: Float32Array, disableNormalization: boolean) => IPeriodicWave;
15
16
  createAnalyser: () => IAnalyserNode;
@@ -72,6 +73,14 @@ export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
72
73
  playbackRate: IAudioParam;
73
74
  start: (when?: number, offset?: number, duration?: number) => void;
74
75
  }
76
+ export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
77
+ detune: IAudioParam;
78
+ playbackRate: IAudioParam;
79
+ enqueueBuffer: (audioBuffer: IAudioBuffer, bufferId: number, isLastBuffer: boolean) => void;
80
+ start: (when?: number, offset?: number) => void;
81
+ onPositionChanged: string;
82
+ onPositionChangedInterval: number;
83
+ }
75
84
  export interface IAudioBuffer {
76
85
  readonly length: number;
77
86
  readonly duration: number;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
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,CACb,WAAW,EAAE,YAAY,EACzB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,KAClB,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGhD,iBAAiB,EAAE,MAAM,CAAC;IAE1B,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9C,eAAe,CACb,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC;IACR,aAAa,CACX,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC;CACT;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,4BAA4B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvE,eAAe,EAAE,CACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,KACjB,IAAI,CAAC;IACV,mBAAmB,EAAE,CACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC;IAEnB,qBAAqB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACrD,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAClD,sBAAsB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IAGjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,IAAI,SAAS,cAAc,EAC/C,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,GACjC,MAAM,CAAC;IACV,wBAAwB,CAAC,IAAI,SAAS,cAAc,EAClD,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC;CACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.6.1-rc.1",
3
+ "version": "0.6.1-rc.3",
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"
package/src/api.ts CHANGED
@@ -39,6 +39,7 @@ if (
39
39
 
40
40
  export { default as AudioBuffer } from './core/AudioBuffer';
41
41
  export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
42
+ export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
42
43
  export { default as AudioContext } from './core/AudioContext';
43
44
  export { default as OfflineAudioContext } from './core/OfflineAudioContext';
44
45
  export { default as AudioDestinationNode } from './core/AudioDestinationNode';
@@ -0,0 +1,71 @@
1
+ import { IAudioBufferQueueSourceNode } from '../interfaces';
2
+ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
+ import BaseAudioContext from './BaseAudioContext';
4
+ import AudioBuffer from './AudioBuffer';
5
+ import AudioParam from './AudioParam';
6
+ import { InvalidStateError, RangeError } from '../errors';
7
+ import { OnPositionChangedEventType } from '../events/types';
8
+
9
+ export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
10
+ readonly playbackRate: AudioParam;
11
+ readonly detune: AudioParam;
12
+
13
+ constructor(context: BaseAudioContext, node: IAudioBufferQueueSourceNode) {
14
+ super(context, node);
15
+
16
+ this.detune = new AudioParam(node.detune, context);
17
+ this.playbackRate = new AudioParam(node.playbackRate, context);
18
+ }
19
+
20
+ public enqueueBuffer(
21
+ buffer: AudioBuffer,
22
+ bufferId: number = 0,
23
+ isLastBuffer: boolean = false
24
+ ): void {
25
+ (this.node as IAudioBufferQueueSourceNode).enqueueBuffer(
26
+ buffer.buffer,
27
+ bufferId,
28
+ isLastBuffer
29
+ );
30
+ }
31
+
32
+ public start(when: number = 0, offset: number = 0): void {
33
+ if (when < 0) {
34
+ throw new RangeError(
35
+ `when must be a finite non-negative number: ${when}`
36
+ );
37
+ }
38
+
39
+ if (offset < 0) {
40
+ throw new RangeError(
41
+ `offset must be a finite non-negative number: ${offset}`
42
+ );
43
+ }
44
+
45
+ if (this.hasBeenStarted) {
46
+ throw new InvalidStateError('Cannot call start more than once');
47
+ }
48
+
49
+ this.hasBeenStarted = true;
50
+ (this.node as IAudioBufferQueueSourceNode).start(when, offset);
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
+ }
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 { EventTypeWithValueAndState } from '../events/types';
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
- private readonly audioEventEmitter = new AudioEventEmitter(
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: EventTypeWithValueAndState) => void) {
45
+ public set onended(callback: (event: OnEndedEventType) => void) {
46
46
  const subscription = this.audioEventEmitter.addAudioEventListener(
47
47
  'ended',
48
48
  callback
@@ -13,6 +13,7 @@ import AudioBufferSourceNode from './AudioBufferSourceNode';
13
13
  import AudioBuffer from './AudioBuffer';
14
14
  import PeriodicWave from './PeriodicWave';
15
15
  import AnalyserNode from './AnalyserNode';
16
+ import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
16
17
  import { InvalidAccessError, NotSupportedError } from '../errors';
17
18
 
18
19
  export default class BaseAudioContext {
@@ -61,6 +62,13 @@ export default class BaseAudioContext {
61
62
  );
62
63
  }
63
64
 
65
+ createBufferQueueSource(): AudioBufferQueueSourceNode {
66
+ return new AudioBufferQueueSourceNode(
67
+ this,
68
+ this.context.createBufferQueueSource()
69
+ );
70
+ }
71
+
64
72
  createBuffer(
65
73
  numOfChannels: number,
66
74
  length: number,
@@ -6,9 +6,15 @@ export interface EventTypeWithValue {
6
6
  value: number;
7
7
  }
8
8
 
9
- export interface EventTypeWithValueAndState {
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: EventTypeWithValueAndState;
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
@@ -19,6 +19,7 @@ export interface IBaseAudioContext {
19
19
  createStereoPanner(): IStereoPannerNode;
20
20
  createBiquadFilter: () => IBiquadFilterNode;
21
21
  createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
22
+ createBufferQueueSource: () => IAudioBufferQueueSourceNode;
22
23
  createBuffer: (
23
24
  channels: number,
24
25
  length: number,
@@ -109,6 +110,23 @@ export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
109
110
  start: (when?: number, offset?: number, duration?: number) => void;
110
111
  }
111
112
 
113
+ export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
114
+ detune: IAudioParam;
115
+ playbackRate: IAudioParam;
116
+
117
+ enqueueBuffer: (
118
+ audioBuffer: IAudioBuffer,
119
+ bufferId: number,
120
+ isLastBuffer: boolean
121
+ ) => void;
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;
128
+ }
129
+
112
130
  export interface IAudioBuffer {
113
131
  readonly length: number;
114
132
  readonly duration: number;