Ogre音频库设计思路
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进行音频处理。