C++ 缓冲区运行循环中的样本计时

C++ 缓冲区运行循环中的样本计时,c++,timing,vst,C++,Timing,Vst,我有一个声音样本缓冲区,可以是任何大小,但让我们说它设置为4410个样本 我有一个循环,每次循环一个变量的增量为4410,在缓冲区0到4409的时间内搜索MIDI文件中的音符。在这个循环中,我将note objects delta time设置为sample buffer size 4410,即MIDI文件中的notes start time,以便它在缓冲区循环中0-4409之间的某个正确时刻开始 此缓冲区运行并播放缓冲区循环0到4409的时间范围内的第一个音符,然后重新开始。(VST SDK中

我有一个声音样本缓冲区,可以是任何大小,但让我们说它设置为4410个样本

我有一个循环,每次循环一个变量的增量为4410,在缓冲区0到4409的时间内搜索MIDI文件中的音符。在这个循环中,我将note objects delta time设置为sample buffer size 4410,即MIDI文件中的notes start time,以便它在缓冲区循环中0-4409之间的某个正确时刻开始

此缓冲区运行并播放缓冲区循环0到4409的时间范围内的第一个音符,然后重新开始。(VST SDK中的进程替换)

下一次发生这种情况时,变量将为4410*2,并在下一次4410到8819样本运行中获取下一组样本,但仍然设置增量时间以匹配样本缓冲区循环,因为该循环将始终从0到4410运行,并重新开始

我一直在尝试自己,并开始在这个问题上胡闹了好几次,但很难用语言表达出来。我不知道如何解决这个问题,因为结果不正确,因为它不符合节奏。这是因为最后一个MIDI音符关闭和MIDI文件中的第一个音符与示例缓冲区循环0到4409不匹配(VST SDK中的SampleReplace)

我正在尝试制作一个VST乐器,它可以读取MIDI文件并在processReplacing中播放,但是很难在processReplacing VST函数中将计时转换为缓冲区循环。我不能给你看代码,因为它太多了,我只是希望有人能认识到这个问题,并给我一个关于这种时间安排的提示


希望有人能理解我的意思,即使我的英语和口头表达可能有点不对劲。

我建议你看看pouet.net上的VoxelBukkake源代码,如下所示:(它包含一个软件音频合成器,处理重复填充一个小缓冲区的问题,同时保持多个音频通道的“位置”,这样缓冲区就可以根据剩余的音符的多少以及音符可以放入缓冲区的多少来正确填充)@enhzflep谢谢,但当我尝试输入该链接时,我会得到“此网站被报告为不安全-此网站被报告包含以下威胁:恶意软件威胁”所以我就到此为止。没关系。我理解你的担忧。问题在于加载部分演示的傻瓜(声音+gfx)并且相信他们的POS病毒扫描器在一些EXE文件上给出的误报。演示通常是打包的(自我解压缩的可执行文件)为了减小文件大小-Visual Studio构建时,Voxelbukake的大小为88kb,但在应用了一些魔法后,只有7kb。我可以证明该网站可以安全浏览。你可以安全访问该页面并下载源代码。几年前,我实际上获得了pkg,目的是自己制作一个VST插件。我用它制作了一个JS synth。