天天看點

音頻編解碼(PCM、G711A、G711U、AAC)了解

轉載于:https://blog.csdn.net/weixin_37779156/article/details/102813455

PCM整理

簡介

PCM:又稱脈沖編碼調制。人耳聽到的是模拟信号,PCM是把聲音從模拟信号轉化為數字信号的技術。原理是用一個固定的頻率對模拟信号進行采樣,采樣後的信号在波形上看就像一串連續的幅值不一的脈沖(脈搏短暫起伏的電沖擊),把這些脈沖的幅值按一定的精度進行量化,這些量化後的數值被連續的輸出、傳輸、處理或記錄到存儲媒體中,所有這些組成了數字音頻的産生過程(抽樣、量化、編碼三個過程)。

描述PCM資料的6個參數:

  • Sample Rate : 采樣頻率。8kHz(電話)、44.1kHz(CD)、48kHz(DVD)。
  • Sample Size : 量化位數。通常該值為16-bit。
  • Number of Channels : 通道個數。常見的音頻有立體聲(stereo)和單聲道(mono)兩種類型,立體聲包含左聲道和右聲道。另外還有環繞立體聲等其它不太常用的類型。
  • Sign : 表示樣本資料是否是有符号位,比如用一位元組表示的樣本資料,有符号的話表示範圍為-128 ~ 127,無符号是0 ~ 255。
  • Byte Ordering : 位元組序。位元組序是little-endian還是big-endian。通常均為little-endian。位元組序說明見第4節。
  • Integer Or Floating Point : 整形或浮點型。大多數格式的PCM樣本資料使用整形表示,而在一些對精度要求高的應用方面,使用浮點類型表示PCM樣本資料。

PCM資料格式

如果是單聲道的音頻檔案,采樣資料按時間的先後順序依次存入(有的時候也會采LRLRLR方式存儲,隻是另一個聲道的資料為0),如果是雙聲道的話就按照LRLRLR的方式存儲,存儲的時候與位元組序有關。big-endian模式如下圖所示:

音頻編解碼(PCM、G711A、G711U、AAC)了解

位元組序

談到位元組序的問題,必然牽涉到兩大CPU。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存儲資料,而x86系列則采用little endian方式存儲資料。那麼究竟什麼是big endian,什麼又是little endian? big endian是指低位址存放最高有效位元組(MSB,Most Significant Bit),而little endian則是低位址存放最低有效位元組(LSB,Least Significant Bit)。

下面用圖像加以說明。比如數字0x12345678在兩種不同位元組序CPU中的存儲順序如下所示: Big Endian 低位址 高位址 -----------------------------------------------------------------------------> | 12 | 34 | 56 | 78 | Little Endian 低位址 高位址 -----------------------------------------------------------------------------> | 78 | 56 | 34 | 12 |

所有網絡協定都是采用big endian的方式來傳輸資料的。是以也把big endian方式稱之為網絡位元組序。當兩台采用不同位元組序的主機通信時,在發送資料之前都必須經過位元組序的轉換成為網絡位元組序後再進行傳輸。

采樣頻率、量化精度(采樣位數)和聲道數

采樣頻率是裝置一秒鐘内對模拟信号的采樣次數,在主流的采集卡上分為:(8Khz的電話采樣率就可以達到人的對話程度)

  • 22.05KHz:無線電廣播;
  • 44.1KHz:音頻 CD,MP3等;
  • 48KHz:miniDV、數字電視、DVD、電影和專業音頻。

人耳能夠感覺到的最高頻率為20KHz,要滿足人耳的聽覺要求,則需要每秒進行40K次的采樣,即40KHz。常見的CD采樣率為44.1KHz。

  • 采樣位數比如8bit(現在少見)、16bit(常用)和24bit,指的是描述數字信号所使用的位數。
  • 聲道數:聲音在錄制或播放時在不同空間位置采集或回訪的互相獨立的音頻信号。
  • 單聲道 采樣資料為8位的短整數(short);
  • 雙聲道 采樣資料為16位的證書,(int),高八位(左聲道)和低八位(右聲道)分别代表兩個聲道。
  • [時長]s [采樣率]Hz [采樣位數]bit * [聲道數] / 8 = [檔案大小]byte
  • 某音頻信号是采樣率為8kHz、聲道數、位寬為16bit,時長為1s,則音頻資料的大小為:1 8000 16 *2 = 256000 bit / 8 = 32000 byte / 1024 = 31.25 KB(雙聲道)

音頻幀

音頻和視訊不一樣,視訊每一幀都是一張圖像,音頻資料是流式的,不同的編碼格式各自不同的編碼标準,拿PCM和MP3做一個對比。PCM因為沒有壓縮,根據采樣率位寬等資料可以得到每秒的音頻資料,并不需要幀的概念;MP3是因為壓縮後資訊比較多,則有了類似H264的幀概念,每一個幀都有幀頭。

MP3原理

錄播過程

播放音樂時,應用程式從存儲媒體中讀取音頻資料(MP3、WMA、AAC),進過解碼後,最終送到音頻驅動程式中的就是PCM資料,反過來,在錄音是,音頻驅動不停地把采樣所得到的PCM資料送回給應用程式,有應用程式完成壓縮、存儲等任務。是以,音頻驅動的兩大核心任務就是:

  • playback:如何把使用者空間的應用程式發貨來的PCM資料,轉化為人耳可以辨識的模拟音頻
  • capture:把mic拾取得到的模拟信号,經過采樣、量化,轉化為PCM信号送回給使用者空間的應用程式。

G711整理

  • g711是一種由國際電信聯盟制定的一套語音壓縮标準,主要用于電話語音通信,而人聲最大頻率一般在3.4kHz,是以隻要以8k的采樣頻率對人聲進行采樣,就可以保證完全還原原始聲音。
  • g711的内容是将一個13bit或14bit的樣本編碼成一個8bit的樣本。
  • g711标準主要分兩種壓縮方法:a-law和mu-law,
  • a-law:将一個13bit的pcm樣本壓縮成一個8bit的pcm樣本。
  • mu-law:将一個14bit的pcm樣本壓縮成一個8bit的pcm樣本。

AAC

1:AAC解碼整體流程簡述

在主要子產品開始運作後,主要子產品将AAC比特流的一部分放入輸入緩沖區,通過查找同步字得到一幀的起始,找到後,根據ISO/IEC 13818-7所述的文法開始進行Noisless Decoding(無噪解碼),無噪解碼實際上就是哈夫曼解碼,通過反量化(Dequantize)、聯合立體聲(Joint Stereo),知覺噪聲替換(PNS),瞬時噪聲整形(TNS),反離散餘弦變換(IMDCT),頻段複制(SBR)這幾個子產品之後,得出左右聲道的PCM碼流,再由主要子產品将其放入輸出緩沖區輸出到聲音播放裝置。

2:主要子產品

主要子產品的主要任務是操作輸入輸出緩沖區,調用其它各子產品協同工作。其中,輸入輸出緩沖區均由DSP控制子產品提供接口。輸出緩沖區中将存放的資料為解碼出來的PCM資料,代表了聲音的振幅。它由一塊固定長度的緩沖區構成,通過調用DSP控制子產品的接口函數,得到頭指針,在完成輸出緩沖區的填充後,調用中斷處理輸出至I2S接口所連接配接的音頻ADC晶片(立體聲音頻DAC和DirectDrive耳機放大器)輸出模拟聲音。

繼續閱讀