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

Audio 如何在OpenAL中设置通道增益?,audio,volume,openal,Audio,Volume,Openal,我试过了 并获得错误0xA002。0xA002在linux中是非法的枚举错误 因为不可能修改缓冲区的增益。没有这样的事 您可以将AL_增益属性设置为侦听器(将其应用于当前上下文中的所有源)或特定源。正如Isaac所说,您可能希望在a源上设置增益: alBufferf (myChannelId, AL_MAX_GAIN (and AL_GAIN), volumeValue); 为了避免将来收到神秘的错误代码,您应该养成在您认为可能失败的调用/尝试调试的调用之后轮询错误的习惯 这样,您将立即知道“

我试过了


并获得错误0xA002。

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

因为不可能修改缓冲区的增益。没有这样的事


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

正如Isaac所说,您可能希望在a源上设置增益:

alBufferf (myChannelId, AL_MAX_GAIN (and AL_GAIN), volumeValue);
为了避免将来收到神秘的错误代码,您应该养成在您认为可能失败的调用/尝试调试的调用之后轮询错误的习惯

这样,您将立即知道“0xA002”是“AL_INVALID_ENUM”

要使用OpenAL执行此操作,需要调用“alGetError()”,它将清除并返回最近的错误

alSourcef (sourceID, AL_GAIN, volume)
您可以精确查找中特定函数调用的错误代码的含义


例如,在第39页,您可以看到alSourcef上的ALU INVALID_ENUM表示“指定的参数无效”

多谢各位。我解决了这个问题,为分配给缓冲器的每个声音设置增益。
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;
    };
}