| 
 | 
 
【基本介绍】 
盖莫音频引擎SDK1.6.0(类似fmod音频api)原本为盖莫游戏引擎开发 
当前支持win7,xmp,vista操作系统 
支持10种音频格式:mp3,ogg,wav,au,aiff,mod,it,xm,s3m,flac 
支持真3d音效 
使用多线程流式播放 
支持vc和mingw系列编译器 
注意这并不是一个播放器! 
 
下面是header全文 
/*!========================================================================== 
*  GaiMo Audio SDK1.6.0 
*     personal edition free. 
*     enterprise edition 388$ 
*     emai:gaimosoft@yahoo.com 
*     website:www.gaimosoft.com 
*     please ensure openal is installed.   
***************************************************************************** 
/*!========================================================================== 
*  GaiMo Audio SDK is a Cplusplus Library designed for game engine used(GaimoEngine.). 
*  The following audio type is supported: 
*  ogg,mp3,wav,it,mod,xm,s3m,flac,au,aiff 
*  And it support 3D playing mode and support. 
*  There are 2 versions here: 
*     personal edition free 
*     and enterprise edition 388$ 
*     Emai:gaimosoft@yahoo.com 
*  libsndfile.dll is additive. 
*     PLEASE ENSURE OPENAL IS INSTALLED. 
***************************************************************************** 
//! 盖莫游戏3d音频引擎是成都盖莫软件技术工作室推出的一款专门 
//! 面向游戏开发的音频库,该库具有使用简介,功能强大的功能 
//! 本音频库使用于非商业产品不收取任何费用 
//! websize:www.gaimo.net 
//! email:ccsdu2004@yahoo.com.cn 
//! telephone:+86-028-67607663, 
//! fax:      +86-028-67607665 
//! 版本更新list. 
/*!========================================================================== 
*  2010.01.22 版本:1.0.0 
*     提供功能:支持wav,ogg,mp3格式 
*              使用多线程流式播放 
*              简单易用的程序接口 
*     使用本版本需要安装OpenAL驱动      
****************************************************************************/ 
/*!========================================================================== 
*  2010.03.20 版本:1.1.0 
*     提供功能:真3d音效,及几个音效 
*     使用本版本需要安装OpenAL驱动      
****************************************************************************/ 
/*!========================================================================== 
*  2010.05.05 版本:1.2.8 
*     增加功能:支持音频录入到文件(当前仅为wav格式) 
*     增加了对:it,s3m,xm,mod4种音乐文件的支持 
*     修改了几个接口 
*     使用本版本需要安装OpenAL驱动      
****************************************************************************/ 
/*!========================================================================== 
* 2010.05.18 版本1.4.2 
*     1.平台支持:xp,vista,win7 
*     2.编译器支持vc6,vc7,vc9,codeblock,devc++ 
*     4.增加对aiff,flac音频格式的支持 
*     5.改用多线程录入音频 
****************************************************************************/ 
/*!========================================================================== 
* 2010.06.20 版本1.5.5 
*     1.通过使用sndfile插件支持flac,au等其它音频格式 
*     2.增加了设置音频插件目录的参数 
*     3.提供获取音频播放当前时间和总播放时间的接口 
*     4.支持从内存播放音频 
*     5.支持efx reverb 
*     6.支持reverb 
*     7.支持lowpass filter. 
*     7.可配置的音效参数修改(通过xml配置) 
*     8.增加了检测音卡的日志输出内容 
*     8.增加了一个完全的播放器界面-盖莫播放器 
****************************************************************************/ 
/*!========================================================================== 
* 2010.10.25 版本1.6.0 
*     1.changed interface. 
*     2.remove effect config file setting. 
****************************************************************************/ 
/*!========================================================================== 
* 盖莫音频引擎发展方向 
*     1.对多平台的支持(含mac,xbox,unix...) 
*     2.对多语言的支持(C#,Python,Dephi,易语言,...) 
*     3.脱离OpenAL音频接口 
*     4.对其他音频格式的支持(voc,aac,acc,ape,wma,midi)(插件或内置) 
*     5.音频频谱处理 
*     6.音频格式转换 
****************************************************************************/ 
/*!========================================================================== 
* 盖莫音频引擎设计的原则和宗旨 
*     1.针对游戏开发,在保持使用极其方便的基础之上满足游戏音频的各类需要 
*     2.可使用盖莫音频引擎设计简单的播放器 
****************************************************************************/   
#ifndef GAIMO_AUDIODEVICE_HPP 
#define GAIMO_AUDIODEVICE_HPP 
 
