2011-04-26 3 views
1

OpenAl을 사용하여 오디오 파일을 재생하려하지만 실제로 아무 것도 재생하지 않습니다. alSourcePlay를 호출 한 후 오디오 파일이 재생되는지 확인하면 상태는 여전히 AL_INITIAL입니다. 여기OpenAL에서 재생하려고 시도했지만 AL_INITIAL 상태가되지 않습니다.

I는 오디오 재생 어디 :

// Make sure the audio source ident is valid and usable 
if (audioID >= MAX_AUDIO_SOURCES || !mAudioSourceInUse[audioID]) 
    return false; 

int sourceAudioState = 0; 

if(!alIsSource(mAudioSources[audioID]) == AL_TRUE) return false; 

alGetError(); 
// Are we currently playing the audio source? 
alGetSourcei(mAudioSources[audioID], AL_SOURCE_STATE, &sourceAudioState); 

if (sourceAudioState == AL_PLAYING) 
{ 
    printf("Currently playing!\n"); 
    if (forceRestart) 
     stopAudio(audioID); 
    else 
     return false; // Not forced, so we don't do anything 
} 
alSourcePlay(mAudioSources[ audioID ]); 
if (checkALError("playAudio::alSourcePlay: ")) 
    return false; 
alGetSourcei(mAudioSources[audioID], AL_SOURCE_STATE, &sourceAudioState); 
printState(sourceAudioState); 
if(sourceAudioState == AL_PLAYING) 
{ 
    printf("Now playing!\n\n"); 
} 
return true; 

mAudioSources을 alGenBuffers하여 만든 버퍼의 배열이다. 파일은

mAudioBuffers[bufferID] = alutCreateBufferFromFile(filename.c_str()); 

과 함께로드됩니다.이 파일은 alGetError에서 오류를 발생시키지 않습니다. 어떤 아이디어?

답변

3

alutCreateBufferFromFilealGetError에 오류가 발생하지 않습니다. alutGetError (al 대신 alut이라는 접두어를 사용)을 사용해야합니다. alutCreateBufferFromFile이 실패하면 유효한 버퍼 인 AL_NONE을 반환합니다. 재생할 버퍼는 NULL입니다.

alutGetErrorOpenAL Specs에 대한 정보는 ALUT documentation을 확인하십시오.

관련 문제