Как настроить усиление канала в OpenAL? - PullRequest
0 голосов
/ 21 октября 2010

Я пытался

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

и получил ошибку 0xA002.

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

Как сказал Исаак, вы, вероятно, хотите установить усиление для своих источников:

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 вы можете увидеть AL_INVALID_ENUM, что в alSourcef означает « Указанный недопустимый параметр ».

0 голосов
/ 30 ноября 2010

0xA002 - НЕЗАКОННАЯ ОШИБКА ENUM в linux.

Вы получили это, потому что невозможно изменить усиление буфера.Нет такой вещи.

Что вы можете сделать, это установить атрибут AL_GAIN либо для слушателя (применяя его ко всем источникам в текущем контексте), либо к конкретному источнику.

...