程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 波形捕捉:(1)枚舉"捕捉設備"

波形捕捉:(1)枚舉"捕捉設備"

編輯:關於C++

如果你的應用程序只是單純得通過用戶首選設備用來捕捉聲音,那就沒有必 要來枚舉可用的設備。當你通過調用DirectSoundCaptureCreate8 或 DirectSoundFullDuplexCreate8方法來創建一個設備對象時,你可以聲明一個默 認設備。更多信息,請查看Creating the Capture Device Object。

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

1.你的應用程序所需的性能並不是所有設備都能滿提供。

2.你的應用程序需要2種或以上的設備。

3.你希望提供用戶選擇設備的功能。

枚舉為了實現三個目的:

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

2.為每一個設備提供了一個GUID(全局統一標識符)。

3.允許你為每一個枚舉出來的設備創建一個臨時設備對象,這樣你就可以獲 取設備的性能。

想要枚舉設備,你必須首先設置一個回調函數(在系統中這個函數將會在枚 舉每個設備時被調用一次)。你可以在這個函數內執行任何操作,你也可以給這 個函數隨意命名,但是你必須根據 DSEnumCallback 的原型聲明它。如果想要繼 續枚舉設備,那麼這個回調函數必須返回TRUE,否則返回FALSE。比如,在找到 一個滿足你要求性能的設備後。

一個回調函數的例子:

下面這個回調函數將每個枚舉出來的設備名添加到復選框中,並且將它的 GUID存儲為數據項。前三個參數由設備提供,第四個參數由 DirectSoundEnumerate函數傳入;這個參數能被用來傳遞任何32位的值,在本例 中則是這個復選框的窗口句柄。在Windows.h中定義的宏被用來向復選框中添加 字符串和數據。

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);
    }

枚舉在包含復選框的對話框被初始化的時候啟動。假設 hCombo 是這個復選 框的句柄而 hDlg 是這個對話的句柄。

Code

if (FAILED(DirectSoundEnumerate((LPDSENUMCALLBACK) DSEnumProc,
    (VOID*)&hCombo)))
  {
   EndDialog(hDlg,TRUE);
   return(TRUE);
  }

在這個例子中,復選框的句柄地址被傳遞到 DirectSoundEnumerate 中,而 DirectSoundEnumerate 則傳遞它到回調函數中。這個參數可以是任何你想在回 調函數中訪問的32位值。

第一個被枚舉出來的設備通常被稱為主聲音設備,此時這個回調函數的 lpGUID 參數為 NULL。這個設備代表了用戶在控制面板中設置的首選播放設備。 當用戶選擇設備時,它被單獨枚舉出來以便應用程序能夠輕松的將主聲音設備添 加到列表上。主設備也是通過它正確的名字和GUID被枚舉出來的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved