音乐管理数据完成

这两天在做声音相关的管理类,本来在纠结SoundManger的职责,后来还是用了原工程的SoundManger,因为实现的是最基本的功能,而对于区分出来的背景音乐、特效音乐等等都有他们各自的循环特点,所以为了实现其各自的特点,再分背景音乐与特效音乐的管理。

其中背景音乐的主要特点是:可以指定一首音乐播放前的Delay时间,并能够设置FadeIn,FadeOut效果的时间,还要能够播放一个列表,而不只是循环一首曲子而已。

对于特效音乐,有一种功能需要实现,即能够在几个特效音乐中在随机间隔时间随机抽一个播放。比如要描绘一个晚上的音乐场景,可能其中有蛐蛐声,微风吹过的声音等等特效音,就可以使用这种功能。

 

做完这两个管理类之后才发现,其实这是两种功能,并不一定要应用到背景音乐与特效音乐,是完全可以通用的。

在做特效音乐的这个功能时,测试的时候播放了三十几次之后再后面虽然看出也是在播放,但却没有声音,后来查原因是因为FMOD有个Virtual的概念,一次只会有32个Channel播放出声音(每个声卡),其他Channel会根据音量大小、播放位置、优先级等等检测,如果更有优先的权力则会踢掉32个之中优先权力最低的然后它来播放。

但想不通一个特效音只有几秒的时间,怎么播放完了没有释放Channel的句柄?后来才明白,只有当Channel调用了stop之后才会释放句柄。同时也明白Channel::isPlaying获取的bool值是不受paused,mute影响的。

 

明天准备做下音乐数据的编辑器,嗯,这两天做完,音乐的原型就搞定了。。。这个原型有点全啊哈哈哈

发表评论

邮箱地址不会被公开。 必填项已用*标注

* Copy This Password *

* Type Or Paste Password Here *