0

我试过了

alBufferf (myChannelId, AL_MAX_GAIN (and AL_GAIN), volumeValue);

并得到错误 0xA002。

4

2 回答 2

1

正如 Isaac 所说,您可能希望为您的 a 资源设置增益:

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 表示“指定的参数无效”。

于 2010-12-13T14:27:03.257 回答
0

0xA002 是 linux 中的非法枚举错误。

你明白了,因为不可能修改缓冲区的增益。没有这样的事情。

您可以做的是将 AL_GAIN 属性设置为侦听器(将其应用于当前上下文中的所有源)或特定源。

于 2010-11-30T04:53:14.767 回答