Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Informazioni su come rilevare e rispondere alle modifiche del livello audio dal sistema. A partire da Windows 10, versione 1803, l'app può rilevare quando il sistema abbassa o disattiva il livello audio dei flussi audio di cattura e rendering dell'app. Ad esempio, il sistema potrebbe disattivare i flussi audio dell'app quando passa in background.
Per informazioni sull'acquisizione di audio con la classe MediaCapture , vedi Acquisizione di foto, video e audio di base con MediaCapture. Per informazioni sulla riproduzione audio con MediaPlayer, vedi Riprodurre audio e video con MediaPlayer.
La classe AudioStateMonitor consente di registrare per ricevere un evento quando il sistema modifica il volume di un'acquisizione audio o di un flusso di rendering. Ottenere un'istanza di AudioStateMonitor per il monitoraggio dei flussi di acquisizione audio chiamando CreateForCaptureMonitoring. Ottenere un'istanza per il monitoraggio dei flussi di rendering audio chiamando CreateForRenderMonitoring. Registrare un gestore per l'evento SoundLevelChanged di ogni monitor per ricevere una notifica quando l'audio per la categoria di flusso corrispondente viene modificato dal sistema.
AudioStateMonitor captureAudioStateMonitor;
AudioStateMonitor renderAudioStateMonitor;
captureAudioStateMonitor = AudioStateMonitor.CreateForCaptureMonitoring();
captureAudioStateMonitor.SoundLevelChanged += CaptureAudioStateMonitor_SoundLevelChanged;
renderAudioStateMonitor = AudioStateMonitor.CreateForRenderMonitoring();
renderAudioStateMonitor.SoundLevelChanged += RenderAudioStateMonitor_SoundLevelChanged;
Nel gestore SoundLevelChanged per il flusso di acquisizione, puoi controllare la proprietà SoundLevel del mittente AudioStateMonitor per determinare il nuovo livello audio. Si noti che un flusso di acquisizione non deve mai essere abbassato o attenuato dal sistema. Dovrebbe essere solo disattivato o riportato al volume completo. Se il flusso audio è disattivato, è possibile arrestare un'acquisizione in corso. Se il flusso audio viene ripristinato in un volume completo, è possibile avviare di nuovo l'acquisizione.
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;
}
}
L'esempio di codice seguente illustra un'implementazione del gestore SoundLevelChanged per il rendering audio. A seconda dello scenario dell'app e del tipo di contenuto che stai riproducendo, potresti voler sospendere la riproduzione audio quando il livello audio è abbassato automaticamente.
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();
}
}
Argomenti correlati
acquisizione di foto, video e audio di base con MediaCapture