日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

波形捕捉:(1)枚举捕捉设备

發(fā)布時(shí)間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 波形捕捉:(1)枚举捕捉设备 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

枚舉"捕捉設(shè)備"

后在網(wǎng)上找到類(lèi)似翻譯:DirectSound學(xué)習(xí)筆記(1):枚舉聲音設(shè)備? 作者:pyundeng
而且作者是在06年發(fā)表的,哎~~~
猶豫了半天是否有必要繼續(xù)翻譯下去,最后打算還是繼續(xù)寫(xiě)吧。就當(dāng)做練英文好了。剛剛又搜了下博客圓,沒(méi)有發(fā)現(xiàn)類(lèi)似文章,所以更堅(jiān)定要繼續(xù)寫(xiě)下去。
大家可別懷疑我只是復(fù)制粘貼哦,我可是一字一句翻譯出來(lái)的,當(dāng)然也會(huì)參考一些已有的資料。

????? 如果你的應(yīng)用程序只是單純得通過(guò)用戶(hù)首選設(shè)備用來(lái)捕捉聲音,那就沒(méi)有必要來(lái)枚舉可用的設(shè)備。當(dāng)你通過(guò)調(diào)用?DirectSoundCaptureCreate8DirectSoundFullDuplexCreate8?方法來(lái)創(chuàng)建一個(gè)設(shè)備對(duì)象時(shí),你可以聲明一個(gè)默認(rèn)設(shè)備。更多信息,請(qǐng)查看Creating the Capture Device Object。

????? 枚舉操作在以下情況下是必須的:
????? 1.你的應(yīng)用程序所需的性能并不是所有設(shè)備都能滿(mǎn)提供。
????? 2.你的應(yīng)用程序需要2種或以上的設(shè)備。
????? 3.你希望提供用戶(hù)選擇設(shè)備的功能。

????? 枚舉為了實(shí)現(xiàn)三個(gè)目的:
????? 1.指明哪些硬件是可用的。
????? 2.為每一個(gè)設(shè)備提供了一個(gè)GUID(全局統(tǒng)一標(biāo)識(shí)符)。
????? 3.允許你為每一個(gè)枚舉出來(lái)的設(shè)備創(chuàng)建一個(gè)臨時(shí)設(shè)備對(duì)象,這樣你就可以獲取設(shè)備的性能。

????? 想要枚舉設(shè)備,你必須首先設(shè)置一個(gè)回調(diào)函數(shù)(在系統(tǒng)中這個(gè)函數(shù)將會(huì)在枚舉每個(gè)設(shè)備時(shí)被調(diào)用一次)。你可以在這個(gè)函數(shù)內(nèi)執(zhí)行任何操作,你也可以給這個(gè)函數(shù)隨意命名,但是你必須根據(jù) DSEnumCallback 的原型聲明它。如果想要繼續(xù)枚舉設(shè)備,那么這個(gè)回調(diào)函數(shù)必須返回TRUE,否則返回FALSE。比如,在找到一個(gè)滿(mǎn)足你要求性能的設(shè)備后。

????? 一個(gè)回調(diào)函數(shù)的例子:
????? 下面這個(gè)回調(diào)函數(shù)將每個(gè)枚舉出來(lái)的設(shè)備名添加到復(fù)選框中,并且將它的GUID存儲(chǔ)為數(shù)據(jù)項(xiàng)。前三個(gè)參數(shù)由設(shè)備提供,第四個(gè)參數(shù)由?DirectSoundEnumerate?函數(shù)傳入;這個(gè)參數(shù)能被用來(lái)傳遞任何32位的值,在本例中則是這個(gè)復(fù)選框的窗口句柄。在Windows.h中定義的宏被用來(lái)向復(fù)選框中添加字符串和數(shù)據(jù)。

Code
?BOOL?CALLBACK?DSEnumProc(LPGUID?lpGUID,?
?????????????LPCTSTR?lpszDesc,
?????????????LPCTSTR?lpszDrvName,?
?????????????LPVOID?lpContext?)
????{
??????HWND?hCombo?
=?(HWND)lpContext;
??????LPGUID?lpTemp?
=?NULL;
?????
??????
if?(lpGUID?!=?NULL)??//??NULL?only?for?"Primary?Sound?Driver".
??????{
????????
if?((lpTemp?=?(LPGUID)malloc(sizeof(GUID)))?==?NULL)
????????{
????????????
return(TRUE);
????????}
????????memcpy(lpTemp,?lpGUID,?
sizeof(GUID));
??????}
?????
??????ComboBox_AddString(hCombo,?lpszDesc);
??????ComboBox_SetItemData(hCombo,?
??????????ComboBox_FindString(hCombo,?
0,?lpszDesc),
??????????lpTemp?);
??????free(lpTemp);
??????
return(TRUE);
????}
????? 枚舉在包含復(fù)選框的對(duì)話(huà)框被初始化的時(shí)候啟動(dòng)。假設(shè) hCombo 是這個(gè)復(fù)選框的句柄而 hDlg 是這個(gè)對(duì)話(huà)的句柄。
Code
????if?(FAILED(DirectSoundEnumerate((LPDSENUMCALLBACK)DSEnumProc,
????????(VOID
*)&hCombo)))
????{
??????EndDialog(hDlg,?TRUE);
??????
return(TRUE);
????}

????? 在這個(gè)例子中,復(fù)選框的句柄地址被傳遞到 DirectSoundEnumerate 中,而 DirectSoundEnumerate 則傳遞它到回調(diào)函數(shù)中。這個(gè)參數(shù)可以是任何你想在回調(diào)函數(shù)中訪(fǎng)問(wèn)的32位值。
????? 第一個(gè)被枚舉出來(lái)的設(shè)備通常被稱(chēng)為主聲音設(shè)備,此時(shí)這個(gè)回調(diào)函數(shù)的 lpGUID 參數(shù)為 NULL。這個(gè)設(shè)備代表了用戶(hù)在控制面板中設(shè)置的首選播放設(shè)備。當(dāng)用戶(hù)選擇設(shè)備時(shí),它被單獨(dú)枚舉出來(lái)以便應(yīng)用程序能夠輕松的將主聲音設(shè)備添加到列表上。主設(shè)備也是通過(guò)它正確的名字和GUID被枚舉出來(lái)的。


?

查看其它:
??????導(dǎo) 言
????? 1.枚舉“捕捉設(shè)備”
????? 2.創(chuàng)建“捕捉設(shè)備對(duì)象”
??????3.“捕捉設(shè)備”性能
????? 4.創(chuàng)建一個(gè)“捕捉緩沖區(qū)”
????? 5.“捕捉緩沖區(qū)”信息
????? 6.“捕捉緩沖區(qū)”通知
????? 7.?“捕捉緩沖區(qū)”特效
????? 8.使用“捕捉緩沖區(qū)”
????? 9.寫(xiě)入到WAV文件?

總結(jié)

以上是生活随笔為你收集整理的波形捕捉:(1)枚举捕捉设备的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。