蓋莫音頻引擎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/
http://download.csdn.net/source/2403658
頭文件全文如下:
//! 蓋莫游戲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->Play("..\\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;
}
..................................................................................................................................................................................................................................