我正在运行一个 Docker 容器,其中包含使用 MacBook Pro 内置麦克风录制几秒钟声音的 Python 代码。
我的挑战之一是确定如何在 Docker 容器内提供访问/共享 MacBook Pro 麦克风。大多数现有的关于此问题的答案都针对基于 Linux 的发行版,但我在 macOS 上没有找到类似的解决方案。
操作系统版本详细信息:
System Version: macOS 10.14.2 (18C54)
Kernel Version: Darwin 18.2.0
Docker:
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:39 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:06 2019
OS/Arch: linux/amd64
Experimental: false
这段 Python 代码简单易懂,能够在主机上按预期工作。
import sounddevice as sd
import numpy as np
fs = 48000
duration=5
rec = sd.rec(int(duration * fs), samplerate=fs, channels=1, blocking=True)
print(rec)
这是docker文件:
FROM python:3
RUN apt-get -y update
RUN apt-get -y install libasound-dev
RUN apt-get -y install portaudio19-dev
WORKDIR /usr/src/app
COPY requirements.txt ./
COPY AudioRecordingTest.py ./
RUN pip install -r requirements.txt
CMD [ "python", "./AudioRecordingTest.py" ]
docker build -t audiorecording:1.0 .
docker run -it --rm --device --privileged=true DONT_KNOW_ABOUT_THIS_PART:/dev/snd audiorecording:1.0
理想情况下,应该能够像Linux主机一样挂载/共享麦克风。如果不能,还有其他可能的解决方案吗?
docker run -it --rm --device --privileged=true DONT_KNOW_ABOUT_THIS_PART:/dev/snd audiorecording:1.0
pulseaudio
服务器,还需要运行它 ;) 你可以通过brew services start pulseaudio
(然后重新登录)或者pulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon
来启动它。在服务器启动后,配置目录会自动创建。 - igrinisdocker.for.mac.localhost
更改为host.docker.internal
。 - igrinispulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon
时,我遇到了一些问题。我通过homebrew下载了pulseaudio并按照您的指示运行,但出现了错误:dyld: Library not loaded: /usr/local/opt/gdbm/lib/libgdbm.6.dylib Referenced from: /usr/local/bin/pulseaudio Reason: image not found [1] 13266 abort pulseaudio
- Chompakorn CChaichotdocker: Error response from daemon: error gathering device information while adding custom device "/dev/snd": no such file or directory.
- Chompakorn CChaichot