Struttura WAVEFORMATEX (mmreg.h)

La struttura WAVEFORMATEX specifica il formato di dati di un flusso audio d'onda.

Sintassi

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

Members

wFormatTag

Specifica il tipo di formato audio waveform. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

nChannels

Specifica il numero di canali di dati audio. Per l'audio monofonico, impostare questo membro su 1. Per stereo, impostare questo membro su 2.

nSamplesPerSec

Specifica la frequenza di campionamento in cui deve essere riprodotto o registrato ogni canale. Se wFormatTag = WAVE_FORMAT_PCM, i valori comuni per nSamplesPerSec sono 8,0 kHz, 11,025 kHz, 22,05 kHz e 44,1 kHz. Ad esempio, per specificare una frequenza di campionamento di 11,025 kHz, impostare nSamplesPerSec su 11025. Per i formati non PCM, questo membro deve essere calcolato in base alla specifica del produttore del tag di formato.

nAvgBytesPerSec

Specifica la velocità di trasferimento dei dati media richiesta in byte al secondo. Questo valore è utile per stimare le dimensioni del buffer.

nBlockAlign

Specifica l'allineamento del blocco in byte. L'allineamento del blocco è la dimensione dell'unità atomica minima di dati per il tipo di formato wFormatTag . Se wFormatTag = WAVE_FORMAT_PCM o wFormatTag = WAVE_FORMAT_IEEE_FLOAT, impostare nBlockAlign su (nChannels*wBitsPerSample)/8, ovvero la dimensione di un singolo frame audio. Per i formati non PCM, questo membro deve essere calcolato in base alla specifica del produttore per il tag di formato.

La riproduzione e la registrazione del software devono elaborare un multiplo di byte nBlockAlign di dati alla volta. I dati scritti e letti da un dispositivo devono sempre iniziare all'inizio di un blocco.

wBitsPerSample

Specifica il numero di bit per campione per il tipo di formato specificato da wFormatTag. Se wFormatTag = WAVE_FORMAT_PCM, wBitsPerSample deve essere impostato su 8 o 16. Se wFormatTag = WAVE_FORMAT_IEEE_FLOAT, wBitsPerSample deve essere impostato su 32. Per i formati non PCM, impostare il valore di questo membro in base alla specifica del produttore per il tag di formato. Alcuni schemi di compressione non possono definire un valore per wBitsPerSample. In questo caso, impostare wBitsPerSample su zero.

cbSize

Specifica le dimensioni, in byte, delle informazioni di formato aggiuntive aggiunte alla fine della struttura WAVEFORMATEX. Queste informazioni possono essere usate dai formati non PCM per archiviare attributi aggiuntivi per wFormatTag. Se non sono richieste informazioni aggiuntive da wFormatTag, impostare questo membro su zero. Per i formati WAVE_FORMAT_PCM, i client devono ignorare questo membro (il relativo valore è implicitamente zero). Poiché tutti i client potrebbero non seguire questa regola, è consigliabile inizializzare cbSize su zero per i formati WAVE_FORMAT_PCM.

Commenti

La struttura WAVEFORMATEX può descrivere solo un subset dei formati che possono essere descritti dalla struttura WAVEFORMATEXTENSIBLE . Ad esempio, WAVEFORMATEX può descrivere flussi stereo a virgola mobile a virgola mobile (PCM) mono o (a due canali) con valori di esempio integer a 8 bit o a 16 bit o con valori di esempio a virgola mobile a 32 bit. Inoltre, WAVEFORMATEX può descrivere i formati non PCM più diffusi, ad esempio AC-3 e WMA Pro.

