4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowerShell で音を出したい(ビープ音・WAV ファイル・TTS)

Last updated at Posted at 2023-01-31

長時間動作するような PowerShell スクリプトを書く必要がある場合、終了時に音による通知がほしくなります。本記事では、PowerShell 標準の機能で利用できる 3 種類のアプローチをご紹介します。

ビープ音を鳴らす

まずは古式ゆかしいビープ音です。Console クラスBeep メソッドを利用します。

# デフォルト設定でビープ音を鳴らす
[Console]::Beep()

# 指定の周波数、再生時間でビープ音鳴らす
[Console]::Beep(524, 1000)

WAV ファイルを再生する

せっかくなのでお好みの音楽で通知してほしい場合もあるでしょう。そんな時は SoundPlayer クラスを利用します。

# 同期的に再生
(New-Object Media.SoundPlayer <WAV ファイルへのパス>).PlaySync()

非同期的に再生・停止したい場合は SoundPlayer クラスのインスタンスを変数に格納しておき、SoundPlayer#Stop() で停止します。

# 非同期的に再生
$sp = New-Object Media.SoundPlayer <WAV ファイルへのパス>
$sp.Play()

# 停止
$sp.Stop()

TTS で日本語を喋らせる

ビープ音や音楽ファイルでなく、任意のメッセージを発話させる(Text-to-Speech)こともできます。PowerShell から簡単に呼び出せる TTS には 2 種類あります。

Microsoft Speech API 5.4 (COM) の ISpVoice::Speak

(New-Object -ComObject SAPI.SpVoice).Speak("喋らせたい内容")

.NET Framework 3.0 - 4.8.1 の SpeechSynthesizer クラス

# 同期的に再生
(New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak("喋らせたい内容")

# 非同期的に再生
$ss = New-Object System.Speech.Synthesis.SpeechSynthesizer
$ss.SpeakAsync("looooooooooooooooooooooooooong text")

# 停止
$ss.SpeakAsyncCancelAll()

参考リンク

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?