Fix music extension asset loading on safari

This commit is contained in:
Eric Rosenbaum 2018-01-22 10:15:41 -05:00
parent cc1923f982
commit 4778ab8d4f

View file

@ -97,10 +97,23 @@ class Scratch3MusicBlocks {
_loadSound (fileName, index, bufferArray) { _loadSound (fileName, index, bufferArray) {
if (!this.runtime.storage) return; if (!this.runtime.storage) return;
if (!this.runtime.audioEngine) return; if (!this.runtime.audioEngine) return;
if (!this.runtime.audioEngine.audioContext) return;
return this.runtime.storage.load(this.runtime.storage.AssetType.Sound, fileName, 'mp3') return this.runtime.storage.load(this.runtime.storage.AssetType.Sound, fileName, 'mp3')
.then(soundAsset => .then(soundAsset => {
this.runtime.audioEngine.audioContext.decodeAudioData(soundAsset.data.buffer) const context = this.runtime.audioEngine.audioContext;
// Check for newer promise-based API
if (context.decodeAudioData.length === 1) {
return context.decodeAudioData(soundAsset.data.buffer);
} else { // eslint-disable no-else-return
// Fall back to callback API
return new Promise((resolve, reject) =>
context.decodeAudioData(soundAsset.data.buffer,
buffer => resolve(buffer),
error => reject(error)
) )
);
}
})
.then(buffer => { .then(buffer => {
bufferArray[index] = buffer; bufferArray[index] = buffer;
}); });