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

Результат этого будет просто массовым выходом специальных символов, а не аудио с espeak. Когда я печатаю это:Subprocess.call and -stdout

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 означает здесь? И почему это вызывает ошибку, как упоминалось?

ответ

1

От espeak documentation:

--stdout

Записывает речевого вывода на стандартный вывод, как это получается, а не говорить на нем. Данные начинаются с заголовка файла WAV, который указывает частоту дискретизации и формат данных. Поле длины установлено на ноль, потому что длина данных неизвестна при создании заголовка .

Для jack server is not running or cannot be started ошибки проверки this link для решения:

ли вы установили пакет ALSA (тип «ALSA» и клавишу табуляции дважды, вы должны увидеть некоторые команды, начиная с 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 самого метода. Просто снимите его.

+0

ALSA уже существует. Добавление 2>/dev/null все еще не делает трюк. Все равно. – sam

+0

@sam Что значит еще одно и то же? ошибка "не работает или не может быть запущен"? или что-то другое? – Samuel

+0

Я набираю это: 'subprocess.call ([" espeak "," -s 5 -ven "," where are you "," 2>/dev/null ", 'shell = True'," aplay "])' и он выходит 'Джек-сервер не запущен или не может быть запущен' – sam

Смежные вопросы