Debugging Gangguan Audio di XAudio2
Gangguan dapat terjadi di XAudio2, topik ini mencakup bagaimana mereka dilaporkan dan beberapa pendekatan untuk memperbaikinya.
Gambaran umum ini mencakup topik berikut:
- Penyebab masalah atau gangguan output audio
- Bagaimana XAudio2 melaporkan masalah
- Pendekatan untuk memperbaiki masalah
- Topik terkait
Penyebab masalah atau gangguan output audio
Gangguan dapat terjadi dalam output XAudio2 karena beberapa alasan.
- Suara sumber XAudio2 kelaparan. Klien tidak mengirimkan audio baru ke dalamnya dengan cukup cepat. Anda mendapatkan keheningan karena tidak memiliki data untuk dimainkan.
- XAudio2 secara keseluruhan terbebani. Dibutuhkan waktu lebih lama dari X ms untuk menghasilkan X ms audio. Anda mendapatkan dropout karena XAudio2 tidak dapat menghasilkan data secepat perangkat audio membutuhkannya. Anda mungkin menjalankan terlalu banyak suara atau efek pada satu waktu, melakukan terlalu banyak pekerjaan di panggilan balik XAudio2, atau membuat panggilan API XAudio2 terlalu sering.
- Utas pemrosesan audio terhenti karena implementasi klien dari beberapa panggilan balik XAudio2 melakukan hal-hal yang dapat memblokir utas. Misalnya, mungkin mengakses disk, menyinkronkan dengan utas lain, atau memanggil fungsi lain yang mungkin memblokir. Gunakan utas latar belakang berprioritas lebih rendah yang dapat disinyalkan oleh panggilan balik untuk melakukan tugas tersebut.
- Sistem secara keseluruhan kelebihan beban. Utas lain yang berjalan pada prioritas yang sama atau lebih tinggi daripada XAudio2 melakukan terlalu banyak pekerjaan. Mereka bersaing dengan utas audio untuk waktu CPU.
Bagaimana XAudio2 melaporkan masalah
XAudio2 dapat mengomunikasikan gangguan dalam build debug dalam beberapa cara.
Jika suara sedang kelaparan, XAudio2 menunjukkan pesan dalam formulir ini.
XAudio2: WARNING: Voice at 0xNNNNNNNN starved: no more source buffers are available, but no end-of-stream marker was received
Jika utas audio berjalan terlalu lama, XAudio2 menampilkan pesan dalam formulir ini.
XAudio2: WARNING: Spent Xms in audio thread; XAudio2 possibly overloaded
Biasanya, pesan ini terjadi dengan pesan berikutnya.
Jika driver audio tidak dapat diberi makan data audio baru tepat waktu, XAudio2 akan menampilkan pesan dalam formulir ini.
XAudio2: WARNING: Glitch at output sample X
Memanggil IXAudio2::GetPerformanceData menyediakan data performa XAudio2, termasuk jumlah total gangguan sejak mesin XAudio2 dimulai.
Pendekatan untuk memperbaiki masalah
Kemungkinan cara untuk mengurangi gangguan audio termasuk yang berikut ini.
Dalam kasus kelaparan suara: Tingkatkan jumlah data audio yang diantrekan di depan suara. Anda dapat menggunakan IXAudio2SourceVoice::GetState untuk menemukan jumlah buffer yang diantrekan kapan saja. Jika Anda masih melihat kesalahan kelaparan suara, tetapi tidak dapat mendengar kesalahan apa pun, pastikan Anda mengatur XAUDIO2_BUFFER. Bendera untuk XAUDIO2_END_OF_STREAM pada buffer akhir suara. Ini memberi tahu XAudio2 untuk tidak mengharapkan buffer lagi harus tersedia segera setelah yang ini selesai.
Dalam kasus lain:
- Kurangi jumlah suara aktif dan efek dalam grafik, terutama efek mahal seperti reverb.
- Nonaktifkan suara dan efek yang tidak Anda gunakan.
- Gunakan bendera XAUDIO2_VOICE_NOSRC dan XAUDIO2_VOICE_NOPITCH di IXAudio2::CreateSourceVoice, jika memungkinkan. Konversi laju sampel mahal.
- Kurangi laju sampel suara individual. Misalnya, suara submix yang menghosting efek gaung dapat memiliki laju sampel yang lebih rendah daripada yang dikirimkan suara sumber ke dalamnya. Suara seperti ledakan dan tembakan yang tidak membutuhkan keakuratan tinggi juga dapat direkam pada tingkat sampel yang lebih rendah.
- Pastikan bahwa implementasi panggilan balik berfungsi sesedikempat mungkin dan jangan pernah memblokir.
- Lakukan lebih sedikit panggilan ke XAudio2. Parameter audio biasanya tidak perlu diperbarui untuk setiap bingkai video. Setiap 30 ms atau lebih sudah cukup. Anda harus menghilangkan panggilan redundan, seperti mengatur volume beberapa kali berturut-turut cepat.
- Kurangi penggunaan CPU game secara keseluruhan.
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk