基于ISDl420的語音編輯器設(shè)計(jì)
0 引言
在嵌入式系統(tǒng)飛速發(fā)展的今天,人們的身邊無時(shí)無刻不存在著嵌入式的產(chǎn)品。利用單片機(jī)和ISD1420芯片設(shè)計(jì)的語音編輯器可以方便地對播放的語音文件進(jìn)行分段播放、分段組合、以及分段錄音等功能。該語音編輯器可以用在測試儀以及其他產(chǎn)品上,也可以單獨(dú)用來控制語音播放設(shè)備。
1 系統(tǒng)構(gòu)成
語音編輯器要具有分段錄音、分段播放、分段組合播放等基本的語音編輯功能及良好的用戶操作界面。
系統(tǒng)設(shè)計(jì)主要圍繞用戶操作界面展開。在單片機(jī)控制下,對ISD1420進(jìn)行上述基本的語音編輯操作。其系統(tǒng)結(jié)構(gòu)如圖1所示。
顯示器顯示用戶在對系統(tǒng)進(jìn)行操作時(shí)的相關(guān)信息。如,分段地址、錄放音提示、分段組合操作提示等等,以直觀地指示用戶操作。
鍵盤 圍繞語音編輯功能,系統(tǒng)應(yīng)為用戶提供一個(gè)友好的操作界面,以使用戶方便靈活地使用本系統(tǒng)。
單片機(jī) 作為系統(tǒng)的控制核心,從鍵盤接受用戶命令,以控制系統(tǒng)顯示及語音電路工作。
ISD1420是一種錄音數(shù)據(jù)永久保存、高保真、低耗電、適用于同單片機(jī)接口的新一代語音器件,是系統(tǒng)功能實(shí)現(xiàn)的核心。在單片機(jī)控制下實(shí)現(xiàn)了題目要求的所有功能。
2 硬件方案
2.1 顯示部分
在分段錄音和放音過程中,系統(tǒng)應(yīng)該為用戶提供段地址顯示,以為其指示當(dāng)前正在操作的那個(gè)段,段地址為兩位。在這些操作中,系統(tǒng)還應(yīng)該提供操作指示,如提示開始、進(jìn)行中、結(jié)束等。系統(tǒng)設(shè)置一位數(shù)碼管,以閃爍、字符等形式提示用戶操作。系統(tǒng)選擇3位LED七段數(shù)碼管,已基本滿足操作提示的需求,如圖2所示。3位LED七段數(shù)碼管采用靜態(tài)顯示方式,其顯示穩(wěn)定,程序簡單,電路實(shí)現(xiàn)也不復(fù)雜。它的顯示數(shù)據(jù)由8位D觸發(fā)器74LS374鎖存輸出,驅(qū)動數(shù)碼管顯示。8位D觸發(fā)器的輸入采用總線連接。其鎖存控制由單片機(jī)的寫命令WR,加上地址信息進(jìn)行;其地址分配為FE00H,F(xiàn)D00H,F(xiàn)B00H。
2.2 鍵盤
鍵盤是人機(jī)的主要界面,所有用戶命令都是由它向單片機(jī)發(fā)出的。首先進(jìn)行交互設(shè)計(jì),根據(jù)功能要求設(shè)置功能鍵,包括錄音、放音、組合、分段等按鍵,其操作使用方法見用戶使用手冊。
對段地址,系統(tǒng)需要O~9的按鍵,以保證用戶能夠?qū)ぶ稩SD1420的所有段。系統(tǒng)總共由14個(gè)鍵構(gòu)成。
為滿足系統(tǒng)結(jié)構(gòu)的簡單起見,系統(tǒng)采用與鍵盤單獨(dú)接口。系統(tǒng)利用P1口與鍵盤陣列連接。其中,低4位作為單片機(jī)的鍵盤列掃描輸入;高4位作為單片機(jī)的鍵盤行掃描輸出。
系統(tǒng)采用中斷方式管理鍵盤,使系統(tǒng)能夠?qū)崟r(shí)地響應(yīng)用戶操作。鍵盤陣列的4列線,連接到4與門的輸入。4與門的輸出連接單片機(jī)INTl,為低有效。平時(shí)沒有按鍵按下時(shí),4與門連接的上拉電阻使與門的輸出為高電平,無中斷產(chǎn)生。這時(shí)程序從列輸入的是1111。
在掃描鍵盤時(shí),程序首先讓行掃描輸出0000,這樣,在這4行中的14個(gè)鍵,只要有一個(gè)鍵按下,與門都能輸出低電平而產(chǎn)生中斷。程序可通過鍵盤中斷服務(wù)程序具體確定是那一個(gè)鍵按下,如圖3所示。它的具體方法是,依次向各行(P1.7~P0.0)輸出0,程序就能從列端口讀出對應(yīng)按鍵所在位置的列編碼(P1.3~P0.O)。如表1所示。這樣程序就能得到低4位與高4位的掃描值,得到對應(yīng)鍵盤的編碼值。
2.3 ISDl420
與顯示器一起采用總線連接,段地址單片機(jī)通過74LS374鎖存后,再輸入到ISDl420,74LS374鎖存控制信號構(gòu)成同顯示器,由單片機(jī)的WR加上地址信號組合構(gòu)成。它的地址分配為7FOOH。單片機(jī)通過一條輸出指令完成語音電路的段地址輸出,以控制語音電路分段操作,如圖4所示。
系統(tǒng)控制芯片的PLAYE端口,平時(shí)為高電平,當(dāng)出現(xiàn)下降沿時(shí)開始錄音。
信號EOM是語音段結(jié)束標(biāo)志,當(dāng)錄音結(jié)束,若存儲器沒完,ISD1420會自動為其加上EOM標(biāo)志符,表示該段錄音結(jié)束。放音時(shí),當(dāng)遇到EOM標(biāo)志符,EOM信號會由高電平輸出一個(gè)低脈沖。該信號連至單片機(jī)的T1/P3.5引腳,使單片機(jī)能夠及時(shí)知道該語音段結(jié)束,以便控制下一步操作。
2.4 單片機(jī)
這里選擇的89C51具有40個(gè)I/O口。系統(tǒng)不能采用簡單的最小系統(tǒng)連接,由上述可知,它無法滿足該系統(tǒng)的需求。該設(shè)計(jì)可利用它的開放總線連接更多的設(shè)備。
該設(shè)計(jì)將3個(gè)數(shù)碼管和語音芯片通過總線方式接入系統(tǒng)。低位地址不用,所以不用進(jìn)行低8位的地址擴(kuò)展。選擇A8,A9,A10分別作為3個(gè)數(shù)碼低電平的有效地址信號,再與單片機(jī)的WR信號組合。以構(gòu)成帶地址信息的寫控制信號。這樣,程序便可像訪問存儲器一樣訪問這些端口,其地址為:FE00H,F(xiàn)D00H,F(xiàn)B00H。
語音芯片也是采用這種方式進(jìn)入系統(tǒng)的,其地址是7F00H。這種方式既可使電路簡單,也可使操作簡單。P1口作為系統(tǒng)的鍵盤掃描接口,連接如前述,這里不再贅述。
3 用戶界面
用戶界面如下:
鍵盤:0~9、[錄音]、[放音]、[組合]、[分段]。
顯示:3位7段數(shù)碼管。段號2位,以確定錄音、放音位置;計(jì)數(shù)器1位,9~O減l計(jì)數(shù)。
指令格式:<參數(shù)表><命令>。
四個(gè)主要功能為:
(1)分段
操作:分段數(shù)+[分段]
(2)錄音
操作:欲錄音段號+[錄音]
顯示:當(dāng)按下[錄音]時(shí),欲錄音段號閃3下后,計(jì)數(shù)顯示9;錄音開始,計(jì)數(shù)器減l,直到O,錄音結(jié)束。
(3)回放
操作:欲放音段號+[放音]4)、組合放音:功能用于檢查組合放音效果。
操作:段號i+[組合]+段號j+[組合]+…+段號n+[組合]+[放音]
顯示:在組合時(shí),顯示段號,閃爍,按下[組合]后顯示消失,再重復(fù);組合放音時(shí),顯示當(dāng)前放音段號;計(jì)數(shù)器先顯示組合段總數(shù),每放完一段減1,直到O。
4 軟件方案
內(nèi)存分配如下:顯示緩沖為3個(gè)單元,第一、二單元用于存放段號,第三單元用于存放計(jì)數(shù)器值。組合段緩沖為一個(gè)單元,為一個(gè)放音段地址??紤]單片機(jī)的存儲容量與系統(tǒng)成本。設(shè)計(jì)考慮10個(gè)單元,F(xiàn)F為組合結(jié)束標(biāo)志。當(dāng)?shù)谝粏卧扔贔F時(shí),為緩沖器空,ISD1420的段地址從該緩沖區(qū)取出。軟件流程圖如圖5所示。
為方便起見,系統(tǒng)采用平均分段管理方式。根據(jù)ISDl420語音芯片器件使用手冊可知,最多可分為160個(gè)段。其中,O~159為分段使用的有效地址。系統(tǒng)按1 s四個(gè)字的語速算,對于20 s的存儲空間來說,最多不能超過80個(gè)段,該時(shí)段空間最小為1個(gè)字。其分段范圍為1<分段數(shù)<80,在這個(gè)前提下,用戶可根據(jù)實(shí)際需求來分段,段號為O~79。在執(zhí)行[分段]命令時(shí),要將地址間隔計(jì)算出來,以便段號與語音芯片地址映射。地址間隔存于專用地址間隔單元spacing中。分段寄存器seg_num:存放執(zhí)行[分段]命令后的分段數(shù)。用戶進(jìn)行錄音、放音的段號,程序必須驗(yàn)證在此范圍方可執(zhí)行,否則提示錯(cuò)誤信息“E”。系統(tǒng)默認(rèn)分段數(shù)seg_num為40,spacing為4,分段確定后,段地址可以由下式計(jì)算:
分段地址=seg_num×spacing
地址間隔=160/seg_num
暫存器temp:系統(tǒng)預(yù)留一個(gè)單元。用來以二進(jìn)制數(shù)方式存放段號。以temp_sign為暫存器標(biāo)志,用于指示按鍵輸入,其等于0時(shí),段號只有1位;等于1時(shí),段號有2位。前次數(shù)字鍵是十位,當(dāng)前數(shù)字鍵是個(gè)位。如果是兩位數(shù),程序要對這兩位二一十進(jìn)制數(shù)進(jìn)行計(jì)算,轉(zhuǎn)換成二進(jìn)制數(shù),即BCD十位×10+BCD個(gè)位。存入temp。當(dāng)執(zhí)行錄音、放音、分段操作時(shí),程序從temp取參數(shù),計(jì)算段地址。用戶在輸入段號時(shí),如果出現(xiàn)錯(cuò)誤,可重新輸入。第一次輸入的段號,將被第二次輸入的段號覆蓋。
組合段緩沖ally_buf:系統(tǒng)預(yù)留1O個(gè)單元,只有執(zhí)行組合放音時(shí)才用。組合是所有段中任意選擇10個(gè)段構(gòu)成的隊(duì)列。系統(tǒng)用ally_point-er作為入隊(duì)地址指針,以ally_out作為出隊(duì)地址指針。組合放音時(shí),在該指針指示下,依次將錄音段從緩沖區(qū)中取出播放,以構(gòu)成短語,直到ally_out=ally_pointer。程序在沒有執(zhí)行[組合]功能時(shí),保持ally_pointer=O;當(dāng)用戶按下[組合]鍵時(shí),程序應(yīng)將暫存器temp的內(nèi)容傳入ally_buf中,并修改ally_pointer。在執(zhí)行[放音]時(shí),程序首先檢查ally_pointer是否等于0,是,執(zhí)行temp的段放音;否則。執(zhí)行ally_buf的段放音,直到FF標(biāo)志。用戶指令單元dictate;存放用戶指令。主程序從這里識別用戶命令,并執(zhí)行命令。命令標(biāo)志sign_dic:其等于O時(shí),當(dāng)前按鍵為數(shù)字鍵。等于1時(shí),當(dāng)前按鍵為命令鍵。命令與數(shù)字的識別:當(dāng)鍵盤碼大于7F時(shí),為數(shù)字按鍵,否則為命令按鍵。七段顯示:O~9,E為錯(cuò)誤提示。這里采用共陰極7段數(shù)碼管,如圖6所示。
出口如下:
temp為對應(yīng)段號的二進(jìn)制數(shù)。可以直接計(jì)算段地址,最大范圍,小于分段數(shù)seg_num。
sign_dic等于1時(shí),請求執(zhí)行dictate中的命令。
dictate為命令代碼。
5 結(jié)語
按照該方法設(shè)計(jì)的語音編輯器可行性強(qiáng),操作簡單,界面清晰,在實(shí)際的生活中,該語音編輯器經(jīng)過改進(jìn)后可以很方便地應(yīng)用到MP3,DVD,錄音筆等音頻設(shè)備中,同時(shí)也可以用到遠(yuǎn)程語音控制中。與其他的相比,該語音編輯器具有價(jià)格更低廉,可單獨(dú)作為器件來實(shí)現(xiàn),因此具有一定的實(shí)用價(jià)值。