Hangszintű változások észlelése és megválaszolása a rendszer részéről

Megtudhatja, hogyan észlelheti és válaszolhatja meg a rendszer hangszint-változásait. A Windows 10 1803-es verziójától kezdve az alkalmazás észlelni tudja, hogy a rendszer mikor csökkenti vagy mutálja az alkalmazás hangrögzítési és hangmegjelenítési streamjeinek hangszintjét. Előfordulhat például, hogy a rendszer elnémítja az alkalmazás streamjeit, amikor az háttérbe kerül.

A MediaCapture osztály használatával történő hangrögzítésről további információt az Alapszintű fénykép, videó és hangrögzítés a MediaCapture használatával című témakörben talál. A MediaPlayer használatával történő hanglejátszásról további információt a Hang és videó lejátszása a MediaPlayerrel című témakörben talál.

Az AudioStateMonitor osztály lehetővé teszi, hogy regisztráljon egy esemény fogadására, amikor a rendszer módosítja a hangrögzítés vagy a renderelési stream mennyiségét. Kérje le az AudioStateMonitor egy példányát a hangrögzítési streamek figyeléséhez a CreateForCaptureMonitoring meghívásával. A CreateForRenderMonitoring meghívásával lekérhet egy példányt a hangleképezési streamek figyeléséhez. Regisztráljon egy kezelőt az egyes monitorok SoundLevelChanged eseményéhez, hogy értesítést kapjon, ha a rendszer módosítja a megfelelő streamkategória hangját.

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

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

A rögzítési stream SoundLevelChanged kezelőjében ellenőrizheti az AudioStateMonitor-feladóSoundLevel tulajdonságát az új hangszint meghatározásához. Vegye figyelembe, hogy a rendszer soha nem szabad leengedni vagy "lecsukni" a rögzítési adatfolyamot. Csak elnémítva lehet, vagy vissza kell váltani teljes hangerőre. Ha a hangstream el van némítva, leállíthatja az adatgyűjtést. Ha a hangstream teljes hangerőre van visszaállítva, megkezdheti a rögzítést.

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;
    }
}

Az alábbi példakód a SoundLevelChanged kezelő implementációját mutatja be a hangleképezéshez. Az alkalmazás forgatókönyvétől és a lejátszott tartalom típusától függően érdemes szüneteltetni a hanglejátszást, ha a hangszint le van kapcsolva.

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();
    }
}

Egyszerű fénykép-, video- és hangrögzítés a MediaCapture