Aracılığıyla paylaş


Oturum Ses Denetimleri

Daha önce açıklandığı gibi WASAPI istemcileri, herses oturumunun ses düzeyini tek tek denetleyebiliyor. WASAPI, oturumun birim ayarını oturumdaki tüm akışlara tekdüzen uygular. Her birim düzeyi, 0,0 ile 1,0 aralığındaki bir değerdir; burada 0,0 sessizliği, 1,0 ise tam birimi gösterir (azaltma yoktur).

İstemci, ilk akışı bu oturuma atayarak örtük olarak bir oturum oluşturur. Yeni oturumun varsayılan birim düzeyi 1.0'dır. Daha önce açıklandığı gibi kullanıcı, WASAPI istemcisi olan bir denetim programının (örneğin, Sndvol) kullanıcı arabirimi aracılığıyla oturumun ses düzeyini ayarlayabilir. Denetim ayarları kalıcıdır.

sistem, istemci tarafından denetlenen birim ayarlarına ek olarak oturumlara kendi birim ayarlarını uygular. Bu ayarlar ses ilkesini temel alır ve genel ses karışımını oluşturan akışlardaki değişikliklere yanıt olarak dinamik olarak değişir. Ses ilkesi hakkında daha fazla bilgi için bkz. User-Mode Ses Bileşenleri.

Her akış için birim denetimini uygulayan sistem yazılımı, akıştaki PCM örneklerini etkili birim düzeyiyle çarpar. Etkili birim düzeyi, istemci ve sistem birim ayarlarının çarpımının sonucudur. Bu nedenle, sinyal genliğindeki ortaya çıkan değişiklik, istemci ve sistem hacim düzeylerinin doğrusal bir bileşimidir. Örneğin, istemci birim düzeyi 0,8 ve sistem birim düzeyi 0,5 ise, etkin birim düzeyi (0,8)olur.(0,5) = 0,4.

Algılanan ses düzeyinin sinyal genliğine göre doğrusal olmadığını unutmayın. Bunun yerine, ses düzeyi yaklaşık olarak ses düzeyi v'nin logaritması olarak değişir:

desibeller içinde yükseklik = 20.log₁₀(v)

Bu nedenle, v = 0,5 ayarı özgün sinyalin yüksekliğini (ses düzeyi uygulanmadan önceki sinyal) 6 desibel ile hafifletir, v = 0,25 ayarı sinyali 12 desibel ile hafifletir, vb. 0 desibel'e karşılık gelen bir ses düzeyi v = 1.0, özgün sinyal düzeyini değiştirmez.

Ses düzeyini denetlemeye yönelik kullanıcı arabirimlerine sahip ses uygulamaları genellikle, kaydırıcı konumundaki değişikliklerle doğrusal olarak orantılı olarak algılanan ses düzeyinde değişiklikler oluşturan kaydırıcılar görüntüler. Algılanan ses düzeyi ile kaydırıcı konumu arasında doğrusal bir ilişki oluşturmak için uygulamanın ses düzeyi v ile kaydırıcı konumu arasında doğrusal olmayan bir ilişki tanımlaması gerekir. Daha fazla bilgi için bkz. Audio-Tapered Birim Denetimleri.

Daha önce açıklandığı gibi, sistem ses denetimi programı Sndvol, her ses işleme cihazında oynatılan ses oturumları için ses kaydırıcılarını görüntüler. Bu kaydırıcılar, SndVol penceresinde uygulamalar etiketli grup kutusunda görünür. Genellikle her oturum belirli bir uygulama penceresindeki tüm kayıttan yürütme akışlarını içerir. Sndvol penceresindeki kaydırıcılar aracılığıyla kullanıcılar tek tek ses uygulamalarının ses düzeylerini denetler.

Genel bir kural olarak, bir uygulamanın tüm kayıttan yürütme akışlarını aynı ses oturumuna ataması gerekir. WASAPI, bir uygulamanın kayıttan yürütme akışlarını birden çok oturuma dağıtmasını engellemez. Ancak, Sndvol'de ses düzeyi kaydırıcılarının ortaya çıkan çoğalması kullanıcıların kafasını karıştırabilir.

Bir seçenek olarak, bir uygulama penceresi ses kaydırıcısını görüntüleyebilir. Uygulama kaydırıcısı, ilgili Sndvol kaydırıcısının durumunu her zaman yansıtmalıdır. Bu nedenle, kullanıcı uygulama penceresinde kaydırıcıyı hareket ettirerek ses düzeyini değiştirirse, Sndvol penceresindeki ilgili kaydırıcı uygulama kaydırıcısıyla birlikte hareket etmelidir. Benzer şekilde, kullanıcı Sndvol kaydırıcısını taşırsa, uygulama kaydırıcısı Sndvol kaydırıcısıyla birlikte hareket etmelidir.

