声音引擎之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!!

你可能感兴趣的:(api,引擎,audio,磁盘)