游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2598|回复: 0

盖莫音频引擎1.4.2发布

[复制链接]

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-5-28 17:49:00 | 显示全部楼层 |阅读模式
盖莫音频引擎1.4.2发布
1.支持平台win7,xp,vista
2.支持语言c++
3.支持编译器vc6.0,vc7.1,vc8,vc9,devc++,codeblock
4.支持音频格式flac,aiff,wav,it,mod,s3m,xm,ogg,mp3
5.播放模式:多线程流式播放
6.使用多线程处理音频录入

盖莫音频引擎系列的最大特点:简单易用

可能问题:
1.为啥不支持各种音效?
   当前为alpha版本,betha版会加入的
2.是否支持xbox,iphone?
   当前不支持.不过后者在考虑之列
3.为啥不支持midi?
   以后会支持的
4.是否支持Python等语言?
   以后会支持的   
5.是否支持播放压缩包中的音频?
   下一版本会的(播放内存音频)
6.业余使用是否收费?
   不收费,只需要告诉一声即可
7.商业使用是否收费?
   需要一点维护费
8.音频这块比较简单,自行设计一个岂不更好?
   自行设计成本远高于使用本引擎
0.弄这个多久了?
   3年吧
10.使用的时候为啥跑出来一个log文件?
   不出来才奇怪
11.当前版本功能是否达到游戏开发要求
   一般游戏足以
12.非游戏开发领域是否可以使用?
   当前可以
13.去那里下载?
   下面的链接地址
14.其他问题请发邮件到:ccsdu2004@yahoo.com.cn咨询

下载链接:
1.vc版本 可使用编译器vc6.0,vc7.1,vc8,vc9:
   http://www.pudn.com/downloads258/sourcecode/game/detail1192191.html
   http://download.csdn.net/source/2403577
2.gcc版本 可使用编译器devc++,codeblock
   http://www.pudn.com/downloads258/sourcecode/multimedia/audio/detail1192125.html   
   http://ccsdu2004.download.csdn.net/

头文件全文如下:


//! 盖莫游戏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驱动     
****************************************************************************/
/*!==========================================================================
* 1.4.2 alpha版本修改说明(本发布版本)
*     1.平台支持:xp,vista,win7
*     2.编译器支持vc6,vc7,vc9,codeblock,devc++
*     3.提供pdf说明文档一份
*     4.增加对aiff,flac,midi音频格式的支持
*     5.改用多线程录入音频
****************************************************************************/
/*!==========================================================================
* 1.5.0版本展望
*     1.语种方面:考虑对C#,Python,Lua,易语言的绑定
*     2.平台方面:考虑对Linux的支持
*     3.支持播放内存音频
*     4.音效方面(支持音效待定)
*     5.音频格式增加对APE,WMA的支持
****************************************************************************/
/*!==========================================================================
* 盖莫音频引擎发展方向
*     1.对多平台的支持(含mac,xbox,unix)
*     2.对多语言的支持(C#,Python,Dephi,易语言,)
*     3.脱离OpenAL音频接口
*     4.全方位的音效支持
****************************************************************************/
/*!==========================================================================
* 盖莫音频引擎设计的原则和宗旨
*     1.针对游戏开发,在保持使用极其方便的基础之上满足游戏音频的各类需要
****************************************************************************/  
#ifndef GAIMO_AUDIODEVICE_HPP
#define GAIMO_AUDIODEVICE_HPP

////////////////////////////////////////////////////////////
/// 头文件包含
////////////////////////////////////////////////////////////
#include <string>

#ifdef G_ENGINE
  #error 盖莫游戏引擎内置盖莫音频引擎!
#endif

#if defined(_WIN32) || (defined(__WIN32__)) || defined(WIN32)
   #define G_WIN32  
#endif  

#ifndef __cplusplus
    #error 请使用c++编译器
#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;

namespace core
{
         
////////////////////////////////////////////////////////
/// 定义引擎引用计数类
////////////////////////////////////////////////////////     
class RefCount
{
public:
    ////////////////////////////////////////////////////////////
    /// 引用计数构造函数
    ////////////////////////////////////////////////////////////
    RefCount(): refcnt(1),auto_del(true){}

    ////////////////////////////////////////////////////////////
    /// 引用计数析构函数
    ////////////////////////////////////////////////////////////
    virtual ~RefCount(){}
   
    ////////////////////////////////////////////////////////////
    /// 使用自删除机制
    ////////////////////////////////////////////////////////////   
    void SetAutoDel(bool able = true){auto_del = able;}
   
