スポンサーサイト
新しい記事を書く事で広告が消せます。
【同じタグを付けた記事の一覧】
→
WinXP の英語音声(Sam、Mary、Mike)を Win7 で使う
2012年05月11日(金)18時55分
「Microsoft Sam」「Microsoft Mary」「Microsoft Mike」を Vista や Win7 で
以前「Microsoft Speech Platform を SAPI5 として使う」のコメント欄において、「Speech SDK 5.1 でインストールされる英語音声合成(「Microsoft Sam」「Microsoft Mary」「Microsoft Mike」)を Vista や Win7 で使用する方法を知りたい」という趣旨の書き込みがありましたので、方法を記しておこうと思います。
ただし、検証不足なうえいろいろと制限や問題もあり、難易度は高めですので、「どうしても Vista や Win7 で使用する必要がある」という場合以外には、実行はお勧めしません。
ご注意
まず、この問題(SAPI5.1 が使えない)については、Microsoft のサイト「http://support.microsoft.com/kb/942400/ja」にも書かれていました。
つまり、Microsoft の方でも把握されている問題であり、しかもその原因まで明らかにされています。
にもかかわらず、「必要な場合はこのようにしてください」というような対策は示されず、そのまま「仕様」となっていることから、今回の作業(Mary や Mike を動作可能にすること)は、Vista 以降の Windows に何かしらの問題を引き起こす可能性があり、そのためにあえて動かないままにしてあるとも考えられます。
そして、実際に少し確認してみた範囲でも、結構厄介な問題が一つありましたし、他にも未確認の致命的な「何か」があるかもしれません。
ですので以下の作業は、これが原因で何かしらのトラブルに見舞われた場合でも、「自分で解決できる」という自信のある方のみ、自己の責任において実行していただくようお願いします。
x86(32ビット)用アプリケーションのみ
それともう一つ、試してみた範囲では、x86(32 ビット)用アプリケーションでの利用しか成功しておりません(「OS が 32 ビット版かどうか」ではなく「実行するアプリケーションが 32 ビット版かどうか」です)。
64 ビット版の Win7 でも、レジストリを変更することで、コントロールパネルの「音声認識」や 64 ビット版アプリケーションの話者一覧に表示させることは可能ですが、選択しても使えませんでした。
現時点(2012年05月)では、公開されているアプリケーションの多くが 32 ビット版ですので、あまり問題にはならないかとは思うのですが、もし使用したいアプリケーションが 64 ビット版である場合には、今回の作業はしても無駄ということになります。
また、64 ビット版 OS の場合、たとえアプリケーションが 32 ビット版であっても、アプリケーション側で話者を選択できるような作りになっていない場合、事実上使用できません。
これは、64 ビット版 OS では 32 ビット版アプリケーション用の「標準の話者」を変更する術がないためです(もしかしたらレジストリ書き換えなどで対応できるかもしれませんが)。
Speech SDK 5.1 のダウンロードと展開
注意点と制限について書き終えたところで、実際の作業の説明に入ります。
まず Speech SDK 5.1 のページにある「SpeechSDK51.exe」をダウンロードしてください。
この EXE ファイルは自己展開書庫となっていますので、インストールのためにいったん解凍する必要があります(実行すると表示されるダイアログで解凍先を指定し「Unzip」します)。
ここではとりあえず、以降の説明を簡単にするため、「C:\SAPI\SDK\」に展開したと仮定します。
同じページにある「SpeechSDK51LangPack.exe」は、日本語音声認識(Microsoft Japanese Recognizer v5.1)と中国語音声認識(Microsoft Simplified Chinese Recognizer v5.1)を追加するものですが、深刻な問題を引き起こす可能性(後述)がありますので、インストールしないでください。
Speech SDK 5.1 のインストール
次に、「C:\SAPI\SDK\setup.exe」を実行して Speech SDK 5.1 をインストールします(インストールが済んでも「C:\SAPI\SDK\」フォルダはまだ削除しないでください)。
x86(32 ビット)版 OS では、この時点でコントロールパネルの「音声合成」の一覧に「Microsoft Mary」「Microsoft Mike」が出現しますが、選択しても「この音声は再生されません。別の音声または別のオーディオ出力デバイスを選択してください。」というエラーが出て使えません(「Sample TTS Voice」は使用可能)。
また、「音声認識」の一覧に「Microsoft English Recognizer v5.1」が追加されますが、こちらも「必要なエンジンが作成されなかったため、要求されたタスクは実行されません。別のエンジンまたは別のオーディオデバイスを選択するか、その両方を選択してください。」となり選択できません(「SAPI Developer Sample Engine」は使用可能)。
なお、x64(64 ビット)版 OS では、見た目の変化は特にありません。
「Microsoft Speech SDK 5.1.msi」の展開
普通にインストールしただけでは、必要なファイルのいくつかがコピーされていないため、インストーラを手作業でバラして取り出さなければいけません。
そのため、以下の行を「コマンド プロンプト」を起動して入力するか、BAT ファイルにして実行します。
msiexec.exe /a "C:\SAPI\SDK\Microsoft Speech SDK 5.1.msi" targetdir="C:\SAPI\SDK\MSI" /qn
コマンドが成功すれば、「C:\SAPI\SDK\MSI」フォルダ以下に必要なファイルが展開されているはずです。
必要ファイルのコピー
上記展開処理で得られたファイルを適切な場所にコピーしますが、コピー先はシステム領域であるため、コピーには管理者権限が必要になります。
また、必要ファイルのコピー先は x64(64 ビット)版 OS と x86(32 ビット)版 OS で少し異なり、以下は x64(64 ビット)版 OS を対象としたものになりますので、x86(32 ビット)版 OS の場合は「C:\Program Files (x86)\」の部分を「C:\Program Files\」に読み替えてください。
- 「C:\SAPI\SDK\MSI\Common\SpeechEngines\Microsoft\spcommon.dll」を、「C:\Program Files (x86)\Common Files\SpeechEngines\Microsoft」フォルダにコピー。
- 「C:\SAPI\SDK\MSI\Common\SpeechEngines\Microsoft\TTS\1033」フォルダの「Sam.SDF」と「Sam.SPD」と「spttseng.dll」を、「C:\Program Files (x86)\Common Files\SpeechEngines\Microsoft\TTS\1033」フォルダにコピー。
- 「C:\SAPI\SDK\MSI\Common\SpeechEngines\Microsoft\Lexicon\1033」フォルダの「ltts1033.lxa」と「r1033tts.lxa」を、「C:\Program Files (x86)\Common Files\SpeechEngines\Microsoft\Lexicon\1033」フォルダにコピー。
DLL の登録
「http://support.microsoft.com/kb/942400/ja」に書かれている通り、SAPI5.1 でエラーとなる原因は「spcommon.dll」の不在にありますので、これを使えるようにする必要があります。
そのためには、ただ DLL ファイルをコピーするだけでなく、regsvr32 コマンドで登録しなければなりません。
それから、「Microsoft Sam」「Microsoft Mary」「Microsoft Mike」は、読み込むデータが違うだけで、その本体はいずれも「spttseng.dll」なのですが、Win7 ではこれも未登録であるため、登録しないと使えません。
ということで、「コマンド プロンプト」や BAT ファイルで以下のようにして、登録します(管理者権限で実行する必要があります)。
regsvr32.exe "C:\Program Files (x86)\Common Files\SpeechEngines\Microsoft\spcommon.dll"
regsvr32.exe "C:\Program Files (x86)\Common Files\SpeechEngines\Microsoft\TTS\1033\spttseng.dll"
なおこれも、x86(32 ビット)版 OS の場合は「C:\Program Files (x86)\」の部分を「C:\Program Files\」に読み替えてください。
「Microsoft Sam」のレジストリ追加
ここまでの作業で「Microsoft Mary」「Microsoft Mike」が使用可能になっているはずですが、「Microsoft Sam」はレジストリに登録されていないため、一覧に表示されず使えません。
これは多分、「Microsoft Mike」の情報を参考にして、名前の部分を書き換え(Mike → Sam)てもいけると思うのですが、一応 WinXP のレジストリから、「Microsoft Sam」に関する情報を抜き出してきました。
OS に応じて以下の TEXT ファイルのうちのどちらかを保存し、拡張子を「.reg」に変更して「結合」してください。
x64(64 ビット)版 OS 用「Microsoft Sam」REG ファイル
x86(32 ビット)版 OS 用「Microsoft Sam」REG ファイル
コントロールパネルのクラッシュ
今回の作業を行った場合、x86(32 ビット)版 Win7 では、「SpeechSDK51LangPack.exe」をインストールすることにより、コントロールパネルの音声認識(高度な音声オプション)で、日本語音声認識の「Microsoft Japanese Recognizer v5.1」が選択できるようになります。
しかし、それを選択して「OK」すると、コントロールパネルの音声認識機能がクラッシュし、それ以降開けなくなってしまいます。
こうなりますと、別の認識エンジンを選びなおして回避することもできなくなってしまいますので、一度「spcommon.dll」の登録を解除して、クラッシュを回避して対処する必要があります。
そのためには、regsvr32 コマンドに「-u」オプションをつけ、以下のように入力します(管理者権限で実行する必要があります)。
regsvr32.exe -u "C:\Program Files\Common Files\SpeechEngines\Microsoft\spcommon.dll"
解除後にコントロールパネルで別の認識エンジンに変更してください(その後まだ Sam や Mary を使う必要があれば「spcommon.dll」を再登録します)。
なお、x64(64 ビット)版 Win7 の場合は、そもそもコントロールパネルの音声認識に「Microsoft Japanese Recognizer v5.1」がリストアップされないため、上記の問題は発生しません。
また、英語音声認識エンジンである「Microsoft English Recognizer v5.1」ではこの問題が発生しないため、使用可能です(ただし、英語版は「SpeechSDK51.exe」の方に含まれるため、いずれにしても「SpeechSDK51LangPack.exe」は不要です)。
「spcbght.bat」と x64
例えば「テキストを読み上げ・録音するスクリプト」で公開している「spcbght.bat」というスクリプトですが、これを x64(64 ビット)版 Win7 で普通に起動すると、Sam や Mary を使えません。
これは、64 ビット OS 上でスクリプトを実行すると、64 ビット版のスクリプト・エンジン(wscript.exe や mshta.exe)によって読み込まれてしまうため、64 ビット版アプリケーション扱いとなってしまうことが原因です。
ですので、例えば「spcbght.bat」の場合、32 ビット版の「mshta.exe」である「C:\Windows\SysWOW64\mshta.exe」に直接ドラッグ&ドロップして実行すれば、Sam や Mary を使用できる状態で起動します。
- 関連記事