Midi文件解碼方法和系統的制作方法
【技術領域】
[0001]本發明涉及解碼技術領域,尤其涉及一種MIDI文件解碼方法和系統。
【背景技術】
[0002]MIDI (Musical Instrument Digital Interface,樂器數字接口)文件存儲的信息是事件,而不是具體的音頻內容,所以一個MIDI文件相對的壓縮比往往很高,方便使用。
[0003]現有的MIDI文件,為了錄制的方便,各個軌道是相互獨立的,只需要修改文件頭中的軌道信息,就可以插入或者刪除各個軌道。但是對于小系統,沒有足夠的Buf (緩沖區)來緩存各個軌道的事件,如果不預先緩存事件,則需要文件跳著獲取事件,對事件進行處理,而跳著獲取事件則會帶來數據的速度的浪費。即,若不丟棄上一個軌道還未使用的數據,則需要Buf來緩存;若丟棄上一個軌道還未使用的數據,則需要回跳后重新讀取,浪費系統時鐘,而且按照MIDI文件的壓縮比來看,對數據的重讀量會是極大的。上述情況會導致MIDI文件的解碼成本較高。
【發明內容】
[0004]基于此,有必要提供一種成本較低的MIDI文件解碼方法。
[0005]—種MIDI文件解碼方法,包括以下步驟:
[0006]按照MIDI文件的各個軌道的時間信息參數對MIDI文件進行排序;
[0007]將排序后的所述MIDI文件進行解碼。
[0008]在其中一個實施例中,所述按照MIDI文件的各個軌道的時間信息參數對所述MIDI文件進行排序步驟包括:
[0009]檢測所述MIDI文件的各個軌道的時間信息參數;
[0010]在所述時間信息參數表示當前軌道所處理的事件結束時,跳轉到當前軌道的文件位置,進行事件讀取處理,并寫入所述MIDI文件;
[0011]重復上述過程,直至對所述MIDI文件的排序完成。
[0012]在其中一個實施例中,所述將排序后的所述MIDI文件進行解碼步驟包括:
[0013]檢測所述MIDI文件的各個軌道的時間信息參數;
[0014]在所述時間信息參數表示當前軌道處理完當前事件時,將下一個事件由所述當前軌道進行解碼處理;
[0015]重復上述過程,直至解碼完成。
[0016]在其中一個實施例中,所述時間信息參數為所述MIDI文件的各個軌道所包含的delta。
[0017]在其中一個實施例中,所述方法還包括:事件通訊設備將接收到的事件傳入到文件寫入系統時,按照時間順序將接收到的事件排序到所述MIDI文件中。
[0018]在其中一個實施例中,所述方法還包括:插入新軌道數據時,按照時間順序將所述新軌道數據插入所述MIDI文件中。
[0019]本發明還提供一種MIDI文件解碼系統,包括排序模塊和解碼模塊;
[0020]所述排序模塊,被配置以按照MIDI文件的各個軌道的時間信息參數對MIDI文件進行排序;
[0021]所述解碼模塊,被配置以將排序后的所述MIDI文件進行解碼。
[0022]在其中一個實施例中,所述排序模塊包括第一時間信息檢測單元和讀取寫入單元;
[0023]所述時間信息檢測單元,被配置以檢測所述MIDI文件的各個軌道的時間信息參數;
[0024]所述讀取寫入單元,被配置以在所述時間信息參數表示當前軌道所處理的事件結束時,跳轉到當前軌道的文件位置,進行事件讀取處理,并寫入所述MIDI文件。
[0025]在其中一個實施例中,所述解碼模塊包括第二時間信息檢測單元和解碼單元;
[0026]所述第二時間信息檢測單元,被配置以檢測所述MIDI文件的各個軌道的時間信息參數;
[0027]所述解碼單元,被配置以在所述時間信息參數表示當前軌道處理完當前事件時,將MIDI文件的下一個事件由所述當前軌道進行解碼處理。
[0028]在其中一個實施例中,所述時間信息參數為所述MIDI文件的各個軌道所包含的deltaD
[0029]在其中一個實施例中,所述系統還包括錄入排序模塊,所述錄入排序模塊被配置為在事件通訊設備將接收到的事件傳入到文件寫入系統時,按照時間順序將接收到的事件排序到所述MIDI文件中。
[0030]在其中一個實施例中,所述系統還包括新軌道排序模塊,所述新軌道排序模塊被配置為在插入新軌道數據時,按照時間順序將所述新軌道數據插入所述MIDI文件中。
[0031]上述MIDI文件解碼方法和系統,按照MIDI文件的各個軌道的時間信息參數對MIDI文件進行排序,并將排序后的MIDI文件進行解碼,不需要跳著獲取各個軌道的事件,也不需要預解各個軌道的所有事件,能夠降低解碼資源,節省MIDI文件的解碼成本。
【附圖說明】
[0032]圖1為本發明MIDI文件解碼方法一個實施例的流程示意圖;
[0033]圖2為本發明MIDI文件解碼方法一個實施例中的按照時間順序對MIDI文件進行排序的流程示意圖;
[0034]圖3為本發明MIDI文件解碼方法一個實施例中的將按照時間順序排序后的MIDI文件進行解碼的流程示意圖;
[0035]圖4為本發明MIDI文件解碼系統一個實施例的結構示意圖;
[0036]圖5為本發明MIDI文件解碼系統一個實施例中的排序模塊的結構示意圖;
[0037]圖6為本發明MIDI文件解碼系統一個實施例中的解碼模塊的結構示意圖。
【具體實施方式】
[0038]為使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖對本發明MIDI文件解碼方法和系統的【具體實施方式】進行說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。
[0039]參見圖1,一個實施例中,本發明MIDI文件解碼方法包括以下步驟:
[0040]S100,按照MIDI文件的各個軌道的時間信息參數對MIDI文件進行排序。
[0041]—般的,現有的MIDI文件編碼方法是按照軌道為單元進行排序的,方便不同軌道的單獨錄制。但是實際的播放過程是各個軌道的聲音加權疊加后合成的結果。而本發明MIDI文件解碼方法,按照MIDI文件的各個軌道的時間信息參數對MIDI文件進行排序,不需要跳轉文件,也不會有Buf預存的限制。
[0042]參見圖2,一個實施例中,步驟SlOO具體可以包括以下步驟:
[0043]SI 10,檢測MIDI文件的各個軌道的時間信息參數。
[0044]在MIDI文件的各個軌道中,均包含有一個時間信息參數,該時間信息參數表示對應的軌道中的事件的持續時間長度。因此,可以通過該時間信息參數對MIDI文件進行排序。
[0045]具體的,可以檢測各個軌道的時間信息參數,當檢測到某一軌道的時間信息參數表示該軌道所處理的事件結束時,執行步驟S120。其中,可以設置成:某一軌道的時間信息參數的時間計數遞減至零時,表示該軌道所處理的當前事件結束。各個軌道的時間信息參數所表示的該軌道所處理的事件的剩余時間會隨著時間遞減,直至為零。
[0046]S120,在時間信息參數表示當前軌道所處理的事件結束時,跳轉到當前軌道的文件位置,進行事件讀取處理,并寫入MIDI文件。
[0047]其中,可以逐一檢測各個軌道的時間信息參數,當檢測到某一軌道的時間信息參數表示該軌道所處理的事件結束時(例如時間信息參數的時間計數為零),則說明該軌道所處理的當前事件結束。跳轉到該軌道的文件位置,然后進行時間讀取處理,并寫入新文件。
[0048]重復步驟SllO和S120,直至對MIDI文件的排序完成。
[0049]以下通過一詳細實例,對步驟SlOO進行進一步說明。每個軌道中均有一個包含時間信息參數的delta,因此可以通過檢測各個軌道的delta