这是盖莫游戏引擎的音频测试代码具体如下:
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);
如何,够简单明了吧(所需要的是对音频模型的详细解释)