Sesi Audio

Sesi audio adalah sekelompok aliran audio terkait yang dapat dikelola klien WASAPI secara kolektif. Klien dapat mengontrol tingkat volume dan membisukan status setiap sesi individu. Sistem menerapkan volume yang ditentukan klien dan membisukan pengaturan secara seragam ke semua aliran dalam sesi.

Saat klien menginisialisasi aliran audio, klien menetapkan aliran audio ke sesi audio. Untuk informasi selengkapnya, lihat IAudioClient::Initialize.

Sesi audio berisi penyajian aliran atau mengambil aliran, tetapi tidak keduanya. Secara default, pengaturan volume dan bisukan untuk sesi penyajian tetap ada di seluruh mulai ulang sistem. Pengaturan volume dan bisukan untuk sesi pengambilan tidak persisten. (Sesi yang berisi aliran yang beroperasi dalam mode loopback diperlakukan sama dengan sesi pengambilan. Artinya, pengaturan sesi tidak persisten. Untuk informasi selengkapnya tentang mode loopback, lihat Perekaman Loopback.)

Setiap aliran audio milik tepat satu sesi. Klien menetapkan aliran audio ke sesi tertentu pada saat menginisialisasi objek stream. Aliran mempertahankan keanggotaannya dalam sesi selama masa pakai streaming. Setelah objek stream dibuat, objek ada sampai klien merilis referensi terakhir yang dihitung ke objek, lalu objek dihapus.

Meskipun klien tidak dapat mengubah sesi tempat aliran yang ada ditetapkan, itu dapat mencapai efek serupa dengan menghapus aliran (dengan merilis semua referensi ke dalamnya), membuat aliran baru untuk menggantikan aliran yang dihapus, dan menetapkan aliran baru ke sesi lain.

Setiap sesi penyajian mewakili subset aliran yang membentuk campuran global yang diputar melalui perangkat titik akhir audio tertentu. Campuran global menggabungkan semua sesi dari semua aplikasi yang berbagi perangkat.

Sering kali, aplikasi dengan beberapa aliran menetapkan semua alirannya ke sesi yang sama. Namun, aplikasi dapat, sebagai opsi, menetapkan aliran yang berbeda ke sesi yang berbeda. Aliran apa pun yang tidak ditetapkan aplikasi secara eksplisit ke sesi milik sesi default.

Aplikasi audio umum harus menghindari memodifikasi volume dan membisukan pengaturan untuk sesi. Sebagai gantinya, pengguna mengontrol pengaturan ini melalui antarmuka pengguna program kontrol. Misalnya, di Windows Vista, program yang disediakan sistem, Sndvol.exe, menampilkan kontrol volume dan kontrol bisu untuk setiap sesi penyajian aktif atau baru-baru ini aktif dalam sistem. Melalui kontrol ini, pengguna dapat menyesuaikan volume dan pengaturan bisukan untuk semua sesi dalam sistem.

Program Sndvol saat ini hanya menampilkan kontrol volume untuk perangkat titik akhir penyajian audio. Ini tidak menampilkan kontrol volume untuk perangkat pengambilan audio.

Sesi aktif jika berisi satu atau beberapa aliran aktif. Aliran aktif dalam status berjalan. Aliran tidak aktif dalam status dihentikan. Sesi menjadi aktif ketika aliran pertamanya menjadi aktif. Sesi menjadi tidak aktif ketika aliran aktif terakhirnya menjadi tidak aktif. Setelah sesi tidak aktif untuk jangka waktu tertentu, sistem mengubah status sesi dari tidak aktif menjadi kedaluwarsa.

