Pengantar encoding audio untuk Speech-to-Text

Encoding audio mengacu pada proses penyimpanan dan pengiriman data audio. Dokumentasi di bawah ini menjelaskan cara kerja encoding tersebut dalam kaitannya dengan Speech-to-Text API.

Untuk panduan dalam memilih encoding terbaik bagi aplikasi Anda, lihat Praktik Terbaik.

Encoding audio digital merupakan topik yang kompleks, dan secara umum Anda tidak perlu mengetahui detailnya untuk memproses audio dalam Speech API. Konsep yang disampaikan di sini hanya dimaksudkan sebagai ringkasan umum. Sebagian dari informasi latar belakang ini mungkin berguna bagi Anda untuk memahami cara kerja API, serta bagaimana audio sebaiknya diformulasikan dan diproses di aplikasi Anda.

Format vs. encoding audio

Perhatikan bahwa format audio tidak sama dengan encoding audio. Format file populer seperti .WAV, misalnya, menentukan format header file audio, tetapi bukan encoding audio itu sendiri. File audio .WAV sering, tetapi tidak selalu, menggunakan encoding PCM linear; jangan berasumsi bahwa file .WAV memiliki encoding tertentu sampai Anda memeriksa header-nya.

Namun, FLAC adalah format file dan encoding, yang terkadang menyebabkan beberapa kebingungan. File FLAC harus berisi frekuensi sampel di header FLAC agar dapat dikirim ke Speech-to-Text API. FLAC adalah satu-satunya encoding yang memerlukan data audio untuk menyertakan header; semua encoding audio lainnya menentukan data audio tanpa header. Saat merujuk ke FLAC dalam Speech-to-Text API, kita selalu mengacu pada codec. Saat merujuk pada format file FLAC, kita akan menggunakan format "file .FLAC".

Anda tidak perlu menentukan encoding dan frekuensi sampel untuk file WAV atau FLAC. Jika dihilangkan, Speech-to-Text akan otomatis menentukan encoding dan frekuensi sampel untuk file WAV atau FLAC berdasarkan header file. Jika Anda menentukan nilai encoding atau frekuensi sampel yang tidak cocok dengan nilai di header file, Speech-to-Text akan menampilkan error.

Encoding audio yang didukung untuk Speech-to-Text

Speech-to-Text API mendukung sejumlah encoding yang berbeda. Tabel berikut mencantumkan codec audio yang didukung:

Codec Nama Lossless Catatan Penggunaan
MP3 MPEG Audio Layer III Tidak Encoding MP3 adalah fitur Beta dan hanya tersedia di v1p1beta1. Lihat dokumentasi referensi RecognitionConfig untuk mengetahui detailnya.
FLAC Codec Audio Lossless Gratis Ya 16-bit atau 24-bit diperlukan untuk streaming
LINEAR16 PCM Linear Ya Encoding modulasi kode pulsa linear (PCM) 16-bit. Header harus berisi frekuensi sampel.
MULAW hukum μ Tidak Encoding PCM 8-bit
AMR Narrowband Multi-Kecepatan Adaptif Tidak Frekuensi sampel harus 8.000 Hz
AMR_WB Wideband Multi-Kecepatan Adaptif Tidak Frekuensi sampel harus 16.000 Hz
OGG_OPUS Frame audio yang dienkode Opus dalam container Ogg Tidak Frekuensi sampel harus salah satu dari 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz, atau 48.000 Hz
SPEEX_WITH_HEADER_BYTE Wideband Speex Tidak Frekuensi sampel harus 16.000 Hz
WEBM_OPUS Opus WebM Tidak Frekuensi sampel harus salah satu dari 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz, atau 48.000 Hz

Untuk mengetahui informasi selengkapnya tentang codec audio Speech-to-Text, lihat dokumentasi referensi AudioEncoding.

Jika Anda bisa memilih saat mengenkode materi sumber, gunakan encoding lossless seperti FLAC atau LINEAR16 untuk pengenalan ucapan yang lebih baik. Untuk panduan memilih codec yang sesuai untuk tugas Anda, lihat Praktik Terbaik.

Mengapa melakukan enkode?

Audio tersusun atas bentuk-bentuk gelombang, yang berisi interposisi gelombang dengan frekuensi dan amplitudo yang berbeda-beda. Untuk merepresentasikan bentuk gelombang ini dalam media digital, bentuk gelombang harus diambil sampelnya dengan frekuensi yang (setidaknya) dapat merepresentasikan suara dengan frekuensi tertinggi yang ingin direplikasi, dan juga perlu menyimpan kedalaman bit yang cukup untuk mewakili amplitudo (kenyaringan dan kelembutan) bentuk gelombang yang tepat di seluruh sampel suara.

