波形捕捉 (1)列舉 捕捉裝置

2021-04-27 06:05:22 字數 1418 閱讀 3117

列舉"捕捉裝置"

如果你的應用程式只是單純得通過使用者首選裝置用來捕捉聲音,那就沒有必要來列舉可用的裝置。當你通過呼叫directsoundcapturecreate8directsoundfullduplexcreate8方法來建立乙個裝置物件時,你可以宣告乙個預設裝置。更多資訊,請檢視

creating the capture device object。

列舉操作在以下情況下是必須的:

1.你的應用程式所需的效能並不是所有裝置都能滿提供。

2.你的應用程式需要2種或以上的裝置。

3.你希望提供使用者選擇裝置的功能。

列舉為了實現三個目的:

1.指明哪些硬體是可用的。

2.為每乙個裝置提供了乙個guid(全域性統一識別符號)。

3.允許你為每乙個列舉出來的裝置建立乙個臨時裝置物件,這樣你就可以獲取裝置的效能。

想要列舉裝置,你必須首先設定乙個**函式(在系統中這個函式將會在列舉每個裝置時被呼叫一次)。你可以在這個函式內執行任何操作,你也可以給這個函式隨意命名,但是你必須根據 dsenumcallback 的原型宣告它。如果想要繼續列舉裝置,那麼這個**函式必須返回true,否則返回false。比如,在找到乙個滿足你要求效能的裝置後。

乙個**函式的例子:

下面這個**函式將每個列舉出來的裝置名新增到核取方塊中,並且將它的guid儲存為資料項。前三個引數由裝置提供,第四個引數由directsoundenumerate函式傳入;這個引數能被用來傳遞任何32位的值,在本例中則是這個核取方塊的視窗控制代碼。在windows.h中定義的巨集被用來向核取方塊中新增字串和資料。

bool callback dsenumproc(lpguid lpguid, 

lpctstr lpszdesc,

lpctstr lpszdrvname, 

lpvoid lpcontext )

memcpy(lptemp, lpguid, 

sizeof

(guid));

}combobox_addstring(hcombo, lpszdesc);

combobox_setitemdata(hcombo, 

combobox_findstring(hcombo, 

0, lpszdesc),

lptemp );

free(lptemp);

return

(true);}

列舉在包含核取方塊的對話方塊被初始化的時候啟動。假設 hcombo 是這個核取方塊的控制代碼而 hdlg 是這個對話的控制代碼。 if

(failed(directsoundenumerate((lpdsenumcallback)dsenumproc,

(void*)

&hcombo)))

波形捕捉 (2)建立捕捉裝置物件

建立 捕捉裝置物件 你可以通過呼叫directsoundcapturecreate8或directsoundfullduplexcreate8函式來建立乙個捕捉裝置物件。這兩個函式都獲取乙個指向idirectsoundcapture8 介面的指標。directsoundcapturecreate的l...

演算法基礎(1) 列舉

列舉在大家看來可能是乙個非常簡單的問題,不就是乙個遍歷演算法嘛,有什麼好說的,然而,在參加了北京大學mooc的演算法基礎後,我直接被震驚了。原來列舉演算法還能這麼玩!好吧,不說有的沒得沒得了,先來看第乙個例子 熄燈問題 這個問題的描述如下 乙個由按鈕組成的矩陣,其中每行有6個按鈕,共5行。每個按鈕的...

c 基礎筆記 1 列舉

定義列舉一般不用中文,就像sql的欄位名一樣,效率會有影響,下面就實現為列舉值添自定義中文說明,然後獲取。1.建立乙個類,既然要新增自定義屬性,就必須繼承attribute public class enumhelper attribute public string description 2.建...