SKY NOTE

skymouseが思った事考えた事を記したもの

Pref..
Speech
STOP
Follow..
QR Code
|◀
▶|
QR
×
voice
volume
0
rate
0
pitch
0

ChromeでWebSpeech APIのVoiceObjectを得る方法

WebSpeechAPIで非常にてこずったのがChromeのVoiceObjectの挙動。他のブラウザではすぐVoiceObjectくれるのに、Chromeだけは「喋らせたいから、ボイスオブジェクトくれー」といっても0を返してくるという嫌な奴なのだ。一発でくれないから三顧の礼のごとく、Chromeに何度も要求すると「ちっくれてやるよ。ほれ」と隠し持っている85個のVoiceObjectを出す始末…本当に嫌な奴だ。ネットで調べると特定のEventの時にVoiceObjectを教えてくれるというのを読んで、作ったのが以下のコード。

 

<script type="text/javascript" charset="UTF-8">


window.onload=voice0;//ウィンドウを読み出した後で、読み出す。

 

function voice0()//Chrome判定用プログラム
{
voices = speechSynthesis.getVoices();
if(voices.length==0)//0を返してくる不届きなChromeを特定
{
speechSynthesis.onvoiceschanged=getVoice; //onvoiceschangedイベントを感知したらfunction getVoiceへ行く
}
else //SafariFirefoxは、ちゃんと一発でVoiceObjectのリスくれる。
{
firstscript();//初期化用のプログラムfirstscriptへ
}

 

function getVoice()//イベント発生時にすかさず、VoiceObjectのリストをもらう
{
voices = speechSynthesis.getVoices();
firstscript()//初期化用のプログラムfirstscriptへ
}

 

function firstscript()

{

alert(voices.length)//Chromeだと85個のVoiceObjectを隠し持ってる。

}

</script>

 

Chromeは最初の起動で0を返してくるので、これでブラウザをChromeだと特定し、Chrome専用の読み出しプログラムgetVoiceへ行ってから、初期化プログラムのfirstscriptへいく。区別しないといけないのは、VoiceObjectを読み出せるEventの発火タイミングがブラウザごとに違うので、Chromeだけ寄り道する。これで、読み出せる声が85個でてきて、そこから日本語の声を使って喋らせる。だけどMac版のChromeGoogle日本語を使うと、喋る文字数に制限が有り、同時にオンラインでないと喋らないと言う超絶不便な仕様になっている。反面、Macで標準でついてきているKyokoやOtoyaは、ネットに繋がなくっても、字数制限なくちゃんと喋る。

 

Chromeで読み上げる声を選べるようにする機能を使う時に、多分引っ掛かる所だと思うので、書いてみました。