diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-01-17 23:05:15 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-17 23:05:15 -0500 | 
| commit | 887150e01257af0b5deb472263de116cac7d0c1c (patch) | |
| tree | ab3b17be658da6209d7c497ca956762a45354228 | |
| parent | d21de9df0052d89bea09e947c312e3694cc64920 (diff) | |
Audio system improvements (#1268)
* Simplify API
* Move fallback audio
| -rw-r--r-- | ext/bg/js/settings/audio-controller.js | 4 | ||||
| -rw-r--r-- | ext/mixed/js/audio-system.js | 18 | ||||
| -rw-r--r-- | ext/mixed/js/display.js | 14 | 
3 files changed, 18 insertions, 18 deletions
| diff --git a/ext/bg/js/settings/audio-controller.js b/ext/bg/js/settings/audio-controller.js index 200a158d..7c9e77f6 100644 --- a/ext/bg/js/settings/audio-controller.js +++ b/ext/bg/js/settings/audio-controller.js @@ -22,9 +22,7 @@  class AudioController {      constructor(settingsController) {          this._settingsController = settingsController; -        this._audioSystem = new AudioSystem({ -            cacheSize: 0 -        }); +        this._audioSystem = new AudioSystem(false);          this._audioSourceContainer = null;          this._audioSourceAddButton = null;          this._audioSourceEntries = []; diff --git a/ext/mixed/js/audio-system.js b/ext/mixed/js/audio-system.js index 7ae8efdc..19c85690 100644 --- a/ext/mixed/js/audio-system.js +++ b/ext/mixed/js/audio-system.js @@ -18,12 +18,13 @@  /* global   * CacheMap   * TextToSpeechAudio + * api   */  class AudioSystem { -    constructor({getAudioInfo, cacheSize=32}) { -        this._cache = new CacheMap(cacheSize); -        this._getAudioInfo = getAudioInfo; +    constructor(useCache) { +        this._cache = new CacheMap(useCache ? 32 : 0); +        this._fallbackAudio = null;      }      prepare() { @@ -81,6 +82,13 @@ class AudioSystem {          throw new Error('Could not create audio');      } +    getFallbackAudio() { +        if (this._fallbackAudio === null) { +            this._fallbackAudio = new Audio('/mixed/mp3/button.mp3'); +        } +        return this._fallbackAudio; +    } +      createAudio(url) {          return new Promise((resolve, reject) => {              const audio = new Audio(url); @@ -105,6 +113,10 @@ class AudioSystem {      // Private +    async _getAudioInfo(source, expression, reading, details) { +        return await api.getDefinitionAudioInfo(source, expression, reading, details); +    } +      _isAudioValid(audio) {          const duration = audio.duration;          return ( diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 3c7deefe..0b0236da 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -46,10 +46,7 @@ class Display extends EventDispatcher {          this._options = null;          this._index = 0;          this._audioPlaying = null; -        this._audioFallback = null; -        this._audioSystem = new AudioSystem({ -            getAudioInfo: this._getAudioInfo.bind(this) -        }); +        this._audioSystem = new AudioSystem(true);          this._styleNode = null;          this._eventListeners = new EventListenerCollection();          this._setContentToken = null; @@ -1234,10 +1231,7 @@ class Display extends EventDispatcher {                  ({audio, index} = await this._audioSystem.createDefinitionAudio(sources, expression, reading, {textToSpeechVoice, customSourceUrl}));                  info = `From source ${1 + index}: ${sources[index]}`;              } catch (e) { -                if (this._audioFallback === null) { -                    this._audioFallback = new Audio('/mixed/mp3/button.mp3'); -                } -                audio = this._audioFallback; +                audio = this._audioSystem.getFallbackAudio();                  info = 'Could not find audio';              } @@ -1569,10 +1563,6 @@ class Display extends EventDispatcher {          return {type, expression, reading};      } -    async _getAudioInfo(source, expression, reading, details) { -        return await api.getDefinitionAudioInfo(source, expression, reading, details); -    } -      async _setOptionsContextIfDifferent(optionsContext) {          if (deepEqual(this._optionsContext, optionsContext)) { return; }          await this.setOptionsContext(optionsContext); |