Mido项目解析:全面理解MIDI消息类型与参数规范
什么是MIDI消息
MIDI(Musical Instrument Digital Interface)消息是电子乐器间通信的基本单元。在Mido这个Python MIDI库中,消息被封装为易于操作的对象形式,使开发者能够方便地创建、解析和处理MIDI数据。
支持的MIDI消息类型详解
Mido支持标准MIDI规范中的各类消息,下面分类介绍这些消息类型及其关键参数:
通道声音消息
-
音符控制类
note_on
:音符开启消息- 参数:channel(通道), note(音符), velocity(力度)
note_off
:音符关闭消息- 参数:channel(通道), note(音符), velocity(释放力度)
-
控制器类
control_change
:控制变更消息- 参数:channel(通道), control(控制器编号), value(值)
program_change
:音色变更消息- 参数:channel(通道), program(音色编号)
-
特殊效果类
polytouch
:复音触后消息aftertouch
:通道触后消息pitchwheel
:弯音轮消息- 参数:channel(通道), pitch(弯音值,范围-8192到8191)
系统消息
-
系统专用消息
sysex
:系统专用消息- 参数:data(数据元组)
-
时间码消息
quarter_frame
:SMPTE时间码四分之一帧消息- 参数:frame_type(帧类型), frame_value(帧值)
songpos
:歌曲位置指针song_select
:歌曲选择
-
系统实时消息
tune_request
:调音请求clock
:时序时钟start
:开始播放continue
:继续播放stop
:停止播放active_sensing
:活动感知reset
:系统重置
参数类型规范
Mido为每种参数定义了严格的范围和默认值:
| 参数名称 | 有效范围 | 默认值 | 说明 | |-------------|-------------------|---------|-------------------------------| | channel | 0-15 | 0 | 注意Mido使用0-15而非1-16编号 | | frame_type | 0-7 | 0 | SMPTE帧类型 | | frame_value | 0-15 | 0 | SMPTE帧值 | | control | 0-127 | 0 | 控制器编号 | | note | 0-127 | 0 | MIDI音符编号 | | program | 0-127 | 0 | 音色/程序编号 | | value | 0-127 | 0 | 通用参数值 | | velocity | 0-127 | 64 | 力度值,默认64提供合理中间值 | | data | 0-127的整数序列 | 空元组 | 系统专用消息数据 | | pitch | -8192-8191 | 0 | 弯音轮值 | | pos | 0-16383 | 0 | 歌曲位置 | | time | 任意整数或浮点数 | 0 | MIDI文件中的时间增量 |
使用注意事项
-
通道编号差异:Mido内部使用0-15表示通道,而大多数MIDI设备和软件使用1-16表示。在与用户交互时需要进行转换。
-
力度默认值:velocity参数默认值为64而非0,这是因为64是一个合理的中间值,对于不支持力度感应的设备也能正常工作。
-
数据参数灵活性:
sysex
消息的data参数接受任何生成0-127范围内数字的可迭代对象,包括列表、range对象和生成器表达式。 -
时间参数:time参数在MIDI文件中用作增量时间,可以接受任何整数或浮点数值。
通过理解这些消息类型和参数规范,开发者可以充分利用Mido库构建强大的MIDI应用程序,实现精确的音乐控制和数据处理。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考