LinuxのサウンドをリモートのWindowsマシンで鳴らす

LinuxのサウンドをリモートのWindowsマシンで鳴らす方法です。
PulseAudio を使用します。

RaspberryPi で再生したサウンドも Windowsマシンから鳴らせます。
例えば下記記事での mp3再生もWindows でできます。

RaspberryPiでひかり電話の着信音をmp3で鳴らす パソコン鳥のブログ/ウェブリブログ


Windows側での作業


PulseAudio ダウンロード


PulseAudioを次のいずれかで用意します。


PulseAudio の設定


次の内容の default.pa を作成します。

default.pa

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


作成する場所は、次の個所です。

  • freedesktop.orgから入手した場合

  • etcディレクトリの中の default.pa を上記のもので置きかえます。

  • ThinLincのバンドル版を入手する

  • PulseAudio をダウンロード・展開したディレクトリをたどっていき、ファイル pulseaudio と同じディレクトリに置きます。


default.pa で load-module module-waveout~ の行の末尾の record=0 が無いと、pulseaudio 実行時に次のエラーが出て起動できないので、忘れないようにして下さい。


E: [(null)] modules/module-waveout.c: Failed to open WaveIn.
E: [(null)] pulsecore/log.c: Invalid UTF-8 string following below:
E: [(null)] modules/module-waveout.c: Error: システムにとって範囲外のデバイス ID を使用しました。
E: [(null)] pulsecore/module.c: Failed to load module "module-waveout" (argument: "sink_name=output source_name=input"): initialization failed.


2020.6.28追記
続けて、次の設定をします。
デフォルトでは pulseaudio は音を鳴らした後、アイドル状態が20秒続くと、実行を終了しますが、終了しないようにします。
(参考:https://poniti.hatenablog.com/entry/2020/01/08/002536

  • freedesktop.orgから入手した場合

  • etcディレクトリの中の daemon.conf に、追記します。

    exit-idle-time = -1


  • ThinLincのバンドル版を入手した場合

  • 次のファイルを作成します。XXXXX の部分は、各自のユーザー名に置き換えてください。

    "C:\Users\XXXXX\.pulse\daemon.conf"

    内容は次のようにします。


    exit-idle-time = -1



ファイアウォールの設定


PulseAudio は TCP の 4713番ポートを使用します。
外部から 4713番へ接続できるように、ファイアウォールのルールを設定します。

次のコマンドを管理者権限のコマンドプロンプトから実行すると、ルールが追加されます、

netsh advfirewall firewall add rule name="PulseAudio" dir=in action=allow protocol=TCP localport=4713


なお、この設定が不要になった場合は、次のコマンドでルールを削除します。

netsh advfirewall firewall delete rule name="PulseAudio"



PulseAudio の実行


次のコマンドを実行します。
いくつか Warning が出ますが、問題無いので、気にしないでください。

2020.6.28修正


pulseaudio.exe -F .\default.pa


  • freedesktop.orgから入手した場合


  • pulseaudio.exe -F ..\etc\pulse\default.pa


  • ThinLincのバンドル版を入手した場合


  • pulseaudio.exe -F .\default.pa



    この状態で、リモートの Linuxマシンで再生した音が、Windowsマシンで鳴ります。
    (リモートの Linuxマシンで必要な設定は、後述の「Linux側での作業」を見てください)

    2020.6.28削除

    なお、pulseaudio は音を鳴らした後、アイドル状態がデフォルトで20秒続くと、実行を終了します。
    この時間を延ばす場合は、--exit-idle-time オプションで秒単位で時間を指定します。
    次の例では、600秒間アイドルで終了します。


    pulseaudio.exe -F .\default.pa --exit-idle-time=600


    または、バッチファイルで次のようにしておくと、終了してもすぐ pulseaudio を再実行します。
    この場合は、--exit-idle-time を短くしても問題ありません。

    exec.bat

    :loop
    pulseaudio.exe -F .\default.pa --exit-idle-time=600
    goto loop




    Linux側での作業


    PulseAudio の設定


    PulseAudio をインストールします。


    apt-get install pulseaudio


    次のいずれかを実施します。
    ここでリモートのWindowsのIPアドレスを指定しています。

    • client.confで設定する

    • 設定ファイルをコピーします。

      mkdir ~/.pulse
      cp /etc/pulse/client.conf ~/.pulse/


      ~/.pulse/client.conf に次の行を追加します。
      xx.xx.xx.xx は、リモートのWindowsのIPアドレスを指定します。

      default-server = xx.xx.xx.xx


    • 環境変数 PULSE_SERVER で設定する

    • 次の行を実行します。
      xx.xx.xx.xx は、リモートのWindowsのIPアドレスを指定します。

      export PULSE_SERVER="xx.xx.xx.xx"


    もし現在実行中の pulseaudioデーモンがあれば終了しておきます。

    pulseaudio -k


    実行中の pulseaudioデーモンが無い場合は、次のような表示が出ます。

    E: [pulseaudio] main.c: デーモンのキルに失敗しました: そのようなプロセスはありません


    これでサウンドを鳴らす準備は整いました。


    サウンドの再生


    これまでの設定で、Linux でサウンドを再生すると、リモートの Windows のスピーカから再生されます。

    例えば次のコマンドを実行してみて下さい。
    「フロント」「レフト」「フロント」「レフト」・・・と英語音声が流れます。

    speaker-test -t wav


    mp3 もリモートで再生できます。(apt-get install mpg321 でインストールしておいてください)


    mpg321 test.mp3



    その他


    リモートのWindowsで音が途切れ途切れになる場合は、ネットワークが不安定で無いか確認して下さい。
    無線LANでつないでいた場合は、有線LANで試してみて下さい。

    mpg321 では -o オプションが指定できますが、下記のように pulse を指定しても音が雑音まみれになります。
    mpg321 は本記事中のように使用して下さい。


    mpg321 hoge.mp3 -o pulse



    参考


    Windows-Ubuntu間でスピーカーを共有する方法 - nishio-dens's diary
    読む価値があるのかどうか… : PulseaudioでUbuntuのサウンドをWindowsで出力する話
    Windows Pulseaudio failure · Issue #8 · aseering/wsl_gui_autoinstall · GitHub
    Windows用 pulseaudio 6.0のバイナリと設定 | hellokitty68
    PulseAudioで他の端末から音を出す - Qiita
    PulseAudio/サンプル - ArchWiki

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック