当前位置: 首页 > 面试题库 >

如何在Docker容器中播放声音

严安志
2023-03-14
问题内容

我正在尝试将文本语音转换应用程序与其他开发人员共享,但是我现在遇到的问题是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

我想主要的问题是docker容器无法到达主机上的声卡。

到目前为止,我有

  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容器


问题答案:

绝对有可能,您需要挂载/ dev / snd,看看Jess Frazelle如何启动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


 类似资料:
  • 我正在尝试将一个文本到语音的应用程序dockerize,以便与其他开发人员共享代码,但是我现在遇到的问题是docker容器在我的主机上找不到声卡。 当我尝试在docker容器中播放wav文件时 我猜主要问题是docker容器无法接触到主机上的声卡。 目前为止我有 我在docker容器中安装了alsa-utils和大多数alsa依赖项。 在运行容器时,通过指定 我不确定docker是否能做到这一点(

  • streaming播放声音内容 从已登录为频道的Web网页,接收数据并进行播放(streaming播放)。您只能于连接网络时,参阅/播放其中的声音内容。 1. 进入(网络)后,选择(RSS频道)。 2. 选择频道。 与因特网(互联网)联机后,会自动确认内容。并显示最新项目之一览。 3. 选择想播放的项目。 开始streaming(串流)播放。 提示 可参阅/播放支持RSS 2.0方式(Podcas

  • 问题内容: Octave似乎假设某个特定的声音播放实用程序将在系统上可用,但似乎没有提供指定备用声音的功能。在以下错误中,Octave正在寻找,这不是在所有系统上都可用的实用程序。 八度:38>声音(beamformed_20) sh:ofsndplay:找不到命令 是否可以使用Octave配置设置或代码片段来指定适合系统的实用程序? 问题答案: 在我的一台Linux机器上,我创建了以下ofsnd

  • 我在许多论坛和YouTube教程中搜索了一些简单的代码来播放声音文件(.mp3),但我找到的所有内容都不适合我。 我总是收到异常,它找不到文件或其他错误,但它总是以异常结束。 有什么我必须先配置的吗? -编辑- 我再次尝试以下代码来显示我得到的解释: 这是我的代码 添加JFXPanel后,我得到了异常:线程“main”中的异常MEDIA Exception:MEDIA _ UNAVAILABLE

  • 问题内容: 这是我用来在我的react应用程序中使用url(this.url)播放声音的代码。当我按下播放按钮时,它给我一个错误 我不确定为什么会这样,因为我没有看到任何未定义的状态。一个;; 状态已经声明。 我是新来的反应者,所以我可能会错过一些非常重要的东西。 请帮忙! 问题答案: 我稍微改进了Jaxx的版本,使其包含一个,以便在音频结束时重置按钮。 ES6类属性语法 挂钩版本(反应16.8+

  • 我有像素2XL,这个设备有2个扬声器,一个在顶部,一个在底部。 所以,对于声音播放,我使用的是双簧管 https://github.com/google/oboe/tree/master/samples/hello-oboe 但我注意到声音只从顶部的一个扬声器播放。 但例如,PlayMarket-SoundCloud上有一个应用程序,如果我尝试从这个应用程序播放一些内容,我会听到声音来自顶部和底部