Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
这是盖莫游戏引擎的音频测试代码具体如下:
 1#include <cstdlib>
 2#include <iostream>
 3#include <GEngine/Main.hpp>
 4using namespace std;
 5
 6const Rectf    rect(0,0,640,480);
 7#define AUDIO_FILE "..\\audio//because i love you.mp3"
 8
 9int main(int argc, char *argv[])
10{   
11    char text_info[255];
12    strcpy(text_info,"play audio: ");
13    strcat(text_info,AUDIO_FILE);
14    
15    core::Device* device = core::InitDevice("盖莫引擎音频测试");
16    //! 设置设备背景色 
17    device->SetClearColor(core::Color(120,80,250));
18    //! 启用2d渲染模式 
19    device->Ortho2D();  
20    //! 获取文本指针 
21    core::RefPtr<core::Text> defont= device->GetResourceManager()->GetText("font"); 
22    
23    //! 获取音频设备指针
24    core::AudioDevice* audiodevice = device->GetAudioDevice(core::AUDIO_DISTANCE_MODEL);
25    //! 获取一个音源
26    core::AudioSource* source = audiodevice->GetAudioSource();
27    
28    source->Play(AUDIO_FILE,true); 
29    
30    BEGIN_LOOP(device)
31
32        defont->Render(rect,text_info);
33
34    END_LOOP(device)
35    
36    device->Close();
37    device->Drop();
38    
39    system("PAUSE");
40    return EXIT_SUCCESS;
41}

42
43

下面是贴图


