數字音訊概念

將音訊表示為數字形式涉及許多步驟和過程,並且有多種格式可用於原始音訊和 Web 上實際使用的編碼或壓縮音訊。本指南概述瞭如何以數字方式表示音訊,以及如何使用編解碼器對音訊進行編碼和解碼以供 Web 使用。

音訊取樣

音訊是自然界中固有的模擬特徵。當物體振動時,它會導致周圍的分子也振動。這些分子會影響相鄰的分子,依此類推,以波的形式從源頭向外傳播振動,直到波的振幅(音量)隨著距離的增加而衰減。那麼,現實世界中音訊波的粒度就是聲音波傳播介質中單個分子的粒度。

在地球上,大多數音訊傳播的介質是空氣。一些音訊確實會透過水傳播,甚至透過構成地球本身的岩石傳播(如果你曾經聽到過地震的隆隆聲或轟鳴聲,你就體驗過這種現象),但你每天聽到的幾乎所有聲音都是透過空氣傳播到你的耳朵中的。

那麼,一個人每天聽到的聲音實際上是空氣中的振動,這些振動會導致耳朵的內部結構發生反應。空氣分子隨著波的每一次脈衝移動得越遠,波的振幅就越高,聲音就越大。分子振動得越快,波的頻率就越高。

波的振幅(高度)越高,此時聲音越大。波長越短(波峰越靠近),產生的聲音訊率(或音調)越高。

A simple sound waveform

但是,計算機是數字化的。為了以計算機可以處理和操作(更不用說透過網路傳輸)的方式表示聲波,必須將聲音轉換為數字形式。此過程稱為**模擬到數字轉換**(簡稱**A/D**)。

影響捕獲音訊保真度的第一個因素是**音訊頻寬**;也就是說,A/D 轉換器能夠捕獲並轉換為數字形式的音訊頻率範圍。如果編解碼器在編碼聲音時選擇丟棄任何頻段,則音訊頻寬也會受到編解碼器的影響。

聲音透過麥克風或其他輸入以電子流的形式進入計算機,這些電子的電壓變化以表示聲波的振幅。然後,模擬訊號透過一個電路轉換為數字形式,該電路以規則的間隔捕獲傳入波的振幅,並將該資料轉換為音訊錄製系統可以理解的形式的數字。這些捕獲的時刻中的每一個都是一個**樣本**。透過將所有樣本連結在一起,您可以近似表示原始波形,如下面的圖所示。

An audio waveform with samples taken periodically

在此示例中,藍線表示從音訊波形(黑色)中提取的樣本。以規則的間隔,A/D 轉換器電路讀取訊號的電壓作為介於(在本例中) -1.0 和 +1.0 之間的值。由於振幅在該時間段內變化,因此 A/D 轉換器必須選擇一個值來表示該時間段,無論是透過在特定時刻取值(在上圖中,每個時間段的中點用作值),還是透過對每個樣本持續時間內的振幅進行平均。然後,這些樣本值被記錄為該時間點波形的振幅。

當稍後需要回放該聲音時,這些振幅用於生成原始波形的近似值;不是回放原始平滑波形的精確副本,而是回放粗糙的藍色波形。

您對原始音訊進行取樣的頻率越高,您就能越接近原始音訊。每秒採集的樣本數稱為**取樣率**。考慮上面的波形,以及如果您以兩倍或十倍的頻率採集樣本,藍色數字波形的外觀會有多大的不同。您採集的樣本越多,波形就越平滑。

音訊資料格式和結構

在最基本的層面上,音訊由一系列樣本表示,每個樣本指定音訊波形的振幅,如針對音訊訊號的整體波形的給定片段所測量的。音訊檔案中各個樣本使用多種格式。大多數音訊檔案對每個樣本使用 16 位有符號整數,但其他檔案使用 32 位浮點數或 24 位或 32 位整數。一些舊的音訊檔案格式(您在 Web 上找不到)使用 8 位整數樣本。此外,樣本也可以使用有符號或無符號值。單個樣本的大小稱為**樣本大小**。

