我正在创建一个使用Qt的软合成器。这意味着获得低延迟音频(缓冲区大小在5-10ms左右),以便响应UI控件。
软合成器的组成如下:
我已经基于我自己的黑客版本的频谱示例,以生成一个基本的波式合成器使用拉模式。
在实践中,我发现如果缓冲区小于100 is,就会出现故障。这条路太长了,不能有很好的反应能力。
解决方案似乎是多线程,但我不清楚如何在Qt中构建这个结构。我的直觉是把合成引擎放到自己的线上,但我不清楚
发布于 2015-11-25 19:13:58
Qt对你的努力毫无帮助,而且很可能是阻碍。低延迟音频是最不重要的,特别是在windows上,它仍然使用过时的MME。不管你向它扔了多少线,它也不会变得更好。
我建议您下载并构建一个第三方库,我在RTAudio上取得了很好的效果,它在不同的平台上支持许多低延迟后端。您仍然可以为GUI使用Qt。如果您愿意,可以轻松地将RTAudio包装在QIODevice中。
是的,不用说,您不应该使用主/ GUI线程进行合成。
发布于 2015-11-25 23:18:39
让我们再概述几个问题。正如其他人所说,Qt给聚会带来的好处很少。低延迟音频不是它的多媒体框架设计的对象。
架构:
商业软合成器总是作为其他音频软件的插件来编写。这种方法的优点是插件的体系结构受到很大的限制,而且其他人已经解决了许多硬线程和性能问题。斯坦伯格的VST和苹果的音频单元就是两个明显的例子。这两种方法都能够按毫秒顺序记录延迟。
实时特性
当考虑实时系统时,最坏的情况是延迟.在音频的情况下,示例缓冲区的持续时间为墙壁时间,加上所需的任何开销,以适应操作系统在执行和完成处理过程中的最坏延迟。
线程:
在编写合成插件时,您实际上只关心两件事:
在某个地方,您必须管理软合成器参数的调制和参数自动化--可能在另一个线程中。
当然,插件通常也有UI,但这在UI线程上运行的优先级最低,并且应该通过事件处理程序与呈现处理程序完全解耦。
主机应用程序
如果您也坚持编写主机应用程序,那么明智的做法是做几乎所有行业中的其他人所做的事情,并使用斯坦伯格(氏) ASIO层。
但是,您也可以签出朱斯 --其中包括使用ASIO的插件主机、示例插件,以及解决问题所需的其他一切。
https://stackoverflow.com/questions/33923542
复制相似问题