//////////////////////////////////////////////////////////// 
/// header file include 
//////////////////////////////////////////////////////////// 
#include <string> 
 
#if defined(_WIN32) || (defined(__WIN32__)) || defined(WIN32) 
   #ifndef G_WIN32 
   #define G_WIN32 
   #endif    
#endif   
 
#ifndef __cplusplus 
    #error please use cplusplus compiler. 
#endif 
 
#ifndef G_CALL 
#  ifdef G_WIN32 
#    define G_CALL __stdcall 
#  else 
#    define G_CALL __stdcall 
#  endif 
#endif 
 
#if !defined(G_DLL_API) && defined(G_WIN32) 
    #if defined(BUILDING_DLL) 
        #define G_DLL_API __declspec(dllexport) 
    #else 
        #define G_DLL_API __declspec(dllimport) 
    #endif 
#endif 
 
#define G_FUNC(ret) extern "C" G_DLL_API ret 
 
#ifndef NULL 
#define NULL 0 
#endif 
 
typedef unsigned char  uchar8; 
typedef unsigned int   uint; 
typedef unsigned char  uint8; 
typedef signed   short int16; 
typedef unsigned short uint16; 
typedef signed   int   int32; 
typedef std::string    engine_string; 
 
//! 个人版,企业版 
#ifndef GAUDIO_VERSION_PERSON 
#define GAUDIO_VERSION_PERSON   
#endif 
 
namespace core 
{ 
 
///////////////////////////////////////////////////////// 
//! audio file type. 
///////////////////////////////////////////////////////// 
enum AUDIO_FILE_TYPE 
{    
    //! WAV音频格式 
    AUDIO_FILE_TYPE_WAV = 0,  //! support! 
        //! OGG音频格式 
        AUDIO_FILE_TYPE_OGG,      //! support! 
        //! MP3音频格式 
    AUDIO_FILE_TYPE_MP3,      //! support! 
        //! XM,IT,MOD,S3M格式 
        AUDIO_FILE_TYPE_XM,       //! support! 
        AUDIO_FILE_TYPE_IT,       //! support! 
        AUDIO_FILE_TYPE_MOD,      //! support! 
        AUDIO_FILE_TYPE_S3M,      //! support! 
        //! AU格式 
        AUDIO_FILE_TYPE_AU,       //! support! 
        //! AIFF格式 
        AUDIO_FILE_TYPE_AIFF,     //! support! 
        AUDIO_FILE_TYPE_AAC, 
    AUDIO_FILE_TYPE_ACC, 
    AUDIO_FILE_TYPE_MP1, 
    AUDIO_FILE_TYPE_MP2, 
    AUDIO_FILE_TYPE_VOC, 
        //! 微软WMA格式 
        AUDIO_FILE_TYPE_WMA,       
        //! APE压缩格式 
        AUDIO_FILE_TYPE_APE, 
        //! MIDI音乐格式 
        AUDIO_FILE_TYPE_MIDI, 
        //! FLAC音频格式 
        AUDIO_FILE_TYPE_FLAC,     //! support! 
        //! 空的音频格式 
        AUDIO_FILE_TYPE_NULL 
}; 
 
//////////////////////////////////////////////////////////// 
/// audio distance mode.   
////////////////////////////////////////////////////////////        
enum AUDIO_DISTANCE_MODE 
{ 
    AUDIO_DISTANCE_MODEL = 0, 
    AUDIO_INVERSE_DISTANCE, 
        AUDIO_INVERSE_DISTANCE_CLAMPED, 
    AUDIO_LINEAR_DISTANCE, 
    AUDIO_LINEAR_DISTANCE_CLAMPED, 
    AUDIO_EXPONENT_DISTANCE, 
        AUDIO_EXPONENT_DISTANCE_CLAMPED, 
        AUDIO_DISTANCE_MODE_NULL 
};        
 
///////////////////////////////////////////////////////// 
//! audio effect type. 
///////////////////////////////////////////////////////// 
enum AUDIO_EFFECT_TYPE   
{ 
    AUDIO_EFFECT_TYPE_REVERB = 0,           
        AUDIO_EFFECT_TYPE_EFXREVERB,          
    AUDIO_EFFECT_TYPE_CHORUS,            
        AUDIO_EFFECT_TYPE_DISTORTION, 
        AUDIO_EFFECT_TYPE_ECHO, 
        AUDIO_EFFECT_TYPE_FLANGER, 
    AUDIO_EFFECT_TYPE_FREQUENCY_SHIFTER, 
        AUDIO_EFFECT_TYPE_VOCAL_MORPHER, 
        AUDIO_EFFECT_TYPE_PITCH_SHIFTER, 
        AUDIO_EFFECT_TYPE_RING_MODULATOR, 
        AUDIO_EFFECT_TYPE_AUTOWAH, 
        AUDIO_EFFECT_TYPE_COMPRESSOR, 
    AUDIO_EFFECT_TYPE_EQUALIZER, 
        AUDIO_EFFECT_TYPE_NULL 
}; 
 
///////////////////////////////////////////////////////// 
//! audio filter type. 
///////////////////////////////////////////////////////// 
enum AUDIO_FILTER_TYPE 
{ 
        AUDIO_FILTER_TYPE_LOWPASS,    
        AUDIO_FILTER_TYPE_HIGHPASS, 
        AUDIO_FILTER_TYPE_BANDPASS, 
        AUDIO_FILTER_TYPE_NULL 
}; 
 
//! audio vel. 
const float AUDIO_SPACE_VELOCITY = 343.0f; 
 
//! doppler factor. 
const float AUDIO_DOPPLER_FACTOR = 1.0f; 
 
///////////////////////////////////////////////////////// 
/// audio object. 
///////////////////////////////////////////////////////// 
class AudioObject 
{ 
public: 
        virtual ~AudioObject(){} 
public: 
    ///////////////////////////////////////////////////// 
        //! set,get audio object pos. 
        ///////////////////////////////////////////////////// 
        virtual void SetPosition(float x,float y,float z) = 0; 
        virtual void GetPosition(float &x,float &y,float &z) = 0; 
        
