gpt4 book ai didi

c++ - 尝试在 OpenAL 中播放某些内容,但它永远不会脱离 AL_INITIAL 状态

转载 作者:行者123 更新时间:2023-11-30 03:07:29 25 4
gpt4 key购买 nike

我正在尝试使用 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 出错。有什么想法吗?

最佳答案

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

检查 ALUT documentation有关 alutGetError 以及 OpenAL Specs 的信息.

关于c++ - 尝试在 OpenAL 中播放某些内容,但它永远不会脱离 AL_INITIAL 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com