




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Android的語(yǔ)音采集系統(tǒng)設(shè)計(jì)目錄TOC\o"1-2"\h\u51701緒論 1269401.1課題研究背景及意義 226981.2課題研究現(xiàn)狀和發(fā)展趨勢(shì) 232781.3本文研究的主要內(nèi)容 3156561.4文章組織結(jié)構(gòu) 42460第六章:總結(jié)。本章總結(jié)開(kāi)發(fā)此應(yīng)用的過(guò)程和最后的收獲。 4171242關(guān)鍵技術(shù)分析 4219072.1Android平臺(tái)簡(jiǎn)介 4211602.1.1Android的基本框架 5107352.1.2Android應(yīng)用程序結(jié)構(gòu) 6119542.2Android開(kāi)發(fā)環(huán)境 6240803系統(tǒng)的需求分析與概要設(shè)計(jì) 7160533.1系統(tǒng)的需求分析 865233.2系統(tǒng)的概要設(shè)計(jì) 8307703.2.1登錄模塊 880333.2.2錄音模塊 9282973.2.3后期處理模塊 10181494系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 11288084.1登錄模塊設(shè)計(jì) 1238204.1.1登錄界面 1219274.1.2注冊(cè)界面 14290094.1.3忘記密碼界面 1631554.2錄音模塊 18308794.2.1錄音預(yù)選界面 18267374.2.2錄音界面 22298974.3后期處理模塊 2737164.3.1設(shè)置界面 28200894.3.2播放界面 29191634.3.3介紹界面 32137955應(yīng)用測(cè)試 33218726總結(jié) 361緒論伴隨著科技的進(jìn)步,手機(jī)在最近十幾年迎來(lái)了飛躍性的發(fā)展,地位也從傳統(tǒng)的通信工具轉(zhuǎn)變?yōu)楝F(xiàn)在無(wú)論是生活還是工作都離不開(kāi)的萬(wàn)能工具。如今若是沒(méi)有手機(jī),人們?cè)谏鐣?huì)上將寸步難行。隨著開(kāi)發(fā)者對(duì)手機(jī)的研究越來(lái)越深入,現(xiàn)在的手機(jī)已經(jīng)可以利用強(qiáng)大的擴(kuò)展能力代替許多設(shè)備,錄音設(shè)備就是其中之一。而在這一替代過(guò)程中,Android平臺(tái)起到了至關(guān)重要的作用。依托其系統(tǒng)合理的人機(jī)交互設(shè)計(jì)和無(wú)可替代的開(kāi)放性,Android平臺(tái)踴躍出了大量的精品應(yīng)用并解決了現(xiàn)實(shí)生活中的許多痛點(diǎn)。本文就將對(duì)語(yǔ)音輸入這一功能進(jìn)行研究。1.1課題研究背景及意義隨著社會(huì)的發(fā)展,語(yǔ)音輸入設(shè)備有了越來(lái)越多的受眾。一些群體是文字工作者,一些群體是需要記錄會(huì)議內(nèi)容或是課堂內(nèi)容,還有一些群體是影視行業(yè)和廣播行業(yè)從業(yè)者。在聲音輸入裝置出現(xiàn)之前,手寫(xiě)筆記占據(jù)了主導(dǎo)力量,但是,這種記筆記的方式效率很低,某些場(chǎng)合并不適合手寫(xiě)記錄。為了解決這一痛點(diǎn),各大科技廠商開(kāi)始發(fā)力,相繼推出了許多種類的語(yǔ)音輸入設(shè)備,其中最為典型的語(yǔ)音輸入設(shè)備便是錄音筆。但語(yǔ)音輸入設(shè)備大部分的使用場(chǎng)景是出門(mén)在外,有時(shí)攜帶并不方便,因此利用手機(jī)的麥克風(fēng)進(jìn)行語(yǔ)音輸入能夠減少出行時(shí)的負(fù)擔(dān)。近幾年,手機(jī)的飛速發(fā)展是全社會(huì)有目共睹的,輕巧便攜,功能繁多都是它的優(yōu)點(diǎn),人們因此漸漸習(xí)慣有手機(jī)時(shí)刻陪伴的日子。目前全世界應(yīng)用范圍最廣泛的手機(jī)操作系統(tǒng)當(dāng)屬谷歌公司開(kāi)發(fā)的Android系統(tǒng)和蘋(píng)果公司開(kāi)發(fā)的IOS系統(tǒng),這兩種系統(tǒng)在近十年里不斷地升級(jí)迭代,可以下載的應(yīng)用程序種類越來(lái)越多,大大豐富了智能手機(jī)的使用功能。雖然Android系統(tǒng)和IOS系統(tǒng)共同占據(jù)了全球絕大多數(shù)的手機(jī)操作系統(tǒng)市場(chǎng)[1],可是Android系統(tǒng)的使用率要遠(yuǎn)遠(yuǎn)高于IOS系統(tǒng)。國(guó)外調(diào)查機(jī)構(gòu)Kantar曾發(fā)布過(guò)數(shù)據(jù)統(tǒng)計(jì),Android系統(tǒng)的使用比例高達(dá)80.7%,占據(jù)了中國(guó)地區(qū)的大部分手機(jī)操作系統(tǒng)市場(chǎng)[2]。隨著人工智能產(chǎn)業(yè)的蓬勃興起,許多相關(guān)研究已經(jīng)從實(shí)驗(yàn)室走向了人們的日常生活并且滲透到全社會(huì)的各個(gè)領(lǐng)域中,引起了全方位的變革[3]。其中,語(yǔ)音識(shí)別作為人機(jī)交互的入口對(duì)人工智能的發(fā)展和應(yīng)用起到了很大的作用[4]。也正因?yàn)榇?,各大科技公司?zhēng)相開(kāi)發(fā)智能物聯(lián)網(wǎng)設(shè)備??紤]到語(yǔ)音的便攜性這一特征,智能語(yǔ)音交互設(shè)備已成為人工智能物聯(lián)網(wǎng)中連接人與機(jī)器之間的主要設(shè)備[5]。然而作為語(yǔ)音識(shí)別技術(shù)的基石,語(yǔ)音輸入技術(shù)還有很大的進(jìn)步空間,比如噪聲告饒比較強(qiáng)或者是在遠(yuǎn)場(chǎng)情況下,語(yǔ)音識(shí)別的錯(cuò)誤率還不容樂(lè)觀[6]。因此,語(yǔ)音輸入技術(shù)仍舊需要我們?nèi)ド钊胙芯?。通過(guò)使用語(yǔ)音輸入APP,可以更加充分的利用手機(jī)內(nèi)方便快捷的應(yīng)用,減少出門(mén)負(fù)擔(dān),大大提高日常學(xué)習(xí)和工作的效率,此外更加豐富的功能也能滿足各行各業(yè)的使用者,服務(wù)范圍更廣,針對(duì)性更強(qiáng),是未來(lái)語(yǔ)音輸入系統(tǒng)的發(fā)展方向。1.2課題研究現(xiàn)狀和發(fā)展趨勢(shì)語(yǔ)音采集設(shè)備最早的雛形是留聲機(jī),由愛(ài)迪生于1877年創(chuàng)造出來(lái)。盡管能夠?qū)崿F(xiàn)語(yǔ)音采集功能,但是它的采集質(zhì)量很低。真正讓錄音機(jī)普及開(kāi)來(lái)并廣泛運(yùn)用在生活中的是1935年德國(guó)科學(xué)家老耶瑪發(fā)明的磁帶,不過(guò)這時(shí)的磁帶還不是現(xiàn)在所熟知的類型。若干年后,馬文發(fā)現(xiàn)氧化鐵粉可以作為磁性顆粒,于是他將氧化鐵粉末與亮漆混合,再涂到紙帶和紙盤(pán)上,等到涂料風(fēng)干后就將其放入磁場(chǎng)中,使所有的顆粒按照一定的方向排列起來(lái),這便是現(xiàn)代磁帶的雛形。由于技術(shù)尚不成熟,第二次世界大戰(zhàn)后的十幾年,語(yǔ)音采集設(shè)備都是模擬錄音機(jī)。模擬錄音機(jī)雖然有著親切且逼真的聲音[3],但是由于磁帶技術(shù)本身具有的缺點(diǎn),錄入的聲音仍然與聲源有著很大的差異,于是數(shù)字錄音技術(shù)應(yīng)運(yùn)而生。20世紀(jì)60年代,PCM(PulseCodeModulation)數(shù)字錄音技術(shù)出現(xiàn)[4],其在當(dāng)時(shí)領(lǐng)先的信噪比和動(dòng)態(tài)范圍獲得了國(guó)際上的認(rèn)可,此后各大公司也對(duì)這項(xiàng)技術(shù)進(jìn)行改造。到了80年代,基于PCM原理的DAT(DigitalAudioTapeRecorder即數(shù)字音頻磁帶錄音機(jī))問(wèn)世,運(yùn)用DAT原理制作的磁帶在存放數(shù)字音頻可以用最小的空間取得最大的資料容量[5],因此DAT在專業(yè)領(lǐng)域備受追捧[6]并迅速占領(lǐng)市場(chǎng)。90年代初,無(wú)磁帶錄音技術(shù)開(kāi)始興起,以松下、索尼、三洋為主導(dǎo)的日本公司研發(fā)出了專門(mén)適用于數(shù)字錄音技術(shù)的CD規(guī)格的磁光盤(pán)[7]。利用計(jì)算機(jī)系統(tǒng)進(jìn)行處理與存儲(chǔ)并配合上磁光盤(pán)系統(tǒng),數(shù)字錄音系統(tǒng)依靠其隨機(jī)存取能力、信號(hào)處理能力強(qiáng)的優(yōu)點(diǎn)達(dá)到了一個(gè)全新的高度。到了21世紀(jì)初,借助于計(jì)算機(jī)技術(shù)的快速發(fā)展,數(shù)字錄音也迎來(lái)了前所未有的革命。以電腦為中心的音頻處理系統(tǒng)極大的減少了錄音制品的設(shè)備投入[8],降低了錄音系統(tǒng)的總成本,因而現(xiàn)在的錄音市場(chǎng)已經(jīng)基本被數(shù)字錄音占領(lǐng)。現(xiàn)如今的專業(yè)語(yǔ)音采集領(lǐng)域由數(shù)字錄音系統(tǒng)構(gòu)成,包括中心處理設(shè)備,與拾音設(shè)備[9]。為了使錄音的播放質(zhì)量盡可能的高,數(shù)字錄音系統(tǒng)可以有效地識(shí)別噪音并將其過(guò)濾,此外數(shù)字錄音系統(tǒng)還能解決音頻中的雜音、串音等問(wèn)題[10]。盡管這種系統(tǒng)語(yǔ)音采集質(zhì)量很高,但依然沒(méi)有做到便攜性,直到錄音筆的出現(xiàn),才打破這一局面。錄音筆利用自帶的麥克風(fēng)對(duì)模擬信號(hào)進(jìn)行采樣編碼,再進(jìn)行數(shù)模轉(zhuǎn)換器轉(zhuǎn)化為數(shù)字信號(hào),最后通過(guò)一定的壓縮存儲(chǔ)到本地。如今的錄音筆雖然在不停的迭代升級(jí),添加了許多功能,但也同時(shí)犧牲了體積和重量,攜帶起來(lái)依然不是很方便。近幾年,隨著手機(jī)系統(tǒng)的不斷升級(jí)和手機(jī)處理器的高速發(fā)展,智能手機(jī)已經(jīng)與人們的日常生活和工作息息相關(guān),其中,最為廣泛應(yīng)用的手機(jī)系統(tǒng)便是Android系統(tǒng),其在全球占據(jù)了手機(jī)操作系統(tǒng)市場(chǎng)75%的市場(chǎng)份額[11]。盡管已經(jīng)有語(yǔ)音采集的應(yīng)用,但同質(zhì)化十分嚴(yán)重,和人們的預(yù)期存在較大的差距,比如語(yǔ)音采集軟件的隱私性和安全性不夠重視,語(yǔ)音采集可以選擇的格式單一等。因此語(yǔ)音采集應(yīng)用的研究還有很大的潛力等待挖掘,如今的Android應(yīng)用市場(chǎng)依舊缺乏更為專業(yè)的語(yǔ)音采集APP。1.3本文研究的主要內(nèi)容通過(guò)對(duì)市面上現(xiàn)有的語(yǔ)音采集類APP進(jìn)行深入地研究分析,本文主要在改造市面上現(xiàn)存的此類APP做出進(jìn)一步的深入研究,并添加更多功能。研究工作主要圍繞以下幾方面展開(kāi):首先,在進(jìn)行語(yǔ)音采集操作之前,要進(jìn)行登錄操作,新用戶需要點(diǎn)擊注冊(cè)用戶選項(xiàng)進(jìn)入注冊(cè)界面,忘記密碼的用戶也可進(jìn)行重新注冊(cè)的操作。其次,在登錄完成后,進(jìn)入錄音選項(xiàng)界面,該界面包含音頻格式選擇,音頻采樣率選擇和音頻位寬選擇。然后,用戶便可以進(jìn)行下一個(gè)界面——錄音界面。進(jìn)行錄音操作后,軟件可以通過(guò)JavaAPI來(lái)實(shí)現(xiàn)錄音操作后音頻文件的保存。最后,用戶在保存界面中可以回放之前的錄音,對(duì)不滿意的錄音結(jié)果可以進(jìn)行刪除操作。1.4文章組織結(jié)構(gòu)文章結(jié)構(gòu)如下:第一章:緒論。本章節(jié)詳細(xì)地介紹了該課題的研究背景,著重介紹了語(yǔ)音采集技術(shù)的發(fā)展歷程、研究現(xiàn)狀以及發(fā)展方向,然后指出了本文的研究方向,并列明文章的整體組織結(jié)構(gòu)。第二章:關(guān)鍵技術(shù)分析。本章通過(guò)介紹Android平臺(tái),Android的系統(tǒng)架構(gòu)、Android的應(yīng)用程序結(jié)構(gòu)以及Android的開(kāi)發(fā)環(huán)境探討應(yīng)用建設(shè)的可能性第三章:系統(tǒng)的需求分析與概要設(shè)計(jì)。本章介紹了系統(tǒng)在現(xiàn)實(shí)生活中的使用以及各個(gè)模塊的設(shè)計(jì)流程。第四章:系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)。本章詳細(xì)講解了每個(gè)界面的使用流程、界面設(shè)計(jì)以及實(shí)現(xiàn)界面內(nèi)所有功能的代碼。第五章:應(yīng)用測(cè)試。本章介紹了這款應(yīng)用通過(guò)AVD在不同機(jī)型和不同版本的API下的測(cè)試結(jié)果,測(cè)試分為界面顯示測(cè)試和功能測(cè)試。第六章:總結(jié)。本章總結(jié)開(kāi)發(fā)此應(yīng)用的過(guò)程和最后的收獲。2關(guān)鍵技術(shù)分析本課題的語(yǔ)音采集技術(shù)采用了Android開(kāi)源系統(tǒng)技術(shù),利用Java語(yǔ)言和AndroidStudio開(kāi)發(fā)工具進(jìn)行編寫(xiě)開(kāi)發(fā),可以讓用戶體驗(yàn)到具有保密性和專業(yè)性的語(yǔ)音采集過(guò)程。在該語(yǔ)音采集應(yīng)用程序的開(kāi)發(fā)過(guò)程中,涉及到了Android、Java、AndroidSDK等相關(guān)理論及技術(shù),本章將對(duì)上述知識(shí)進(jìn)行簡(jiǎn)要的闡述。2.1Android平臺(tái)簡(jiǎn)介Android是由由谷歌公司推出的智能手機(jī)操作系統(tǒng)。它于2007年11月推出,世界上第一款商用Android設(shè)備于2008年9月推出。Android是一個(gè)基于修改版本的Linux內(nèi)核和其他開(kāi)源軟件的移動(dòng)操作系統(tǒng),同其他操作系統(tǒng)一樣,Android采用了分層的系統(tǒng)架構(gòu)。2.1.1Android的基本框架Android作為一個(gè)開(kāi)源的移動(dòng)設(shè)備操作系統(tǒng),它的軟件系統(tǒng)結(jié)構(gòu)如下圖所示,由ApplicationFramework(應(yīng)用框架)、BinderIPCProxies(Binder進(jìn)程間通信機(jī)制代理)、AndroidSystemServices(Android系統(tǒng)服務(wù))、HAL(硬件抽象層)和LinuxKernel(Linux內(nèi)核)組成。圖2-1Android的軟件系統(tǒng)結(jié)構(gòu)ApplicationFramework,又稱應(yīng)用框架。應(yīng)用框架是最常被開(kāi)發(fā)者使用的結(jié)構(gòu)。作為一個(gè)硬件開(kāi)發(fā)者,最熟悉的便是開(kāi)發(fā)者API,因?yàn)樵S多這一類的API都能夠直接映射到底層HAL接口,并可以提供與實(shí)現(xiàn)驅(qū)動(dòng)程序相關(guān)的實(shí)用信息。BinderIPCProxies。Binder進(jìn)程間通信(IPC)機(jī)制允許應(yīng)用框架跨越進(jìn)程邊界并調(diào)用Android系統(tǒng)服務(wù)代碼,這使得高級(jí)框架API能與Android系統(tǒng)服務(wù)進(jìn)行交互。Binder能夠滿足Android需要建立一套新的IPC機(jī)制來(lái)滿足系統(tǒng)對(duì)通信方式、傳輸性能和安全性的要求。AndroidSystemServices,又稱Android系統(tǒng)服務(wù)。Android系統(tǒng)服務(wù)是專注于特定功能的模塊化組件。應(yīng)用框架API所提供的功能可與系統(tǒng)服務(wù)通信,以訪問(wèn)底層硬件。Android包含兩組服務(wù):“系統(tǒng)系統(tǒng)”和“媒體服務(wù)”。HAL,又稱硬件抽象層。HAL可定義一個(gè)標(biāo)準(zhǔn)接口以供硬件供應(yīng)商實(shí)現(xiàn),這可以讓Android忽略較低級(jí)別的驅(qū)動(dòng)程序?qū)崿F(xiàn)。HAL實(shí)現(xiàn)會(huì)被封裝成模塊,并會(huì)由Android系統(tǒng)適時(shí)地加載。LinuxKernel,又稱Linux內(nèi)核。Android使用的Linux內(nèi)核版本包含一些特殊的補(bǔ)充功能,例如低內(nèi)存終止守護(hù)進(jìn)程、喚醒鎖定等非常重要的其他功能。2.1.2Android應(yīng)用程序結(jié)構(gòu)Android系統(tǒng)是由四大組件構(gòu)成,它們分別是Activity(活動(dòng))、Service(服務(wù))、BroadcastReceiver(廣播接收器)和ContentProvider(內(nèi)容提供器)[12]。Activity是這四個(gè)組件中最基本的一種,在使用一個(gè)Android應(yīng)用時(shí),一切能夠被看到和使用的功能都是放在Activity中的。Service與Activity則截然相反,用戶無(wú)法直觀的通過(guò)使用一款A(yù)ndroid應(yīng)用感受到它的存在,但它會(huì)在后臺(tái)一直默默地運(yùn)行著,哪怕是退出了這款應(yīng)用,它也依舊在后臺(tái)繼續(xù)運(yùn)行著。BroadcastReceiver負(fù)責(zé)接收Android系統(tǒng)和其他Android應(yīng)用之間的廣播信息。廣播信息并非日常生活中的定義,而是作為可跨應(yīng)用和普通用戶流之外的消息傳遞系統(tǒng)。廣播接收器并不直接顯示在用戶界面中,而是在有事發(fā)生時(shí)通過(guò)創(chuàng)建狀態(tài)欄來(lái)提醒用戶。ContentProvider提供了應(yīng)用程序之間的數(shù)據(jù)共享服務(wù)。從一個(gè)應(yīng)用程序讀取另一個(gè)應(yīng)用程序中的數(shù)據(jù)并非直接讀取,而是需要通過(guò)內(nèi)容提供器來(lái)實(shí)現(xiàn),實(shí)現(xiàn)的方式是由叫做內(nèi)容解析器的對(duì)象來(lái)調(diào)用內(nèi)容提供器提供的調(diào)用方法。2.2Android開(kāi)發(fā)環(huán)境要想順利開(kāi)發(fā)出理想的Android應(yīng)用,首先就要在電腦上搭建適配Android開(kāi)發(fā)的環(huán)境??傮w來(lái)說(shuō)分為三步:第一步:安裝JDK。由于Android應(yīng)用使用Java進(jìn)行編寫(xiě),那么第一步要先將Java的運(yùn)行環(huán)境搭建好,JDK作為Java語(yǔ)言的軟件開(kāi)發(fā)工具包,安裝它是項(xiàng)目啟動(dòng)的前提。由于Android開(kāi)發(fā)需要JDK8及以上的版本,這里本文選擇安裝JDK8。第二步:安裝AndroidStudio。AndroidStudio是谷歌官方推出的Android操作系統(tǒng)集成開(kāi)發(fā)環(huán)境。它是EclipseAndroid開(kāi)發(fā)工具的替代品。之所以說(shuō)替代品是因?yàn)锳ndroidStudio提供了集成的Android開(kāi)發(fā)工具用于開(kāi)發(fā)和調(diào)試,相較于Eclipse更加方便使用,功能也更加強(qiáng)大,因此本文選擇了當(dāng)下最流行的AndroidStudio進(jìn)行開(kāi)發(fā)。第三步:安裝AndroidSDK。AndroidSDK是谷歌官方提供的Android開(kāi)發(fā)工具包,在開(kāi)發(fā)Android程序時(shí),開(kāi)發(fā)者需要通過(guò)引入該工具包,來(lái)使用Android相關(guān)的API。在成功安裝AndroidStudio后會(huì)自動(dòng)提示下載并安裝AndroidSDK。3系統(tǒng)的需求分析與概要設(shè)計(jì)隨著智能手機(jī)的普及,無(wú)論是Android還是IOS操作系統(tǒng),都自帶了錄音軟件。然而這些軟件僅僅只能完成最基本的錄音功能,很難做到語(yǔ)音采集功能。基于提升專業(yè)性的需求,本文選擇在傳統(tǒng)的錄音軟件上添加更為專業(yè)的功能,使之成為出色的語(yǔ)音采集應(yīng)用。3.1系統(tǒng)的需求分析根據(jù)前期調(diào)研了解到,大部分的錄音軟件由于采樣率和音頻位寬達(dá)不到高清錄音的要求,很多用戶轉(zhuǎn)而選擇錄音筆作為語(yǔ)音采集設(shè)備。此外由于手機(jī)錄音軟件只要解鎖手機(jī),人人都可以直接打開(kāi),所以隱私性難以得到保障。為了能夠提高錄音的音頻質(zhì)量和應(yīng)用最基本的保密性,本文著重以下三方面的軟件研究。其一,通過(guò)選擇更高的采樣率和音頻位寬來(lái)實(shí)現(xiàn)錄音質(zhì)量的提升;其二,通過(guò)增加錄音文件格式的選項(xiàng)來(lái)滿足更多人的使用習(xí)慣,擴(kuò)大應(yīng)用使用群體;其三,通過(guò)增加登陸界面,使用帳號(hào)密碼登錄來(lái)提高軟件的保密性。3.2系統(tǒng)的概要設(shè)計(jì)設(shè)計(jì)一款A(yù)ndroid應(yīng)用,最高效的方式就是按照模塊進(jìn)行設(shè)計(jì)。綜合考慮之后,最終按照使用流程決定設(shè)計(jì)三個(gè)模塊。第一個(gè)模塊稱為登錄模塊,第二個(gè)模塊稱為錄音模塊,第三個(gè)模塊稱為后期處理模塊。程序的使用流程如下圖所示:圖3-1程序使用流程圖其中,用戶注冊(cè)、登錄認(rèn)證歸為登錄模塊,錄音預(yù)選和進(jìn)行錄音歸為錄音模塊,回放錄音歸為后期處理模塊。下面將詳細(xì)介紹各個(gè)模塊的使用思路和界面設(shè)計(jì)思路。3.2.1登錄模塊用戶從Android設(shè)備的程序菜單中點(diǎn)擊該應(yīng)用圖標(biāo)后進(jìn)入到的就是登錄模塊。登錄模塊共設(shè)計(jì)了兩個(gè)界面,一個(gè)是登錄界面,一個(gè)是用戶注冊(cè)界面。第一次使用該應(yīng)用時(shí)需要先進(jìn)行用戶注冊(cè),點(diǎn)擊屏幕上的注冊(cè)選項(xiàng)即可進(jìn)入注冊(cè)界面。注冊(cè)界面共有四個(gè)文本框需要填寫(xiě),首先是登錄使用的用戶名,其次是登錄密碼,然后是密保問(wèn)題,最后是密保答案。填寫(xiě)完畢后點(diǎn)擊確定返回登錄界面進(jìn)行登錄操作。已經(jīng)注冊(cè)過(guò)的用戶直接填寫(xiě)賬號(hào)密碼進(jìn)行登錄即可。具體流程如圖所示。圖3-2登錄模塊流程圖3.2.2錄音模塊用戶登錄成功后會(huì)從登錄模塊進(jìn)入錄音模塊。錄音模塊的第一個(gè)界面是錄音預(yù)選界面。這個(gè)界面要選擇接下來(lái)的錄音環(huán)節(jié)所需格式、采樣率和位寬。音頻格式共有三種,分別為PCM、MP3和WAV。音頻采樣率共三種,分別為8kHZ、16kHZ和44.1kHZ。音頻位寬共兩種,分別是8bit和16bit。在完成這三個(gè)選項(xiàng)后,點(diǎn)擊開(kāi)始錄音進(jìn)入錄音界面。錄音界面頂部有聲音大小的顯示,單位為dB(分貝),下方共兩個(gè)按鈕,分別是開(kāi)始錄音和保存錄音。點(diǎn)擊開(kāi)始錄音按鈕進(jìn)行錄音操作。錄音時(shí)開(kāi)始錄音按鈕會(huì)轉(zhuǎn)變?yōu)闀和?,點(diǎn)擊暫停可以停止錄音,同時(shí)暫停按鈕再次轉(zhuǎn)變?yōu)殚_(kāi)始錄音按鈕。想要繼續(xù)錄音,點(diǎn)擊開(kāi)始錄音即可。錄音結(jié)束后點(diǎn)擊保存錄音,之前的錄音文件便會(huì)保存在本地文件夾中。若無(wú)需暫停,也可以在開(kāi)始錄音后直接點(diǎn)擊保存錄音??紤]到用戶完成這次錄音后可能會(huì)繼續(xù)錄音,所以保存錄音后返回的界面是錄音預(yù)選模塊。具體的流程圖如下圖所示。圖3-3錄音模塊流程圖3.2.3后期處理模塊完成錄音后,用戶重新進(jìn)入了錄音預(yù)選界面,此時(shí)界面右上角有一個(gè)設(shè)置選項(xiàng),點(diǎn)擊該選項(xiàng)進(jìn)入設(shè)置界面。在設(shè)置界面內(nèi)一共有三個(gè)按鈕,分別是錄音記錄,關(guān)于我們和退出當(dāng)前賬號(hào)。在設(shè)置界面點(diǎn)擊錄音記錄按鈕進(jìn)入錄音記錄界面。該界面從上到下羅列了所有之前錄入的聲音文件。錄音文件命名從“錄音文件1”開(kāi)始,按照錄音次序依次改變文件名稱最后的數(shù)字。例如第二次錄音保存的聲音文件叫做“錄音文件2”并以此類推。若不想保留某個(gè)錄音文件,該文件最右側(cè)有刪除按鈕,點(diǎn)擊即可刪除。在設(shè)置界面點(diǎn)擊關(guān)于我們按鈕,顯示此應(yīng)用的相關(guān)信息,例如開(kāi)發(fā)時(shí)間,開(kāi)發(fā)版本等。在設(shè)置界面最下方設(shè)計(jì)了能夠退出當(dāng)前已經(jīng)登錄的賬號(hào)的按鈕,點(diǎn)擊該按鈕便可以返回到登錄界面使用其他的賬號(hào)密碼重新登錄,完成退出賬號(hào)的操作。具體流程如圖所示。圖3-4后期處理模塊流程圖4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)本章將分別介紹三個(gè)模塊——登錄模塊、錄音模塊和后期處理模塊的詳細(xì)設(shè)計(jì),包含界面布局,設(shè)計(jì)代碼等。4.1登錄模塊設(shè)計(jì)登錄模塊共設(shè)計(jì)了三個(gè)界面,一個(gè)是登錄界面,一個(gè)是注冊(cè)界面,一個(gè)是忘記密碼界面。下面將分別介紹三個(gè)界面的詳細(xì)設(shè)計(jì)。4.1.1登錄界面作為打開(kāi)應(yīng)用的初始界面,登錄界面應(yīng)當(dāng)簡(jiǎn)潔有序,一目了然,因此本文在登錄界面僅設(shè)置了登錄必要的控件。首先是用戶名和用戶密碼的輸入,在沒(méi)有輸入操作時(shí),控件會(huì)顯示“請(qǐng)輸入用戶名”和“請(qǐng)輸入密碼”,當(dāng)用戶進(jìn)行輸入時(shí),控件會(huì)將字體隱藏。用戶輸入完成后點(diǎn)擊登錄按鈕,若用戶名和密碼正確即可進(jìn)入下一個(gè)界面,若輸入錯(cuò)誤,底部會(huì)有“賬號(hào)密碼錯(cuò)誤”的提示。登錄按鈕下方有注冊(cè)選項(xiàng)和忘記密碼選項(xiàng),點(diǎn)擊即可進(jìn)入指定界面。登錄界面布局如圖所示。圖4-1登錄界面布局登錄界面布局采用的LinearLayout,在布局中添加了ImageView、EditText、TextView和AppCompatButton。其中,AppCompatButton直接繼承Button,有著比Button更多的特性,例如增加了水波紋特效、可以使英文自動(dòng)轉(zhuǎn)換大寫(xiě)等。界面中的用戶名圖標(biāo)和密碼圖標(biāo)使用的ImageView控件,輸入賬號(hào)和密碼使用EditText控件實(shí)現(xiàn),提示“請(qǐng)輸入用戶名”和“請(qǐng)輸入密碼”使用了EditText中的hint操作。注冊(cè)操作則是使用的TextView控件實(shí)現(xiàn)。進(jìn)入登錄界面后,使用findViewById()來(lái)獲取輸入的賬號(hào)和密碼。使用setOnClickListener()設(shè)置一個(gè)監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)是否點(diǎn)擊注冊(cè),一旦點(diǎn)擊,使用startActivity()打開(kāi)activity_regist.xml布局文件創(chuàng)建的注冊(cè)界面。使用setOnClickListener()在“登錄”按鈕設(shè)置一個(gè)監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)是否點(diǎn)擊該按鈕,一旦點(diǎn)擊,首先將用戶名保存在一個(gè)String類型的變量,然后將密碼保存在另一個(gè)String類型的變量中。如果密碼正確,使用startActivity()打開(kāi)activity_main.xml布局文件創(chuàng)建的錄音預(yù)選界面,如果密碼錯(cuò)誤,使用ToastUtils.showToast()提示“賬號(hào)密碼錯(cuò)誤”。部分代碼如下文所示。publicclassLoginActivityextendsBaseActivity{privateAppCompatEditTextacet_1,acet_2;privateAppCompatButtonacbtn_click;privateUserInfoDaouserInfoDao;privateTitleWidgettitle;@Override……inintView();userInfoDao=TheApplication.instance.getDaoSession().getUserInfoDao();}privatevoidinintView(){……findViewById(R.id.tv_register).setOnClickListener(newView.OnClickListener(){@Override……}});findViewById(R.id.tv_forget_password).setOnClickListener(newView.OnClickListener(){……}});acbtn_click.setOnClickListener(newView.OnClickListener(){@Override……if(userInfo!=null){……startActivity(intent);LoginActivity.this.finish();}else{ToastUtils.showToast(LoginActivity.this,"賬號(hào)密碼錯(cuò)誤");}}});}}4.1.2注冊(cè)界面注冊(cè)界面共有四個(gè)文本框需要填寫(xiě),分別是登錄、密碼、密保問(wèn)題和密保問(wèn)題答案。登錄文本框填寫(xiě)登錄使用的用戶名,密碼文本框填寫(xiě)登錄使用的密碼,密保問(wèn)題文本框輸入以后可能需要找回密碼時(shí)使用的密保問(wèn)題,密保問(wèn)題答案文本框輸入以后可能需要找回密碼時(shí)回答密保問(wèn)題的答案。點(diǎn)擊確定按鈕即可將以上輸入內(nèi)容保存進(jìn)數(shù)據(jù)庫(kù)中并在應(yīng)用底部提示“注冊(cè)成功”。如果出現(xiàn)沒(méi)有輸入所有文本框的情況便點(diǎn)擊了確定按鈕的情況,應(yīng)用底部會(huì)出現(xiàn)提示“請(qǐng)?zhí)顚?xiě)完整信息”,如果出現(xiàn)用戶名已經(jīng)被注冊(cè)過(guò)的情況,應(yīng)用底部會(huì)出現(xiàn)提示“該用戶已存在”。注冊(cè)界面布局如圖所示。圖4-2注冊(cè)界面布局注冊(cè)界面布局采用了LinearLayout,在布局中添加了TitleWidget、AppCompatEditText和AppCompatButton。其中,TitleWidget用于在程序頂部顯示“注冊(cè)”用來(lái)提示該界面的屬性。登錄選項(xiàng)、密碼選項(xiàng)、密保問(wèn)題選項(xiàng)和密保問(wèn)題答案選項(xiàng)使用AppCompatEditText控件實(shí)現(xiàn)。AppCompatTextView相較于TextView有著更加豐富的功能,例如給背景和icon動(dòng)態(tài)著色的功能,自動(dòng)適配字體尺寸的效果等。選項(xiàng)中的提示字符如登陸界面一樣,采用AppCompatEditText中的hint操作來(lái)實(shí)現(xiàn)。確定按鈕使用AppCompatButton控件實(shí)現(xiàn)。進(jìn)入注冊(cè)界面后,首先需要填寫(xiě)相關(guān)選項(xiàng),使用findViewById()獲取輸入內(nèi)容。輸入完畢后點(diǎn)擊確定按鈕,利用setOnClickListener()在“確定”按鈕設(shè)置一個(gè)監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)是否點(diǎn)擊該按鈕,首先將各個(gè)信息保存在提前定義的對(duì)應(yīng)的String變量下。如果信息輸入不全,應(yīng)用底部會(huì)使用ToastUtils.showToast()提示“請(qǐng)?zhí)顚?xiě)完整信息”。如果用戶名已經(jīng)被注冊(cè)過(guò),應(yīng)用底部會(huì)提示"該用戶已存在"。如果信息完整并且用戶名未被注冊(cè),首先創(chuàng)建一個(gè)新的UserInfo類型的變量。UserInfo是已經(jīng)定義好的一個(gè)類,專門(mén)用來(lái)保存用戶信息。將之前定義的String變量保存到UserInfo類型變量,然后在應(yīng)用底部提示“注冊(cè)成功”。部分代碼下文所示。publicclassRegestActivityextendsBaseActivity{privateAppCompatEditTextacet_1,acet_2,acet_3,acet_4;privateAppCompatButtonacbtn_click;privateUserInfoDaouserInfoDao;privateStringroll="111";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){……inintView();}privatevoidinintView(){……acbtn_click=findViewById(R.id.acbtn_click);acbtn_click.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){……if(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd)||TextUtils.isEmpty(phone)||TextUtils.isEmpty(daan)){ToastUtils.showToast(RegestActivity.this,"請(qǐng)?zhí)顚?xiě)完整信息");}else{……if(userInfo!=null){ToastUtils.showToast(RegestActivity.this,"該用戶已存在");}else{……ToastUtils.showToast(RegestActivity.this,"注冊(cè)成功");RegestActivity.this.finish();}}}});}4.1.3忘記密碼界面忘記密碼界面的總體布局和注冊(cè)用戶大致相同,一樣是登錄文本框、密碼文本框、密保問(wèn)題文本框和密保問(wèn)題答案文本框需要填寫(xiě),不一樣的是頂部標(biāo)題改為“修改密碼”,此外密碼文本框輸入的是全新的密碼作為修改后的密碼。在完成所有正確輸入后,點(diǎn)擊確定按鈕即可更新新密碼,并在應(yīng)用底部提示“更新完成”。注冊(cè)界面布局采用了LinearLayout,在布局中添加了TitleWidget、AppCompatEditText和AppCompatButton。除了TitleWidget中顯示的標(biāo)題變成了“修改密碼”,其他部分與注冊(cè)界面完全相同,此處不做過(guò)多贅述。具體布局如下文所示。圖4-3忘記密碼界面布局進(jìn)入忘記密碼界面后,程序的運(yùn)行邏輯與注冊(cè)界面基本一致,僅有一點(diǎn)不同。在成功修改密碼后應(yīng)用底部會(huì)提示“更新完成”。具體代碼如圖所示。publicclassUpdataRegestActivityextendsBaseActivity{privateAppCompatEditTextacet_1,acet_2,acet_3,acet_4;privateAppCompatButtonacbtn_click;privateUserInfoDaouserInfoDao;privateStringroll="111";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_update);userInfoDao=TheApplication.instance.getDaoSession().getUserInfoDao();inintView();}privatevoidinintView(){……acbtn_click.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){……if(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd)||TextUtils.isEmpty(phone)||TextUtils.isEmpty(daan)){ToastUtils.showToast(UpdataRegestActivity.this,"請(qǐng)?zhí)顚?xiě)完整信息");}else{……if(userInfo!=null){……ToastUtils.showToast(UpdataRegestActivity.this,"更新完成");UpdataRegestActivity.this.finish();}else{ToastUtils.showToast(UpdataRegestActivity.this,"該用戶名和問(wèn)題不匹配");}}}});}}4.2錄音模塊錄音模塊共設(shè)計(jì)了兩個(gè)界面,一個(gè)是錄音預(yù)選界面,一個(gè)是錄音界面。下面將分別介紹兩個(gè)界面的詳細(xì)設(shè)計(jì)。4.2.1錄音預(yù)選界面錄音預(yù)選界面用來(lái)選擇錄音的音頻格式、音頻采樣率和音頻位寬,共有三個(gè)單選按鈕需要選擇。從上至下第一部分是選擇音頻格式,默認(rèn)選項(xiàng)為WAV格式,此外還有PCM格式和MP3格式。這里的PCM格式無(wú)法直接通過(guò)手機(jī)進(jìn)行播放,但是可以先保存在手機(jī)內(nèi),再拷貝到電腦進(jìn)行音頻編輯。第二部分是音頻采樣率,默認(rèn)選項(xiàng)為16000Hz,此外還有8000Hz和441000Hz。第三部分是音頻位寬選擇,默認(rèn)選項(xiàng)是16Bit,此外還有8Bit選項(xiàng)。在完成所有選項(xiàng)后,點(diǎn)擊開(kāi)始錄音進(jìn)入錄音界面。錄音預(yù)選界面右上角還設(shè)有“設(shè)置”按鈕,點(diǎn)擊后進(jìn)入后期處理模塊的設(shè)置界面。界面布局如圖所示。圖4-4錄音預(yù)選界面布局錄音預(yù)選界面布局采用的LinearLayout,在布局中添加了TitleWidget、TextView、RadioButton、和Button控件。其中,頂部正中標(biāo)題“錄音預(yù)選”和最右側(cè)“設(shè)置”采用TitleWidget控件實(shí)現(xiàn)。界面中所有的選項(xiàng)類型,例如“請(qǐng)選擇音頻格式”等,使用TextView控件實(shí)現(xiàn)。所有的單選選項(xiàng),例如“.pcm”等,使用RadioButton控件實(shí)現(xiàn)。進(jìn)入錄音預(yù)選界面后,首先創(chuàng)建TitleWidget類型變量和RadioGroup類型變量。TitleWidget變量用來(lái)自定義該界面的標(biāo)題,RadioGroup變量用來(lái)保存用戶對(duì)單選選項(xiàng)做出的選擇,包括音頻格式、音頻采樣率和音頻位寬。然后設(shè)置默認(rèn)選項(xiàng):音頻格式選擇WAV格式、音頻采樣率選擇16000Hz、音頻位寬選擇16Bit。進(jìn)行完這些初始化后,下一步就是利用findViewById()將用戶在該界面上的選項(xiàng)輸入到之前定義的這些變量中。接下來(lái)就是使用setOnClickListener()在“開(kāi)始錄音”按鈕設(shè)置一個(gè)監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)是否點(diǎn)擊該按鈕,一旦點(diǎn)擊,先打開(kāi)下一個(gè)界面——開(kāi)始錄音界面,之后將需要傳遞的值,即三個(gè)單選選項(xiàng)的值,附加到Intent對(duì)象上以備后面打開(kāi)的模塊使用。最后就是用setRightMiv1Listener()對(duì)標(biāo)題右側(cè)的“設(shè)置”進(jìn)行監(jiān)聽(tīng),一旦點(diǎn)擊,便會(huì)進(jìn)入后期處理模塊的初始界面。具體代碼如下文所示。publicclassMainActivityextendsBaseActivity{privateTitleWidgettitle_12;RadioGrouprgAudioFormat;RadioGrouprgSimpleRate;RadioGrouptbEncoding;RecordManagerrecordManager=RecordManager.getInstance();publicStringdata="3";publicintvoice=16000;publicintvoice12=AudioFormat.ENCODING_PCM_16BIT;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){……inintView();}privatevoidinintView(){……initEvent();findViewById(R.id.llyt_start).setOnClickListener(newView.OnClickListener(){……);}});title_12.setRightMiv1Listener(newTitleWidget.onRightMiv1Listener(){@OverridepublicvoidonRightMiv1(ViewparamView){startActivity(newIntent(MainActivity.this,ChanPinDetailActivity.class));}});LinearLayoutManagermanager=newLinearLayoutManager(this);}privatevoidinitEvent(){……publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){switch(checkedId){caseR.id.rbPcm:data="0";break;caseR.id.rbMp3:data="1";break;caseR.id.rbWav:data="2";break;default:break;}}});……publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){switch(checkedId){caseR.id.rb8K:voice=8000;break;caseR.id.rb16K:voice=16000;break;caseR.id.rb44K:voice=44100;break;default:break;}}});…….publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){switch(checkedId){caseR.id.rb8Bit:voice12=AudioFormat.ENCODING_PCM_8BIT;break;caseR.id.rb16Bit:voice12=AudioFormat.ENCODING_PCM_16BIT;break;default:break;}}});}}4.2.2錄音界面在錄音界面,用戶能夠進(jìn)行開(kāi)始錄音、暫停錄音和保存錄音操作。界面頂部是“開(kāi)始錄音”的標(biāo)題。緊貼頁(yè)面頂部的下方設(shè)有狀態(tài)欄和檢測(cè)錄音聲音大小的模塊,初始狀態(tài)為“空閑中”,聲音大小默認(rèn)值,當(dāng)開(kāi)始錄音時(shí),狀態(tài)欄顯示“錄音中”,聲音大小模塊將錄音聲音的分貝數(shù)顯示出來(lái)。暫停時(shí),狀態(tài)欄改為“暫停中”,聲音大小模塊顯示暫停前錄音的分貝數(shù),再次點(diǎn)擊開(kāi)始,兩個(gè)模塊都將恢復(fù)為開(kāi)始錄音時(shí)的顯示狀態(tài)。錄音界面中間部位有兩個(gè)按鈕,分別是“開(kāi)始錄音”和“保存錄音”。點(diǎn)擊“開(kāi)始錄音”按鈕即可進(jìn)行錄音操作,并且此按鈕的字樣將變?yōu)椤皶和!?。在進(jìn)行錄音操作時(shí),點(diǎn)擊“保存錄音”按鈕便可將錄音文件保存在本地。錄音界面布局采用了LinearLayout,在布局中添加了TitleWidget、TextView、AudioView和Button控件。界面頂部標(biāo)題“開(kāi)始錄音”采用TitleWidget控件實(shí)現(xiàn)。錄音狀態(tài)和聲音的分貝數(shù)使用TextView控件實(shí)現(xiàn)。進(jìn)行錄音時(shí)為了增加專業(yè)性,在下方添加了AudioView控件,用來(lái)顯示聲音的波形。“開(kāi)始錄音”和“保存錄音”采用Button控件實(shí)現(xiàn)。界面布局如圖所示。圖4-5開(kāi)始錄音界面布局(空閑狀態(tài))圖4-6開(kāi)始錄音界面布局(錄音狀態(tài))圖4-7開(kāi)始錄音界面布局(暫停狀態(tài))進(jìn)入錄音界面后,首先創(chuàng)建Button變量、TextView變量、TextView變量和AudioView變量。然后使用findViewById()來(lái)引用布局文件中的控件。接下來(lái)調(diào)用兩個(gè)函數(shù):initAudioView()和initRecord()函數(shù)。initAudioView()函數(shù)使用setOnClickListener()檢測(cè)“開(kāi)始錄音”按鈕和“保存錄音”按鈕是否點(diǎn)擊。一旦檢測(cè)到點(diǎn)擊“開(kāi)始錄音”按鈕,首先改變錄音狀態(tài)顯示,然后將“保存錄音”按鈕改為“暫停”按鈕,這些操作都由setText()實(shí)現(xiàn)。若檢測(cè)到點(diǎn)擊“保存錄音”按鈕將執(zhí)行停止錄音的操作。initRecord()函數(shù)相較于initAidio()函數(shù)更加復(fù)雜,這里只進(jìn)行簡(jiǎn)單介紹。首先initRecord()函數(shù)將會(huì)調(diào)用錄音預(yù)選界面中附加到Intent對(duì)象上的值,根據(jù)Intent上保存值匹配相應(yīng)的音頻格式、音頻采樣率和音頻位寬進(jìn)行錄音設(shè)置,然后調(diào)用initRecordEvent()函數(shù)。initRecordEvent()能進(jìn)行很多操作,第一點(diǎn)是能夠根據(jù)錄音狀態(tài)改變界面上的狀態(tài)值,例如當(dāng)檢測(cè)到錄音狀態(tài)時(shí),界面上的狀態(tài)值由“空閑中”或者“暫停中”變?yōu)椤颁浺糁小?。第二點(diǎn)是實(shí)時(shí)檢測(cè)聲音大小分貝值并顯示在界面。第三點(diǎn)是保存聲音文件,這里使用的Android官方包提供的File類。第四點(diǎn),當(dāng)保存成功后,使用Toast在應(yīng)用底部提示“保存成功”。部分代碼如下文所示。publicclassStartLuYinActivityextendsBaseActivity{privateTitleWidgettitle;privateBackBeanDaobackBeanDao;ButtonbtRecord;ButtonbtStop;TextViewtvState;TextViewtvSoundSize;AudioViewaudioView;RecordManagerrecordManager=RecordManager.getInstance();privateStringfilePath="";@SuppressLint("WrongViewCast")@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.actiivty_xiaofei_detail);btRecord=findViewById(R.id.btRecord);btStop=findViewById(R.id.btStop);tvState=findViewById(R.id.tvState);tvSoundSize=findViewById(R.id.tvSoundSize);audioView=findViewById(R.id.audioView);backBeanDao=TheApplication.instance.getDaoSession().getBackBeanDao();initAudioView();initRecord();}MainActivityactivity;@OverrideprotectedvoidonResume(){…...}privatevoidinitAudioView(){tvState.setVisibility(View.VISIBLE);……}});btStop.setOnClickListener(newView.OnClickListener(){……}});findViewById(R.id.btSave).setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){recordManager.stop();}});}privatevoidinitRecord(){……initRecordEvent();}privatevoidinitRecordEvent(){recordManager.setRecordStateListener(newRecordStateListener(){@OverridepublicvoidonStateChange(RecordHelper.RecordStatestate){switch(state){casePAUSE:tvState.setText("暫停中");break;……default:break;}}@OverridepublicvoidonError(Stringerror){ ……}});recordManager.setRecordSoundSizeListener(newRecordSoundSizeListener(){@OverridepublicvoidonSoundSize(intsoundSize){tvSoundSize.setText(String.format(Locale.getDefault(),"聲音大?。?sdb",soundSize));}});recordManager.setRecordResultListener(newRecordResultListener(){@OverridepublicvoidonResult(Fileresult){……StartLuYinActivity.this.finish();}});recordManager.setRecordFftDataListener(newRecordFftDataListener(){@OverridepublicvoidonFftData(byte[]data){audioView.setWaveData(data);}});}publicvoidgetData(){}privatebooleanisStart=false;privatebooleanisPause=false;privatevoiddoStop(){……}privatevoiddoPlay(){……}}}4.3后期處理模塊后期處理模塊共設(shè)計(jì)了三個(gè)界面,分別是設(shè)置界面、播放界面和介紹界面。下面將分別介紹兩三個(gè)界面的詳細(xì)設(shè)計(jì)。4.3.1設(shè)置界面在設(shè)置界面,用戶可以查看錄音記錄和應(yīng)用介紹,還可以退出當(dāng)前登錄的賬號(hào)。整個(gè)界面由三個(gè)按鈕組成,從上往下第一個(gè)按鈕是“錄音記錄”,點(diǎn)擊進(jìn)入錄音記錄界面。第二個(gè)按鈕是“關(guān)于我們”,點(diǎn)擊進(jìn)入介紹界面。第三個(gè)按鈕是“退出當(dāng)前賬號(hào)”,點(diǎn)擊即可退出當(dāng)前登錄的賬號(hào)并返回登陸界面。前兩個(gè)按鈕在應(yīng)用頂部,第三個(gè)按鈕在應(yīng)用底部。設(shè)置界面布局采用的LinearLayout,在布局中添加了TitleWidget和Button。TitleWidget負(fù)責(zé)應(yīng)用頂部的標(biāo)題“設(shè)置”,Button負(fù)責(zé)界面里的三個(gè)按鈕。界面布局如圖所示。圖4-8設(shè)置界面布局設(shè)置界面的功能較為單一,點(diǎn)擊不同的按鈕進(jìn)入不同的界面。使用setOnClickListener()對(duì)三個(gè)按鈕進(jìn)行監(jiān)聽(tīng),一旦檢測(cè)到點(diǎn)擊按鈕的操作,便用startActivity()打開(kāi)對(duì)應(yīng)的界面。部分代碼如下文所示。publicclassChanPinDetailActivityextendsBaseActivity{privateAppCompatEditTextacet_1,acet_2,acet_3;privateBackBeanqiYeBean;privateAppCompatButtonacbtn_click;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.actiivty_chanpin_detail);findViewById(R.id.btn_login_out).setOnClickListener(newView.OnClickListener(){……});findViewById(R.id.btn_shuoming).setOnClickListener(newView.OnClickListener(){……});findViewById(R.id.btn_add).setOnClickListener(newView.OnClickListener(){……});}}4.3.2播放界面在播放界面,用戶可以播放錄音或者刪除不滿意的錄音。錄音文件按照錄音順序從上往下排列并統(tǒng)一按照“錄音文件”加上錄音順序編號(hào)的格式進(jìn)行命名。播放界面共有兩個(gè)布局,一個(gè)是主界面布局,一個(gè)是錄音文件布局。主界面布局。主界面布局采用的是LinearLayout,在布局中添加了TitleWidget和RecyclerView。標(biāo)題的“錄音記錄”使用TitleWidget實(shí)現(xiàn)。界面的上下滑動(dòng)使用組件RecyclerView實(shí)現(xiàn)。錄音文件布局采用RelativeLayout,在布局中添加了TestView和ImageView。TestView用來(lái)實(shí)現(xiàn)錄音文件名稱的顯示,ImageView用來(lái)實(shí)現(xiàn)刪除按鈕的顯示。界面布局如圖所示。圖4-9播放界面布局進(jìn)入播放界面,首先使用setContentView()加載主界面,在使用findViewById()對(duì)應(yīng)到布局中的特定模塊后,開(kāi)始加載錄音文件布局。使用setText()按照前文描述的方式添加錄音文件,使用setOnClickListener()監(jiān)聽(tīng)是否點(diǎn)擊刪除按鈕,一旦觸發(fā)點(diǎn)擊操作,使用delete()刪除指定文件。播放功能選擇Android官方包提供的MediaPlayer類實(shí)現(xiàn)。部分代碼如下文所示。publicclassAddChanPinActivityextendsBaseActivity{privateAppCompatEditTextacet_1,acet_2,acet_3;privateTitleWidgettitle_12;privateBackBeanDaobackBeanDao;privateList<BackBean>list=newArrayList<>();privateCommonAdapter<BackBean>adapter;privateRecyclerViewrv;@Override……backBeanDao=TheApplication.instance.getDaoSession().getBackBeanDao();title_12=findViewById(R.id.title_12);rv=findViewById(R.id.rv);rv.setLayoutManager(newLinearLayoutManager(this));……@OverridepublicvoidonClick(Viewv){backBeanDao.delete(backBean);inintData();}adapter.setOnItemClickListener(newMultiItemTypeAdapter.OnItemClickListener(){@OverridepublicvoidonItemClick(Viewview,RecyclerView.ViewHolderholder,intposition){if(mediaPlayer.isPlaying()){mediaPlayer.reset();initPlayerData(list.get(position).getName());}else{initPlayerData(list.get(position).getName());}}@OverridepublicbooleanonItemLongClick(Viewview,RecyclerView.ViewHolderholder,intposition){returnfalse;}});rv.setAdapter(adapter);inintData();}privateMediaPlayermediaPlayer=newMediaPlayer();@OverrideprotectedvoidonDestroy(){……}privateIjkMediaPlayermMediaPlayer;privatevoidinitPlayerData(StringmAudioFilePath){try{……@OverridepublicvoidonCompletion(IMediaPlayermp){……
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度物業(yè)賠償業(yè)主公共設(shè)施損壞協(xié)議書(shū)
- 二零二五年度動(dòng)車(chē)組客車(chē)車(chē)身定制買(mǎi)賣(mài)合同
- 二零二五年度國(guó)有企業(yè)股權(quán)轉(zhuǎn)讓合同終止執(zhí)行書(shū)
- 2025年度科技園區(qū)土地租賃協(xié)議書(shū)模板
- 二零二五年度工地施工期間應(yīng)急預(yù)案與響應(yīng)協(xié)議
- 二零二五年度車(chē)庫(kù)買(mǎi)賣(mài)合同附新能源汽車(chē)充電服務(wù)合同
- 2025年度明星參與綜藝節(jié)目票房對(duì)賭協(xié)議合同
- 2025年廣東年貨運(yùn)從業(yè)資格證考試試題題庫(kù)
- 2025年珠海道路運(yùn)輸從業(yè)資格考試下載
- 出國(guó)游學(xué)夏令營(yíng)合同
- 浙江省金華市2024年初中畢業(yè)升學(xué)適應(yīng)性檢測(cè) 科學(xué)試題卷
- 2024年六年級(jí)語(yǔ)文下冊(cè)全冊(cè)單元教材分析
- 延長(zhǎng)石油招聘筆試試題
- DB-T 29-22-2024 天津市住宅設(shè)計(jì)標(biāo)準(zhǔn)
- 2024年贛州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案解析
- DL∕T 5209-2020 高清版 混凝土壩安全監(jiān)測(cè)資料整編規(guī)程
- 2024年山東省濰坊市中考數(shù)學(xué)真題試題(含答案及解析)
- 開(kāi)票稅點(diǎn)自動(dòng)計(jì)算器
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案
- 醫(yī)療器械質(zhì)量安全風(fēng)險(xiǎn)會(huì)商管理制度
- 降低用藥錯(cuò)誤發(fā)生率
評(píng)論
0/150
提交評(píng)論