Kemampuan perangkat pemrosesan suara untuk membuat ulang frekuensi dikenal sebagai respons frekuensi dan kemampuannya untuk menghasilkan kenyaringan dan kelembutan yang tepat dikenal sebagai rentang dinamis. Bersama-sama, kedua istilah ini biasanya disebut fidelitas perangkat suara. Encoding, dalam bentuknya yang paling sederhana, adalah cara merekonstruksi suara menggunakan kedua prinsip dasar ini, serta kemampuan untuk menyimpan dan mengirim data tersebut secara efisien.

Frekuensi sampling

Suara ada sebagai bentuk gelombang analog. Segmen audio digital mendekati gelombang analog ini dengan mengambil sampel amplitudo gelombang analog ini pada frekuensi yang cukup cepat untuk meniru frekuensi intrinsik gelombang. Frekuensi sampel segmen audio digital menentukan jumlah sampel yang diambil dari materi sumber audio (per detik); frekuensi sampel yang tinggi akan meningkatkan kemampuan audio digital untuk merepresentasikan frekuensi tinggi dengan tepat.

Sebagai konsekuensi dari teorema Nyquist-Shannon, umumnya Anda perlu mengambil sampel lebih dari dua kali frekuensi tertinggi gelombang suara yang ingin Anda tangkap secara digital. Untuk merepresentasikan audio dalam rentang pendengaran manusia (20-20.000 Hz), misalnya, format audio digital harus mengambil sampel minimal 40.000 kali per detik (yang merupakan salah satu alasan audio CD menggunakan frekuensi sampel 44.100 Hz).

Kedalaman bit

Kedalaman bit memengaruhi rentang dinamis sampel audio tertentu. Kedalaman bit yang lebih tinggi memungkinkan Anda merepresentasikan amplitudo yang lebih tepat. Jika Anda memiliki banyak suara keras dan lembut dalam sampel audio yang sama, Anda memerlukan kedalaman bit yang lebih tinggi untuk mewakili suara tersebut dengan benar.

Kedalaman bit yang lebih tinggi juga akan mengurangi rasio sinyal terhadap kebisingan dalam sampel audio. Audio musik CD disediakan menggunakan kedalaman bit 16 bit. Audio DVD menggunakan kedalaman bit 24 bit, sementara sebagian besar peralatan telepon menggunakan kedalaman bit 8 bit. (Teknik kompresi tertentu dapat mengompensasi kedalaman bit yang lebih kecil, tetapi cenderung lossy.)

Audio tanpa kompresi

Sebagian besar pemrosesan audio digital menggunakan kedua teknik ini—frekuensi sampling dan kedalaman bit—untuk menyimpan data audio secara langsung. Salah satu teknik audio digital yang paling populer (berkat penggunaan CD) disebut Modulasi Kode Pulsa (Pulse Code Modulation, atau PCM). Audio diambil sampelnya pada interval yang ditetapkan, dan amplitudo gelombang yang diambil sampelnya pada titik tersebut akan disimpan sebagai nilai digital menggunakan kedalaman bit sampel.

PCM Linear (yang menunjukkan bahwa respons amplitudonya seragam secara linear di seluruh sampel) adalah standar yang digunakan dalam CD, dan dalam encoding LINEAR16 Speech-to-Text API. Kedua encoding menghasilkan aliran byte tidak terkompresi yang sesuai langsung dengan data audio, dan kedua standar tersebut berisi kedalaman 16 bit. PCM linear menggunakan frekuensi sampel 44.100 Hz dalam CD, yang sesuai untuk rekomposisi musik; namun, frekuensi sampel 16.000 Hz lebih sesuai untuk rekomposisi ucapan.

PCM Linear (LINEAR16) adalah contoh audio yang tidak dikompresi yang menyimpan data digital persis seperti yang disyaratkan standar di atas. Dengan membaca aliran byte satu saluran yang dienkode menggunakan PCM Linear, Anda dapat menghitung setiap 16 bit (2 byte), misalnya, untuk mendapatkan nilai amplitudo bentuk gelombang lainnya. Hampir semua perangkat dapat memanipulasi data digital tersebut secara native. Anda bahkan dapat meng-crop file audio PCM Linear menggunakan editor teks — tetapi (jelas) audio yang tidak dikompresi bukanlah cara yang paling efisien untuk memindahkan atau menyimpan audio digital. Karena alasan itu, sebagian besar audio menggunakan teknik kompresi digital.

