DirectSound是DirectX中负责音频处理成员,可以直接存取和控制音频设备而提高高质量混音、3D立体音鱼多声道控制功能。
DirectSound组件通过DirectSound HAL(硬件抽象层)接口跳过Windows组件直接驱动计算机的音频硬件,并进行硬件加速功能,如果用户硬件不支持加速功能,可以通过HEL(硬件模拟层)接口仿真音频硬件加速工作。DirectSound控件提供了低延迟混音和3D立体音效是得以广泛使用的重要原因。
利用DirectSound实现音频播放需要一下过程:
1.声明DirectSound对象
声明DirectX 8对象,声明DirectSound对象,一个DirectSound对象等同于一个声卡控制单元,一台计算机上一般安装一个音频硬件,所以只需要建立一个DirectSound对象即可。声明DirectSoundSecondaryBuffer对象,声明DirectSound对象时会自动设置主要缓冲区进行声音文件的播放工作,每个DirectSound对象只能有一个主要缓冲区控件,我们加载多个音频的话来进行混音或多个播放的话,我们需要利用DirectSoundSecondaryBuffer对象来启动二级缓冲区,其工作是将多个暂存的声音文件传送到主要缓冲区进行混音或播放工作。设置DSBUFFERDESC对象是为设置缓冲区结构巩固走,缓冲区是否可以音量与声道的调整都在这设置。WAVEFORMATEX对象是设置文件的结构。
2.建立DirectSound对象
3.加载设置音频文件
4.音频播放与控制
5.播放资源的释放
3D音效:
3D音效师以发声者与接收者为基础,依据两者相互作用关系产生具有空间变化的3D音效。主要影响有距离,相对位置,移动速度和发声锥。
声明相关DirectSound3D对象,过错和DirectSound类似,主要额外声明DS3D缓冲区,主缓冲区和接收者对象。
建立DirectSound对象,需要在建立DirectSound主缓冲区结构时加入DSBCAPS_CTRL3D参数并设置缓冲区可进行3D音频控制。
DirectMusic是DirectX中负责MIDI音频文件播放与控制的成员。MIDI文件容量远小于Wave文件,还可以将MIDI中加入混音,达到Wave效果。
DirectMusic对象的声明,DirectMusicLoader对象用于读取用户指定的MIDI声音文件并保存到DirectMusicSegment对象所打开的缓冲区中,DMSegment对象用于设置缓冲区,程序将MIDI文件读取后,提供DMPerformance对象进行控制。DMPerformace对保存的MIDI文件进行播放输出与状态调节控制。
声音文件的加载,播放与控制,文件打开成功并加载到DMSegment提供缓冲区后,就可以音频播放控制了。注意DM中不能像DS中仅仅Stop,而需要记录暂停点,StopEx的第2个参数就是表示停止时间点。
原文链接:https://www.f2er.com/vb/261521.html