109 lines
4.8 KiB
C
109 lines
4.8 KiB
C
|
//--------------------------------------------------------------------------------------------------
|
|||
|
// OpenAL ExtEdition SDK
|
|||
|
//
|
|||
|
// 这是一个根据标准OpenAL SDK所编写的特殊增强版本,它支持目前所有的OpenAL扩展。
|
|||
|
//
|
|||
|
// 作者: 胡颖卓
|
|||
|
// 版本: 1.15
|
|||
|
// 对应OpenAL版本: 1.1
|
|||
|
// 对应语言: C/C++
|
|||
|
// 对应操作系统: Windows,MacOSX,iOS,Linux,BSD,Android
|
|||
|
//
|
|||
|
// 第一版编写时间: 2003年10月5日
|
|||
|
// 当前版完成时间: 2015年7月6日
|
|||
|
//
|
|||
|
// 官方网站: http://www.hyzgame.com.cn
|
|||
|
// OpenAL官方网站: http://www.openal.org
|
|||
|
//--------------------------------------------------------------------------------------------------
|
|||
|
#ifndef OpenALH
|
|||
|
#define OpenALH
|
|||
|
|
|||
|
#ifdef __al_h_
|
|||
|
#error 请不要使用原始的OpenAL头文件
|
|||
|
#else
|
|||
|
#define __al_h_
|
|||
|
#endif //__al_h_
|
|||
|
|
|||
|
#include<hgl/platform/Platform.h>
|
|||
|
#include<hgl/type/List.h>
|
|||
|
|
|||
|
#include<hgl/al/al.h>
|
|||
|
#include<hgl/al/alc.h>
|
|||
|
#include<hgl/al/xram.h>
|
|||
|
#include<hgl/al/efx.h>
|
|||
|
|
|||
|
namespace openal ///OpenAL EE所使用的名字空间
|
|||
|
{
|
|||
|
bool LoadOpenAL(const os_char *driver_name=nullptr); ///<加载OpenAL,参数为驱动名称
|
|||
|
|
|||
|
#define AL_DEVICE_NAME_MAX_LEN 256 ///<音频设备名称最大长度
|
|||
|
|
|||
|
struct OpenALDevice
|
|||
|
{
|
|||
|
char name[AL_DEVICE_NAME_MAX_LEN]; ///<设备名称
|
|||
|
char specifier[AL_DEVICE_NAME_MAX_LEN]; ///<设备技术名称
|
|||
|
int major,minor; ///<设备版本号
|
|||
|
};
|
|||
|
|
|||
|
bool alcGetDefaultDevice(OpenALDevice &); ///<取得缺省设备
|
|||
|
int alcGetDeviceList(hgl::List<OpenALDevice> &); ///<取得设备列表
|
|||
|
|
|||
|
void alcSetDefaultContext(); ///<设置缺省上下文
|
|||
|
|
|||
|
const char *alGetErrorInfo(const char *,const int); ///<取得最近的错误
|
|||
|
|
|||
|
/**
|
|||
|
* 初始化OpenAL驱动
|
|||
|
* @param driver_name 驱动名称
|
|||
|
* @return 是否成功
|
|||
|
*/
|
|||
|
bool InitOpenALDriver(const os_char *driver_name=nullptr); ///<初始化OpenAL驱动
|
|||
|
|
|||
|
/**
|
|||
|
* 初始化OpenAL设备
|
|||
|
* @param device 设备名称
|
|||
|
* @return 是否成功
|
|||
|
*/
|
|||
|
bool InitOpenALDevice(const OpenALDevice *device=nullptr);
|
|||
|
|
|||
|
/**
|
|||
|
* 初始化OpenAL驱动与设备(使用本函数等同于依次调用InitOpenALDriver,InitOpenALDevice)
|
|||
|
*/
|
|||
|
bool InitOpenAL(const os_char *driver_name=nullptr,
|
|||
|
const char *device_name=nullptr,
|
|||
|
bool out_info=false,
|
|||
|
bool enum_device=false);
|
|||
|
|
|||
|
void CloseOpenAL(); ///<关闭OpenAL
|
|||
|
|
|||
|
unsigned int AudioTime(ALenum,ALsizei);
|
|||
|
double AudioDataTime(ALuint,ALenum,ALsizei);
|
|||
|
|
|||
|
bool IsSupportFloatAudioData(); ///<是否支持浮点音频数据
|
|||
|
|
|||
|
// #define AL_INVERSE_DISTANCE 0xD001 //倒数距离
|
|||
|
// #define AL_INVERSE_DISTANCE_CLAMPED 0xD002 //钳位倒数距离
|
|||
|
// #define AL_LINEAR_DISTANCE 0xD003 //线性距离
|
|||
|
// #define AL_LINEAR_DISTANCE_CLAMPED 0xD004 //钳位线性距离
|
|||
|
// #define AL_EXPONENT_DISTANCE 0xD005 //指数距离
|
|||
|
// #define AL_EXPONENT_DISTANCE_CLAMPED 0xD006 //钳位指数距离
|
|||
|
bool SetDistanceModel(ALenum dm = AL_INVERSE_DISTANCE_CLAMPED); ///<设置距离模型
|
|||
|
|
|||
|
bool SetSpeedOfSound(const float ss = 1.0f); ///<设置声音速度比值
|
|||
|
|
|||
|
/**
|
|||
|
* 根据海拔和温度设置音速
|
|||
|
* @param height 海拔高度
|
|||
|
* @param temperature 温度(摄氏度)
|
|||
|
* @param humidity 相对湿度
|
|||
|
* @return 音速(米/秒)
|
|||
|
*/
|
|||
|
double SetSpeedOfSound(const double height=0,const double temperature=15,const double humidity=0.5); ///<根据海拔和温度设置音速
|
|||
|
|
|||
|
bool SetDopplerFactor(const float); ///<设置多普勒缩放倍数
|
|||
|
bool SetDopplerVelocity(const float); ///<设置多普勒速度
|
|||
|
//--------------------------------------------------------------------------------------------------
|
|||
|
#define alLastError() alGetErrorInfo(__FILE__,__LINE__)
|
|||
|
}//namespace openal
|
|||
|
#endif //OpenALH
|