react-native-audio-api 0.4.7-rc1 → 0.4.8-rc1
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/README.md +2 -2
- package/android/src/main/cpp/core/AudioDecoder.cpp +1 -1
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +13 -3
- package/common/cpp/HostObjects/BaseAudioContextHostObject.h +5 -0
- package/common/cpp/core/AudioBufferSourceNode.cpp +12 -1
- package/common/cpp/core/AudioBufferSourceNode.h +1 -1
- package/common/cpp/core/BaseAudioContext.cpp +5 -0
- package/ios/core/AudioDecoder.mm +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +1 -5
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +10 -4
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/AudioBufferSourceNode.ts +1 -11
- package/src/core/BaseAudioContext.ts +12 -5
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<img src="./
|
|
1
|
+
<img src="./assets/react-native-audio-api-gh-cover.png?v0.0.1" alt="React Native Audio API" width="100%">
|
|
2
2
|
|
|
3
3
|
### React Native Audio API
|
|
4
4
|
|
|
@@ -39,7 +39,7 @@ You can also check out [MDN Web Docs](https://developer.mozilla.org/en-US/docs/W
|
|
|
39
39
|
|
|
40
40
|
## Coverage
|
|
41
41
|
|
|
42
|
-
Our current coverage of Web Audio API specification can be found here: [Web Audio API coverage](
|
|
42
|
+
Our current coverage of Web Audio API specification can be found here: [Web Audio API coverage](https://software-mansion-labs.github.io/react-native-audio-api/other/web-audio-api-coverage).
|
|
43
43
|
|
|
44
44
|
## Examples
|
|
45
45
|
|
|
@@ -25,16 +25,19 @@ class AudioBufferSourceNodeHostObject
|
|
|
25
25
|
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, detune),
|
|
26
26
|
JSI_EXPORT_PROPERTY_GETTER(
|
|
27
27
|
AudioBufferSourceNodeHostObject, playbackRate));
|
|
28
|
+
|
|
28
29
|
addSetters(
|
|
29
30
|
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
|
|
30
|
-
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, buffer)
|
|
31
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, buffer),
|
|
32
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
|
|
33
|
+
JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd));
|
|
31
34
|
|
|
32
35
|
// start method is overridden in this class
|
|
33
36
|
functions_->erase("start");
|
|
34
37
|
|
|
35
38
|
addFunctions(
|
|
36
39
|
JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, start));
|
|
37
|
-
|
|
40
|
+
}
|
|
38
41
|
|
|
39
42
|
JSI_PROPERTY_GETTER(loop) {
|
|
40
43
|
auto audioBufferSourceNode =
|
|
@@ -121,10 +124,17 @@ class AudioBufferSourceNodeHostObject
|
|
|
121
124
|
JSI_HOST_FUNCTION(start) {
|
|
122
125
|
auto when = args[0].getNumber();
|
|
123
126
|
auto offset = args[1].getNumber();
|
|
124
|
-
auto duration = args[2].getNumber();
|
|
125
127
|
|
|
126
128
|
auto audioBufferSourceNode =
|
|
127
129
|
std::static_pointer_cast<AudioBufferSourceNode>(node_);
|
|
130
|
+
|
|
131
|
+
if (args[2].isUndefined()) {
|
|
132
|
+
audioBufferSourceNode->start(when, offset);
|
|
133
|
+
|
|
134
|
+
return jsi::Value::undefined();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
auto duration = args[2].getNumber();
|
|
128
138
|
audioBufferSourceNode->start(when, offset, duration);
|
|
129
139
|
|
|
130
140
|
return jsi::Value::undefined();
|
|
@@ -148,6 +148,11 @@ class BaseAudioContextHostObject : public JsiHostObject {
|
|
|
148
148
|
auto results = context_->decodeAudioDataSource(sourcePath);
|
|
149
149
|
auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(results);
|
|
150
150
|
|
|
151
|
+
if (!results) {
|
|
152
|
+
promise->reject("Failed to decode audio data source");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
151
156
|
promise->resolve([audioBufferHostObject = std::move(audioBufferHostObject)](jsi::Runtime &runtime) {
|
|
152
157
|
return jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
|
|
153
158
|
});
|
|
@@ -17,6 +17,7 @@ AudioBufferSourceNode::AudioBufferSourceNode(BaseAudioContext *context)
|
|
|
17
17
|
loopEnd_(0),
|
|
18
18
|
vReadIndex_(0.0) {
|
|
19
19
|
buffer_ = std::shared_ptr<AudioBuffer>(nullptr);
|
|
20
|
+
alignedBus_ = std::shared_ptr<AudioBus>(nullptr);
|
|
20
21
|
|
|
21
22
|
detuneParam_ = std::make_shared<AudioParam>(0.0, MIN_DETUNE, MAX_DETUNE);
|
|
22
23
|
playbackRateParam_ = std::make_shared<AudioParam>(
|
|
@@ -67,6 +68,7 @@ void AudioBufferSourceNode::setBuffer(
|
|
|
67
68
|
if (!buffer) {
|
|
68
69
|
buffer_ = std::shared_ptr<AudioBuffer>(nullptr);
|
|
69
70
|
alignedBus_ = std::shared_ptr<AudioBus>(nullptr);
|
|
71
|
+
loopEnd_ = 0;
|
|
70
72
|
return;
|
|
71
73
|
}
|
|
72
74
|
|
|
@@ -78,19 +80,28 @@ void AudioBufferSourceNode::setBuffer(
|
|
|
78
80
|
|
|
79
81
|
alignedBus_->zero();
|
|
80
82
|
alignedBus_->sum(buffer_->bus_.get());
|
|
83
|
+
|
|
84
|
+
loopEnd_ = buffer_->getDuration();
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
void AudioBufferSourceNode::start(double when, double offset, double duration) {
|
|
84
88
|
AudioScheduledSourceNode::start(when);
|
|
85
89
|
|
|
90
|
+
if (!buffer_) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
86
94
|
offset = std::min(offset, buffer_->getDuration());
|
|
95
|
+
|
|
87
96
|
if (loop_) {
|
|
88
97
|
offset = std::min(offset, loopEnd_);
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
vReadIndex_ = static_cast<double>(buffer_->getSampleRate() * offset);
|
|
92
101
|
|
|
93
|
-
|
|
102
|
+
if (duration > 0) {
|
|
103
|
+
AudioScheduledSourceNode::stop(when + duration);
|
|
104
|
+
}
|
|
94
105
|
}
|
|
95
106
|
|
|
96
107
|
void AudioBufferSourceNode::processNode(
|
|
@@ -27,7 +27,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
|
|
|
27
27
|
void setLoopEnd(double loopEnd);
|
|
28
28
|
void setBuffer(const std::shared_ptr<AudioBuffer> &buffer);
|
|
29
29
|
|
|
30
|
-
void start(double when, double offset, double duration);
|
|
30
|
+
void start(double when, double offset, double duration = -1);
|
|
31
31
|
|
|
32
32
|
protected:
|
|
33
33
|
void processNode(AudioBus *processingBus, int framesToProcess) override;
|
|
@@ -96,6 +96,11 @@ std::shared_ptr<AnalyserNode> BaseAudioContext::createAnalyser() {
|
|
|
96
96
|
std::shared_ptr<AudioBuffer> BaseAudioContext::decodeAudioDataSource(
|
|
97
97
|
const std::string &path) {
|
|
98
98
|
auto audioBus = audioDecoder_->decodeWithFilePath(path);
|
|
99
|
+
|
|
100
|
+
if (!audioBus) {
|
|
101
|
+
return nullptr;
|
|
102
|
+
}
|
|
103
|
+
|
|
99
104
|
return std::make_shared<AudioBuffer>(audioBus);
|
|
100
105
|
}
|
|
101
106
|
|
package/ios/core/AudioDecoder.mm
CHANGED
|
@@ -14,7 +14,7 @@ AudioBus *AudioDecoder::decodeWithFilePath(const std::string &path) const
|
|
|
14
14
|
ma_result result = ma_decoder_init_file(path.c_str(), &config, &decoder);
|
|
15
15
|
if (result != MA_SUCCESS) {
|
|
16
16
|
NSLog(@"Failed to initialize decoder for file: %s", path.c_str());
|
|
17
|
-
return
|
|
17
|
+
return nullptr;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
ma_uint64 totalFrameCount;
|
|
@@ -56,11 +56,7 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
56
56
|
throw new InvalidStateError('Cannot call start more than once');
|
|
57
57
|
}
|
|
58
58
|
this.hasBeenStarted = true;
|
|
59
|
-
|
|
60
|
-
this.node.start(when, offset, duration);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
this.node.start(when, offset, this.buffer.duration);
|
|
59
|
+
this.node.start(when, offset, duration);
|
|
64
60
|
}
|
|
65
61
|
}
|
|
66
62
|
//# sourceMappingURL=AudioBufferSourceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioParam","InvalidStateError","RangeError","AudioBufferSourceNode","constructor","context","node","detune","playbackRate","buffer","loop","value","loopStart","loopEnd","start","when","offset","duration","hasBeenStarted"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;AACA,OAAOA,wBAAwB,MAAM,+BAA4B;AAEjE,OAAOC,WAAW,MAAM,kBAAe;AACvC,OAAOC,UAAU,MAAM,iBAAc;AACrC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAEzD,eAAe,MAAMC,qBAAqB,SAASL,wBAAwB,CAAC;EAI1EM,WAAWA,CAACC,OAAyB,EAAEC,IAA4B,EAAE;IACnE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIP,UAAU,CAACM,IAAI,CAACC,MAAM,CAAC;IACzC,IAAI,CAACC,YAAY,GAAG,IAAIR,UAAU,CAACM,IAAI,CAACE,YAAY,CAAC;EACvD;EAEA,IAAWC,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACH,IAAI,CAA4BG,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIV,WAAW,CAACU,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAG,IAAI;MACnD;IACF;IAEC,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAGA,MAAM,CAACA,MAAM;EAC9D;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACJ,IAAI,CAA4BI,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACC,KAAc,EAAE;IAC7B,IAAI,CAACL,IAAI,CAA4BI,IAAI,GAAGC,KAAK;EACpD;EAEA,IAAWC,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACN,IAAI,CAA4BM,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACD,KAAa,EAAE;IACjC,IAAI,CAACL,IAAI,CAA4BM,SAAS,GAAGD,KAAK;EACzD;EAEA,IAAWE,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACF,KAAa,EAAE;IAC/B,IAAI,CAACL,IAAI,CAA4BO,OAAO,GAAGF,KAAK;EACvD;EAEOG,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIb,UAAU,CAClB,8CAA8Ca,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAId,UAAU,CAClB,gDAAgDa,IAAI,EACtD,CAAC;IACH;IAEA,IAAIE,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIf,UAAU,CAClB,kDAAkDa,IAAI,EACxD,CAAC;IACH;IAEA,IAAI,IAAI,CAACG,cAAc,EAAE;MACvB,MAAM,IAAIjB,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACiB,cAAc,GAAG,IAAI;
|
|
1
|
+
{"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioParam","InvalidStateError","RangeError","AudioBufferSourceNode","constructor","context","node","detune","playbackRate","buffer","loop","value","loopStart","loopEnd","start","when","offset","duration","hasBeenStarted"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;AACA,OAAOA,wBAAwB,MAAM,+BAA4B;AAEjE,OAAOC,WAAW,MAAM,kBAAe;AACvC,OAAOC,UAAU,MAAM,iBAAc;AACrC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAEzD,eAAe,MAAMC,qBAAqB,SAASL,wBAAwB,CAAC;EAI1EM,WAAWA,CAACC,OAAyB,EAAEC,IAA4B,EAAE;IACnE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIP,UAAU,CAACM,IAAI,CAACC,MAAM,CAAC;IACzC,IAAI,CAACC,YAAY,GAAG,IAAIR,UAAU,CAACM,IAAI,CAACE,YAAY,CAAC;EACvD;EAEA,IAAWC,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACH,IAAI,CAA4BG,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIV,WAAW,CAACU,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAG,IAAI;MACnD;IACF;IAEC,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAGA,MAAM,CAACA,MAAM;EAC9D;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACJ,IAAI,CAA4BI,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACC,KAAc,EAAE;IAC7B,IAAI,CAACL,IAAI,CAA4BI,IAAI,GAAGC,KAAK;EACpD;EAEA,IAAWC,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACN,IAAI,CAA4BM,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACD,KAAa,EAAE;IACjC,IAAI,CAACL,IAAI,CAA4BM,SAAS,GAAGD,KAAK;EACzD;EAEA,IAAWE,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACF,KAAa,EAAE;IAC/B,IAAI,CAACL,IAAI,CAA4BO,OAAO,GAAGF,KAAK;EACvD;EAEOG,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIb,UAAU,CAClB,8CAA8Ca,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAId,UAAU,CAClB,gDAAgDa,IAAI,EACtD,CAAC;IACH;IAEA,IAAIE,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIf,UAAU,CAClB,kDAAkDa,IAAI,EACxD,CAAC;IACH;IAEA,IAAI,IAAI,CAACG,cAAc,EAAE;MACvB,MAAM,IAAIjB,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACiB,cAAc,GAAG,IAAI;IACzB,IAAI,CAACZ,IAAI,CAA4BQ,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;AACF","ignoreList":[]}
|
|
@@ -38,8 +38,8 @@ export default class BaseAudioContext {
|
|
|
38
38
|
return new AudioBufferSourceNode(this, this.context.createBufferSource());
|
|
39
39
|
}
|
|
40
40
|
createBuffer(numOfChannels, length, sampleRate) {
|
|
41
|
-
if (numOfChannels < 1 || numOfChannels
|
|
42
|
-
throw new RangeError(`The number of channels provided (${numOfChannels}) is outside the range [1,
|
|
41
|
+
if (numOfChannels < 1 || numOfChannels >= 32) {
|
|
42
|
+
throw new RangeError(`The number of channels provided (${numOfChannels}) is outside the range [1, 32]`);
|
|
43
43
|
}
|
|
44
44
|
if (length <= 0) {
|
|
45
45
|
throw new RangeError(`The number of frames provided (${length}) is less than or equal to the minimum bound (0)`);
|
|
@@ -64,8 +64,14 @@ export default class BaseAudioContext {
|
|
|
64
64
|
if (sourcePath.startsWith('file://')) {
|
|
65
65
|
sourcePath = sourcePath.replace('file://', '');
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
try {
|
|
68
|
+
const buffer = await this.context.decodeAudioDataSource(sourcePath);
|
|
69
|
+
return new AudioBuffer(buffer);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
// Handle error gracefully, for example log it or throw it further with a custom message
|
|
72
|
+
console.error('Error decoding audio data source:', error);
|
|
73
|
+
throw new Error(`Failed to decode audio data from source: ${sourcePath}.`);
|
|
74
|
+
}
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
77
|
//# sourceMappingURL=BaseAudioContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioDestinationNode","OscillatorNode","GainNode","StereoPannerNode","BiquadFilterNode","AudioBufferSourceNode","AudioBuffer","PeriodicWave","AnalyserNode","InvalidAccessError","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createOscillator","createGain","createStereoPanner","createBiquadFilter","createBufferSource","createBuffer","numOfChannels","length","RangeError","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","buffer"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":";;AAEA,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,QAAQ,oBAAW;AAE9C,eAAe,MAAMC,gBAAgB,CAAC;EAKpCC,WAAWA,CAACC,OAA0B,EAAE;IACtC,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,WAAW,GAAG,IAAIb,oBAAoB,CAAC,IAAI,EAAEY,OAAO,CAACC,WAAW,CAAC;IACtE,IAAI,CAACC,UAAU,GAAGF,OAAO,CAACE,UAAU;EACtC;EAEA,IAAWC,WAAWA,CAAA,EAAW;IAC/B,OAAO,IAAI,CAACH,OAAO,CAACG,WAAW;EACjC;EAEA,IAAWC,KAAKA,CAAA,EAAiB;IAC/B,OAAO,IAAI,CAACJ,OAAO,CAACI,KAAK;EAC3B;EAEAC,gBAAgBA,CAAA,EAAmB;IACjC,OAAO,IAAIhB,cAAc,CAAC,IAAI,EAAE,IAAI,CAACW,OAAO,CAACK,gBAAgB,CAAC,CAAC,CAAC;EAClE;EAEAC,UAAUA,CAAA,EAAa;IACrB,OAAO,IAAIhB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAACU,OAAO,CAACM,UAAU,CAAC,CAAC,CAAC;EACtD;EAEAC,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIhB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAACS,OAAO,CAACO,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAC,kBAAkBA,CAAA,EAAqB;IACrC,OAAO,IAAIhB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAACQ,OAAO,CAACQ,kBAAkB,CAAC,CAAC,CAAC;EACtE;EAEAC,kBAAkBA,CAAA,EAA0B;IAC1C,OAAO,IAAIhB,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAACO,OAAO,CAACS,kBAAkB,CAAC,CAAC,CAAC;EAC3E;EAEAC,YAAYA,CACVC,aAAqB,EACrBC,MAAc,EACdV,UAAkB,EACL;IACb,IAAIS,aAAa,GAAG,CAAC,IAAIA,aAAa,
|
|
1
|
+
{"version":3,"names":["AudioDestinationNode","OscillatorNode","GainNode","StereoPannerNode","BiquadFilterNode","AudioBufferSourceNode","AudioBuffer","PeriodicWave","AnalyserNode","InvalidAccessError","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createOscillator","createGain","createStereoPanner","createBiquadFilter","createBufferSource","createBuffer","numOfChannels","length","RangeError","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","buffer","error","console","Error"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioBufferSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AAGtC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,wBAAwB;IACzE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB;IAOnE,IAAW,MAAM,IAAI,WAAW,GAAG,IAAI,CAMtC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAO3C;IAED,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,OAAO,EAE7B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,MAAM,EAEjC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAE/B;IAEM,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"AudioBufferSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AAGtC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,wBAAwB;IACzE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB;IAOnE,IAAW,MAAM,IAAI,WAAW,GAAG,IAAI,CAMtC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAO3C;IAED,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,OAAO,EAE7B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,MAAM,EAEjC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAE/B;IAEM,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CA0B5E"}
|
|
@@ -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,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAChE,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,IAAI,qBAAqB;IAI3C,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,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,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAChE,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,IAAI,qBAAqB;IAI3C,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAiBtE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.8-rc1",
|
|
4
4
|
"description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -81,16 +81,6 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
this.hasBeenStarted = true;
|
|
84
|
-
|
|
85
|
-
if (duration) {
|
|
86
|
-
(this.node as IAudioBufferSourceNode).start(when, offset, duration);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
(this.node as IAudioBufferSourceNode).start(
|
|
91
|
-
when,
|
|
92
|
-
offset,
|
|
93
|
-
this.buffer!.duration
|
|
94
|
-
);
|
|
84
|
+
(this.node as IAudioBufferSourceNode).start(when, offset, duration);
|
|
95
85
|
}
|
|
96
86
|
}
|
|
@@ -55,9 +55,9 @@ export default class BaseAudioContext {
|
|
|
55
55
|
length: number,
|
|
56
56
|
sampleRate: number
|
|
57
57
|
): AudioBuffer {
|
|
58
|
-
if (numOfChannels < 1 || numOfChannels
|
|
58
|
+
if (numOfChannels < 1 || numOfChannels >= 32) {
|
|
59
59
|
throw new RangeError(
|
|
60
|
-
`The number of channels provided (${numOfChannels}) is outside the range [1,
|
|
60
|
+
`The number of channels provided (${numOfChannels}) is outside the range [1, 32]`
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -106,8 +106,15 @@ export default class BaseAudioContext {
|
|
|
106
106
|
sourcePath = sourcePath.replace('file://', '');
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
try {
|
|
110
|
+
const buffer = await this.context.decodeAudioDataSource(sourcePath);
|
|
111
|
+
return new AudioBuffer(buffer);
|
|
112
|
+
} catch (error) {
|
|
113
|
+
// Handle error gracefully, for example log it or throw it further with a custom message
|
|
114
|
+
console.error('Error decoding audio data source:', error);
|
|
115
|
+
throw new Error(
|
|
116
|
+
`Failed to decode audio data from source: ${sourcePath}.`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
112
119
|
}
|
|
113
120
|
}
|