WASAPI, bu davranışı desteklemek için ISimpleAudioVolume arabirimini uygular. Kullanıcı uygulama kaydırıcısını hareket ettirdiğinde, uygulama oturum ses düzeyini uygun şekilde ayarlamak için ISimpleAudioVolume::SetMasterVolume yöntemini çağırır. Sndvol, bu yöntemle yapılan birim değişikliklerini izler ve görüntülediği ses düzeyi kaydırıcılarındaki değişiklikleri yansıtır. Buna ek olarak, bir uygulama kullanıcının Sndvol aracılığıyla yaptığı oturum hacmi değişikliklerinin bildirimlerini alabilir. Bu amaçla, uygulama bir IAudioSessionEvents arabirimi uygular ve arabirimi WASAPI'ye kaydeder. Bundan sonra, kullanıcı Sndvol aracılığıyla oturum hacmi düzeyini her değiştirdiğinde, uygulama IAudioSessionEvents::OnSimpleVolumeChanged yöntemi aracılığıyla bir bildirim çağrısı alır. IAudioSessionEvents arabirimi uygulayan bir kod örneği için bkz. Ses Oturumu Olayları. IAudioSessionEvents arabirimini kaydeden bir kod örneği için bkz. Eski Ses Uygulamaları için Ses Olayları.

ISimpleAudioVolume arabirimi, aynı ses düzeyini bir ses oturumundaki tüm kanallara aynı şekilde uygular. Bu arabirim çoğu uygulamanın birim denetimi gereksinimlerini karşılaması gerekse de, birkaç uygulama daha özel birim denetimi özellikleri gerektirebilir. IAudioStreamVolume arabirimi, oturumdaki diğer akışlara göre bir oturumdaki tek bir akışın hacmini denetler. IAudioStreamVolume ayrıca istemcinin akıştaki tüm kanalların ses düzeylerini ayrı ayrı denetlemesini sağlar. Örneğin bir uygulama, soldan sağa doğru kaydırma yaparak bir ses kaynağının uzamsal hareketinin benzetimi gibi ses efektleri elde etmek için bu özelliği kullanabilir. IChannelAudioVolumebaşka bir özel arabirim, bir oturumdaki tek tek kanalların ses düzeylerini denetler. Örneğin, bir uygulama stereofonik ses sistemi için denge denetimleri uygulamak için IChannelAudioVolume kullanabilir.

Sndvol'daki Uygulamaları kutusundaki ses kaydırıcıları yalnızca ISimpleAudioVolume arabirimi aracılığıyla yapılan ses düzeyi değişikliklerini yansıtır. IAudioStreamVolume ve IChannelAudioVolume arabirimleri aracılığıyla yapılan birim değişikliklerini yansıtmaz. Bazı uygulamalar kullanıcıların IAudioStreamVolume ve IChannelAudioVolume aracılığıyla ses düzeyi ayarlarını doğrudan veya dolaylı olarak denetlemesine olanak sağlasa da, geliştiricilerin kullanıcıların Sndvol'daki ses kaydırıcılarıyla karıştırabileceği bu ses düzeyi ayarları için uygulama kaydırıcıları sunmaktan kaçınması gerekir. Aksi takdirde kullanıcı, değişikliğin Sndvol kaydırıcısına yansıtıldığını görmeyi bekleyen bir uygulama kaydırıcısını hareket ettirebilir ve böyle bir değişiklik olmadığında kafası karışabilir. Geliştiriciler dikkatli kullanıcı arabirimi tasarımıyla bu sorundan kaçınabilir.

Oturum alt miksindeki herhangi bir kanalın konuşmacılarda duyulurken etkili ses düzeyi, aşağıdaki dört ses düzeyi faktörünün ürünüdür:

  • İstemcilerin IAudioStreamVolume arabirimindeki yöntemler aracılığıyla denetleyebileceği, oturumdaki akışların kanal başına birim düzeyleri.
  • İstemcilerin IChannelAudioVolume arabirimindeki yöntemler aracılığıyla denetleyebileceği, oturumun kanal başına birim düzeyi.
  • İstemcilerin ISimpleAudioVolume arabirimindeki yöntemler aracılığıyla denetleyebileceği oturumun ana birim düzeyi.
  • Genel karışım değiştikçe sistemin dinamik olarak değiştirdiği, oturumun ilke tabanlı birim düzeyi.

Yukarıdaki listede yer alan dört birim düzeyi faktörünün her biri 0,0 ile 1,0 aralığındaki bir değerdir; burada 0,0 sessizliği, 1,0 ise tam birimi gösterir (hafifletme yoktur). Geçerli birim düzeyi ayrıca 0,0 ile 1,0 aralığındaki bir değerdir.

Ses altyapısı, akışı ses oturumundaki diğer akışlarla karıştırmadan önce her kanal için geçerli ses düzeyini akıştaki kanallara uygular. Ses altyapısı bunları etkin ses düzeyiyle çarpdıktan sonra kanaldaki örnek değerler 0 desibel'i aşarsa, altyapı örnekleri oturum alt örneğine eklemeden önce klipsler.

birim denetimlerini