Python语音识别错误-无效的频道数

时间:2018-06-20 16:07:59

标签: python python-3.x speech-recognition

作为项目的一部分,我正在python上运行语音识别代码。我正面临一个非常奇怪的问题 当我将语音识别代码放在类似这样的函数中时:

def loop():
    r=sr.Recognizer()
    with sr.Microphone(device_index=2) as source:
            print("say something")
            audio = r.listen(source)
            try:
                    print("you said "+r.recognize_google(audio))
            except sr.UnknownValueError:
                    print("Could not understand")
            except sr.RequestError as e:
                    print("errpr: {0}".format(e))

它给我以下错误:

  

以sr.Microphone(device_index = 2)作为来源:文件“ /usr/local/lib/python3.5/dist-packages/speech_recognition/init.py”,   第141行,输入       input = True,#stream是输入流文件“ /usr/local/lib/python3.5/dist-packages/pyaudio.py”,行750,处于打开状态       流=流(自己,* args,** kwargs)文件“ /usr/local/lib/python3.5/dist-packages/pyaudio.py”,行441,在   初始化       self._stream = pa.open(** arguments)OSError:[Errno -9998]无效的频道数

但是,如果我在函数外部运行相同的代码行,例如不在def loop():内部运行,则会正常运行

我该怎么办? 我的python版本是3.5.4

2 个答案:

答案 0 :(得分:3)

尝试这种方式:

r = sr.Recognizer()
m = sr.Microphone(device_index=2)

def loop():
    with m as source:
        print("say something")
        audio = r.listen(source)
        try:
            print("you said "+r.recognize_google(audio))
        except sr.UnknownValueError:
            print("Could not understand")
        except sr.RequestError as e:
            print("errpr: {0}".format(e))

loop()

请勿创建多个Microphone()实例。

答案 1 :(得分:0)

是否可以独享该频道?只能有一个线程可以访问麦克风吗?您的问题可能是您尝试同时并发地访问麦克风(多次循环调用),而不是一次(在循环外)访问麦克风。