我的笔记

灵感、随想与新技术
07 2月 2017

使用Juce开发Audio Plugins (二) E&P结构




此为老版教程,请移步新版教程:《音频开发技术/实战/进阶》




我想你已经注意到了上一节中提到过自动生成的代码

Juce新建的每一个音频插件都会包含两个类 PluginProcessor 和 PluginEditor,

(注:上图中可以看见一个类同时有.h和.cpp文件,这里.h文件存放的是该类内元素的声明,cpp文件存放为该类内元素的具体实现,实际上.h内的内容可以直接写在.cpp文件里,把.h分离出来的用意是使得开发者拿到该代码通过查看.h文件可就可以对接口和可以调用的元素有一个快速的了解.)

PluginProcessor负责处理音频信号与MIDI信号的处理,

PluginEditor负责处理插件UI、可视化的元素的显示。

 

一个插件可以有很多个Editor,但是只能有一个Processor,

每个Editor都有存有一个Processor的句柄,Editor是需要根据Processor才能得到音频或Midi信号的进而把这些信息转化为可视化元素的参数,并且Editor也是借助Processor才能把自身的参数应用在音频或Midi信号上。

(PS: PluginEditor.cpp

这里我们可以看到Processor的句柄是Juce框架自动注入到Editor中的,因为Editor的构造方法通常不由开发者调用)

 

Processor中,需要编辑的方法是processBlock(),

它负责处理音频和MIDI的信号处理

Processor.cpp

 

PluginEditor中要编辑的方法是构造方法,paint() 和resize()方法

构造方法绘制并初始化窗口的UI元素与窗口本身,

paint()执行在构造方法后,在它里面可以绘制额外的的控制器或自定义的UI组件,

resize()发生在窗口大小变动时,常用来重新定位元素的位置

(PS:这里根据个人经验,resize()是必须要写的,否则元素可能因为位置不对在初始化的时候显示不出来)

好,这一节就到这里。

上海外滩 – StudioEIM // MapleStory
  1. 上海外滩 – StudioEIM // MapleStory
  2. 神木村 – StudioEIM // MapleStory
  3. MapleStory – StudioEIM // MapleStory
  4. Pantheon – StudioEIM // MapleStory
  5. 逐梦飞翔 – StudioEIM // MapleStory
  6. 魔法密林 – StudioEIM // MapleStory