Routing automatico del flusso

Questo articolo descrive come aggiornare un'implementazione WASAPI per sfruttare i vantaggi del routing automatico dei flussi.

A partire da Windows 7, ogni volta che il dispositivo audio predefinito cambia, il flusso di riproduzione audio di un'app viene facilmente trasferito dal dispositivo audio predefinito precedente al nuovo dispositivo audio predefinito. Questo trasferimento viene eseguito automaticamente senza codice aggiuntivo dell'applicazione. Tuttavia, prima di Windows 10 versione 1607, le app che usavano l'API sessione audio windows di basso livello (WASAPI) non potevano partecipare a questa funzionalità di routing automatico del flusso. Le app che usano WASAPI erano necessarie per implementare la propria forma di routing di flusso aggiungendo codice aggiuntivo per rilevare l'arrivo e la rimozione dei dispositivi audio e passare il flusso a tali dispositivi in base alle esigenze. Le applicazioni che usano WASAPI che non implementano il proprio meccanismo di routing di flusso all'arrivo o alla rimozione dei dispositivi hanno rischiato di offrire un'esperienza utente inferiore a quella ideale.

A partire da Windows 10 versione 1607, le app che usano WASAPI possono sfruttare il routing automatico dei flussi. Se l'applicazione usa WASAPI, è consigliabile aggiornare l'applicazione per sfruttare questa nuova funzionalità seguendo questa procedura:

  1. Windows 10, versione 1607, definisce due nuovi GUID che possono essere usati per attivare un'interfaccia di rendering o acquisizione audio con routing automatico del flusso, DEVINTERFACE_AUDIO_RENDER e DEVINTERFACE_AUDIO_CAPTURE. Ottenere una rappresentazione di stringa di questi GUID chiamando StringFromIID. L'esempio seguente mostra questa chiamata per il GUID di rendering audio.

    PWSTR audioRenderGuidString;
    StringFromIID(DEVINTERFACE_AUDIO_RENDER, &audioRenderGuidString);
    
  2. Attivare l'endpoint audio passando la stringa dell'identificatore alla funzione WASAPI ActivateAudioInterfaceAsync . L'esempio seguente passa l'identificatore di rendering audio ottenuto nel passaggio 1:

    //Activate the default audio interface
    ActivateAudioInterfaceAsync(audioRenderGuidString
                                __uuidof(IAudioClient),
                                NULL,
                                completionHandler.Get(),
                                operation.GetAddressOf()));
    
  3. Liberare la memoria allocata per contenere l'identificatore dell'endpoint:

    CoTaskMemFree(audioRenderGuidString);  //free the string memory
    

Dopo aver modificato l'app per attivare l'interfaccia audio nel modo descritto in precedenza, partecipa alla funzionalità di routing automatico del flusso.

Per dimostrare il routing automatico del flusso, usare un portatile o un tablet dotato di altoparlanti interni per riprodurre l'audio. Dovresti ascoltare l'audio riprodotto attraverso gli altoparlanti interni del dispositivo. Durante la riproduzione dell'audio, collegare un paio di cuffie. Ora dovresti ascoltare l'audio riprodotto attraverso le cuffie. Scollegare quindi le cuffie e l'audio dovrebbe instradare automaticamente agli altoparlanti interni.

Routing di flusso

MediaDevice.GetDefaultAudioRenderId

MediaDevice.GetDefaultAudioCaptureId

ActivateAudioInterfaceAsync