DSound音频播放

DSound是directx中的用来处理声音特性的一部分,播放音频需要准备的工作其实和waveout也是差不多啊,创建directxobject也就是创建一个LPDIRECTSOUND,这个结构的定义可以参考dsound.h头文件,接着需要一个声音的描述WAVEFORMATEX,这个声音的描述其实在DSound中是位于buffer里面的,DSound对WAVEFORMATEX进行了封装,具体可以参考LPDIRECTSOUNDBUFFER结构的定义,同样是位于dsound.h中。播放音频需要一个窗口或者子窗口的句柄,否则播放不了,没有去很仔细的研究,只是实际遇到了所以提一下。

DSound的音频播放只需要使用初始化好的LPDIRECTSOUNDBUFFER进行控制,直接调用LPDIRECTSOUNDBUFFER的Play、Stop即可。需要涉及到的操作是buffer的Lock、填充数据、Unlock,这里的操作和WaveOut是类似的。和WaveOut一样在使用流播放的时候,我们还是分段缓冲,这样减少加载的时间间隔减少噪音。

DSound的缓冲的做饭时直接设置一块大的buffer,然后将这段buffer分段锁定然后填充数据解锁播放达到缓冲的效果。但在DSound中并不使用Waveout的回调函数提示播放完成,其实是有一个更加方便的办法。在LPDIRECTSOUNDBUFFER中我们是可以设置播放进度notify的,比回调好用多了。将buffer分段之后设置notify的偏移位置当播放到这个点的时候就会发送一个消息,捕获它完成相应的操作即可。可以使用注册buffer的com接口来获得notify。创建一个线程不断的捕获buffer发过来的播放进度notify,然后加载数据到指定的buffer空闲区。

具体看代码描述,下面是头文件的定义

/
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值