pygame.midi.Input无法检测MIDI设备,设备ID无效报错如何解决?
解决pygame.midi.Input初始化报错问题
问题分析
你遇到的报错Device id given is not a valid input id, it is an output id,核心原因有两个:
- 直接使用
Input(-1)时,pygame自动选择的设备并非输入设备(Windows系统下设备识别优先级可能导致这种情况); - 代码存在两处语法/拼写错误:
from time import缺少sleep、midi_in.pool()应为midi_in.poll()。
解决步骤
1. 修复代码基础错误
- 补全sleep导入:
from time import sleep - 将
pool()修正为正确的poll()方法(用于检测是否有MIDI输入)
2. 手动枚举并选择正确的输入设备
不要依赖-1自动选择,手动遍历所有MIDI设备,筛选出输入设备后再初始化:
from pygame import midi from time import sleep midi.init() # 遍历所有设备,查找可用输入设备 input_id = None device_count = midi.get_count() for i in range(device_count): dev_info = midi.get_device_info(i) # dev_info结构:(接口名, 设备名, 是否输入, 是否输出, 是否已打开) interf, name, is_input, is_output, opened = dev_info if is_input == 1: print(f"找到输入设备:ID={i},名称={name.decode('utf-8')}") input_id = i break if not input_id: print("未检测到可用的MIDI输入设备") else: try: midi_in = midi.Input(input_id) print("MIDI输入设备初始化成功") # 监听MIDI输入 while True: if midi_in.poll(): print(midi_in.read()) sleep(0.25) except midi.MidiException as e: print(f"初始化失败:{str(e)}") finally: # 程序结束时关闭设备并退出midi midi_in.close() midi.quit()
3. 额外排查点
如果仍无法识别设备,可以尝试:
- 打开Windows的「声音设置」→「更多声音设置」→「MIDI」选项卡,确认设备已被系统识别;
- 更换MIDI线缆的USB端口,避免使用USB集线器;
- 检查设备厂商是否提供了专用的驱动程序(部分MIDI设备需要安装驱动才能被pygame识别)
内容的提问来源于stack exchange,提问作者codeforever10
相关产品推荐
相关产品推荐

