StandaloneFilterWindow详解

StandaloneFilterWindow继承自DocumentWindow,专门用来加载某个插件,相当于插件程序的测试UI。本类有标题栏和最小化、关闭按钮,左上角有一个【选项】按钮,点击后弹出菜单,允许用户保存插件的状态、重新加载插件、设置音频设备、重置插件等等。

本类的使用非常简单:

假设插件已开发完成,并在自定义的全局函数createPluginFilter()中创建了该插件的实例
 此时可写一个测试程序,在JUCEApplication::initialise()中创建本类的对象
 本类内部自动调用createPluginFilter(),将该插件及其UI组件加载到当前窗口中

createPluginFilter()是使用JUCE类库开发插件所必须的全局函数,该函数用于创建并返回所开发的插件实例(返回值为AudioProcessor指针)。如果该函数所返回的插件定义了所关联的UI组件,则可以手工将该组件添加到某个内容组件或主程序窗口中。StandaloneFilterWindow类的构造函数替程序员完成了此步骤,并且可以按独立应用程序的形式来使用。本类构造函数的核心语句为:

// 创建插件实例
ScopedPointer filter = createPluginFilter();

// 创建AudioProcessorPlayer
AudioProcessorPlayer player;

// AudioProcessorPlayer设置数据来源为所创建的插件
player.setProcessor (filter);

// 创建XML对象,用于恢复先前保存的音频设置
ScopedPointer savedState;

// settings为本类的ApplicationProperties数据成员,本类的构造3参将值赋给它
if (settings != nullptr)
    savedState = settings->getXmlValue ("audioSetup");

// 创建AudioDeviceManager,初始化。进出通道数为插件的进出通道数
ScopedPointer deviceManager = new AudioDeviceManager();

deviceManager->initialise (filter->getNumInputChannels(),
                           filter->getNumOutputChannels(),
                           savedState, true);

// AudioDeviceManager添加音频回调和MIDI回调
deviceManager->addAudioCallback (&player);
deviceManager->addMidiInputCallback (String::empty, &player);

// 本类(DocumentWindow)添加插件的UI组件
setContentOwned (filter->createEditorIfNeeded(), true);

StandaloneFilterWindow类的构造函数为
 StandaloneFilterWindow (const String& title, // 窗口标题
const Colour& backgroundColour, // 背景色
PropertySet* settingsToUse) // 用于保存各类设置

StandaloneFilterWindow的成员函数
 resetFilter () 销毁并重新创建该插件(重置)
 saveState () 弹出对话框,保存插件状态
 loadState () 弹出对话框,加载插件状态
 showAudioSettingsDialog () 弹出模态化的音频设置对话框