Raz*_*azi 9 python audio microphone docker
我正在运行一个带有 python 代码的 docker 容器,该代码使用内置麦克风的主机 MacBook Pro 记录几秒钟的声音。
我面临的部分挑战是确定如何在 Docker 容器内提供访问/共享 Macbook Pro 麦克风。大多数关于堆栈溢出或其他地方的现有问题都为基于 Linux 的发行版提供了解决方案,但我没有太多运气在 mac os 上做同样的事情。
操作系统版本详情:
System Version: macOS 10.14.2 (18C54)
Kernel Version: Darwin 18.2.0
Run Code Online (Sandbox Code Playgroud)
码头工人:
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
这是 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" ]
Run Code Online (Sandbox Code Playgroud)
docker build -t audiorecording:1.0 .
docker run -it --rm --device --privileged=true DONT_KNOW_ABOUT_THIS_PART:/dev/snd audiorecording:1.0
Run Code Online (Sandbox Code Playgroud)
理想情况下,当 Linux 是主机时,应该能够像您一样安装/共享麦克风。如果不是,其他可能的解决方案是什么?
docker run -it --rm --device --privileged=true DONT_KNOW_ABOUT_THIS_PART:/dev/snd audiorecording:1.0
Run Code Online (Sandbox Code Playgroud)
pulseaudio尝试在主机上运行服务器并从 docker 连接到它。
您需要在pulseaudio支持下构建 docker:
RUN apt-get update && apt-get install -y \
vorbis-tools \
sox \
alsa-utils \
libasound2 \
libasound2-plugins \
pulseaudio \
pulseaudio-utils \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)
然后
load-module module-native-protocol-tcp/etc/pulse/default.pa-e-v选项共享)来授权在 docker 中使用它--device然后运行
docker run -it \
--device=/dev/snd \
-e PULSE_SERVER=host.docker.internal \
-v ~/.config/pulse:/home/pulseaudio/.config/pulse \
... + other options you need
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |