我试过
alBufferf (myChannelId, AL_MAX_GAIN (and AL_GAIN), volumeValue);
并收到错误0xA002。
答案 0 :(得分:1)
正如艾萨克所说,你可能希望为你的来源设定收益:
alSourcef (sourceID, AL_GAIN, volume)
为了避免将来收到神秘的错误代码,您应该养成在您认为可能失败/正在尝试调试的调用之后轮询错误的习惯。
这样,您立即知道“0xA002”是“ AL_INVALID_ENUM ”。
要使用OpenAL执行此操作,请调用“alGetError()”,它会清除并返回最新的错误;
ALenum ALerror = AL_NO_ERROR;
ALerror = alGetError();
std::cout << getALErrorString(ALerror) << std::endl;
你需要写这样的东西来获取错误代码并返回/打印字符串
std::string getALErrorString(ALenum err) {
switch(err) {
case AL_NO_ERROR: return std::string("AL_NO_ERROR - (No error)."); break;
case AL_INVALID_NAME: return std::string("AL_INVALID_NAME - Invalid Name paramater passed to AL call."); break;
case AL_INVALID_ENUM: return std::string("AL_INVALID_ENUM - Invalid parameter passed to AL call."); break;
case AL_INVALID_VALUE: return std::string("AL_INVALID_VALUE - Invalid enum parameter value."); break;
case AL_INVALID_OPERATION: return std::string("AL_INVALID_OPERATION"); break;
case AL_OUT_OF_MEMORY: return std::string("AL_OUT_OF_MEMORY"); break;
default: return std::string("AL Unknown Error."); break;
};
}
您可以在OpenAL Programmer's Guide中准确查找错误代码对特定函数调用的含义。
例如,在第39页上,您可以看到alSourcef上的AL_INVALID_ENUM表示“指定的参数无效”。
答案 1 :(得分:0)
0xA002是linux中的ILLEGAL ENUM ERROR。
你得到了,因为无法修改缓冲区的增益。没有这样的事情。
您可以做的是将AL_GAIN属性设置为侦听器(将其应用于当前上下文中的所有源)或特定源。