概要
- Speech API というものを使って、音声認識、テキストの音声合成ができるらしい。
- COMインターフェイスがあるので、簡単に使える。
- マークアップを埋め込むことで声の大きさを変えたり、高低を変化させたりできる。
テキストの音声合成の例
以下の内容のテキストファイルを、拡張子を「js」にして保存し、そのファイルをダブルクリックすると、Windowsが自らを褒め称える。
var sp = WScript.CreateObject("SAPI.SpVoice"); var speech = "Microsoft Windows is the greatest OS ever."; sp.Speak(speech);
マークアップを使う
MSの SAPITTS markup language というマークアップを埋め込むことで、音声の大きさや、高低、スピードなどをコントロールできる。ただ、MSDNに情報が見当たらないので詳細がわからない。とりあえず次のような操作が可能。
操作 | 開きタグ | 属性値の範囲 |
---|---|---|
声の大きさ | <volume level=”n”> | 0 ? 100 |
声の速さ | <rate speed=”n”> | -10 ? 10 |
声の高さ | <pitch middle=”n”> | -10 ? 10 |
例えば以下のようにマークアップを埋め込めば、声低めでゆっくり目にしゃべってくれる。Speak メソッドの2つ目の引数には、1つ目の引数がXMLであることを指定するため、8 (SpeechVoiceSpeakFlags.SVSFIsXML)を入れている。
var sp = WScript.CreateObject("SAPI.SpVoice"); var speech = "<rate speed='-3'><pitch middle='-10'>I'm not interested in Google.</pitch></rate>"; var v = sp.Speak(speech, 8);
なお、MSDNをみると、W3Cの仕様であるSSML(Speech Synthesis Markup Language)にも対応していると書かれている。
そのほかにできること
非同期でしゃべらせる
Speak メソッドの2つ目の引数に、1を指定(1ビット目を立たせる)すると、非同期モードになって、しゃべり終わる前に次の行に処理が進む。デフォルトは同期モードなので、しゃべり終わらないと次の行に行かない。実際にアプリ作るのであれば非同期のほうがいいだろうね。
ファイル出力
実際にWAVEやMP3で出力するスクリプトを作っているひとがいる。
音声認識
音声認識もできるようだけど、詳細不明。
参考文献
- Speech API Overview (SAPI 5.3) <http://msdn.microsoft.com/en-us/library/ms720151(VS.85).aspx>
- Speech Synthesis Markup Language (SSML) Version 1.0 <http://www.w3.org/TR/speech-synthesis/>
- SpVoice Interface (SAPI 5.3) <http://msdn.microsoft.com/en-us/library/ms723602(VS.85).aspx>
- 読み上げ <http://www.venus.dti.ne.jp/mw31/apsaly/TextToSpeech.html>
- takayanの雑記帳: SAPI5の音声ファイルを作るWSHスクリプト <http://neu101.seesaa.net/article/93122032.html>