Пытается воспроизвести что-нибудь в OpenAL, но оно никогда не выходит из состояния AL_INITIAL - PullRequest
1 голос
/ 27 апреля 2011

Я пытаюсь воспроизвести аудиофайл с помощью OpenAl, но на самом деле он ничего не воспроизводит.Когда я проверяю, воспроизводится ли аудиофайл после вызова alSourcePlay, состояние по-прежнему равно AL_INITIAL.

Здесь я воспроизводю звук:

// 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.Есть идеи?

1 Ответ

3 голосов
/ 04 июля 2011

alutCreateBufferFromFile не приведет к ошибке в alGetError. Вместо этого вы должны использовать alutGetError (обратите внимание на префикс alut вместо al). Если alutCreateBufferFromFile терпит неудачу, он вернет AL_NONE, который является допустимым буфером: буфер NULL, который не будет воспроизводиться.

Проверьте документацию ALUT для получения информации о alutGetError, а также Спецификации OpenAL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...