aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/js/media/audio-system.js26
1 files changed, 14 insertions, 12 deletions
diff --git a/ext/js/media/audio-system.js b/ext/js/media/audio-system.js
index 03e68767..c5207341 100644
--- a/ext/js/media/audio-system.js
+++ b/ext/js/media/audio-system.js
@@ -42,18 +42,13 @@ class AudioSystem extends EventDispatcher {
return this._fallbackAudio;
}
- createAudio(url, sourceType) {
- return new Promise((resolve, reject) => {
- const audio = new Audio(url);
- audio.addEventListener('loadeddata', () => {
- if (!this._isAudioValid(audio, sourceType)) {
- reject(new Error('Could not retrieve audio'));
- } else {
- resolve(audio);
- }
- });
- audio.addEventListener('error', () => reject(audio.error));
- });
+ async createAudio(url, sourceType) {
+ const audio = new Audio(url);
+ await this._waitForData(audio);
+ if (!this._isAudioValid(audio, sourceType)) {
+ throw new Error('Could not retrieve audio');
+ }
+ return audio;
}
createTextToSpeechAudio(text, voiceUri) {
@@ -70,6 +65,13 @@ class AudioSystem extends EventDispatcher {
this.trigger('voiceschanged', e);
}
+ _waitForData(audio) {
+ return new Promise((resolve, reject) => {
+ audio.addEventListener('loadeddata', () => resolve());
+ audio.addEventListener('error', () => reject(audio.error));
+ });
+ }
+
_isAudioValid(audio, sourceType) {
switch (sourceType) {
case 'jpod101':