|

楼主 |
发表于 2010-1-22 20:49:00
|
显示全部楼层
Re:本人写的超级简单的游戏专业音频库
#ifdef _MSC_VER
#pragma once
#endif
#ifndef AUDIO_DEVICE_HPP
#define AUDIO_DEVICE_HPP
#ifndef __cplusplus
# error Gaimo Audio Engine Lib Requires c++ Compiler.
#endif
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN64) || defined(_XBOX)
#if defined(DBUILDING_DLL) || defined(DBUILD_DLL) || defined(BUILDING_DLL) || defined(BUILD_DLL)
#define G_DLL_API __declspec(dllexport)
#else
#define G_DLL_API __declspec(dllimport)
#endif
#else
#define G_DLL_API
#endif
#define G_FUNC(ret) extern "C" G_DLL_API ret
namespace audio
{
/////////////////////////////////////////////////////////
//! 枚举音频文件格式
/////////////////////////////////////////////////////////
enum AudioFileType
{
AUDIOFILE_TYPE_WAV = 0,
AUDIOFILE_TYPE_OGG,
AUDIOFILE_TYPE_MP3,
AUDIOFILE_TYPE_AU,
AUDIOFILE_TYPE_AIFF
};
/////////////////////////////////////////////////////////
//! 枚举音频物理模型
/////////////////////////////////////////////////////////
enum AudioModel
{
//! 音频物理空模型
AUDIO_MODEL_NULL = -1,
//! 音频物理空模型
AUDIO_DISTANCE_MODEL,
//! 音频逆距离模型
AUDIO_INVERSE_DISTANCE,
//! 音频逆距离箝位模型
AUDIO_INVERSE_DISTANCE_CLAMPED,
//! 音频线性距离模型
AUDIO_LINEAR_DISTANCE,
//! 音频线性距离箝位模型
AUDIO_LINEAR_DISTANCE_CLAMPED,
//! 音频指数距离模型
AUDIO_EXPONENT_DISTANCE,
//! 音频指数距离箝位模型
AUDIO_EXPONENT_DISTANCE_CLAMPED
};
//! 定义默认空间音速
const float AUDIO_SPACE_VELOCITY = 343.0f;
//! 定义默认多普勒因子
const float AUDIO_DOPPLER_FACTOR = 1.0f;
/////////////////////////////////////////////////////////
//! 定义盖莫音频引擎音源类
/////////////////////////////////////////////////////////
class AudioSource
{
public:
/////////////////////////////////////////////////////////
//! 播放指定音频文件
/////////////////////////////////////////////////////////
virtual bool Play(const char* audiofile, bool loop) = 0;
/////////////////////////////////////////////////////////
//! 停止播放音频
/////////////////////////////////////////////////////////
virtual bool Stop() = 0;
/////////////////////////////////////////////////////////
//! 暂停音频播放
/////////////////////////////////////////////////////////
virtual bool Pause() = 0;
/////////////////////////////////////////////////////////
//! 设置音频增益[0.0f,1.0f]
/////////////////////////////////////////////////////////
virtual void SetSourceGain(float gain) = 0;
/////////////////////////////////////////////////////////
//! 获取音频增益
/////////////////////////////////////////////////////////
virtual void GetSourceGain(float &gain) = 0;
/////////////////////////////////////////////////////////
/// 获取,设置音源位置(x,y,z)
/////////////////////////////////////////////////////////
virtual void GetSourcePosition(float &x,float &y,float &z) = 0;
virtual void SetSourcePosition(float x, float y, float z) = 0;
/////////////////////////////////////////////////////////
/// 获取,设置音源速度
/////////////////////////////////////////////////////////
virtual void GetSourceVelocity(float &x, float &y, float &z) = 0;
virtual void SetSourceVelocity(float x, float y, float z) = 0;
/////////////////////////////////////////////////////////
/// 获取,设置音源方向(x,y,z,v1,v2,v3)
/////////////////////////////////////////////////////////
virtual void GetSourceDirection(float &x,float &y,float &z,float &a,float &b,float &c) = 0 ;
virtual void SetSourceDirection(float x,float y,float z,float a = 0,float b = 1,float c = 0) = 0;
/////////////////////////////////////////////////////////
/// 设置Reverb值([0,1.0])
/////////////////////////////////////////////////////////
virtual bool SetReverbScale(float scale) = 0;
/////////////////////////////////////////////////////////
/// 设置Reverb值([0,1.0])
/////////////////////////////////////////////////////////
virtual bool SetReverbDelay(float delay) = 0;
/////////////////////////////////////////////////////////
/// 设置音源锥
/////////////////////////////////////////////////////////
virtual void SetAudioCone(float innerangle, float outerangle, float outergain) = 0;
/////////////////////////////////////////////////////////
/// 设置为环境音,检测是否为环境音
/////////////////////////////////////////////////////////
virtual void SetAmbient(bool ambient) = 0;
virtual bool IsAmbient() = 0;
/////////////////////////////////////////////////////////
/// 设置音源位置是否相对于听者,检测是否相对于听者
/////////////////////////////////////////////////////////
virtual void SetRelative(bool relative) = 0;
virtual bool IsRelative() = 0;
/////////////////////////////////////////////////////////
/// 设置,获取音源最大传播距离(仅音频物理模型为AUDIO_INVERSE_DISTANCE_CLAMPED有效)
/////////////////////////////////////////////////////////
virtual void SetMaxDistance(float distance) = 0;
virtual void GetMaxDistance(float &distance)= 0;
/////////////////////////////////////////////////////////
/// 设置,获取音频扇出值[0.0,1.0]
/////////////////////////////////////////////////////////
virtual void SetRolloffFactor(float factor) = 0;
virtual void GetRolloffFactor(float &factor)=0;
/////////////////////////////////////////////////////////
/// 设置,获取音频音节值(pitch值每减少50%则音阶降低1个八度音阶) [0,1]
/////////////////////////////////////////////////////////
virtual void SetPitch(float pitch) = 0;
virtual void GetPitch(float &pitch) = 0;
};
/////////////////////////////////////////////////////////
//! 定义音频设备基类
/////////////////////////////////////////////////////////
class AudioDevice
{
public:
/////////////////////////////////////////////////////////
//! 获取音频引擎版本号
/////////////////////////////////////////////////////////
virtual const char* GetVerson() const = 0;
/////////////////////////////////////////////////////////
//! 获取音频引擎作者
/////////////////////////////////////////////////////////
virtual const char* GetMaker() const = 0;
/////////////////////////////////////////////////////////
//! 查询音频设备是否支持指定格式的音频文件
/////////////////////////////////////////////////////////
virtual bool IsSupport(const AudioFileType& type) = 0;
/////////////////////////////////////////////////////////
//! 抓取音频音源指针(最大可获取255个音源)
/////////////////////////////////////////////////////////
virtual AudioSource* GetAudioSource() = 0;
/////////////////////////////////////////////////////////
/// 获取,设置音频听者位置(x,y,z)
/////////////////////////////////////////////////////////
virtual void GetListenerPosition(float &x,float &y,float &z) = 0;
virtual void SetListenerPosition(float x, float y, float z) = 0;
/////////////////////////////////////////////////////////
/// 获取,设置音频听者方向(x,y,z,v1,v2,v3)
/////////////////////////////////////////////////////////
virtual void GetListenerDirection(float &x,float &y,float &z,float &a,float &b,float &c) = 0 ;
virtual void SetListenerDirection(float x,float y,float z,float a = 0,float b = 1,float c = 0) = 0;
/////////////////////////////////////////////////////////
/// 获取,设置音频听者速度
/////////////////////////////////////////////////////////
virtual void GetListenerVelocity(float &x, float &y, float &z) = 0;
virtual void SetListenerVelocity(float x, float y, float z) = 0;
};
/////////////////////////////////////////////////////////
//! 初始化音频引擎(返回为音频设备指针)
/////////////////////////////////////////////////////////
G_FUNC(AudioDevice*) InitAudioDevice(AudioModel model, float audiovel, float dopplerfactor);
/////////////////////////////////////////////////////////
//! 卸载音频引擎(写在成功返回真)
/////////////////////////////////////////////////////////
G_FUNC(bool) DeinitAudioDevice(void);
}
#endif
|
|