gpt4 book ai didi

c++ - 只有在充满 for 循环时才打开缓冲区播放

转载 作者:行者123 更新时间:2023-11-28 06:26:33 25 4
gpt4 key购买 nike

我正在疯狂地尝试解决这种奇怪的行为。我成功地创建了一个 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 循环填充缓冲区,一切都运行良好,但如果我尝试用缓冲区 [whatever]=load_wave(wavFile) 来感受缓冲区完全不起作用,我什么也听不到。

最佳答案

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

alSourceQueueBuffers(source, NUM_BUFFERS, buffers);

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

关于c++ - 只有在充满 for 循环时才打开缓冲区播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28429247/

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