2011-01-13 6 views
4

Windows에서 Mac OS X로 응용 프로그램을 포팅하는 중입니다. OpenAL을 사용하여 사운드를 처리하고 있지만 Mac OS X에서 사운드 엔진을 초기화 할 때 이상한 동작이 나타납니다 (코드 MacBook Pro에서 실행 중입니다.)OpenAL은 Mac OS X에서 5.1 출력을 지원합니까?

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; 
} 

AL_INVALID_VALUE의 오류와 alBufferData에 대한 호출 동안 실패 : 여기

는 코드입니다. 코드를 추적하는 동안 alGetEnumValue("AL_FORMAT_51CHN16")0xfffffffful을 반환하고 이것이 문제의 근본 원인 인 것으로 나타났습니다.

alGetEnumValue

는 말한다 : 열거 발견 및 AL_INVALID_VALUE 오류 조건을 설정 할 수없는

ALuint alGetEnumValue(const ALchar *enumName);

반환 0합니다. enum 값이 있다고해서 현재 컨텍스트의 확장이 적용되는 것을 보장하지는 않습니다. 0이 아닌 반환 값은 구현이이 확장의 존재를 인식하고 있음을 나타냅니다.

제대로 작동한다고 생각합니다. OpenAL의 Mac OS X 구현에 버그가 있습니까? Mac OS X에서 OpenAL을 통해 5.1 출력을 지원합니까? Core Audio를 통해 지원됩니까? (이것이 사실이라면 Core Audio 로의 포팅이 옵션이 될 수 있습니다)? 5.1에서 다른 형식 (3.1, 스테레오, ...)으로 오디오를 변환해야합니까?

답변

3

해당 열거 형은 AL_EXT_MCFORMATS 확장에 속합니다. Mac OS X에서는 사용할 수 없습니다.

예, CoreAudio는 5.1 스피커 설정을 처리 할 수 ​​있습니다. 그래도 데이터 피드 방법에 대한 세부적인 내용은 알지 못합니다.

+0

열거 형이 지원되지 않으면 alEnumGetValue 함수는 0을 반환해야합니까? –

+0

그게 버그 같아. http://bugreport.apple.com/ – OneSadCookie