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.
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
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