WAVEFORMATEX può descrivere in modo univoco i formati PCM mono o stereo per i quali il numero di bit validi per campione corrisponde alle dimensioni del contenitore di esempio. Per descrivere un formato PCM con più di due canali, è necessario WAVEFORMATEXTENSIBLE, che dispone di una maschera di canale per specificare la configurazione dell'altoparlante, ovvero il mapping dei canali alle posizioni del parlante fisico. Per descrivere un formato PCM per il quale il numero di bit validi per campione è minore delle dimensioni del contenitore di esempio (ad esempio, un campione a 20 bit archiviato in un contenitore a tre byte) richiede WAVEFORMATEXTENSIBLE, che specifica sia il numero di bit di esempio validi che le dimensioni del contenitore di esempio.

WAVEFORMATEX può descrivere i formati non PCM per i quali i tag di formato a 16 bit sono definiti nel file di intestazione Mmreg.h (ad esempio, WAVE_FORMAT_MPEG). Il membro wFormatTag di WAVEFORMATEX contiene il tag di formato. Specificare un formato non PCM per il quale un tag di formato non è definito in Mmreg.h da una struttura WAVEFORMATEXTENSIBLE, che contiene un GUID che identifica il formato. Se necessario, un fornitore di hardware può generare in modo indipendente un valore GUID per identificare un nuovo formato. La registrazione del GUID con Microsoft non è necessaria.

Per altre informazioni sulle differenze tra WAVEFORMATEX e WAVEFORMATEXTENSIBLE, vedere Descrittori extensible Wave-Format.

Il membro wFormatTag è impostato su uno dei tag di formato onda definiti in Mmreg.h. I tag per alcuni dei formati nonproprietari più comuni sono elencati nella tabella seguente.

Valore wFormatTag Significato
WAVE_FORMAT_PCM Dati PCM (pulse-code modulated) in formato integer.
WAVE_FORMAT_IEEE_FLOAT Dati PCM in formato a virgola mobile IEEE.
WAVE_FORMAT_DRM Formato con codifica DRM (per contenuti audio digitali protetti da Microsoft Digital Rights Management).
WAVE_FORMAT_EXTENSIBLE Struttura Extensible WAVEFORMATEX (vedere WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW Formato codificato con legge.
WAVE_FORMAT_MULAW Formato con codifica mu-law.
WAVE_FORMAT_ADPCM Dati ADPCM (adaptive differential pulse-code modulated).
WAVE_FORMAT_MPEG Formato dati MPEG-1 (flusso conforme alla specifica AUDIO ISO 11172-3).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (noto anche come Dolby Digital) su S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro su S/PDIF.
 

Per l'elenco completo dei formati WAVE_FORMAT_Xxx , vedere Mmreg.h.

WAVEFORMATEX è quasi identico alla struttura PCMWAVEFORMAT, che è una struttura obsoleta usata per specificare i formati PCM. L'unica differenza è che WAVEFORMATEX contiene un membro cbSize e PCMWAVEFORMAT non lo fa. Per convenzione, cbSize deve essere ignorato quando wFormatTag = WAVE_FORMAT_PCM (perché cbSize è implicitamente zero). Questa convenzione consente al software driver di trattare le strutture WAVEFORMATEX e PCMWAVEFORMAT in modo identico nel caso di un formato PCM. Per altre informazioni su PCMWAVEFORMAT, vedere la documentazione di Microsoft Windows SDK.

Se wFormatTag = WAVE_FORMAT_PCM o wFormatTag = WAVE_FORMAT_IEEE_FLOAT, impostare cbSize su zero. Per tutti gli altri valori di wFormatTag, cbSize specifica il numero di byte di dati di formato aggiuntivi aggiunti alla struttura WAVEFORMATEX.

Se wFormatTag = WAVE_FORMAT_EXTENSIBLE, impostare cbSize su sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) più le dimensioni di tutti i dati specifici del formato accodati alla struttura WAVEFORMATEXTENSIBLE.

Requisiti

   
Intestazione mmreg.h (include Mmsystem.h, Mmreg.h, Mmsystem.h)

Vedi anche

WAVEFORMATEXTENSIBLE