(轉)DSound開發常用的幾個結構

來源:互聯網
上載者:User

標籤:

 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開發常用的幾個結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.