Windows PowerShell でテキスト・トゥ・スピーチ

MacOS だとテキスト読み上げ機能だとか、

以前紹介した Open JTalk や espeak コマンドなんかで、

比較的簡単に Text To Speech ができるのだが、Windows PowerShell でも同様に TTS ができるらしいので試してみた。

> (New-Object -ComObject SAPI.SpVoice).Speak("こんにちは")
1

なんとコレだけ。シンプルで良い。

New-Object で生成したオブジェクトを一旦変数に入れてやると、喋るスピードなんかを調節できる。

# ゆっくり風に喋らせられる
> $x=New-Object -ComObject SAPI.SpVoice
> $x.rate=-10
> $x.Speak("やあやあ")

扱えるボイスは、日本語1種類と英語1種類しかなかった。次のように指定するとボイスを変更できるが、英語のボイスでは日本語文字列は再生できないので注意。

> $x.GetVoices()

Id                                                                                  DataKey            Category
--                                                                                  -------            --------
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_JA-JP_HARUKA_11.0 System.__ComObject System.__ComObject
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0   System.__ComObject System.__ComObject

> $x.Voice=$x.GetVoices().item(1)
> $x.Speak("Hello Everyone")

以下のようなノリで WAV ファイルに保存できるようだ。

$x=New-Object -ComObject SAPI.SpVoice
$vs=New-Object -ComObject SAPI.SpFileStream
$vs.Open("c:\temp\output.wav", 3)
$x.AudioOutputStream=$vs
$x.Speak("こんにちは")
$vs.Close()

とりあえず簡単に喋らせられてよきよき。