蔣瑩
(中山大學(xué)新華學(xué)院,東莞 523133)
移動(dòng)互聯(lián)網(wǎng)快速發(fā)展的今天,移動(dòng)設(shè)備已成為人們生活中必不可少的生活用品之一。移動(dòng)互聯(lián)徹底改變了我們的生活方式,越來(lái)越多的溝通和交流都可以通過(guò)移動(dòng)平臺(tái)及時(shí)得到實(shí)現(xiàn),很多以前需要電腦或?qū)iT(mén)設(shè)備才能實(shí)現(xiàn)的操作都可以通過(guò)移動(dòng)平臺(tái)方便地進(jìn)行,手機(jī)語(yǔ)音識(shí)別技術(shù)也受到越來(lái)越多的關(guān)注[1]。錄音,作為移動(dòng)系統(tǒng)中一項(xiàng)重要的功能,Android平臺(tái)也好iOS平臺(tái)也好,都有自帶的錄音程序,這些錄音程序都能滿(mǎn)足最基本的錄音操作。但是當(dāng)進(jìn)行較長(zhǎng)時(shí)間的音頻錄制且音頻是分段錄制的時(shí)候,這些系統(tǒng)自帶的錄音軟件,往往無(wú)法滿(mǎn)足要求。例如:如果想在錄音過(guò)程中任意時(shí)刻添加書(shū)簽或筆記,這樣在進(jìn)行錄音回放和整理的時(shí)候就會(huì)明確知道從哪里開(kāi)始回放,不至于頻繁倒退而浪費(fèi)時(shí)間。這樣的功能,目前系統(tǒng)自帶的錄音軟件是無(wú)法滿(mǎn)足的。
本文基于以上分析,考慮Android平臺(tái)的開(kāi)放性和易用性[2],在原有錄音技術(shù)的基礎(chǔ)上,增加書(shū)簽功能,系統(tǒng)在每次暫停錄制時(shí),可以增加錄音標(biāo)簽信息的界面寫(xiě)下文字說(shuō)明,方便用戶(hù)了解當(dāng)前子音頻的主要內(nèi)容。在全部子音頻信息錄制完畢后,可以將所有子音頻合并成一個(gè)完整的音頻。
系統(tǒng)共包括5大模塊:開(kāi)始錄音、暫停錄音、繼續(xù)錄音、全部播放以及停止錄音模塊,這5大模塊簡(jiǎn)單說(shuō)明如下:
(1)開(kāi)始錄音:在進(jìn)入系統(tǒng)后點(diǎn)擊“開(kāi)始錄音”按鈕,開(kāi)始第一段音頻的錄制;(2)暫停錄音:在系統(tǒng)錄音過(guò)程中,隨時(shí)可按下“暫停錄音”按鈕。點(diǎn)擊“暫停錄音”按鈕,彈出需要添加書(shū)簽的界面,添加完書(shū)簽信息后點(diǎn)擊確定,可回到錄音界面,且剛剛錄制的音頻已添加到錄音界面的錄音列表中;(3)繼續(xù)錄音:在暫停錄音添加完書(shū)簽信息后,點(diǎn)擊“繼續(xù)錄音”可以接著錄制音頻;(4)全部播放:在錄音界面下,點(diǎn)擊“全部播放”按鈕,可以播放從最開(kāi)始錄制的每一段音頻信息;(5)停止錄音:該按鈕按下之后,會(huì)將每一段錄制的音頻文件整合成一整段完整的音頻保存起來(lái)。
在每段音頻列表中,都有播放和刪除按鈕,點(diǎn)擊播放則可以播放當(dāng)段音頻,點(diǎn)擊刪除,則可以將其刪除。以上模塊的功能流程如圖1所示。
圖1 系統(tǒng)功能流程圖
根據(jù)需求分析,得出系統(tǒng)界面原型設(shè)計(jì)圖。系統(tǒng)界面原型設(shè)計(jì)圖如圖2所示。進(jìn)入系統(tǒng)后,最上面是系統(tǒng)狀態(tài)提示區(qū),主要用于指示當(dāng)前系統(tǒng)所處狀態(tài);接著是主要按鈕區(qū),包含“開(kāi)始錄音”、“暫停播放”、“繼續(xù)播放”、“全部播放”以及“停止錄音”按鈕。將這5個(gè)主要按鈕放置在一個(gè)LinearLayout布局下。初始狀態(tài)下只有“開(kāi)始錄音”按鈕可以用,隨著系統(tǒng)狀態(tài)不同,各個(gè)按鈕的可用狀態(tài)也不同。按鈕的可用狀態(tài)為黑色,不可用狀態(tài)為灰色;最下面是子音頻區(qū),每暫停錄音一次,生成一個(gè)子音頻文件。子音頻文件暫時(shí)保存在ListView中,每個(gè)子音頻都能進(jìn)行獨(dú)立播放和刪除操作。點(diǎn)擊停止錄音則會(huì)將ListView中的所有子音頻文件整合為一個(gè)音頻文件。
圖2 系統(tǒng)界面原型
系統(tǒng)初始化界面后,對(duì)界面中各個(gè)按鈕進(jìn)行監(jiān)聽(tīng)。采用MediaRecorder錄音類(lèi)進(jìn)行音頻錄制,采用MediaPlayer播放類(lèi)播放錄音。將每次暫停錄音得到的子錄音音頻文件暫時(shí)保存在SD卡根目錄下。系統(tǒng)主要設(shè)置了4個(gè)類(lèi),分別為MainActivity類(lèi)、MyDetailsDialog類(lèi)、MyAdapter類(lèi)和MergeAMR類(lèi)。MainActivity類(lèi)主要是對(duì)系統(tǒng)主界面的控制,程序從這個(gè)類(lèi)開(kāi)始;MyAdapter類(lèi)是用于處理ListView的適配器;MyDetailsDialog類(lèi)則用于暫停錄音時(shí)的添加標(biāo)簽功能;MergeAMR類(lèi)主要處理ListView中子音頻文件,將其合成為一個(gè)音頻文件。系統(tǒng)的關(guān)鍵抽象如圖3所示。
圖3 關(guān)鍵抽象
本錄音系統(tǒng)采用release版本的Android開(kāi)發(fā)環(huán)境“adt-bundle-windows-x86_64-20140702”,以及 Redmi4真機(jī)進(jìn)行調(diào)試,MIUI版本為9.2。
系統(tǒng)調(diào)試界面如下圖所示,圖4是初始時(shí)進(jìn)入系統(tǒng)的界面,此時(shí)只有“開(kāi)始錄音”按鈕可以用。當(dāng)點(diǎn)擊“開(kāi)始錄音”按鈕后,系統(tǒng)進(jìn)入錄音狀態(tài),錄音狀態(tài)界面如圖5所示。點(diǎn)擊“暫停錄音”按鈕則彈出輸入標(biāo)簽信息的界面,添加標(biāo)簽界面如圖6所示。圖7展示已經(jīng)添加了兩個(gè)子音頻的錄音列表。
系統(tǒng)實(shí)現(xiàn)過(guò)程中,主要有2個(gè)關(guān)鍵難點(diǎn),分別是ListView列表的監(jiān)控和子音頻文件的合成?,F(xiàn)分別就這2個(gè)方面的具體實(shí)現(xiàn)進(jìn)行闡述。
(1)ListView列表的按鈕監(jiān)控
在類(lèi)MyAdapter中定一個(gè)CallBack接口,該接口用于回調(diào)按鈕點(diǎn)擊事件到MainActivity類(lèi),MainActivity類(lèi)中實(shí)現(xiàn)CallBack接口的click()方法,當(dāng)ListView中有按鈕按下時(shí),系統(tǒng)調(diào)用click()方法,實(shí)現(xiàn)子音頻播放和刪除。
定義的接口CallBack的代碼實(shí)現(xiàn)如下,接口中只有一個(gè)click方法:
設(shè)置監(jiān)聽(tīng)代碼如下,其中holder為每個(gè)ListView子Item對(duì)應(yīng)的子類(lèi),該類(lèi)在MyAdapter中定義。
當(dāng)有ListView中有按鈕按下時(shí),在onclick()方法里調(diào)用click()方法。
MainActivity類(lèi)中click()方法代碼如下。
(2)子音頻的合成
由于音頻在錄制的時(shí)候采用的是AMR-NB格式,而AMR文件前6個(gè)字節(jié)為文件頭,要進(jìn)行子音頻文件的拼接,只需要在拼接過(guò)程中去掉除第一段音頻以外所有音頻的前6個(gè)字節(jié)即可。新建文件fileMerge.amr作為拼接后的文件,以文件流的形式依次讀入已有amr文件,代碼片斷如下:
其中out是文件輸出流,b是字節(jié)數(shù)組,inpu_i是第i個(gè)已存在的音頻文件。從圖8中可以看出,保存的文件fileMerge.amr大小是其他子音頻文件之和。
圖4 初始界面
圖5 錄音狀態(tài)
圖6 添加標(biāo)簽
圖7 已添加兩個(gè)子音頻列表
圖8 系統(tǒng)內(nèi)存中 保存的音頻文件
整個(gè)系統(tǒng)按照如下的順序,在完成模塊代碼進(jìn)行對(duì)應(yīng)性能測(cè)試:首先在完成錄音與播放代碼實(shí)現(xiàn)后,反復(fù)對(duì)錄音以及播放功能測(cè)試,以完成正常錄音功能;其次,實(shí)現(xiàn)每暫停錄音一次則保存錄音的子音頻文件在ListView中的代碼,對(duì)列表中的子音頻文件進(jìn)行播放和刪除,確保每段音頻能正常播放或刪除;第三為每次子音頻設(shè)置標(biāo)簽代碼實(shí)現(xiàn)后,測(cè)試添加的標(biāo)簽?zāi)苷o@示;最后完成所有子音頻的合并的代碼后,反復(fù)測(cè)試停止錄音功能并播放合成后的音頻文件,以確保錄音能正常合成并且合并后的音頻能夠正常播放。經(jīng)過(guò)調(diào)試運(yùn)行,系統(tǒng)完成了“開(kāi)始錄音”、“暫停錄音”、“添加標(biāo)簽”、“繼續(xù)錄音”、“播放全部錄音”和“停止錄音”等基本功能。并且Android工程導(dǎo)出的apk安裝包能在Android 6.0.1以下版本的真機(jī)中正常運(yùn)行。
Android平臺(tái)下的時(shí)間戳錄音系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),通過(guò)增加書(shū)簽功能使在進(jìn)行長(zhǎng)時(shí)間錄音時(shí),對(duì)錄音進(jìn)行分段,以便更好地對(duì)音頻進(jìn)行更加精準(zhǔn)的操作,彌補(bǔ)了當(dāng)前移動(dòng)系統(tǒng)自帶錄音軟件的不足。系統(tǒng)還存在一些可以改進(jìn)的地方,首先本系統(tǒng)是僅僅實(shí)現(xiàn)了基本功能,并且系統(tǒng)實(shí)現(xiàn)的界面不夠美觀;其次在于音頻文件存放在SD卡根目錄下占用系統(tǒng)內(nèi)存,這些都有待進(jìn)一步完善。最后,為系統(tǒng)設(shè)計(jì)不同主題、云存儲(chǔ)讀寫(xiě)錄音文件[3]等功能,可以提高系統(tǒng)的實(shí)際應(yīng)用價(jià)值。