電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 3779|回復: 0
收起左側(cè)

佳能打印機嵌入式內(nèi)膽視頻_淺談嵌入式MIDI文件格式解析設(shè)計與實現(xiàn)

[復制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-8-21 11:29:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
佳能打印機嵌入式內(nèi)膽視頻_淺談嵌入式MIDI文件格式解析設(shè)計與實現(xiàn),   

  

1 前言

隨著計算機與電子科學的發(fā)展,傳統(tǒng)的閱讀方式正在發(fā)生著天翻地覆的變化。樂譜是一種以印刷或手寫制作,用符號來記錄音樂的方法。不同的文化和地區(qū)發(fā)展了不同的記譜方法。記譜法可以分為記錄音高和記錄指法的兩大類。五線譜和簡譜都屬于記錄音高的樂譜。吉他的六線譜和古琴的減字譜都屬于記錄指法的樂譜。傳統(tǒng)的樂譜主要以紙張抄寫,現(xiàn)在亦有電腦程式可以制作樂譜。在音樂領(lǐng)域,由于紙質(zhì)樂譜本身具有如不宜保存、查找和攜帶以及翻頁不便等缺點,也促使許多作曲家使用作曲軟件制作音樂,使用打譜軟件來生成樂譜;但是,雖然制作音樂和生成樂譜的軟件很多,相應的閱讀樂譜的軟硬件設(shè)備卻很少。

為了可以把現(xiàn)有的音樂數(shù)字化工作擴展到樂譜的閱讀,又可以克服紙質(zhì)樂譜本身的缺點,設(shè)計一個跨平臺的、便攜的、用戶友好的電子樂譜閱讀器,嵌入式計算機系統(tǒng)是整個嵌入式系統(tǒng)的核心,由硬件層、中間層、系統(tǒng)軟件層和應用軟件層組成。執(zhí)行裝置也稱為被控對象,它可以接受嵌入式計算機系統(tǒng)發(fā)出的控制命令,執(zhí)行所規(guī)定的操作或任務。執(zhí)行裝置可以很簡單,如手機上的一個微小型的電機,當手機處于震動接收狀態(tài)時打開;也可以很復雜,如SONY 智能機器狗,上面集成了多個微小型控制電機和多種傳感器,從而可以執(zhí)行各種復雜的動作和感受各種狀態(tài)信息。利用嵌入式的閱讀系統(tǒng)代替?zhèn)鹘y(tǒng)的紙質(zhì)樂譜與譜架的組合,無疑是一個不錯的選擇。

當前可以獲得的電子版的樂譜可以分為兩種,一種是基于圖片格式的,另一種是基于數(shù)字音樂格式的。前一種主要包括jpg圖,gif圖等圖片格式,以及主要由圖片構(gòu)成的pdf,chm等文檔格式,在此本文不作為重點;后一種主要包括MIDI文件格式和一些打譜軟件所使用的專用格式。

2 系統(tǒng)分析

  

圖1是一個簡單的五線譜的一部分,它具有兩個聲部,每個聲部都對應一組五線。五線譜上有各種標記,表示出五線譜的各種屬性。

屬性作用的對象包括:樂譜、聲部、跨越多聲部的音樂段落、單聲部的音樂段落與音符等。而從屬性作用的方法來看,屬性可以劃分成幾類:有的屬性依靠符號的水平位置或垂直位置來體現(xiàn),有的屬性則依靠符號的形狀變化體現(xiàn)。

某些情況下,同一個屬性必須一致的出現(xiàn)五線譜的許多不同的地方,例如不同聲部的調(diào)號和、拍號在小節(jié)數(shù)相同時必須也是相同的,并且要分別標注在每個聲部。

