树莓派OSA电子MIDI扩展板配置后无MIDI输入输出问题排查问询
排查步骤
1. 修复pigpio daemon异常
- 执行命令查看8888端口占用进程:
sudo lsof -i :8888 - 终止占用端口的进程:
sudo kill -9 <查询到的进程PID>,之后重新启动守护进程:sudo pigpiod - 若仍启动失败,可指定其他端口启动pigpio:
sudo pigpiod -p 8889,同步修改Python代码中的初始化逻辑:pi1 = pigpio.pi('localhost', 8889) # 可新增连接校验 if not pi1.connected: print("pigpio连接失败,请检查守护进程状态") - 验证pigpio运行状态:执行
pigs t,若返回数字时间戳则说明启动正常。
2. 排查MIDI无输入输出问题
2.1 修正端口匹配逻辑
mido返回的完整端口名为f_midi:f_midi 24:0,仅填写f_midi可能出现匹配失败问题,需使用完整端口名操作:
- 修改代码中打开端口的逻辑:
# 输出端口 port = mido.open_output('f_midi:f_midi 24:0') # 输入端口 port = mido.open_input('f_midi:f_midi 24:0') - 命令行测试时也使用完整端口名:
aplaymidi -p "f_midi:f_midi 24:0" myMidiTune.mid
2.2 硬件链路校验
- 确认MIDI线接线方向正确:扩展板的MIDI OUT接口接数字钢琴的MIDI IN接口,扩展板的MIDI IN接口接数字钢琴的MIDI OUT接口,接反会完全无信号。
- 确认扩展板和树莓派GPIO引脚连接牢固,无虚焊、松动问题。
- 确认数字钢琴的MIDI接收功能已开启,通道设置和测试用MIDI文件的通道匹配。
2.3 底层链路测试
跳过应用层代码直接发送测试MIDI指令,验证硬件链路是否正常:
- 发送中央C按下指令:
amidi -p hw:2,0 -S '90 3C 7F' - 发送中央C松开指令:
amidi -p hw:2,0 -S '80 3C 00' - 若此时钢琴有响应,说明硬件链路正常,问题出在应用层代码或mido配置;若无响应,执行
lsmod | grep f_midi确认MIDI驱动模块已正常加载,未加载则按照配置指南重新加载模块。
2.4 代码逻辑修正
输入测试代码中使用的iter_pending()仅会读取当前已存在的待处理消息,不会阻塞等待新消息,无预存消息时自然不会进入处理逻辑,可修改为阻塞读取模式:
# 替换原有for msg in port.iter_pending()逻辑 for msg in port: try: print(msg) # 原有消息处理逻辑放在此处即可 except AttributeError as error: print("Error excepted") pass
- 额外验证:确认测试用的MIDI文件无损坏,可先在其他设备上播放验证有效性。
内容的提问来源于stack exchange,提问作者acroscene
相关产品推荐
相关产品推荐

