博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用c++设计音效插件 : 前言

Posted on 2022-06-16 13:02  pencilCool  阅读(259)  评论(0编辑  收藏  举报

Designing Audio Effect Plugins in C++, 2nd Edition

总结:

RackAFX 过时了,这个用了不合标的c++ ,没有用c++ 标准库
作者 开发了新的 ASPiK , 入门教程: www.willpirkle.com/support/video-tutorials/


翻译自:https://learning.oreilly.com/library/view/designing-audio-effect/9780429954313/xhtml/Ch01.xhtml#sec1_1

在大学里教书有很多值得喜爱的地方--学期的周期性(即使飓风艾尔玛来短暂访问),每一届毕业的高年级学生让位给新一批新生时的复兴和重生,当然还有暑假。但最酷的部分之一是,你每年都可以重塑、振兴和重塑你的班级。在每一个新的学年,你都有一个永久的 "重来 "机会,以纠正错误、偏离主题的切入点,以及时机不对的突击测验--每年春季毕业那天,我都会列出一个清单,列出下一年要做的不同事情。

当我收到第一本《用C++设计音频效果插件》的时候,我就开始列举如果再给我一次机会写第二版,我会做哪些不同的事情。这发生在2016年秋天,我在音频工程协会(AES)大会上与我的Focal出版社编辑会面,我向她提出了编写新版的想法,以解决第一版的问题。

当我把第一本书放在一起时,我的想法是把DSP理论和C++实践结合起来,展示这些算法如何在代码中实现。我使用我的RackAFX平台和应用编程接口(API)有两个原因:API是惊人的轻量级和简单易懂,而且它不与任何其他软件相联系。我不必担心它变得过时。但有些读者不喜欢这些插件不能在虚拟工作室技术(VST®)或音频单元(AU®)中运行,起初我并不理解。这本书不应该是关于这些东西的;它是关于算法和C++的。RackAFX是一个API的例子,用作展示这些想法的渠道。毕竟,其他的API基本上都是一样的,都是做同样的事情。

为这些API生成插件的需要引起了RackAFX软件和原始API的连锁反应,现在被命名为RAFS1并优雅地退役了。RAFX1的最后版本可以在Windows或MacOS上的Microsoft Visual Studio和Apple Xcode项目中导出为AAX®(Avid Audio eXtension)、AU和VST2/3,并在Windows 32位数字音频工作站(DAW)上直接作为VST2和VST3插件运行。这一切是有代价的:有很多可以追溯到2004年或更早的代码,其中大部分现在被认为在C++11中是 "非法的"。 那时,很多程序员没有使用std::库,他们更喜欢手工编码链表和哈希表。此外,最初的RAFX1从未打算需要显示一个自定义的图形用户界面(GUI)。最初的API是为一个咨询项目编写的,涉及一个硬接线DSP芯片--不需要GUI。因此,当我在2016年的那个秋天找到我的Focal Press编辑时,我有一个新的工作前提:首先,算法应该在C++对象中实现,在所有API中完全可移植。毕竟,标题确实说"......用C++"。

第二,更重要的是,第二版不能以RackAFX为中心,需要有一个平台,任何人都可以在他们选择的DAW和操作系统(Windows或MacOS)上编写和设计插件。最重要的是,这个平台需要从第三方那里免费获得,原因和以前一样--不用担心有人使产品过时,也不用担心有人决定对其使用收取费用或版权费。我必须自己编写这个新平台,独立于RackAFX或任何软件开发工具包(SDK)或操作系统(OS)。

因此,在AES展会上与我的编辑告别后,我坐上飞机,开始为现在的ASPiK(音频专用插件内核)做笔记。两年后,新的平台已经完成,同时还有一本新书,展示了超过55个C++对象中的几十种算法,供你在自己的项目中使用。这些对象是为任何API编写的,可能很容易跨平台和SDK使用。如果你已经致力于使用另一个框架,如JUCE,你会发现C++对象将融入任何API或框架--正如我的研究生Madhur常说的 "抽象101"。这本书不是关于ASPiK的(尽管如果你需要它,它就在那里),它不依赖于任何平台。那55个C++对象也不是ASPiK对象:它们是直接的C++,开箱即用。

第1-8章是关于插件和各种插件的API。与其尝试重新打印所有API中所有插件的完整代码(我不会再尝试),每个API都有自己的 "编程指南 "章节。如果你看一下目录,你可以看到每一章的章节列表几乎都是一样的。这些编程指南是为了帮助你浏览各种API文档和示例代码。当你浏览这些文件时,你会开始注意到一些东西:API基本上都是一样的,做的都是一模一样的事情,只是实现细节不同。如果你是插件编程的新手,你可以使用免费的ASPiK平台。它是完全独立的,包括一个内置的拖放式GUI设计器,可以从任何平台(Windows或MacOS)上的任何插件窗口(AAX、AU或VST)启动。第6章和第7章介绍了ASPiK的基础知识,以及如何使用RackAFX来生成ASPiK项目--这是可选的,你不需要RackAFX来使用ASPiK或生成新的空白项目。第8章解释了如何打包C++书中的对象,以及如何展示一个插件GUI参数列表的例子。有用于低级信号处理杂务的DSP对象,封装了完整的效果算法的效果对象,并被设计成与任何插件框架中的GUI接口,最后还有整个波浪数字滤波器(WDF)组件和适配器库,用于生成无数种数字梯形滤波器。

第9章到第22章包含了DSP理论、效果算法和C++对象以及它们在音频插件中的使用。第9章和第10章是基本的DSP理论章节,与第一版相比几乎没有变化,因为它们似乎是读者的最爱。然而,第10章加强了其余常见的双曲滤波器结构,同时在家庭作业部分增加了一个奖励结构。第11-22章涵盖了其他所有的内容--所有原来的效果,加上关于调制、WDF和虚拟模拟滤波器的新章节,一个奇妙的新混响,非线性处理,FFT(快速傅里叶变换),相位声码器,以及最后的采样率转换。这些效果都是从头开始重新编码的,它们听起来非常棒,而且很专业。

如果你在目录中看一下本书每半部分的流程,你可以看到有内置的 "贯穿线",平行于各章之间。这一点从各章节的排序和命名中最为明显,这些章节成组重复,一开始是与各种SDK一起,后来是围绕不同的DSP和效果对象。你可以在每一章的相同位置找到关于设置AAX、AU或VST的插件延迟的信息。同样地,一旦你掌握了做前几个C++项目的技巧,那么剩下的就很容易了,因为它们都遵循非常一致的设计和编码模式。使用ASPiK是非常简单的,在www.willpirkle.com/support/video-tutorials/,
有大量的教程视频可以让你入门。ASPiK也非常深入,包括非常复杂的GUI和绘图选项、GUI缩放和其他对本文来说太过高级的主题--所有这些也都与ASPiK产品一起被记录下来,并且在我的网站上也有。

感谢我的Focal Press编辑Lara Zoble,她鼓励我并相信第二版的前提。此外,我还需要感谢迈阿密大学弗罗斯特音乐学院的所有人员,他们既支持我,又把音乐工程技术项目委托给我。他们包括院长Shelly Berg、Rey Sanchez和Serona Elton,以及我的教师同事Joe Abbati、Chris Bennett、Dana Salminen,当然还有我的老上司Ken Pohlmann,他现在正在佛罗里达州北部的某个地方冲浪,并且终于达到了我们曾经梦想的 "更高层次",对每年需要提交的SACS报告浑然不知。再次感谢。还要感谢我的学生,他们在RackAFX软件方面提供了很大的帮助,并在这些年里帮助指导我的课程方向。最近,这将包括Madhur Murli、Lucas Pylypczak、Luke Habermehl、Akhil Singh、Jay Coggin、Hunter Garcia和Sanket Kulkarni,另外还有很多人也发挥了作用。我必须对我以前的学生Alex Zinn大加赞赏,他将Kammeyer和Kroschel所写的《Digitale Signalverarbeitung》一书的各个部分--第12章中WDF RL、LC和RL组合模型的原始来源--从德语翻译过来。

和原书一样,我期待着听到你们在自己的插件实验室里做出来的东西。你可以在 www.willpirkle.com 找到我。请发送你的插件音频的疯狂的视频和录音!

Will Pirkle
August 1, 2018