如何在OpenAL中设置通道增益?

时间:2010-10-21 14:56:47

标签: audio volume openal

我试过

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

并收到错误0xA002。

2 个答案:

答案 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属性设置为侦听器(将其应用于当前上下文中的所有源)或特定源。