音訊編碼是指儲存及傳輸音訊資料的方法。這份文件說明了這類編碼的運作方式,如需為應用程式選擇最佳編碼方式的指南,請參閱最佳做法。
數位音訊編碼是複雜的主題,一般來說,您不需要瞭解詳細資料,即可在 Speech API 中處理音訊。這裡提供的概念僅供一般參考。這裡的一些背景資訊可能對瞭解 API 的運作方式,以及應如何在應用程式中規劃及處理音訊很有用。
音訊格式與編碼
請注意,音訊格式並不等於音訊編碼。舉例來說,.wav
這類廣為使用的檔案格式會定義音訊檔案標頭的格式,但它本身並不是音訊編碼。.wav
音訊檔案通常 (但並非絕對) 使用線性 PCM 編碼;在您檢查 .wav
檔案的標頭之前,請勿假定它具有特定編碼格式。
解碼設定
解碼傳遞音訊所需的參數會指定在 decoding_config
oneof 中。
如果音訊採用 Speech-to-Text AutoDetectDecodingConfig
支援的格式,強烈建議您設定 auto_decoding_config
欄位,讓 Speech-to-Text 判斷正確的參數。
否則,您需要透過設定 explicit_decoding_config
欄位,明確指定解碼參數。通常只要查看錄製音訊時使用的設定,就能找到這些參數。
為什麼要編碼?
音訊由波形構成,其中穿插了不同頻率與振幅的音波。如要在數位媒體中呈現這些波形,必須以可 (至少) 代表您想複製的最高頻率聲音的速率取樣波形,且必須儲存足夠的位元深度,才能代表聲音樣本中波形的適當振幅 (音量大小)。
音訊處理裝置重現頻率的能力稱為「頻率響應」,而產生適當音量和柔和度的能力則稱為「動態範圍」。這些字詞通常統稱為音訊裝置的保真度。以最簡單的方式來講,編碼就是使用這兩個基本原理重建聲音,並且能夠有效儲存及傳輸此類資料的方法。
取樣率
聲音是以類比波形的形式存在。數位音訊的區段會以足夠的速率模仿音波的固有頻率,藉此取樣類比音波的振幅來模擬此類比音波。數位音訊片段的取樣率會指定要從音訊來源素材 (每秒) 擷取的樣本數;取樣率越高,數位音訊就越能忠實呈現高頻率。
根據 Nyquist-Shannon 定理,如要以數位方式擷取音波,一般來說取樣頻率必須是音波最高頻率的兩倍以上。舉例來說,如要重現人類聽力範圍 (20-20000 Hz) 之內的音訊,必須以至少每秒 40000 次的頻率取樣數位音訊格式 (這也是為什麼 CD 音效使用 44100 Hz 取樣率的原因之一)。
位元深度
位元深度會影響特定音訊樣本的動態範圍。位元深度越高,就能呈現更精確的振幅。如果同一個音訊樣本中包含許多大聲和輕柔的聲音,就需要更高的位元深度才能正確呈現這些聲音。
位元深度越高,音訊樣本中的訊號雜訊比也會降低。CD 音樂音訊的位元深度為 16 位元。DVD Audio 使用 24 位元的位元深度,而大多數電話設備使用 8 位元的位元深度。(某些壓縮技術可以補償較小的位元深度,但這樣很容易失真。)
非壓縮音訊
大多數數位音訊處理都使用這兩種技術 — 取樣率與位元深度 — 來以直接的方式儲存音訊資料。一種最流行的數位音訊技術 (在 CD 技術中最常使用) 稱為脈衝碼調變 (或 PCM)。系統會以設定的間隔取樣音訊,並使用樣本的位元深度,將該點的取樣音波振幅儲存為數位值。
線性 PCM (表示樣本的振幅回應呈線性均勻) 是 CD 和 Speech-to-Text API 的 LINEAR16
編碼中使用的標準。兩種編碼都會產生與音訊資料直接對應的未壓縮位元組串流,且兩種標準都包含 16 位元的深度。CD 中的線性 PCM 使用 44,100 Hz 的取樣率,其適用於重新編組音樂;但是,16000 Hz 的取樣率更適合重新編組語音。
線性 PCM 是「非壓縮音訊」的一個範例,其中數位資料會按照上述說明的標準儲存。讀取以線性 PCM 編碼的單聲道位元組串流時,您可以每 16 位元 (2 個位元組) 進行計數,例如取得波形的另一個振幅值。幾乎所有裝置都能以原生方式處理這類數位資料,您甚至可以使用文字編輯器裁剪 Linear PCM 音訊檔案,但 (顯然) 未經壓縮的音訊並非傳輸或儲存數位音訊最有效率的方式。因此,大多數音訊都會使用數位壓縮技術。
壓縮音訊
與所有資料一樣,音訊資料通常會經過壓縮來使它更容易儲存及傳輸。音訊編碼的壓縮有「無損」及「失真」兩種。無損壓縮經過解壓,可將數位資料還原至其原始形式。失真壓縮會在壓縮及解壓縮期間必要性地移除一些資訊,並經過參數化處理,來指示要給移除資料的壓縮技術多少容忍度。
無損壓縮
無損壓縮會使用對儲存的資料進行重新排列的複雜方式來壓縮數位音訊資料,但這樣並不會損及原始數位樣本的品質。將資料解壓為其原始數位形式時,使用無損壓縮方式將不會損失任何資訊。
所以為什麼無損壓縮技術有時候會有最佳化參數呢?這些參數通常會犧牲檔案大小來換取解壓縮的時間。例如,FLAC
會使用從 0 (最快) 到 8 (最小檔案大小) 的壓縮層級參數。相較於較低層級的壓縮,較高層級的 FLAC 壓縮不會損失任何資訊。建構或解構原始數位音訊時,壓縮演算法將只需要耗費更多的計算能量。
Speech-to-Text API 支援兩種無損編碼:FLAC
和 LINEAR16
。
從技術上來說,LINEAR16
並非「無損壓縮」,因為一開始就沒有涉及壓縮。如果檔案大小或資料傳輸對您來說相當重要,請選擇 FLAC
做為音訊編碼。
失真壓縮
另一方面,失真壓縮會在建構壓縮資料時消除或減少某些類型的資訊來壓縮音訊資料。Speech-to-Text API 支援若干失真格式,但如果您擁有音訊的控制權,您應避免使用這些格式,因為資料損失可能會影響辨識準確率。
流行的 MP3 轉碼器就是失真編碼技術的一個例子。所有 MP3 壓縮技術都會移除正常人聲範圍外的音訊,並透過調整 MP3 轉碼器的有效位元率 (即每秒儲存音訊資料的位元數),調整壓縮量。
例如,使用 16 位元線性 PCM 的立體聲 CD 便有下列有效位元率:
44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps
舉例來說,MP3 壓縮會使用例如 320 kbps、128 kbps 或 96 kbps 的位元率移除此類數位資料,而導致音訊品質降低。MP3 也支援不同的位元率,這會進一步壓縮音訊。這兩種技術都會損失資訊,並可能影響到品質。舉例來說,大多數人都可以分辨以 96 kbps 或 128 kbps 編碼的 MP3 音樂之間的差異。
其他形式的壓縮機制則會將某些不同的限制加以參數化。
MULAW 是 8 位元的 PCM 編碼,其中樣本的振幅是以對數而非線性方式調變。因此,uLaw 會降低以此方式壓縮之音訊的有效動態範圍。雖然 uLaw 的推出是為了專門最佳化語音編碼,與其他類型的音訊形成對比,但 16 位元 LINEAR16
(未壓縮的 PCM) 仍遠優於 8 位元 uLaw 壓縮音訊。
AMR 和 AMR_WB 會在來源音訊樣本採用可變位元率來調整編碼音訊樣本。
儘管 Speech-to-Text API 支援若干失真格式,如果您擁有來源音訊的控制權,我們仍建議您避免使用這些格式。雖然透過失真壓縮方式移除這類資料可能不會對人耳能夠聽見的音訊產生明顯影響,但損失此類資料可能會大幅降低語音辨識引擎的準確率。