在選擇晶元時,會看到音頻編解碼器和音頻ADC DAC被分在不同的類目中,但看兩者功能卻相似。


卸腰。完全不一樣,DAC ADC 是數模/模數轉換器,是電路層面的東西,一般就是一塊晶元,其中是有模擬電路的。音頻編解碼器是軟體層面的,即使有晶元,往往也是一塊 DSP 裡面裝有寫好的軟體。

維基給出了一個非常不錯的解釋,我這邊做個引用加上一點自己的解讀

首先對編碼和解碼做個定義,編碼就是將「接收者」「可以直接理解的信息」轉換為「無法直接理解的信息」,以此獲得壓縮體積、加密內容、便於修改、避免傳輸過程中的失真等等一系列收益這樣的收益。解碼則是用對應的方式,去解讀編碼之後的信息,將其還原為接收者可以直接理解的信息。

音頻編解碼器是指能編碼或解碼音頻數字數據流的設備或計算機程序。

具體到題主的問題,問的是用晶元實現的編解碼器和ADC、DAC有什麼區別,答案是編解碼器集成了後兩者,被分在不同類目可能是因為他們的用途不同,功能單一的DAC、ADC通常是用在專做解碼或專做編碼的設備上,我們日常接觸到的設備更多的是使用一體的編解碼器。

在硬體層面,音頻編解碼器指一個能編碼模擬音頻到數字音頻和解碼數字音頻到模擬音頻的獨立設備。換種說法,它包含運行在同樣時鐘的模數轉換器(ADC)和數模轉換器(DAC)。這在音效卡中被使用以支持音頻輸入和輸出。

在硬體層面,人是這個接收者,人可以直接理解的是模擬信號(電壓變化,傳到耳機被表現為相應元器件的振動,進而帶動空氣振動產生聲波),人無法直接理解的是0101的數據流,即數字信號。

編解碼器做的就是在他們之間的雙向翻譯。當然,我們所處的模擬世界是無限精度的,但數字信號卻因為比特數的限制有一個精度的上限,所以轉換中肯定有一定的損失。更高的採樣率可以將這個損失縮小到不可察覺,對此可以類比微積分中的積分,用的「長方形」越窄,我們就能越能逼近原始函數。

在軟體層面,音頻編解碼器是一個執行演算法的計算機程序,能壓縮與解壓縮數字音頻數據到音頻文件或流媒體音頻編碼格式。該演算法的目的是保證質量的前提下使用最少的比特表示高保真音頻信號。這可以有效地減少存儲空間和傳輸已存儲音頻文件所需的帶寬。大多數編解碼器是實現為一個具有介面的庫供一個或多個媒體播放器使用。

這裡就涉及到一個名稱的共用,可能也是一部分疑惑的來源。

通常來講,是沒有專門為編碼音頻信號流到某種存儲格式的專有硬體的(相當於在硬體中寫入編碼演算法,需要編解碼時,不用CPU而用這個專有硬體執行)。對於處理音頻,這堪稱殺雞用牛刀。耗費了一個晶元的成本,實際可能與CPU編碼相比並無提升,還損失了全部的靈活性(用FPGA做這個更是小題大作),且增加了額外的傳輸步驟(在個人電腦上要把數據傳到這個硬體上是需要CPU調度,經過CPU中轉的,除非是專門做這個的設備(比如MP3格式錄音筆?有這種東西嗎?),額外傳輸都會發生)。所以晶元中的編解碼器,應當是上面所說的模數數模轉換一體晶元,而非軟體Codec。

在軟體層面,音頻輸出設備是這個接收者,它可以直接理解的是例如RIFF-WAV這樣的PCM信號,而電腦中通常存儲的是MP3、FLAC等等格式的音頻文件,是它無法理解的,這時候就需要CPU去介入,把文件翻譯成信號(也就是「讀」)。

用了人類能直接完成的動作去解釋計算機中發生的事情,希望能對您的理解有所幫助。如果對內容有異議,歡迎在下方評論區討論。

以上。


@梁晨回答的很好了,音頻編解碼器(Audio codec),乾的活就是對音頻信號進行編碼和解碼:

編碼本質上就是把模擬量的音頻信號轉成數字量的音頻信號(音頻ADC乾的活);

解碼本質上就是把數字量的音頻信號轉成模擬量的音頻信號(音頻DAC乾的活)。

音頻編解碼器集成了音頻ADC和音頻DAC,通過軟體配成來決定工作是在哪個模式下。


DAC/ADC @Kanato已經說得比較清晰了;編解碼器(Codec, Encoder/Decoder)是管壓縮和解壓演算法的。音視頻數據都是天量的(48kSPS * 16bit / 8 * 2CH 的普通音頻,不壓縮的話1小時有675MB的數據;而192kSPS *24bit / 8 * 5CH的一個小時足足有10GB!),壓成128k的MP3/AC3/AAC等Codecs,就只有57MB了。Audio codec就是幹這個活的,實時解壓(播放)/壓縮(錄音)

====編輯====

可能誤導題煮了,如果是晶元類目的話,Audio codec並非上面我回答的東西。

還是維基百科說的清楚:Audio codec —— 晶元層面所說的編解碼器本質上【就是音頻專用ADC/DAC的合體】,不包含編解碼演算法。他們以音頻專用的I2S標準匯流排和CPU溝通,輸入輸出PCM數據(即非壓縮音頻數據),轉換成模擬信號。之前看過TI和Maxim的Audio codec類確實是這樣的。而普通的ADC/DAC一般不走I2S介面,因此驅動也得自己和內核音頻子系統做介面,採樣率也非標準音頻的192k, 48k等等。


在軟體上,audio codec就是指把壓縮格式的音頻轉換成指定的格式或者反向操作的演算法。在硬體上,codec指的就是DAC和ADC。
首先想必題主明白我是生活在模擬世界中生物,我們發出的聲音是Analog(A),能聽到的聲音也是Analog的。但一切CPU處理的都是數字信號Digital(D)。所以這兩種信號需要轉換來,轉換去。於是就有了adc(模數轉換器)和dac(數模轉換器)。但是在數字世界,我們已經變成1010的聲音信號還有mp3,wav這些格式,這些格式之間的轉換需要的就是音頻譯碼器。

DAC, Digital to Anolog Converter 數字信號轉換為模擬信號的設備

ADC, Anolog to Digital Converter 模擬信號轉換為數字信號的
學習了
推薦閱讀:
相關文章