Condividi tramite


Uso di un dispositivo di comunicazione

In Windows 7, il pannello di controllo multimediale di Windows, Mmsys.cpl, fornisce una nuova scheda Comunicazioni . Questa scheda contiene opzioni che consentono a un utente di impostare le opzioni che definiscono il modo in cui il sistema gestisce un dispositivo di comunicazione. Un dispositivo di comunicazione viene utilizzato principalmente per effettuare o ricevere chiamate telefoniche sul computer. Per un computer con un solo dispositivo di rendering (altoparlante) e un dispositivo di acquisizione (microfono), questi dispositivi audio fungono anche da dispositivi di comunicazione predefiniti. Quando un utente si connette a un nuovo dispositivo, ad esempio un visore VR USB, il sistema esegue il rilevamento automatico del ruolo del dispositivo cercando le impostazioni di configurazione popolate dall'OEM. Se il sistema determina un dispositivo più adatto per scopi di comunicazione, il sistema assegna il ruolo eCommunications al dispositivo. Per questi dispositivi, il Mmsys.cpl Windows 7 fornisce l'opzione Dispositivo di comunicazione predefinito che consente a un utente di selezionare un dispositivo di comunicazione per il rendering audio (scheda Riproduzione) e l'acquisizione audio (scheda Registrazione ). Il sistema esegue il rilevamento automatico dei ruoli, ma non imposta un particolare dispositivo da usare per le comunicazioni. Questa operazione deve essere eseguita dall'utente. Il nuovo ruolo eCommunications consente a un'applicazione di distinguere tra un dispositivo scelto dall'utente per la gestione delle chiamate telefoniche e un dispositivo da usare come dispositivo multimediale (riproduzione musicale). Ad esempio, se l'utente ha un visore VR e un altoparlante connesso al computer, il sistema assegna il ruolo eConsole all'altoparlante e il ruolo eCommunications al visore VR. Dopo che l'utente seleziona il visore VR da usare come dispositivo di comunicazione, per sviluppare un'applicazione di comunicazione, puoi specificare il visore VR per il rendering di un flusso audio. Un'applicazione che l'utente non può modificare il ruolo del dispositivo assegnato dal sistema. Per altre informazioni sui ruoli del dispositivo, vedere Ruoli del dispositivo.

Applicazioni di comunicazione, ad esempio applicazioni VoIP e Unified Communication, inserire e ricevere chiamate telefoniche tramite un computer. Ad esempio, un'applicazione VoIP potrebbe assegnare un flusso contenente la notifica circolare all'endpoint di un set di dispositivi di comunicazione per il rendering dei flussi audio. Inoltre, l'applicazione potrebbe aprire i flussi di input vocale e output nei dispositivi endpoint di acquisizione e rendering impostati come dispositivi di comunicazione.

Per integrare le funzionalità di comunicazione nelle applicazioni, è possibile usare:

  • API MMDevice: per ottenere un riferimento all'endpoint del dispositivo di comunicazione.
  • WASAPI: per eseguire il rendering e l'acquisizione di flussi audio tramite il dispositivo di comunicazione. Il sistema operativo considera il flusso aperto in un dispositivo di comunicazione come flusso di comunicazione.

L'applicazione di comunicazione enumera i dispositivi e fornisce la gestione dei flussi per un flusso di comunicazione (rendering o acquisizione) nello stesso modo in cui gestirebbe un flusso non di comunicazione usando le API audio principali.

Una delle funzionalità che è possibile integrare nell'applicazione di comunicazione è l'attenuazione del flusso o dell'anatraggio. Questo comportamento definisce ciò che deve accadere ad altri suoni quando viene aperto un flusso di comunicazione, ad esempio quando viene ricevuta una telefonata nel dispositivo di comunicazione. Il sistema potrebbe disattivare o abbassare il volume audio del flusso non di comunicazione a seconda della scelta dell'utente. Il sistema audio genera eventi di anatraggio quando un flusso di comunicazione viene aperto o chiuso per il rendering o l'acquisizione di flussi. Per impostazione predefinita, il sistema operativo offre un'esperienza predefinita di anatraggio. Un'applicazione multimediale può sostituire il comportamento predefinito e gestire questi eventi per offrire un'esperienza di anatraggio personalizzata.

Le sezioni seguenti descrivono come usare le API audio di base per offrire un'esperienza di anatraggio personalizzata.

Recupero di un riferimento all'endpoint del dispositivo di comunicazione

Per usare il dispositivo di comunicazione, un client WASAPI diretto deve enumerare i dispositivi usando l'enumeratore di dispositivi. Ottenere un riferimento all'endpoint del dispositivo di comunicazione predefinito chiamando IMMDeviceEnumerator::GetDefaultAudioEndpoint. In questa chiamata, l'applicazione deve specificare eCommunications nel parametro Role per limitare l'enumerazione del dispositivo ai dispositivi di comunicazione. Dopo aver visualizzato un riferimento all'endpoint del dispositivo per il dispositivo, è possibile attivare i servizi con ambito per l'endpoint chiamando IMMDevice::Activate. Ad esempio, è possibile passare l'identificatore del servizio IID_IAudioClient per attivare un oggetto client audio e usarlo per la gestione dei flussi, l'identificatore IID_IAudioEndpointVolume per ottenere l'accesso ai controlli del volume dell'endpoint del dispositivo di comunicazione o l'identificatore IID_IAudioSessionManager per attivare il gestore di sessioni che consente di interagire con il motore dei criteri dell'endpoint. Per informazioni sulle operazioni di flusso, vedere Gestione di flusso.

Usando il riferimento IMMDevice , è anche possibile accedere all'archivio delle proprietà per l'endpoint del dispositivo. Questi valori delle proprietà, ad esempio il nome descrittivo del dispositivo e il nome del produttore, vengono popolati dall'OEM e consentono a un'applicazione di determinare le caratteristiche di un dispositivo di comunicazione. Per altre informazioni, vedere Proprietà del dispositivo.

Il codice di esempio seguente ottiene un riferimento all'endpoint del dispositivo di comunicazione predefinito per il rendering di un flusso audio.

IMMDevice *defaultDevice = NULL;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
            CLSCTX_INPROC_SERVER, 
            __uuidof(IMMDeviceEnumerator), 
            (LPVOID *)&deviceEnumerator);

hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, 
            eCommunications, &defaultDevice);

Gestione dei flussi