gpt4 book ai didi

macos - 如何将 Docker 容器中的音频暴露给 Mac?

转载 作者:IT老高 更新时间:2023-10-28 12:43:52 52 4
gpt4 key购买 nike

我知道可以通过在 Linux 主机系统上使用脉冲音频但是 paprefs 是为 linux 而不是为 mac 构建的。

最佳答案

Docker-for-Mac 虚拟机没有任何声音直通设备,因此您无法从这个角度利用任何东西。相比之下,virtualbox 或 vmware fusion VM 确实有能力做直通音频。

我能够使用以下命令安装 pulseaudio 并在 OSX 上工作:

brew install pulseaudio

我能够通过运行以下命令来验证这是否有效,并且听到了我的扬声器发出的声音:

paplay cockatiel.wav

我的下一步是找到具有 paplay 副本的图像。我找到了 jess/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 到图像中。

关于macos - 如何将 Docker 容器中的音频暴露给 Mac?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136606/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com