LinuxホストシステムでPulseAudioを使用することで可能であることは知っていますが、paprefs
はMacではなくLinux用に構築されています。
Docker-for-Mac VMにはサウンドパススルーデバイスがないため、その角度から利用できるものはありません。対照的に、virtualboxまたはvmwarefusion = VMにはパススルーオーディオを実行する機能があります。
次のコマンドを使用して、pulseaudioをインストールしてOSXで動作させることができました。
brew install pulseaudio
次のコマンドを実行することで、これが機能することを確認できました。スピーカーから音が聞こえます。
paplay cockatiel.wav
次のステップは、paplay
のコピーを持つ画像を見つけることです。 jess/pulseaudio を見つけました。これはpulseaudioserverを意図しているようですが、使用できるはずです。 clientとしても。
Archlinux Wikiで、pulseaudioネットワークサウンドの設定について説明している次のガイドを見つけました: https://wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network
次のようにすることで、この状況に適応させることができました。 Macで/usr/local/Cellar/pulseaudio/9.0/etc/Pulse/default.pa
を編集し、次の2行のコメントを外しました。
load-module module-esound-protocol-tcp
load-module module-native-protocol-tcp
Macでpaplay cockatiel.wav
を再実行して、変更が引き続き機能することを確認しました。 pulseaudioデーモンはオンデマンドで起動しているようで、タイプミスをした場合は、苦情をpaplay
に返して画面に出力します。 default.paへのこれらの変更についてはまだ問題がないので、変更しても何も壊れなかったことに満足しています。
次に、次のようなコンテナでpulseaudioクライアントを実行しました。
docker run --rm -v $HOME:$HOME -w $HOME -it \
-e Pulse_SERVER=192.168.10.23 \
-e HOME=$HOME --entrypoint paplay \
jess/pulseaudio $HOME/cockatiel.wav
これは、ローカルホームディレクトリをボリュームとしてコンテナを実行します。これには2つの目的があります。 1つ目は、私のcockatiel.wavが$HOME
内にあるという事実です。 2つ目は、クライアントとサーバーの両方が同じ~/.config/Pulse/cookie
ファイルのコピーを持っている必要があるためです(そのarchlinux wikiガイドによる)。
Pulse_SERVER
環境変数はOSXホストのen0IPアドレスであるため、paplayは何に接続するかを認識しています。
Paplayが同じ~/.config/Pulse/cookie
ファイルを見つけることができるように、HOME
環境変数が必要です。
Docker-for-macで実行されているコンテナーからpulseaudioを介してサウンドを再生することができました。
~/.config/Pulse/cookie
ファイルが正しい場所に表示される限り、サウンドを再生できるはずです。これを実現するためにホストボリュームを使用する必要はありません。「dockercp」を実行することも、イメージにCOPY
することもできます。
Macに PulseAudio をインストールします。
brew install pulseaudio
デーモンを実行します。
pulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon
Dockerコンテナ内:
apt-get install pulseaudio
)。ENV Pulse_SERVER=docker.for.mac.localhost
実行するときは、~/.config/Pulse
ディレクトリを認証用のコンテナと共有します。
テストを実行して、次のように機能しているかどうかを確認できます。
docker run -it -e Pulse_SERVER=docker.for.mac.localhost -v ~/.config/Pulse:/home/pulseaudio/.config/Pulse --entrypoint speaker-test --rm jess/pulseaudio -c 2 -l 1 -t wav