はじめに
Windowsには標準で「音声読み上げエンジン(Speech API)」が搭載されています。実はこれ、PowerShellだけで簡単に呼び出すことができます。
使い道の例
- ログ処理やバックアップ完了を音声で通知
- 英語・日本語の自動切り替え
- 簡易読み上げリーダーの作成
たった数行で「しゃべるWindows」を作れるので、今回はその基本と応用を紹介します。
基本:Windowsにしゃべらせるコード
Add-Type -AssemblyName System.Speech
$voice = New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Speak("カレー大好き、今日もカレー食べるためお仕事頑張りましょう。")
これだけで、Windowsの標準音声がしゃべります。.Speak()にテキストを渡すだけで音声合成してくれます。便利です。
応用①:ログ完了を音声で通知
たとえば長時間の処理が終わったときに「終わりました」としゃべらせることで、ほかの作業をしていても音で完了を確認できます。
# 長い処理(例)
Start-Sleep -Seconds 10
# 処理完了を音声通知
$voice.Speak("ログ処理が完了しました。")
Tip: タスクスケジューラと組み合わせれば「毎朝の自動通知」や「深夜バッチ完了報告」なども音声で行えます。
応用②:音声を英語と日本語で切り替える
SelectVoiceByHints()を使えば、音声の性別や言語を切り替え可能です。OSにインストールされている音声エンジンに応じて、英語・日本語などを選択できます。
# 英語音声に切り替え
$voice.SelectVoiceByHints(
[System.Speech.Synthesis.VoiceGender]::Male,
[System.Speech.Synthesis.VoiceAge]::Adult,
0,
[System.Globalization.CultureInfo]::GetCultureInfo("en-US")
)
$voice.Speak("I really love 9-ball. I wish there were more 9-ball disciplines in world tournaments.")
英文よくなかった・・、9-ballの試合がもっと増えてほしいといいたかった。
応用例
- 日本語ログ → 日本語で通知
- 英語ログ → 英語で通知
- グローバルチーム用スクリプトに最適
英語学習のディクテーションでもつかえるかも・・・
応用③:テキストファイルを読み上げる
ファイルの内容をそのまま音声で再生することもできます。
$text = Get-Content "C:\logs\report.txt" -Raw
$voice.Speak($text)
- 週次レポートや実行ログを「耳で確認」できる
- 長文でもながら作業でチェック可能
オプション設定(スピード・音量)
音量や話す速度を調整できます。
$voice.Rate = -2 # 話す速度 (-10 ~ 10)
$voice.Volume = 80 # 音量 (0~100)
ゆっくり話すナレーション風や、早口の通知風など、好みで調整可能です。
音声をファイルに保存する(WAV出力)
しゃべるだけでなく、音声をファイルとして残すこともできます。
$voice.SetOutputToWaveFile("C:\temp\notice.wav")
$voice.Speak("音声ファイルを作成しました。")
$voice.SetOutputToDefaultAudioDevice()
作成したWAVファイルをTeamsやSlackの通知音に使うのも面白いです。
まとめ
PowerShellだけでWindowsの音声合成機能を手軽に利用できます。
.Speak() メソッドで即座に音声化でき、.SelectVoiceByHints() を使えば多言語にも対応可能です。
ログ完了の読み上げやタスク連携など、実用面でも活用の幅が広いのが特徴です。
発展アイデア
- 音声通知つきGUIツールを作る(WPF+PowerShell)
- システム監視で異常時に「警告」をしゃべらせる
- ChatGPT API連携で"しゃべるAI端末"にする
