Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16498997
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:30:54

下载本文示例代码
  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被枚举的。   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被枚举的。 下载本文示例代码


DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备DirectSound学习指南之枚举声音设备
阅读(220) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~