Windows 7でPythonなどから日本語音声合成

SAPI.SpVoiceの代わりにSpeech.SpVoiceを使うことで日本語の音声合成ができる。see: Windowsバッチで,手軽に日本語テキストを自動読み上げ(Text To Speech)する方法 …WSHでSAPIやSpeech.SpVoiceを使う音声合成の手順とサンプルコード - 主に言語とシステム開発に関して

なので以下の内容のファイルをyomiage.wsfという名前で作っておけば「./yomiage.wsf ゆっくりしていってね」などとコマンドラインから音声合成ができる。

<job id="Yomiage">
   <script language="javascript">
      var tts = WScript.CreateObject("Speech.SpVoice");
      tts.Rate = 0;
      tts.Speak(WScript.Arguments.Unnamed(0));
   </script>
</job>

ところがこのSpeech.SpVoiceは64bit版しか存在しない。なのでPythonからwin32comとかで直接ロードすることはできない。子プロセスとして起動するならOKだろうとsubprocess.callで呼ぶと「オブジェクトを作成できませんでした」というエラーになるが、これはファイルシステムリダイレクタのせいなので、オフィシャルの回避方法がある。see: Windowsのファイルシステムリダイレクタにハマった話

というわけでもWindowsでもMacのsayコマンドで遊ぶみたいなことが手軽にできるようになった。