    ////////////////////////////////////////////////////////////
    /// 检测是否为自删除机制
    ////////////////////////////////////////////////////////////
    const bool GetAutoDel()const{return auto_del;}
   
    ////////////////////////////////////////////////////////////
    /// 增加对象引用计数
    ////////////////////////////////////////////////////////////
    void Grab()const{++refcnt;};

    ////////////////////////////////////////////////////////////
    /// 减少对象引用计数
    ////////////////////////////////////////////////////////////
    bool Drop() const
    {
        --refcnt;
        if (refcnt == 0 && auto_del == true)
        {
            delete this;
            return true;
        }
        return false;
    }

    ////////////////////////////////////////////////////////////
    /// 获取引用计数
    ////////////////////////////////////////////////////////////
    int GetRefCnt()const{return refcnt;};

private:
    mutable int  refcnt;
    bool    auto_del;
};

////////////////////////////////////////////////////////
/// 模板RefPtr用于基于计数的对象管理
/// 所有对象都必须要从RefCount继承之
////////////////////////////////////////////////////////
template<class T>
class RefPtr
{
public:
    RefPtr(T* object = NULL)
    {   
        this->object = object;
        if(this->object)
           object->Grab();
    }
   
    RefPtr(const RefPtr<T>& other)
    {
        object = NULL;
        *this = other;
    }
   
    ~RefPtr()
    {
        if(object)
           object->Drop();
        object = NULL;
    }

    RefPtr<T>& operator=(const RefPtr<T>& other)
    {
        if (other)
           other->Grab();
        if (object)
           object->Drop();
        object = other.get();
        return *this;
    }
   
    RefPtr& operator=(T* other)
    {
        if (other)
            other->Grab();
         if (object)
            object->Drop();
        object = other;
        return *this;
    }
   
    void swap(RefPtr<T>& other)
    {
        T* tmp = other.get();
        other = object;
        object = tmp;
    }
   
    void reset(T* other){*this = other;}
    T* get() const {return object;}
    T* operator->() const{return object;}
    T& operator*() const{return *object;}
    bool operator<(const RefPtr<T>& other)const{return object < other.get();}
    operator bool() const {return object != NULL;}
protected:
    T*   object;
};

/////////////////////////////////////////////////////////
//! 枚举音频文件格式
/////////////////////////////////////////////////////////
enum AUDIO_FILE_TYPE
{   
    //! WAV音频格式
    AUDIO_FILE_TYPE_WAV = 0,  //! 支持
    //! OGG音频格式
    AUDIO_FILE_TYPE_OGG,      //! 支持
    //! MP3音频格式
    AUDIO_FILE_TYPE_MP3,      //! 支持
    //! XM,IT,MOD,S3M格式
    AUDIO_FILE_TYPE_XM,       //! 支持
    AUDIO_FILE_TYPE_IT,       //! 支持
    AUDIO_FILE_TYPE_MOD,      //! 支持
    AUDIO_FILE_TYPE_S3M,      //! 支持
    //! AU格式
    AUDIO_FILE_TYPE_AU,      
    //! AIFF格式
    AUDIO_FILE_TYPE_AIFF,     //! 支持
    //! 微软WMA格式
    AUDIO_FILE_TYPE_WMA,      
    //! APE压缩格式
    AUDIO_FILE_TYPE_APE,
    //! MIDI音乐格式
    AUDIO_FILE_TYPE_MIDI,
    //! FLAC音频格式
    AUDIO_FILE_TYPE_FLAC,     //! 支持
    //! 空的音频格式
    AUDIO_FILE_TYPE_NULL
};

////////////////////////////////////////////////////////////
/// 枚举音频音效距离模型
////////////////////////////////////////////////////////////   
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
};   

/////////////////////////////////////////////////////////
//! 枚举音效类型
/////////////////////////////////////////////////////////
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_COUNT,
    AUDIO_EFFECT_TYPE_NULL
};

/////////////////////////////////////////////////////////
//! 枚举音频过滤器类型
/////////////////////////////////////////////////////////
enum AUDIO_FILTER_TYPE
{
    AUDIO_FILTER_TYPE_LOWPASS,
    AUDIO_FILTER_TYPE_HIGHPASS,
    AUDIO_FILTER_TYPE_BANDPASS,
    AUDIO_FILTER_TYPE_COUNT,
    AUDIO_FILTER_TYPE_NULL
};

//! 定义默认空间音速
const float AUDIO_SPACE_VELOCITY = 343.0f;

//! 定义默认多普勒因子
const float AUDIO_DOPPLER_FACTOR = 1.0f;

