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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:55:25