目前音频底层使用的是openal(以后也会加入对dxsound的支持)
现在支持3种最基本的音频格式:ogg,wav,mp3(以后也会加入对aiff,au,midi,ape的支持)
使用多线程,流式播放音频,这样可以避免载入大音频文件所花的时间延迟
当然3d音效师最基本的了O(∩_∩)O~
相关的api如下:
  1 ////////////////////////////////////////////////////////////
  2 /// 头文件包含
  3 ////////////////////////////////////////////////////////////
  4 #include <GEngine/Config.hpp>
  5 #include <GEngine/Define.hpp>
  6 
  7 namespace core 
  8 {
  9 
 10 /////////////////////////////////////////////////////////
 11 //! 枚举音频文件格式
 12 /////////////////////////////////////////////////////////
 13 enum AudioFileType
 14 {
 15     AUDIOFILE_TYPE_WAV = 0,
 16     AUDIOFILE_TYPE_OGG,
 17     AUDIOFILE_TYPE_MP3,
 18     AUDIOFILE_TYPE_AU,
 19     AUDIOFILE_TYPE_AIFF,
 20     AUDIOFILE_TYPE_WMA,
 21     AUDIOFILE_TYPE_AAC,
 22     AUDIOFILE_TYPE_APE,
 23     AUDIOFILE_TYPE_MIDI
 24 };
 25 
 26 /////////////////////////////////////////////////////////
 27 //! 枚举音频物理模型
 28 /////////////////////////////////////////////////////////
 29 enum AudioModel
 30 {
 31     //! 音频物理空模型
 32     AUDIO_MODEL_NULL = -1,
 33     //! 音频物理空模型
 34     AUDIO_DISTANCE_MODEL,
 35     //! 音频逆距离模型
 36     AUDIO_INVERSE_DISTANCE,
 37     //! 音频逆距离箝位模型
 38     AUDIO_INVERSE_DISTANCE_CLAMPED,
 39     //! 音频线性距离模型
 40     AUDIO_LINEAR_DISTANCE,
 41     //! 音频线性距离箝位模型
 42     AUDIO_LINEAR_DISTANCE_CLAMPED,
 43     //! 音频指数距离模型
 44     AUDIO_EXPONENT_DISTANCE,
 45     //! 音频指数距离箝位模型
 46     AUDIO_EXPONENT_DISTANCE_CLAMPED
 47 };
 48 
 49 
 50 //! 定义默认空间音速
 51 const float AUDIO_SPACE_VELOCITY = 343.0f;
 52 
 53 //! 定义默认多普勒因子
 54 const float AUDIO_DOPPLER_FACTOR = 1.0f;
 55 
 56 /////////////////////////////////////////////////////////
 57 //! 定义盖莫音频引擎音源类
 58 /////////////////////////////////////////////////////////
 59 class AudioSource
 60 {
 61 public:
 62     /////////////////////////////////////////////////////////
 63     //! 播放指定音频文件
 64     /////////////////////////////////////////////////////////
 65     virtual bool Play(const char* audiofile, bool loop) = 0;
 66 
 67     /////////////////////////////////////////////////////////
 68     //! 停止播放音频
 69     /////////////////////////////////////////////////////////
 70     virtual bool Stop() = 0;
 71 
 72     /////////////////////////////////////////////////////////
 73     //! 暂停音频播放
 74     /////////////////////////////////////////////////////////
 75     virtual bool Pause() = 0;
 76 
 77     /////////////////////////////////////////////////////////
 78     //! 设置音频增益[0.0f,1.0f]
 79     /////////////////////////////////////////////////////////
 80     virtual void SetSourceGain(float gain) = 0;
 81 
 82     /////////////////////////////////////////////////////////
 83     //! 获取音频增益
 84     /////////////////////////////////////////////////////////
 85     virtual void GetSourceGain(float &gain) = 0;
 86 
 87     /////////////////////////////////////////////////////////
 88     /// 获取,设置音源位置(x,y,z)
 89     /////////////////////////////////////////////////////////
 90     virtual void GetSourcePosition(float &x,float &y,float &z) = 0;
 91     virtual void SetSourcePosition(float x, float y, float z) = 0;
 92 
 93     /////////////////////////////////////////////////////////
 94     /// 获取,设置音源速度
 95     /////////////////////////////////////////////////////////
 96     virtual void GetSourceVelocity(float &x, float &y, float &z) = 0;
 97     virtual void SetSourceVelocity(float x, float y, float z) = 0;
 98 
 99     /////////////////////////////////////////////////////////
100     /// 获取,设置音源方向(x,y,z,v1,v2,v3)
101     /////////////////////////////////////////////////////////
102     virtual void GetSourceDirection(float &x,float &y,float &z,float &a,float &b,float &c) = 0 ;
103     virtual void SetSourceDirection(float x,float y,float z,float a = 0,float b = 1,float c = 0= 0;
104 
105     /////////////////////////////////////////////////////////
106     /// 设置Reverb值([0,1.0])
107     /////////////////////////////////////////////////////////
108     virtual bool SetReverbScale(float scale) = 0;
109     /////////////////////////////////////////////////////////
110     /// 设置Reverb值([0,1.0])
111     /////////////////////////////////////////////////////////
112     virtual bool SetReverbDelay(float delay) = 0;
113 
114     /////////////////////////////////////////////////////////
115     /// 设置音源锥
116     /////////////////////////////////////////////////////////
117     virtual void SetAudioCone(float innerangle, float outerangle, float outergain) = 0;
118 
119     /////////////////////////////////////////////////////////
120     /// 设置为环境音,检测是否为环境音
121     /////////////////////////////////////////////////////////
122     virtual void SetAmbient(bool ambient) = 0;
123     virtual bool IsAmbient() = 0;
124 
125     /////////////////////////////////////////////////////////
126     /// 设置音源位置是否相对于听者,检测是否相对于听者
127     /////////////////////////////////////////////////////////
128     virtual void SetRelative(bool relative) = 0;
129     virtual bool IsRelative() = 0;
130 
131     /////////////////////////////////////////////////////////
132     /// 设置,获取音源最大传播距离(仅音频物理模型为AUDIO_INVERSE_DISTANCE_CLAMPED有效)
133     /////////////////////////////////////////////////////////
134     virtual void SetMaxDistance(float distance) = 0;
135     virtual void GetMaxDistance(float &distance)= 0;
136 
137     /////////////////////////////////////////////////////////
138     /// 设置,获取音频扇出值[0.0,1.0]
139     /////////////////////////////////////////////////////////
140     virtual void  SetRolloffFactor(float factor) = 0;
141     virtual void  GetRolloffFactor(float &factor)=0;
142 
143     /////////////////////////////////////////////////////////
144     /// 设置,获取音频音节值(pitch值每减少50%则音阶降低1个八度音阶) [0,1]
145     /////////////////////////////////////////////////////////
146     virtual void  SetPitch(float pitch) = 0;
147     virtual void  GetPitch(float &pitch) = 0;
148 };
149 
150 /////////////////////////////////////////////////////////
151 //! 定义音频设备基类
152 /////////////////////////////////////////////////////////
153 class AudioDevice
154 {
155 public:
156     /////////////////////////////////////////////////////////
157     //! 获取音频引擎版本号
158     /////////////////////////////////////////////////////////
159     virtual const char* GetVerson() const = 0;
160 
161     /////////////////////////////////////////////////////////
162     //! 获取音频引擎作者
163     /////////////////////////////////////////////////////////
164     virtual const char* GetMaker() const = 0;
165 
166     /////////////////////////////////////////////////////////
167     //! 查询音频设备是否支持指定格式的音频文件
168     /////////////////////////////////////////////////////////
169     virtual bool IsSupport(const AudioFileType& type) = 0;
170 
171     /////////////////////////////////////////////////////////
172     //! 抓取音频音源指针(最大可获取255个音源)
173     /////////////////////////////////////////////////////////
174     virtual AudioSource*  GetAudioSource() = 0;
175 
176     /////////////////////////////////////////////////////////
177     /// 获取,设置音频听者位置(x,y,z)
178     /////////////////////////////////////////////////////////
179     virtual void GetListenerPosition(float &x,float &y,float &z) = 0;
180     virtual void SetListenerPosition(float x, float y, float z) = 0;
181 
182     /////////////////////////////////////////////////////////
183     /// 获取,设置音频听者方向(x,y,z,v1,v2,v3)
184     /////////////////////////////////////////////////////////
185     virtual void GetListenerDirection(float &x,float &y,float &z,float &a,float &b,float &c) = 0 ;
186     virtual void SetListenerDirection(float x,float y,float z,float a = 0,float b = 1,float c = 0= 0;
187 
188     /////////////////////////////////////////////////////////
189     /// 获取,设置音频听者速度
190     /////////////////////////////////////////////////////////
191     virtual void GetListenerVelocity(float &x, float &y, float &z) = 0;
192     virtual void SetListenerVelocity(float x, float y, float z) = 0;
193 };
194 
195 /////////////////////////////////////////////////////////
196 //! 初始化音频引擎(返回为音频设备指针)
197 /////////////////////////////////////////////////////////
198 //G_FUNC(AudioDevice*) InitAudioDevice(AudioModel model, float audiovel, float dopplerfactor);
199 
200 /////////////////////////////////////////////////////////
201 //! 卸载音频引擎(写在成功返回真)
202 /////////////////////////////////////////////////////////
203 //G_FUNC(bool)         DeinitAudioDevice(void);
如何,够简单明了吧(所需要的是对音频模型的详细解释)
posted on 2010-02-08 13:25 ccsdu2009 阅读(1031) 评论(2)  编辑 收藏 引用
Comments

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理