Ogre音频部分设计思路

音频部分设计思路

Version

Author: 自由骑士笃志

设计初衷: 1:计划做为一个完全独立的第三方dll库形式出现。

   2:暴露唯一接口类,使用该接口类对象与Ogre或Node进行挂接。

IAudioEngine::GetSingetion()->SetPos(OgreNode* );

IAudioEngine::GetSingetion()->GetAudioBuffer(string szBufferName)->SetPos(OgreNode* );

实现功能: 1:支持流音频Ogg格式

   2:支持常规音频Wave,Midi,Mp3格式

3:支持音频资源库管理

4:支持2D,3D音频,重点是3D点音源,支持左右声道立体声。

5:使用点音源模拟盒音源。

附加第三方库: 1:DSound

   2:OpenAL

   3:OggLib+Vordis

   4:Boost

   5:STL

设计思路: 1:抽象出音频源数据基类IAudioData,各种格式音频格式继承于该基类,例class OggAudioData : public IAudioData{},class Mp3AudioData : public IAudioData{},该类只负责音频源数据自身属性的处理,如Length()Format()等,该类很容易进行扩展。

   2:OpenAL层和DSound层分别都有一个对象工厂OpenALAudioFactory, DSoundFactory,他们继承于IAudioFactory,负责对数据源, AudioName的绑定工作将其封装为一个AudioBufer出厂。每一个AudioBuffer均管理一个单独的音频数据源,负责对本音频数据源进行常规管理如Play().Stop().SetPos()等。加工厂的目的是使AudioBuffer不必关心AudioData的细节和类型。

   3:抽象出IAudioEngine类,该类为单键,对外暴露接口,提供常规函数如Play()Stop()Reset()等。其内保存一份AudioBuffer的Map表。负责对所有AudioBuffer的管理。其底层根据用户选择使用OpenAL或DSound进行音频处理。