声音引擎之DirectMusic(1)---重要概念

一、概念

    我在我的引擎使用的是DirectMusic,他是高层的audio API,他比DirectSound方便很多,他可以播放WAV文件与MIDI文件,在这里我主要介绍如何播放WAV文件。

    首先,所有的声音的播放都要依赖于两个COM对象,一个是IDirectMusicLoader8,他负责从磁盘上读取声音文件;还有一个是IDiretMusicPerformace,他负责播放与停止的控制,也可以控制全局的声音。

    而具体到一个声音文件,则需要一个IDirectMusicSegment8对象,当你告诉IDirectMusicLoader8载入一个WAV文件,那么就创造了一个IDirectMusicSegment8对象,它存放所有这个文件的信息。

    这些还不够,在播放一个声音时,你需要一个IDirectMusicSegmentState8,他保存了当前声音的播放状态,也就是说,载入的声音可以由多个实例来播放他,这些实例不需要全部的声音数据,只记录各自的播放状况,这样可以避免为多个播放相同声音文件的实例都分配声音数据节约内存,有点像线程的作用。

   

二、组织

    由此可以发现,我们需要三个抽象:

    1.AudioManager,他负责构造总体的架构,保存IDirectMusicLoader8, IDiretMusicPerformace等这些每个声音都可能用到的东西。

    2.Sound,他负责保管一个载入声音的全部信息,如IDirectMusicSegment8。

    3.SoundInstance,他负责一个当前播放声音的全部信息,如IDirectMusicSegmentState8.

   

    通过以上组织,我们可以得出以下流程,首先,初始化AudioManager,并由它提供载入声音的方法LoadSound,它负责读入文件路径,并产生一个Sound。接着如果你希望播放Sound,你需要从Sound中产生一个SoundInstance,有了SoundInstance,你就可以放心大胆的播放声音了。

 

   Enjoy!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值