Struttura WAVEFORMATEX (mmreg.h)
La struttura WAVEFORMATEX specifica il formato di dati di un flusso audio d'onda.
typedef struct tWAVEFORMATEX {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
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.
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.
Intestazione | mmreg.h (include Mmsystem.h, Mmreg.h, Mmsystem.h) |