Audio terkompresi

Seperti semua data lainnya, data audio biasanya dikompresi untuk mempermudah penyimpanan dan pengiriman. Kompresi dalam encoding audio dapat bersifat lossless atau lossy. Kompresi lossless dapat diekstrak untuk memulihkan data digital ke bentuk aslinya. Kompresi lossy menghilangkan sebagian informasi selama kompresi dan dekompresi, serta diparameterisasi untuk menunjukkan seberapa besar toleransi penghilangan data yang dapat diberikan kepada teknik kompresi.

Kompresi lossless

Kompresi lossless mengompresi data audio digital menggunakan penataan ulang yang kompleks atas data yang telah disimpan, tanpa menurunkan kualitas sampel digital aslinya. Dengan kompresi lossless, saat data diekstrak ke dalam bentuk digital aslinya, tidak ada informasi yang hilang.

Kalau begitu, mengapa teknik kompresi lossless terkadang memiliki parameter pengoptimalan? Parameter ini sering kali mengorbankan ukuran file untuk waktu dekompresi. Misalnya, FLAC menggunakan parameter tingkat kompresi dari 0 (tercepat) hingga 8 (ukuran file terkecil). Kompresi FLAC tingkat lebih tinggi tidak akan kehilangan informasi apa pun jika dibandingkan dengan kompresi tingkat lebih rendah. Sebagai gantinya, algoritma kompresi hanya perlu mengeluarkan lebih banyak energi komputasi saat mengonstruksi atau mendekonstruksi audio digital asli.

Speech-to-Text API mendukung dua encoding lossless: FLAC dan LINEAR16. Secara teknis, LINEAR16 bukanlah "kompresi lossless" karena sejak awal kompresi memang tidak diperlukan. Jika ukuran file atau kecepatan pengiriman data menjadi pertimbangan penting Anda, pilih FLAC sebagai pilihan encoding audio.

Kompresi lossy

Di sisi lain, kompresi lossy mengompresi data audio dengan menghilangkan atau mengurangi jenis informasi tertentu selama pengonstruksian data terkompresi. Speech-to-Text API mendukung beberapa format lossy, meskipun sebaiknya dihindari jika Anda memiliki kontrol atas audio, karena kehilangan data dapat memengaruhi akurasi pengenalan.

Codec MP3 yang populer adalah contoh teknik encoding lossy. Semua teknik kompresi MP3 akan menghapus audio dari luar rentang audio manusia yang normal, dan menyesuaikan jumlah kompresi dengan menyesuaikan kecepatan bit codec MP3, atau jumlah bit per detik untuk menyimpan tanggal audio.

Misalnya, CD stereo yang menggunakan PCM Linear 16 bit memiliki kecepatan bit efektif:

44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps

Kompresi MP3 menghilangkan data digital semacam ini menggunakan kecepatan bit, misalnya 320 kbps, 128 kbps, atau 96 kbps, dengan dampak berupa penurunan kualitas audio. MP3 juga mendukung kecepatan bit variabel, yang dapat mengompresi audio lebih lanjut. Kedua teknik ini kehilangan informasi dan dapat memengaruhi kualitas. Kebanyakan orang dapat membedakan antara musik MP3 berenkode 96 kbps dan 128 kbps.

Bentuk kompresi lain akan memparameterkan beberapa batasan lain.

MULAW adalah encoding PCM 8 bit. Dalam teknik ini, amplitudo sampel dimodulasi secara logaritmik, bukan secara linear. Hasilnya, uLaw mengurangi rentang dinamis efektif audio sehingga dikompresi. Meskipun uLaw diperkenalkan untuk secara khusus mengoptimalkan encoding ucapan, bukan jenis audio lainnya, LINEAR16 16 bit (PCM tanpa kompresi) masih lebih unggul dibandingkan audio terkompresi uLaw 8 bit.

AMR dan AMR_WB memodulasi sampel audio yang dienkode dengan memperkenalkan kecepatan bit variabel pada sampel audio sumber.

Meskipun Speech-to-Text API mendukung beberapa format lossy, Anda harus menghindarinya jika memiliki kontrol atas audio sumber. Penghapusan data melalui kompresi lossy semacam ini mungkin tidak terlalu memengaruhi audio yang didengar oleh telinga manusia, tetapi hilangnya data tersebut bagi mesin pengenalan ucapan dapat menurunkan akurasi secara signifikan.