Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > DirectSound学习笔记(1):枚举声音设备
【标  题】:DirectSound学习笔记(1):枚举声音设备
【关键字】:DirectSound
【来  源】:http://blog.csdn.net/pyundeng/archive/2006/10/21/1343495.aspx

DirectSound学习笔记(1):枚举声音设备

Your Ad Here

DirectSound设备

DirectSound设备对象表示一个播放设备,它被用来管理设备和创建声音缓冲区。

多个应用程序能够为相同的声音设备创建对象。当输入集中于应用程序间的变化时,音频输出自动从一个应用程序流转换到其他应用程序流。因此,当输入集中于变化时,应用程序不必反复地播放和暂停它们的缓冲区。


枚举声音设备

如果你的程序只是简单地通过用户首选设备来播放声音,那么没有必要去枚举可用的设备。当你通过调用 DirectSoundCreate8 函数创建设备对象时,你能够指定默认设备。

 

枚举设备在以下情形是必需的:

1.  你的应用程序需要的性能不是所有设备都能够提供的。

2.  你的应用程序需要两个或更多的设备。

3.  你希望用户能够选择设备。

 

枚举设备有三个目的:

1.  它指出可用的硬件设备。

2.  它为每个设备提供了一个 GUID

3.  它使你能够在设备被枚举的时候为它创建一个临时设备对象,这样你能够获取设备的性能。

 

为枚举设备,你必须首先创建一个回调函数,它将在枚举每个系统设备时被调用。你能够在这个函数中进行任何操作,并且你可以给它任意的函数名,但是你必须根据 DSEnumCallback 的原型声明它。如果要继续进行枚举,那么回调函数必须返回 TRUE,否则返回FALSE-比如,在找到一个满足你需求的设备后。

 

下面这个回调函数将每个枚举到的设备名添加到一个复选框中,并将它的GUID 作为选项内容。前三个参数值由设备驱动器提供。第四个参数由 DirectSoundEnumerate 函数传入;这个参数能被用于传入任意32位的值,在这里则是复选框的窗口句柄。在Windowsx.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,随后被传入回调函数。这个参数可以是你希望在回调函数中访问的任意32位值。
注意:第一个被枚举到的设备通常称为主要声音设备,这时回调函数的参数lpGUID 为NULL。这个设备代表了用户在控制面板中设置的首选播放设备。它被单独枚举出来是为了使应用程序能够方便地添加“主要声音设备”到列表中,该列表用于为用户提供设备选择。主要设备也是通过特有的名字和GUID被枚举的。

苏泊尔耗的JPEG解码器[三]:【上一篇】
苏泊尔耗的JPEG解码器[二]:【下一篇】
【相关文章】
  • DirectSound学习笔记(2):创建设备对象
  • DirectSound学习笔记(3):协作级别
  • DirectSound学习笔记(4):设备性能
  • DirectSound学习笔记(5):使用WAV数据
  • DirectSound学习笔记(6):创建辅助缓冲区
  • DirectSound学习笔记(7):缓冲区操作
  • 建立第一个directX程序——在C#下利用DirectSound实现声音播放
  • 【随机文章】
  • 在Authorware中控制Flash动画
  • vi设置自动识别各种编码
  • 在FreeBSD6下ZendOptimizer的安装
  • Hibernate的subclass用法
  • configure modem on cisco router
  • uname函数初步封装
  • 关于公有成员变量的一点看法
  • 易语言算法
  • Mail Quota
  • 探究X Window System运行原理与启动过程 (xdkui原创于cu)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.