Condividi tramite


Registrazione loopback

In modalità loopback, un client di WASAPI può acquisire il flusso audio riprodotto da un dispositivo endpoint di rendering. Per aprire un flusso in modalità loopback, il client deve:

  • Ottenere un'interfaccia IMMDevice per il dispositivo endpoint di rendering.
  • Inizializzare un flusso di acquisizione in modalità loopback nel dispositivo dell'endpoint di rendering.

Dopo aver seguito questi passaggi, il client può chiamare il metodo IAudioClient::GetService per ottenere un'interfaccia IAudioCaptureClient nel dispositivo dell'endpoint di rendering.

WASAPI fornisce la modalità loopback principalmente per supportare l'annullamento dell'eco acustico (AEC). Tuttavia, altri tipi di applicazioni audio potrebbero trovare la modalità loopback utile per acquisire la combinazione di sistema riprodotta dal motore audio.

Nell'esempio di codice in Acquisizione di un flusso, la funzione RecordAudioStream può essere facilmente modificata per configurare un flusso di acquisizione in modalità loopback. Le modifiche necessarie sono:

Nelle versioni di Windows precedenti a Windows 10 1703, il client di acquisizione in modalità pull non riceve eventi quando un flusso viene inizializzato con il buffer basato sugli eventi ed è abilitato per il loopback. Per ovviare a questo problema, inizializzare un flusso di rendering in modalità guidata dagli eventi. Ogni volta che il client riceve un evento per il flusso di rendering, deve segnalare al client di acquisizione di eseguire il thread di acquisizione che legge il set successivo di campioni dal buffer dell'endpoint di acquisizione. In Windows 10 versioni 1703 e successive sono supportati i client di loopback basati su eventi e non è più necessaria la soluzione alternativa che coinvolge il flusso di rendering.

Un client può abilitare la modalità loopback solo per un flusso in modalità condivisa (AUDCLNT_SHAREMODE_SHARED). I flussi in modalità esclusiva non possono funzionare in modalità loopback.

L'implementazione del loopback da WASAPI dipende dalle funzionalità dell'hardware. Se l'hardware supporta un pin di loopback nell'endpoint di rendering, WASAPI usa l'audio fornito su questo pin per il flusso di loopback. Quando l'hardware non supporta un pin di loopback, WASAPI copia il flusso di output dal motore audio nel buffer di acquisizione dell'applicazione loopback, oltre a copiare i dati audio nel pin di rendering dell'hardware.

Alcuni fornitori di hardware implementano dispositivi di loopback (anziché aggiungere istanze nei dispositivi di rendering) nelle schede audio. Anche se i dispositivi di loopback hardware sono simili in funzione alla modalità loopback WASAPI, possono essere più difficili da usare.

I dispositivi di loopback hardware presentano i seguenti svantaggi per le applicazioni audio:

  • Non tutti gli adattatori audio hanno dispositivi di loopback. Pertanto, le applicazioni che dipendono da essi non funzioneranno su tutti i sistemi.
  • Prima che un'applicazione possa registrare da un dispositivo loopback, l'utente deve identificare il dispositivo di loopback e abilitarlo per l'uso.

Diversi fornitori assegnano nomi diversi ai dispositivi di loopback hardware. I nomi seguenti sono esempi:

  • Stereo Mix
  • Waveout Mix
  • Output misto
  • Cosa senti

La mancanza di nomi standardizzati potrebbe causare difficoltà a identificare un dispositivo di loopback in un elenco di nomi di dispositivo.

Un dispositivo di loopback hardware è un dispositivo di acquisizione. Pertanto, se un adattatore supporta un dispositivo di loopback, un'applicazione audio può registrare dal dispositivo nello stesso modo in cui registra da qualsiasi altro dispositivo di acquisizione.

Ad esempio, se si seleziona un dispositivo di loopback hardware come dispositivo di acquisizione predefinito, è possibile usare la funzione RecordAudioStream (senza modifiche) nell'esempio di codice in Acquisizione di un flusso per acquisire il flusso dal dispositivo. È anche possibile usare un'API audio legacy, ad esempio le funzioni waveInXxx multimediali di Windows, per acquisire il flusso dal dispositivo.

Se la scheda audio contiene un dispositivo di loopback hardware, è possibile usare il pannello di controllo multimediale windows, Mmsys.cpl, per designare il dispositivo come dispositivo di acquisizione predefinito. Attieniti alla procedura seguente:

  1. Per eseguire Mmsys.cpl, aprire una finestra del prompt dei comandi e immettere il comando seguente:

    control mmsys.cpl
    

    In alternativa, è possibile eseguire Mmsys.cpl facendo clic con il pulsante destro del mouse sull'icona dell'altoparlante nell'area di notifica, che si trova sul lato destro della barra delle applicazioni e selezionando Dispositivi di registrazione.

  2. Dopo aver aperto la finestra Mmsys.cpl, fare clic con il pulsante destro del mouse in un punto qualsiasi dell'elenco dei dispositivi di registrazione e verificare che l'opzione Mostra dispositivi disabilitati sia selezionata. In caso contrario, se il dispositivo di loopback è disabilitato, non verrà visualizzato nell'elenco.

  3. Esplorare l'elenco dei dispositivi di registrazione per individuare il dispositivo di loopback (se esistente). Se il dispositivo di loopback è disabilitato, abilitarlo facendo clic con il pulsante destro del mouse sul dispositivo e scegliendo Abilita.

  4. Infine, per selezionare il dispositivo di loopback come dispositivo di acquisizione predefinito, fare clic con il pulsante destro del mouse sul dispositivo e scegliere Imposta come dispositivo predefinito.

WASAPI supporta la registrazione del loopback indipendentemente dal fatto che l'hardware audio contenga un dispositivo di loopback o se l'utente abbia abilitato il dispositivo.

Windows Vista fornisce la tecnologia DRM (Digital Rights Management). I provider di contenuti si basano su DRM per proteggere la musica proprietaria o altri contenuti da copie non autorizzate e altri usi illegali. Analogamente, un driver audio attendibile non consente a un dispositivo di loopback di acquisire flussi digitali che contengono contenuto protetto. Windows Vista consente solo ai driver attendibili di riprodurre contenuto protetto. Per altre informazioni sui driver attendibili e sulla tecnologia DRM, vedere la documentazione di Windows DDK.

Il loopback WASAPI per impostazione predefinita contiene la combinazione di tutto l'audio riprodotto, indipendentemente dalla sessione di Servizi terminal da cui proviene l'audio. Ad esempio, è possibile eseguire un client di loopback in un servizio in esecuzione nella sessione 0 e acquisire audio da tutte le sessioni utente, nonché l'audio riprodotto dalla sessione 0.

A partire da Windows 10 Build 20348 puoi includere o escludere processi specifici e i relativi elementi figlio dall'acquisizione di loopback passando un AUDIOCLIENT_ACTIVATION_PARAMS nella chiamata a IMMDevice::Activate. Vedi l'esempio di acquisizione audio loopback dell'applicazione.

Desktop remoto consente il reindirizzamento dell'audio al client. Questa operazione viene implementata creando nuovi dispositivi audio visualizzati solo per la sessione.

Gestione dei flussi