我正试图解决这种奇怪的行为。 我成功创建了一个OpenAL缓冲区来对波浪进行排队,然后播放它:
static ALuint snd_buffer =0;
#define NUM_BUFFERS 10
static ALuint source, buffers[NUM_BUFFERS];
static float pitch = 1.0f;
static ALCdevice * my_dev = NULL;
static ALCcontext * my_ctx = NULL;
...
alGenBuffers(NUM_BUFFERS,buffers);
for (i = 0; i < NUM_BUFFERS; i++) {//EXPERIMENTAL (chaned i=0 to i=1)
buffers[i]=load_wave(wavFile);
}
填充缓冲区后,我可以成功播放,一切正常,我可以听到循环播放10次的队列:
alSourcePlay(source);
到目前为止一切正常,这显然只是一个测试功能,所以我试图“手动”替换循环和填充缓冲区:
buffers[0]=load_wave(wavFile);
或
buffers[1]=load_wave(wavFile);
buffers[2]=load_wave(wavFile);
buffers[3]=load_wave(wavFile);
buffers[4]=load_wave(wavFile);
...
如果我用for循环填充缓冲区一切都运行良好,但是如果我尝试使用缓冲区感觉缓冲区[无论] = load_wave(wavFile)symply不起作用,我什么都听不到。
答案 0 :(得分:1)
解决了我自己, 我正在为其他人发布解决方案。问题在于
alSourceQueueBuffers(source,NUM_BUFFERS,buffers);
正确的方法是将实际用户缓冲区使用而不是所有NUM_BUFFERS传递给alSourceQueueBuffers函数