react-native-audio-api 0.6.0 → 0.6.1-rc.2
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 +76 -0
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +9 -0
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +8 -0
- package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +1 -0
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +190 -0
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +62 -0
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +9 -1
- package/ios/audioapi/ios/AudioAPIModule.mm +5 -4
- package/lib/commonjs/api.js +7 -0
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +35 -0
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -0
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +4 -0
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/module/api.js +1 -0
- package/lib/module/api.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +29 -0
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -0
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +4 -0
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/typescript/api.d.ts +1 -0
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +13 -0
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -0
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +2 -2
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +5 -1
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +7 -0
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api.ts +1 -0
- package/src/core/AudioBufferQueueSourceNode.ts +49 -0
- package/src/core/AudioScheduledSourceNode.ts +2 -2
- package/src/core/BaseAudioContext.ts +8 -0
- package/src/events/types.ts +6 -1
- package/src/interfaces.ts +9 -0
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
// start method is overridden in this class
|
|
25
|
+
functions_->erase("start");
|
|
26
|
+
|
|
27
|
+
addFunctions(
|
|
28
|
+
JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, start),
|
|
29
|
+
JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, enqueueBuffer));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
JSI_PROPERTY_GETTER(detune) {
|
|
33
|
+
auto audioBufferSourceNode =
|
|
34
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
35
|
+
auto detune = audioBufferSourceNode->getDetuneParam();
|
|
36
|
+
auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
|
|
37
|
+
return jsi::Object::createFromHostObject(runtime, detuneHostObject);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JSI_PROPERTY_GETTER(playbackRate) {
|
|
41
|
+
auto audioBufferSourceNode =
|
|
42
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
43
|
+
auto playbackRate = audioBufferSourceNode->getPlaybackRateParam();
|
|
44
|
+
auto playbackRateHostObject =
|
|
45
|
+
std::make_shared<AudioParamHostObject>(playbackRate);
|
|
46
|
+
return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
JSI_HOST_FUNCTION(start) {
|
|
50
|
+
auto when = args[0].getNumber();
|
|
51
|
+
auto offset = args[1].getNumber();
|
|
52
|
+
|
|
53
|
+
auto audioBufferQueueSourceNode =
|
|
54
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
55
|
+
|
|
56
|
+
audioBufferQueueSourceNode->start(when, offset);
|
|
57
|
+
|
|
58
|
+
return jsi::Value::undefined();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
JSI_HOST_FUNCTION(enqueueBuffer) {
|
|
62
|
+
auto audioBufferQueueSourceNode =
|
|
63
|
+
std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
|
|
64
|
+
|
|
65
|
+
auto audioBufferHostObject =
|
|
66
|
+
args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
67
|
+
|
|
68
|
+
auto isLastBuffer = args[1].asBool();
|
|
69
|
+
|
|
70
|
+
audioBufferQueueSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_, isLastBuffer);
|
|
71
|
+
|
|
72
|
+
return jsi::Value::undefined();
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
} // 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(
|
|
@@ -0,0 +1,190 @@
|
|
|
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/utils/AudioArray.h>
|
|
8
|
+
#include <audioapi/utils/AudioBus.h>
|
|
9
|
+
|
|
10
|
+
namespace audioapi {
|
|
11
|
+
|
|
12
|
+
AudioBufferQueueSourceNode::AudioBufferQueueSourceNode(
|
|
13
|
+
BaseAudioContext *context)
|
|
14
|
+
: AudioScheduledSourceNode(context), vReadIndex_(0.0) {
|
|
15
|
+
buffers_ = {};
|
|
16
|
+
|
|
17
|
+
detuneParam_ = std::make_shared<AudioParam>(
|
|
18
|
+
0.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
|
|
19
|
+
playbackRateParam_ = std::make_shared<AudioParam>(
|
|
20
|
+
1.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
|
|
21
|
+
|
|
22
|
+
playbackRateBus_ = std::make_shared<AudioBus>(
|
|
23
|
+
RENDER_QUANTUM_SIZE * 3, channelCount_, context_->getSampleRate());
|
|
24
|
+
|
|
25
|
+
stretch_ =
|
|
26
|
+
std::make_shared<signalsmith::stretch::SignalsmithStretch<float>>();
|
|
27
|
+
stretch_->presetDefault(channelCount_, context_->getSampleRate(), true);
|
|
28
|
+
|
|
29
|
+
isInitialized_ = true;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
AudioBufferQueueSourceNode::~AudioBufferQueueSourceNode() {
|
|
33
|
+
Locker locker(getBufferLock());
|
|
34
|
+
|
|
35
|
+
buffers_ = {};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
std::shared_ptr<AudioParam> AudioBufferQueueSourceNode::getDetuneParam() const {
|
|
39
|
+
return detuneParam_;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
std::shared_ptr<AudioParam> AudioBufferQueueSourceNode::getPlaybackRateParam()
|
|
43
|
+
const {
|
|
44
|
+
return playbackRateParam_;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void AudioBufferQueueSourceNode::start(double when, double offset) {
|
|
48
|
+
AudioScheduledSourceNode::start(when);
|
|
49
|
+
|
|
50
|
+
vReadIndex_ = static_cast<double>(context_->getSampleRate() * offset);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void AudioBufferQueueSourceNode::enqueueBuffer(
|
|
54
|
+
const std::shared_ptr<AudioBuffer> &buffer,
|
|
55
|
+
bool isLastBuffer) {
|
|
56
|
+
auto locker = Locker(getBufferLock());
|
|
57
|
+
buffers_.push(buffer);
|
|
58
|
+
|
|
59
|
+
isLastBuffer_ = isLastBuffer;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void AudioBufferQueueSourceNode::disable() {
|
|
63
|
+
AudioScheduledSourceNode::disable();
|
|
64
|
+
buffers_ = {};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
std::mutex &AudioBufferQueueSourceNode::getBufferLock() {
|
|
68
|
+
return bufferLock_;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
void AudioBufferQueueSourceNode::processNode(
|
|
72
|
+
const std::shared_ptr<AudioBus> &processingBus,
|
|
73
|
+
int framesToProcess) {
|
|
74
|
+
if (auto locker = Locker::tryLock(getBufferLock())) {
|
|
75
|
+
// No audio data to fill, zero the output and return.
|
|
76
|
+
if (buffers_.empty()) {
|
|
77
|
+
processingBus->zero();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
processWithPitchCorrection(processingBus, framesToProcess);
|
|
82
|
+
|
|
83
|
+
handleStopScheduled();
|
|
84
|
+
} else {
|
|
85
|
+
processingBus->zero();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
double AudioBufferQueueSourceNode::getStopTime() const {
|
|
90
|
+
return dsp::sampleFrameToTime(
|
|
91
|
+
static_cast<int>(vReadIndex_), context_->getSampleRate());
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Helper functions
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
void AudioBufferQueueSourceNode::processWithPitchCorrection(
|
|
99
|
+
const std::shared_ptr<AudioBus> &processingBus,
|
|
100
|
+
int framesToProcess) {
|
|
101
|
+
size_t startOffset = 0;
|
|
102
|
+
size_t offsetLength = 0;
|
|
103
|
+
|
|
104
|
+
auto time = context_->getCurrentTime();
|
|
105
|
+
auto playbackRate = std::clamp(
|
|
106
|
+
playbackRateParam_->processKRateParam(framesToProcess, time), 0.0f, 3.0f);
|
|
107
|
+
auto detune = std::clamp(
|
|
108
|
+
detuneParam_->processKRateParam(framesToProcess, time) / 100.0f,
|
|
109
|
+
-12.0f,
|
|
110
|
+
12.0f);
|
|
111
|
+
|
|
112
|
+
playbackRateBus_->zero();
|
|
113
|
+
|
|
114
|
+
updatePlaybackInfo(processingBus, framesToProcess, startOffset, offsetLength);
|
|
115
|
+
|
|
116
|
+
if (playbackRate == 0.0f || (!isPlaying() && !isStopScheduled())) {
|
|
117
|
+
processingBus->zero();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
auto framesNeededToStretch =
|
|
122
|
+
static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
|
|
123
|
+
auto stretchedStartOffset =
|
|
124
|
+
static_cast<size_t>(static_cast<float>(startOffset) * playbackRate);
|
|
125
|
+
auto stretchedOffsetLength =
|
|
126
|
+
static_cast<size_t>(static_cast<float>(offsetLength) * playbackRate);
|
|
127
|
+
|
|
128
|
+
processWithoutInterpolation(
|
|
129
|
+
playbackRateBus_, stretchedStartOffset, stretchedOffsetLength);
|
|
130
|
+
|
|
131
|
+
stretch_->process(
|
|
132
|
+
playbackRateBus_.get()[0],
|
|
133
|
+
framesNeededToStretch,
|
|
134
|
+
processingBus.get()[0],
|
|
135
|
+
framesToProcess);
|
|
136
|
+
|
|
137
|
+
if (detune != 0.0f) {
|
|
138
|
+
stretch_->setTransposeSemitones(detune);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
void AudioBufferQueueSourceNode::processWithoutInterpolation(
|
|
143
|
+
const std::shared_ptr<AudioBus> &processingBus,
|
|
144
|
+
size_t startOffset,
|
|
145
|
+
size_t offsetLength) {
|
|
146
|
+
auto readIndex = static_cast<size_t>(vReadIndex_);
|
|
147
|
+
size_t writeIndex = startOffset;
|
|
148
|
+
|
|
149
|
+
auto buffer = buffers_.front();
|
|
150
|
+
size_t framesLeft = offsetLength;
|
|
151
|
+
|
|
152
|
+
while (framesLeft > 0) {
|
|
153
|
+
size_t framesToEnd = buffer->getLength() - readIndex;
|
|
154
|
+
size_t framesToCopy = std::min(framesToEnd, framesLeft);
|
|
155
|
+
framesToCopy = framesToCopy > 0 ? framesToCopy : 0;
|
|
156
|
+
|
|
157
|
+
assert(readIndex >= 0);
|
|
158
|
+
assert(writeIndex >= 0);
|
|
159
|
+
assert(writeIndex + framesToCopy <= processingBus->getSize());
|
|
160
|
+
|
|
161
|
+
processingBus->copy(
|
|
162
|
+
buffer->bus_.get(), readIndex, writeIndex, framesToCopy);
|
|
163
|
+
|
|
164
|
+
writeIndex += framesToCopy;
|
|
165
|
+
readIndex += framesToCopy;
|
|
166
|
+
framesLeft -= framesToCopy;
|
|
167
|
+
|
|
168
|
+
if (readIndex >= buffer->getLength()) {
|
|
169
|
+
buffers_.pop();
|
|
170
|
+
|
|
171
|
+
if (buffers_.empty()) {
|
|
172
|
+
processingBus->zero(writeIndex, framesLeft);
|
|
173
|
+
readIndex = 0;
|
|
174
|
+
|
|
175
|
+
if (isLastBuffer_) {
|
|
176
|
+
playbackState_ = PlaybackState::STOP_SCHEDULED;
|
|
177
|
+
}
|
|
178
|
+
break;
|
|
179
|
+
} else {
|
|
180
|
+
buffer = buffers_.front();
|
|
181
|
+
readIndex = 0;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// update reading index for next render quantum
|
|
187
|
+
vReadIndex_ = static_cast<double>(readIndex);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,62 @@
|
|
|
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, bool isLastBuffer);
|
|
28
|
+
void disable() override;
|
|
29
|
+
|
|
30
|
+
protected:
|
|
31
|
+
std::mutex &getBufferLock();
|
|
32
|
+
void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
|
|
33
|
+
double getStopTime() const override;
|
|
34
|
+
|
|
35
|
+
private:
|
|
36
|
+
std::mutex bufferLock_;
|
|
37
|
+
|
|
38
|
+
// pitch correction
|
|
39
|
+
std::shared_ptr<signalsmith::stretch::SignalsmithStretch<float>> stretch_;
|
|
40
|
+
std::shared_ptr<AudioBus> playbackRateBus_;
|
|
41
|
+
|
|
42
|
+
// k-rate params
|
|
43
|
+
std::shared_ptr<AudioParam> detuneParam_;
|
|
44
|
+
std::shared_ptr<AudioParam> playbackRateParam_;
|
|
45
|
+
|
|
46
|
+
// internal helper
|
|
47
|
+
double vReadIndex_;
|
|
48
|
+
|
|
49
|
+
// User provided buffers
|
|
50
|
+
std::queue<std::shared_ptr<AudioBuffer>> buffers_;
|
|
51
|
+
bool isLastBuffer_ = false;
|
|
52
|
+
|
|
53
|
+
void processWithPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
|
|
54
|
+
int framesToProcess);
|
|
55
|
+
|
|
56
|
+
void processWithoutInterpolation(
|
|
57
|
+
const std::shared_ptr<AudioBus>& processingBus,
|
|
58
|
+
size_t startOffset,
|
|
59
|
+
size_t offsetLength);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
} // namespace audioapi
|
|
@@ -144,7 +144,15 @@ void AudioScheduledSourceNode::updatePlaybackInfo(
|
|
|
144
144
|
void AudioScheduledSourceNode::disable() {
|
|
145
145
|
AudioNode::disable();
|
|
146
146
|
|
|
147
|
-
std::
|
|
147
|
+
std::string state = "stopped";
|
|
148
|
+
|
|
149
|
+
// if it has not been stopped, it is ended
|
|
150
|
+
if (stopTime_ < 0) {
|
|
151
|
+
state = "ended";
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
std::unordered_map<std::string, EventValue> body = {
|
|
155
|
+
{"value", getStopTime()}, {"state", state}};
|
|
148
156
|
|
|
149
157
|
context_->audioEventHandlerRegistry_->invokeHandlerWithEventBody(
|
|
150
158
|
"ended", onEndedCallbackId_, body);
|
|
@@ -115,15 +115,16 @@ RCT_EXPORT_METHOD(observeVolumeChanges : (BOOL)enabled)
|
|
|
115
115
|
[self.notificationManager observeVolumeChanges:(BOOL)enabled];
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
RCT_EXPORT_METHOD(
|
|
119
|
-
|
|
118
|
+
RCT_EXPORT_METHOD(
|
|
119
|
+
requestRecordingPermissions : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)
|
|
120
|
+
reject)
|
|
120
121
|
{
|
|
121
122
|
NSString *res = [self.audioSessionManager requestRecordingPermissions];
|
|
122
123
|
resolve(res);
|
|
123
124
|
}
|
|
124
125
|
|
|
125
|
-
RCT_EXPORT_METHOD(
|
|
126
|
-
|
|
126
|
+
RCT_EXPORT_METHOD(
|
|
127
|
+
checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
127
128
|
{
|
|
128
129
|
NSString *res = [self.audioSessionManager checkRecordingPermissions];
|
|
129
130
|
resolve(res);
|
package/lib/commonjs/api.js
CHANGED
|
@@ -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"));
|
package/lib/commonjs/api.js.map
CHANGED
|
@@ -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":"
|
|
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,35 @@
|
|
|
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, isLastBuffer = false) {
|
|
18
|
+
this.node.enqueueBuffer(buffer.buffer, 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
|
+
exports.default = AudioBufferQueueSourceNode;
|
|
35
|
+
//# 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","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;AAE3C,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,YAAqB,GAAG,KAAK,EACvB;IACL,IAAI,CAACN,IAAI,CAAiCI,aAAa,CACtDC,MAAM,CAACA,MAAM,EACbC,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,CAACX,IAAI,CAAiCO,KAAK,CAACC,IAAI,EAAEC,MAAM,CAAC;EAChE;AACF;AAACI,OAAA,CAAAlB,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,
|
|
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":[]}
|
|
@@ -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,
|
|
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":"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","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";
|
package/lib/module/api.js.map
CHANGED
|
@@ -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,
|
|
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,29 @@
|
|
|
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, isLastBuffer = false) {
|
|
13
|
+
this.node.enqueueBuffer(buffer.buffer, 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
|
+
//# sourceMappingURL=AudioBufferQueueSourceNode.js.map
|
|
@@ -0,0 +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;AAEzD,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,YAAqB,GAAG,KAAK,EACvB;IACL,IAAI,CAACL,IAAI,CAAiCG,aAAa,CACtDC,MAAM,CAACA,MAAM,EACbC,YACF,CAAC;EACH;EAEOC,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAQ;IACvD,IAAID,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIX,UAAU,CAClB,8CAA8CW,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIZ,UAAU,CAClB,gDAAgDY,MAAM,EACxD,CAAC;IACH;IAEA,IAAI,IAAI,CAACC,cAAc,EAAE;MACvB,MAAM,IAAId,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACc,cAAc,GAAG,IAAI;IACzB,IAAI,CAACT,IAAI,CAAiCM,KAAK,CAACC,IAAI,EAAEC,MAAM,CAAC;EAChE;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,
|
|
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":[]}
|
|
@@ -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":";;AAMA,OAAOA,oBAAoB,MAAM,2BAAwB;AACzD,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,OAAOC,QAAQ,MAAM,eAAY;AACjC,OAAOC,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,qBAAqB,MAAM,4BAAyB;AAC3D,OAAOC,WAAW,MAAM,kBAAe;AACvC,OAAOC,YAAY,MAAM,mBAAgB;AACzC,OAAOC,YAAY,MAAM,mBAAgB;AACzC,SAASC,kBAAkB,EAAEC,iBAAiB,QAAQ,oBAAW;AAEjE,eAAe,MAAMC,gBAAgB,CAAC;EAKpCC,WAAWA,CAACC,OAA0B,EAAE;IACtC,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,WAAW,GAAG,
|
|
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":[]}
|
package/lib/typescript/api.d.ts
CHANGED
|
@@ -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,13 @@
|
|
|
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
|
+
export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
|
|
7
|
+
readonly playbackRate: AudioParam;
|
|
8
|
+
readonly detune: AudioParam;
|
|
9
|
+
constructor(context: BaseAudioContext, node: IAudioBufferQueueSourceNode);
|
|
10
|
+
enqueueBuffer(buffer: AudioBuffer, isLastBuffer?: boolean): void;
|
|
11
|
+
start(when?: number, offset?: number): void;
|
|
12
|
+
}
|
|
13
|
+
//# 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;AAGtC,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,YAAY,GAAE,OAAe,GAC5B,IAAI;IAOA,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;CAoBzD"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
-
import {
|
|
2
|
+
import { EventTypeWithValueAndState } from '../events/types';
|
|
3
3
|
export default class AudioScheduledSourceNode extends AudioNode {
|
|
4
4
|
protected hasBeenStarted: boolean;
|
|
5
5
|
private readonly audioEventEmitter;
|
|
6
6
|
start(when?: number): void;
|
|
7
7
|
stop(when?: number): void;
|
|
8
|
-
set onended(callback: (event:
|
|
8
|
+
set onended(callback: (event: EventTypeWithValueAndState) => void);
|
|
9
9
|
}
|
|
10
10
|
//# 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,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"}
|
|
@@ -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;
|
|
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,6 +4,10 @@ interface EventEmptyType {
|
|
|
4
4
|
export interface EventTypeWithValue {
|
|
5
5
|
value: number;
|
|
6
6
|
}
|
|
7
|
+
export interface EventTypeWithValueAndState {
|
|
8
|
+
value: number;
|
|
9
|
+
state: 'stopped' | 'ended';
|
|
10
|
+
}
|
|
7
11
|
interface OnInterruptionEventType {
|
|
8
12
|
type: 'ended' | 'began';
|
|
9
13
|
shouldResume: boolean;
|
|
@@ -34,7 +38,7 @@ export interface OnAudioReadyEventType {
|
|
|
34
38
|
when: number;
|
|
35
39
|
}
|
|
36
40
|
interface AudioAPIEvents {
|
|
37
|
-
ended:
|
|
41
|
+
ended: EventTypeWithValueAndState;
|
|
38
42
|
audioReady: OnAudioReadyEventType;
|
|
39
43
|
audioError: EventEmptyType;
|
|
40
44
|
systemStateChanged: EventEmptyType;
|
|
@@ -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,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,
|
|
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"}
|
|
@@ -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,12 @@ 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, isLastBuffer: boolean) => void;
|
|
80
|
+
start: (when?: number, offset?: number) => void;
|
|
81
|
+
}
|
|
75
82
|
export interface IAudioBuffer {
|
|
76
83
|
readonly length: number;
|
|
77
84
|
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":"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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.
|
|
3
|
+
"version": "0.6.1-rc.2",
|
|
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,49 @@
|
|
|
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
|
+
|
|
8
|
+
export default class AudioBufferQueueSourceNode extends AudioScheduledSourceNode {
|
|
9
|
+
readonly playbackRate: AudioParam;
|
|
10
|
+
readonly detune: AudioParam;
|
|
11
|
+
|
|
12
|
+
constructor(context: BaseAudioContext, node: IAudioBufferQueueSourceNode) {
|
|
13
|
+
super(context, node);
|
|
14
|
+
|
|
15
|
+
this.detune = new AudioParam(node.detune, context);
|
|
16
|
+
this.playbackRate = new AudioParam(node.playbackRate, context);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public enqueueBuffer(
|
|
20
|
+
buffer: AudioBuffer,
|
|
21
|
+
isLastBuffer: boolean = false
|
|
22
|
+
): void {
|
|
23
|
+
(this.node as IAudioBufferQueueSourceNode).enqueueBuffer(
|
|
24
|
+
buffer.buffer,
|
|
25
|
+
isLastBuffer
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public start(when: number = 0, offset: number = 0): void {
|
|
30
|
+
if (when < 0) {
|
|
31
|
+
throw new RangeError(
|
|
32
|
+
`when must be a finite non-negative number: ${when}`
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (offset < 0) {
|
|
37
|
+
throw new RangeError(
|
|
38
|
+
`offset must be a finite non-negative number: ${offset}`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (this.hasBeenStarted) {
|
|
43
|
+
throw new InvalidStateError('Cannot call start more than once');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
this.hasBeenStarted = true;
|
|
47
|
+
(this.node as IAudioBufferQueueSourceNode).start(when, offset);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IAudioScheduledSourceNode } from '../interfaces';
|
|
2
2
|
import AudioNode from './AudioNode';
|
|
3
3
|
import { InvalidStateError, RangeError } from '../errors';
|
|
4
|
-
import {
|
|
4
|
+
import { EventTypeWithValueAndState } from '../events/types';
|
|
5
5
|
import { AudioEventEmitter } from '../events';
|
|
6
6
|
|
|
7
7
|
export default class AudioScheduledSourceNode extends AudioNode {
|
|
@@ -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: EventTypeWithValueAndState) => 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,
|
package/src/events/types.ts
CHANGED
|
@@ -6,6 +6,11 @@ export interface EventTypeWithValue {
|
|
|
6
6
|
value: number;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
export interface EventTypeWithValueAndState {
|
|
10
|
+
value: number;
|
|
11
|
+
state: 'stopped' | 'ended';
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
interface OnInterruptionEventType {
|
|
10
15
|
type: 'ended' | 'began';
|
|
11
16
|
shouldResume: boolean;
|
|
@@ -40,7 +45,7 @@ export interface OnAudioReadyEventType {
|
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
interface AudioAPIEvents {
|
|
43
|
-
ended:
|
|
48
|
+
ended: EventTypeWithValueAndState;
|
|
44
49
|
audioReady: OnAudioReadyEventType;
|
|
45
50
|
audioError: EventEmptyType; // to change
|
|
46
51
|
systemStateChanged: EventEmptyType; // to change
|
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,14 @@ 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: (audioBuffer: IAudioBuffer, isLastBuffer: boolean) => void;
|
|
118
|
+
start: (when?: number, offset?: number) => void;
|
|
119
|
+
}
|
|
120
|
+
|
|
112
121
|
export interface IAudioBuffer {
|
|
113
122
|
readonly length: number;
|
|
114
123
|
readonly duration: number;
|