870920 Menu

AudioProcessor类群详解 5-1

本小节所涉及的类可用于(但不限于)开发音频(DSP)插件、软件滤波器(效果器)、音频及语音信号处理、MIDI软音源、软件合成器、软采样器、程序内部的音频和MIDI处理模块(内部效果器),等等。并可使应用程序具有插件宿主、插件管理、信号路由等功能。主要涉及到以下类(结构体):

 AudioProcessor 音频处理和MIDI处理的核心基类
 AudioProcessorListener 捕获并处理AudioProcessor所产生的消息
 AudioPlayHead 用于确定音频处理的起点位置
 AudioPlayHead::CurrentPositionInfo 起点位置的详细信息
 AudioProcessorGraph 节点容器,可添加并连接任意节点,此类是实现宿主平台和信号路由的关键。其实质是数据结构中的“图”
 AsyncUpdater 异步更新,AudioProcessorGraph的基类之一。关于JUCE类库的异步更新等内容,请参见后文
 AudioProcessorGraph::Node 节点,代表一个AudioProcessor
 AudioProcessorGraph::Connection 代表两个节点之间的连接
 AudioPluginInstance 代表某个音频插件或内部处理模块(插件实例)
 PluginDescription 插件的详细信息
 AudioProcessorGraph::AudioGraphIOProcessor 总输入输出节点(包括音频和MIDI这两者)
 AudioProcessorEditor AudioProcessor的UI组件基类,可持有一个AudioProcessor
 GenericAudioProcessorEditor 带一组推子的UI组件,推子对应所持有的AudioProcessor的参数

AudioProcessor
专用于音频处理与制作音频插件 ,可按字面意思简称为“处理器”。该类及相关类系、类群构成了JUCE类库音频部分“两大支柱”中的第二支(第一支为AudioSource,可参见前文)。

AudioProcessor封装了VST 2.x、VST 3、AU、 RTAS、AAX等数字音频与音乐制作领域专用的、跨平台的音频插件格式(Apple公司的AU除外)。该类的派生类AudioProcessorGraph相当于一个AudioProcessor容器,可加载、管理和随意连接一到多个程序内部的音频处理模块和外部的音频插件,这一特点使插件宿主程序的设计与开发变得非常轻松、简单。

AudioProcessor

图 3 14 AudioProcessor类的继承图示

将本类作为内部的音频处理、插件宿主,与作为音频插件的区别:

  • 作为内部使用的音频处理或MIDI处理模块,需派生子类,即自定义音频处理模块。
  • 作为宿主平台时,主要通过派生类AudioProcessorGraph来完成。可将其他自定义的AudioProcessor音频处理模块或外部音频插件以Node(节点)的形式添加到AudioProcessorGraph中,集中管理和随意连接,并产生最终的处理结果(多个节点串联或并联处理后的最终音频数据)。
  • 插件的数据来源与数据终点均是宿主,而内部音频处理的数据来源为程序内部的AudioSource或缓冲中的数据,终点是AudioIODevice。可通过AudioProcessorPlayer完成最终的音频输出。
  • 开发插件使用全局函数createPluginFilter(),开发程序使用JUCEApplication和启动宏。这两者的运行机制不同,编码模式不同,程序调试方式也不同。

AudioProcessor是一个无父抽象基类,使用时需派生子类,以实现具体的音频处理或MIDI处理。如需使用本类构建插件,则使用全局函数createPluginFilter()创建并返回本类派生类的堆对象(指针)。

AudioProcessor类的主要成员函数(网站发布,略)。