DirectSound 开发指南
作者:智慧的鱼
编辑:中华视频网
中华视频网:http://www.chinavideo.org
佰锐科技:http://www.bairuitech.com
DirectSound 开发指南 作者:智慧的鱼 中华视频网 整理
目 录
绪言...................................................................................................................................... 3
一、DirectSound 简介(Introduction to DirectSound) ................................................ 4
二、DirectSound 初体验(Getting Started with DirectSound) ................................... 4
三、DirectSound 实用开发技巧Using DirectSound........................................................ 5
3.1Dsound 设备对象(DirectSound Devices) ...................................................................................6
3.2Dsound 的buffer 对象(DirectSound Buffers) ............................................................................9
3.3Using WAV Data .......................................................................................................................15
3.43-D Sound ................................................................................................................................16
3.5 增加声音特技Using Effects ...................................................................................................21
3.6 录制Capturing Waveforms......................................................................................................22
四、DirectSound 开发高级技巧....................................................................................... 28
4.1Dsound 驱动模型(DirectSound Driver Models) .................................................................28
4.2 设置硬件的扩展属性(System Property Sets)....................................................................28
4.3Property Sets for DirectSound Buffers......................................................................................28
4.4 如何优化Directsound(Optimizing DirectSound Performance).........................................30
4.5 向主缓冲区写数据(Writing to the Primary Buffer)...........................................................32
五、DirectSound 接口函数和指针简介........................................................................... 35
5.1DSound 常用的接口指针.........................................................................................................35
5.2Dsound 函数.............................................................................................................................35
5.3Dsound 常用的结构.................................................................................................................36
六、Wave 文件格式以及底层操作函数API 使用技巧.................................................. 36
6.1RIFF 文件结构.........................................................................................................................36
6.2WAVE 文件结构.......................................................................................................................38
6.3avi 文件结构.............................................................................................................................39
6.4 多媒体文件输入输出..............................................................................................................39
6.5 波形音频的编程(wave 系列函数).....................................................................................40
6.6AVI 编程..................................................................................................................................40
DirectSound 开发指南 作者:智慧的鱼 中华视频网 整理
绪言
DirectSound 是微软多媒体技术DirectX 的组成部分,封装了大量音频处理
API 函数,它可以提供快速的混音、硬件加速功能,并且可以直接访问相关设备,
当然,最主要的是它提供的功能与现有的设备驱动程序保持兼容性。
DirectSound 允许进行波型声音的捕获、重放,也可以通过控制硬件和相应的
驱动来获得更多的服务。
DirectSound 的优势当然和DirectX 的其它组件一样——速度,它允许你最大
效率的使用硬件,并拥有良好的兼容性。
中华视频网(www.chinavideo.org )一直致力于语音视频技术的研究和推广,
由于目前有关DirectX 系列的编程资料比较少,最主要的参考资料还是DirectX
SDK 文档,特别是对于初学者来说,相对来说比较难以入门。早期也收编过多
篇“智慧的鱼”的文章,鉴于本册《DirectSound 开发指南》是一篇比较实用的
关于DirectSound 编程手册,特收集整理成册,以供后来者学习。
非常感谢“智慧的鱼”前期的辛勤劳动和无私的分享精神!
中华视频网:www.chinavideo.org
Ffmpeg 工程组:www.ffmpeg.com.cn
佰锐科技:www.bairuitech.com
DirectSound 开发指南 作者:智慧的鱼 中华视频网 整理
一、DirectSound 简介(Introduction to DirectSound)
曾经学习过Directshow 的开发,对于Dsound 一直没有仔细的莱学习,以前只是知道
Dsound 是做音频开发的,我一直以为它和Dshow 的结构体系差不多,经过仔细学习后,发
现,其实他们完全两码事。
闲话少说,下面我们看看DirectSound 到底能帮我们做些什么。
1 播放WAVE 格式的音频文件或者资源。
2 可以同时播放多个音频。
3Assign high-priority sounds to hardware-controlled buffers
4 播放3D 立体声音
5 在声音中添加特技效果,比如回声,动态的改变特技的参数等
6 将麦克风或者其他音频输入设备的声音录制成wave 格式的文件
呵呵,DirectSound 就能做这么多事情,读到这里,我都有点怀疑DirectSound 是不是就是封
装了mmio 系列和wav 系列的函数。因为这些底层的API 也能够完成这些事情。
二、DirectSound 初体验(Getting Started with DirectSound)
在开始本节内容前,我会首先提醒一下,如果你想用Directsound开发,那么你首先要包含
Dsound.h头文件,其实我可以实话告诉你,你仅仅包含dsound.h你的工程肯定调补通,其实
下面的一些头文件也要包含,我第一次就搞了半天才搞好,
#include <windows.h>
#include <mmsystem.h>
#include <mmreg.h>
#include <dsound.h>
如果你还想使用Dsound 的API 的话,那么你就要在你的vc 开发环境中添加Dsound..lib 库,
如果你的程序还提示有很多的外部链接找不到,那么我建议你可以将下面的库都添加到你的
工程中comctl32.lib dxerr9.lib winmm.lib dsound.lib dxguid.lib kernel32.lib user32.lib gdi32.lib
winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib
odbccp32.lib,这些是我从Dsound 提供的例子中得到的,肯定够你用的,ok,开发环境配置
好了。
下面我们简单的来学习一下如果通过Directsound 的API 播放声音,既然是breif overview,
那么详细的内容你可以参考下面的一节内容,这里只是简单的介绍一下播放声音的步骤。
第一步,创建一个设备对象。
在你的代码中你可以通过调用DirectSoundCreat8 函数来创建一个支持IDirectSound8 接口
的对象,这个对象通常代表缺省的播放设备。当然你可以枚举可用的设备,然后将设备的
GUID 传递给DirectSoundCreat8 函数。
注意,Directsound 虽然基于COM,但是你并不需要初始化com 库,这些Directsound 都帮
你做好了,当然,如果你使用DMOs 特技,你就要自己初始化com 库了,切记。
第二步,创建一个辅助Buffer,也叫后备缓冲区
DirectSound 开发指南 作者:智慧的鱼 中华视频网 整理
你可以通过IDirectSound8::CreateSoundBuffer 来创建buffer 对象,这个对象主要用来获取
处理数据,这种buffer 称作辅助缓冲区,以和主缓冲区区别开来,Direcsound 通过把几个后
备缓冲区的声音混合到主缓冲区中,然后输出到声音输出设备上,达到混音的效果。
第三步,获取PCM 类型的数据
将WAV 文件或者其他资源的数据读取到缓冲区中。
第四步,将数据读取到缓冲区
你可以通过 IDirectSoundBuffer8::Lock.方法来准备一个辅助缓冲区来进行写操作,通常
这个方法返回一个内存地址,见数据从你的私人buffer 中复制到这个地址中,然后调用
IDirectSoundBuffer8::Unlock.
第五步,播放缓冲区中的数据
你可以通过IDirectSoundBuffer8::Play 方法来播放缓冲区中的音频数据,你可以通过
IDirectSoundBuffer8::Stop 来暂停播放数据,你可以反复的莱停止,播放,音频数据,如果
你同时创建了几个buffer,那么你就可以同时来播放这些数据,这些声音会自动进行混音的。
呵呵,简单介绍到这里的,如果想深入了解,请继续参考下一部分。
三、DirectSound 实用开发技巧Using DirectSound
在进行这部分之前,我们首先学习一下Directsound 中常用的几个对象,简单学习一下哦
对象 数量 作用 主要接口
设备对象 每个应用程序只有
一个设备对象
用来管理设备,创建
辅助缓冲区
IDirectSound8
辅助缓冲