Struttura WAVEFORMATEXTENSIBLE (mmreg.h)
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
La struttura WAVEFORMATEXTENSIBLE definisce il formato dei dati audio waveform per i formati con più di due canali o risoluzioni di esempio superiori rispetto a quanto consentito da WAVEFORMATEX. Può anche essere utilizzato per definire qualsiasi formato che può essere definito da WAVEFORMATEX.
Sintassi
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
Members
Format
Struttura WAVEFORMATEX che specifica il formato di base. Il membro wFormatTag deve essere WAVE_FORMAT_EXTENSIBLE. Il membro cbSize deve essere almeno 22.
Samples
Unione che descrive il formato di esempio.
Samples.wValidBitsPerSample
Numero di bit di precisione nel segnale. In genere uguale a WAVEFORMATEX.wBitsPerSample. WBitsPerSample è tuttavia la dimensione del contenitore e deve essere un multiplo di 8, mentre wValidBitsPerSample può essere qualsiasi valore che non superi le dimensioni del contenitore. Ad esempio, se il formato usa esempi a 20 bit, wBitsPerSample deve essere almeno 24, ma wValidBitsPerSample è 20.
Samples.wSamplesPerBlock
Numero di campioni contenuti in un blocco compresso di dati audio. Questo valore viene usato nella stima del buffer. Questo valore viene usato con formati compressi con un numero fisso di campioni all'interno di ogni blocco. Questo valore può essere impostato su 0 se un numero variabile di campioni è contenuto in ogni blocco di dati audio compressi. In questo caso, le informazioni sulla stima del buffer e sulla posizione devono essere ottenute in altri modi.
Samples.wReserved
Riservato per l'uso interno da parte del sistema operativo. Impostare su 0.
dwChannelMask
Maschera di bit che specifica l'assegnazione dei canali nel flusso alle posizioni del parlante.
SubFormat
Sottoformattare i dati, ad esempio KSDATAFORMAT_SUBTYPE_PCM. Le informazioni sul sottoformatto sono simili a quella fornita dal tag nel membro wFormatTag della struttura WAVEFORMATEX.
Commenti
WAVEFORMATEXTENSIBLE può descrivere qualsiasi formato che può essere descritto da WAVEFORMATEX, ma fornisce supporto aggiuntivo per più di due canali, per una maggiore precisione nel numero di bit per campione e per i nuovi schemi di compressione.
WAVEFORMATEXTENSIBLE può essere eseguito in modo sicuro a WAVEFORMATEX, perché configura semplicemente i byte aggiuntivi specificati da WAVEFORMATEX.cbSize.
Il membro dwChannelMask specifica quali canali sono presenti nel flusso multicanale. Il bit meno significativo corrisponde all'altoparlante sinistro anteriore, il bit meno significativo successivo corrisponde all'altoparlante anteriore destro e così via. I bit, in ordine di significato, sono definiti come segue.
Posizione del parlante | Flag bit |
---|---|
SPEAKER_FRONT_LEFT | 0x1 |
SPEAKER_FRONT_RIGHT | 0x2 |
SPEAKER_FRONT_CENTER | 0x4 |
SPEAKER_LOW_FREQUENCY | 0x8 |
SPEAKER_BACK_LEFT | 0x10 |
SPEAKER_BACK_RIGHT | 0x20 |
SPEAKER_FRONT_LEFT_OF_CENTER | 0x40 |
SPEAKER_FRONT_RIGHT_OF_CENTER | 0x80 |
SPEAKER_BACK_CENTER | 0x100 |
SPEAKER_SIDE_LEFT | 0x200 |
SPEAKER_SIDE_RIGHT | 0x400 |
SPEAKER_TOP_CENTER | 0x800 |
SPEAKER_TOP_FRONT_LEFT | 0x1000 |
SPEAKER_TOP_FRONT_CENTER | 0x2000 |
SPEAKER_TOP_FRONT_RIGHT | 0x4000 |
SPEAKER_TOP_BACK_LEFT | 0x8000 |
SPEAKER_TOP_BACK_CENTER | 0x10000 |
SPEAKER_TOP_BACK_RIGHT | 0x20000 |
I canali specificati in dwChannelMask devono essere presenti nell'ordine prescritto (dal bit meno significativo all'alto). Ad esempio, se vengono specificati solo SPEAKER_FRONT_LEFT e SPEAKER_FRONT_RIGHT, gli esempi per l'altoparlante sinistro anteriore devono venire prima nel flusso interleaved. Il numero di bit impostati in dwChannelMask deve corrispondere al numero di canali specificati in WAVEFORMATEX.nChannels.
Per la compatibilità con le versioni precedenti, qualsiasi formato di onda che può essere specificato da una struttura WAVEFORMATEX autonoma può essere definito anche da una struttura WAVEFORMATEXTENSIBLE . Pertanto, ogni tag in formato onda in mmreg.h ha un GUID SubFormat corrispondente. La tabella seguente illustra alcuni tag di formato onda tipici e i GUID SubFormat corrispondenti. Questi GUID sono definiti in Ksmedia.h.
tag Wave-Format | GUID di Sottoformat |
---|---|
WAVE_FORMAT_PCM | KSDATAFORMAT_SUBTYPE_PCM |
WAVE_FORMAT_IEEE_FLOAT | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVE_FORMAT_DRM | KSDATAFORMAT_SUBTYPE_DRM |
WAVE_FORMAT_ALAW | KSDATAFORMAT_SUBTYPE_ALAW |
WAVE_FORMAT_MULAW | KSDATAFORMAT_SUBTYPE_MULAW |
WAVE_FORMAT_ADPCM | KSDATAFORMAT_SUBTYPE_ADPCM |
Poiché WAVEFORMATEXTENSIBLE è una versione estesa di WAVEFORMATEX, può descrivere formati aggiuntivi che non possono essere descritti solo da WAVEFORMATEX . I fornitori sono liberi di definire i propri GUID SubFormat per identificare i formati proprietari per i quali non esistono tag in formato onda.
Le strutture seguenti, per formati estesi specifici, sono definite come WAVEFORMATEXTENSIBLE.
Definizione | Valore di SubFormat |
---|---|
WAVEFORMATIEEEEFLOATEX | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVEFORMATPCMEX | KSDATAFORMAT_SUBTYPE_PCM |
Requisiti
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Intestazione | mmreg.h |