/////////////////////////////////////////////////////////
/// 定义音频对象基类
/////////////////////////////////////////////////////////
class AudioObject : public RefCount
{
public:
    /////////////////////////////////////////////////////
    //! 设置,获取音频对象位置
    /////////////////////////////////////////////////////
    virtual void SetPosition(float x,float y,float z) = 0;
    virtual void GetPosition(float &x,float &y,float &z) = 0;
   
    /////////////////////////////////////////////////////
    //! 设置,获取音频对象方向
    /////////////////////////////////////////////////////
    virtual void SetDirection(float dirx,float diry,float dirz) = 0;
    virtual void GetDirection(float &dirx,float &diry,float &dirz) = 0;

    /////////////////////////////////////////////////////
    //! 设置,获取音频对象速度
    /////////////////////////////////////////////////////
    virtual void SetVelocity(float velx,float vely,float velz) = 0;
    virtual void GetVelocity(float &velx,float &vely,float &velz) = 0;

    ////////////////////////////////////////////////////
    //! 移动音频对象(相对于上次的位置的偏移量)
    ////////////////////////////////////////////////////      
    virtual void Move(float offsetx,float offsety,float offsetz) = 0;      
};

/////////////////////////////////////////////////////////
/// 定义音频过滤器基类
/////////////////////////////////////////////////////////
class AudioFilter : public RefCount
{
public:
    ////////////////////////////////////////////////////////
    //! 设置,获取音频过滤器音量[0,1]
    ////////////////////////////////////////////////////////
    virtual bool  SetVolume(const float& volume) = 0;
    virtual float GetVolume()const = 0;

    ////////////////////////////////////////////////////////
    //! 设置,获取低频音量
    ////////////////////////////////////////////////////////
    virtual bool  SetLowVolume(const float &volume) = 0;
    virtual float GetLowVolume()const = 0;
   
    ////////////////////////////////////////////////////////
    //! 设置,获取高频频音量
    ////////////////////////////////////////////////////////
    virtual bool  SetHighVolume(const float &volume) = 0;
    virtual float GetHighVolume() const = 0;   
        
    ////////////////////////////////////////////////////////
    //! 检测过滤器是否合法
    ////////////////////////////////////////////////////////
    virtual bool IsValid() const = 0;
};

/////////////////////////////////////////////////////////
/// 定义音频听者基类
/////////////////////////////////////////////////////////
class AudioListener : public AudioObject
{
public:
    /////////////////////////////////////////////////////
    //! 设置,获取全局音量(0.0f,1.0f)
    /////////////////////////////////////////////////////        
    virtual void  SetGlobalVolume(float volume) = 0;
    virtual float GetGlobalVolume()const = 0;     
};

////////////////////////////////////////////////////////
//! 定义盖莫音频引擎音源类
////////////////////////////////////////////////////////
class AudioSource : public AudioObject
{
public:
    ////////////////////////////////////////////////////
    //! 播放指定音频文件(2D模式)
    ////////////////////////////////////////////////////
    virtual bool Play(const engine_string& audiofile,bool loop = false) = 0;
   
    ////////////////////////////////////////////////////
    //! 播放指定音频文件(3D模式)(参数:音频文件名字,是否循环播放,音频穿透能力,最小音距,最小音距)
    ////////////////////////////////////////////////////
    virtual bool Play(const engine_string& audiofile,bool loop,float mindist,float maxdist,float strength = 0.3f) = 0;   

    ////////////////////////////////////////////////////
    //! 停止,暂停播放音频
    ////////////////////////////////////////////////////
    virtual bool Stop() = 0;
    virtual bool Pause() = 0;

    ///////////////////////////////////////////////////
    //! 检测音源状态函数
    ///////////////////////////////////////////////////
    virtual bool IsPlay()const = 0;
    virtual bool IsPause()const = 0;
    virtual bool IsStop()const = 0;
   
    ///////////////////////////////////////////////////
    //! 设置,获取音频增益[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;   

    ///////////////////////////////////////////////////
    /// 设置,获取音源最大,最小传播距离(仅对3D播放有效)
    ///////////////////////////////////////////////////
    virtual void SetMaxDistance(float distance) = 0;
    virtual void GetMaxDistance(float &distance)= 0;
    virtual void SetMinDistance(float distance) = 0;
    virtual void GetMinDistance(float &distance)= 0;
   
    ///////////////////////////////////////////////////
    /// 设置,获取音源锥(内锥,外锥,外增益)(仅对3D播放有效)
    ///////////////////////////////////////////////////
    virtual void SetAudioCone(float innerangle,float outerangle,float outergain) = 0;
    virtual void GetAudioCone(float &innerangle,float &outerangle,float &outergain) = 0;  
};

