Antarmuka IAudioSessionNotification (audiopolicy.h)

Antarmuka IAudioSessionNotification memberikan pemberitahuan saat sesi audio dibuat.

Warisan

Antarmuka IAudioSessionNotification mewarisi dari antarmuka IUnknown . IAudioSessionNotification juga memiliki jenis anggota berikut:

Metode

Antarmuka IAudioSessionNotification memiliki metode ini.

 
IAudioSessionNotification::OnSessionCreated

Metode OnSessionCreated memberi tahu proses terdaftar bahwa sesi audio telah dibuat.

Keterangan

Tidak seperti antarmuka WASAPI lainnya, yang diimplementasikan oleh komponen sistem WASAPI, antarmuka IAudioSessionNotification diimplementasikan oleh aplikasi. Untuk menerima pemberitahuan peristiwa, aplikasi meneruskan ke IAudioSessionManager2::RegisterSessionNotification metode pointer ke implementasi IAudioSessionNotification-nya .

Setelah mendaftarkan antarmuka IAudioSessionNotification-nya , aplikasi menerima pemberitahuan peristiwa dalam bentuk panggilan balik melalui metode di antarmuka.

Ketika aplikasi tidak perlu lagi menerima pemberitahuan, aplikasi memanggil metode IAudioSessionManager2::UnregisterSessionNotification . Metode ini menghapus pendaftaran antarmuka IAudioSessionNotification yang sebelumnya didaftarkan aplikasi.

Aplikasi tidak boleh mendaftarkan atau membatalkan pendaftaran panggilan balik pemberitahuan selama panggilan balik peristiwa.

Enumerator sesi mungkin tidak mengetahui sesi baru yang dilaporkan melalui IAudioSessionNotification. Jadi, jika aplikasi secara eksklusif bergantung pada enumerator sesi untuk mendapatkan semua sesi untuk titik akhir audio, hasilnya mungkin tidak akurat. Untuk mengatasi hal ini, aplikasi harus mempertahankan daftar secara manual. Untuk informasi selengkapnya, lihat IAudioSessionEnumerator.

Catatan Pastikan bahwa aplikasi menginisialisasi 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. Utas yang menjalankan antarmuka pengguna aplikasi harus diinisialisasi model utas apartemen.
 

Contoh

Contoh kode berikut menunjukkan implementasi sampel antarmuka IAudioSessionNotification .

class CSessionNotifications: public IAudioSessionNotification
{
private:

    LONG             m_cRefAll;
    HWND m_hwndMain;

    ~CSessionManager(){};

public:


    CSessionManager(HWND hWnd): 
    m_cRefAll(1),
    m_hwndMain (hWnd)

    {}

    // IUnknown
    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv)  
    {    
        if (IID_IUnknown == riid)
        {
            AddRef();
            *ppvInterface = (IUnknown*)this;
        }
        else if (__uuidof(IAudioSessionNotification) == riid)
        {
            AddRef();
            *ppvInterface = (IAudioSessionNotification*)this;
        }
        else
        {
            *ppvInterface = NULL;
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    
    ULONG STDMETHODCALLTYPE AddRef()
    {
        return InterlockedIncrement(&m_cRefAll);
    }
     
    ULONG STDMETHODCALLTYPE Release)()
    {
        ULONG ulRef = InterlockedDecrement(&m_cRefAll);
        if (0 == ulRef)
        {
            delete this;
        }
        return ulRef;
    }

    HRESULT OnSessionCreated(IAudioSessionControl *pNewSession)
    {
        if (pNewSession)
        {
            PostMessage(m_hwndMain, WM_SESSION_CREATED, 0, 0);
        }
    }
};

Persyaratan

Persyaratan Nilai
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