林鵬,尹紹杰
?。ㄕ憬髮W(xué)臺州研究院 電氣與控制研究所,,浙江 臺州 318000)
摘要:為了在嵌入式系統(tǒng)中加入動聽的提示音或音樂效果,增加音效編輯的靈活性,,設(shè)計了一套完整的帶有余音控制的音效解決方案,。該方案主要由電腦端的音樂編輯軟件、經(jīng)改進(jìn)的蜂鳴器驅(qū)動電路及單片機(jī)參考處理流程組成,,可提供可視化的音樂編輯環(huán)境,,能夠及時試聽音樂效果,,解決了以往需要將程序燒錄至單片機(jī)后才能試聽效果的不便。經(jīng)測試,,該方案簡單方便,,降低了音效編輯的復(fù)雜度,音效清晰嘹亮,,能提升嵌入式產(chǎn)品的人機(jī)交互體驗,。
關(guān)鍵詞:單片機(jī);蜂鳴器,;音樂,;C#;WPF
0引言
在嵌入式產(chǎn)品中加入提示音或音樂能使用戶的操作得到反饋,,提升了人機(jī)交互體驗,,也提高了產(chǎn)品的檔次。在大多數(shù)的產(chǎn)品中,,為了節(jié)省成本,,一般使用單片機(jī)驅(qū)動蜂鳴器來發(fā)出聲音而非使用專用芯片。然而單片機(jī)音效的調(diào)音和編曲工作比較繁復(fù),,往往需要燒錄程序后反復(fù)地試聽,,大大增加了操作強(qiáng)度。本文介紹一套在嵌入式系統(tǒng)中增加提示音或音樂的開發(fā)方案,,能夠比較直觀地編寫出提示音效,,并且每個音符帶有余音控制,而非普通的生硬地切換音符,。
1方案簡介
本方案包括一套電腦端的音樂編輯軟件,、經(jīng)改進(jìn)的蜂鳴器驅(qū)動電路以及供參考的單片機(jī)端的處理流程。系統(tǒng)框架如圖1所示,,電腦和單片機(jī)通過串口通信,,單片機(jī)根據(jù)接收到的數(shù)據(jù)驅(qū)動蜂鳴器。在電腦端完成音效的編輯并定型后,,可移除串口通信的代碼,,將電腦端生成的文件加入單片機(jī)工程即可,。
2蜂鳴器音樂的發(fā)聲原理
音樂的基本要素包括音的高低,、長短、強(qiáng)弱和音色[1],,要使蜂鳴器發(fā)出聲音就需要控制這些要素,。蜂鳴器的固有特性決定了音色,無法被控制,;通過驅(qū)動蜂鳴器的頻率可以改變音的高低,;控制蜂鳴器導(dǎo)通的時間可以決定音的長短,;調(diào)節(jié)蜂鳴器的供電電壓可以模擬出音的強(qiáng)弱。值得一提的是,,蜂鳴器分為有源和無源兩種,,有源蜂鳴器內(nèi)部自帶諧振電路,直接加電壓即可發(fā)出聲音,,無法控制聲音的頻率,,而無源蜂鳴器需要有脈沖頻率的驅(qū)動。本方案選擇無源蜂鳴器,。
本方案使用的蜂鳴器驅(qū)動電路[2]如圖2所示,。由圖可見該驅(qū)動電路稍顯復(fù)雜,一般的蜂鳴器驅(qū)動電路只有簡單的右半部分,,只能控制音的高低和長短,,無法控制音的強(qiáng)弱,加入了左半部分的控制電路后,,能調(diào)節(jié)蜂鳴器的供電電壓,,在一定程度上使得音的強(qiáng)弱也有所變化。
蜂鳴器驅(qū)動電路的原理為:在一個音程內(nèi),,BUZ_PWM端輸入指定頻率的方波信號,,當(dāng)BUZ_CTRL端的信號為高時,NPN三極管Q2導(dǎo)通,,PNP三極管Q1也導(dǎo)通,,電解電容C1充電,通過R3,、R4的限流和分壓后,,蜂鳴器得到供電,在BUZ_PWM端信號的驅(qū)動下發(fā)出特定頻率的聲音,;當(dāng)BUZ_CTRL端的信號為低時,,三極管Q2和Q1截止,蜂鳴器由電解電容C1的殘余能量供電,,蜂鳴器的音量將逐漸減低,,體現(xiàn)出音的強(qiáng)弱特性。BUZ_CTRL端的信號有兩種選擇:一種是輸出PWM(Pulse Width Modulation)脈寬調(diào)制信號,,并搭配一個小容量的電容,,通過調(diào)整脈沖的寬度,隨意調(diào)節(jié)音的強(qiáng)弱變化,;另一種是一個周期的高低信號,,配合一個較高容量的電容,驅(qū)動信號先高使電容充電,,在某個合適的時刻置低,,蜂鳴器僅由電容供電,,聲音緩慢減弱。第一種方法需要兩路PWM波驅(qū)動,,較復(fù)雜,,對單片機(jī)的要求也較高,但是能做出非常豐富的音樂效果,;第二種方法只要一路PWM波驅(qū)動,,外加一路開關(guān)信號,一些單片機(jī)即使沒有硬件PWM發(fā)生器也能較好地實現(xiàn)控制效果,,產(chǎn)生帶有余音效果的音效,。為了方便和控制簡單起見,本方案選用第二種控制方式,,驅(qū)動信號和電容上的電壓波形如圖3所示,。
3電腦端音樂編輯軟件的設(shè)計
為了方便編輯單片機(jī)音樂,開發(fā)了配套的電腦端單片機(jī)音樂編輯器,,能夠更加直觀地調(diào)音和編曲,,加快開發(fā)進(jìn)度。
3.1開發(fā)環(huán)境簡介
電腦端的音樂編輯器采用C#和Windows Presentation Foundation(WPF)技術(shù)開發(fā),,使用Visual Studio 2010作為開發(fā)編譯平臺,,編譯后的可執(zhí)行文件可運(yùn)行在裝有.Net Framework 4.0運(yùn)行環(huán)境的電腦上。選用C#作為軟件開發(fā)語言主要是因其方便,、強(qiáng)大,,并且隨著微軟宣布終止對Windows XP操作系統(tǒng)的支持,使用C#編寫的軟件可直接運(yùn)行的電腦將越來越多,,從而不必?fù)?dān)心需要再安裝運(yùn)行環(huán)境的問題,。軟件的界面使用了WPF技術(shù)作為用戶界面框架而非傳統(tǒng)的WinForm界面,因為WPF包含諸多優(yōu)異的特性,,數(shù)據(jù)驅(qū)動,、數(shù)據(jù)綁定、動畫特效,、界面可定制程度高等特點(diǎn)使得界面開發(fā)更加得心應(yīng)手,,而且這也是被微軟官方所推薦使用的[3-4]。
3.2電腦端音樂編輯軟件的功能簡介
電腦端音樂編輯軟件的主界面如圖4所示,,主要有以下功能:
(1)選擇串口端口號及波特率,,啟停串口連接。
(2)鍵盤“←”和“→”按鍵可調(diào)整一個音符的持續(xù)長度,,鼠標(biāo)左右拖動方波中間的下降沿能分配電容的供電時間,。
(3)鍵盤“↑”和“↓”按鍵能調(diào)整音符的基礎(chǔ)頻率區(qū)間,以C大調(diào)的頻率為基準(zhǔn),。
(4)能載入或新建音樂編輯文件,,支持拖拽打開文件。
(5)當(dāng)軟件主界面獲得焦點(diǎn)時,,如果已連上串口通信,,按鍵盤的小鍵盤數(shù)字“0~7”按鍵能夠試聽音符效果;在按小鍵盤數(shù)字“0~7”按鍵的同時按住鍵盤上的左“Ctrl”鍵,,如果此時已打開編輯音樂文件界面則會將當(dāng)前的音符添加至編輯界面的音符列表中,,否則會打開一個空白的編輯界面。
電腦端音樂編輯器軟件的音符編輯界面如圖5所示,,從左至右,、從上至下其功能有:
(1)將主界面按下的音符添加至列表尾部。
(2)修改音符名或備注,,能在下拉菜單選擇音符名并自動修改對應(yīng)的頻率值或直接輸入備注文字,。
(3)能修改頻率、電容開通時間及音符持續(xù)時間,,帶有數(shù)值合法性檢驗,。
(4)列表中的每一個音符選中時能刪除(快捷鍵為鍵盤上的“Delete”鍵)和試聽(快捷鍵“F2”,需連上串口通信),。
(5)當(dāng)連上串口通信后,,可以點(diǎn)擊界面右邊的“播放”按鈕(快捷鍵“F5”)從頭開始播放或停止播放;點(diǎn)擊“播放”按鈕下面的按鈕(快捷鍵“F1”)從當(dāng)前選中的行開始播放,。正在播放的行底色為淡紅色,,用以指示播放進(jìn)度。
(6)有刪除行時提示和修改頻率后試聽選項,。
(7)可以在選中的行下面新增一行(快捷鍵“F3”),,新增的行底色為淡綠色以區(qū)分其他普通的行。
(8)將當(dāng)前編輯的音樂進(jìn)度保存為“.umf”格式,,方便以后導(dǎo)入文件繼續(xù)修改,。
(9)當(dāng)完成音樂編輯后,可以導(dǎo)出C語言格式的文件,,加入到單片機(jī)工程中,,以便完成整個單片機(jī)音樂功能的開發(fā)。
3.3音符數(shù)據(jù)的設(shè)計
軟件中的音符數(shù)據(jù)主要由音符名稱或備注,、音符頻率,、蜂鳴器供電電容上電時間和音符持續(xù)時間組成。其中電容上電時間和音符持續(xù)時間比較簡單,,在軟件主界面中能直觀地調(diào)整,,下面著重介紹音符名稱及其對應(yīng)的頻率。
根據(jù)科學(xué)音調(diào)記號法及相關(guān)的樂理知識[5], C,、D,、E、F,、G,、A、B為C大調(diào)的七個主音,,唱名分別為do,、re、mi,、fa,、so、la,、si,,簡譜分別記為數(shù)字1~7,并可以知道每一個音符的頻率值,。在軟件中程序默認(rèn)的八度區(qū)為中央C,,即主界面右邊滑塊所指向的“C.262”(科學(xué)音調(diào)記號法記為“C4”,為了突出頻率的概念,,軟件中的滑塊右邊標(biāo)示符號格式為“C.”加對應(yīng)的頻率值),,音符標(biāo)示名的格式為音符所在的八度區(qū)C音的頻率值加音符的唱名,如“C4”的音符名稱為“C262_Do”,。由于一般簡單的歌曲很少用到升音或降音,,為了操作方便,程序中將其忽略,,在錄入歌曲時先用臨近的音符代替,,調(diào)試時再修改備注和頻率。程序中將各個音符的頻率保存為一個二維數(shù)組,,這樣根據(jù)主界面右邊當(dāng)前滑塊值和按下的數(shù)字鍵就能很方便地獲得所需要錄入音符的頻率值,,該二維數(shù)組代碼如下:
private static readonly ushort[,] ToneFrequency = new ushort[7,7] {
{65, 73, 82, 87, 98, 110, 123},
{131, 147, 165, 175, 196, 220, 247},
{262, 294, 330, 349, 392, 440, 494},
{523, 587, 659, 698, 784, 880, 988},
{1047, 1175, 1319, 1397, 1568, 1760, 1976},
{2093, 2349, 2637, 2794, 3135, 3520, 3951},
{4186 ,4699, 5274, 5588, 6272, 7040, 7902}
};
3.4軟件主界面的程序流程圖
軟件主界面的程序流程圖如圖6所示。
3.5串口通信的數(shù)據(jù)格式
為了能測試所編輯音樂的實際效果,,需要將音符數(shù)據(jù)發(fā)送給單片機(jī)演奏,,本方案使用串口來傳遞數(shù)據(jù)。播放一表1串口通信的數(shù)據(jù)格式字節(jié)偏移字節(jié)內(nèi)容0數(shù)據(jù)幀頭碼1,,0xEE1數(shù)據(jù)幀頭碼2,,0xFF2音符頻率,高8位3音符頻率,,低8位4電容通電時間,,每單位10 ms5音符持續(xù)時間,每單位10 ms個音符時,只需要通過串口向單片機(jī)發(fā)送音符數(shù)據(jù)即可,,由于需要發(fā)送定長多字節(jié)的數(shù)據(jù),,在數(shù)據(jù)幀中加入頭碼來方便單片機(jī)判斷數(shù)據(jù)幀的開始和結(jié)束。數(shù)據(jù)幀的格式如表1所示,。
3.6導(dǎo)出文件的格式
在完成音樂的編輯和調(diào)試后,,可以導(dǎo)出C語言文件,,加入單片機(jī)工程中,,完成單片機(jī)音樂的功能。導(dǎo)出的文件中包含音符結(jié)構(gòu)體的定義,、停止標(biāo)識符及音符結(jié)構(gòu)體數(shù)組,,可以根據(jù)需要添加多個音符結(jié)構(gòu)體數(shù)組,并修改數(shù)組名稱,。
4單片機(jī)參考處理流程
在串口接收到完整的一幀音符數(shù)據(jù)后,,調(diào)用Music_StartANewTone函數(shù),啟動一次音符演奏的控制流程,,在該函數(shù)內(nèi)將音符的電容上電時間賦值給CURBuzzerOnTime全局變量,,音符的持續(xù)時間賦值給CURToneTime全局變量,將音符的計時器全局變量ToneTimer置為0,,并打開電容的供電控制并設(shè)置好蜂鳴器的驅(qū)動頻率,。一個音符的控制過程中每10 ms處理一次相關(guān)的變量操作,其程序流程圖如圖7所示,。
程序中定義了音符結(jié)構(gòu)體指針變量pMusicTone,,用于方便控制音樂的播放和停止,在需要播放音樂或停止播放時,,將指針變量pMusicTone指向?qū)?yīng)的音樂音符數(shù)組即可,,在音符的控制流程中將自動處理。
5結(jié)束語
本文介紹了一套完整的在嵌入式系統(tǒng)中加入高級提示音或音樂的方法,,能夠快速方便地編輯音樂和調(diào)試音樂效果,,加快嵌入式系統(tǒng)提示音或音樂功能的開發(fā)進(jìn)度,能夠廣泛地適用于需要警報提示音或開關(guān)機(jī)音樂的應(yīng)用場合,。
參考文獻(xiàn)
?。?] 百度百科.音樂基本要素[EB/OL]. [2016-06-10]. http://baike.baidu.com/view/1417685.htm.
[2] 深圳和而泰智能控制股份有限公司. 一種蜂鳴器電路:中國,,2006200340907[P]. 2007-07-25.
?。?] 劉鐵猛. 深入淺出WPF[M]. 北京:中國水利水電出版社,2010.
?。?] KARLI W, JACOB V H, JON D R,,等. C#入門經(jīng)典[M]. 齊立波,黃俊偉,譯. 北京:清華大學(xué)出版社,,2013.
?。?] Wikipedia. Scientific pitch notation[EB/OL]. [2016-06-10]. https://en.wikipedia.org/wiki/Scientific_pitch_notation.