//////////////////////////////////////////////////////
/// 定义音频录入类接口
//////////////////////////////////////////////////////
class AudioCapture : public RefCount
{
public:
    //////////////////////////////////////////////////
    //! 捕获,停止捕获音频数据
    //////////////////////////////////////////////////
    virtual void CaptureAudio() = 0;   
    virtual void CaptureStop() = 0;   
};

//////////////////////////////////////////////////////
//! 定义音频设备基类
//////////////////////////////////////////////////////
class AudioDevice : public RefCount
{
public:      
    /////////////////////////////////////////////////
    //! 获取音频引擎版本号
    /////////////////////////////////////////////////
    virtual engine_string GetVerson() const = 0;

    /////////////////////////////////////////////////
    //! 获取音频引擎作者
    /////////////////////////////////////////////////
    virtual engine_string GetMaker() const = 0;

    /////////////////////////////////////////////////
    //! 查询音频设备是否支持指定格式的音频文件
    /////////////////////////////////////////////////
    virtual bool IsSupport(const AUDIO_FILE_TYPE& type)const = 0;

    /////////////////////////////////////////////////
    //! 抓取音频音源指针(最大可获取255个音源)
    /////////////////////////////////////////////////
    virtual RefPtr<AudioSource>  GetAudioSource()const = 0;

    /////////////////////////////////////////////////
    //! 获取听者指针(全局唯一)(参数:位置)
    /////////////////////////////////////////////////
    virtual RefPtr<AudioListener> GetAudioListener(float x,float y,float z)= 0;
   
    /////////////////////////////////////////////////
    //! 获取音频捕获设备指针(参数为音频名字)(当前仅仅支持wav格式)(全局唯一)
    /////////////////////////////////////////////////
    virtual RefPtr<AudioCapture> GetAudioCapture(const engine_string& name = "capture")const = 0;     

    /////////////////////////////////////////////////
    //! 设置,获取音效作用单位
    /////////////////////////////////////////////////
    virtual void  SetMetersPerUnit(float meters) = 0;
    virtual float GetMetersPerUnit(void) const = 0;  

    /////////////////////////////////////////////////
    //! 获取同时支持的音频源最大音效个数
    /////////////////////////////////////////////////
    virtual int   GetMaxEffectMuber()const = 0;
   
    /////////////////////////////////////////////////
    //! 设置多普勒参数(默认为1.0f,343.3)
    /////////////////////////////////////////////////
    virtual void  SetDoppler(float factor,float vel) = 0;

    /////////////////////////////////////////////////
    //! 设置音频世界距离模型
    /////////////////////////////////////////////////
    virtual void  SetDistanceModel(const AUDIO_DISTANCE_MODE &model) = 0;
};

/////////////////////////////////////////////////////
//! 初始化盖莫音频设备并返回音频设备指针(初始化失败则返回NULL)
/////////////////////////////////////////////////////
G_FUNC(AudioDevice*) InitAudioDevice();

/////////////////////////////////////////////////////
//! 卸载盖莫音频设备(释放相关资源)
/////////////////////////////////////////////////////
G_FUNC(void)         TerminateAudioDevice();

}

#endif
//! maker:ccsdu2004
附带4个小demo如下:
1.
/*!==========================================================================
*
*  盖莫游戏引擎(GaiMo Game Engine)
*
*  版权所有 (C) 2009-2009 成都盖莫软件技术工作室 保留所有权利
*  Copyright (C) 成都盖莫软件技术工作室.  All Rights Reserved.
*
*  了解更多情况,请访问 http://www.gaimo.net
****************************************************************************/
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <AudioDevice.hpp>

int main()
{
    std::cout<<"欢迎使用盖莫音频引擎!"<<std::endl;
    //! 初始化设备并获取音频设备指针
    core::AudioDevice *device = core::InitAudioDevice();

    //! 获取音源指针
    core::RefPtr<core::AudioSource> source = device->GetAudioSource();

    //! 播放给定音频文件
    std::cout<<"play:"<<source-&gtlay("..\\audio//爱笑的眼睛.aif",true)<<std::endl;

    while(getche() != 'q');

    core::TerminateAudioDevice();
    system("pause");

    return EXIT_SUCCESS;
}

2.
/*!==========================================================================
*
*  盖莫游戏引擎(GaiMo Game Engine)
*
*  版权所有 (C) 2009-2009 成都盖莫软件技术工作室 保留所有权利
*  Copyright (C) 成都盖莫软件技术工作室.  All Rights Reserved.
*
*  了解更多情况,请访问 http://www.gaimo.net
****************************************************************************/
#include <AudioDevice.hpp>
#include <conio.h>
#include <cmath>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#define MAX_DST 10
#define MAX_POS 20

