2015-02-10 91 views
0

我越来越疯狂试图解决这个奇怪的行为。 我成功的创建了一个缓冲的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); 

...

如果我填与周期都运作良好的缓冲,但如果我尝试去感受与缓冲区[任何] = load_wave(缓冲wavFile)symply不起作用,我什么也听不到。

+0

但有'0之间的差异10'和'0 4'的实际数据得到5装?我们没有看到缓冲区从缓冲区被填充[5]' – Gopi 2015-02-10 10:28:44

+0

只是一个测试,我试图填充0到10,只有0,0到5,但不起作用。我明白,不必强迫所有的缓冲区队列,对吧?我应该能够填充缓冲区的一部分,以便播放它,对吧?即使如此,从0到10填充缓冲区也不起作用 – ntnll 2015-02-10 10:45:23

回答

1

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

alSourceQueueBuffers(source,NUM_BUFFERS,buffers);

的correcty方式是通过真正的用户缓冲区的使用,而不是所有NUM_BUFFERS到alSourceQueueBuffers功能