Zenn
Closed2

メモ: Dockerコンテナで再生した音声を、MacのPulseAudioで聞く

kun432kun432

ホスト側のMac

brew install pulseaudio
pulseaudio --version
出力
pulseaudio 17.0

PulseAudioをデーモンとして起動

pulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon

最初起動したときはフォアグラウンドで動くのかな?と思ったけど、どうやらバックグラウンドになるみたい。デーモンの起動を確認。

pulseaudio --check -v
出力
I: [] main.c: Daemon running as PID 7310

そして~/.config/pulse内にファイルが作成されている。これがコンテナで必要になる。

ls -l ~/.config/pulse
出力
total 40
-rw-------@ 1 kun432  staff   256  3 25 01:04 cookie
-rw-------@ 1 kun432  staff   373  3 25 01:04 [ホスト名]-card-database.simple
-rw-------@ 1 kun432  staff     1  3 25 01:04 [ホスト名]-default-sink
-rw-------@ 1 kun432  staff     1  3 25 01:04 [ホスト名]-default-source
-rw-------@ 1 kun432  staff  2023  3 25 01:04 [ホスト名]-device-volumes.simple
lrwx------@ 1 kun432  staff    68  3 25 01:04 [ホスト名]-runtime -> /var/folders/XX/XXXXXXXXXXXXXXXXXXXXXXXX/X//pulse-XXXXXXXX

Ubuntuコンテナを立ち上げる。上のディレクトリをマウントする。

docker run \
    --rm \
    -it \
    -v ~/.config/pulse:/root/.config/pulse \
    ubuntu /bin/bash

以降コンテナ内の作業

pulseaudioをインストール。alsa-utilsにはスピーカーテスト用のコマンドが含まれている。

apt update
DEBIAN_FRONTEND=nointeractive apt install -y pulseaudio alsa-utils

ではサウンド再生

export PULSE_SERVER=host.docker.internal
speaker-test

音が聞こえない場合は、Mac側でPulseAudioの出力先設定を確認。

pacmd list-sinks | egrep -e '(name:|index:|card:|device.string =)'
出力
  * index: 0
	name: <Channel_1__Channel_2>
	card: 0 <PHL_328P6VU>
		device.string = "PHL 328P6VU"
    index: 1
	name: <Front_Left__Front_Right.2>
	card: 3 <Jabra_SPEAK_510_USB>
		device.string = "Jabra SPEAK 510 USB"
    index: 2
	name: <Channel_1__Channel_2.2>
	card: 5 <BlackHole_2ch>
		device.string = "BlackHole 2ch"
    index: 3
	name: <1__2>
	card: 6 <________________________>
		device.string = "外部ヘッドフォン"
(snip)

音声を出力させたいデバイスのIDに変更する。なお、この設定はMac本体で選択されている音声出力デバイスの設定とは関係なく動作するみたい。

pactl set-default-sink 1

参考

https://zenn.dev/t_o_d/articles/18565f8db69f30

https://gist.github.com/seongyongkim/b7d630a03e74c7ab1c6b53473b592712

kun432kun432

雑にやるならMac側でPulseAudioを起動する際にauth-anonymous=1を指定しておくと、Docker側からCookieをマウントする必要がなくなる。

pulseaudio \
    --load="module-native-protocol-tcp auth-anonymous=1" \
    --exit-idle-time=-1 \
    --daemon

もしくはこれ。127.0.0.1になるんだね。

pulseaudio \
    --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1" \
    --exit-idle-time=-1 \
    --daemon
このスクラップは6日前にクローズされました
ログインするとコメントできます