Sndvol menampilkan kontrol volume dan bisu untuk semua sesi penyajian aktif dan tidak aktif. Sndvol menghapus kontrol volume dan bisu untuk sesi ketika status sesi berubah dari tidak aktif menjadi kedaluwarsa, atau ketika sesi berakhir. (Sesi berakhir ketika aliran terakhirnya dihapus; yaitu, ketika klien merilis jumlah referensi akhir pada objek streaming terakhir yang tersisa dalam sesi.) Satu pengecualian untuk aturan ini adalah untuk suara pemberitahuan sistem. Sndvol selalu menampilkan volume dan kontrol bisukan untuk suara pemberitahuan sistem terlepas dari status sesi untuk suara ini.

Biasanya, aliran milik sesi yang hanya mencakup proses yang berisi aplikasi yang membuat aliran. Namun, aplikasi memiliki opsi untuk menentukan sesi lintas proses yang menggabungkan aliran dari dua proses atau lebih.

WASAPI mendukung sesi lintas proses terutama sehingga:

  • Program Sndvol dapat menyajikan pengguna dengan satu kontrol volume untuk mengelola suara pemberitahuan sistem di semua aplikasi.
  • Pemutar media yang berjalan dalam satu proses dapat mengalirkan konten yang dilindungi ke program dekripsi yang berjalan dalam proses lain.

Mirip dengan pengaturan kontrol untuk sesi penyajian khusus proses, pengaturan kontrol untuk sesi penyajian lintas proses adalah, secara default, persisten di seluruh mulai ulang sistem. WASAPI menyediakan perilaku ini terutama untuk manfaat suara pemberitahuan sistem, yang harus mempertahankan volume pengguna dan pengaturan bisu karena campuran aplikasi bervariasi dari waktu ke waktu.

Program Sndvol melabeli kontrol volume untuk setiap sesi dengan nama tampilan dan ikon. Klien memiliki opsi untuk secara eksplisit menetapkan nama tampilan dan ikon ke sesi. Jika klien tidak menyediakan item ini, maka Sndvol menampilkan nama default dan ikon default sebagai gantinya. Nama default menggabungkan informasi seperti judul jendela aplikasi. Ikon default adalah ikon untuk jendela aplikasi. Hanya dalam kasus sesi khusus proses melakukan default ini memberikan informasi yang bermakna kepada pengguna. Perhatikan bahwa sesi lintas proses dapat dikaitkan dengan lebih dari satu aplikasi. Dalam hal ini, hanya nama tampilan dan ikon yang disediakan klien yang bermakna.

Meskipun pengaturan volume dan bisukan untuk sesi penyajian adalah, secara default, persisten di seluruh mulai ulang sistem, nama tampilan dan ikon yang disediakan klien tidak. Untuk memastikan bahwa Sndvol menampilkan nama dan ikon yang disediakan klien, klien harus secara eksplisit menetapkan nama dan ikon ke sesi pada saat klien menetapkan aliran pertama ke sesi. Sistem mempertahankan nama tampilan dan ikon untuk sesi hanya sampai sesi berakhir.

Setiap sesi diidentifikasi oleh GUID sesi. Pada saat klien membuka aliran, klien menetapkan streaming tersebut ke sesi tertentu. Klien menyediakan dua informasi berikut untuk mengidentifikasi sesi tersebut:

  • GUID sesi.
  • Apakah sesi adalah sesi lintas proses atau khusus proses—sesi khusus proses hanya berisi aliran dari proses klien.

Informasi ini cukup untuk membedakan sesi tertentu dari semua sesi lain di komputer yang sama. GUID sesi untuk sesi khusus proses secara unik mengidentifikasi sesi hanya dalam cakupan proses yang memiliki sesi. Sebaliknya, GUID sesi untuk sesi lintas proses unik dalam cakupan semua proses yang berjalan di komputer.

