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 sehubungan dengan Speech-to-Text API.

Untuk panduan dalam memilih encoding terbaik bagi aplikasi Anda, baca 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 kebingungan. File FLAC harus mencantumkan frekuensi sampelnya di header FLAC agar dapat dikirim ke Speech-to-Text API. FLAC adalah satu-satunya encoding yang mewajibkan data audio menyertakan header; semua encoding audio lainnya menentukan data audio tanpa header. Saat merujuk ke FLAC dalam Speech-to-Text API, kita selalu merujuk ke codec. Saat merujuk ke 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 (PCM) linear 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 Speex wideband Tidak Frekuensi sampel harus 16.000 Hz
WEBM_OPUS WebM Opus Tidak Frekuensi sampel harus salah satu dari 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz, atau 48.000 Hz

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

Jika Anda memiliki pilihan saat mengenkode materi sumber, gunakan encoding lossless seperti FLAC atau LINEAR16 untuk pengenalan ucapan yang lebih baik. Untuk panduan dalam 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 disamplingkan dengan kecepatan yang dapat (setidaknya) merepresentasikan suara dengan frekuensi tertinggi yang ingin Anda replikasi, dan juga harus menyimpan kedalaman bit yang cukup untuk merepresentasikan amplitudo yang tepat (kekerasan dan kelembutan) dari bentuk gelombang di seluruh sampel suara.

Kemampuan perangkat pemrosesan suara untuk membuat ulang frekuensi disebut respons frekuensi, sedangkan kemampuannya untuk menciptakan kenyaringan dan kelembutan yang tepat disebut 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 memperkirakan gelombang analog ini dengan mengambil sampel amplitudo gelombang analog tersebut pada tingkat yang cukup cepat untuk menirukan frekuensi intrinsik gelombang. Frekuensi sampel segmen audio digital menentukan jumlah sampel yang akan diambil dari materi sumber audio (per detik). Frekuensi sampel yang tinggi 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 dengan lebih tepat. Jika Anda memiliki banyak suara keras dan lembut dalam sampel audio yang sama, Anda memerlukan kedalaman bit yang lebih besar untuk merepresentasikan 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, sedangkan sebagian besar peralatan telefoni 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). Sampel audio diambil pada interval yang ditentukan, dan amplitudo dari gelombang yang dijadikan sampel pada titik ini akan disimpan sebagai nilai digital menggunakan kedalaman bit sampel tersebut.

PCM linear (yang menunjukkan bahwa respons amplitudo seragam secara linear di seluruh sampel) adalah standar yang digunakan dalam CD, dan dalam encoding LINEAR16 Speech-to-Text API. Kedua encoding ini menghasilkan aliran byte tanpa kompresi yang berkaitan langsung dengan data audio, dan keduanya memiliki 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 tanpa kompresi karena data digital disimpan persis seperti yang diimplikasikan oleh standar di atas. Dengan membaca aliran byte satu saluran yang dienkode menggunakan PCM Linear, Anda dapat membagi setiap 16 bit (2 byte), misalnya, untuk mendapatkan nilai amplitudo lain dari bentuk gelombang tersebut. Hampir semua perangkat dapat memanipulasi data digital tersebut secara native. Anda bahkan dapat memangkas file audio PCM Linear menggunakan editor teks, tetapi (tentu saja) audio tanpa kompresi bukanlah cara paling efisien untuk mengirim atau menyimpan audio digital. Karena alasan itulah, 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 menghilangkan audio dari luar rentang pendengaran normal manusia, dan menyesuaikan jumlah kompresi dengan menyesuaikan kecepatan bit yang efektif dari codec MP3, atau jumlah bit per detik untuk menyimpan data 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, sebaiknya Anda 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.