2015-11-17 11 views
3

Я пробовал несколько дней использовать микрофон на моем ubuntu 14.04 с PyAudio. На самом деле я хочу использовать пакет «Speech Recognition» в github.PyAudio не может использовать микрофон на Ubuntu 14.04 с «неспособным открыть slave»

Я нахожу, что он использует внутреннюю часть pyaudio, и это кошмар на ubuntu 14.04. Он показывает следующее сообщение об ошибке и не может распознать мой голос с микрофона:

ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) unable to open slave 
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side 
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave 

Я нахожу несколько похожих постов на веб-сайтах, и нет никакого решения об этом. Я не могу записывать свой голос через микрофон, он просто держится там. Кто-нибудь успешно запускает его на ubuntu 14.04? (PyAudio для записи голоса или Speech Recognition)

ответ

1

Я не знаю, решает ли это вашу проблему, но в моем случае были установлены звуковые устройства и импульсы HDMI (также Ubuntu 14.04). Поскольку индексы устройств, похоже, меняются, я придумал этот маленький скрипт, который перечисляет все доступные устройства и дает мне индекс импульсного устройства (вам может понадобиться другое устройство, например, если у вас есть USB-микрофон или s. е).

import pyaudio 
pa = pyaudio.PyAudio() 
chosen_device_index = -1 
for x in xrange(0,pa.get_device_count()): 
    info = pa.get_device_info_by_index(x) 
    print pa.get_device_info_by_index(x) 
    if info["name"] == "pulse": 
     chosen_device_index = info["index"] 
     print "Chosen index: ", chosen_device_index 

После того, что я могу открыть поток:

p = pyaudio.PyAudio() 
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input_device_index=chosen_device_index, input=True, output=False) 
stream.start_stream()