Aracılığıyla paylaş


Sistem tarafından yapılan ses düzeyi değişikliklerini algılama ve yanıtlama

Sistem tarafından yapılan ses düzeyi değişikliklerini algılamayı ve yanıtlamayı öğrenin. Windows 10, sürüm 1803'den itibaren uygulamanız, sistemin uygulamanızın ses yakalama ve ses işleme akışlarının ses düzeyini ne zaman düşürebileceğini veya kapatabileceğini algılayabilir. Örneğin, sistem arka plana geçtiğinde uygulamanızın akışlarının sesini kapatabilir.

MediaCapture sınıfını kullanarak ses yakalama hakkında bilgi edinmek için bkz. MediaCaptureile temel fotoğraf, video ve ses yakalama . MediaPlayerkullanarak ses oynatma hakkında bilgi için bkz. TBD.

AudioStateMonitor sınıfı, sistem bir ses yakalama veya oluşturma akışının ses seviyesini değiştirdiğinde bir etkinlik almak üzere kaydolmanızı sağlar. Ses yakalama akışlarını izlemek için AudioStateMonitor örneğini almak üzereCreateForCaptureMonitoring çağrısını yapın. CreateForRenderMonitoringçağırarak ses işleme akışlarını izlemek için bir örnek oluşturun. İlgili akış kategorisinin sesi sistem tarafından değiştirildiğinde bildirim almak üzere her monitörün SoundLevelChanged olayı için bir işleyici kaydedin.

AudioStateMonitor captureAudioStateMonitor;
AudioStateMonitor renderAudioStateMonitor;
captureAudioStateMonitor = AudioStateMonitor.CreateForCaptureMonitoring();
captureAudioStateMonitor.SoundLevelChanged += CaptureAudioStateMonitor_SoundLevelChanged;

renderAudioStateMonitor = AudioStateMonitor.CreateForRenderMonitoring();
renderAudioStateMonitor.SoundLevelChanged += RenderAudioStateMonitor_SoundLevelChanged;

Yakalama akışının SoundLevelChanged işleyicisinde, AudioStateMonitor gönderenin SoundLevel özelliğini denetleyerek yeni ses düzeyini belirleyebilirsiniz. Unutmayın ki bir yakalama akışı sistem tarafından asla ses seviyesi düşürülmemeli veya arka plana itilmemelidir. Ya ses kapatılmalı ya da tam ses seviyesine geri getirilmeli. Ses akışı sessize alınmışsa, devam eden yakalama işlemini durdurabilirsiniz. Ses akışı tam ses düzeyine geri yüklenirse yakalamaya yeniden başlayabilirsiniz.

bool isCapturingAudio = false;
bool capturingStoppedForAudioState = false;

private void CaptureAudioStateMonitor_SoundLevelChanged(AudioStateMonitor sender, object args)
{
    switch (sender.SoundLevel)
    {
        case SoundLevel.Full:
            if (capturingStoppedForAudioState)
            {
                MyStartAudioCapture();
                capturingStoppedForAudioState = false;
            }
            break;
        case SoundLevel.Muted:
            if (isCapturingAudio)
            {
                MyStopAudioCapture();
                capturingStoppedForAudioState = true;
            }
            break;
        case SoundLevel.Low:
            // This should never happen for capture
            Debug.WriteLine("Unexpected audio state.");
            break;
    }
}

Aşağıdaki kod örneği, ses işleme için SoundLevelChanged işleyicisinin bir uygulamasını gösterir. Uygulama senaryonuza ve çaldığınız içeriğin türüne bağlı olarak, ses seviyesi kısıldığında ses çalmayı duraklatmak isteyebilirsiniz.

bool contentIsPodcast; 
private void RenderAudioStateMonitor_SoundLevelChanged(AudioStateMonitor sender, object args)
{
    if ((sender.SoundLevel == SoundLevel.Full) ||
        (sender.SoundLevel == SoundLevel.Low && !contentIsPodcast))
    {
        m_mediaPlayer.Play();
    }
    else if ((sender.SoundLevel == SoundLevel.Muted) ||
         (sender.SoundLevel == SoundLevel.Low && contentIsPodcast))
    {
        // Pause playback if we�re muted or if we�re playing a podcast and are ducked
        m_mediaPlayer.Pause();
    }
}

MediaCapture ile Temel fotoğraf, video ve ses yakalama