Antarmuka IAudioSessionEnumerator (audiopolicy.h)

Antarmuka IAudioSessionEnumerator menghitung sesi audio pada perangkat audio. Untuk mendapatkan referensi ke antarmuka IAudioSessionEnumerator dari objek enumerator sesi, aplikasi harus memanggil IAudioSessionManager2::GetSessionEnumerator.

Warisan

Antarmuka IAudioSessionEnumerator mewarisi dari antarmuka IUnknown . IAudioSessionEnumerator juga memiliki jenis anggota ini:

Metode

Antarmuka IAudioSessionEnumerator memiliki metode ini.

 
IAudioSessionEnumerator::GetCount

Metode GetCount mendapatkan jumlah total sesi audio yang terbuka di perangkat audio.
IAudioSessionEnumerator::GetSession

Metode GetSession mendapatkan sesi audio yang ditentukan oleh nomor sesi audio.

Keterangan

Jika aplikasi ingin diberi tahu ketika sesi baru dibuat, aplikasi harus mendaftarkan implementasi IAudioSessionNotification dengan manajer sesi. Setelah pendaftaran berhasil, manajer sesi mengirimkan pemberitahuan buat sesi ke aplikasi dalam bentuk panggilan balik. Pemberitahuan ini berisi referensi ke penunjuk IAudioSessionControl dari sesi yang baru dibuat.

Enumerator sesi mempertahankan daftar sesi saat ini dengan menyimpan referensi ke setiap pointer IAudioSessionControl sesi. Namun, enumerator sesi mungkin tidak mengetahui sesi baru yang dilaporkan melalui IAudioSessionNotification. Dalam hal ini, aplikasi hanya akan memiliki akses ke daftar sebagian sesi. Ini mungkin terjadi jika penunjuk IAudioSessionControl (dalam panggilan balik) dirilis sebelum enumerator sesi diinisialisasi. Oleh karena itu, jika aplikasi menginginkan serangkaian sesi lengkap untuk titik akhir audio, aplikasi harus mempertahankan daftarnya sendiri.

Aplikasi harus melakukan langkah-langkah berikut untuk menerima pemberitahuan sesi dan mengelola daftar sesi saat ini.

  1. Inisialisasi COM dengan model Multithreaded Apartment (MTA) dengan memanggil CoInitializeEx(NULL, COINIT_MULTITHREADED) dalam utas non-UI. Jika MTA tidak diinisialisasi, aplikasi tidak menerima pemberitahuan sesi dari manajer sesi.
    Catatan Utas yang menjalankan antarmuka pengguna aplikasi harus diinisialisasi dengan model utas apartemen.
     
  2. Aktifkan antarmuka IAudioSessionManager2 dari perangkat titik akhir audio. Panggil IMMDevice::Activate dengan parameter iid diatur ke IID_IAudioSessionManager2. Panggilan ini menerima referensi ke antarmuka IAudioSessionManager2 manajer sesi di parameter ppInterface .
  3. Terapkan antarmuka IAudioSessionNotification untuk memberikan perilaku panggilan balik.
  4. Panggil IAudioSessionManager2::RegisterSessionNotification untuk mendaftarkan implementasi aplikasi IAudioSessionNotification.
  5. Buat dan inisialisasi objek enumerator sesi dengan memanggil IAudioSessionManager2::GetSessionEnumerator. Metode ini menghasilkan daftar sesi saat ini yang tersedia untuk titik akhir dan menambahkan penunjuk IAudioSessionControl untuk setiap sesi dalam daftar, jika belum ada.
  6. Gunakan antarmuka IAudioSessionEnumerator yang dikembalikan pada langkah sebelumnya untuk mengambil dan menghitung daftar sesi. Kontrol sesi untuk setiap sesi dapat diambil dengan memanggil IAudioSessionEnumerator::GetSession. Pastikan Anda memanggil AddRef untuk setiap kontrol sesi untuk mempertahankan jumlah referensi.
  7. Saat aplikasi mendapatkan pemberitahuan buat sesi, tambahkan penunjuk IAudioSessionControl dari sesi baru (diterima di IAudioSessionNotification::OnSessionCreated) ke daftar sesi yang ada.
Karena aplikasi mempertahankan daftar sesi ini dan mengelola masa pakai sesi berdasarkan persyaratan aplikasi, tidak ada mekanisme kedaluwarsa yang diberlakukan oleh sistem audio pada objek kontrol sesi.

Kontrol sesi valid selama aplikasi memiliki referensi ke kontrol sesi dalam daftar.

Contoh

Contoh kode berikut menunjukkan cara membuat objek enumerator sesi lalu menghitung sesi.

HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
    if (!pSessionManager)
    {
        return E_INVALIDARG;
    }

    HRESULT hr = S_OK;
    
    int cbSessionCount = 0;
    LPWSTR pswSession = NULL;
    
    IAudioSessionEnumerator* pSessionList = NULL;
    IAudioSessionControl* pSessionControl = NULL;
    
    // Get the current list of sessions.
    CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
    
    // Get the session count.
    CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));

    for (int index = 0 ; index < cbSessionCount ; index++)
    {
        CoTaskMemFree(pswSession);
        SAFE_RELEASE(pSessionControl);
        
        // Get the <n>th session.
        CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));

        CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));

        wprintf_s(L"Session Name: %s\n", pswSession);
    }

done:
    CoTaskMemFree(pswSession);
    SAFE_RELEASE(pSessionControl);
    SAFE_RELEASE(pSessionList);

    return hr;

}

Persyaratan

   
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Target Platform Windows
Header audiopolicy.h

Lihat juga

Antarmuka Audio Inti