我正在嘗試學習 MIDI 檔案的作業原理,因此我正在嘗試手動編譯一個小的 MIDI 軌道,自己撰寫位元組。以下是我到目前為止所做的所有位元組:
/*-----Header-Data----//-------Value-|-Description--------*/
0x4d, 0x54, 0x68, 0x64, // MThd | ASCII Header Chunk Type
0x00, 0x00, 0x00, 0x06, // 6 | 32 Bit Header Size
0x00, 0x00, // 0 | 16 Bit File Format | Single Track
0x00, 0x01, // 1 | Number Of Track Chunks
0b00000000_1100010_0, // 98_0 | 98 Ticks Per Quarter Note
/*-----Track-Data----//-------Value-|-Description--------*/
0x4d, 0x54, 0x72, 0x6b, // MTrk | ASCII Track Chunk Type
0x00, 0x00, 0x00, 0x04, // 4 | Track Length
/*----Event-Data---//-----Value-|-Description------*/
0x00, // 0 | Elapsed Time From The Previous Event
0b1001, // 9 | Note On Event
0b0000, // 0 | Channel 1 - Piano
0b0011_1100, // 60 | Note - Middle C
0b00100_0000, // 64 | Velocity
截至目前,我只想彈奏一個音符并讓它發揮作用。但是,上面的檔案無法正常播放(我在 Windows 上)。
我一直在關注這兩個網站來學習規范:
- http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html
- http://www.ccarh.org/courses/253/handout/smf/
如果有人能幫助我理解為什么上述位元組不起作用,我將不勝感激。提前致謝。
uj5u.com熱心網友回復:
我看到兩個問題:
您錯過了軌道塊結束時的軌道結束事件。
你是什??么意思?
但是,上面的檔案不能正常播放
在您的檔案中,您只有Note On事件。所以你按下一個鍵然后檔案立即結束,所以沒有聲音產生。您還需要Note Off事件。
100這里有一個帶有MIDI 刻度長度的音符的簡單檔案:
0x4d 0x54 0x68 0x64 // MThd
0x00 0x00 0x00 0x06
0x00 0x00
0x00 0x01
0x00 0x60
0x4d 0x54 0x72 0x6b // MTrk
0x00 0x00 0x00 0xc
0x00 0x90 0x3c 0x40 // Note On
0x64 0x80 0x3c 0x00 // Note Off
0x00 0xff 0x2f 0x00 // End of Track
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/518057.html
標籤:文件迷笛
上一篇:按一定順序執行執行緒
