XAudio2学习三之获取输出设备信息
2016-01-22 17:06
483 查看
XAudio2学习三之获取输出设备信息
徐冬冬
输出设备信息包括输出设备支持的音频格式、设备ID、设备名称、以及扮演角色。音频格式:通道数、采样率、有效位、音频类型等等。
设备ID:每个设备独一无二的标识,
扮演角色:用来表明音频设备的用途,下面会详细说明。
设备名称:就是指音频输出设备的全称。打开自己的音频合成器,点击设备中的下拉按钮,可以看到所有设备以及全称。如下图:
要获取输出设备的信息,首先我们需要知道输出设备的个数,因为获取信息是通过整型index来索引的。
HRESULT GetDeviceDetails( UINT32 Index, XAUDIO2_DEVICE_DETAILS *pDeviceDetails )Index表示第几个设备。
pDeviceDetails包含了我们需要的设备信息。
pDeviceDetails是一个XAUDIO2_DEVICE_DETAILS类型的结构体指针。
typedef struct XAUDIO2_DEVICE_DETAILS { WCHAR DeviceID[256]; WCHAR DisplayName[256]; XAUDIO2_DEVICE_ROLE Role; W***EFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS;结构体中包含设备ID,名称,角色和扩展输出格式。
对于扩展输出格式:
typedef struct { W***EFORMATEX Format;//输出格式 union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; }Samples;//有效位数 DWORD dwChannelMask;//通道对应 GUID SubFormat;//标识 } W***EFORMATEXTENSIBLE, *PW***EFORMATEXTENSIBLE, *LPPW***EFORMATEXTENSIBLE;
其中通道对应,就是指左声道、右声道等等:
数据的子格式,唯一标识,比如 KSDATAFORMAT_SUBTYPE_PCM.
typedef struct tW***EFORMATEX { WORD wFormatTag;//类型 WORD nChannels;//通道数 DWORD nSamplesPerSec;//采样率 DWORD nAvgBytesPerSec;//每秒钟字节数 WORD nBlockAlign;//字节块 WORD wBitsPerSample;//位宽 WORD cbSize;//结构体大小 } W***EFORMATEX, *PW***EFORMATEX, *LPW***EFORMATEX;其中类型是指微软为众多压缩算法注册的标识。
设备角色:
typedef enum XAUDIO2_DEVICE_ROLE { NotDefaultDevice = 0x0,//设备不用于程序的默认输出设备 DefaultConsoleDevice = 0x1,//设备用于控制台音频程序 DefaultMultimediaDevice = 0x2,//设备用于多媒体回放 DefaultCommunicationsDevice = 0x4,//设备用于语音交流程序 DefaultGameDevice = 0x8,//设备用于游戏音频 GlobalDefaultDevice = 0xf,//上面所说的所有情况 InvalidDeviceRole = ~GlobalDefaultDevice//不合法 } XAUDIO2_DEVICE_ROLE;
获取输出设备个数与上一篇一样,在此基础上添加获取设备信息方法:
获取结果如下:
第一个设备:
第二个设备:
完整程序:
#include "XAudio2.h" #include <stdio.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { HRESULT hr = CoInitialize(0);//初始化COM组件 if (FAILED(hr)) return -1; IXAudio2 *pEngine = NULL; hr = XAudio2Create(&pEngine);//创建一个IXAudio2对象 if (FAILED(hr)) return -1; UINT uPlayer = 0; hr = pEngine->GetDeviceCount(&uPlayer);//获取音频输出设备个数 if (FAILED(hr)) return -1; cout << uPlayer << endl; XAUDIO2_DEVICE_DETAILS deviceInfo; for (int i = 0; i < uPlayer; i++) { pEngine->GetDeviceDetails(i, &deviceInfo);//获取设备信息 } pEngine->Release();//释放资源 CoUninitialize();//释放资源 return 0; }
备注:请尊重版权,转载请联系作者QQ:1245178753。
交流请加:
群名称:XAudio2 交流群
群 号:233537460
本文链接:/article/3704296.html
源码下载:http://download.csdn.net/detail/u011417605/9451860
相关文章推荐
- socket(套接字)连接过程
- Jquery Mobile dialog的生命周期
- JavaSwing 表格JTable内容居中 自定义TableModel
- nginx,FastCGI启动语句
- 7个关于网络方面的面试问题和答案
- Java 学习之反射机制“解刨”分解类,并获取内容!
- HTTP之X-Requested-With分析和思考
- Java 学习之反射机制“解刨”分解类,并获取内容!
- 汉诺塔递归算法
- vijos 1697平面几何
- 怎样使用 App Studio 高速定制你自己的 Universal Windows App
- Tomcat-在发布项目时两次重复加载的问题介绍与解决
- show processlist结果筛选
- System V 中内存共享的简单实例
- Android 数字签名详解
- 函数声明&函数表达式
- 偏差和方差的区别
- saiku导出excel单元格格式与中文列宽自动适应
- servlet web文件上传
- 彻底理解MapReduce shuffle过程原理