游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2807|回复: 3

本人写的超级简单的游戏专业音频库

[复制链接]

50

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2010-1-22 20:30:00 | 显示全部楼层 |阅读模式
支持ogg,wav,mp3
多线程流式播放

编译器支持 vc2009 codeblock devc++
使用简单 仅一个a/lib文件 一个dll 一个hpp头文件
欢迎使用提出宝贵意见
(发布的时debug版本,release是需要付费的)

34

主题

443

帖子

478

积分

中级会员

Rank: 3Rank: 3

积分
478
发表于 2010-1-22 20:48:00 | 显示全部楼层

Re:本人写的超级简单的游戏专业音频库

有vc2009?

50

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 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

50

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2010-1-22 20:51:00 | 显示全部楼层

Re:本人写的超级简单的游戏专业音频库

需要sdk的请发邮件到ccsdu2009@sohu.com索取 请注明所要的对应版本
(分为vc2009,devc++,codeblock-gnu3种)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 00:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表