Condividi tramite


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

Vedi anche

Waveform Audio

Strutture waveform