只有在循环填充时才会播放局部缓冲区

时间:2015-02-10 10:22:46

标签: c++ c openal

我正试图解决这种奇怪的行为。 我成功创建了一个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不起作用,我什么都听不到。

1 个答案:

答案 0 :(得分:1)

解决了我自己, 我正在为其他人发布解决方案。问题在于

  

alSourceQueueBuffers(source,NUM_BUFFERS,buffers);

正确的方法是将实际用户缓冲区使用而不是所有NUM_BUFFERS传递给alSourceQueueBuffers函数