Gambaran Umum ADPCM
Adaptive Differential Pulse Code Modulation (ADPCM) adalah format kompresi lossy yang diimplementasikan untuk XAudio2 untuk menyediakan fitur tambahan untuk menentukan ukuran blok sampel pemadatan. Dengan format kompresi lossy, beberapa data diubah dan hilang selama pemadatan. ADPCM dapat mencapai rasio kompresi hingga 4:1.
Implementasi ADPCM untuk XAudio2 menyediakan fitur tambahan untuk menentukan ukuran blok sampel kompresi. ADPCM memungkinkan perancang audio untuk memilih pengaturan yang merupakan kompromi yang sesuai di antara ukuran, kualitas, dan resolusi (untuk menempatkan titik perulangan).
XAudio2 menggunakan versi codec Microsoft ADPCM yang dimodifikasi yang mendukung pemformatan data yang diperluas yang diperlukan untuk menyediakan ukuran blok sampel kustom. Untuk alasan ini, data audio XAudio2 tidak dapat dimainkan oleh mesin audio yang tidak mendukung versi codec ADPCM ini.
Catatan
Saat ini, kompresi ADPCM hanya tersedia untuk Windows, termasuk XNA Game Studio Express untuk penyebaran Windows.
Pengodean ADPCM
Data audio dikodekan ke ADPCM menggunakan alat baris perintah AdpcmEncode.
AdpcmEncode
Untuk mengodekan file audio sebagai ADPCM untuk digunakan dengan XAudio2, gunakan alat baris perintah AdpcmEncode .
Pendekodean ADPCM
Pendekodean perangkat lunak ADPCM didukung di XAudio2.
XAudio2
Untuk menggunakan data yang dikodekan ADPCM di XAudio2, Anda perlu menginisialisasi struktur ADPCMWAVEFORMAT dengan nilai spesifik ADPCM, dan meneruskannya sebagai argumen ke IXAudio2::CreateSourceVoice saat Anda membuat suara sumber. Untuk contoh memuat dan memutar suara di XAudio2, lihat Cara: Memutar Suara dengan XAudio2.
SamplesPerBlock
Kompresi ADPCM bekerja dengan memisahkan bentuk gelombang menjadi blok, dan memprediksi variasi sampel bentuk gelombang dalam setiap blok. Ukuran blok diukur dalam sampel. Ukuran blok terkecil adalah 32 sampel, dan tertinggi adalah 512 sampel.
Blok yang lebih besar memungkinkan kompresi yang lebih baik, yang menghasilkan ukuran file yang lebih kecil, tetapi dengan mengorbankan kualitas dan resolusi suara untuk menyelaraskan titik perulangan.
Secara umum, memodifikasi nilai SamplesPerBlock menghasilkan tradeoff berikut:
Jika SamplesPerBlock... | Kompresi File | Kualitas Suara | Resolusi Titik Perulangan |
---|---|---|---|
Peningkatan (hingga maks 512) | Meningkatkan | Menurun | Menurun |
Turun (turun ke min 32) | Menurun | Meningkatkan | Meningkatkan |
Batasan
Karena ADPCM menggunakan blok sampel yang selaras satu demi satu, gelombang yang dikompresi dengan ADPCM mungkin memiliki blok parsial yang belum selesai di ujungnya. Dekoder ADPCM menghasilkan keheningan untuk sisa blok parsial ini, yang menjaga gelombang dari perulangan dengan mulus.
Nilai parameter SamplesPerBlock memengaruhi resolusi tempat Anda dapat menyelaraskan data gelombang dan titik perulangan.
Jika Anda mencoba menerapkan kompresi ke gelombang yang tidak selaras, Anda akan mendapatkan kesalahan atau peringatan tergantung pada apakah gelombang digunakan dalam peristiwa pemutaran perulangan apa pun. Anda tidak dapat memadatkan gelombang yang digunakan dalam peristiwa pemutaran perulangan apa pun. Hapus dari peristiwa pemutaran perulangan, dan terapkan kembali pemadatan.
Jika Anda menggunakan gelombang secara eksklusif dalam mode non-perulangan, pembatasan penyelarasan blok sampel tidak berlaku.
Struktur File ADPCM
File ADPCM adalah file RIFF standar dengan jenis gugus berikut.
Potongan FCC | Deskripsi |
---|---|
RIFF | Gugus RIFF standar yang berisi jenis file dengan nilai WAVE di empat byte pertama dari bagian datanya dan gugus lain dalam file di sisa bagian datanya. |
Fmt | Berisi header format untuk file ADPCM. Data dalam gugus ini sesuai dengan struktur ADPCMWAVEFORMAT . |
data | Berisi data audio ADPCM yang dikodekan. Saat Anda menggunakan ADPCM di XAudio2, Anda perlu membaca konten potongan data menjadi buffer, dan meneruskannya ke suara sumber sebagai anggota pAudioData dari struktur XAUDIO2_BUFFER . Anda tidak perlu melakukan byte untuk menukar konten potongan data. |
smpl dan wsmp | Jenis gugus opsional yang berisi informasi perulangan untuk file ADPCM. Saat Anda menggunakan ADPCM di XAudio2, nilai yang terkandung dalam potongan smpl atau wsmp digunakan untuk mengisi anggota LoopBeginLoopLength dan LoopCount dari struktur XAUDIO2_BUFFER . Pada Xbox 360, Anda perlu melakukan pertukaran byte data yang dimuat dari gugus smpl untuk mempertanggungjawabkan perbedaan endianness antara Windows dan Xbox 360. |
Topik terkait