DirectSound回放

原创 2017年01月03日 16:13:11

DirectSound回放的基本流程

1.创建DirectSound对象;

2.设置设备的协作等级;

3.创建缓冲区并设置播放格式;

4.调用播放和控制函数实现声音的播放和控制。

详细步骤:

1.枚举系统输出声音设备,调用DirectSoundEnumerate函数;

2.创建DirectSound对象,调用全局函数DirectSoundCreate8可以创建一个IDirectSound8接口,通过调用该接口的各种方法,可以生成缓冲区对象,获取和设置设备对象的属性等;

3.设置声音设备的协作等级,调用IDirectSound8::SetCooperativeLevel函数;

4.创建声音缓冲区对象。为创建一个声音缓冲区,应用程序需要填充一个DSBUFFERDESC结构,然后调用IDirectSound8::CreateSoundBuffer方法,CreateSoundBuffer将创建一个直接缓冲区对象(DirectSoundBuffer)并返回一个指向IDirectSoundBuffer接口的指针,之后可以通过这个接口指针获取IDirectSoundBuffer8接口来进行缓冲区的播放和其他缓冲区操作;

5.加载WAVE声音数据,调用mmioOpen、mmioDescend、mmioAscend、mmioRead等函数;

6.声音缓冲区回放。注意,将声音数据写入声音缓冲区必须遵循一定的步骤:

给静态缓冲区加载声音数据的步骤

①调用IDirectSoundBuffer8::Lock方法锁住整个缓冲区,并制定数据写入缓冲区位置的偏移量(通常为0,即从缓冲区起始地址开始写入),并得到该点的内存地址(指针);
②用标准的内存拷贝方法,将声音数据写入返回的内存地址;
③调用IdirectSoundBuffer8::Unlock方法解锁缓冲区。

给流缓冲区加载音频数据的步骤

①确保缓冲区以做好接收数据的准备;
②调用IDirectSoundBuffer8::Lock函数锁住缓冲区的位置,该函数返回一个或两个可以写入数据的地址;
③使用标准的拷贝数据的方法将音频数据写入缓冲区;
④使用IDirectSoundBuffer8::Unlock函数解锁缓冲区。

注意事项

1.当应用程序使用用户首选的输出设备(通过控制面板设置的缺省声音输出设备)来输出声音时,不必枚举系统中所有的输出设备。但如果需要两个及以上的设备,或者提供用户自己选择输出设备的功能时,则需要枚举系统中的声音输出设备。

2.在播放音频缓冲区之前必须调用协作等级的方法,通常在创建DirectSound对象之后就立即调用,否则将听不到声音。因为Windows采用的是多任务机制,同一时间可能有多个应用程序在使用同一个设备的驱动程序。通过设置协作等级的方法,DirectX保证了每个应用程序不会在错误的时间或以错误的方式取得对设备的访问权。每个DirectSound应用程序有一个协作等级决定了它被允许访问设备的范围和程度。

3.应用程序在初始化DirectSound时,它会自动创建一个主声音缓冲来进行混音处理并把声音送往输出设备。应用程序必须创建一个或多个二级缓冲区来存储和播放独立的声音信息。在创建一个二级声音缓冲区时,需要定义其为静态声音缓冲区还是流式声音缓冲区。


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

DirectSound回放

DirectSound回放的基本流程 1.创建DirectSound对象; 2.设置设备的协作等级; 3.创建缓冲区并设置播放格式; 4.调用播放和控制函数实现声音的播放和控制。 详细步骤:...

VC++设计的DirectSound播放声音程序学习小记

最近在尝试使用c++编写一个简单的DirectSound播放器,仅播放WAV格式的声音文件,主要是实现在线播放流数据的功能。 首先,介绍一下程序的设计,利用DirectSound播放声音,需要以下几个...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

最简单的视音频播放示例8:DirectSound播放PCM

本文记录DirectSound播放音频的技术。DirectSound是Windows下最常见的音频播放技术。目前大部分的音频播放应用都是通过DirectSound来播放的。本文记录一个使用Direct...

DirectSound

DirectSound是DirectX API的音频(waveaudio)组件之一,它可以提供快速的混音、硬件加速功能,并且可以直接访问相关设备,当然,最主要的是它提供的功能与现有的(?将来的呢?)设...

DirectSound入门指南(0)播放声音

过去PC机上播放声音和音乐比登天还难!然而,随着DirectSound和DirectMusic的出现,这一切变得相当容易了。本文根据《Windows游戏编程大师技巧》一书学习了DirectSound基...

DirectSound入门指南(0)播放声音

过去PC机上播放声音和音乐比登天还难!然而,随着DirectSound和DirectMusic的出现,这一切变得相当容易了。本文根据《Windows游戏编程大师技巧》一书学习了DirectSound基...

使用directsound播放pcm流文件.txt

刚开始用waveOutWrite系列函数想实现动态流缓冲区播放MP3 decoder解码后的PCM音频流,在缓冲切换的时候总是出现爆破音,想了很多的办法,在网上也找了很多资料,都没有解决,后来想可能w...

Directsound和Waveout

 Q Directsound 与 Waveout 有何不同? A Waveout 是在32位的Windows上的一种老旧且过时,用来播放数字音讯的应用程序接 口(Application P...

回声抑制器:AEC回声抑制算法

回声抑制器:AEC回声抑制算法 疯狂代码 http://www.crazycoder.cn/  ĵ:http:/www.crazycoder.cn/Arithmetic/Article31436.h...

DirectSound入门指南(1)录音实战

在上一篇文章《DirectSound播放声音入门指南(0)》基础上对声音的录制进行研究,形成了本文。同时,本文也主要参考了Doubango开源项目(该项目现在已经难以维护了,因为其功能太强大了,它什么...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)