為了描述五線譜復雜的結(jié)構(gòu),同時考慮到結(jié)構(gòu)的簡潔性以及把這種數(shù)據(jù)結(jié)構(gòu)繪制到屏幕的便捷性,本文建立了如下幾個類:Staff類描述一個五線譜,Track類描述一個聲部,Measure類描述一個小節(jié),Notation類是所有符號的基類,Note、Chord、Noteblock、Rest、Tie分別描述了單個音符、和弦、音符組、休止符、延音符等符號。圖2直觀的表述了類間的關(guān)系。

  

圖2 五線譜數(shù)據(jù)結(jié)構(gòu)組織形式

考慮到五線譜不同聲部的小節(jié)號相同的小節(jié)具有的許多屬性都是一致的。為了降低冗余度和方便程序調(diào)用,本文為五線譜類設(shè)立了不含有音符的虛擬聲部,來保存實際聲部中的公共小節(jié)信息。虛擬聲部中的小節(jié)聲明為VMeasure類,每個聲部的Measure類都保存指向?qū)猇Measure類的指針,方便小節(jié)信息的獲取。圖3顯示了虛擬聲部在五線譜類中的結(jié)構(gòu)。

  

3 MIDI文件格式解析

MIDI(Musical Instrument Digital Interface)樂器數(shù)字接口 ,是20 世紀80 年代初為解決電聲樂器之間的通信問題而提出的。MIDI 傳輸?shù)牟皇锹曇粜盘枺?而是音符、控制參數(shù)等指令, 它指示MIDI 設(shè)備要做什么,怎么做, 如演奏哪個音符、多大音量等。它們被統(tǒng)一表示成MIDI 消息(MIDI Message) 。傳輸時采用異步串行通信, 標準通信波特率為31.25×( 1±0.01) KBaud。MIDI僅僅是一個通信標準,它是由電子樂器制造商們建立起來的,用以確定電腦音樂程序、合成器和其他電子音響的設(shè)備互相交換信息與控制信號的方法。MIDI系統(tǒng)實際就是一個作曲、配器、電子模擬的演奏系統(tǒng)。從一個MIDI設(shè)備轉(zhuǎn)送到另一個MIDI設(shè)備上去的數(shù)據(jù)就是MIDI信息。MIDI數(shù)據(jù)不是數(shù)字的音頻波形,而是音樂代碼或稱電子樂譜。利用MIDI技術(shù)將電子合成器、電子節(jié)奏機(電子鼓機)和其他電子音源與序列器連接在一起即可演奏模擬出氣勢雄偉、音色變化萬千的音響效果,又可將演奏中的多種按鍵數(shù)據(jù)存儲起來,極大的改善了音樂演奏的能力和條件。

3.1 格式說明

MIDI文件中的數(shù)據(jù)劃分為若干個塊(chunk),塊是由塊標記、塊長度和塊數(shù)據(jù)組成的。其中塊標記為4個字節(jié)的ACSII碼,塊長度為4個字節(jié)的數(shù)值,表示塊數(shù)據(jù)域的長度。如表1所示。

  

表1 MIDI文件組成

3.2 MIDI文件格式解析模塊的結(jié)構(gòu)與解析流程

由于MIDI文件格式解析模塊需要完成的任務主要有理解MIDI信息、分析MIDI信息、生成五線譜信息幾大部分,因此可以將MIDI文件解析分作兩大塊。第一塊稱為文件分析器,主要負責按順序閱讀MIDI文件,將各數(shù)據(jù)成分分離并分別儲存,完成底層面向文件的數(shù)據(jù)讀入和錯誤處理,保證向上層提供完整的正確的排列有序的音符信息。第二塊稱為整合分析器,主要負責有選擇的使用文件分析器從MIDI文件中獲得的原始信息。整體結(jié)構(gòu)與處理流程如圖4所示。

  

3.2.1 文件分析器

