我試圖解析MIDI文件,但我的解析器無法從互聯網上解析大多數MIDI文件,因爲它一直在SMF規範中未指定的命令字節上磕磕絆絆。用FL Studio導出的MIDI文件工作正常,但幾乎所有其他MIDI似乎都打破了。如何解析/忽略標準MIDI文件中的未指定命令?
例如,從this midi file:
00 B0 20 02 | 00 00 00 | 00 C0 00
第一部分很容易解析。這是根據MIDI規範的控制變化。但第二部分沒有意義。 0滴答後,做什麼?在此之後我可以期待多少字節? 0x00未在SMF中指定爲命令。不過,之後的部分是可識別的,所以你可以看到第二部分有1個數據字節。
但是,如果我只是解決前一個問題,後面就會變得一團糟:
00 C0 00 | 00 B0 07 6E | 00 0A 40 00 5B 46 00 5D 00 00 5E 19 86 70 90 41 6E 00 45 6E 48 45 00 00 41 00 00 43 6E 48 43 00 00 48 6E 60 48 00 00 3C 6E 00 35 6E 30 35 00 [etc]
好的,讓我們來看看。補丁更改,檢查。控制器更改,檢查。 0A? 0A到底做了什麼?試圖識別0A部分無效後的任何命令,這都是一團糟,我不知道屬於那個0A命令或下一個實際的SMF命令何時開始。在這個混亂之後,我根本不知道如何解析剩下的音軌。
然而,像Winamp和FL Studio這樣的程序可以很好地打開這些MIDI文件。他們是如何做到的呢?我如何知道垃圾數據何時結束並開始正確的命令?
非常感謝!這解決了這個問題。 – VDZ
很高興聽到它! – SSteve