動かざることバグの如し

近づきたいよ 君の理想に

PulseAudioを使って別のLinuxサーバーのスピーカーから音を再生したい

環境

やりたいこと

サーバーAとBがある。サーバーAにはtest.wavがあり、サーバーBにスピーカーがある。

サーバーAから aplay test.wavを実行し、サーバーBのスピーカーから音を鳴らしたい。

今回はPulseAudioを使って実現してみる。

  • サーバーB: PulseAudioサーバー
  • サーバーA: PulseAudioクライアント

サーバー側の設定

echo 'load-module module-native-protocol-tcp listen=0.0.0.0 auth-anonymous=1' > /etc/pulse/default.pa.d/my.pa

設定反映

$ systemctl --user restart pulseaudio.service
$ systemctl --user restart pulseaudio.socket

sshすると自動で起動するが、再起動後に反応しなくなってしまうので自動起動するようにしておく

$ systemctl --user enable pulseaudio
Created symlink /home/thr3a/.config/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service.
Created symlink /home/thr3a/.config/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket.

クライアント側の設定

設定前に確認

$ pacmd list-sinks
1 sink(s) available.
  * index: 0
    name: <auto_null>
    driver: <module-null-sink.c>
    flags: DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
    state: IDLE
    suspend cause: (none)
    priority: 1000
    volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
            balance 0.00
    base volume: 65536 / 100% / 0.00 dB
    volume steps: 65537
    muted: no
    current latency: 2045.22 ms
    max request: 375 KiB
    max rewind: 375 KiB
    monitor source: 0
    sample spec: s16le 2ch 48000Hz
    channel map: front-left,front-right
                 Stereo
    used by: 0
    linked by: 0
    configured latency: 2000.00 ms; range is 0.50 .. 2000.00 ms
    module: 13
    properties:
        device.description = "Dummy Output"
        device.class = "abstract"
        device.icon_name = "audio-card"

設定

pacmd load-module module-tunnel-sink server=192.168.16.16

いざ確認 問題なければこれでサーバーBから音が鳴る

aplay /tmp/test.wav

設定の永続化

ただこれだと毎回設定しなくちゃいけなくて面倒

/etc/pulse/client.conf.d/my.conf 作成して以下

default-server = 192.168.16.16

確認

$ pacmd list-sinks
1 sink(s) available.
  * index: 24
    name: <tunnel-sink.192.168.16.16>
    driver: <module-tunnel.c>
    flags: NETWORK HW_MUTE_CTRL HW_VOLUME_CTRL LATENCY
    state: SUSPENDED
    suspend cause: IDLE
    priority: 0
    volume: front-left: 65536 / 100%,   front-right: 65536 / 100%
            balance 0.00
    base volume: 65536 / 100%
    volume steps: 65537
    muted: no
    current latency: 0.00 ms
    max request: 0 KiB
    max rewind: 0 KiB
    monitor source: 24
    sample spec: s16le 2ch 44100Hz
    channel map: front-left,front-right
                 Stereo
    used by: 0
    linked by: 0
    fixed latency: 250.00 ms
    module: 47
    properties:
        device.description = "USB Audio and HID Analog Stereo on thr3a@NuxBox"
        tunnel.remote.server = "192.168.16.16"
        device.icon_name = "audio-card"
        tunnel.remote_version = "35"
        tunnel.remote.user = "thr3a"
        tunnel.remote.fqdn = "NuxBox"
        tunnel.remote.description = "USB Audio and HID Analog Stereo"

参考リンク