好的,我尝试了各种标题,但都失败了(所以如果有人想出更好的标题,请随时编辑:P)
我有以下问题:我正在使用 API 来访问我没有编码的硬件,将库添加到我需要从 API 接口继承的 API 中,并且 API 可以完成所有工作。
我输入了那个 API,一个音乐生成器库,问题是提到的 API 只在缓冲区为空时调用音乐库,并要求硬编码的数据量(正好 1024*16 个样本......不知道为什么)。
这意味着音乐生成器库,无法使用所有 CPU 潜力,在播放音乐时,即使音乐库跟不上,CPU 使用率仍然很低(如 3%),因此在部分音乐中也有复杂的东西,缓冲区不足(即:声卡播放缓冲区中空的区域,因为音乐库函数尚未返回)。
调整硬编码的数字,只会使软件在某些机器上工作,而不是在其他机器上工作,这取决于几个因素......
所以我想出了两个解决方案: 用一些新的缓冲区逻辑来破解 API,但我在这方面没有想到任何东西。
或者是我真正想到的逻辑:让音乐库有自己的线程,它将有自己的独立缓冲区,它会一直填充,当 API 调用音乐库获取更多数据时,而不是生成,它会将数据从那个单独的缓冲区复制到声卡缓冲区,然后继续生成音乐。
我的问题是,虽然我有几年的编程经验,但我总是避免多线程,我什至不知道从哪里开始......
问题是:有人可以找到另一种解决方案,或者将我指向一个可以为我提供有关如何实施我的线程解决方案的信息的地方吗?
编辑:
我不是在阅读文件,而是在生成或计算音乐,明白吗?这不是 .wav 或 .ogg 库。这就是为什么我提到 CPU 时间,如果我可以使用 100% CPU,我将永远不会出现欠载,但我只能在程序意识到缓冲区即将结束和实际结束之间的短时间内使用 CPU缓冲区,这个时间有时小于程序计算音乐所用的时间。