日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【BLE MIDI】MIDI 时间标志分析 ( 音符速度设置事件 | 拍号设置事件 | 基本时间 - 每个四分音符有多少 tick 或 pulse | 节拍时值计算 | 小节时值计算 )

發(fā)布時間:2025/6/17 54 豆豆

文章目錄

  • 一、從 MIDI 文件中可以獲取的信息
    • 1、音符速度設(shè)置事件
    • 2、拍號設(shè)置事件
    • 3、文件頭基本時間
  • 二、節(jié)拍時值計算
  • 三、小節(jié)時值計算





一、從 MIDI 文件中可以獲取的信息



MIDI 時間標志原始信息來源 , 就是 MIDI 文件中的 Meta 事件 ;

Meta 事件 以 FF 開始 , 其格式如下 :

FF xx nn dd

  • FF : 表示 Meta 事件的 開始標志 ;
  • xx : 表示 該 Meta 事件的類型 , 如 03 類型表示該 Meta 事件是 " 音符速度設(shè)置事件 " , 04 類型表示該 Meta 事件是 " 拍號設(shè)置事件 " ;
  • nn : 表示 該 Meta 事件有多少個字節(jié) , 該數(shù)值可以是可變長度的數(shù)值 , 一般情況下只占 111 字節(jié) ;
  • dd : Meta 事件的實際數(shù)據(jù) , 有 nn 個字節(jié) ;

MIDI 文件中的 " 音符速度設(shè)置 Meta 事件 " , " 拍號設(shè)置 Meta 事件 " , " 文件頭的 基本時間 " , 決定了該 MIDI 曲子的事件標志 ;


1、音符速度設(shè)置事件


參考 【BLE MIDI】MIDI 文件格式分析總結(jié) ★★★ 八、FF 51 03 四分音符時長 博客章節(jié) , 可以知道 , FF 51 03 是時間設(shè)定的標志 ;

FF 51 03 07 A1 20 : 32 ~ 37 字節(jié) , 音符速度標志 ;

FF 51 03 是音符速度標志位 , 后面的 07 A1 20 3 字節(jié)是一個數(shù)字 , 代表 四分音符 的時長 , 單位是微秒 ;

07 A1 20 對應(yīng)十進制數(shù)是 500000 , 五十萬 , 也就是一個四分音符是 50 萬微秒 ;

在之前的 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件頭解析 | MIDI 文件頭標識 | MIDI 文件頭長度 | MIDI 文件格式 | MIDI 軌道個數(shù) | 基本時間 ) 二、MIDI 文件頭解析 5、基本時間 博客章節(jié) 解析到一個四分音符有 480 個 tick ;

此時可以計算出每個 tick 的時長為 500000480\cfrac{500000}{480}480500000? 微秒 ;

再回顧下 delta-time 的計算 :

8E 7E 對應(yīng)的二進制位數(shù)為 : 1000 1110 0111 1110

第一個字節(jié) 8E 對應(yīng)的二進制數(shù)據(jù)位 1000 1110 , 其中第七位的 1 表示這是 delta-time 的高位字節(jié) , 后面的 000 1110 是實際的數(shù)值數(shù)據(jù) ;

第一個字節(jié) 7E 對應(yīng)的二進制數(shù)據(jù)位 0111 1110 , 其中第七位的 0 表示這是 delta-time 的低位字節(jié) , 后面的 111 1110 是實際的數(shù)值數(shù)據(jù) ;

則該 delta-time 的實際數(shù)據(jù)是 000 1110 111 1110 , 重新組合后為 111 0111 1110 , 該 delta-time 的值是 1918 , 也就是 1918 個 tick 數(shù) ;

上述的 delta-time 是 1918 個 tick , 對應(yīng)的時間是 500000×1918480\cfrac{500000 \times 1918}{480}480500000×1918? 微秒


2、拍號設(shè)置事件


FF 58 04 04 02 18 08 : 39 ~ 45 字節(jié) , 拍子記號 ;

FF 58 04 是拍子記號的標志 ;

04 02 18 08 分別表示 :

  • 04 : 拍子記號的分子 ;
  • 02 : 拍子記號分母標志 , 這里的值是 2 的次冪值 , 如當前設(shè)置的值是 2 , 則拍子記號的分母是 22=42^2 = 422=4 , 分母是 4 ;
  • 18 : 每個 MIDI 時鐘包含的 tick 數(shù) ; 標準值是 24 , 一般不會改變 ;
  • 08 : 每 24 個 MIDI 時鐘 , 對應(yīng)的 32 分音符的數(shù)目 ; 標準值是 8 , 一般不會改變 ;

后面的 00 是 delta-time , 與下一個 midi 事件間隔的 tick 數(shù) ;

delta-time 參考 【BLE MIDI】MIDI 文件格式分析 ( MIDI 軌道分析 | MIDI 軌道頭 | MIDI 軌道長度 | delta-time 間隔 ) 四、delta-time 間隔 博客章節(jié) ;


3、文件頭基本時間


參考 【BLE MIDI】MIDI 文件格式分析總結(jié) ★★★ 二、MIDI 文件頭解析 5、基本時間 博客章節(jié) ;


01 E0 : 12 ~ 13 字節(jié) , 用于指定基本時間 ;

2 個字節(jié) , 要拆分成 3 部分 , 最高位 ( 第 15 位 ) 作為標識位 , 第 8 ~ 14 位 作為一部分 , 第 0 ~ 7 位 作為一部分 ;

由于是大端格式排列 , mid 文件第 12 字節(jié) ( 低地址 ) 是 高位 , mid 文件第 13 字節(jié) ( 高地址 ) 是低位 ;

01 E0 的二進制形式如下 : 0000 0001 11110 0000 ;

最高位 0000 0001 11110 0000 是 0 , 紅色的是最高位 , 表示當前 代表的事件格式是 類型1 , 第 0 ~ 14 位 代表的是 四分音符的 tick 數(shù) ;

十六進制 01 E0 對應(yīng)的十進制數(shù)字是 480 , 也就是說一個四分音符有 480 tick ;

tick 是時間單位 , 這是 mid 文件中計算時間的最基本單位 ;





二、節(jié)拍時值計算



在文件頭的基本時間中 , 可以獲取到每個 四分音符的 tick 或 pulse 數(shù) ;

在 Meta 事件 音符速度設(shè)置事件 中 , 可以獲取到每個 四分音符的 微秒數(shù) ;

此時可以將 tick 或 pulse 值 , 與 現(xiàn)實的 微秒 時間 對應(yīng)起來 ;


如果要計算具體的小節(jié)位置 , 需要結(jié)合拍號來計算 ,

上面只是獲取了 四分音符 的時值信息 , 即 四分音符的 tick 數(shù) , 以及 四分音符 的 微秒數(shù) ;

如果要計算 節(jié)拍 時間 , 要看 拍號中的分母值 ,

  • 如果分母是 222 , 則每拍的時值 直接使用 四分音符 時值乘以 222 ;

  • 如果分母是 444 , 則每拍的時值 就是 四分音符的時值 ;

  • 如果分母是 888 , 則每拍的時值 直接使用 四分音符 時值除以 222 ;





三、小節(jié)時值計算



每個小節(jié)的時值 就是 每拍的時值 乘以 拍號分子 ;

總結(jié)

以上是生活随笔為你收集整理的【BLE MIDI】MIDI 时间标志分析 ( 音符速度设置事件 | 拍号设置事件 | 基本时间 - 每个四分音符有多少 tick 或 pulse | 节拍时值计算 | 小节时值计算 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。