2023年02月25日

PowerShellでサウンド出力先 変更

「foobar2000」「MusicBee」をカスタマイズしていて、手持ちの曲を再生して楽しんでいるが、街なかを歩く時には「Spotify Free」で自分が持っていない曲を楽しむこともある。「OCNモバイルONE」は「Musicカウントフリー」があり、その中にはSpotifyも入っているので、容量を気にせず高音質で聴くことが出来る。

自宅でもSpotify Freeと思い、PC用のSpotifyを起動。

PCから音楽を聴くときには、マザーボードからサラウンド・システムに接続した光ケーブル経由で鳴らすのだが、Spotifyからはディスプレイ内蔵の貧弱なスピーカからしか音が出ない。Spotifyは「このパソコン」としか表示されず、サウンドの出力先を変更設定出来ないようである。その他は「Chromecast」が表示される。

「このパソコン」と言うことは、PCのディフォルト出力先を変更しなければならないらしい事に気づいた。

「通知領域」のスピーカ・アイコンを押して、矢印を押して、「再生デバイス」を選択しなければならない。あるいは「設定」→「システム」→「サウンド」→「出力デバイス」を選択しなければならない、上掲写真のように。

「foobar2000」や「MusicBee」はサウンド出力先は固定して設定しておけるのだが、Spotifyはひと手間必要になる。

それでは、Spotifyを起動する時には(1)サウンド出力先を変更(2)Spotifyを起動(3)サウンド出力先を戻す。それを「PowerShell」に自動的に実行してもらおう。

ロジックは汎用的なPCを対象にするのではなく、あくまでも個人で使用する私のPCにフィットした内容にする。PCの構成を変更したら、それに合わせてロジックも変更すれば良い。

調べていくと、サウンド関連をPowerShellで制御するのはかなり難しいらしい。レジストリを調べたり、その中の値と比較したりと、そこまで大袈裟にしないで簡単にサッと。

多くの先人たちのブログに出てくるのがGitHub上の「AudioDeviceCmdlets.dll」。GitHubへ見に行くこともあるが、説明やソースコードを見るわけではなく、目標となるプログラムをダウンロードする程度である。

このDLLをダウンロードして、PowerShellが動くフォルダと同じフォルダに入れると、PowerShellのサウンド出力先に関するコーディンが格段に楽になるとの教えである。

GitHub上で簡単にDLLの呼び出し方法(Get、Set)等を確認する。

そのDLLを利用可能にするコーディングを公開してくださっている先人もいらっしゃる。

サウンド出力先の変更をプログラム的に無言で実行されても、PowerShell素人の私としては、変更されたのを視覚的に確認したいのもあって、PowerShell実行時には「設定」の「サウンド」のウィンドウを開いて、終了したらそのウィンドウを閉じるコーディングも入れたい。

調べて、一行実行したら「Pause(に相当)」を入れて、動きを確認して。駄目なら調べて。

そんな事で、動くようになったPowerShellがこちら。

-----------------------------------------

# PowerShellのVersion確認
$Psversiontable

# 設定の「サウンド」を開く
Start ms-settings:sound

# DLL の場所を設定する
Set-location f:\myautomation

# DLLを利用可能にする
New-Item "$($profile | split-path)\Modules\AudioDeviceCmdlets" -Type directory -Force
Copy-Item ".\AudioDeviceCmdlets.dll" "$($profile | split-path)\Modules\AudioDeviceCmdlets\AudioDeviceCmdlets.dll"
Set-Location "$($profile | Split-Path)\Modules\AudioDeviceCmdlets"
Get-ChildItem | Unblock-File
Import-Module AudioDeviceCmdlets

# 現在のSoundDeviceを確認
Get-audiodevice -list

# Sound DeviceをRealtek Digital Optical に 変更
Set-Audiodevice -index 1

# 設定の「サウンド」を閉じる
$proid = Get-process -name systemsettings
Stop-process -inputobject $proid

# Spotify を起動 終了まで待つ
Start -wait C:\Users\ユーザID\AppData\Roaming\Spotify\Spotify.exe

# 設定の「サウンド」を開く
Start ms-settings:sound

# Sound DeviceをBenq GL2460 に 変更
Set-audiodevice -index 2

# 設定の「サウンド」を閉じる
$proid = Get-process -name systemsettings
Stop-process -inputobject $proid

-----------------------------------------

一行変更しただけで、全く動かなくなったりするので「Pause」を入れまくったり、開いたウィンドウを閉じるのは何を指定するのか等、判らないなりにも動くようになった。

このPowerShellを呼び出すショートカットにはSpotifyのアイコンを埋め込み、「Spotify起動」とした。

こんな小さなPowerShellでも「やった」感がある。


https://www.ktservices3.com/




投稿者 owner : 2023年02月25日