2015-02-10 79 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功能