日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android音频系统之一音频基础

發布時間:2024/1/1 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android音频系统之一音频基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于一部嵌入式設備來說,除了若干基礎功能外(比如手機通話、短信),最重要的可能就是多媒體了,那么問題來了,什么是多媒體呢?

多媒體是各種形式的媒體(比如文本、音頻、視頻、圖片、動畫等等)的組合。可以說,它是一款產品能否在眾多“同質化”嚴重的市場上脫穎而出的關鍵。另外,由于不同的產品在音頻處理、視頻解碼等芯片方面或多或少都存在差異,原生態的Android系統不可能覆蓋市面上的所有硬件方案,所以這部分功能的移植與二次開發就成了設備研發中的重頭戲。當然,Android系統在設計之初就充分考慮到了這點,它提供了一整套靈活的多媒體解決方案,以應對廠商的定制化需求。

對于應用開發人員來說,最熟悉最常用的就是MediaPlayer和MediaRecorder,而深藏在這兩個類之間的實現細節卻鮮有人知。這也是Android的一大優點——高度封裝,讓各類開發人員可以把精力放在自己“需要做的事情上”,各司其職,細化分工,從而極大的提高了產品的開發效率。

不過,這種封裝也同時帶來了一些代價。比如系統異常龐大,各種類定義、C++庫、Java封裝等等讓人目不暇接,這給我們剖析多媒體系統帶來了不少障礙。為此,我們特別選取其中的音頻實現(其中大部分又以音頻回放為主),通過有重點、深入的分析音頻系統的實現,來為大家學習Android多媒體系統打開一個缺口。


1.1 音頻的基礎知識

1.1.1 聲波

從物理學的角度來說,聲波是機械波的一種。機械波(MechanicalWave)是由機械振蕩產生的,它的傳播需要介質的支持。它有如下特點:

1、介質本身并不會隨著機械波不斷地前進

比如我們抖動一條繩子產生的繩波,繩子上的某個點只是在一定范圍內做上下運動,沒有因為波的傳遞而脫離繩子。因而機械波是能量的傳遞,而不是質量的傳遞。

2、在不同的介質中,傳播速度是不一樣的

1.1.2 聲音的屬性

1、響度(Loudness)

響度就是人類可以感知到的各種聲音的大小,也就是音量。響度與聲波的振幅有直接關系——理論上振幅越大,響度也就越大

2、音調(Pitch)

我們常說某人唱高音很好,或者低音很棒,這就是音調。音調與聲音的頻率有關系——當聲音的頻率越大時,人耳所感知到的音調就越高,否則就越低

3、音色(Quality)

同一種樂器,使用不同的材質來制作,所表現出來的音色效果是不一樣的,這是由物體本身的結構特性所決定的——它直接影響了聲音的音色屬性。同樣的道理,不同的演唱者因為他們的發聲部位有差異,所以才造就了更種嗓音特色的音樂才子。

總結:聲音的這幾個屬性,是所有音頻效果處理的基礎。任何對音頻的調整都將反應到這些屬性上,在我們分析源碼時可以結合起來思考。

1.1.3 聲音的錄制、存儲與回放

Multi-Media并不是專門為計算機而生的——只不過后者的出現極大地推動了它的發展。那么和傳統的多媒體相比,計算機領域的多媒體系統,會有哪些區別呢?

一個很顯然的問題是,我們如何將各種媒體源數字化呢?比如,早期的音頻信息是存儲在錄音帶中的,以模擬信號的形式存儲。而到了計算機時代,這些音頻數據必須通過一定的處理手段才可能存儲到設備中,這是我們在數字化時代會遇到的一個常見問題。下面這個圖很好地描述了音頻從錄制到播放的一系列操作流程:

錄制過程:

1、首先,音頻采集設備(比如Microphone)捕獲聲音信息,初始數據是模擬信號

2、模擬信號通過模-數轉換器(ADC)處理成計算機能接受的二進制數據

3、上一步得到的數據根據需求進行必要的渲染處理,比如音效調整、過濾等等

