试图在OpenAL中播放一些东西,但它从未脱离AL_INITIAL状态

Trying to play something in OpenAL, but it never gets out of the AL_INITIAL state

本文关键字:AL 状态 INITIAL OpenAL 播放      更新时间:2023-10-16

我试图使用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!nn");
}
return true;

mAudioSources是一个由alGenBuffers创建的缓冲区数组。文件是用

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

不会在alGetError中引起错误。什么好主意吗?

alutCreateBufferFromFile不会导致alGetError出错。您必须使用alutGetError(注意前缀alut而不是al)。如果alutCreateBufferFromFile失败,它将返回AL_NONE,这是一个有效的缓冲区:NULL缓冲区将不会被播放。

查看关于alutGetError以及OpenAL规范的ALUT文档

相关文章: