如何使用PyAudio检测可用麦克风并避免返回IOError?
PyAudio可用麦克风检测实现方案
完全可以实现无麦克风时直接返回0、不抛出IOError的检测逻辑,具体实现方式如下:
核心原理
info.get('deviceCount')返回的是所有音频设备的总数量,包含扬声器、麦克风等全类型设备,你当前返回的3就是仅有的3个扬声器设备- 直接调用
p.get_default_input_device_info()时,系统没有默认输入设备就会直接抛出IOError,通过异常捕获或者全设备遍历筛选两种方式都可以规避报错
实现方案
方案1:全设备遍历(推荐,可统计所有可用麦克风数量)
遍历所有音频设备,通过maxInputChannels属性判断是否为输入设备(麦克风),输入通道数大于0即为可用麦克风,无麦克风时直接返回0:
import pyaudio def get_available_microphone_count(): audio = pyaudio.PyAudio() available_mic_num = 0 # 遍历所有注册的音频设备 for device_index in range(audio.get_device_count()): device_info = audio.get_device_info_by_index(device_index) # 筛选输入通道数大于0的设备 if device_info.get("maxInputChannels", 0) > 0: available_mic_num += 1 audio.terminate() return available_mic_num
方案2:异常捕获(轻量,仅判断是否存在默认麦克风)
如果只需要判断是否存在可用的默认麦克风,不需要统计总数,直接对IOError做捕获处理即可:
import pyaudio def has_default_microphone(): audio = pyaudio.PyAudio() try: default_input_info = audio.get_default_input_device_info() # 额外校验输入通道数,避免特殊兼容问题 return 1 if default_input_info.get("maxInputChannels", 0) > 0 else 0 except IOError: return 0 finally: audio.terminate()
内容的提问来源于stack exchange,提问作者Giordano Souza
相关产品推荐
相关产品推荐

