Поддерживает ли OpenAL вывод 5.1 в Mac OS X? - PullRequest
4 голосов
/ 13 января 2011

Я в процессе переноса приложения из Windows на Mac OS X. Он использует OpenAL для обработки звука, но я получаю странное поведение при инициализации звукового движка в Mac OS X (код работает на MacBook Pro).

Вот код:

int InitSoundEngine(void* data[NB_BUFFERS], size_t data_size[NB_BUFFERS])
{
    ALCdevice *device;
    ALCcontext *context;
    ALenum format;
    ALuint buffers[NB_BUFFERS];

    device = alcOpenDevice(NULL);
    if (device == NULL)
        goto failed;

    context = alcCreateContext(device, NULL);
    if (context == NULL)
        goto failed;

    alcMakeContextCurrent(context);

    format = alGetEnumValue("AL_FORMAT_51CHN16");
    if (format == 0)
        goto failed;

    alGenBuffers(NB_BUFFERS, buffers);
    if (alGetError() != AL_NO_ERROR)
        goto failed;

    for (int i = 0; i < NB_BUFFERS; ++ i)
    {
        alBufferData(buffers[i], format, data[i], data_size[i], 48000);
        if (alGetError() != AL_NO_ERROR)
            goto failed;
    }

    return NO_ERROR;

 failed:
    /* Cleanup omitted for brievety */
    return INITIALIZATION_FAILED;
 }

Сбой при вызове alBufferData с ошибкой AL_INVALID_VALUE.Прослеживая код, мы обнаружили, что alGetEnumValue("AL_FORMAT_51CHN16") возвращает 0xfffffffful, и подозреваем, что это корень проблемы.

alGetEnumValue говорит:

ALuint alGetEnumValue(const ALchar *enumName);

Возвращает 0, если перечисление не может быть найдено, и устанавливает условие ошибки AL_INVALID_VALUE.Наличие значения enum не гарантирует применимость расширения к текущему контексту.Ненулевой возврат указывает лишь на то, что реализация знает о существовании этого расширения.

Я думаю, что я использую функцию правильно.Есть ли ошибка в реализации OpenAL в Mac OS X?Поддерживается ли вывод 5.1 через OpenAL в Mac OS X?Поддерживается ли он через Core Audio (возможно, перенос на Core Audio, если это правда)?Должен ли я конвертировать аудио из 5.1 в другой формат (3.1, стерео, ...)?

1 Ответ

3 голосов
/ 26 января 2011

Это перечисление принадлежит расширению AL_EXT_MCFORMATS .Он недоступен в Mac OS X.

Да, CoreAudio может обрабатывать 5.1 (или, я думаю, любые) настройки колонок.Я не знаю деталей того, как передать эти данные.

...