對(duì)于一部嵌入式設(shè)備來說,除了基礎(chǔ)功能(通話、短信)外,最重要的可能就是多媒體了。那么一個(gè)最簡(jiǎn)單的問題,什么是多媒體呢? 從字面上來看,這個(gè)術(shù)語對(duì)應(yīng)的英文單詞是“Multi-Media”,直譯過來就是多媒體。
簡(jiǎn)單的說,多媒體是各種形式的媒體(比如文本、音頻、視頻、圖片、動(dòng)畫等等)的組合。
媒體篇將講解如何在你的應(yīng)用中增加視頻,音頻以及圖片處理的相關(guān)技術(shù)。
第一節(jié) 基礎(chǔ)概念 在講解如何使用Android提供的API進(jìn)行錄音之前,先介紹一些音頻相關(guān)的基本概念。
聲音(sound)是由物體振動(dòng)產(chǎn)生的聲波。 聲音通過介質(zhì)(空氣或固體、液體)傳播,然后被人或動(dòng)物聽覺器官所感知,最初發(fā)出振動(dòng)(震動(dòng))的物體叫聲源。
在計(jì)算機(jī)領(lǐng)域有兩個(gè)常用的術(shù)語:模擬音頻信號(hào)和數(shù)字音頻信號(hào)。
- 模擬音頻信號(hào)(Analog Signal):指自然界中的各種聲音,我們通常又把模擬信號(hào)稱為連續(xù)信號(hào),它在一定的時(shí)間范圍內(nèi)可以有無限多個(gè)不同的取值。- 數(shù)字音頻信號(hào)(Digital Signal):指保存在計(jì)算機(jī)中的聲音。由于模擬音頻信號(hào)在一個(gè)時(shí)間范圍內(nèi)有無限多個(gè)取值,所以我們無法把自然界聲音無損的保存到計(jì)算機(jī)中(計(jì)算機(jī)硬盤的存儲(chǔ)容量有限),只能對(duì)聲音進(jìn)行采樣處理,采樣出來的聲音只需要達(dá)到人耳分辨不出來的水平就可以了。
在電腦上錄音的本質(zhì)就是把自然界中的模擬聲音信號(hào)轉(zhuǎn)換成計(jì)算機(jī)所能表示的數(shù)字音頻信號(hào)。 反之,在播放時(shí)則是把數(shù)字信號(hào)還原成模擬音頻信號(hào)輸出。
音頻的錄制、存儲(chǔ)與回放 Multi-Media并不是專門為計(jì)算機(jī)而生的——只不過后者的出現(xiàn)極大地推動(dòng)了它的發(fā)展。那么和傳統(tǒng)的多媒體相比,計(jì)算機(jī)領(lǐng)域的多媒體系統(tǒng),會(huì)有哪些區(qū)別呢? 一個(gè)很顯然的問題是,我們?nèi)绾螌⒏鞣N媒體源數(shù)字化呢?比如,早期的音頻信息是存儲(chǔ)在錄音帶中的,以模擬信號(hào)的形式存儲(chǔ)。而到了計(jì)算機(jī)時(shí)代,這些音頻數(shù)據(jù)必須通過一定的處理手段才可能存儲(chǔ)到設(shè)備中,這是我們?cè)跀?shù)字化時(shí)代會(huì)遇到的一個(gè)常見問題。下面這個(gè)圖很好地描述了音頻從錄制到播放的一系列操作流程:
錄制過程 首先,音頻采集設(shè)備(比如Microphone麥克風(fēng))捕獲聲音信息,初始數(shù)據(jù)是模擬信號(hào)。 然后,使用模-數(shù)轉(zhuǎn)換器(Analog to Digital Converter)將模擬信號(hào)處理成計(jì)算機(jī)能接受的二進(jìn)制數(shù)據(jù),即數(shù)字信號(hào)。 隨后數(shù)據(jù)根據(jù)需求進(jìn)行必要的渲染處理,比如音效調(diào)整、過濾等等。 此時(shí),處理后的音頻數(shù)據(jù)理論上已經(jīng)可以存儲(chǔ)到計(jì)算機(jī)設(shè)備中了,比如硬盤、USB設(shè)備等等。不過由于這時(shí)的音頻數(shù)據(jù)體積相對(duì)龐大,不利于保存和傳輸,通常還會(huì)對(duì)其進(jìn)行壓縮處理。比如我們常見的mp3音樂,實(shí)際上就是對(duì)原始數(shù)據(jù)采用相應(yīng)的壓縮算法后得到的。壓縮過程根據(jù)采樣率、位深等因素的不同,最終得到的音頻文件可能會(huì)有一定程度的失真, 另外,音視頻的編解碼既可以由純軟件完成,也同樣可以借助于專門的硬件芯片來完成。
回放過程 回放過程總體上是錄制過程的逆向操作。 首先,從存儲(chǔ)設(shè)備中取出相關(guān)文件,并根據(jù)錄制過程采用的編碼方式進(jìn)行相應(yīng)的解碼。即將壓縮后的數(shù)據(jù)還原成未壓縮之前的狀態(tài)。 然后,音頻系統(tǒng)為這一播放實(shí)例選定最終匹配的音頻回放設(shè)備。 接著,解碼后的數(shù)據(jù)經(jīng)過音頻系統(tǒng)設(shè)計(jì)的路徑傳輸。 接著,音頻數(shù)據(jù)信號(hào)通過數(shù)模轉(zhuǎn)換器(Digital to Analog Converter)變換成模擬信號(hào)。 最后,模擬信號(hào)經(jīng)過回放設(shè)備,還原出原始聲音。
第二節(jié) 音頻采集 聲音信號(hào)是一種模擬信號(hào),計(jì)算機(jī)要對(duì)它進(jìn)行處理,必須將它轉(zhuǎn)換為數(shù)字聲音信號(hào),即用二進(jìn)制數(shù)字的編碼形式來表示聲音。將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),并存放在存儲(chǔ)器中的過程,稱為數(shù)字音頻采集。
將模擬音頻信號(hào)轉(zhuǎn)換為數(shù)字音頻信號(hào)通常要經(jīng)過:抽樣、量化,編碼三個(gè)步驟。
抽樣 抽樣也稱為采樣。由于聲音其實(shí)是一種能量波,因此也有頻率和振幅的特征,頻率對(duì)應(yīng)于時(shí)間軸線,振幅對(duì)應(yīng)于電平軸線。波是無限光滑的,弦線可以看成由無數(shù)點(diǎn)組成,由于存儲(chǔ)空間是相對(duì)有限的,數(shù)字編碼過程中,必須對(duì)弦線的點(diǎn)進(jìn)行采樣。 采樣頻率,也稱為采樣速度或者采樣率,定義了每秒從連續(xù)信號(hào)中提取并組成離散信號(hào)的采樣個(gè)數(shù),它用赫茲(Hz)來表示。采樣頻率的倒數(shù)是采樣周期或者叫作采樣時(shí)間,它是采樣之間的時(shí)間間隔。通俗的講采樣頻率是指計(jì)算機(jī)每秒鐘采集多少個(gè)聲音樣本,是描述聲音文件的音質(zhì)、音調(diào),衡量聲卡、聲音文件的質(zhì)量標(biāo)準(zhǔn)。 采樣頻率必須至少是信號(hào)中最大頻率分量頻率的兩倍,否則就不能從信號(hào)采樣中恢復(fù)原始信號(hào)。如果信號(hào)的帶寬是100Hz,那么為了避免混疊現(xiàn)象采樣頻率必須大于200Hz。人耳能夠感覺到的最高頻率為20kHz(1kHz = 1000Hz),太高的頻率就分辨不出好壞來,因此要滿足人耳的聽覺要求,則需要至少每秒進(jìn)行40k次采樣,用40kHz表達(dá),這個(gè)40kHz就是采樣率。
擴(kuò)展問題:既然20kHz已經(jīng)分辨不清楚,為什么還有48kHz的采樣率?
量化 量化就是把采樣得到的樣本(模擬量)轉(zhuǎn)換為離散值(數(shù)字量)表示。因此量化的過程有時(shí)也被稱為A/D轉(zhuǎn)換(模數(shù)轉(zhuǎn)換)。量化后的樣本是用二進(jìn)制數(shù)表示的,二進(jìn)制數(shù)位的多少反映了度量聲音波形幅度的精度,稱為量化精度。例如,若每個(gè)聲音樣本用16位表示,則聲音樣本的取值范圍是0~65535,精度是1/65536。若每個(gè)聲音樣本用8位表示,則聲音樣本的取值范圍是0~255,精度是1/256。 量化精度越高,聲音的質(zhì)量越好,需要的存儲(chǔ)空間也越多。CD標(biāo)準(zhǔn)的量化精度是16Bit,DVD標(biāo)準(zhǔn)的量化精度是24Bit。
編碼 根據(jù)采樣率和量化精度可以得知,相對(duì)自然界的信號(hào),音頻編碼最多只能做到無限接近,至少目前的技術(shù)只能這樣了,相對(duì)自然界的信號(hào),任何數(shù)字音頻編碼方案都是有損的,因?yàn)闊o法完全還原。在計(jì)算機(jī)應(yīng)用中,能夠達(dá)到最高保真水平的就是PCM編碼,被廣泛用于素材保存及音樂欣賞,CD、DVD以及我們常見的WAV文件中均有應(yīng)用。因此,PCM約定俗成了無損編碼,因?yàn)?code>PCM代表了數(shù)字音頻中最佳的保真水準(zhǔn),并不意味著PCM就能夠確保信號(hào)絕對(duì)保真,PCM也只能做到最大程度的無限接近。我們而習(xí)慣性的把MP3列入有損音頻編碼范疇,是相對(duì)PCM編碼的。強(qiáng)調(diào)編碼的相對(duì)性的有損和無損,是為了告訴大家,要做到真正的無損是困難的,就像用數(shù)字去表達(dá)圓周率,不管精度多高,也只是無限接近,而不是真正等于圓周率的值。 經(jīng)過采樣和量化后的聲音信號(hào)已經(jīng)是數(shù)字形式了,但是為了便于計(jì)算機(jī)的存儲(chǔ)、處理、傳輸,還必須按照一定的要求進(jìn)行數(shù)據(jù)壓縮和編碼。
為了更形象的解釋為什么要對(duì)量化后的音樂進(jìn)行壓縮和編碼,先介紹兩個(gè)有關(guān)音頻編碼很重要的術(shù)語:比特率和聲道。
比特率 比特率是音頻文件每秒占據(jù)的字節(jié)數(shù)(比特?cái)?shù)),當(dāng)你在使用比較低的比特率時(shí),你將會(huì)丟失聲音質(zhì)量。 比特率規(guī)定使用“比特每秒”(bit/s或bps)為單位,ps指的是/s,即每秒。 經(jīng)常和國際單位制詞頭關(guān)聯(lián)在一起,如“千”(kbit/s或kbps),“兆”(Mbit/s或Mbps),“吉”(Gbit/s或Gbps) 和“太”(Tbit/s或Tbps)。 CD中的數(shù)字音樂比特率為1411.2kbps(也就是記錄1秒鐘的cd音樂,需要1411.2×1000比特的存儲(chǔ)空間)。
聲道 一個(gè)聲道(AudioChannel),簡(jiǎn)單來講就代表了一種獨(dú)立的音頻信號(hào),所以雙聲道理論上就是兩種獨(dú)立音頻信號(hào)的混合。具體而言,如果我們?cè)阡浿坡曇魰r(shí)在不同空間位置放置兩套采集設(shè)備(或者一套設(shè)備多個(gè)采集頭),就可以錄制兩個(gè)聲道的音頻數(shù)據(jù)了。后期對(duì)采集到的聲音進(jìn)行回放時(shí),通過與錄制時(shí)相同數(shù)量的外放揚(yáng)聲器來分別播放各聲道的音頻,就可以盡可能還原出錄制現(xiàn)場(chǎng)的真實(shí)聲音了。
聲道的數(shù)量發(fā)展經(jīng)歷了幾個(gè)重要階段,分別是:
- Monaural(單聲道) - 早期的音頻錄制是單聲道的,它只記錄一種音源,所以在處理上相對(duì)簡(jiǎn)單。播放時(shí)理論上也只要一個(gè)揚(yáng)聲器就可以了——即便有多個(gè)揚(yáng)聲器,它們的信號(hào)源也是一樣的,起不到很好的效果- Stereophonic(立體聲) - 之所以稱為立體聲,是因?yàn)槿藗兛梢愿惺艿铰曇羲a(chǎn)生的空間感:大自然中的聲音就是立體的,比如辦公室里鍵盤敲擊聲,馬路上汽車鳴笛,人們的說話聲等等。
那么這些聲音為什么會(huì)產(chǎn)生立體感呢? 我們知道,當(dāng)音源發(fā)聲后(比如你右前方有人在講話),音頻信號(hào)將分別先后到達(dá)人類的雙耳。在這個(gè)場(chǎng)景中,是先傳遞到右耳然后左耳,并且右邊的聲音比左邊稍強(qiáng)。這種細(xì)微的差別通過大腦處理后,我們就可以判斷出聲源的方位了。 這個(gè)原理現(xiàn)在被應(yīng)用到了多種場(chǎng)合。在音樂會(huì)的錄制現(xiàn)場(chǎng),如果我們只使用單聲道采集,那么后期回放時(shí)所有的音樂器材都會(huì)從一個(gè)點(diǎn)出來;反之,如果能把現(xiàn)場(chǎng)各方位的聲音單獨(dú)記錄下來,并在播放時(shí)模擬當(dāng)時(shí)的場(chǎng)景,那么就可以營造出音樂會(huì)的逼真氛圍。 最基本的立體聲是兩聲道:左聲道、右聲道。還有更多聲道的立體聲,也即環(huán)繞聲,其中包括主要的左右聲道,還有環(huán)繞的副聲道左右,中置,單獨(dú)低音等5-7個(gè)聲道。
為什么要壓縮? 要算一個(gè)PCM音頻流的碼率是一件很輕松的事情,公式為:采樣率×采樣大小(即量化精度)×聲道數(shù)。 如一個(gè)采樣率為44.1KHz,采樣大小為16bit,雙聲道的PCM編碼的WAV文件,它的數(shù)據(jù)速率則為:
44.1 K × 16 × 2 = 1411.2 Kbps
然后再將碼率除以8,就可以得到這個(gè)WAV的數(shù)據(jù)速率,即176.4KB/s。 這表示存儲(chǔ)一秒鐘采樣率為44.1KHz,采樣大小為16bit,雙聲道的PCM編碼的音頻信號(hào),需要176.4KB的空間,1分鐘則約為10.34M。 顯然,這對(duì)大部分用戶是不可接受的,尤其是喜歡在電腦上聽音樂的朋友,要降低磁盤占用,只有兩種方法:
- 降低采樣指標(biāo)。- 壓縮。
降低指標(biāo)是不可取的,因此專家們研發(fā)了各種壓縮方案。 由于用途和針對(duì)的目標(biāo)市場(chǎng)不一樣,各種音頻壓縮編碼所達(dá)到的音質(zhì)和壓縮比都不一樣。有一點(diǎn)是可以肯定的,它們都?jí)嚎s過。
第三節(jié) 開始錄音 在Android中有兩種方法可以實(shí)現(xiàn)錄音功能,使用MediaRecorder類和AudioRecorder類:
- MediaRecorder類十分簡(jiǎn)單好用,但是靈活性不足。- AudioRecorder提供了更多的自由度,但是使用稍微會(huì)有點(diǎn)復(fù)雜,它們各自有對(duì)應(yīng)的應(yīng)用場(chǎng)景。
具體區(qū)別:
首先,錄音時(shí)輸出的數(shù)據(jù)不同。
- MediaRecorder錄制出來的是一個(gè)音頻文件。該文件是經(jīng)過壓縮后的,即在錄音之前需要為其設(shè)置編碼方式等一系列參數(shù),設(shè)置完畢后MediaRecorder類會(huì)依據(jù)參數(shù)值自動(dòng)完成聲音的收集、編碼、壓縮等步驟。- AudioRecorder直接捕獲到的是未經(jīng)過任何處理的原始音頻流,開發(fā)者可以實(shí)時(shí)隨意處理音頻流。
然后,對(duì)聲音操作的自由度不同。
- MediaRecorder將錄音的所有步驟都封裝起來,只會(huì)輸出一個(gè)聲音文件。- AudioRecorder可以實(shí)現(xiàn)邊錄邊播(實(shí)現(xiàn)即時(shí)聊天功能)以及對(duì)音頻的實(shí)時(shí)處理,如降噪,合成(如“會(huì)說話的湯姆貓”)。 - 優(yōu)點(diǎn):語音的實(shí)時(shí)處理,可以用代碼實(shí)現(xiàn)各種音頻的封裝。 - 缺點(diǎn):輸出是PCM語音數(shù)據(jù),如果保存成音頻文件,是不能夠直接播放的,必須另寫代碼對(duì)PCM數(shù)據(jù)編碼和壓縮。
MediaRecorder 使用MediaRecorder類從設(shè)備捕捉音頻的大體步驟:
1、創(chuàng)建一個(gè)新實(shí)例android.media.MediaRecorder。2、使用MediaRecorder.setAudioSource()設(shè)置音頻源。3、使用MediaRecorder.setOutputFormat()設(shè)置輸出文件格式。4、使用MediaRecorder.setOutputFile()設(shè)置輸出文件名。5、使用MediaRecorder.setAudioEncoder()設(shè)置音頻編碼器。6、在MediaRecorder實(shí)例上調(diào)用MediaRecorder.prepare()。7、調(diào)用MediaRecorder.start()開始音頻捕捉。8、調(diào)用MediaRecorder.stop()停止音頻捕捉。9、錄音完畢后調(diào)用MediaRecorder.release()方法釋放資源。
MediaRecorder類的具體用法請(qǐng)參考 Audio Capture 。
音頻源: 音頻源指從何處錄制聲音,通常會(huì)選擇電話的“麥克風(fēng)”。 使用MediaRecorder.AudioSource類來表示可選的所有音頻源。
范例1:MediaRecorder.AudioSource類。
MediaRecorder.AudioSource.MIC 麥克風(fēng),即手機(jī)話筒
MediaRecorder.AudioSource.DEFAULT 默認(rèn)情況下通常代表MIC
MediaRecorder.AudioSource.VOICE_CALL Voice call uplink and downlink source
MediaRecorder.AudioSource.VOICE_DOWNLINK Voice call downlink source
MediaRecorder.AudioSource.VOICE_UPLINK Voice call uplink source
MediaRecorder.AudioSource.VOICE_RECOGNITION Usually DEFAULT source
文件格式與音頻編碼: 首先我們要知道的是,每個(gè)音頻文件都有兩部分:文件格式(也叫音頻容器),數(shù)據(jù)格式(也叫音頻編碼)。 文件格式描述了這個(gè)文件它自己的格式,而它里面的實(shí)際音頻數(shù)據(jù)能使用很多不同的方式編碼。例如,一個(gè)后綴為caf的文件是一種文件格式,它能夠包含用MP3、線性pcm等其他許多格式編碼的音頻數(shù)據(jù)。 換句話說,文件格式就像是桶一樣,里面可以裝很多水,那些水就是那些音頻數(shù)據(jù)。桶有很多種外形,也就是有很多種文件格式,而且不一樣的桶,也需要裝不同的水(石油桶用來裝石油)。caf這種桶就可以裝各種各樣的水,不過有些桶就只能裝幾種類型的水。
使用MediaRecorder類的setOutputFormat()方法可以設(shè)置錄音時(shí),輸出的音頻文件的格式。MediaRecorder.OutputFormat類來表示可選的音頻文件格式。
范例2:MediaRecorder.OutputFormat類。
MediaRecorder.OutputFormat.AMR_NB API Level 10
MediaRecorder.OutputFormat.AMR_WB API Level 10
MediaRecorder.OutputFormat.DEFAULT API Level 1
MediaRecorder.OutputFormat.MPEG_4 API Level 1
MediaRecorder.OutputFormat.RAW_AMR API Level 3
MediaRecorder.OutputFormat.THREE_GPP API Level 1
MediaRecorder.OutputFormat.AAC_ADTS API Level 16
AMR AMR(Adaptive multi-Rate簡(jiǎn)稱自適應(yīng)多速率音頻編碼) 它即是一種音頻編碼格式也是一種文件格式。 AMR編碼壓縮比非常高,但是音質(zhì)比較差,主要用于語音類的音頻壓縮,效果還是很不錯(cuò)的,不適合對(duì)音質(zhì)要求較高的音樂、歌曲類音頻的壓縮。 現(xiàn)在很多智能手機(jī)都支持多媒體功能,特別是音頻和視頻播放功能,而AMR文件格式是手機(jī)端普遍支持的音頻文件格式。 AMR文件就是存儲(chǔ)AMR語音編碼的音頻文件。 很多手機(jī)允許你存儲(chǔ)短時(shí)間的AMR格式錄音,在開源和商業(yè)軟件有和其他格式轉(zhuǎn)換的程序,例如MP3,但是要記住AMR并不是理想的記錄聲音的方式。AMR文件擴(kuò)展名是.amr。 AMR被標(biāo)準(zhǔn)語音編碼3GPP在1998年10月選用,現(xiàn)在廣泛在GSM和UMTS中使用。它使用1-8個(gè)不同的位速編碼。 AMR又稱為AMR-NB,即窄帶自適應(yīng)多速率,還有另一種AMR-WB寬帶自適應(yīng)多速率。
RAW_AMR 此常量與AMR_NB等價(jià)。在API Level 16中已經(jīng)不推薦使用,改用AMR_NB代替。
THREE_GPP 即.3gp格式的文件,通常是以視頻文件的形式展現(xiàn)。 3GP是一種多媒體儲(chǔ)存格式,由Third Generation Partnership Project(3GPP)定義的,MPEG-4 Part 14(MP4)的一種簡(jiǎn)化版本,減少了儲(chǔ)存空間和較低的帶寬需求,主要用于3G手機(jī)上,讓手機(jī)上有限的儲(chǔ)存空間可以使用。 3GP檔案影像的部份可以用MPEG-4 Part 2、H.263或MPEG-4 Part 10 (AVC/H.264)等格式來儲(chǔ)存,聲音的部份則支援AMR-NB、AMR-WB、AMR-WB+、AAC-LC或HE-AAC來當(dāng)作聲音的編碼。目前3GP檔案有兩種不同的標(biāo)準(zhǔn):
- 3GPP(針對(duì)GSM手機(jī),副檔名為.3gp)- 3GPP2(針對(duì)CDMA手機(jī),副檔名為.3g2)
這兩種格式影像方面都采用MPEG-4及H.263,而聲音則采用AAC或AMR標(biāo)準(zhǔn)。
3GP格式視頻有兩種分辨率:
1、分辨率176×144,適合市面上所有支持3GP格式的手機(jī)。2、分辨率320×240,清晰,適合高檔手機(jī)、MP4播放器、PSP以及蘋果iPod.
AAC AAC(Advanced Audio Coding簡(jiǎn)稱高級(jí)音頻編碼)基于MPEG-2的音頻編碼技術(shù)。目的是取代MP3格式。 2000年,MPEG-4標(biāo)準(zhǔn)出現(xiàn)后,AAC重新集成了其特性,加入了SBR技術(shù)和PS技術(shù),為了區(qū)別于傳統(tǒng)的MPEG-2 AAC又稱為MPEG-4 AAC。 作為一種高壓縮比的音頻壓縮算法,AAC壓縮比通常為18:1,也有數(shù)據(jù)說為20:1,遠(yuǎn)勝mp3;在音質(zhì)方面,由于采用多聲道,和使用低復(fù)雜性的描述方式,使其比幾乎所有的傳統(tǒng)編碼方式在同規(guī)格的情況下更勝一籌。 但是AAC在Android的API Level 16以后才支持的。 注:視頻文件也同樣區(qū)分文件格式和編碼格式
使用MediaRecorder類的setAudioEncoder()方法可以設(shè)置錄音時(shí)所要使用的音頻編碼格式。
范例3:MediaRecorder.AudioEncoder類。
MediaRecorder.AudioEncoder.AAC API Level 10
MediaRecorder.AudioEncoder.AAC_ELD API Level 16
MediaRecorder.AudioEncoder.AMR_NB API Level 1
MediaRecorder.AudioEncoder.AMR_WB API Level 10
MediaRecorder.AudioEncoder.DEFAULT API Level 1
MediaRecorder.AudioEncoder.HE_ACC API Level 16
AudioRecord 剛剛介紹了如何使用MediaRecorder類來進(jìn)行錄音,該類十分容易使用并且可以簡(jiǎn)單快速的進(jìn)行錄音,同時(shí)也可以將音頻壓縮存儲(chǔ)為mpeg4或者3gpp格式的。但是如果你需要原始數(shù)據(jù),做一些音頻處理,則就無法使用MediaRecorder類來完成了。AudioRecord類則可以輸出未壓縮的原始音頻流,你可以將音頻流寫入到一個(gè)文件,保存為wav格式等。
使用AudioRecord類記錄音頻的步驟如下:
1、創(chuàng)建一個(gè)android.media.AudioRecord類的實(shí)例。2、使用AudioRecord.startRecording()方法開始錄音。3、使用AudioRecord.read()方法讀取錄到的原始音頻流。4、使用AudioRecord.stop()方法停止錄音。
范例1:AudioRecord類構(gòu)造方法。
// 第一個(gè)參數(shù):指定音頻源,取值可以是MediaRecorder.AudioSource類定義的常量。
// 第二個(gè)參數(shù):設(shè)置采樣率,單位Hz,44100Hz是唯一可以在所有設(shè)備上正常工作的。
// 但是也有其他采樣率如22050,16000和11025可以在某些設(shè)備上工作。
// 第三個(gè)參數(shù):設(shè)置聲道數(shù)。取值為:AudioFormat.CHANNEL_IN_MONO 和 AudioFormat.CHANNEL_IN_STEREO。
// 前者通??梢栽谒性O(shè)備上正常工作。
// 第四個(gè)參數(shù):設(shè)置音頻的編碼格式。取值為:AudioFormat.ENCODING_PCM_16BIT 和 AudioFormat.ENCODING_PCM_8BIT。
// 第五個(gè)參數(shù):設(shè)置錄音時(shí),用于保存錄出來的音頻數(shù)據(jù)的buffer大小。
// 如果你不知道如何設(shè)置緩沖區(qū)大小,則可以調(diào)用getMinBufferSize(int, int, int)方法來計(jì)算。
// 該方法中的三個(gè)參數(shù)的含義和此構(gòu)造方法的參數(shù)完全相同。
public AudioRecord(int audioSource,int sampleRateInHz,int channelConfig,int audioFormat,int bufferSizeInBytes)
本節(jié)參考閱讀: