PowerShellで音声合成を試してみた

記事タイトルとURLをコピーする

こんにちは。マネージドサービス部MS2課の塩野です。

最近音声合成ソフトを試す機会があって、色々調べているうちにPowerShellのコマンドラインからしゃべらせることができるということを知ったので、試したことをまとめてみました。

音声合成について

PowerShellで何かをしゃべらせる場合は、COMオブジェクトの SAPI.SpVoice を使うか、.Net の SpeechSynthesizer (System.Speech.Synthesis.SpeechSynthesizer)を使う必要があります。

SAPI.SpVoiceを使う場合

以下のようなコードを実行すると、「こんばんわ」という声が聞こえてきます。

$ps_speak=New-Object -ComObject SAPI.SpVoice
$ps_speak.Speak("こんばんは")

こちらの方がコードは短くて簡単に表現できます。

SpeechSynthesizer を使う場合

以下のようなコードを実行すると、「こんばんわ」という声が聞こえてきます。

Add-Type -AssemblyName System.Speech
$ps_speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$ps_speak.SelectVoice("Microsoft Haruka Desktop")
$ps_speak.Speak("こんばんは。")

.Netを使う場合の方がだいぶコード量が増えました。 普段使いならCOMオブジェクトの方がいいかもしれませんね。

合成音声の切り替え

もう少しこれらのコマンドについて深堀してみました。パソコンの中には複数の音声が入っており、それらを選択して音声合成をすることができます。

パソコンにインストールされている音声は以下のコマンドで確認することができます。

■コマンド
$ps_speak.GetInstalledVoices().VoiceInfo.Name

■出力結果
Microsoft Haruka Desktop
Microsoft Zira Desktop

※上記コマンドで情報が表示されない場合は、以下のコマンドを先に実行してください
Add-Type -AssemblyName System.Speech
$ps_speak = New-Object System.Speech.Synthesis.SpeechSynthesizer

私の環境では Haruka と Zira の2つの音声がインストールされていました。これらは用途によって使い分けられるものとなります。

なんとなく名前でわかると思いますが、Haruka は日本語向けで Zira は英語向けの合成音声になります。

それでは合成音声を切り替えるとどうなるか試してみましょう。

■コマンド
$ps_speak.SelectVoice(<ここに合成音声の名称を入力>)

■Ziraで音声合成したいとき
$ps_speak.SelectVoice("Microsoft Zira Desktop")

■Ziraの合成音声の動作確認
$ps_speak.Speak("Hello.I am Zira.")
$ps_speak.Speak("こんにちは。ジラです。")

Ziraは英語向きのため日本語を発音させることができず、無音状態となります。 上記実行すると英語部分だけしゃべってくれます。

次に Haruka にしゃべってもらいましょう。

■Harukaで音声合成したいとき
$ps_speak.SelectVoice("Microsoft Haruka Desktop")

■Harukaの合成音声の動作確認
$ps_speak.Speak("Hello.I am Haruka .")
$ps_speak.Speak("こんにちは。はるかです。")

Harukaは日本語向きのため、日本語は合成音声っぽい声で流暢にしゃべってくれます。 英語は・・・だいぶあやしい・・・・(><)

「はろう。あいえいえむはるか」

こんな感じの音が聞こえてきます。

合成音声の保存

最後に合成音声をファイルに保存してみましょう。

■コマンド
$ps_speak.SetOutputToWaveFile( <ここに保存先PATHを記載> )

■カレントディレクトリに合成音声のファイルを保存
$ps_speak.SetOutputToWaveFile( $(Join-Path $(Get-Location) ".\test.wav") )
$ps_speak.Speak("こんばんは。")
$ps_speak.Dispose()

デスクトップにtest.wavというファイルができて、合成音声でこんばんわという声が聞こえれば成功です。

総括

合成音声は英語・日本語で声を変更するだけでなく、日本語の場合は書き方(あえてひらがなで書くか、漢字で書くか)を意識して表現しないと変な読み方をするケースが多いように思います。

コマンドが簡単なので、一度試してみてはいかがでしょうか。

どなたかのお役に立てれば幸いです。

塩野 正人 ブログ記事一覧はコチラ

マネージドサービス部所属。ネコが好きです。