web-dev-qa-db-ja.com

Dockerコンテナでサウンドを再生する方法

私は他の開発者とコードを共有するために音声合成アプリケーションをドッキングしようとしていますが、私が今抱えている問題は、ドッカーコンテナがホストマシンでサウンドカードを見つけられないことです。

Dockerコンテナでwavファイルを再生しようとすると

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

主な問題は、ドッカーコンテナがホストのサウンドカードに到達できないことだと思います。

これまでのところ

  1. Dockerコンテナ内にalsa-utilsとほとんどのalsa依存関係をインストールしました。
  2. --group-add audioを指定して、コンテナの実行中にdocker run --group-add audio -t -i self/debian /bin/bashを追加しました

これがdockerでも可能かどうかはわかりません(サウンドカードなどのハードウェアリソースがコンテナーと共有される方法が正確にはわかりません)。 Mac OS Yosemiteホストでdebianコンテナを使用しています。

15
Anoop

/ dev/sndをマウントする必要があります。JessFrazelleがSpotifyコンテナーをどのように起動するかを確認してください。

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

あなたが気づくでしょう

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

または、Chromeの場合、最後に

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
19
user2915097