Kontrol Volume Sesi

Seperti yang dijelaskan sebelumnya, klien WASAPI dapat mengontrol tingkat volume setiap sesi audio secara individual. WASAPI menerapkan pengaturan volume untuk sesi secara seragam ke semua aliran dalam sesi. Setiap tingkat volume adalah nilai dalam rentang 0,0 hingga 1,0, di mana 0,0 menunjukkan keheningan dan 1,0 menunjukkan volume penuh (tanpa peledakan).

Klien secara implisit membuat sesi dengan menetapkan aliran pertama ke sesi tersebut. Tingkat volume default sesi baru adalah 1.0. Seperti yang dibahas sebelumnya, pengguna dapat menyesuaikan tingkat volume sesi melalui antarmuka pengguna program kontrol (misalnya, Sndvol) yang merupakan klien WASAPI. Pengaturan kontrol persisten.

Selain pengaturan volume yang dikontrol klien, sistem menerapkan pengaturan volumenya sendiri ke sesi. Pengaturan ini didasarkan pada kebijakan audio dan berubah secara dinamis sebagai respons terhadap perubahan aliran yang membentuk campuran audio global. Untuk informasi selengkapnya tentang kebijakan audio, lihat Komponen Audio Mode Pengguna.

Perangkat lunak sistem yang mengimplementasikan kontrol volume untuk setiap aliran mengalikan sampel PCM dalam aliran dengan tingkat volume yang efektif. Tingkat volume yang efektif adalah hasil dari mengalikan pengaturan volume klien dan sistem. Dengan demikian, perubahan amplitude sinyal yang dihasilkan adalah kombinasi linier dari tingkat volume klien dan sistem. Misalnya, jika tingkat volume klien adalah 0,8 dan tingkat volume sistem adalah 0,5, tingkat volume yang efektif adalah (0,8).(0,5) = 0,4.

Perhatikan bahwa kenyaringan yang dirasakan tidak linier sehubungan dengan amplitudo sinyal. Sebaliknya, kenyaringan bervariasi kira-kira sebagai logaritma tingkat volume v:

kenyaringan dalam desibel = 20.log₁₀(v)

Dengan demikian, pengaturan v = 0,5 mempertegas kenyaringan sinyal asli (sinyal sebelum tingkat volume diterapkan) oleh 6 desibel, pengaturan v = 0,25 memperpendek sinyal dengan 12 desibel, dan sebagainya. Tingkat volume v = 1.0, yang sesuai dengan 0 desibel, tidak mengubah tingkat sinyal asli.

Aplikasi audio dengan antarmuka pengguna untuk mengontrol tingkat volume biasanya menampilkan slider yang menghasilkan perubahan dalam kenyaringan yang dirasakan yang secara linier sebanding dengan perubahan posisi slider. Untuk menghasilkan hubungan linier antara kenyaringan yang dirasakan dan posisi slider, aplikasi harus menentukan hubungan nonlinear antara tingkat volume v dan posisi slider. Untuk informasi selengkapnya, lihat Kontrol Volume Audio-Tapered.

Seperti yang dijelaskan sebelumnya, program kontrol volume sistem, Sndvol, menampilkan slider volume untuk sesi audio yang diputar di setiap perangkat penyajian audio. Slider ini muncul di kotak grup berlabel Aplikasi di jendela SndVol. Biasanya, setiap sesi berisi semua aliran pemutaran dari jendela aplikasi tertentu. Melalui slider di jendela Sndvol, pengguna mengontrol tingkat volume aplikasi audio individual.

Sebagai aturan umum, aplikasi harus menetapkan semua aliran pemutarannya ke sesi audio yang sama. WASAPI tidak mencegah aplikasi mendistribusikan aliran pemutarannya di antara beberapa sesi. Namun, proliferasi slider volume yang dihasilkan di Sndvol mungkin membingungkan pengguna.

Sebagai opsi, jendela aplikasi dapat menampilkan penggerak volume. Penggeser aplikasi harus mencerminkan status penggeser Sndvol yang sesuai setiap saat. Dengan demikian, jika pengguna mengubah tingkat volume dengan memindahkan penggeser di jendela aplikasi, penggeser yang sesuai di jendela Sndvol harus bergerak sepihak dengan penggeser aplikasi. Demikian pula, jika pengguna memindahkan slider Sndvol, maka penggeleksi aplikasi harus bergerak sepihak dengan slider Sndvol.

