將 MMreg.h 結構 ()

WAVEATEX 結構會指定波浪音訊資料流程的資料格式。

語法

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

成員

wFormatTag

指定電壓音訊格式類型。 如需詳細資訊,請參閱接下來的<備註>一節。

nChannels

指定音訊資料的通道數目。 針對單音音訊,將此成員設定為 1。 若為立體,請將此成員設定為 2。

nSamplesPerSec

指定每個通道應該播放或錄製的取樣頻率。 如果 wFormatTag = WAVE_FORMAT_PCM, 則 nSamplesPerSec 的常見值為 8.0 kHz、11.025 kHz、22.05 kHz 和 44.1 kHz。 例如,若要指定 11.025 kHz 的取樣頻率,請將 nSamplesPerSec 設定為 11025。 針對非 PCM 格式,此成員應該根據製造商的格式標記規格來計算。

nAvgBytesPerSec

以每秒位元組為單位指定所需的平均資料傳輸速率。 此值對於估計緩衝區大小很有用。

nBlockAlign

以位元組為單位指定區塊對齊方式。 區塊對齊是 wFormatTag 格式類型之最小不可部分完成資料單位的大小。 如果 wFormatTag = WAVE_FORMAT_PCM 或 wFormatTag = WAVE_FORMAT_IEEE_FLOAT,請將 nBlockAlign 設定為 (nChannels*wBitsPerSample)/8 ,這是單一音訊框架的大小。 針對非 PCM 格式,此成員應該根據製造商的格式標記規格來計算。

播放和錄製軟體應該一次處理多個 nBlockAlign 位元組的資料。 從裝置寫入和讀取的資料應該一律從區塊的開頭開始。

wBitsPerSample

針對 wFormatTag所指定的格式類型,指定每個樣本的位數。 如果 wFormatTag = WAVE_FORMAT_PCM, 則 wBitsPerSample 應該設定為 8 或 16。 如果 wFormatTag = WAVE_FORMAT_IEEE_FLOAT, 則 wBitsPerSample 應設定為 32。 針對非 PCM 格式,請根據格式標籤的製造商規格設定此成員的值。 某些壓縮配置無法定義 wBitsPerSample的值。 在此情況下,請將 wBitsPerSample 設定為零。

cbSize

指定附加至 WAVEFORMATEX 結構結尾的額外格式資訊大小,以位元組為單位。 非 PCM 格式可以使用這項資訊來儲存 wFormatTag的額外屬性。 如果 wFormatTag不需要額外的資訊,請將此成員設定為零。 針對WAVE_FORMAT_PCM格式,用戶端應該忽略此成員, (其值隱含為零) 。 由於所有用戶端可能未遵循此規則,因此建議您針對WAVE_FORMAT_PCM格式將 cbSize 初始化為零。

備註

WAVEFORMATEX 結構只能描述一部分格式,而其格式可由 其使用,而該格式可由「其」結構 所描述。 例如,PULSEATEX 可以描述單聲道或 (雙通道) 立體脈衝程式碼調色 (PCM) 串流,其中含有 8 位或 16 位整數樣本值,或具有 32 位浮點樣本值。 此外,WAVEFORMATEX 也可以描述熱門的非 PCM 格式,例如 AC-3 和 WMA Pro。

GEOMETRATEX 可以明確描述單聲道或立體 PCM 格式,每個樣本的有效位數目與範例容器大小相同。 若要描述具有兩個以上的通道的 PCM 格式,需要有通道遮罩來指定喇叭組態 (,也就是通道與實體喇叭位置的對應) 。 為了描述每個樣本有效位數目小於範例容器大小的 PCM 格式 (,例如,儲存在三位元組容器中的 20 位樣本) 需要一個其要求為「其」,以指定有效樣本位數目和範例容器大小。

在標頭檔 Mmreg.h (中定義 16 位格式標籤的非 PCM 格式,例如,WAVE_FORMAT_MPEG) 。 其 WFormatTag 成員包含 FORMATATEX 的格式標記。 指定 MMreg.h 中未定義格式標記的非 PCM 格式,該結構包含識別格式的 GUID。 如有必要,硬體廠商可以獨立產生 GUID 值,以識別新的格式。 不需要向 Microsoft 註冊 GUID。

如需關於其與其與其為其不同之差異的詳細資訊,請參閱 可延伸 Wave-Format 描述元

wFormatTag成員會設定為 Mmreg.h 中定義的其中一個波浪格式標籤。 下表列出一些較常見的非特殊格式標記。

wFormatTag 值 意義
WAVE_FORMAT_PCM PCM (以整數格式) 調調的脈衝程式碼。
WAVE_FORMAT_IEEE_FLOAT IEEE 浮點格式的 PCM 資料。
WAVE_FORMAT_DRM 受 Microsoft Digital Rights Management) 保護之數位音訊內容的 DRM 編碼格式 (。
WAVE_FORMAT_EXTENSIBLE 可延伸的 WAVEFORMATEX 結構 (請參閱 WAVEFORMATEXTENSIBLE) 。
WAVE_FORMAT_ALAW A-law 編碼格式。
WAVE_FORMAT_MULAW Mu-law 編碼格式。
WAVE_FORMAT_ADPCM ADPCM (調適型差異脈衝碼) 資料。
WAVE_FORMAT_MPEG MPEG-1 資料格式 (資料流程符合 ISO 11172-3 音訊規格) 。
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (也稱為 Dolby Digital) over S/PDIF。
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro over S/PDIF。
 

如需WAVE_FORMAT_Xxx 格式的完整清單,請參閱 Mmreg.h。

WAVEATEX 與 PCMWAVEFORMAT 結構幾乎完全相同,這是用來指定 PCM 格式的過時結構。 唯一的差別在於WAVEATEX 包含 cbSize 成員,而 PCMWAVEFORMAT 則不會。 根據慣例,wFormatTag = WAVE_FORMAT_PCM (時,應該忽略cbSize,因為 cbSize隱含為零) 。 此慣例可讓驅動程式軟體在 PCM 格式的情況下,以相同方式處理WAVEATEX 和 PCMWAVEFORMAT 結構。 如需 PCMWAVEFORMAT 的詳細資訊,請參閱Microsoft Windows SDK檔。

如果 wFormatTag = WAVE_FORMAT_PCM 或 wFormatTag = WAVE_FORMAT_IEEE_FLOAT,請將 cbSize 設定為零。 對於 wFormatTag的其他所有值, cbSize 會指定附加多少位元組的額外格式資料至「其」結構。

如果 wFormatTag = WAVE_FORMAT_EXTENSIBLE,請將 cbSize 設定為 sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) 加上附加至「其」子系之任何格式特定資料的大小。

需求

   
標頭 mmreg.h (包括 Mmsystem.h、Mmreg.h、Mmsystem.h)

另請參閱

WAVEFORMATEXTENSIBLE