1. 项目概述
CircuitPython作为一款面向创客和嵌入式开发的Python实现,在音乐科技领域有着广泛的应用。adafruit-circuitpython-midi-parser这个库正是为音乐设备数字接口(MIDI)协议处理而生的轻量级解决方案。我在最近的一个电子音乐控制器项目中深度使用了这个库,发现它虽然体积小巧(仅约20KB),但完整覆盖了MIDI协议解析与生成的核心功能。
这个库特别适合以下场景:
- 为DIY电子乐器添加MIDI输出功能
- 将传感器数据转换为MIDI控制信号
- 构建自定义MIDI路由器或处理器
- 开发基于微控制器的MIDI效果器
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心功能解析
2.1 MIDI消息处理机制
该库的核心是MIDIParser类,它采用状态机设计来处理MIDI字节流。当串口接收到数据时,解析器会:
- 识别状态字节(0x80-0xFF)
- 根据状态字节确定消息类型和预期数据长度
- 收集足够的数据字节后生成结构化消息
例如处理音符开(NOTE_ON)消息时:
python复制# 原始MIDI字节: [0x90, 0x3C, 0x64]
# (通道1的NOTE_ON, 音符60, 力度100)
msg = parser.parse_byte(0x90) # 开始新消息
msg = parser.parse_byte(0x3C) # 添加音符值
msg = parser.parse_byte(0x64) # 添加力度值
# 此时msg将变为完整的NOTE_ON消息对象
2.2 支持的消息类型
库中完整实现了MIDI 1.0标准定义的各类消息:
| 消息类型 | 状态字节范围 | 典型用途 |
|---|---|---|
| Note On | 0x90-0x9F | 音符触发 |
| Note Off | 0x80-0x8F | 音符释放 |
| CC | 0xB0-0xBF | 控制器变化 |
| Program Change | 0xC0-0xCF | 音色切换 |
| Pitch Bend | 0xE0-0xEF | 弯音控制 |
| System Exclusive | 0xF0-0xF7 | 设备专属消 |
