WSLでPulseAudioを使用して音を出す方法

チュートリアル

Windows Subsystem for Linux (WSL)は、Windows上でLinuxのバイナリ実行ファイルを直接実行できる強力な機能です。しかし、WSLでは音声の再生が直接サポートされていないため、外部ソフトウェアを使用してこの機能を実現する必要があります。この記事では、PulseAudioを使用してWSLで音声を再生する方法をステップバイステップで説明します。


こちらの記事もおすすめ

Style-Bert-VITS2でずんだもんの声を学習させてみた(GoogleColabのノート付き)
近年、AI技術の進化は目覚ましく、その一環として音声合成技術も大きく前進しています。特に、話者の声質や話し方を模倣する技術は、エンターテイメントから教育まで幅広い分野での応用が期待されています。この記事では、Style-Bert-VITS2...
Style-Bert-VITS2で生成した音声をVTube StudioとPython連携して表情を制御してみた
最新技術を駆使して、リアルタイムでキャラクターの表情をコントロールすることは、多くのバーチャルYouTuberやストリーマーにとって非常に興味深いトピックです。この記事では、Style-Bert-VITS2で生成した音声を使い、VTube ...

デモ動画

## **Windowsの準備**

まず、Windows側でPulseAudioサーバーを設定する必要があります。以下の手順に従って設定してください。

1. **PulseAudioのダウンロード** : [PulseAudioの公式サイト](https://www.freedesktop.org/wiki/Software/PulseAudio/Ports/Windows/Support/) から「zipfile containing preview binaries」をダウンロードし、適切な場所に解凍します。

![file](https://hamaruki.com/wp-content/uploads/2024/03/image-1709536767510.png)

2. **環境変数の設定** : 解凍したフォルダ内のbinディレクトリをシステムの環境変数PATHに追加します。

![file](https://hamaruki.com/wp-content/uploads/2024/03/image-1709536947156.png)

3. **設定ファイルの編集** : 解凍したフォルダ内のetc\pulse\default.paファイルに以下の行を追記します。

```lua

load-module module-waveout sink_name=output source_name=input record=0
load-module module-native-protocol-tcp auth-anonymous=1
```

4. **デーモン設定の変更** : 同じくetc\pulse\daemon.confファイルにexit-idle-time = -1を追記します。これにより、PulseAudioサーバーがアイドル状態で自動的に終了するのを防ぎます。

## **WSLの準備**

次に、WSL側でPulseAudioクライアントを設定します。
1. **PulseAudioのインストール** : WSLのターミナルを開き、以下のコマンドを実行してPulseAudioをインストールします。

```sql

sudo apt update
sudo apt install pulseaudio
sudo apt -y install ffmpeg
```

2. **クライアント設定の変更** : /etc/pulse/client.confファイルを編集し、以下の行を追記します。

```arduino

default-server = tcp:localhost
```

3. **デフォルト設定の変更** : /etc/pulse/default.paファイルを開き、load-module module-native-protocol-tcp行を確認または追記します。

## **音声の再生**

設定が完了したら、音声を再生してみましょう。

### **Windows側の操作**

コマンドプロンプトを開き、pulseaudioコマンドを実行します。エラーメッセージが表示されるかもしれませんが、これは通常、無視して構いません。

```bash

C:\Users\MakiMaki>pulseaudio
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.

```

### **WSL側の操作**

1. 新しいWSLのターミナルを開き、sudo pulseaudio --systemを実行します。こちらもいくつかの警告メッセージが表示されますが、問題ありません。

```bash

maki@TurtleTower:~$ sudo pulseaudio --system
W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set.
W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading not set.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
W: [pulseaudio] main.c: Home directory of user 'pulse' is not '/var/run/pulse', ignoring.
W: [pulseaudio] main.c: OK, so you are running PA in system mode. Please make sure that you actually do want to do that.
W: [pulseaudio] main.c: Please read http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system mode is usually a bad idea.
W: [pulseaudio] authkey.c: Failed to open cookie file '/var/run/pulse/.config/pulse/cookie': No such file or directory
W: [pulseaudio] authkey.c: Failed to load authentication key '/var/run/pulse/.config/pulse/cookie': No such file or directory
W: [pulseaudio] authkey.c: Failed to open cookie file '/var/run/pulse/.pulse-cookie': No such file or directory
W: [pulseaudio] authkey.c: Failed to load authentication key '/var/run/pulse/.pulse-cookie': No such file or directory
W: [pulseaudio] cli-command.c: stat('/etc/pulse/system.pa.d'): No such file or directory
```

2. 音声ファイルをWSL上に用意し、ffplay audio.wavのようにして再生します。

```bash

maki@TurtleTower:~/audio$ ffplay audio.wav
ffplay version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2003-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, wav, from 'audio.wav': 0KB vq= 0KB sq= 0B f=0/0
Duration: 00:00:04.06, bitrate: 705 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 1 channels, s16, 705 kb/s
^CSegmentation faultfd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
```

![file](https://hamaruki.com/wp-content/uploads/2024/03/image-1709536663622.png)

これで、WSL上で音声ファイルが正常に再生されれば成功です。この方法を利用すれば、WSLでの開発作業中にも音声に関連するテストやアプリケーションの利用が可能になります。

## 参考サイト

pulseaudioを使ってWSLで音を出す - Qiita
タイトルのとおりです僕の環境は、OS : Windows 10 Education 64bitWSL : Ubuntu 20.04Windows側の準備…

コメント

タイトルとURLをコピーしました