私は試した
alBufferf (myChannelId, AL_MAX_GAIN (and AL_GAIN), volumeValue);
エラー0xA002が発生しました。
アイザックが言ったように、あなたはおそらくあなたの情報源に利益を設定したいと思うでしょう:
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プログラマーズガイドで、特定の関数呼び出しのエラーコードの意味を正確に調べることができます。
たとえば、39ページで、alSourcefのAL_INVALID_ENUMは、「指定されたパラメータが無効です」を意味していることがわかります。
0xA002は、Linuxでは不正な列挙型エラーです。
バッファのゲインを変更することは不可能であるため、これを取得しました。そのようなことはありません。
できることは、AL_GAIN属性をリスナー(現在のコンテキストのすべてのソースに適用する)または特定のソースに設定することです。