Condividi tramite


Formati di dispositivo

Per un'applicazione audio, un vantaggio dell'uso di un'API audio di livello superiore, ad esempio DirectSound o le funzioni waveOutXxx multimediali di Windows, è che l'API converte automaticamente tra i formati di flusso usati dall'applicazione e i formati usati dal dispositivo audio. Al contrario, le API audio principali sono più restrittive perché richiedono ai flussi dell'applicazione di usare formati uguali o strettamente correlati ai formati usati dal dispositivo. Pertanto, le applicazioni che usano le API audio di base per riprodurre o registrare flussi audio potrebbero essere necessarie per eseguire alcune o tutte le conversioni tra formati di flusso.

Un'applicazione che usa WASAPI per gestire i flussi in modalità condivisa può basarsi sul motore audio per eseguire solo conversioni di formato limitate. Il motore audio può convertire tra una dimensione di esempio PCM standard usata dall'applicazione e i campioni a virgola mobile usati dal motore per l'elaborazione interna. Tuttavia, il formato per un flusso di applicazioni deve in genere avere lo stesso numero di canali e la stessa frequenza di campionamento del formato di flusso usato dal dispositivo.

Se un'applicazione usa un dispositivo in modalità esclusiva, l'applicazione deve usare un formato di flusso supportato in modo esplicito dall'hardware audio. In modalità esclusiva, l'applicazione e il dispositivo scambiano dati audio direttamente, senza intervento dal motore audio.

Molti dispositivi audio supportano sia i formati di flusso PCM che non PCM. Tuttavia, il motore audio può combinare solo flussi PCM. Pertanto, solo i flussi in modalità esclusiva possono avere formati non PCM. Inoltre, solo i formati non PCM con velocità dati fissa sono supportati in modalità esclusiva. Un esempio di formato non PCM a frequenza fissa è un flusso audio Windows Media Audio Professional (WMA Pro) a 48 kHz che passa attraverso un collegamento S/PDIF (Sony/Philips Digital Interface) senza essere decodificato. Per altre informazioni sull'uso dei flussi WMA Pro su S/PDIF, vedere Specifica di intervalli di dati WMA Pro.

WASAPI usa una struttura WAVEFORMATEX o WAVEFORMATEXTENSIBLE per specificare un formato di flusso. Una struttura WAVEFORMATEXTENSIBLE è in effetti una struttura WAVEFORMATEX estesa per descrivere un'ampia gamma di formati. Qualsiasi formato che può essere descritto da una struttura WAVEFORMATEX autonoma può essere descritto anche da una struttura WAVEFORMATEXTENSIBLE.

Il primo membro della struttura WAVEFORMATEXTENSIBLE è una struttura WAVEFORMATEX . Il contenuto di una struttura WAVEFORMATEX indica se si tratta di una struttura WAVEFORMATEX autonoma o parte di una struttura WAVEFORMATEXTENSIBLE.

Una struttura WAVEFORMATEX autonoma può descrivere adeguatamente un formato con uno o due canali e una dimensione di esempio che è un multiplo di 8 bit. Per sé, una struttura WAVEFORMATEX non può specificare il mapping dei canali alle posizioni del parlante. Inoltre, anche se WAVEFORMATEX specifica le dimensioni del contenitore per ogni campione audio, non può specificare il numero di bit di precisione in un campione, ad esempio 20 bit di precisione in un contenitore a 24 bit. Al contrario, la struttura WAVEFORMATEXTENSIBLE può specificare sia il mapping dei canali agli altoparlanti che il numero di bit di precisione in ogni campione.

Per altre informazioni su WAVEFORMATEX e WAVEFORMATEXTENSIBLE, vedere la documentazione di Windows DDK.

A partire da Windows 7, WAVEFORMATEXTENSIBLE è stato esteso per rappresentare i formati di dispositivo per la trasmissione di audio codificati su un'interfaccia compatibile con IEC 61937. Per informazioni sulla nuova struttura, vedere Rappresentazione dei formati per le trasmissioni IEC 61937.

Specifica del formato del dispositivo

I metodi WASAPI seguenti usano le strutture WAVEFORMATEX e WAVEFORMATEXTENSIBLE per descrivere i formati di flusso:

Il metodo GetMixFormat recupera il formato di flusso utilizzato dal motore audio per l'elaborazione interna dei flussi in modalità condivisa. Il metodo usa sempre una struttura WAVEFORMATEXTENSIBLE, anziché una struttura WAVEFORMATEX autonoma, per specificare il formato.

