BLE MIDIMIDI 文件格式分析 ( MIDI 轨道分析 | MIDI 轨道头 | MIDI 轨道长度 | delta-time 间隔 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BLE MIDIMIDI 文件格式分析 ( MIDI 轨道分析 | MIDI 轨道头 | MIDI 轨道长度 | delta-time 间隔 )相关的知识,希望对你有一定的参考价值。
前言
上一篇博客 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 ) 分析了 MIDI 文件的前 0 ~ 13 个字节 ;
4D 54 68 64 00 00 00 06 00 00 00 01 01 E0
本篇博客分析 第 14 个及以后的字节 ;
一、MIDI 轨道分析
MIDI 轨道 , 以 MTrk 4D 54 72 6B
开始 , 以 FF 2F 00
结束 ;
下面的内容是一个完整的 MIDI 轨道二进制信息 ;
4D 54 72 6B 00 00 00 25 00 FF 03 05 B2 E2 CA D4 30 00 FF 51 03 07 A1 20 00 FF 58 04 04 02 18 08 00 90 3C 64 8E 7E 80 3C 40 00 FF 2F 00
二、MIDI 轨道头
4D 54 72 6B
: MTrk 的 ASCII 码 ;
三、MIDI 轨道长度
00 00 00 25
: 这是一个 int 类型的整型数据 , 大端格式显示 , midi 轨道长度是十六进制的 0x25 , 也就是十进制的 37 , 代表从下一个字节开始计数 到 轨道结束位置 FF 2F 00 的最后一个字节 , 一共有 37 个字节 ;
每个轨道开始的标志是 MTrk , 后面的 4 字节就是轨道的长度 ;
在下图中 , 选中的字节有 37 37 37 个字节 ;
四、delta-time 间隔
delta-time 间隔 是 mid 中的重要机制 ;
midi 中的音符 , 事件 的时间间隔 , 都是通过 delta-time 体现的 ;
delta-time 是一个整数 , 位数不固定 , 其单位是 tick , 也就是 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 ) 二、MIDI 文件头解析 5、基本时间 博客章节中计算的 tick 时间 ;
delta-time 的每个字节中 , 最高位 第 7 位 用于表示连续标志 , 后面的 0 ~ 6 位 表示真实的数据 ;
如果一个 delta-time 由 2 字节组成 , 每个字节中最高位是连续标志 , 后面 0 ~ 6 位是数据 , 也就是说该 delta-time 实际的数值位数只有 14 位 ;
以后面的 8E 7E
delta-time 为例 :
8E 7E
对应的二进制位数为 : 1000 1110 0111 1110
第一个字节 8E 对应的二进制数据位 1000 1110 , 其中第七位的 1 表示这是 delta-time 的高位字节 , 后面的 000 1110 是实际的数值数据 ;
第一个字节 7E 对应的二进制数据位 0111 1110 , 其中第七位的 0 表示这是 delta-time 的低位字节 , 后面的 111 1110 是实际的数值数据 ;
则该 delta-time 的实际数据是 000 1110 111 1110 , 重新组合后为 111 0111 1110 , 该 delta-time 的值是 1918 , 也就是 1918 个 tick 数 ;
以 82 C0 03
为例 , 对应的二进制数据为 1000 0010 1100 0000 0000 0011
第一个字节 82 对应的二进制数据位 1000 0010 , 其中第七位的 1 表示这是 delta-time 的高位字节 , 后面的 000 0010 是实际的数值数据 ;
第二个字节 C0 对应的二进制数据位 1100 0000 , 其中第七位的 1 表示这是 delta-time 的高位字节 , 后面的 100 0000 是实际的数值数据 ;
第三个字节 03 对应的二进制数据位 0000 0011 , 其中第七位的 0 表示这是 delta-time 的低位字节 , 后面的 000 0011 是实际的数值数据 ;
则该 delta-time 的实际数据是 000 0010 100 0000 000 0011 , 重新组合后为 1010 0000 0000 0011 , 该 delta-time 的值是 40963 , 也就是 40963 个 tick 数 ;
以上是关于BLE MIDIMIDI 文件格式分析 ( MIDI 轨道分析 | MIDI 轨道头 | MIDI 轨道长度 | delta-time 间隔 )的主要内容,如果未能解决你的问题,请参考以下文章
BLE MIDIMIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
BLE MIDIMIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )(代码
BLE MIDIMIDI 文件格式分析 ( FF 03 轨道名称 | FF 51 03 四分音符时长 )
BLE MIDIMIDI 文件格式分析 ( FF 03 轨道名称 | FF 51 03 四分音符时长 )
BLE MIDIMIDI 文件格式分析 ( FF 58 04 拍号 | 音符开指令 | 音符关指令 | 音轨结束标志 )
BLE MIDIMIDI 文件格式分析 ( FF 58 04 拍号 | 音符开指令 | 音符关指令 | 音轨结束标志 )