頭塊中表明了MIDI文件類型、包含軌道數(shù)和四分音符的時間增量數(shù)。頭塊的解析相對簡單,但其中的文件類型和四分音符時間增量數(shù)對解析流程影響很大。嵌入式智能視頻小車碼盤的連線, 嵌入式智能鎖安裝設(shè)置視頻, 嵌入式智能鎖調(diào)試視頻, 嵌入式智能小車視頻, 嵌入式智能小車視頻教程, 嵌入式智能遙控不能錄視頻, 嵌入式主板視頻, 嵌入式主板視頻教程, 嵌入式轉(zhuǎn)音視頻開發(fā), 嵌入式桌面插座安裝視頻, 嵌入式總線百度云視頻++下載, 嵌入式組態(tài)王視頻教程, 嵌入式作品展示的視頻, 嵌入式坐便安裝視頻, 嵌入式做項目視頻, 清華遠見嵌入式視頻, 秋田845嵌入式內(nèi)膽加墨視頻, 秋田嵌入式墨盒安裝視頻, 求華清遠見嵌入式視頻,

MIDI文件類型不同,MIDI文件內(nèi)部的復雜度會有較大差別。不過MIDI文件的三種類型之間是復雜度遞增的關(guān)系,而且前一種類型總可以近似的看作后一種類型的特例,所以只要面向最復雜的類型2做好各種處理,相對簡單的類型0和1只要稍作修改即可支持。

MIDI文件中一般把四分音符的時間增量數(shù)設(shè)置為120,但MIDI文件也支持更改這個值。由于這種情況在實際應用中比較少見,因此可以通過統(tǒng)一轉(zhuǎn)換為120的方式,在不影響正確性的前提條件下,降低解析的復雜度。

MIDI事件的讀取

MIDI消息的種類很豐富,而且沒有統(tǒng)一的格式,這意味著只能把每一種消息單獨處理。值得慶幸的是,不是所有的MIDI消息都跟五線譜有關(guān),所以要真正理解的MIDI消息實際上不是很多。要面對的最多的消息是音符打開消息(Note-On),它的實際使用量占了所有消息的總使用量的95%以上。

由于MIDI中沒有音符的概念,因此要通過將對應的音符開啟和關(guān)閉事件配對形成一個音符,稱之為原始音符,之后還需要將音符開始時間戳和結(jié)束時間戳轉(zhuǎn)換成音符開始時間戳和音符持續(xù)長度。

Meta事件的讀取

MIDI中的Meta事件中描述的信息在五線譜顯示中基本上都是有用的,有些信息還起著至關(guān)重要的作用。例如很多說明性的文字信息,需要直接添加到五線譜和各音軌的屬性中。當這些說明性信息重復出現(xiàn)時,可以把兩段信息的文字連起來,作為一條長的信息出現(xiàn)。

調(diào)號和拍號信息是Meta信息中非常關(guān)鍵的兩條。調(diào)號決定了每個音符在五線譜上顯示的確切位置及其升降號標志,拍號決定了小節(jié)的長度還同時影響合成音符組的規(guī)則。

3.2.2 整合分析器

文件分析器只能夠讀出MIDI文件中直接說明的音符,如果直接顯示這樣的音符,得到的五線譜將非常難看。整合分析器的任務就是接收原始音符表與其它如拍號調(diào)號等信息進行排列重組,生成一個正確美觀的五線譜。

確定譜號

Meta信息里只提供了調(diào)號和拍號的信息,而同樣重要的譜號信息卻沒有提供。由于在整合分析器中的許多工作都要使用譜號信息,所以對音符的統(tǒng)計工作必須在進入整合分析器之前就進行完畢。

確定譜號需要統(tǒng)計音軌中最高和最低音符的音高。得到了這兩個值后,便可以決定使用低音譜號和高音譜號中的一種。如果最高音和最低音相差太多,以至于使用無論使用低音譜號還是使用高音譜號都不能滿足要求,可以考慮將一個音軌拆成兩條五線顯示。

添加休止符

