閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

忘れ物防止に任意の時間に任意の文字列をWindowsに喋らせる

Windows使うなら、これだけで全部完結させられるよねということで。

色々あるけど、System.Speechあたりが簡単そう。

if ($Args.Length -eq 0) { exit }

Add-Type -AssemblyName System.Speech
$s = New-Object System.Speech.Synthesis.SpeechSynthesizer
$s.Speak($Args[0])
$s.Dispose()

これを適当な名前…say.ps1みたいな名前のファイルに保存しておいて、タスクスケジューラでPowerShell say.ps1 タブレット持ったかー?などと登録すると喋ってくれるようになります。

ただ、タスクスケジューラに登録する場合PowerShellだと画面が表示されてしまい、抑制する方法がわからなかったのでWScriptの方がいいかも。

var args = WScript.Arguments;
if (args.Count() == 1) {
  WScript.CreateObject("SAPI.SpVoice").Speak(args.Item(0));
}

しかし、当たり前だけど機械音声ぽさが強く、WindowsでやるならVOICEROID使いたくなってくるなぁ。しかしこれだけのために(きっとすぐ飽きる)買うのもな…。