Memulihkan dari Kesalahan Perangkat-Tidak Valid

Banyak metode dalam WASAPI mengembalikan kode kesalahan AUDCLNT_E_DEVICE_INVALIDATED jika perangkat titik akhir audio yang digunakan aplikasi klien menjadi tidak valid. Kode kesalahan ini menunjukkan bahwa perangkat titik akhir telah dicabut, atau bahwa perangkat keras audio atau sumber daya perangkat keras terkait telah dikonfigurasi ulang, dinonaktifkan, dihapus, atau tidak tersedia untuk digunakan. Sering kali, aplikasi dapat pulih dari kesalahan ini.

Catatan

Untuk informasi tentang pemulihan dari kesalahan perangkat yang tidak valid saat menggunakan API audio spasial (ISAC), lihat Memulihkan dari Kesalahan Perangkat Tidak Valid (Suara Spasial)

Strategi yang harus digunakan aplikasi untuk memulihkan dari kesalahan AUDCLNT_E_DEVICE_INVALIDATED tergantung pada teknik mana yang digunakan aplikasi untuk memilih perangkat titik akhir audio:

  • Selalu pilih perangkat penyajian atau pengambilan audio default.
  • Pilih perangkat titik akhir audio tertentu.

Dalam kasus terakhir, aplikasi secara otomatis memilih perangkat tertentu berdasarkan persyaratan internal atau memungkinkan pengguna untuk secara eksplisit memilih perangkat dari daftar perangkat yang tersedia.

Aplikasi yang menggunakan perangkat default dapat mencoba memulihkan dari kesalahan AUDCLNT_E_DEVICE_INVALIDATED sebagai berikut:

  1. Rilis antarmuka IAudioClient dan antarmuka WASAPI lainnya yang telah diperolehnya pada perangkat.
  2. Panggil metode IMMDeviceEnumerator::GetDefaultAudioEndpoint untuk mendapatkan perangkat audio default saat ini.
  3. Coba aktifkan IAudioClient pada perangkat audio default.

Dengan mengikuti langkah-langkah sebelumnya, aplikasi cenderung merespons dengan tepat terlepas dari penyebab kesalahan AUDCLNT_E_DEVICE_INVALIDATED. Jika konfigurasi ulang perangkat default menyebabkan kesalahan (misalnya, jika pengguna mengubah format aliran yang digunakan oleh perangkat), maka langkah-langkah ini, jika berhasil, memungkinkan aplikasi untuk terus menggunakan perangkat yang sama. Jika pengguna menonaktifkan atau menghapus perangkat yang digunakan aplikasi dan perangkat lain tersedia untuk mengasumsikan peran perangkat default, maka aplikasi dapat melanjutkan dengan menggunakan perangkat default baru. Dalam kedua kasus, aplikasi beradaptasi secara otomatis tanpa memerlukan intervensi oleh pengguna.

Aplikasi yang memilih perangkat tertentu dapat mencoba memulihkan dari kesalahan AUDCLNT_E_DEVICE_INVALIDATED sebagai berikut:

  1. Rilis antarmuka IAudioClient dan antarmuka WASAPI lainnya yang telah diperolehnya pada perangkat.
  2. Coba aktifkan antarmuka IAudioClient pada perangkat yang sama.
  3. Jika langkah 2 gagal, aplikasi dapat, sebagai opsi, meminta pengguna untuk memilih perangkat lain.

Langkah 2 dapat berhasil jika perangkat yang digunakan oleh aplikasi dikonfigurasi ulang tetapi tidak dinonaktifkan atau dihapus. Jika berhasil, langkah 2 memungkinkan aplikasi untuk secara otomatis terus menggunakan perangkat yang sama tanpa memerlukan intervensi oleh pengguna. Langkah 3 sesuai jika aplikasi memungkinkan pengguna untuk secara eksplisit memilih perangkat lain setelah pengguna menonaktifkan atau menghapus perangkat yang digunakan sebelumnya.

Aplikasi dapat menentukan dengan lebih tepat penyebab kesalahan perangkat yang tidak valid dengan mendaftar untuk menerima pemberitahuan ketika sesi kehilangan koneksinya ke perangkat. Untuk mengaktifkan pemberitahuan ini, aplikasi mengimplementasikan antarmuka IAudioSessionEvents dan memanggil metode IAudioSessionControl::RegisterAudioSessionNotification untuk mendaftarkan antarmuka. Ketika kesalahan perangkat tidak valid menyebabkan sesi terputus, WASAPI memanggil metode IAudioSessionEvents::OnSessionDisconnected di antarmuka terdaftar. Melalui metode ini, WASAPI menginformasikan penerapan alasan pemutusan sambungan. Di Windows Vista, panggilan OnSessionDisconnected mengidentifikasi alasan berikut:

  • Pengguna menghapus perangkat titik akhir audio.
  • Layanan audio Windows telah dimatikan.
  • Format aliran yang disukai berubah untuk perangkat yang tersambung dengan sesi audio.
  • Pengguna masuk dari sesi Terminal Windows Services (WTS) tempat sesi audio berjalan. Untuk informasi selengkapnya tentang sesi WTS, lihat dokumentasi Windows SDK.
  • Sesi WTS tempat sesi audio berjalan terputus.
  • Sesi audio (mode bersama) terputus untuk membuat perangkat titik akhir audio tersedia untuk koneksi mode eksklusif.

Menanggapi peristiwa pemutusan, WASAPI menutup semua aliran yang termasuk dalam sesi. Jika aplikasi kemudian mencoba mengakses aliran tertutup melalui metode WASAPI seperti IAudioClient::GetCurrentPadding, maka metode gagal dan mengembalikan kode kesalahan AUDCLNT_E_DEVICE_INVALIDATED.

Manfaat tambahan untuk menerima pemberitahuan melalui antarmuka IAudioSessionEvents adalah bahwa pemberitahuan tiba secara asinkron. Dengan demikian, bahkan ketika aliran tidak berjalan, aplikasi masih akan menerima pemberitahuan tepat waktu tentang kesalahan perangkat yang tidak valid yang dapat mencegah aliran berjalan.

Manajemen Aliran