李社蕾
【摘 要】論文的關(guān)鍵就是要實(shí)現(xiàn)輸出4個(gè)高八度以上的音域范圍,并有相應(yīng)的伴音輸出。具體要實(shí)現(xiàn)三個(gè)要求:(1)按對應(yīng)的鍵,輸出該鍵對應(yīng)的音;(2)按下即發(fā)聲,松開聲音即停止,按鍵多長時(shí)間,發(fā)出多長時(shí)間的聲音;(3)根據(jù)輸入,顯示音符簡譜以及對時(shí)值的附加顯示。實(shí)現(xiàn)多音色,可調(diào)節(jié)音量,鍵盤及鼠標(biāo)輸入并發(fā)聲的電子琴(鋼琴)制譜軟件。
【關(guān)鍵詞】模塊功能;模塊處理
0 引言
隨著計(jì)算機(jī)技術(shù)的發(fā)展進(jìn)步,人性化軟件逐漸成為我們生活中很重要的一部分,我們都會應(yīng)用大量的人性化軟件來滿足人們?nèi)找嬖鲩L的精神文化需求。制譜軟件是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是新時(shí)代的催生物。它在現(xiàn)代音樂扮演著重要的角色,C#語言因?yàn)槠浔旧愍?dú)特的衍生方式,而具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)融入現(xiàn)代人們的生活中成為人類計(jì)算機(jī)應(yīng)用中不可替代的一部分。越來越多的人工智能產(chǎn)品都是由C#語言編寫程序控制的, C#語言簡單易懂,而且也較易于對硬件進(jìn)行操作,所以它成了編寫人工智能產(chǎn)品程序的首選。論文關(guān)鍵就是應(yīng)用C#語言的Winmm庫來實(shí)現(xiàn)多音色,可調(diào)節(jié)音量,鍵盤及鼠標(biāo)輸入并發(fā)聲的電子琴(鋼琴)制譜軟件。
1 模塊功能介紹及其設(shè)計(jì)
1.1 輸入部分
輸入情況設(shè)計(jì)為以下3種:(1)鍵盤輸入,通過對鍵盤輸入的監(jiān)聽,完成對按鍵狀態(tài)的記錄儲存,并發(fā)聲,同時(shí)將按鍵對應(yīng)的音頻音符(簡譜)輸出顯示;(2)鼠標(biāo)輸入,通過對鼠標(biāo)位置,鼠標(biāo)左鍵狀態(tài)的同步監(jiān)聽,完成對鼠標(biāo)操作相關(guān)的音頻文件的發(fā)聲,以及音頻音符(簡譜)輸出顯示;(3)Windows窗體中其他控件的鼠標(biāo)操作[14]。
1.2 琴鍵定義部分
(1)通過定義琴鍵類,將所有可能發(fā)生的琴鍵操作全部在這個(gè)類中表示出來,包括鍵名,熱鍵,琴鍵狀態(tài);
(2)琴鍵面板類,通過開發(fā)環(huán)境中提供的畫板控件的相關(guān)操作,省去通過圖片建立模擬琴鍵的方式,直接將模擬琴鍵以圖畫的形式生動地繪畫出來,包括面板中琴鍵對應(yīng)的音符(簡譜),黑鍵(伴音)的音符(國際標(biāo)準(zhǔn)),通過構(gòu)造函數(shù)(初始化)的方式,定義并完善琴鍵畫板類所要實(shí)現(xiàn)的各種事件監(jiān)聽及響應(yīng)功能;
(3)功能類,定義一個(gè)聲音集合,用于實(shí)現(xiàn)多種樂器音色模擬。在這三者中琴鍵面板類將作為本次設(shè)計(jì)的核心,該類將直接作用于用戶體驗(yàn)。見圖1琴鍵的分布以及圖2音符分布圖。
論文選用的4組高八度音階,是winmm庫中對人類聽覺舒適度最適中的國際標(biāo)準(zhǔn)音階,在琴鍵位置的設(shè)計(jì)上,為了滿足4個(gè)八度,以及可能出現(xiàn)的多重和弦特別將1',2',1'',2'',3''增加一個(gè),這樣不僅能有效緩解和弦問題,同時(shí)提高了鍵盤模擬電子琴演奏的舒適度,本設(shè)計(jì)并沒有將黑鍵(伴音)添加鍵盤輸入,僅僅設(shè)置了鼠標(biāo)輸入的方式,根本原因有兩個(gè):(1)開發(fā)是所用電腦鍵盤大小有限,不便于實(shí)現(xiàn)雙排4階的八度按鍵排列方式;(2)在實(shí)際演奏中黑鍵的使用頻率遠(yuǎn)低于白鍵,所以沒有納入鍵盤排列。
1.3 輸出顯示部分
輸出結(jié)果是琴鍵對應(yīng)的標(biāo)準(zhǔn)音符音高的簡譜既琴鍵標(biāo)示名內(nèi)容中的簡譜,通過對窗體模塊的編程,添加文本空間,獲取按鍵對應(yīng)的簡譜信息以及按鍵持續(xù)的時(shí)值,以文本形式輸出,在相應(yīng)模塊給出相應(yīng)的顯示,并且通過在窗體界面上添加控件的方式,對不同控件進(jìn)行編輯,以實(shí)現(xiàn)多種附加功能。
詳見圖3窗體設(shè)計(jì)圖
2 各模塊處理流程
(1)鍵盤定義部分:就是定義好所用到的計(jì)算機(jī)鍵盤按鍵,模擬48鍵電子琴(鋼琴)的MIDI琴鍵,其中包括MIDI琴鍵類,琴鍵面板類兩大部分,通過對這兩部分的設(shè)計(jì),完成了課題主體的架構(gòu)設(shè)計(jì)。琴鍵面板類如圖4所示。
其實(shí)鍵盤定義就是簡單的在電腦鍵盤上找出4組合適的按鍵,以滿足課題中要求的4組高八度的音符,定義好每個(gè)按鍵對應(yīng)的發(fā)聲音符,這種定義要盡量滿足實(shí)際的鍵盤分布。然后,每個(gè)音符對應(yīng)的鍵盤熱鍵也要定義好。以上流程就是鍵盤定義的工作流程。其中省略了部分按鍵的重復(fù)定義部分。
(2)輸入部分:實(shí)際上就是彈奏的時(shí)候,判斷被按下的是哪個(gè)按鍵,接收原理其實(shí)是每個(gè)按鍵都對應(yīng)一個(gè)鍵盤值,如果哪個(gè)按鍵被按下,該鍵的值就會送入相應(yīng)的程序處理模塊,對掃描碼進(jìn)行響應(yīng)的處理,致使發(fā)聲。輸入部分流程圖如圖3.7所示。
首先定義每個(gè)按鍵所對應(yīng)的熱鍵,然后循環(huán)不斷的監(jiān)控接收被按下鍵的值;接收到一個(gè)按鍵的值,先判斷按鍵狀態(tài),進(jìn)一步做后續(xù)處理,包括發(fā)出聲音和在屏幕上顯示音符的字符樣式。
(3)發(fā)聲部分:C#語言的WinMM庫中提供的函數(shù)已經(jīng)把對該硬件電路部分的操作封裝好,編程人員可以直接調(diào)用,只是要根據(jù)需要的不同而有所不同,發(fā)聲部分的難點(diǎn)在于多音色的定義,調(diào)用WinMM庫實(shí)現(xiàn)連續(xù)發(fā)生這兩點(diǎn)。
(4)顯示部分:論文最終不僅要實(shí)現(xiàn)音符聲音的輸出,為了聲文并茂,還要在計(jì)算機(jī)屏幕上顯示出按下的鍵對應(yīng)的聲音來。比如按下“Z”鍵,它所對應(yīng)的聲音是低音的Do(.1),在發(fā)聲的時(shí)候同時(shí)在屏幕上顯示“.1”這樣的字符,同時(shí),通過對按鍵狀態(tài)的監(jiān)聽獲取到KeyDown到KeyUp過程所經(jīng)過的時(shí)間。這兩項(xiàng)就是需要輸出顯示的內(nèi)容。輸出顯示部分流程圖如圖3.3.5輸出顯示部分流程圖。首先程序要循環(huán)掃描計(jì)算機(jī)鍵盤是否有鍵被按下,如果有則開始計(jì)時(shí),截至到按鍵彈起,計(jì)時(shí)結(jié)束,輸出按鍵對應(yīng)音符(簡樸)以及發(fā)聲時(shí)值,同時(shí)發(fā)出連續(xù)聲音。輸出部分的不容易掌握的部分集中在按鍵長按狀態(tài)的單次字符輸出,為了解決這一問題,本文采用了調(diào)用System.Diagnostics.Stopwatch sw的方法,在按鍵按下式開始計(jì)時(shí),在按鍵抬起時(shí)結(jié)束計(jì)時(shí),同時(shí)將字符輸出的時(shí)間點(diǎn)延后在按鍵抬起時(shí),這樣的設(shè)計(jì)不僅解決的連續(xù)發(fā)生的問題,也將單次輸出按鍵音符(簡譜)的目的輕松完成,同時(shí)還實(shí)現(xiàn)了對發(fā)生時(shí)值的計(jì)便于將其直接輸出在窗體中文本控件中。
3 程序?qū)崿F(xiàn)
3.1 總程序流程
(1)做好鍵盤定義部分,即電腦按鍵和音節(jié)的對應(yīng)關(guān)系。
(2)編寫程序接收鍵盤輸入,先判斷被按下的按鍵是否是琴鍵定義中的部分,如果是,獲取按鍵值監(jiān)聽按鍵狀態(tài)。對琴鍵定義部分中的相關(guān)按鍵,做相應(yīng)處理,發(fā)出對應(yīng)的聲音。例如按下的“Z”鍵,則調(diào)用發(fā)聲函數(shù),MidiKeys[m].isDown = true;發(fā)出“Z”鍵對應(yīng)的標(biāo)準(zhǔn)音。
(3)輸出顯示,就是在電腦屏幕上顯示按下的鍵對應(yīng)的音符的字符樣式以及發(fā)音時(shí)值。
最后,是完善程序的用戶體驗(yàn),既所謂的附加功能模塊,用于窗體中其他控件的可操作性編輯,包括:音色選擇,音量選擇,Richtextbox中的內(nèi)容存儲文本(.txt格式),打開文本(.txt格式)的附加功能等。
3.2 程序運(yùn)行主要界面如圖5所示。
至此,模擬電子琴鍵盤輸入的樂譜生成軟件設(shè)計(jì)與實(shí)現(xiàn)已經(jīng)基本完成。通過運(yùn)行,該設(shè)計(jì)可以順利實(shí)現(xiàn)4組標(biāo)準(zhǔn)音的輸出(低音、中音、次高音、高音的7個(gè)標(biāo)準(zhǔn)音),持續(xù)發(fā)音也得到了很好的解決,聲音不但可以很連續(xù)的輸出,而且還實(shí)現(xiàn)了多重音色選擇,音量控制,樂譜文本保存,打開演奏幫助文本的功能。
【參考文獻(xiàn)】
[1]陳愛萍,李聰.基于FPGA的樂器數(shù)字接口音樂FM合成器[J].電聲技術(shù),2008.
[2]黃靜.MIDI系統(tǒng)在幼兒園音樂教學(xué)中的運(yùn)用[J].小學(xué)科學(xué):教師,2012.
[3]董景.數(shù)字錄音的發(fā)展[J].音響技術(shù),2001,01.
[4]王春明.MIDI技術(shù)的發(fā)展及其存在問題的解決[J].電聲技術(shù),2004.
[5]曹玉娟.音樂噴泉交互設(shè)計(jì)平臺[D].浙江大學(xué),2007.
[責(zé)任編輯:朱麗娜]