Catch ADPCM decode error, and use an empty sound

This commit is contained in:
Eric Rosenbaum 2019-01-10 16:52:43 -05:00
parent 9a2332e56b
commit 29b2e7ebc7

View file

@ -156,7 +156,7 @@ class AudioEngine {
.catch(() => { .catch(() => {
// If the file is empty, create an empty sound // If the file is empty, create an empty sound
if (sound.data.length === 0) { if (sound.data.length === 0) {
return Promise.resolve(this.audioContext.createBuffer(1, 1, this.audioContext.sampleRate)); return Promise.resolve(this._emptySound());
} }
// The audio context failed to parse the sound data // The audio context failed to parse the sound data
@ -165,7 +165,8 @@ class AudioEngine {
// First we need to create another copy of our original data // First we need to create another copy of our original data
const bufferCopy2 = sound.data.buffer.slice(0); const bufferCopy2 = sound.data.buffer.slice(0);
// Try decoding as adpcm // Try decoding as adpcm
return new ADPCMSoundDecoder(this.audioContext).decode(bufferCopy2); return new ADPCMSoundDecoder(this.audioContext).decode(bufferCopy2)
.catch(() => Promise.resolve(this._emptySound()));
}) })
.then( .then(
buffer => ([soundId, buffer]), buffer => ([soundId, buffer]),
@ -177,6 +178,14 @@ class AudioEngine {
return decoding; return decoding;
} }
/**
* An empty sound buffer, for use when we are unable to decode a sound file.
* @returns {AudioBuffer} - an empty audio buffer.
*/
_emptySound () {
return this.audioContext.createBuffer(1, 1, this.audioContext.sampleRate);
}
/** /**
* Decode a sound, decompressing it into audio samples. * Decode a sound, decompressing it into audio samples.
* *