离线处理——文件加载,非实时算法

Posted

技术标签:

【中文标题】离线处理——文件加载,非实时算法【英文标题】:offline processing - file loading, non-realtime algorithms 【发布时间】:2012-12-03 20:02:58 【问题描述】:

我正在实施一种音频算法,以将音符与复音录音(如 melodyne)分开。我的计划是让它成为一个 VST 插件。研究文档,我很难弄清楚我将如何实现非实时任务。 所需的任务是加载波形文件并对其进行非实时分析,然后才能对其进行实时循环和操作。应该可以随时加载新文件。

很难找到有关该主题的信息。如果有人有经验可以给我提示:

VST 可以做到这一点吗? SDK 提供离线处理,但 DAW 似乎不支持它。 如果我将我的程序设为独立程序,我如何将它与 VST 主机同步? 有没有人知道一本好书,详细的?

【问题讨论】:

【参考方案1】:

我认为你对离线的东西想得太多了。 :) 这实际上很容易做到,但棘手的部分是制作一个好的 UI 来向用户解释正在发生的事情。如果我是你,我会简单地在一个单独的线程中加载文件,当这个任务运行时,你应该在你的 GUI 中显示一个“正在加载文件...”微调器,并在你的 process() 例程中输出静音。这将涉及一些互斥,以确保三个线程(GUI、进程和加载程序)都知道彼此在做什么。

至于制作插件的独立版本,Juce 绝对是要走的路。这个可爱的框架还将处理 VST/AU 插件抽象,并允许您导出独立的应用程序。 Juce 可能看起来有点贵,但如果你要使用这个插件进行商业化,那么每一分钱都是值得的。如果您不打算商业化,那么您可以只 GPL 代码并免费使用它。

如果您更喜欢独立插件的 DIY 路线,您可能可以与 MrsWatson 一起破解一些东西。 (免责声明:我是 MrsWatson 的作者)。目前,MrsWatson 缺少该项目所需的一些功能,但我计划在未来添加它们,因为这是一个非常常见的用例,我愿意支持。

至于好的 VST 编程书籍,嗯,我不知道。 =/

【讨论】:

警告不要在音频线程中使用任何互斥锁。如果主机将您连接到音频回调,这可能会破坏插件的实时可能性并且是有害的。在音频线程中,更喜欢消息的无锁队列,或者您使用的原子变量,如自旋锁。 JUCE确实不错。

以上是关于离线处理——文件加载,非实时算法的主要内容,如果未能解决你的问题,请参考以下文章

大数据常用的Lambda架构---实时架构处理流程与离线架构处理流程

Pcap.Net 使用 OffLinePacketDevice 处理离线跟踪文件

相同数据源情况下,使用Kafka实时消费数据 vs 离线环境下全部落表后处理数据,结果存在差异

6.数据中台 --- 数据开发:数据价值提炼工厂

在线算法&&离线算法

实时数仓与离线数仓架构对比Flink消费流程