Skip to content

Commit d685ad8

Browse files
committedJan 10, 2018
Fix multiple files creation
1 parent 3a22469 commit d685ad8

File tree

4 files changed

+33
-9
lines changed

4 files changed

+33
-9
lines changed
 

‎index.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,16 @@ function Audio(source, options) {
6868
this.buffer = source
6969
}
7070

71-
// audiobuffer case
72-
else if (isAudioBuffer(source)) {
73-
this.buffer = new AudioBufferList(source)
74-
}
75-
7671
// other Audio instance
7772
else if (source instanceof Audio) {
7873
this.buffer = source.buffer.clone()
7974
}
8075

76+
// audiobuffer case
77+
else if (isAudioBuffer(source)) {
78+
this.buffer = new AudioBufferList(source)
79+
}
80+
8181
// array with malformed data
8282
else if (isMultisource(source)) {
8383
throw Error('Bad argument. Use `Audio.from` to create joined audio.')

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"compute-qmean": "^1.0.0",
5454
"decibels": "^2.0.0",
5555
"fourier-transform": "^1.0.2",
56-
"is-audio-buffer": "^1.0.11",
56+
"is-audio-buffer": "^1.1.0",
5757
"is-browser": "^2.0.1",
5858
"is-promise": "^2.1.0",
5959
"is-relative": "^1.0.0",

‎src/core.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ Audio.load = function load (source, callback) {
136136
// if source is cached but loading - just clone when loaded
137137
if (isPromise(Audio.cache[source])) {
138138
promise = Audio.cache[source].then(audio => {
139-
audio = Audio(audio)
139+
// in order to avoid fetching modified source, we clone cached source
140+
audio = Audio(Audio.cache[source])
141+
140142
callback && callback(null, audio)
141143
return Promise.resolve(audio)
142144
}, error => {
@@ -154,7 +156,10 @@ Audio.load = function load (source, callback) {
154156
else {
155157
promise = loadAudio(source).then(audioBuffer => {
156158
let audio = Audio(audioBuffer)
157-
Audio.cache[source] = audio
159+
160+
// since user may modify original audio later, we have to put clone into cache
161+
Audio.cache[source] = Audio(audio)
162+
158163
callback && callback(null, audio)
159164
return Promise.resolve(audio)
160165
}, error => {

‎test/creation.js

+20-1
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,30 @@ t('load caching', t => {
221221

222222
//put into cache
223223
Audio.load(localWav).then((audio) => {
224+
a = audio
225+
226+
a.slice(0, 1).save('x.wav', e => {
227+
if (!isBrowser) {
228+
let p = __dirname + path.sep + 'x.wav'
229+
t.ok(fs.existsSync(p))
230+
fs.unlinkSync(p);
231+
}
232+
})
233+
234+
224235
t.ok(audio)
225236
})
226237

227238
//load once first item is loaded
228-
Audio.load(localWav).then((audio) => {
239+
Audio.load(localWav, (err, audio) => {
240+
audio.slice(1, 2).save('y.wav', e => {
241+
if (!isBrowser) {
242+
let p = __dirname + path.sep + 'y.wav'
243+
t.ok(fs.existsSync(p))
244+
fs.unlinkSync(p);
245+
}
246+
})
247+
229248
t.ok(Object.keys(Audio.cache).length)
230249
t.ok(audio instanceof Audio)
231250
t.notEqual(audio, a)

0 commit comments

Comments
 (0)
Please sign in to comment.