Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
986 views
in Technique[技术] by (71.8m points)

audio - How to play sound in a Docker container on Mac OS Yosemite

I'm trying to dockerize a text to speech application for sharing the code with other developers, however the issue I am having right now is the docker container cannot find the sound card on my host machine.

When I try to play a wav file in my docker container

root@3e9ef1e869ea:/# aplay Alesis-Fusion-Acoustic-Bass-C2.wav
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4738:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:722: audio open error: No such file or directory

I guess that the main problem is docker container is unable reach the sound card on my host.

So far I have

  1. I installed alsa-utils and most of the alsa dependencies within my docker container.
  2. Added --group-add audio while running the container by specifying docker run --group-add audio -t -i self/debian /bin/bash

I am not sure if this is even possible with docker(I'm not exactly sure of how hardware resources such as sound cards are shared with containers). I'm using a debian container on a Mac OS Yosemite host.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It is definitely possible, you need to mount /dev/snd, see how Jess Frazelle launches a Spotify container, from

https://blog.jessfraz.com/post/docker-containers-on-the-desktop/

you will notice

docker run -it 
    -v /tmp/.X11-unix:/tmp/.X11-unix  # mount the X11 socket
    -e DISPLAY=unix$DISPLAY  # pass the display
    --device /dev/snd  # sound
    --name spotify 
    jess/spotify

or for Chrome, at the end

docker run -it 
    --net host  # may as well YOLO
    --cpuset-cpus 0  # control the cpu
    --memory 512mb  # max memory it can use
    -v /tmp/.X11-unix:/tmp/.X11-unix  # mount the X11 socket
    -e DISPLAY=unix$DISPLAY  # pass the display
    -v $HOME/Downloads:/root/Downloads  # optional, but nice
    -v $HOME/.config/google-chrome/:/data  # if you want to save state
    --device /dev/snd  # so we have sound
    --name chrome 
    jess/chrome

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...