休止符是五線譜中與音符同樣重要的符號元素,而在原始音符表中只有實在的音符而沒有休止符。用以記錄不同長短音的進行的符號叫做音符。 音值的基本相互關(guān)系:每個較大的音值和它最近的較小的音值的比例是2與1之比。例如:全音符等于兩個二分音符;全休止符等于兩個二分休止符等。由于譜面狹窄及其他種種原因,不可能遵守上述規(guī)則時,適當縮短或伸長符干長度是完全可以的。附點寫在音符符頭和休止符右邊的間內(nèi),而不記在線上。休止符在單符干記譜中,永遠記在第三線上,或靠近第三線的地方。二分休止符寫在第三線的上面,全休止符寫在第四線的下面。在雙符干記譜中,各聲部共同休止時,休止符的記法與單符干記譜相同。個別聲部休止時,休止符寫在五線譜的邊緣,或五線譜之外。這時全休止符和二分休止符要使用加線。全休止符寫在加線的下面,二分休止符寫在加線的上面。

小節(jié)劃分與音符的拆分組合

五線譜中的小節(jié)劃分對顯示來說具有兩個作用,方便上下同步聲部樂譜對齊和在換行時保持末端對齊。由于原始音符可能完全屬于某一個小節(jié),又或跨越若干個小節(jié),因此就要把音符拆分成多個小的音符,并用延音符號連接他們,或者把一個小節(jié)中的幾個音符組合在一起構(gòu)成和弦或者共尾音符組等情況。圖5例舉出了一種比較簡單的情況。

  

完成這一部分工作需要將原始音符表轉(zhuǎn)換為有序棧。有序棧的特點保證了雖然每個音符都有可能被反復插入,但是它插入的次數(shù)與整體棧規(guī)模無關(guān),只與音符的復雜度有關(guān)。在音符復雜度一定的情況下,每個棧元素被反復操作的次數(shù)接近一個常量。

為了降低運算量,可以利用只含有一個和弦的共尾音符組和只含有一個音符的和弦統(tǒng)一各種符號間的比較,把3x3=9步比較合并為兩步,降低了比較的代價,大大減少了代碼量。另一個優(yōu)化之處是利用了有序棧,把時間復雜度降低到nlog(n)。

圖6展示了MIDI文件的顯示效果,限于篇幅,本文對于多連音、倚音,裝飾音等格式解析,在這里不做更詳細的說明了。

  

4 總結(jié)與展望

本文討論的電子樂譜閱讀器嵌入式開發(fā)平臺采用了基于Celeron-M的ECX平臺,顯示模塊采用了Linux平臺下的QT開發(fā)框架。實踐證明,本文所討論的解析方法是完全可行的,系統(tǒng)的運行速度也是令人滿意的。

隨著計算機與嵌入式系統(tǒng)的普及,人們的生活方式正在發(fā)生了巨大的變化,雖然本文提到的嵌入式樂譜閱讀器還沒有形成產(chǎn)品,但勢必取代現(xiàn)有的紙質(zhì)樂譜。另外,本系統(tǒng)目前只有閱讀功能,還可以增加音樂播放功能,這樣就可以進行五線譜的學習,對于正處于學習階段的學生來說,是一個非常好的助手。

本文作者創(chuàng)新點:本文所作的研究彌補了樂譜數(shù)字化的最后一個環(huán)節(jié)——數(shù)字化閱讀。盡管存在著各種打譜軟件、作曲軟件、播放軟件,但演奏者目前還沒有一個適合的閱讀器。本文嘗試將數(shù)字化樂譜通過嵌入式閱讀設(shè)備顯示給演奏者,替代傳統(tǒng)笨重的紙質(zhì)樂譜,極大的減輕了演奏者的負擔。同時由于互聯(lián)網(wǎng)上存在大量的MIDI格式的文件,但五線譜格式的文件很少而且格式不公開,需要配備價格昂貴的專業(yè)軟件。



QICK
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表