Dalam kasus sesi khusus proses, sistem menggunakan kombinasi GUID sesi dan ID proses untuk mengidentifikasi sesi secara unik dalam cakupan komputer. Dengan demikian, jika klien dalam dua proses berbeda menetapkan aliran masing-masing ke dua sesi khusus proses dengan GUID sesi yang identik, sistem memperlakukan sesi sebagai terpisah karena ID proses mereka berbeda. Selain itu, jika sesi lintas proses menggunakan GUID sesi yang sama dengan satu atau beberapa sesi khusus proses, sistem memperlakukan sesi lintas proses yang berbeda dari sesi khusus proses, meskipun mereka berbagi GUID sesi yang sama.

Misalnya, di Windows Vista, API tingkat yang lebih tinggi seperti fungsi Windows multimedia waveOutXxx dan DirectSound biasanya menetapkan aliran audio yang mereka buat ke sesi default khusus proses yang diidentifikasi oleh nilai GUID sesi GUID_NULL. Untuk klien API ini, sesi default untuk setiap proses klien terpisah dari sesi default untuk proses klien lain, meskipun sesi memiliki GUID sesi yang identik. Selain itu, jika satu atau beberapa aplikasi menetapkan aliran ke sesi lintas proses yang diidentifikasi oleh nilai GUID sesi GUID_NULL, maka sistem memperlakukan sesi lintas proses ini sebagai terpisah dari sesi default khusus proses yang berbagi GUID sesi yang sama. Oleh karena itu, program Sndvol menampilkan kontrol volume terpisah untuk setiap sesi default, khusus proses, dan menampilkan kontrol volume tambahan untuk sesi lintas proses yang diidentifikasi oleh nilai GUID sesi GUID_NULL, jika sesi tersebut ada.

Setiap sesi hanya dikaitkan dengan satu perangkat titik akhir audio. Jika dua sesi memiliki GUID sesi yang identik dan ID proses tetapi dikaitkan dengan perangkat yang berbeda, maka sistem memperlakukan dua sesi tersebut sebagai terpisah. Sesi tidak pernah dapat berisi aliran pengambilan dan penyajian karena aliran pengambilan hanya dapat dikaitkan dengan perangkat pengambilan dan aliran penyajian hanya dapat dikaitkan dengan perangkat penyajian.

Seperti disebutkan sebelumnya, volume dan pengaturan bisukan untuk sesi terus-menerus di seluruh mulai ulang sistem. Dua atau beberapa instans aplikasi dapat membuat sesi khusus proses dengan GUID sesi yang identik. Melalui program Sndvol, pengguna dapat memilih volume yang berbeda dan mematikan suara pengaturan untuk setiap sesi ini. Setelah sesi ini dihentikan, sistem mempertahankan pengaturan kontrol hanya dari salah satu sesi ini—sesi terakhir yang akan dihentikan. Nantinya, jika instans baru aplikasi membuat sesi khusus proses dengan GUID sesi yang sama seperti sebelumnya, sesi tersebut mewarisi volume yang disimpan sebelumnya dan pengaturan bisukan.

Aplikasi tidak boleh mencoba menambahkan aliran ke atau mengontrol tingkat volume sesi yang dimiliki oleh aplikasi lain yang tidak terkait. Selain itu, aplikasi tidak boleh mencoba mengontrol tingkat volume sesi yang dikelola sistem untuk suara pemberitahuan. Namun, aplikasi dapat memutar suara melalui sesi sistem untuk suara pemberitahuan dengan memanggil fungsi PlaySound . Untuk informasi selengkapnya, lihat Suara Pemberitahuan untuk Aplikasi Audio Warisan.

Aplikasi dapat mendaftar untuk menerima pemberitahuan ketika status sesi berubah. Untuk informasi selengkapnya, lihat Peristiwa Sesi Audio.

Dalam kasus yang jarang terjadi, aplikasi yang membuat sesi khusus proses mungkin perlu mengonsolidasikan kontrol sesi khusus proses untuk dua instans aplikasi atau lebih di bawah kontrol volume tunggal di Sndvol. Untuk informasi selengkapnya, lihat Mengelompokkan Parameter.

Panduan Pemrograman