int main()
{
    std::cout<<"欢迎使用盖莫音频引擎!"<<std::endl;
    core::AudioDevice *device = core::InitAudioDevice();    ;

    //! 获取一个音源
    core::RefPtr<core::AudioSource> source = device->GetAudioSource();

    std::cout<<"play:"<<source->Play("..\\audio//主题.wav",true,0,MAX_DST)<<std::endl;

    float itr = 0;
    while(1)
    {
        float x = MAX_POS * cosf(itr);
        float z = MAX_POS * cosf(itr);
        source->Move(x,0,z);
        itr+= 0.0001*0.017453293f;
    }

    core::TerminateAudioDevice();
    system("pause");

    return EXIT_SUCCESS;
}



3.
#include <AudioDevice.hpp>
#include <iostream>
#include <conio.h>
#include <windows.h>

#define CAPTURE_TIME 30000

int main()
{
    std::cout<<"欢迎使用盖莫音频引擎!"<<std::endl;
    //! 初始化设备并获取音频设备指针
    core::AudioDevice *device = core::InitAudioDevice();
   
    //! 获取音源指针
    core::RefPtr<core::AudioSource> source = device->GetAudioSource();
   
    //! 获取音频捕获指针
    core::RefPtr<core::AudioCapture> capture = device->GetAudioCapture("capture");

    //! 播放给定音频文件
    std::cout<<"play:"<<source->Play("..\\audio//glance.xm",true)<<std::endl;  

    capture->CaptureAudio();
   
    unsigned long time = timeGetTime();
    while(1)
    {
        if(timeGetTime() - time >  CAPTURE_TIME)
           break;
    }

    capture->CaptureStop();
   
    core::TerminateAudioDevice();

    return 1;
}


4.
/*!==========================================================================
*
*  盖莫游戏引擎(GaiMo Game Engine)
*
*  版权所有 (C) 2009-2009 成都盖莫软件技术工作室 保留所有权利
*  Copyright (C) 成都盖莫软件技术工作室.  All Rights Reserved.
*
*  了解更多情况,请访问 http://www.gaimo.net
****************************************************************************/
#include <iostream>
#include <conio.h>
#include <AudioDevice.hpp>

char* mp3  = "..\\audio//DarinPeerless.mp3";
char* ogg  = "..\\audio//GetOut.ogg";
char* xm   = "..\\audio//Azure.xm";
char* s3m  = "..\\audio//Friday.s3m";
char* mod  = "..\\audio//Gimme the beat boys.mod";
char* aiff = "..\\audio//爱笑的眼睛.aif";
char* flac = "..\\audio//duck.flac";
short flag = 0;

int main()
{   
    std::cout<<"欢迎使用盖莫音频引擎!"<<std::endl;
    //! 初始化设备并获取音频设备指针
    core::AudioDevice *device = core::InitAudioDevice();
   
    std::cout<<"按键0播放mp3"<<std::endl;
    std::cout<<"按键1播放ogg"<<std::endl;
    std::cout<<"按键2播放xm"<<std::endl;
    std::cout<<"按键3播放s3m"<<std::endl;
    std::cout<<"按键4播放mod"<<std::endl;
    std::cout<<"按键5播放aiff"<<std::endl;
    std::cout<<"按键6播放flac"<<std::endl;
    std::cin >> flag;
    std::cout << std::endl;
   
    //! 获取音源指针
    core::RefPtr<core::AudioSource> source = device->GetAudioSource();
    source->SetVolume(1.0f);
   
    //! 播放给定音频文件
    if(flag == 0)
        std::cout<<"play:"<<source->Play(mp3,true)<<std::endl;  
    else if(flag == 1)
        std::cout<<"play:"<<source->Play(ogg,true)<<std::endl;
    else if(flag == 2)
        std::cout<<"play:"<<source->Play(xm,true)<<std::endl;
    else if(flag == 3)
        std::cout<<"play:"<<source->Play(s3m,true)<<std::endl;
    else if(flag == 4)
        std::cout<<"play:"<<source->Play(mod,true)<<std::endl;
    else if(flag == 5)
        std::cout<<"play:"<<source->Play(aiff,true)<<std::endl;
    else if(flag == 6)
        std::cout<<"play:"<<source->Play(flac,true)<<std::endl;
    while(getche() != 'q');
   
    core::TerminateAudioDevice();
    system("pause");
     
    return EXIT_SUCCESS;
}


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 19:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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