WSL2上のUbuntu20.04から簡単に音声再生/録音ができた

スポンサーリンク

前回の記事で音声再生に悪戦苦闘していたけど、音声再生/録音するだけならWSLgでとっくに対応していた。。。
そのWSLgが組み込まれたWSL2なら、あっけないくらい簡単に再生/録音できた。
(WSLgはWindows11の比較的新しいWSL環境なら組み込まれているっぽい)

USBオーディオバイスは直接扱えないけど、自分の用途だと全然問題ない。



環境

Windows 11 バージョン22H2 (OSビルド 22621.1105)
WSL2で、Ubuntu 20.04インストール済み

$ sudo wslsys
Release Install Date: 0x636e7a47
Branch: ni_release
Build: 22621
Full Build: 22621.1.amd64fre.ni_release.220506-1250
Uptime: 0d 5h 21m
Linux Release: Ubuntu 20.04.5 LTS
Linux Kernel: Linux 5.15.79.1-microsoft-standard-WSL2
Packages Count: 2400


WSL2上のUbuntu20.04から音声再生する

WSL2上のUbuntuで再生しようとすると、Windows PCのオーディオデバイスで再生される。 WSLgの構成図を見るとPulseAudio Serverが動いていて、pulseaudioを経由するものは簡単に再生できる。

$ aplay /usr/share/sounds/alsa/Side_Right.wav
Failed to read cookie file '/home/taro/.config/pulse/cookie': Is a directory
Failed to load cookie file from cookie: Is a directory
Failed to read cookie file '/home/taro/.config/pulse/cookie': Is a directory
Failed to load cookie file from cookie: Is a directory
Playing WAVE '/usr/share/sounds/alsa/Side_Right.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono


WSL2上のUbuntu20.04から音声録音する

録音も簡単。
WSL2上のUbuntuで録音をしようとすると、Windows PCのマイクをつかって録音される。

$ arecord -twav sample.wav
省略
Recording WAVE 'sample.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono
Ctrl+Cで停止


いろいろ確認

$ echo $PULSE_SERVER
/mnt/wslg/PulseServer
$ aplay -l
aplay: device_list:276: no soundcards found...

$ aplay -L
省略
default
    Playback/recording through the PulseAudio sound server
省略
pulse
    PulseAudio Sound Server
省略


リンク

WSLgアーキテクチャー
GitHub WSLg

Playing sound in Docker container on WSL in Windows 11

Arch LinuxのPulseAudioドキュメント