日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BLE MIDI】MIDI 文件格式分析总结 ★★★

發(fā)布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BLE MIDI】MIDI 文件格式分析总结 ★★★ 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、MIDI 文件簡介
  • 二、MIDI 文件頭解析
    • 1、MIDI 文件頭標識
    • 2、MIDI 文件頭長度
    • 3、MIDI 文件格式
    • 4、MIDI 軌道個數(shù)
    • 5、基本時間
  • 三、MIDI 軌道分析
  • 四、MIDI 軌道頭
  • 五、MIDI 軌道長度
  • 六、delta-time 間隔
  • 七、FF 03 軌道名稱
  • 八、FF 51 03 四分音符時長
  • 九、FF 58 04 拍號
  • 十、音符開指令
  • 十一、音符關指令
  • 十二、音軌結束標志





一、MIDI 文件簡介



下面的 mid 文件是一個簡單 midi , 其中只有一條軌道 , 一個音符 ;

這個 mid 文件很簡單 , 但是麻雀雖小 , 五臟俱全 , 其中有所有的必須的 midi 文件頭 , midi 軌道頭 , 時間標志 , 等信息 ;

下面開始逐個字節(jié) , 解析上述 midi 文件 ;

4D 54 68 64 00 00 00 06 00 00 00 01 01 E0 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 文件頭解析



文件頭數(shù)據(jù) :

4D 54 68 64 00 00 00 06 00 00 00 01 01 E0


1、MIDI 文件頭標識


4D 54 68 64 : 0 ~ 3 字節(jié) , " MThd " 字符串 ASCII 碼 , 這是 mid 文件的標識 ;


2、MIDI 文件頭長度


00 00 00 06 : 4 ~ 7 字節(jié) , 這是個 4 字節(jié)整型數(shù)據(jù) , 大端格式顯示 , 整型低位在高字節(jié) , 整型高位在低字節(jié) , 該數(shù)據(jù)表示 mid 文件文件頭長度 , 這里的文件頭長度為 6 , 表示后面 6 字節(jié)是 mid 文件文件頭的范圍 ;


大端格式 : 高位存儲在低字節(jié)中 , 符合人的書寫習慣 ;

小端格式 : 低位存儲在低字節(jié)中 , 符合計算機處理邏輯 ;


3、MIDI 文件格式


00 00 : 8 ~ 9 字節(jié) , 表示 mid 文件的格式 ; 這兩個字節(jié)是 short 類型整型 , 大端格式 ;

  • 0 : mid 文件只有一條軌道 , 所有的通道都在一條軌道中 ;
  • 1 : mid 文件有多個音軌 , 并且是同步的 , 即所有的軌道同時播放 ;
  • 2 : mid 文件有多個音軌 , 不同步 ;

這里是 0 格式 , 也就是說只有一條軌道 ;


4、MIDI 軌道個數(shù)


00 01 : 10 ~ 11 字節(jié) , 表示 MIDI 軌道個數(shù) , short 類型 , 大端格式 ;

此處表示有一條軌道 , 所有通道的音符和節(jié)拍信息都在該軌道中 ;


5、基本時間


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 對應的十進制數(shù)字是 480 , 也就是說一個四分音符有 480 tick ;

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









三、MIDI 軌道分析



MIDI 軌道 , 以 MTrk 4D 54 72 6B 開始 , 以 FF 2F 00 結束 ;

下面的內(nèi)容是一個完整的 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 類型的整型數(shù)據(jù) , 大端格式顯示 , midi 軌道長度是十六進制的 0x25 , 也就是十進制的 37 , 代表從下一個字節(jié)開始計數(shù) 到 軌道結束位置 FF 2F 00 的最后一個字節(jié) , 一共有 37 個字節(jié) ;

每個軌道開始的標志是 MTrk , 后面的 4 字節(jié)就是軌道的長度 ;

在下圖中 , 選中的字節(jié)有 373737 個字節(jié) ;





六、delta-time 間隔



delta-time 間隔 是 mid 中的重要機制 ;

midi 中的音符 , 事件 的時間間隔 , 都是通過 delta-time 體現(xiàn)的 ;

delta-time 是一個整數(shù) , 位數(shù)不固定 , 其單位是 tick , 也就是 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件頭解析 | MIDI 文件頭標識 | MIDI 文件頭長度 | MIDI 文件格式 | MIDI 軌道個數(shù) | 基本時間 ) 二、MIDI 文件頭解析 5、基本時間 博客章節(jié)中計算的 tick 時間 ;

delta-time 的每個字節(jié)中 , 最高位 第 7 位 用于表示連續(xù)標志 , 后面的 0 ~ 6 位 表示真實的數(shù)據(jù) ;

如果一個 delta-time 由 2 字節(jié)組成 , 每個字節(jié)中最高位是連續(xù)標志 , 后面 0 ~ 6 位是數(shù)據(jù) , 也就是說該 delta-time 實際的數(shù)值位數(shù)只有 14 位 ;

以后面的 8E 7E delta-time 為例 :

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

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

第一個字節(jié) 7E 對應的二進制數(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ù) ;


以 82 C0 03 為例 , 對應的二進制數(shù)據(jù)為 1000 0010 1100 0000 0000 0011

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

第二個字節(jié) C0 對應的二進制數(shù)據(jù)位 1100 0000 , 其中第七位的 1 表示這是 delta-time 的高位字節(jié) , 后面的 100 0000 是實際的數(shù)值數(shù)據(jù) ;

