//-------------------------------------------------------------------------------------------------- // 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 #include #include #include #include #include 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 &); ///<取得设备列表 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