4、處理后的音頻數據理論上已經可以存儲到計算機設備中了,比如硬盤、USB設備等等。不過由于這時的音頻數據體積相對龐大,不利于保存和傳輸,通常還會對其進行壓縮處理。比如我們常見的mp3音樂,實際上就是對原始數據采用相應的壓縮算法后得到的。壓縮過程根據采樣率、位深等因素的不同,最終得到的音頻文件可能會有一定程度的失真。另外,音視頻的編解碼既可以由純軟件完成,也同樣可以借助于專門的硬件芯片來完成。

?

回放過程:

回放過程總體上是錄制過程的逆向操作。

1、從存儲設備中取出相關文件,并根據錄制過程采用的編碼方式進行相應的解碼

2、音頻系統為這一播放實例選定最終匹配的音頻回放設備

3、解碼后的數據經過音頻系統設計的路徑傳輸

4、音頻數據信號通過數模轉換器(DAC)變換成模擬信號

5、模擬信號經過回放設備,還原出原始聲音

1.1.4 音頻采樣

前面我們說過,數字音頻系統需要將聲波波形信號通過ADC轉換成計算機支持的二進制,進而保存成音頻文件,這一過程叫做音頻采樣(Audio Sampling)。音頻采樣是眾多數字信號處理的一種,它們的基本原理都是類似的(比如視頻的采樣和音頻采樣本質上也沒有太大區別)。可想而知,采樣(Sampling)的核心是把連續的模擬信號轉換成離散的數字信號。它涉及到如下幾點:

1、樣本(Sample)

這是我們進行采樣的初始資料,比如一段連續的聲音波形

2、采樣器(Sampler)

采樣器是將樣本轉換成數字信號的關鍵。它可以是一個子系統,也可以指一個操作過程,甚至是一個算法,取決于不同的信號處理場景。理想的采樣器要求盡可能不產生信號失真

3、量化(Quantization)

采樣后的值還需要通過量化,也就是將連續值近似為某個范圍內有限多個離散值的處理過程。因為原始數據是模擬的連續信號,而數字信號則是離散的,它的表達范圍是有限的,所以量化是必不可少的一個步驟

4、編碼(Coding)

計算機的世界里,所有數值都是用二進制表示的,因而我們還需要把量化值進行二進制編碼。這一步通常與量化同時進行

整個過程如下圖:

PCM(Pulse-code modulation)俗稱脈沖編碼調制,是將模擬信號數字化的一種經典方式,得到了非常廣泛的應用。比如數字音頻在計算機、DVD以及數字電話等系統中的標準格式采用的就是PCM。它的基本原理就是我們上面的幾個流程,即對原始模擬信號進行抽樣、量化和編碼,從而產生PCM流。另外,我們可以調整PCM的以下屬性來達到不同的采樣需求:

1、采樣速率(Sampling Rate)

在將連續信號轉化成離散信號時,就涉及到采樣周期的選擇。如果采樣周期太長,雖然文件大小得到控制,但采樣后得到的信息很可能無法準確表達原始信息;反之,如果采樣的頻率過快,則最終產生的數據量會大幅增加,這兩種情況都是我們不愿意看到的,因而需要根據實際情況來選擇合適的采樣速率。由于人耳所能辨識的聲音范圍是20-20KHZ,所以人們一般都選用44.1KHZ(CD)、48KHZ或者96KHZ來做為采樣速率。

2、采樣深度(Bit Depth)

我們知道量化(Quantization)是將連續值近似為某個范圍內有限多個離散值的處理過程。那么這個范圍的寬度以及可用離散值的數量會直接影響到音頻采樣的準確性,這就是采樣深度的意義

比如上圖是一個采用4位深度進行量化得到的PCM。因為4bit最多只能表達16個數值(0-15),所以圖中最終量化后的數值依次為7、9、11、12、13、14、15等等。這樣的結果顯然是相對粗糙的,存在一定程度的失真。當位深越大,所能表達的數值范圍越廣,上圖中縱坐標的劃分也就越細致,從而使得量化的值越接近原始數據。

1.1.5奈奎斯特采樣理論

由Harry Nyquist和Claude Shannon總結出來的采樣規律,為我們選擇合適的采樣頻率提供了理論依據。這個規律又被稱為“Nyquist sampling theorem”或者“The sampling theorem”,中文通常譯為“奈奎斯特采樣理論”。它的中心思想是:

