XAudio2学习二之获取输出设备数
2016-01-21 16:17
295 查看
XAudio2学习二之获取输出设备数
徐冬冬
本篇主要讲如何获取输出设备数:所谓输出设备,就是播放设备,比如扬声器。一.VS怎么 引用XAudio2静态库和头文件。
头文件:Project右键->properties->c/c++->additional include directories:./SDK\DirectX2010\Include
静态库:暂时不需要添加。
二.获取音频输出设备数:
XAudio2获取音频输出设备主要有四步:
1、初始化COM组件:
COM组件初始化有两种:CoInitialize、CoInitializeEx。两者都是WinAPI。使用COM组件之前必须调用二者之一进行初始化。
这两者是有区别的:CoInitialize是告诉Windows以单线程方式运行。而CoInitializeEx告诉Windows可以以多线程方式运行(也可以以单线程方式运行),以多线程方式初始化时使用COINIT_MULTITHREADED。
2、创建XAudio2引擎:
IXAudio2是XAudio2的声音引擎,基本上所有操作都是基于此基础上,引擎创建后默认是开启的。
IXAudio2MasterVoice、IXAudio2SubmixVoice、IXAudio2SourceVoice都是由IXAudio2创建的。
而IXAudio2可以通过XAudio2Create()函数接口来创建。
IXAudio2 *pEngine = NULL; hr = XAudio2Create(&pEngine);//创建一个IXAudio2对象
对于XAudio2Create接口原型:
HRESULT XAudio2Create( _Out_ IXAudio2 **ppXAudio2, _In_ UINT32 Flags, _In_ XAUDIO2_PROCESSOR XAudio2Processor );
ppXAudio2表示返回一个IXAudio2对象。Flags表示IXAudio2的行为。此参数必须为0.XAudio2Processor指定使用哪一个CPU。缺省值为XAUDIO2_DEFAULT_PROCESSOR。
3.获取输出设备个数:
UINT uPlayer = 0; hr = pEngine->GetDeviceCount(&uPlayer);//获取音频输出设备个数GetDeviceCount只有一个参数,返回个数。
4.释放资源:
pEngine->Release();//释放资源 CoUninitialize();//释放资源IXAudio2接口继承自IUnKnown,使用完成后必须进行释放。然后释放COM套件。
下面是完整的例子:
#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; pEngine->Release();//释放资源 CoUninitialize();//释放资源 return 0; }
备注:请尊重版权,转载请联系作者QQ:1245178753。
交流请加:
群名称:XAudio2 交流群
群 号:233537460
本文链接:/article/3704295.html
相关文章推荐
- hdu 5154 Harry and Magical Computer(拓扑排序)
- Redis 有序集合(sorted set)
- Examine the following statement that is used to modify the primary key constraint on the SALES tabl
- python中简单的if语句
- 一起故障引发的线上MySQL数据库权限分级以及数据库实例大小限制
- Java继承和多态=== Java Object类
- Windows下git安装及使用技巧
- 常见指针错误
- Java学习第8天(2):面向对象-继承-子父类关系
- Core Image
- DBLink To Oracle
- bootstrap导航菜单做active判断
- Could not launch process failed:security
- 复数类
- C# 利用 OpenCV 进行视频捕获 (笔记)
- iOS性能优化---转载《二》小心别让圆角成了你列表的帧数杀手
- 一个简单的例子说明JQuery中wrap、wrapAll、wrapInner的区别
- CPU占用率分析
- osgi实战学习之路:3. osgi分层概念及相互合作demo
- stand up meeting 1/19/2016