Untuk mendukung perilaku ini, WASAPI mengimplementasikan antarmuka ISimpleAudioVolume . Ketika pengguna memindahkan penggeser aplikasi, aplikasi memanggil metode ISimpleAudioVolume::SetMasterVolume untuk menyesuaikan tingkat volume sesi yang sesuai. Sndvol memantau perubahan volume yang dilakukan melalui metode ini dan mencerminkan perubahan dalam slider volume yang ditampilkannya. Selain itu, aplikasi dapat menerima pemberitahuan perubahan volume sesi yang dilakukan pengguna melalui Sndvol. Untuk tujuan ini, aplikasi mengimplementasikan antarmuka IAudioSessionEvents dan mendaftarkan antarmuka dengan WASAPI. Setelah itu, setiap kali pengguna mengubah tingkat volume sesi melalui Sndvol, aplikasi menerima panggilan pemberitahuan melalui metode IAudioSessionEvents::OnSimpleVolumeChanged. Untuk contoh kode yang mengimplementasikan antarmuka IAudioSessionEvents , lihat Peristiwa Sesi Audio. Untuk contoh kode yang mendaftarkan antarmuka IAudioSessionEvents , lihat Peristiwa Audio untuk Aplikasi Audio Warisan.

Antarmuka ISimpleAudioVolume menerapkan tingkat volume yang sama secara seragam ke semua saluran dalam sesi audio. Meskipun antarmuka ini harus memenuhi persyaratan kontrol volume dari sebagian besar aplikasi, beberapa aplikasi mungkin memerlukan kemampuan kontrol volume yang lebih khusus. Antarmuka IAudioStreamVolume mengontrol volume aliran individu dalam sesi relatif terhadap aliran lain dalam sesi. IAudioStreamVolume juga memungkinkan klien untuk secara individual mengontrol tingkat volume semua saluran dalam aliran. Misalnya, aplikasi mungkin menggunakan kemampuan ini untuk mencapai efek audio seperti mensimulasikan pergerakan spasial sumber audio dengan menggeser dari kiri ke kanan. Antarmuka khusus lainnya, IChannelAudioVolume, mengontrol tingkat volume saluran individual dalam sesi. Misalnya, aplikasi mungkin menggunakan IChannelAudioVolume untuk menerapkan kontrol keseimbangan untuk sistem suara stereophonic.

Penggeser volume dalam kotak Aplikasi di Sndvol hanya mencerminkan perubahan volume yang dilakukan melalui antarmuka ISimpleAudioVolume . Mereka tidak mencerminkan perubahan volume yang dilakukan melalui antarmuka IAudioStreamVolume dan IChannelAudioVolume . Meskipun beberapa aplikasi mungkin memungkinkan pengguna untuk secara langsung atau tidak langsung mengontrol pengaturan volume melalui IAudioStreamVolume dan IChannelAudioVolume, pengembang harus menghindari menyajikan penggeser aplikasi untuk pengaturan volume ini yang kemungkinan akan membingungkan pengguna dengan penggeser volume di Sndvol. Jika tidak, pengguna mungkin memindahkan slider aplikasi yang mengharapkan untuk melihat perubahan yang tercermin dalam slider Sndvol dan menjadi bingung ketika tidak ada perubahan seperti itu terjadi. Pengembang dapat menghindari masalah ini melalui desain antarmuka pengguna yang cermat.

Tingkat volume efektif dari saluran apa pun dalam submix sesi, seperti yang didengar di speaker, adalah produk dari empat faktor tingkat volume berikut:

  • Tingkat volume per saluran aliran dalam sesi, yang dapat dikontrol klien melalui metode di antarmuka IAudioStreamVolume .
  • Tingkat volume per saluran sesi, yang dapat dikontrol klien melalui metode di antarmuka IChannelAudioVolume .
  • Tingkat volume master sesi, yang dapat dikontrol klien melalui metode di antarmuka ISimpleAudioVolume .
  • Tingkat volume berbasis kebijakan sesi, yang secara dinamis dimodifikasi sistem saat campuran global berubah.

Masing-masing dari empat faktor tingkat volume dalam daftar sebelumnya adalah nilai dalam rentang 0,0 hingga 1,0, di mana 0,0 menunjukkan keheningan dan 1,0 menunjukkan volume penuh (tanpa redaman). Tingkat volume yang efektif juga merupakan nilai dalam rentang 0,0 hingga 1,0.

Mesin audio menerapkan tingkat volume yang efektif untuk setiap saluran ke saluran dalam aliran sebelum mencampur aliran dengan aliran lain dalam sesi audio. Jika ada nilai sampel dalam saluran melebihi 0 desibel setelah mesin audio mengalikannya dengan tingkat volume yang efektif, mesin akan mengklip sampel sebelum menambahkannya ke submix sesi.

Kontrol Volume