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

来源:互联网 发布:linux war包怎么解压 编辑:程序博客网 时间:2024/05/16 08:58

 

枚举"捕捉设备"

后在网上找到类似翻译:DirectSound学习笔记(1):枚举声音设备  作者:pyundeng
而且作者是在06年发表的,哎~~~
犹豫了半天是否有必要继续翻译下去,最后打算还是继续写吧。就当做练英文好了。刚刚又搜了下博客圆,没有发现类似文章,所以更坚定要继续写下去。
大家可别怀疑我只是复制粘贴哦,我可是一字一句翻译出来的,当然也会参考一些已有的资料。

      如果你的应用程序只是单纯得通过用户首选设备用来捕捉声音,那就没有必要来枚举可用的设备。当你通过调用 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 )
    {
      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 是这个对话的句柄。

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

      在这个例子中,复选框的句柄地址被传递到 DirectSoundEnumerate 中,而 DirectSoundEnumerate 则传递它到回调函数中。这个参数可以是任何你想在回调函数中访问的32位值。
      第一个被枚举出来的设备通常被称为主声音设备,此时这个回调函数的 lpGUID 参数为 NULL。这个设备代表了用户在控制面板中设置的首选播放设备。当用户选择设备时,它被单独枚举出来以便应用程序能够轻松的将主声音设备添加到列表上。主设备也是通过它正确的名字和GUID被枚举出来的。

 

 

原创粉丝点击