首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Subprocess.call和.

Subprocess.call和.
EN

Stack Overflow用户
提问于 2016-08-07 04:35:51
回答 1查看 606关注 0票数 2
代码语言:javascript
复制
subprocess.call(["espeak", "-s 5 -ven", "where are you", "--stdout", 'shell=True', "aplay"])

它的输出将只是大量的特殊字符输出,而不是来自espeak的音频输出。当我输入这个:

代码语言:javascript
复制
subprocess.call(["espeak", "-s 5 -ven", "where are you", 'shell=True', "aplay"])

然后会听到声音,但有时演讲速度慢会出现一些问题,以及下面的信息输出:

代码语言:javascript
复制
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started

有人能解释一下--stdout是什么意思吗?为什么会导致前面提到的错误呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-07 04:48:27

来自espeak文档

--标准 在产生时将语音输出写入stdout,而不是说出来。数据以WAV文件头开始,该文件头指示数据的采样率和格式。长度字段设置为零,因为生成标头时数据的长度是未知的。

对于jack server is not running or cannot be started错误,请检查此链接以获得解决方案:

您是否安装了alsa包(键入'alsa‘和选项卡键两次,应该会看到一些以alsa.开头的命令)?如果没有安装,请使用 sudo apt-获取安装alsa-tools alsa-utils

无论如何,此错误不应阻止espeak工作。您可以通过将stderr重定向到/dev/null来删除它,如下所示:

代码语言:javascript
复制
FNULL = open(os.devnull, 'w')
retcode = subprocess.call(["espeak", "-s 5", "-ven", "where are you", "aplay"], stdout=FNULL, stderr=subprocess.STDOUT)

另外,请注意,您使用shell=True作为espeak的参数之一,这实际上应该是call方法本身的参数。只要把它移开。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38810897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档