第三個字節(jié) 03 對應的二進制數(shù)據(jù)位 0000 0011 , 其中第七位的 0 表示這是 delta-time 的低位字節(jié) , 后面的 000 0011 是實際的數(shù)值數(shù)據(jù) ;

則該 delta-time 的實際數(shù)據(jù)是 000 0010 100 0000 000 0011 , 重新組合后為 1010 0000 0000 0011 , 該 delta-time 的值是 40963 , 也就是 40963 個 tick 數(shù) ;





七、FF 03 軌道名稱



FF 03 05 B2 E2 CA D4 30 : 23 ~ 30 字節(jié) , FF 03 是 Meta 事件 , 軌道名稱設置 ;

FF 03 后面是長度信息 , 05 表示該軌道名稱有 5 字節(jié) , 后面的 5 字節(jié)就是軌道名稱 ;


軌道信息后面的 31 字節(jié) 00 是 delta-time ;





八、FF 51 03 四分音符時長



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

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

07 A1 20 對應十進制數(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 對應的二進制位數(shù)為 : 1000 1110 0111 1110

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

第一個字節(jié) 7E 對應的二進制數(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 , 對應的時間是 500000×1918480\cfrac{500000 \times 1918}{480}480500000×1918? 微秒





九、FF 58 04 拍號



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

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

04 02 18 08 分別表示 :

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

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

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





十、音符開指令



90 3C 64 : 47 ~ 49 字節(jié) , 音符開指令 ;

90 是音符開標志 ;

3C 是音符音高 60 , 取值范圍 0 ~ 127 ;

64 是音符的力度值 , 取值范圍 0 ~ 127 ;

后面的 8E 7E 是 delta-time , 與后面的指令間隔的 tick 數(shù) ;

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





十一、音符關指令



80 3C 40 : 52 ~ 54 字節(jié) , 音符關指令 ;

80 是音符開標志 ;

3C 是音符音高 60 , 取值范圍 0 ~ 127 ;

40 是音符的力度值 , 取值范圍 0 ~ 127 ;

后面的 00 是 delta-time , 與后面的指令間隔的 tick 數(shù) ;

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





十二、音軌結束標志



FF 2F 00 : 56 ~ 58 字節(jié) , 音軌結束標識 ;

至此 , 整個 midi 文件解析完畢 ;

總結

以上是生活随笔為你收集整理的【BLE MIDI】MIDI 文件格式分析总结 ★★★的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91免费观看入口 | 蜜桃综合网 | 国产 丝袜 欧美中文 另类 | 澳门色网| 国产乱码精品一区二区三区精东 | 夜夜干天天操 | 国产精品久久婷婷 | 诱惑av | 国产一区二区三区四区精 | 少妇高潮视频 | 久久中文精品 | 涩涩视频免费观看 | 日韩黄色av | 久久在线免费 | 日韩在线观看免费av | 91超碰在| 在线观看视频www | 欧美youjizz | 黑人无套内谢中国美女 | 久久丫精品忘忧草西安产品 | 思思99re| 在线免费视频观看 | 黄毛片在线观看 | 69国产在线| 高清毛片aaaaaaaaa郊外 | 人人艹人人爽 | 超碰免费公开 | 国产成人综合在线观看 | 欧美韩日一区二区 | 九色福利 | 成人免费黄色大片v266 | 国产精品aaa| 中文字幕一区二区三区四区五区 | 欧美日韩一区在线播放 | 99在线看 | 污视频在线免费观看 | 欧美另类色图 | 中国黄色小视频 | 亚洲高清资源 | 宿舍女女闺蜜调教羞辱 | 午夜爽爽爽视频 | 国产精品视频你懂的 | 国产肉体ⅹxxx137大胆 | 色七七桃花综合影院 | 久久6| 九九黄色片 | 欧美1区2区 | va欧美| 欧色丰满女同hd | 亚洲国产欧美一区二区三区深喉 | 国产成人精品一区二区三区 | 热久久久久 | 天堂在线视频免费观看 | 调教驯服丰满美艳麻麻在线视频 | 天堂在线国产 | 欧美一级生活片 | 免费在线播放毛片 | 91美女啪啪| 在线日韩成人 | 污污的视频软件 | 日韩黄色免费电影 | 亚洲欧美日韩激情 | 91极品视频 | 欧美大片大全 | 婷婷在线免费视频 | 精品69| 黄色污污视频软件 | 夜夜操夜夜操 | 午夜一区二区三区在线 | 人人爽人人做 | 国产aⅴ精品一区二区果冻 台湾性生生活1 | 91精品久久久久久久 | 97人人艹 | 在线网站av| 亚洲一区欧洲二区 | 91欧美激情一区二区三区成人 | 中国老头性行为xxxx | 丰满秘书被猛烈进入高清播放在 | 久久泄欲网 | 在线免费看91 | 综合视频| 国产在线观看a | 大胸美女网站 | 日本一区视频在线播放 | 人人九九精| a级在线观看视频 | 人人妻人人爽人人澡人人精品 | 鬼灭之刃柱训练篇在线观看 | 深夜天堂 | 久草欧美视频 | 国产高清av | 欧美日本在线播放 | 免费在线a| 欧美激情视频在线 | 欧美黄色大片免费观看 | 亚洲字幕 | 欧美日韩在线影院 | 少妇精品无码一区二区免费视频 | 超碰最新网址 |