Il metodo IsFormatSupported indica se un dispositivo endpoint audio supporta un formato di flusso specifico. Il chiamante deve specificare se il formato del flusso è destinato all'uso in modalità condivisa o in modalità esclusiva. Per i formati in modalità condivisa, il metodo esegue una query sul motore audio per determinare se supporta il formato specificato. Per i formati in modalità esclusiva, il metodo esegue una query sul driver di dispositivo. Alcuni driver di dispositivo segnalano che supportano un formato PCM a 1 canale o a 2 canali se il formato è specificato da una struttura WAVEFORMATEX autonoma, ma rifiuterà lo stesso formato se è specificato da una struttura WAVEFORMATEXTENSIBLE. Per ottenere risultati affidabili da questi driver, le applicazioni in modalità esclusiva devono chiamare IsFormatSupported due volte per ogni formato PCM a 1 canale o a 2 canali. Una chiamata deve usare una struttura WAVEFORMATEX autonoma per specificare il formato e l'altra chiamata deve usare una struttura WAVEFORMATEXTENSIBLE per specificare lo stesso formato.

Dopo che un'applicazione ha usato GetMixFormat o IsFormatSupported per trovare un formato appropriato per un flusso in modalità condivisa o in modalità esclusiva, l'applicazione può chiamare il metodo Initialize per inizializzare un flusso con tale formato. Un'applicazione che tenta di inizializzare un flusso in modalità condivisa con un formato non identico al formato di combinazione ottenuto dal metodo GetMixFormat , ma con lo stesso numero di canali e la stessa frequenza di campionamento del formato di combinazione, è probabile che abbia esito positivo. Prima di chiamare Initialize, l'applicazione può chiamare IsFormatSupported per verificare che Initialize accetti il formato.

Il formato di combinazione usato dal motore audio per l'elaborazione interna dei flussi in modalità condivisa è strettamente correlato, ma non è necessariamente identico a quello usato dal dispositivo endpoint audio in modalità condivisa. Tramite il pannello di controllo multimediale di Windows, Mmsys.cpl, l'utente può selezionare il formato di flusso che un dispositivo endpoint audio userà quando opera in modalità condivisa. Attieniti alla procedura seguente:

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

    controllo 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 riproduzione o dispositivi di registrazione.

  2. Dopo aver aperto la finestra Mmsys.cpl, selezionare un dispositivo dall'elenco dei dispositivi di riproduzione o dall'elenco dei dispositivi di registrazione e fare clic su Proprietà.

  3. Quando si apre la finestra delle proprietà, fare clic su Avanzate e selezionare un formato dall'elenco dei formati disponibili nella casella con etichetta Formato predefinito.

Si supponga, ad esempio, che l'utente selezioni il formato predefinito seguente nell'elenco dei formati disponibili per un dispositivo di riproduzione:

2 canali, 16 bit, 44100 Hz (qualità CD)

Questo è il formato che il dispositivo userà successivamente quando opera in modalità condivisa. In Windows Vista il motore audio userà una versione leggermente modificata di questo formato per l'elaborazione interna dei flussi in modalità condivisa. Il motore audio userà un formato con lo stesso numero di canali (due) e la stessa frequenza di campionamento (44100 Hz), ma convertirà campioni in numeri a virgola mobile prima di elaborarli. Il motore audio convertirà i campioni a virgola mobile nella combinazione di output in interi a 16 bit prima di eseguirli tramite il dispositivo.

Un'applicazione può eseguire una query sulla proprietà PKEY_AudioEngine_DeviceFormat di un dispositivo endpoint audio per ottenere il formato in modalità condivisa selezionato dall'utente per il dispositivo. Per informazioni sull'esecuzione di query sulle proprietà di un dispositivo, vedere Proprietà del dispositivo.

Alcune applicazioni potrebbero trovare il formato specificato dalla proprietà PKEY_AudioEngine_DeviceFormat di un dispositivo in modo che sia un formato adatto per l'apertura di un flusso in modalità esclusiva nel dispositivo. Altre applicazioni che gestiscono flussi in modalità esclusiva potrebbero avere requisiti aggiuntivi che impongono una negoziazione di formato complessa con il dispositivo. In genere, una di queste applicazioni costruisce un elenco di formati appropriati, con i formati preferiti all'inizio dell'elenco. L'applicazione chiama quindi In modo iterativo IsFormatSupported con ogni formato successivo nell'elenco, a partire dall'inizio dell'elenco, fino a trovare un formato supportato dal dispositivo.

Dispositivi endpoint audio