1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShellでWAVオーディオファイルを再生する

2022-02-06 19:58:06

すべてのPowerShellバージョンで動作します。

PowerShell で WAV ファイルを再生するのは、実はとても簡単です。

コピーコード コードは以下の通りです。

# Find an available WAV audio file in the Windows directory
$WAVPath = Get-ChildItem -Path $env:windir -Filter *.wav -Recurse -ErrorAction SilentlyContinue |
 Select-Object -First 1 -ExpandProperty FullName
# Load and play
"Playing $WAVPath... "
$player = New-Object Media.SoundPlayer $WAVPath
$player.Play()
"Done!"

最初の部分で、Windowsフォルダから再帰的に最初のWAVファイルを探し出し、そのパスを選択します。もちろん、1行目の$WAVFileに独自のWAVファイルのコレクションを代入し、Mediaを使って読み込んで再生することも可能です。Play()メソッドは、再生にサブスレッドを使用するので、メソッドはすぐに戻りますが、オーディオはまだ再生を開始していないかもしれませんし、再生が終了しているかもしれないことに注意してください。

PowerShellがあるタスクを実行しているとき、タスクが完了するまで特定の音楽を再生し続けることができます:これを使用して、音声によるプログレスバーを作成できます。

コピーコード コードは以下の通りです。

# Find an available WAV audio file in the Windows directory
$WAVPath = Get-ChildItem -Path $env:windir -Filter *.wav -Recurse -ErrorAction SilentlyContinue |
  Select-Object -First 1 -ExpandProperty FullName
# Load and play
$player = New-Object Media.SoundPlayer $WAVPath
$player.PlayLooping()
1..100 | ForEach-Object {
  Write-Progress -Activity 'Doing Something. Hang in' -Status $_ -PercentComplete $_
  Start-Sleep -MilliSeconds (Get-Random -Minimum 300 -Maximum 1300)
  }
$player.Stop()

今回はPlayLooping()を使ってループさせているので、手動でStop()メソッドを呼び出して停止させる必要があります。そのため、スクリプトの最後に$player.stop()メソッドを呼び出しています。