Mido项目解析:全面理解MIDI消息类型与参数规范

Mido项目解析:全面理解MIDI消息类型与参数规范

什么是MIDI消息

MIDI(Musical Instrument Digital Interface)消息是电子乐器间通信的基本单元。在Mido这个Python MIDI库中,消息被封装为易于操作的对象形式,使开发者能够方便地创建、解析和处理MIDI数据。

支持的MIDI消息类型详解

Mido支持标准MIDI规范中的各类消息,下面分类介绍这些消息类型及其关键参数:

通道声音消息

  1. 音符控制类

    • note_on:音符开启消息
      • 参数:channel(通道), note(音符), velocity(力度)
    • note_off:音符关闭消息
      • 参数:channel(通道), note(音符), velocity(释放力度)
  2. 控制器类

    • control_change:控制变更消息
      • 参数:channel(通道), control(控制器编号), value(值)
    • program_change:音色变更消息
      • 参数:channel(通道), program(音色编号)
  3. 特殊效果类

    • polytouch:复音触后消息
    • aftertouch:通道触后消息
    • pitchwheel:弯音轮消息
      • 参数:channel(通道), pitch(弯音值,范围-8192到8191)

系统消息

  1. 系统专用消息

    • sysex:系统专用消息
      • 参数:data(数据元组)
  2. 时间码消息

    • quarter_frame:SMPTE时间码四分之一帧消息
      • 参数:frame_type(帧类型), frame_value(帧值)
    • songpos:歌曲位置指针
    • song_select:歌曲选择
  3. 系统实时消息

    • 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文件中的时间增量 |

使用注意事项

  1. 通道编号差异:Mido内部使用0-15表示通道,而大多数MIDI设备和软件使用1-16表示。在与用户交互时需要进行转换。

  2. 力度默认值:velocity参数默认值为64而非0,这是因为64是一个合理的中间值,对于不支持力度感应的设备也能正常工作。

  3. 数据参数灵活性sysex消息的data参数接受任何生成0-127范围内数字的可迭代对象,包括列表、range对象和生成器表达式。

  4. 时间参数:time参数在MIDI文件中用作增量时间,可以接受任何整数或浮点数值。

通过理解这些消息类型和参数规范,开发者可以充分利用Mido库构建强大的MIDI应用程序,实现精确的音乐控制和数据处理。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值