2
subprocess.call(["espeak", "-s 5 -ven", "where are you", "--stdout", 'shell=True', "aplay"])

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

subprocess.call(["espeak", "-s 5 -ven", "where are you", 'shell=True', "aplay"])

然后会听到音频,但有时会出现语音缓慢的问题,以及以下消息的输出:

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 在这里的含义吗?为什么会导致上述错误?

4

1 回答 1

1

espeak文档

--stdout

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

对于jack server is not running or cannot be started错误检查此链接的解决方案:

您是否安装了 alsa 软件包(键入“alsa”和两次 tab 键,您应该会看到一些以 alsa.. 开头的命令)?如果未安装,请使用

sudo apt-get install alsa-tools alsa-utils

无论如何,这个错误不应该阻止espeak工作。您可以通过重定向stderr/dev/null以下方式将其删除:

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方法本身的参数。只需将其删除。

于 2016-08-07T04:48:27.403 回答