2017-04-03 84 views
0

基於this page,我開始學習MIDI的工作原理,並下載了一個示例MIDI文件,以查看是否可以提取所有信息。MIDI文件字節佈局

這是MIDI文件:

4D 54 68 64 00 00 00 06 00 01 00 03 00 04 4D 54 
72 6B 00 00 00 A1 00 C0 69 00 90 3C 5A 01 41 5A ... 

前14個字節是首標信息,和我有這些沒有問題。

以下字節表示有關軌道塊的信息;四個第一個是4D 54 72 6B,這是在ascii中的Mtrk,這是什麼決定了一個軌道塊;以下4個字節決定了同一塊中最後一個字節之後的字節數,因此00 00 00 A1(以十進制表示)表示在同一個軌道塊中有161個字節。

現在它的徑賽

第一個字節是00它告訴時間增量爲0,下一個字節告訴我們它是一個MIDI事件(更確切地說,程序變轉命令選擇MIDI通道0中的節目69 - 從here)。

下一個字節是另一個軌道事件的開始,其中delta-time設置爲0;這是一個note-on通道0上的MIDI事件,注意3C和速度5A

問題是,在增量時間設置爲01的下一個事件中,事件密鑰值是41,它既不是midi事件,也不是系統事件,也不是元事件。

這裏發生了什麼?我究竟做錯了什麼?

回答

0

標準MIDI文件可以使用Running Status字節 - 通道上發送的最後狀態字節保持有效,直到另一個狀態/等。 (並且5A您還顯示第二個音符事件的速度。)

以31.25 kb/sec的速度通過電纜發送MIDI數據時,允許系統有效地省略冗餘數據,從而增加了可用帶寬電纜。