关键字: directsound 9 vb.net directx 声音控制 声音引擎 作者:董含君
目的:制作一个声效控制器,减少内存占用量,封装directsound,低cpu消耗,满足人的实际需要,以及易用性提高. 【程序编程相关:《无冬之夜》简明流程攻略 一】
转载请注明来自 http://blog.csdn.net/a11s 【推荐阅读:《圣女之歌2:撒雷母天使》超强全攻略2】
由于跟denghe的制作目的不同,所以实现起来大相径庭.他全部都要实现gameobject接口,对于游戏来说,这是可行的.但是我做控制器的目的并不仅仅是用于游戏.而是更加像是提供一个处理声音的服务.我还不敢称它为声音引擎.毕竟可以实现的功能还比较少. 【扩展信息:《无冬之夜》简明流程攻略 2】
本来不打算继续的,前几天跟denghe研究了一下相关的问题.讨论到太多的音效对机器的影响,尤其是内存占用以及释放.发现有必要做一个专门管理音效的控制器.
问题的出现
1 当你打算播放音效的时候(就是wav),你可以new buffer(filename , ....) 这个我们都知道的. 但是new 之后,整个wav将会被装入内存.我们称之为静态载入.当你进攻敌人的时候,比如子弹的音效或者刀剑的音效.很多都是重复的.这时,你可以用刚才new 出来的 buffer 直接 play.
2 问题如果这么简单我就没有必要写此文了.当一个声音没有播放完成,另外一个重复的声音接着响起的时候,很显然不能直接play了,那么你怎么办?先stop它然后重新从头开始播放?很显然,也不行.那么直接再new 一个可以了吧.当然可以,除非你自己做混音(需要很多声学的知识,以及数学),否则只能使用两个buffer不同时间同时播放的方法.
3 看似解决了问题.我们把问题继续推广到多个音效(wav),以及大量重复播放的时候.用问题2的解决办法 new 出大量的buffer 就会出现问题了. 不但管理起来十分复杂,而且他会消耗掉恐怖的内存.并且你的系统资源开销非常可观. 看似这样的现象再游戏中是很容易出现的. 所以迫切需要一种管理方法应对这种现象.
... 下一页