DirectSound学习笔记之 静态缓冲区播放

本文介绍了DirectSound中静态缓冲区的概念和作用,包括如何创建、管理静态缓冲区以及如何填充和播放声音数据。强调了静态缓冲区的特性,即数据只写入一次并进行播放,区别于需要不断刷新的流式缓冲区。通过IDirectSoundBuffer8接口的Lock、Unlock和Play方法,详细阐述了静态缓冲区的数据操作流程。
摘要由CSDN通过智能技术生成

DirectSound之 播放
   前面,学习到了创建播放设备,目的自然就是为了播放声音嘛!
   DirectSound有一个缓冲区对象IDirectSoundBuffer,该对象表示一个包含数据的缓冲区,这些数据以PCM格式被存储,该对象不仅可以用于开始、停止或暂停声音的播放,还能够设置声音数据中诸如频率和格式等属性。 缓冲区分为主缓冲区和副缓冲区,主缓冲区中是听者将要听到的音频信号,一般是将副缓冲区中信号混音后的结果。而副缓冲区中存放着许多单独的声音信号,有的可以直接播放,有的要混音,有的循环播放。主缓冲区由DirectSound自动创建,而副缓冲区需由应用程序来创建。DirectSound将副缓冲区中的声音混合后,存入主缓冲区,再输出到相应播放设备。
   DirectSound中没有解析声音文件的功能,需要自己在应用程序中将不同格式的声音信号改变过来(PCM) 。缓冲区可以在主板的RAM、波表存储器、DMA通道或虚拟存储器中。 多个应用程序可以用同一声音设备来创建DirectSound对象。当输入焦点在应用程序中发生变化时,音频输出将自动在各个应用程序之间切换。于是,应用程序不用在输入焦点改变中反复的
播放和停止他们的缓冲区。通过IDirectSoundNotify接口,当播放到了一个用户指定的地方,或播放结束时,DirectSound将动态地通知拥护这一事件。

   上面说了DirectSound自动创建主缓冲区,副缓冲区,要自己创建。
   应用程序必须至少创建一个副缓冲区,用来存储要播放的声音数据文件。一个副缓冲区的生命期可以比应用程序还长,所以在不需要的时候,应该要将其释放,一个副缓冲区可以包含整个声音数据,也可以只包含声音数据的一部分,为了限制内存的开销,所以一般在播放长文件时采用流缓冲区,这些流缓冲区中只用包含几秒钟的数据量。
    可以通过同时播放几个副缓冲区中的声音来对他们进行混音,至于能同时播放几个副缓冲区
则由硬件设备的性能决定。另外要注意的是,不能创建相同的副缓冲区,副缓冲区的格式一般为

Format:    缓冲区的format必须要和播放音频的waveformat一致
Controls:  不同的缓冲区可以有不同的配置,如音量,频率等。
Location:  缓冲区时是硬件来管理的还是由软件来管理的。硬件缓冲区通常很有效率,但是他不
支持64位的操作系统

   这里咱给一个例子创建一个副缓冲区

DelphiCode:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值