それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WSLで音楽をWindowsから再生する。

WSLで音楽をWindowsから再生する。

WSL2にX windowがあるからいいじゃないかとか、WSLv2 with X でやればいいじゃないかとかそういうのは一旦脇に避けておいて、mplayer を使って音楽を再生したい。

pulseaudio を使う。

TCPを通すとできる。

仕組み

  1. Windows側が tcp 127.0.01 を pulseaudio で listenする。
  2. WSL 側が tcp 127.0.0.1 に 接続しサウンドを送る

ようは、2ステップです。

準備1(Windows+pulseaudio+tcp)

windowsでpluseaudioを動かして、tcp でリッスンする。

pulseaudio の配置場所を作る

appdata=/mnt/c/Users/takuya/AppData/Roaming
cd $appdata
mkdir PulseAudio
cd PulseAudio

pulse audio を用意

curl -LJO http://bosmans.ch/pulseaudio/pulseaudio-1.1.zip
unzip -o -d . pulseaudio-1.1.zip

TCPでリッスンする設定を追加

conf='load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1'
echo $conf >> etc/pulse/default.pa

pulseaudio を起動

C:/Users/takuya/AppData/Roaming/PulseAudio/bin/pulseaudio.exe

起動用スクリプトにする。

var ws = WScript.Createobject("WScript.Shell")
ws.Run('C:/Users/takuya/AppData/Roaming/PulseAudio/bin/pulseaudio.exe --exit-idle-time=-1',0)

wscript で起動する。

wscript.exe pulse-start.js

起動すると、タスクマネージャーに出てくる。

wsl 側でpulseaudioを設定する。

pulse audio をインストールして、TCPで接続するように設定する。

インストール

sudo apt install pulseaudio 

設定を変える。

echo default-server = tcp:localhost >> /etc/pulse/client.conf

再生してみる

sudo apt install mplayer
mplayer sample.m4a

2023-09-25 追記 mplayer で pulse を明示するようがあった。

mplayer  -vo x11 -ao pulse sample.m4a
mplayer -vo null-ao pulse sample.m4a

mplayer で再生時にオーディオ・ビデオをどこに出すかのは、次を見れば良い。

mplayer -vo help
mplayer -ao help

またwindowsのpulse audio はアイドルさせるとプロセスがすぐ終了するので、直前に再起動する必要がある。

再生できた

WSL でもmplayer を使って再生できた。

まさか、いまさらWScriptを持ち出すとは思わなかった。

今回は、WSLv1なので、V2の場合はどうなることやら。

しかし、アウトプットのスピーカーを選べないのがなぁ。pulse audioのWindowsののGUIとか設定方法を探るしか無いな。

参考資料