diff options
-rw-r--r-- | ext/bg/search.html | 1 | ||||
-rw-r--r-- | ext/bg/settings.html | 1 | ||||
-rw-r--r-- | ext/fg/float.html | 1 | ||||
-rw-r--r-- | ext/mixed/js/audio-system.js | 52 | ||||
-rw-r--r-- | ext/mixed/js/text-to-speech-audio.js | 66 |
5 files changed, 72 insertions, 49 deletions
diff --git a/ext/bg/search.html b/ext/bg/search.html index 7e163865..f18bed0d 100644 --- a/ext/bg/search.html +++ b/ext/bg/search.html @@ -89,6 +89,7 @@ <script src="/mixed/js/scroll.js"></script> <script src="/mixed/js/text-scanner.js"></script> <script src="/mixed/js/template-handler.js"></script> + <script src="/mixed/js/text-to-speech-audio.js"></script> <script src="/bg/js/query-parser-generator.js"></script> <script src="/bg/js/query-parser.js"></script> diff --git a/ext/bg/settings.html b/ext/bg/settings.html index b01fbf73..5ee23785 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -1172,6 +1172,7 @@ <script src="/mixed/js/dom-data-binder.js"></script> <script src="/mixed/js/object-property-accessor.js"></script> <script src="/mixed/js/task-accumulator.js"></script> + <script src="/mixed/js/text-to-speech-audio.js"></script> <script src="/bg/js/anki.js"></script> <script src="/bg/js/anki-note-builder.js"></script> diff --git a/ext/fg/float.html b/ext/fg/float.html index bd2508e6..725b7d8b 100644 --- a/ext/fg/float.html +++ b/ext/fg/float.html @@ -64,6 +64,7 @@ <script src="/mixed/js/scroll.js"></script> <script src="/mixed/js/text-scanner.js"></script> <script src="/mixed/js/template-handler.js"></script> + <script src="/mixed/js/text-to-speech-audio.js"></script> <script src="/bg/js/query-parser-generator.js"></script> <script src="/bg/js/query-parser.js"></script> diff --git a/ext/mixed/js/audio-system.js b/ext/mixed/js/audio-system.js index 4a49c135..a8226820 100644 --- a/ext/mixed/js/audio-system.js +++ b/ext/mixed/js/audio-system.js @@ -15,55 +15,9 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -class TextToSpeechAudio { - constructor(text, voice) { - this.text = text; - this.voice = voice; - this._utterance = null; - this._volume = 1; - } - - get currentTime() { - return 0; - } - set currentTime(value) { - // NOP - } - - get volume() { - return this._volume; - } - set volume(value) { - this._volume = value; - if (this._utterance !== null) { - this._utterance.volume = value; - } - } - - async play() { - try { - if (this._utterance === null) { - this._utterance = new SpeechSynthesisUtterance(this.text || ''); - this._utterance.lang = 'ja-JP'; - this._utterance.volume = this._volume; - this._utterance.voice = this.voice; - } - - speechSynthesis.cancel(); - speechSynthesis.speak(this._utterance); - } catch (e) { - // NOP - } - } - - pause() { - try { - speechSynthesis.cancel(); - } catch (e) { - // NOP - } - } -} +/* global + * TextToSpeechAudio + */ class AudioSystem { constructor({audioUriBuilder, requestBuilder=null, useCache}) { diff --git a/ext/mixed/js/text-to-speech-audio.js b/ext/mixed/js/text-to-speech-audio.js new file mode 100644 index 00000000..701933aa --- /dev/null +++ b/ext/mixed/js/text-to-speech-audio.js @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 Yomichan Authors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +class TextToSpeechAudio { + constructor(text, voice) { + this.text = text; + this.voice = voice; + this._utterance = null; + this._volume = 1; + } + + get currentTime() { + return 0; + } + set currentTime(value) { + // NOP + } + + get volume() { + return this._volume; + } + set volume(value) { + this._volume = value; + if (this._utterance !== null) { + this._utterance.volume = value; + } + } + + async play() { + try { + if (this._utterance === null) { + this._utterance = new SpeechSynthesisUtterance(this.text || ''); + this._utterance.lang = 'ja-JP'; + this._utterance.volume = this._volume; + this._utterance.voice = this.voice; + } + + speechSynthesis.cancel(); + speechSynthesis.speak(this._utterance); + } catch (e) { + // NOP + } + } + + pause() { + try { + speechSynthesis.cancel(); + } catch (e) { + // NOP + } + } +} |