標籤:
WAVEFORMATEX
WAVEFORMATEX
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
};
這個結構定義了WAVE音頻資料的格式。只有所有音頻包含的一般格式資訊包含在這個結構中,對於需要其它資訊的格式,這個結構包含在其中並且作為第一個參數。
成員變數
wFormatTag
Wave聲音格式。格式標籤是微軟為一些壓縮演算法註冊的,完整的格式標籤列表在mmreg.h中定義。對於單聲道或者雙聲道PCM資料,這個數值必須是WAVE_FORMAT_PCM
nChannels
WAVE資料的聲道數量。非立體聲使用單聲道,立體聲使用雙聲道。
nSamplesPerSec
採樣率,單位HZ。如果wFormatTag為WAVE_FORMAT_PCM,一般這個數值是8.0K、11.025K、22.05K、或者44.1K。對於非PCM格式,這個變數必須通過格式標籤的廠家說明書計算。
nAvgBytesPerSec
平均資料轉送速率。如果格式標籤是WAVE_FORMAT_PCM,這個值必須等於年SamplesPerSec和BlockAlign的乘積。對於非PCM格式,這個變數必須通過格式標籤的廠家說明書計算。
nBlockAlign
區塊隊列,單位位元組。區塊隊列是對于格式來說最小的單元。如果格式是WAVE_FORMAT_PCM 或者 WAVE_FORMAT_EXTENSIBLE,這個數值必須等於nChannels和wBitsPerSample的乘積除以8。對於非PCM格式,這個變數必須通過格式標籤的廠家說明書計算。
軟體必須每次執行一個nBlockAlign位元組的加倍。寫入和從一個裝置讀取資料必須在一個區塊的開始。
wBitsPerSample
每次採樣的位元組。如果格式標籤是WAVE_FORMAT_PCM,這個值必須等於8或者16。對於非PCM格式,這個變數必須通過格式標籤的廠家說明書計算。如果格式標籤是WAVE_FORMAT_EXTENSIBLE,這個值可以是任何8的倍數。一些壓縮方案不能定義這個值,所以可以為0。
cbSize
大小,單位位元組。作為額外的格式資訊掛接在WAVEFORMATEX結構的結果。這個資訊可以被非PCM格式用來儲存額外格式標籤的屬性。如果沒有額外的資訊,這個成員必須設定為0。對於WAVE_FORMAT_PCM格式,也僅對於這種格式,這個成員被忽略。
DSBUFFERDESC
DSBUFFERDESC
{
DWORD dwSize;
DWORD dwFlags;
DWORD dwBufferBytes;
DWORD dwReserved;
LPWAVEFORMATEX lpwfxFormat;
GUID guid3DAlgorithm;
};
這個結構描述了一個新緩衝區對象的屬性。IDirectSound8::CreateSoundBuffer和DirectSoundFullDuplexCreate8函數使用。為了相容DX7或者更早的DX,這個結構的早期版本DSBUFFERDESC1仍然在Dsound.h中存在。
成員變數
dwSize
結構的大小,單位位元組。這個成員必須在結構體使用以前被定義。
dwFlags
定義緩衝區的相容能力,下面的值可以被定義
Value |
Description |
DSBCAPS_CTRL3D |
緩衝區具有3D控制相容性。不能和DSBCAPS_CTRLPAN綁定,而且不能和lpwfxFormat中為設定立體聲格式的緩衝區所設定。 |
DSBCAPS_CTRLFREQUENCY |
可以改變頻率 |
DSBCAPS_CTRLFX |
支援特效處理。緩衝區必須足夠大,可以保持至少DSBSIZE_FX_MIN毫秒的資料。 |
DSBCAPS_CTRLPAN |
具有面板控制的相容性。不能和DSBCAPS_CTRL3D標誌位綁定 |
DSBCAPS_CTRLPOSITIONNOTIFY |
The buffer has position notification capability. See Remarks. |
DSBCAPS_CTRLVOLUME |
可以控制音量。 |
DSBCAPS_GETCURRENTPOSITION2 |
The IDirectSoundBuffer8::GetCurrentPositionmethod uses the new behavior of the play cursor. In DirectSound in DirectX 1, the play cursor was significantly ahead of the actual playing sound on emulated sound cards; it was directly behind the write cursor. Now, if the DSBCAPS_GETCURRENTPOSITION2 flag is specified, the application can get a more accurate play cursor. If this flag is not specified, the old behavior is preserved for compatibility. Note that this flag affects only emulated sound cards. If a DirectSound driver is present, the play cursor is accurate for DirectSound in all versions of DirectX. |
DSBCAPS_GLOBALFOCUS |
全域緩衝區標誌。設定了這個標誌位,如果使用者切換焦點到其它程式,即使新的程式也使用DSound,程式也能繼續播放它的緩衝區。一個例外情況是切換到的程式使用DSSCL_WRITEPRIMARY標誌作為協調層級。這種情況下,其它程式的全域聲音也是不能聽到的。 |
DSBCAPS_LOCDEFER |
在播放的時候緩衝區可以被分配到硬體或者軟體資源中。這個標誌位只有使用聲音管理的緩衝區才可以設定。 |
DSBCAPS_LOCHARDWARE |
緩衝區必須使用硬體混音。如果裝置不支援硬體混音或者需求的硬體記憶體不可用,IDirectSound8::CreateSoundBuffer的方法會失敗。程式必須保證有混音頻道可以為緩衝區所使用,這種情況是不能保證的。如果DSBCAPS_LOCSOFTWARE和這個標誌位都沒被指定,緩衝區優先使用這個標誌位。硬體緩衝區在64位作業系統中是不被支援的。 |
DSBCAPS_LOCSOFTWARE |
這個緩衝區必須在軟體記憶體中,使用軟體混音器,即使DSBCAPS_STATIC被指定和硬體資源可用的情況下也不例外。 |
DSBCAPS_MUTE3DATMAXDISTANCE |
The sound is reduced to silence at the maximum distance. The buffer will stop playing when the maximum distance is exceeded, so that processor time is not wasted. Applies only to software buffers. |
DSBCAPS_PRIMARYBUFFER |
The buffer is a primary buffer. If this value is not specified, a secondary sound buffer is created. Cannot be combined with DSBCAPS_CTRLFX. |
DSBCAPS_STATIC |
The buffer is placed in on-board hardware memory, if available. No error occurs if such memory is not available. This flag has no effect on cards using the PCI bus. Cannot be combined with DSBCAPS_CTRLFX. |
DSBCAPS_STICKYFOCUS |
TThe buffer has sticky focus. If the user switches to another application not using DirectSound, the application‘s normal buffers are muted, but sticky focus buffers are still audible. |
轉自:http://blog.sina.com.cn/s/blog_4de8abbb01000atg.html
(轉)DSound開發常用的幾個結構