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, 스테레오, ...)으로 오디오를 변환해야합니까?
열거 형이 지원되지 않으면 alEnumGetValue 함수는 0을 반환해야합니까? –
그게 버그 같아. http://bugreport.apple.com/ – OneSadCookie