“當對被采樣的模擬信號進行還原時,其最高頻率只有采樣頻率的一半”。換句話說,如果我們要完整重構原始的模擬信號,則采樣頻率就必須是它的兩倍以上。比如人的聲音范圍是20-20kHZ,那么選擇的采樣頻率就應該在40kHZ左右,數值太小則聲音將產生失真現象,而數值太大也無法明顯提升人耳所能感知的音質。

1.1.6 聲道和立體聲

我們在日常生活中會經常聽到單聲道、雙聲道這些專業詞語,那么它們代表什么意思呢?

一個聲道(AudioChannel),簡單來講就代表了一種獨立的音頻信號,所以雙聲道理論上就是兩種獨立音頻信號的混合。具體而言,如果我們在錄制聲音時在不同空間位置放置兩套采集設備(或者一套設備多個采集頭),就可以錄制兩個聲道的音頻數據了。后期對采集到的聲音進行回放時,通過與錄制時相同數量的外放揚聲器來分別播放各聲道的音頻,就可以盡可能還原出錄制現場的真實聲音了。聲道的數量發展經歷了幾個重要階段,分別是:

1、Monaural (單聲道)

早期的音頻錄制是單聲道的,它只記錄一種音源,所以在處理上相對簡單。播放時理論上也只要一個揚聲器就可以了,即便有多個揚聲器,它們的信號源也是一樣的,起不到很好的效果

2、Stereophonic(立體聲)

之所以稱為立體聲,是因為人們可以感受到聲音所產生的空間感。大自然中的聲音就是立體的,比如辦公室里鍵盤敲擊聲,馬路上汽車鳴笛,人們的說話聲等等。那么這些聲音為什么會產生立體感呢?

我們知道,當音源發聲后(比如你右前方有人在講話),音頻信號將分別先后到達人類的雙耳。在這個場景中,是先傳遞到右耳然后左耳,并且右邊的聲音比左邊稍強。這種細微的差別通過大腦處理后,我們就可以判斷出聲源的方位了。

這個原理現在被應用到了多種場合。在音樂會的錄制現場,如果我們只使用單聲道采集,那么后期回放時所有的音樂器材都會從一個點出來;反之,如果能把現場各方位的聲音單獨記錄下來,并在播放時模擬當時的場景,那么就可以營造出音樂會的逼真氛圍。

為了加深大家的理解,我們特別從某雙聲道音頻文件中提取出它的波形:

順便以這個圖為例子再說一下音頻的采樣頻率。我們把上圖進行放大,如下所示:

圖上共有三個采樣點,時間間隔是從4:26.790863到4:26.790908左右,也就是說在大約0.000045秒的時間里采集了兩個點,因而采樣頻率就是:

1/(0.000045/2)=44kHZ,這和此音頻文件所標記的采樣率是一致的

3、Surround Sound(4.1環繞立體聲)

隨著技術的發展和人們認知的提高,單純的雙聲道已不能滿足需求了,于是更多的聲道數逐漸成為主流,其中被廣泛采用的就有四聲道環繞立體聲。

其中的“4”代表了四個音源,位置分別是前左(Front-Left)、前右(Front-Right)、后左(Rear-Left)、后右(Rear-Right)。而小數點后面的1,則代表了一個低音喇叭(Subwoofer),專門用于加強低頻信號效果

4、Surround Sound(5.1環繞立體聲)

相信大家都聽過杜比數字技術,這是眾多5.1環繞聲中的典型代表。另外還有比如DTS、SDDS等都屬于5.1技術。5.1相對于4.1多了一個聲道,位置排列分別是前左、前右、中置(Center Channel)和兩個Surround Channel,外加一個低音喇叭。根據ITU(InternationalTelecommunication Union)的建議,5.1環繞技術各揚聲器位置圖如下所示:

?

即:

各揚聲器和聽者距離是一致的,因而組成一個圓形

角度分布:前左和前右分別是+22.5/-22.5度(看電影時),以及+30/-30度(聽音樂時);中置總是為0度;后面的兩個環繞器分別為+110/-110度

1.1.6 Weber-Fechner law

估計知道這個定律的人比較少,它是音頻系統中計算聲音大小的一個重要依據。從嚴格意義上講,它并不只適用于聲音感知,而是人體各種感觀(聽覺、視覺、觸覺)與刺激物理量之間的一條綜合規律。其中心思想用公式表達就是:△I/I=C,其中△I表示差別閾值,I是原先的刺激量,而C則是常量。換句話說,就是能引起感觀變化的刺激差別量與原先的刺激量比值是固定的。這樣子說可能比較抽象,我們舉個例子來說。

