https://mdn.github.io/dom-examples/web-speech-api/speak-easy-synthesis/ を試す。
一定以上の長さになると途中で speak が切れる現象が発生する。
完了 | OS | ブラウザ | Voice |
---|---|---|---|
failure | macOS 13.6 | Chrome 119 | Google 日本語 ( ja-JP ) |
success | macOS 13.6 | Chrome 119 | Kyoko ( ja-JP ) |
success | macOS 13.6 | Safari 17.0 | Kyoko ( ja-JP ) |
success | Android 10 | Chrome 119 | Google 日本語 ( ja-JP ) |
success | iOS 17.1.1 | Safari | Kyoko ( ja-JP ) |
success | iOS 17.1.1 | Chrome | Kyoko ( ja-JP ) |
音声の出力は途中で切れたように感じられるが、実際には speechSynthesis は speaking状態にあり、この状態のまま再度 speak を実行することはできない。これは特定のプログラムでのみ speak を実行できないという意味ではなく、speechSynthesis を利用する同一ブラウザ上のあらゆるアプリケーションで実行できないし、その原因が何かは把握する方法がない1。
一度 cancel()
を実行すれば再度 speak できる。
macOS, iOS では Chrome 以外から Google 日本語 Voice を選択することがそもそもできない2。Google ネイティブのプラットフォーム以外で Chrome から Google Voice を利用した際の何らかの制限ぽい。
上記の Google Voice は予想通り GCP の何かを利用しているらしく、SpeechSynthesisVoice オブジェクトの localService
プロパティが false
になっている。あらかじめ長さが決められない場合はこの localService
が false
のものを除外すればよさそう。
cf. https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice