音訊編碼是指儲存及傳輸音訊資料的方法。下方的說明文件說明這類編碼與 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
檔案」格式。
您不需要為 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 個位元組) 進行計數,例如取得波形的另一個振幅值。幾乎所有裝置都能以原生方式操控這類數位資料,您甚至可以使用文字編輯器裁剪 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 支援若干失真格式,如果您擁有來源音訊的控制權,我們仍建議您避免使用這些格式。雖然透過失真壓縮方式移除這類資料可能不會對人耳能夠聽見的音訊產生明顯影響,但損失此類資料可能會大幅降低語音辨識引擎的準確率。