


BitMusic是一款可以播放Fc游戲音樂和Midi格式音樂的平臺,支持MIDI文件的屬性編寫,其實小編也不太了解,有興趣的可以下載研究下。

使用說明
BitMusic的Musiccode格式是我自己設(shè)計的,有四個屬性,其語法格式如下:
{波形0~3,響度0~1000,頻率0.0~200000.0,延遲時間毫秒}
某一屬性不改變可簡寫成-1,如:
{1,1,1,1}{1,1,2,2}可簡寫成{1,1,1,1}{-1,-1,2,2}
如果僅僅延遲可簡寫成{延遲時間毫秒},如:
{0,0,0,50}可簡寫成{50}
編寫B(tài)itMusic的靈感是來自Fc游戲音樂和Midi格式的音樂。BitMusic能用來干什么?目前我也不知道(滑稽),或許只是拿它玩玩吧。
MIDI文件屬于二進(jìn)制文件,這種文件一般都有如下基本結(jié)構(gòu):文件頭+數(shù)據(jù)描述
文件頭一般包括文件的類型,因為Midi文件僅以.mid為擴(kuò)展名的就有0類和1類兩種,而大家熟悉的位圖文件的格式就更多了,所以才會出現(xiàn)文件頭這種東西。
而數(shù)據(jù)描述部份是主體,我們現(xiàn)在來一起分析它的結(jié)構(gòu):
在每個Midi文件的開頭都有如下內(nèi)容,它們的十六進(jìn)制代碼為:“4d54686400000006ffffnnnndddd”。
前四個是ASCII字符“MThd”是用來鑒別是否Midi文件,而隨后的四個字節(jié)是指明文件頭描述部分的字節(jié)數(shù),它總是6,所以一定是“00000006”,以下是剩余部分的含義:

以上就是 MIDI 文件頭了,后面的所有內(nèi)容都是真正做事的,我們先來看看它的構(gòu)成。
MIDI 的數(shù)據(jù)是由若干個格式相同的子數(shù)據(jù)構(gòu)成的,這些子數(shù)據(jù)在多音軌的格式中記錄了一個軌道的所有信 息。多加一個音軌,就簡單地把數(shù)據(jù)追加在前一音軌的后面就可以了,不過不要忘記更改文件頭中的 nn nn(軌道數(shù))。
先看全局音軌。全局音軌包括歌曲的附加信息(比如標(biāo)題和版權(quán))、歌曲速度和系統(tǒng)碼(Sysx)等內(nèi)容。
不管是全局音軌還是含有音符的音軌,都以“4D 54 72 6B”開頭,它其實是 ASCII 字符“MTrk”,其后跟 著一個 4 個字節(jié)的整數(shù),它標(biāo)志了該軌道的字節(jié)數(shù),這不包括前面的 4 個字節(jié)和本身的 4 個字節(jié)。這一點, 我們可以在后面的例子中去理解。
接著就是記錄數(shù)據(jù)的地方了,每一個數(shù)據(jù)有著相同的結(jié)構(gòu):時間差+事件。
所謂時間差,指的是前一個事件到該事件的時間數(shù),它的單位是 tick(MIDI 的最小時間單位)。它的構(gòu)成比 較特殊,這里要用二進(jìn)制來說明。
一個字節(jié)有 8 位,如果僅使用 7 位,它可以表示 0~127 這 128 個數(shù),而剩下的一位,則用來作為標(biāo)志。如 果要表示的數(shù)在以上范圍,則這個標(biāo)志為 0,這時,一個 7 位的字節(jié)可以表示 0~127tick。如果要表示的數(shù) 超出了這個范圍(比如 240),則把標(biāo)志設(shè)置成 1,然后記錄下高 7 位,剩下的留給下一個字節(jié),在該例中 240 可以分解成 128*1+112,這里的 1 就是第一個字節(jié)要記錄的,加上標(biāo)志位,應(yīng)該為 10000001,即十六
進(jìn)制的 81;而 112 是下一個字節(jié)記錄的,它的十六進(jìn)制為 70:所以要表示 240 這個時間,要寫成 81 70。 同理,如果要表示 65535tick,則可以先計算出 65535=1282*3+1281*127+1280*127,然后得出結(jié)果:83 FF 7F。 由此,我們反過來也可以知道如何確定時間差:只要標(biāo)志位為 0,則表示結(jié)束讀取時間差。比如 82 C0 03 表示 1282*2+1281*64+1280*3=40963,如果基本時間為 120,則有 341:043 個四分音符。
以這種方式記錄整數(shù)的字節(jié)稱為動態(tài)字節(jié),它根據(jù)記錄的整數(shù)改變自身的長度,這在后面還要用到,所以 必須熟練計算。
看完了這么麻煩的東西,我們再來看個更麻煩的東西:事件。在這些標(biāo)準(zhǔn)的解釋后面,我們會通過一些例子 來進(jìn)一步掌握這些內(nèi)容。
事件大體上可以分為音符、控制器和系統(tǒng)信息這幾個種類。對于這些事件,都有統(tǒng)一的表達(dá)結(jié)構(gòu):種類+參數(shù)。
對于一個音符,由于它的有效范圍是 0~127,所以直接用 00~7F 作為“種類”,可以認(rèn)為是個音符,比如 3C 表示中央 C。而一個音符的最重要的參數(shù)是力度(也叫速度:velocity)。比如,3C 64 表示一個力度為十 進(jìn)制100的中央C音符。
圍觀短劇app
22.9M
v1.0.01 安卓版
即夢AI
122.5M
1.6.2 最新版
抖音極速版賺點零花錢
126M
36.2.0 紅包版
星繪ai繪畫軟件
214.0M
1.4.8 安卓版
造夢次元app安卓版
37.3M
1.1.897 最新版
酷狗音樂車機版官方原版
97.7M
6.0.6 免費版
TikTok抖音國際版
442.5M
43.1.4 海外版
囧次元app
70.9M
1.5.8.0 官方最新版
OmoFun最新版
75.7M
1.1.5.3 安卓版
新趣小視頻app
16.4M
2.2.12安卓官方最新版
國外抖音tiktok2026最新版
442.5M
43.1.4 國外版
tiktok國際版國內(nèi)可用免拔卡
296.2M
43.1.1 解鎖版
網(wǎng)友評論