音訊訊號中每個音訊源的位置稱為**通道**。每個通道包含一個樣本,指示在給定時間點由該源產生的音訊的振幅。例如,在立體聲中,有兩個音訊源:一個在左側,一個在右側。每個都由一個通道表示,音訊訊號中包含的通道數稱為**通道數**。

在錄製或生成多通道音訊檔案時,通道被組合成一系列**音訊幀**,每個音訊幀包含音訊所有通道的一個樣本。單個樣本是表示聲音波形在單個時間點的振幅的數值,可以使用各種格式表示。

立體聲可能是 Web 音訊中最常用的通道排列,而 16 位樣本用於當今大多數日常音訊。對於 16 位立體聲音訊,從模擬訊號中提取的每個樣本都記錄為兩個 16 位整數,一個用於左聲道,一個用於右聲道。這意味著每個樣本需要 32 位記憶體。在常見的 48 kHz(每秒 48,000 個樣本)取樣率下,這意味著每秒音訊佔用 192 kB 記憶體。因此,一首典型的三分鐘歌曲需要大約 34.5 MB 的記憶體。儲存量很大,但更糟糕的是,對於一段相對較短的音訊來說,網路頻寬的使用量驚人。這就是為什麼大多數數字音訊都經過壓縮的原因。

壓縮和解壓縮音訊的過程是透過使用音訊**編解碼器**(**CO**der/**DE**coder)對其進行編碼和解碼來執行的。多年來,已經開發了各種各樣的編解碼器,其中一些在 Web 上普遍使用。有關 Web 開發人員需要熟悉的最重要和最有用的編解碼器的詳細資訊,請參閱文章Web 上使用的音訊編解碼器指南

音訊通道和幀

有兩種型別的音訊通道。標準音頻通道用於呈現大部分可聽聲音。左右主聲道以及所有環繞聲揚聲器(中置、左後、右後、左側、右側、天花板聲道等)的聲音都是標準音頻通道。特殊的**低頻增強**(**LFE**)通道提供特殊揚聲器的訊號,這些揚聲器旨在產生低頻聲音和振動,在聽音訊時產生一種內臟感覺。LFE 通道通常驅動低音炮和類似裝置。

單聲道音訊有一個通道,立體聲有兩個通道,5.1 環繞聲有 6 個通道(5 個標準通道和 1 個 LFE),依此類推。每個音訊幀都是一個數據記錄,其中包含音訊訊號中所有可用通道的樣本。音訊幀的大小是透過將樣本大小(以位元組為單位)乘以通道數來計算的,因此立體聲 16 位音訊的一個幀長 4 位元組,而 5.1 浮點音訊的一個幀長 24 位元組(每個樣本 4 位元組乘以 6 個通道)。

**注意:**一些編解碼器實際上會分離左右聲道,並將它們儲存在其資料結構中的單獨塊中。但是,音訊幀始終包含所有可用通道的所有資料。

構成一秒鐘音訊的幀數取決於錄製聲音時使用的取樣率。由於取樣率對應於每秒將聲波分成多少“片段”,因此有時將其視為頻率(在它是對週期性重複事物的描述的意義上,而不是實際音訊頻率的意義上),並且每秒樣本的測量因此使用赫茲作為其單位。

最常見的取樣率是

8000 赫茲

用於電話的國際G.711音訊標準使用 8000 赫茲 (8 千赫) 的取樣率。這足以使人類語音可理解。

44100 赫茲

44.1 千赫的取樣率用於光碟 (CD) 音訊。CD 以 44.1 千赫提供未壓縮的 16 位立體聲。計算機音訊也經常預設使用此頻率。

48000 赫茲

DVD 上的音訊以 48 千赫錄製。這通常也用於計算機音訊。

96000 赫茲

高解析度音訊。

192000 赫茲

超高解析度音訊。目前尚未廣泛使用,但這種情況會隨著時間的推移而改變。

44.1 千赫被認為是最小“高保真”取樣率是有原因的。奈奎斯特-夏農取樣定理規定,要準確地再現聲音,必須以聲音訊率的兩倍速率對其進行取樣。由於人類聽力的範圍大約是 20 赫茲到 20,000 赫茲,因此再現人們通常可以聽到的最高音調的聲音需要超過 40,000 赫茲的取樣率。

為了為低通濾波器提供額外的空間,以避免由混疊引起的失真,在預取樣頻率中添加了額外的 2.05 千赫過渡帶(導致 22,050 赫茲)。根據奈奎斯特定理將其加倍,最終得到最小頻率 (你猜對了) 44.1 千赫。

一些高階音訊系統使用高解析度 (96 千赫) 音訊,並且超高解析度 (192 千赫) 音訊可用於音訊母帶製作,在母帶製作中,在將音訊下采樣到最終產品中使用的取樣率之前,需要儘可能高的質量來處理和編輯聲音。這類似於攝影師在向客戶提供適合在網站上使用的 JPEG 之前,使用高解析度影像進行編輯和合成的方式。

音訊檔案大小和網路頻寬

一旦您知道單個音訊幀的大小以及每秒有多少幀構成您的音訊資料,您就可以輕鬆計算出原始聲音資料本身將佔用多少空間(以及因此它將在網路上消耗多少頻寬)。

例如,考慮一個樣本大小為 16 位(2 位元組)、以 48 千赫錄製的多聲道音訊片段(即兩個音訊通道)

2 × 2 位元組 樣本 × 48000 樣本 = 192000 位元組 = 192 千位元/秒 2 \times 2\frac { 位元組 }{ 樣本 } \times 48000\frac { 樣本 }{ 秒 } = 192000\frac { 位元組 }{ 秒 } = 192 千位元/秒

在 192 千位元/秒的速度下,低端網路僅僅播放單個音訊流就會不堪重負。如果網路還在執行其他操作,則即使在更高頻寬的網路上也會出現問題。由於網路容量競爭激烈,尤其是在較慢的網路上,如此大量的資料在任何型別的即時應用中傳輸都可能過多。

為了解決此問題,必須使用壓縮使音訊變小。

注意:網路頻寬顯然與音訊頻寬不同,音訊頻寬在上面取樣音訊中進行了討論。

音訊壓縮基礎

與文字和許多其他型別的資料不同,音訊資料往往嘈雜,這意味著資料很少由一系列完全重複的位元組或位元組序列組成。因此,音訊資料難以使用傳統的演算法進行壓縮,例如通用工具(如zip)使用的演算法,這些演算法通常透過用簡寫表示法替換重複的資料序列來工作。

壓縮音訊時可以應用多種技術。大多數編解碼器都結合使用了這些技術,並且可能還會使用其他技術。

您可以做的最簡單的事情是應用一個濾波器,濾除嘶嘶聲和微弱的聲音,將任何安靜的部分轉換為靜音並平滑訊號。這可以產生一段靜音以及其他可以縮短的重複或幾乎重複的訊號。

您可以應用一個濾波器來縮窄音訊頻寬,去除您不關心的任何音訊頻率。這對於僅包含語音的音訊訊號尤其有用。這樣做會刪除資料,使生成的訊號更容易壓縮。

心理聲學

如果您知道最有可能處理哪種音訊,則可以找到專門適用於該型別聲音的特殊濾波技術,從而最佳化編碼。

用於音訊的最常用的壓縮方法應用了心理聲學的科學原理。這是一門研究人類如何感知聲音以及我們在聽到的音訊頻率中哪些部分對我們如何響應這些聲音最重要(考慮到聲音的上下文和內容)的科學。編解碼器可以考慮諸如感知聲音訊率變化的能力、人類聽力的整體範圍與音訊訊號的頻率、音訊定位等因素。

透過對心理聲學有充分的瞭解,可以設計一種壓縮方法,在最大程度地提高聲音的感知保真度的同時,最大程度地減少音訊的壓縮大小。採用心理聲學的演算法可能會使用此處提到的任何技術,並且幾乎肯定會應用其他技術。

所有這一切都意味著在選擇編解碼器之前必須提出並回答一個基本問題:考慮到聲音的內容、使用上下文和目標受眾,是否可以接受一定程度的音訊保真度損失,如果可以,損失多少;或者解碼資料後結果必須與源音訊相同是否必要?

有失真壓縮與無失真壓縮

如果細節和潛在保真度的損失不可接受或不希望發生,則首選無損編解碼器。另一方面,如果可以接受一定程度的音訊保真度降低,則可以使用有損編解碼器。通常,有失真壓縮產生的輸出比無失真壓縮方法小得多;此外,許多有損編解碼器都非常出色,普通聽眾難以甚至無法察覺質量和細節的損失。

注意:雖然高質量的有失真壓縮演算法對音質的影響可能難以被普通人察覺,但某些人擁有異常出色的聽力,或者特別善於注意到有失真壓縮技術對音樂所做的更改。

大多數音訊編解碼器都使用某種形式的有失真壓縮,因為這些演算法提供了更好的壓縮比。雖然無失真壓縮演算法通常只能達到原始未壓縮聲音資料大小的 40-50%,但現代有失真壓縮演算法可以將音訊大小減小到原始大小的 5-20% 之間,具體取決於音訊的複雜性。有失真壓縮所能實現的極佳壓縮比通常使其成為一個引人注目的選擇,並且透過精心選擇的編解碼器配置可以實現足夠或極佳的音訊質量。

研究人員仍在繼續設計更好的音訊分析和壓縮方法,因此定期推出新的格式,這些格式在壓縮比或音訊保真度(或兩者)方面提供各種改進。

無損音訊的使用案例包括以下場景

  • 任何聽眾期望精確音訊再現並且可能具有足夠好的聽力以分辨未經修改音訊的複雜細節的情況
  • 用於音樂和音效製作工作的音訊迴圈和樣本
  • 音訊片段或樣本可能被重新混音然後壓縮的情況;在母帶製作過程中使用無損音訊可以避免壓縮先前壓縮的資料,從而導致額外的質量損失

可能建議使用有失真壓縮的因素包括

  • 非常大的源音訊
  • 儲存空間受限(因為儲存空間小,或者因為要儲存大量聲音)
  • 需要限制廣播音訊所需的網路頻寬;這對於直播和電話會議尤其重要

心理聲學 101

深入研究心理聲學和音訊壓縮的工作原理超出了本文的範圍,但瞭解常見演算法如何壓縮音訊的一般概念有助於理解和做出更好的音訊編解碼器選擇決策。

有失真壓縮演算法通常使用心理聲學來確定音訊波形的哪些成分可以以某種方式丟失或減弱,從而在最大程度地減少目標聽眾的可聽影響的同時提高壓縮比。透過操縱波形使其更容易壓縮,或去除實際上聽不到的聲音成分,波形變得更簡單,從而產生資料更具一致性,因此更容易壓縮。將音訊頻寬限制為僅包括對人耳解釋解碼聲音最重要的頻率也可以提高壓縮係數。

正在編碼的內容型別會影響編解碼器的選擇。特別是,音樂的波形幾乎總是比僅包含人聲的音訊樣本的波形更復雜。此外,人聲使用人耳可以檢測到的音訊頻率範圍的一小部分。

注意:最初專門設計用於傳輸人聲的電話網路只能在 300 赫茲到 3,000 赫茲的頻段內傳輸音訊(或任何其他型別的訊號)。這在低端並沒有完全涵蓋人類語音的全部範圍,但有足夠多的波形可用,因此人耳和大腦可以輕鬆地進行補償。這也意味著人類通常適應在如此狹窄的音訊頻寬內聽語音。

人類語音使用相對狹窄的頻段(大約 300 赫茲到 18,000 赫茲,儘管由於包括性別在內的因素,每個人的確切範圍有所不同)。此外,絕大多數人類語音聲音往往介於 500 赫茲到 3,000 赫茲左右,因此可以丟棄大量整體波形而不會影響聽眾理解所講單詞的能力。您甚至可以調整音訊頻寬以考慮單個說話者聲音的音調。

由於所有這些因素,以及語音波形通常比音樂簡單,因此可以在相對較低的位元率下實現語音的高(更具體地說是“足夠高”)保真度再現。

當一種旨在壓縮通用音訊的壓縮演算法分析音訊波形時,它可以丟棄人類聽力範圍之外的任何內容(或者可能更多,具體取決於演算法願意冒多大風險在頻帶的高階和/或低端丟失細節)。這意味著編解碼器可以丟棄頻率低於約 20 Hz 或高於約 20,000 Hz(20 kHz)的音訊。這縮小了聲音的音訊頻寬,從而減少了以壓縮形式表示訊號所需的資料量。音訊頻寬不能像僅語音編解碼器那樣大幅減少,但它仍然是一個有用的起點。

有些人可以在一定程度上聽到這個範圍之外的聲音。更常見的情況是,人們聽到較高頻率的能力比這要低得多;特別是,值得注意的是,到中年時,該頻率範圍的高階通常會從 20 kHz 降至約 12 kHz 至 14 kHz。這表明,較高頻率通常可以丟棄,而不會過分影響聲音的可理解性,因此您可以大幅減少需要保留的音訊空間量,從而使您的聲音更簡單、更容易壓縮。

下圖描繪了這一點。該圖比較了人類聽力頻率範圍(綠色)與人類語音訊率範圍(紅色)以及大多數人類發聲所在的頻率範圍(黃色)。

Diagram showing human hearing range compared to human speech range

這些範圍之間存在很大的差異,這使我們有空間丟失音訊資料中的細節,而不會顯著影響人耳注意到音訊質量任何實際變化的能力。在壓縮音訊時,可以利用這些事實。

除了透過心理聲學分析簡化聲音外,編解碼器還使用其他演算法和轉換來進一步簡化和減小音訊的大小。如果您想了解更多有關音訊壓縮工作原理的資訊,請檢視維基百科上的音訊資料壓縮

重要的是,編解碼器為您完成了所有艱苦的工作。這就是為什麼在建立新的演算法和編解碼器方面投入瞭如此多的工程和科學研究。您只需考慮選項和用例,然後選擇適合您需求的編解碼器即可。

注意:有關選擇音訊編解碼器的更詳細指南,請參閱選擇音訊編解碼器

無損編碼器引數

鑑於需要能夠重現原始音訊,無損編碼器在操縱音訊以提高壓縮率方面有較少的空間,這限制了可用於配置這些編碼器的選項數量。這些選項傾向於圍繞選擇編碼器執行編碼的方法以及允許它為此消耗多少時間和處理器能力。

這些引數因編解碼器而異,但可能包括

  • 指定在編碼過程的特定階段使用的特定演算法
  • 要使用的這些演算法的引數,例如在嘗試對音訊建模時要使用多少預測深度
  • 分析音訊時要進行的遍數,或給定演算法應執行的次數

有損編碼器引數

大多數編解碼器都有一些您可以調整的輸入值,以便以各種方式最佳化壓縮,無論是為了大小還是為了質量。使用有損編碼器時,質量越高,編碼後的音訊檔案就越大。因此,大多數選項都以某種方式影響質量和大小。

您需要參考您使用的編碼軟體的文件以確定哪些選項可用,這將取決於編解碼器和編碼軟體本身。一些編解碼器有一些您可以調整的值(其中一些可能需要深入瞭解心理聲學和編解碼器的演算法),而其他編解碼器則提供了一個簡單的“質量”引數供您設定,該引數會自動調整演算法的各種屬性。

位元率

有兩種互斥的方法可以使用位元率來控制壓縮音訊的質量。第一種方法是為編碼資料設定一個平均位元率目標,而第二種方法是在允許位元率變化的同時,指定一個恆定的質量值作為目標。

平均位元率

控制輸出檔案質量的第一種方法是指定在編碼音訊時要針對的平均位元率ABR)。編碼器將嘗試生成一個編碼後的聲音檔案,該檔案在回放時平均每秒音訊使用指定數量的位元。這從編碼音訊大小的角度控制質量;位元率越高,產生的音訊質量就越高。為了滿足目標位元率,音訊質量將根據需要隨時間波動。

與 ABR 有些類似的是CBR恆定位元率)。ABR 試圖將位元率平均保持在給定水平,同時允許一些波動,而 CBR 在音訊持續時間內使用實際固定的位元率。CBR 主要用於為僅語音目的設計的編解碼器,其中頻率範圍和變化往往很小,允許 CBR 編碼在沒有音訊質量不可行波動的情況下工作。

可變位元率

可變位元率VBR)編碼的工作原理是將恆定質量設定作為輸入傳遞給編碼器。這表示在音訊持續時間內要保持的質量級別,允許位元率根據需要波動以達到該質量級別。在容易以最小的質量影響實現壓縮的聲音部分,位元率可能非常低,而在壓縮更復雜的部分,位元率將更高。

音訊頻率頻寬

一些編解碼器允許您直接配置音訊頻率頻寬,方法是指定允許的頻率範圍、建立上限和/或下限頻率,或指定音訊源型別,該型別根據傳入訊號的預期頻率使用情況確定如何配置演算法。

此外,一些編解碼器支援特殊的有限頻率頻寬通道,例如 LFE 通道,這些通道固有地限制了可用頻率範圍。對於 LFE,音訊頻率頻寬限制在適合低音炮或類似音訊體驗增強裝置使用的頻率範圍內。

一些編解碼器提供專門針對特定使用場景(如 VoIP)的特殊配置檔案;這些配置檔案也可能預設包含對音訊頻率頻寬的限制。

聯合立體聲

立體聲通常由包含每個通道一個樣本的音訊幀表示。這會導致音訊幀每次需要 2 倍sampleSize 位,其中sampleSize 是每個音訊樣本佔用的位數。因此,對於 16 位立體聲音訊錄製,每個樣本使用 2 倍 16 或 32 位空間。這是標準的左右 (L/R) 立體聲或簡單立體聲

聯合立體聲是一種以更節省空間的方式儲存立體聲音訊樣本的方法,它考慮到通常進入每個耳朵的聲音是相似的。因此,與其儲存每個通道樣本的每個位元,不如儲存一個基本振幅和一個每個通道的振幅偏差值,其中偏差值可能使用比完整樣本更少的位元。

聯合立體聲有兩種型別:中側和強度。在音訊檔案的持續時間內,編碼器可能會更改用於表示立體聲訊號的格式。

中側立體聲編碼

中側立體聲編碼MS)的工作原理是記錄包含基本中置通道的幀,該通道是原始左右音訊通道的平均振幅。這本質上是您在將立體聲訊號轉換為單聲道時計算的振幅。然後,您儲存側通道值;此值是一個數字,可以新增到中置通道值以確定左通道的原始振幅,並從中置通道值中減去以計算右通道的原始值。

換句話說,給定左通道 L 和右通道 R,在編碼樣本時,您將執行以下計算

中置 = L + R 2 mid = \frac { L + R }{ 2 } 側置 = L - R 2 side = \frac { L - R }{ 2 }

然後,您儲存midside 的值。雖然mid 的大小仍與您的樣本大小相同(例如 16 位),但side 的值可能可以使用更少的位元儲存,因為兩個通道的振幅可能相對相似。然後,編碼器可以採用每幀的這個較小的總位元數並執行其他計算以進一步減小尺寸。

解碼音訊時,左右通道的絕對值按如下方式計算

L = 中置 + 側置 L\quad =\quad mid\quad +\quad side R = 中置 - 側置 L\quad =\quad mid\quad -\quad side

就其本身而言,中側立體聲編碼是無損的,並且通常被無損和有損音訊編解碼器使用。任何細節的丟失都來自編碼過程的其他步驟。

強度立體聲編碼

強度立體聲編碼透過利用人類確定空間中聲音位置的方式來降低編碼後的音訊位元率;這稱為聲音定位。我們立體聲收聽是因為我們的耳朵會根據聲音的來源在不同的時間檢測到聲音。

這是因為我們的耳朵相隔幾英寸,因為它們位於我們頭部相對的兩側。來自我們右側的聲音將先到達我們的右耳,然後再到達我們的左耳。我們的大腦透過利用這個時間差來確定聲音來自哪個角度,從而確定聲音在我們周圍空間中的位置。但是,隨著音訊訊號頻率的下降,波長會上升。最終,波長接近然後超過耳朵之間的距離,並且難以或不可能明確地定位聲音。

有了這些資訊,我們可以透過將不用於確定方向性的頻率合併到單個通道中,然後包含指示聲音方向性的資訊來近似表示立體聲音訊訊號。這需要更少的位元來表示,但本質上是有損的。

另請參閱