You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.10下Speech SDK报错SPXERR_MIC_NOT_AVAILABLE求助

解决Ubuntu 22.10下Azure Speech SDK麦克风不可用(SPXERR_MIC_NOT_AVAILABLE)问题

你遇到的SPXERR_MIC_NOT_AVAILABLE错误在Ubuntu 22.10上多由系统权限未配置、音频设备识别异常或依赖缺失导致,以下是针对性解决步骤:

1. 确认系统麦克风状态

  • 列出所有可用音频输入设备,查看目标麦克风的状态和名称:
    pactl list sources
    
    重点检查设备的State是否为RUNNING,同时记下设备的Name字段(例如alsa_input.usb-XXX.analog-mono)。
  • 测试麦克风硬件是否正常:
    arecord test.wav
    # 录音结束按Ctrl+C,播放验证
    aplay test.wav
    
  • 检查系统权限:打开Ubuntu设置→隐私→麦克风,确保运行脚本的终端/IDE已获得麦克风访问权限。

2. 正确指定音频设备

直接将pactl输出的设备名称填入代码,注意保留原始字符串格式:

audio_config = speechsdk.audio.AudioConfig(device_name="alsa_input.usb-Logitech_Logitech_USB_Headset-00.mono-fallback")

3. 安装必要依赖库

Ubuntu下Azure Speech SDK依赖ALSA音频库,执行以下命令确保安装完整:

sudo apt-get update
sudo apt-get install libasound2 libasound2:i386

4. 设置默认音频输入设备

如果指定设备名称无效,先将目标麦克风设为系统默认输入:

pactl set-default-source <你的设备Name>

之后修改代码使用默认麦克风:

audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)

5. 更新Speech SDK到最新版

旧版本可能存在Ubuntu 22.10兼容性问题,执行升级:

pip install --upgrade azure-cognitiveservices-speech

补充完整示例代码

建议添加错误分支处理,方便排查问题:

import azure.cognitiveservices.speech as speechsdk

def listen(language):
    # 替换为你的Azure订阅密钥和区域
    speech_config = speechsdk.SpeechConfig(subscription="YOUR_SUBSCRIPTION_KEY", region="YOUR_REGION")
    speech_config.speech_recognition_language = language
    
    # 使用pactl获取的设备名称,或设为默认
    audio_config = speechsdk.audio.AudioConfig(device_name="alsa_input.usb-XXX.analog-mono")
    # audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
    
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
    print("Speak into your microphone.")
    speech_recognition_result = speech_recognizer.recognize_once_async().get()
    
    if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
        print("Recognized: {}".format(speech_recognition_result.text))
        return speech_recognition_result.text
    elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
        print(f"No speech could be recognized: {speech_recognition_result.no_match_details}")
    elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
        cancellation_details = speech_recognition_result.cancellation_details
        print(f"Speech Recognition canceled: {cancellation_details.reason}")
        if cancellation_details.reason == speechsdk.CancellationReason.Error:
            print(f"Error details: {cancellation_details.error_details}")

内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:05:28