以下の内容はhttps://uepon.hatenadiary.com/entry/2024/12/26/131540より取得しました。


WSLでLinux音声アプリを動かそう!WSLgとPulseAudioの基礎

まえまえから気になっていたことがあります。WSLのプログラムで『音声ファイルを鳴らすことができるのか?』ということです。

現在、音声関連の処理を行うプログラムを書いているので、これが可能となると実験機器の数が減るので便利なんだけどな🙄という思いです。

Webで検索をしてみるとWSLgPulseAudioに対応していれば音がなるのでは?と考えました。案ずるより産むが易し、本当に鳴らすことができるか確認してみたいと思います。

WSLgとは?

WSLgWSL GUIの略で、Windows Subsystem for Linux(WSL)上でLinuxGUIアプリケーションを実行するための機能です。

動作の具体例

WSLgの仕組み

WSLgは処理のレイヤとして以下のような箇所の処理を行います。

WSLgのメリット

  1. 開発の容易性

    • テストしているアプリケーションのGUIWindowsのみで確認可能
    • 音声出力を使うアプリケーションのテストが可能
  2. 環境構築が簡単

    • WSLgのない環境では別途X serverの設定が必要(Windows10時代の話)だったが…
    • バージョンアップをすることでWSLgに対応し、意識せずセットアップが行われ、WSL起動と同時にスタート
  3. Windowsとの統合

  4. Xに対応したアプリの画面が新しいウインドウで開く(表示デバイスを意識することなく)

  5. アプリ間のテキストのコピー&ペーストが普通にできる
  6. 音声出力がWindowsのスピーカーを使用可能

必要な環境

  • Windows 11(Build 22000以降)
  • WSL バージョン 0.50.2 以降

音声再生の仕組み?

WSLgがあることで、WSL(Linux)Windowsの『橋渡し』をしてくれるため、開発者は特別な設定をすることなく、普通のLinux環境と同じようにコードを書くことができます。これすごい🤩🤩🤩

PulseAudioとは?

音声を管理するためのサウンドサーバアプリケーションです。複数のアプリケーションからの音声を制御し、適切にミキシングして、実際のサウンドバイスへ出力する役割を担います。

具体例で理解する

以下のような状況を考えてみると

PulseAudioがあることで、以下の処理が可能になります。

  • 複数のアプリの音を同時再生
  • アプリごとの音量調整が可能
  • 出力先(スピーカー/ヘッドホン)の切り替え

システム構成図

WSLWSLgの場合)でのPulseAudioとの接続

PulseAudioがアプリ層とドライバ層をつなぐ役目をするものであることがわかりました。 WSLgは以下のように動作します。WSLの音声出力アプリの音声データをPulseAudioで受取り、Windows側へ送信する動作をします。

ということはPulseAudioに対応している音声出力アプリであれば、基本的にWindows側のスピーカから音声がなります。これはかなり制御が楽になりそうです。

開発者視点での使い方

1. 直接PulseAudioを使用する

使用例

# 音声ファイルの再生
$ paplay sound.wav
# paplayが存在しない場合には事前に以下をインストールしてください。
# $ sudo apt install pulseaudio-utils

2. ライブラリ経由で使用

# PyAudioの場合
# PulseAudioが利用可能な場合、自動的に使用される
import pyaudio

# Pygameの場合
# 内部的にPulseAudioを使用
import pygame
pygame.mixer.init()
  1. 動作の確認ポイント
    • PulseAudioのプロセスが動いているか
    • アプリケーションがPulseAudioを認識しているか

PulseAudioは最近のLinuxシステムではサウンド関連のほぼ標準的(?)役割なを果たしています。 つまり、WSLgを通じてPulseAudioが利用可能であれば、音声関連の開発がスムーズに行えるようです。

WSLgに対応しているかを調べる方法

1. WSLgの対応確認

【田+Rキー】を押してcmd.exeを起動します。

以下のコマンドを実行します。

# Windowsのバージョン確認(Windows 11 Build 22000以降が必要)
cmd.exe /c ver

# WSLのバージョン確認(0.50.2以降が必要)
wsl --version

Windows10ではわかりませんが、Windows11であればこの条件はクリアしていると思います。 WSLのバージョン表記にもWSLgのバージョンが表記されています。

2.PulseAudioの動作確認

# サウンド関連のプロセス確認
$ ps aux | grep pulseaudio

# WSLgのPulseServer確認
$ ls -l /mnt/wslg/PulseServer

3.PulseAudio対応アプリの動作確認

# 音声再生のテスト
# paplayが存在しない場合には事前に以下をインストールしてください。
# $ sudo apt install pulseaudio-utils
$ paplay /usr/share/sounds/alsa/Front_Center.wav

これらの確認が成功すれば問題なくWSLで音声出力するプログラムを作成していくことができます。

注意点

  • WSLg環境では自動的にPulseAudioサーバが起動するため、手動での起動は不要です。
  • 音が出ない場合は、Windows側の設定の可能性もあります。念の為、音声設定を確認してください

これらの設定で、WSL上で音声を再生できるようになります。

おわりに

今回は、WSLgPulseAudioを使用してWindowsで音声を再生する方法についてまとめてみました。

最初は「WSLで音声が鳴るのか?」という単純な疑問から始まりましたが、調べていくうちにWSLgという素晴らしい機能の存在を知ることができました。特に印象的だったのは、WSLgによってWindows-Linux間の連携が非常にスムーズになっている点です。以前はX serverの設定に苦労した経験がある方も多いと思いますが、現在のWSLgではそういった設定は不要になっています🤩

音声出力に関しても、PulseAudioを介することで、通常のLinux環境と同じように扱えます。これにより、Linux向けに開発した音声アプリケーションをWindows上でもテストできるようになります。

WSLでの音声アプリケーション開発に取り組む方々の参考になれば幸いです。

WSLgはグラフィカルな部分だけでないという点が割と盲点だったかも😎




以上の内容はhttps://uepon.hatenadiary.com/entry/2024/12/26/131540より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14