音訊編碼是指儲存及傳輸音訊資料的方法。下方的說明文件說明此類編碼與 Speech-to-Text API 的運作方式。
如需為應用程式選擇最佳編碼方式的規範,請參閱最佳做法。
數位音訊編碼是複雜的議題,但您通常不需要瞭解如何在 Speech API 中處理音訊的詳細資訊。這裡提供的概念僅供參考。這裡的一些背景資訊可能對瞭解 API 的運作方式,以及應如何在應用程式中規劃及處理音訊很有用。
音訊格式與編碼
請注意,音訊格式並不等於音訊編碼。.WAV
這類廣為使用的檔案格式會定義音訊檔案標頭的格式,但它本身並不是音訊編碼。.WAV
音訊檔案通常 (但並非絕對) 使用線性 PCM 編碼;在您檢查 .WAV
檔案的標頭之前,請勿假定它具有特定編碼格式。
但是,FLAC
既是檔案格式也是編碼方式,有時候會因此引起混淆。FLAC
檔案必須在 FLAC
標頭中包含取樣率,才能提交至 Speech-to-Text API。FLAC
是唯一需要音訊資料包含標頭的編碼,所有其他音訊編碼都會指定無標頭的音訊資料。當我們在 Speech-to-Text API 中提到 FLAC
時,我們一律會指的是編解碼。當我們提到 FLAC 檔案格式時,我們會使用「a .FLAC
file」的格式。
您不需要為 WAV 或 FLAC 檔案指定編碼與取樣率。如果省略這兩項,Speech-to-Text 會根據檔案標頭自動判定 WAV 或 FLAC 檔案的編碼與取樣率。如果您指定的編碼或取樣率值與檔案標頭中的值不符,Speech-to-Text 會傳回錯誤。
Speech-to-Text 支援的音訊編碼
Speech-to-Text API 支援一些不同的編碼方式。下表列出支援的聲音轉碼器:
轉碼器 | 名稱 | 無損 | 使用注意事項 |
---|---|---|---|
MP3 |
MPEG Audio Layer III | 否 | MP3 編碼為 Beta 版功能,僅適用於 v1p1beta1。詳情請參閱 RecognitionConfig 參考說明文件。 |
FLAC |
自由無損音訊轉碼器 | 是 | 串流需要 16 位元或 24 位元 |
LINEAR16 |
線性 PCM | 是 | 16 位元線性脈衝編碼調變 (PCM) 編碼。標頭必須包含取樣率。 |
MULAW |
μ-law | 否 | 8 位元 PCM 編碼 |
AMR |
自適應多速率窄頻 | 否 | 取樣率必須為 8000 Hz |
AMR_WB |
自適應多速率寬頻 | 否 | 取樣率必須為 16000 Hz |
OGG_OPUS |
位於 Ogg 容器中並採 Opus 編碼的音訊 | 否 | 取樣率必須為 8000 Hz、12000 Hz、16000 Hz、24000 Hz 或 48000 Hz 之一 |
SPEEX_WITH_HEADER_BYTE |
Speex 寬頻 | 否 | 取樣率必須為 16000 Hz |
WEBM_OPUS |
WebM Opus | 否 | 取樣率必須為 8000 Hz、12000 Hz、16000 Hz、24000 Hz 或 48000 Hz 之一 |
如要進一步瞭解 Speech-to-Text 音訊轉碼器,請參閱 AudioEncoding 參考說明文件。
如果您在對原始內容進行編碼時,具有選擇空間,請使用無損編碼的方式 (例如 FLAC
或 LINEAR16
),以獲得更佳的語音辨識效果。如要瞭解如何為工作選取適當的編解碼器,請參閱最佳做法。
為什麼要編碼?
音訊由波形構成,其中穿插了不同頻率與振幅的音波。如要在數位媒體內表示這些波形,必須根據您想要重現的聲音,以至少能表示最高頻率聲音的速率來針對這些波形進行「取樣」,且這些波形也必須儲存足夠的「位元深度」,才能表示完整聲音取樣中波形的正確振幅 (音量的強弱)。
聲音處理裝置重建頻率的能力又稱為其「頻率響應」,其建立正確響度與軟度的能力又稱為其「動態範圍」。這兩個詞彙通常合稱為音訊裝置的保真度。以最簡單的方式來講,編碼就是使用這兩個基本原理重建聲音,並且能夠有效儲存及傳輸此類資料的方法。
取樣率
聲音是以類比波形的形式存在。數位音訊的區段會以足夠的速率模仿音波的固有頻率,藉此取樣類比音波的振幅來模擬此類比音波。數位音訊區段的「取樣率」會指定從音訊的來源材料取用的樣本數 (每秒);高取樣率會提升數位音訊真實重現高頻率的能力。
根據 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 (LINEAR16
) 是「非壓縮音訊」的一個範例,其中數位資料會按照上述說明的標準儲存。讀取使用線性 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 支援若干失真格式,如果您擁有來源音訊的控制權,我們仍建議您避免使用這些格式。雖然透過失真壓縮方式移除這類資料可能不會對人耳能夠聽見的音訊產生明顯影響,但損失此類資料可能會大幅降低語音辨識引擎的準確率。