我知道在Linux主机系统上使用脉冲音频是可能的但paprefs
是为linux而不是mac而构建的。
答案 0 :(得分:14)
Docker-for-Mac VM没有任何声音直通设备,因此没有任何东西可以从这个角度利用。相比之下,虚拟机或vmware融合虚拟机确实能够直通音频。
我能够使用以下命令安装pulseaudio并在OSX上工作:
brew install pulseaudio
我能够通过运行以下内容验证这是否有效,听到声音来自我的扬声器:
paplay cockatiel.wav
我的下一步是查找包含paplay
副本的图片。我找到了jess/pulseaudio,它似乎是一个pulseaudio 服务器,但我也应该可以将它用作客户端。
我在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
,并取消注释了以下两行:
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
这样做是使用我的本地主目录作为卷运行容器。这有两个目的。首先是我的cockatiel.wav位于$HOME
内。第二个是因为客户端和服务器都需要具有相同~/.config/pulse/cookie
文件的副本(根据archlinux wiki指南)。
PULSE_SERVER
环境变量是我的OSX主机的en0 IP地址,因此paplay知道要连接的内容。
HOME
环境变量是必需的,因此paplay可以找到相同的~/.config/pulse/cookie
文件。
我能够通过pulseaudio从我的docker-for-mac上运行的容器中播放声音。
只要您将~/.config/pulse/cookie
文件显示在正确的位置,您就应该可以播放声音了。您不必使用主机卷来完成此操作 - 您还可以执行“docker cp”,甚至COPY
将其添加到图像中。
答案 1 :(得分:5)
在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