        ///////////////////////////////////////////////////// 
        //! set,get audio object direction. 
        ///////////////////////////////////////////////////// 
        virtual void SetDirection(float dirx,float diry,float dirz) = 0; 
    virtual void GetDirection(float &dirx,float &diry,float &dirz) = 0; 
 
        ///////////////////////////////////////////////////// 
        //! set,get audio object vel. 
        ///////////////////////////////////////////////////// 
        virtual void SetVelocity(float velx,float vely,float velz) = 0; 
    virtual void GetVelocity(float &velx,float &vely,float &velz) = 0; 
 
        //////////////////////////////////////////////////// 
        //! move audio object(by offset.) 
        ////////////////////////////////////////////////////           
    virtual void Move(float offsetx,float offsety,float offsetz) = 0;           
}; 
 
////////////////////////////////////////////////////// 
/// audio capture interface. 
////////////////////////////////////////////////////// 
class AudioCapture 
{ 
public: 
        virtual ~AudioCapture(){} 
public: 
    ////////////////////////////////////////////////// 
        //! capture audio and stop it. 
        ////////////////////////////////////////////////// 
        virtual void CaptureAudio() = 0;        
        virtual void CaptureStop() = 0;        
}; 
 
///////////////////////////////////////////////////////// 
/// object listener. 
///////////////////////////////////////////////////////// 
class AudioListener : public AudioObject 
{ 
public: 
    ///////////////////////////////////////////////////// 
        //! set,get global volume(0.0f,1.0f) 
        /////////////////////////////////////////////////////                
    virtual void  SetGlobalVolume(float volume) = 0; 
        virtual float GetGlobalVolume()const = 0;      
}; 
 
//////////////////////////////////////////////////////// 
//! audio source object 
//////////////////////////////////////////////////////// 
class AudioSource : public AudioObject 
{ 
public: 
    //////////////////////////////////////////////////// 
    //! play audio(2d mode.) 
        //////////////////////////////////////////////////// 
    virtual bool Play(const engine_string& audiofile,bool loop = false) = 0; 
        
    //////////////////////////////////////////////////// 
    //! play audio(3d mode.) 
        //////////////////////////////////////////////////// 
    virtual bool Play(const engine_string& audiofile,bool loop,float mindist,float maxdist) = 0;        
 
        //////////////////////////////////////////////////// 
    //! stop,pause audio. 
        //////////////////////////////////////////////////// 
    virtual bool Stop() = 0; 
        virtual bool Pause() = 0; 
 
        /////////////////////////////////////////////////// 
        //! check status. 
        /////////////////////////////////////////////////// 
        virtual bool IsPlay()const = 0; 
        virtual bool IsPause()const = 0; 
        virtual bool IsStop()const = 0; 
        
