更新:2017-05-17 18:45
大小:46KB
下載地址掃描二維碼安裝到手機(jī)
BitMusic是一款可以播放Fc游戲音樂和Midi格式音樂的平臺,支持MIDI文件的屬性編寫,其實(shí)小編也不太了解,有興趣的可以下載研究下。
使用說明
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ù)描述
文件頭一般包括文件的類型,因?yàn)镸idi文件僅以.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”開頭,它其實(shí)是 ASCII 字符“MTrk”,其后跟 著一個 4 個字節(jié)的整數(shù),它標(biāo)志了該軌道的字節(jié)數(shù),這不包括前面的 4 個字節(jié)和本身的 4 個字節(jié)。這一點(diǎn), 我們可以在后面的例子中去理解。
接著就是記錄數(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音符。
小編簡評:
小編簡評:Anvil stud
小編簡評:
小編簡評:MIDI音樂合
小編簡評:
小編簡評:
小編簡評:媒體轉(zhuǎn)換,可
小編簡評:midi音樂通
小編簡評:這是一個將
網(wǎng)友評論