波形捕获:(1)列举"捕获设备"
当前位置:以往代写 > C/C++ 教程 >波形捕获:(1)列举"捕获设备"
2019-06-13

波形捕获:(1)列举"捕获设备"

波形捕获:(1)列举"捕获设备"

假如你的应用措施只是纯真得通过用户首选设备用来捕获声音,那就没有必 要来列举可用的设备。当你通过挪用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被列举出来的。

    关键字:

在线提交作业