        /////////////////////////////////////////////////// 
        //! set,get volume[0.0f,1.0f] 
        /////////////////////////////////////////////////// 
        virtual void  SetVolume(float gain) = 0; 
        virtual float GetVolume()const = 0;   
        virtual void  SetMaxVolume(float gain) = 0; 
    virtual float GetMinVolume()const = 0; 
        virtual void  SetMinVolume(float gain) = 0; 
    virtual float GetMaxVolume()const = 0;    
 
    virtual void SetMaxDistance(float distance) = 0; 
    virtual void GetMaxDistance(float &distance)= 0; 
    virtual void SetMinDistance(float distance) = 0; 
    virtual void GetMinDistance(float &distance)= 0; 
    
    virtual void SetAudioCone(float innerangle,float outerangle,float outergain) = 0; 
    virtual void GetAudioCone(float &innerangle,float &outerangle,float &outergain) = 0;   
    
        //////////////////////////////////////////////////// 
    //! get playing time. 
        ////////////////////////////////////////////////////    
        virtual float GetTotalTime()const = 0; 
        virtual float GetCurTime()const = 0; 
 
        //////////////////////////////////////////////////// 
    //! able,disable effectr 
        ////////////////////////////////////////////////////      
        virtual bool EnableEffect(AUDIO_EFFECT_TYPE type) = 0; 
        virtual void DisableEffect() = 0; 
        virtual bool IsEffectActive() = 0; 
        
        //////////////////////////////////////////////////// 
    //! able,disable filter. 
        ////////////////////////////////////////////////////    
    virtual bool AttachFiler(AUDIO_FILTER_TYPE type) = 0;        
}; 
 
 
////////////////////////////////////////////////////// 
//! audio device. 
////////////////////////////////////////////////////// 
class AudioDevice 
{ 
public:       
        ///////////////////////////////////////////////// 
    //! get audio device version. 
        ///////////////////////////////////////////////// 
        virtual engine_string GetVerson() const = 0; 
 
        ///////////////////////////////////////////////// 
        //! get audio maker. 
        ///////////////////////////////////////////////// 
        virtual engine_string GetMaker() const = 0; 
 
        ///////////////////////////////////////////////// 
        //! check given audio type is supported or not. 
        ///////////////////////////////////////////////// 
    virtual bool IsSupport(const AUDIO_FILE_TYPE& type)const = 0; 
 
        ///////////////////////////////////////////////// 
        //! get audio source(personal edition for 5 sources.) 
        ///////////////////////////////////////////////// 
        virtual AudioSource*  GetAudioSource() = 0; 
 
        ///////////////////////////////////////////////// 
        //! get listener pointer(only 1) 
        ///////////////////////////////////////////////// 
    virtual AudioListener* GetAudioListener(float x,float y,float z) = 0; 
    
        ///////////////////////////////////////////////// 
        //! get audio capture pointer(personal edition for 1 capture.) 
        ///////////////////////////////////////////////// 
    virtual AudioCapture* GetAudioCapture(const engine_string& name) = 0; 
 
    virtual void  SetMetersPerUnit(float meters) = 0; 
    virtual float GetMetersPerUnit(void) const = 0;   
        virtual int   GetMaxEffectMuber()const = 0; 
        
        ///////////////////////////////////////////////// 
        //! set doppler factor(1.0f,343.3) 
        ///////////////////////////////////////////////// 
    virtual void  SetDoppler(float factor,float vel) = 0; 
 
        ///////////////////////////////////////////////// 
        //! set audio wolrd sistance model. 
        ///////////////////////////////////////////////// 
        virtual void  SetDistanceModel(const AUDIO_DISTANCE_MODE &model) = 0; 
        
        ///////////////////////////////////////////////// 
        //! check given effect 
        /////////////////////////////////////////////////        
        virtual bool  IsSupportAudioEffect(AUDIO_EFFECT_TYPE type) = 0; 
}; 
 
///////////////////////////////////////////////////// 
//! init audio device(return NULL for failed.) 
///////////////////////////////////////////////////// 
G_FUNC(AudioDevice*) InitAudioDevice(); 
 
///////////////////////////////////////////////////// 
//! deinit audio device. 
///////////////////////////////////////////////////// 
G_FUNC(void)         TerminateAudioDevice(); 
 
} 
 
#endif 
//! maker:ccsdu2004 |   
 
 
 
 |