aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/search.html1
-rw-r--r--ext/bg/settings.html1
-rw-r--r--ext/fg/float.html1
-rw-r--r--ext/mixed/js/audio-system.js52
-rw-r--r--ext/mixed/js/text-to-speech-audio.js66
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
+ }
+ }
+}