場合1、去商店買一瓶水,原本2塊錢的東西賣到了5塊錢

場合2、買一輛奔馳車,原先價格是一百萬,現在漲了3塊錢

這兩種場景下,前后的價格雖然都是相差3元,但對我們造成的主觀感受是有很大不同的。顯然在第一種情況下,我們會覺得很貴而可能選擇不買;而后者則對我們基本不會產生任何影響。這是因為引起感觀變化的刺激量并不單單取決于前后變化量的絕對差值,同時也與原來的刺激量有很大關系。對于特定的場合,上述公式中的C值是固定的。比如有的人覺得2塊錢的東西賣3元就是貴了,有的人則能接受2塊錢的東西賣4塊,對于不同的人C值是會有差異的。

這就是德國心理物理學家ErnstHeinrich Weber發現的規律,后來的學生GustavFechner把這一發現系統地用公式表達出來,就是上述公式所表達的韋伯定律。

后來,Fechner在此基礎上又做了改進。他提出刺激量和感知是呈對數關系的,即當刺激強度以幾何級數增長時,感知強度則以算術級數增加。這就是Weber–Fechner law,如下公式所示:

S?=?C?log?R

那么這對音頻系統有什么指導意義呢?

我們知道,系統音量是可調的,比如分為0-20個等級。這些等級又分別對應不同的輸出電平值,那么我們如何確定每一個等級下應該設置的具體電平值呢?你可能會想到平均分配。沒錯,這的確是一種方法,只不過按照這樣的算法所輸出的音頻效果在用戶聽來并不是最佳的,因為聲音的變化不連續。

一個更好的方案就是遵循Weber–Fechnerlaw,而采用對數的方法。在Android系統中,這一部分計算具體的實現代碼在audiosystem.cpp文件中,大家有興趣的話可以自行閱讀了解下。

1.1.7 音頻的幾種文件格式

前面小節我們分析了音頻采樣的基本過程,它將連續的聲音波形轉換成為若干范圍內的離散數值,從而將音頻數據用二進制的形式在計算機系統中表示。不過音頻的處理并沒有結束,我們通常還需要對上述過程產生的數據進行格式轉化,然后才最終存儲到設備中。

要特別注意文件格式(FileFormat)和文件編碼器(Codec)的區別。編碼器負責將原始數據進行一定的前期處理,比如壓縮算法以減小體積,然后才以某種特定的文件格式進行保存。Codec和File Format不一定是一對一的關系,比如常見的AVI就支持多種音頻和視頻編碼方式。本小節所講述的以文件格式為主。

我們把數字音頻格式分為以下幾種:

1、不壓縮的格式(UnCompressed Audio Format)

比如前面所提到的PCM數據,就是采樣后得到的未經壓縮的數據。PCM數據在Windows和Mac系統上通常分別以wav和aiff后綴進行存儲。可想而知,這樣的文件大小是比較可觀的

2、無損壓縮格式(Lossless Compressed Audio Format)

這種壓縮的前提是不破壞音頻信息,也就是說后期可以完整還原出原始數據。同時它在一定程度上可以減小文件體積。比如FLAC、APE(Monkey’sAudio)、WV(WavPack)、m4a(Apple Lossless)等等

3、有損壓縮格式(Lossy Compressed Audio Format)

無損壓縮技術能減小的文件體積相對有限,因而在滿足一定音質要求的情況下,我們還可以進行有損壓縮。其中最為人熟知的當然是mp3格式,另外還有iTunes上使用的AAC,這些格式通常可以指定壓縮的比率——比率越大,文件體積越小,但效果也越差。至于采用哪一種格式,通常要視具體的使用場景而定。

1.1.8 聲音的度量單位:dB

人耳剛剛能聽到的聲音為0dB。例如,一根針掉地上的聲音就是0dB。讓能感到痛苦的聲音響度是120dB,噴氣式飛機的響度是130dB。dB也存在負數,表示人耳是無法聽到的。例如20公里外一個人的叫聲是-30dB。

總結

以上是生活随笔為你收集整理的Android音频系统之一音频基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。