音訊編碼是指儲存及傳輸音訊資料的方法。這份文件說明了這類編碼的運作方式,如需為應用程式選擇最佳編碼方式的指南,請參閱最佳做法。
數位音訊編碼是複雜的議題,但您通常不需要瞭解如何在 Speech API 中處理音訊的詳細資訊。這裡提供的概念僅供參考。這裡的一些背景資訊可能對瞭解 API 的運作方式,以及應如何在應用程式中規劃及處理音訊很有用。
音訊格式與編碼
請注意,音訊格式並不等於音訊編碼。.wav
這類廣為使用的檔案格式會定義音訊檔案標頭的格式,但它本身並不是音訊編碼。.wav
音訊檔案通常 (但並非絕對) 使用線性 PCM 編碼;在您檢查 .wav
檔案的標頭之前,請勿假定它具有特定編碼格式。
解碼設定
decoding_config
oneof 會指定解碼傳入音訊所需的參數。
如果音訊格式為 AutoDetectDecodingConfig
支援的格式之一,強烈建議您設定 auto_decoding_config
欄位,讓 Speech-to-Text 判定正確的參數。
否則,您必須設定 explicit_decoding_config
欄位,明確指定解碼參數。您通常可以查看用於錄製音訊的設定,找出這些參數。
為什麼要編碼?
音訊由波形構成,其中穿插了不同頻率與振幅的音波。如要在數位媒體中呈現這些波形,波形必須以取樣的速率 (至少) 呈現您要複製的最高頻率聲音,且必須儲存足夠的位元深度,才能在音訊取樣中呈現波形的適當振幅 (音量和音調)。
音訊處理裝置重現頻率的能力稱為頻率響應,而產生適當音量和柔和度的能力則稱為動態範圍。這兩個詞彙通常合稱為音訊裝置的保真度。以最簡單的方式來講,編碼就是使用這兩個基本原理重建聲音,並且能夠有效儲存及傳輸此類資料的方法。
取樣率
聲音是以類比波形的形式存在。數位音訊的區段會以足夠的速率模仿音波的固有頻率,藉此取樣類比音波的振幅來模擬此類比音波。數位音訊片段的取樣率會指定從音訊來源素材取樣 (每秒) 的數量;取樣率越高,數位音訊就越能忠實呈現高頻率。
根據 Nyquist-Shannon 定理,您通常需要對要以數位方式擷取的任何聲波,進行超過兩倍最高頻率的取樣。舉例來說,如要重現人類聽力範圍 (20-20000 Hz) 之內的音訊,必須以至少每秒 40000 次的頻率取樣數位音訊格式 (這也是為什麼 CD 音效使用 44100 Hz 取樣率的原因之一)。
位元深度
位元深度會影響特定音訊樣本的動態範圍。位元深度越高,表示您可以呈現更精確的振幅。如果同一個音訊樣本中含有許多大聲和小聲的聲響,就需要更多位元深度才能正確呈現這些聲響。
較高的位元深度也會降低音訊樣本中的訊號雜訊比。CD 音樂音訊會以 16 位元位元深度提供。DVD 音訊使用 24 位元位深,而大多數電話設備則使用 8 位元位深。(某些壓縮技術可以補償較小的位元深度,但這樣很容易失真。)
非壓縮音訊
大多數數位音訊處理都使用這兩種技術 — 取樣率與位元深度 — 來以直接的方式儲存音訊資料。一種最流行的數位音訊技術 (在 CD 技術中最常使用) 稱為脈衝碼調變 (或 PCM)。音訊會以固定間隔取樣,而取樣波形在該點的振幅會以取樣的位元深度儲存為數位值。
線性 PCM (表示在樣本中,振幅回應是線性一致的) 是 CD 和 Speech-to-Text API 的 LINEAR16
編碼中使用的標準。這兩種編碼方式都會產生未壓縮的位元組串流,直接對應音訊資料,且兩者都包含 16 位元深度。CD 中的線性 PCM 使用 44,100 Hz 的取樣率,其適用於重新編組音樂;但是,16000 Hz 的取樣率更適合重新編組語音。
線性 PCM 是「非壓縮音訊」的一個範例,其中數位資料會按照上述說明的標準儲存。讀取使用線性 PCM 編碼的位元位元組單一頻道串流時,您可以計算每 16 位元 (2 個位元組),例如取得波形的另一個振幅值。幾乎所有裝置都能原生操作這類數位資料,您甚至可以使用文字編輯器裁剪線性 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 支援若干失真格式,如果您擁有來源音訊的控制權,我們仍建議您避免使用這些格式。雖然透過失真壓縮方式移除這類資料可能不會對人耳能夠聽見的音訊產生明顯影響,但損失此類資料可能會大幅降低語音辨識引擎的準確率。