Windowsでは特定のイベントが発生したとき(たとえばUSBデバイスの接続時のようなとき)にサウンドを鳴らすことができる。その設定は、コントロールパネルの「サウンド」プロパティにある「サウンド」タブからできる。
同様に「設定」→「システム」→「サウンド」→「サウンドの詳細設定」でも同じダイアログボックスを開くことが可能だ。
音を1つ、2つ変える程度ならGUI操作でも問題ないのだが、多数の音を同時に変更したい場合には違う方法も考えたくなる。その便利な方法の1つがコマンドラインを使うというものだ。
結論から言えば、Windowsのサウンド設定はレジストリに記録されており、これをコマンドで書き換えることで、複数のサウンドイベントに対するサウンドファイルをまとめて指定できる。
Windowsのサウンド設定はそもそもどこにある?
Windowsのサウンド設定は、以下のレジストリキーにある。
HKEY_CURRENT_USER\AppEvents\Schemes\Apps
この直下にあるのは、ダイアログの「プログラムイベント」にあるアイコンの付いた項目である。インストールしているアプリケーションによって追加されることがある。
Windows 11 Ver.24H2では、「Windows」「エクスプローラー(File Explorer)」「Windows音声認識(Speech Recognition)」の3つが標準で登録されている。このほか、Visual Studioが「devenv」としてプログラムイベントを追加することがある。
現在登録されているプログラムイベント対応プログラムに関しては、以下のコマンドでリストアップできる。
GCI HKCU:\AppEvents\Schemes\Apps|GP|FT PSChildName,'(default)'
レジストリ内で、サウンドは、アプリ/システム(Windows)ごとに、サウンドイベントの名前と設定値が組になっている。最初のコマンド出力はアプリ/システム名、2つ目のコマンドは、アプリ/システムごとのサウンドイベントになっている
なお、「GCI」、「GP」、「FT」はPowerShellのエイリアスである。「Get-Alias <エイリアス>」で、元のコマンドを調べられる。
さらにその下には、各アプリケーションやWindowsが定義したイベント名がある。これは、アプリケーションが音を鳴らしたい条件を示すもの。アプリケーションやWindowsで指定されたイベントが発生すると、サブキー以下に定義されている音声ファイルを再生する。
このレベルの一覧を見るには、
GCI -Recurse -Depth 1 HKCU:\AppEvents\Schemes\Apps|select PSChildname
とすればよいのだが、項目数が多く、アプリケーション/システム名をはっきりさせるためには、改行を挟んだほうが見やすい。
GCI -Recurse -Depth 1 HKCU:\AppEvents\Schemes\Apps|%{ if($_.PSParentPath -match "Apps$"){Write-Output "`r" };Write-Output $_.PSChildName }
さらにその下には、4つのキーがあり、ユーザーがサウンド設定に名前を付けて保存するごとに、保存ファイル名のBaseName(ファイル名からパスと拡張子を除いたもの)でキーが作られていく。
規定の4つのキーとは、
.current:現在の設定値
.defalut:Windows/アプリケーションの既定値/初期値
.Modified:ユーザーが入力した値は一旦、ここと.currentに入る
.None:サウンドダイアログでユーザーが「サウンドなし」を選択した場合の設定値
となっている。なお、.Noneは、すべてのサウンド項目で空欄になっている。
このレベルには、ユーザーが保存したサウンド設定のファイル名のBaseNameを使ったキーが複数作られる可能性がある。サウンドファイルのパスは、以下のコマンドで表示できる。
GCI -Recurse -Depth 2 HKCU:\AppEvents\Schemes\Apps | gp | ft PSPath,'(default)'
ただし、少し長いので、
GCI -Recurse -Depth 2 HKCU:\AppEvents\Schemes\Apps|%{if($_.ValueCount -eq 0){"`r$($_.Name)"}else{"$($_.Name)`t$(gpv -Path $_.PSPath -Name '(default)')"}}
として、表示幅を短くする。
コマンドで、アプリ/システム名ごとにサウンドイベントと5つのキー(うち1つはユーザーが保存した項目)と設定値(サウンドファイルのパス)を表示させてみた。Foreach-Object(%がエイリアス)でifを使って表示し分けるようにしたほうが、見た目がわかりやすくなる。Nameプロパティは、レジストリオブジェクトにはあるが、Get-ItemPropertyを通すと使えなくなる
さて、サウンド設定値をすべてファイルに保存するには、reg.exeのExportサブコマンドを使う。この形式は、Windowsではレジストリインポートの標準的な形式なので、編集してそのままインポートできる。基本的には、サウンドファイルさえ存在すれば、他のユーザー/他のマシンにも適用できる。
GCI -Recurse -Depth 1 HKCU:\AppEvents\Schemes\Apps|%{reg.exe Export "$(Convert-Path $_.PSpath)" "$((Split-Path -Leaf $_.PSParentPath))-$($_.PSchildName).reg" /y}
ここには、アプリケーション/システム名のregファイルと、個々のサウンドイベントごとのregファイルが作成される。必要に応じて、これらを編集し、reg.exe IMPORTサブコマンドで読み込めば、サウンド設定のレジストリを書き換えることができる。
GUI設定はわかりやすい反面、大量の項目を処理するのには向いていない。最終的にレジストリに設定情報が保存されているなら、今回紹介したような方法でコマンドラインから表示の確認やデータの編集が可能になる。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ












