VSTe 操作するパラメータを管理するコードを覚える
概要
音声処理の核心に触れることなく、パラメータだけを追加して管理するコードを覚えます。音声処理はかなり難しいので、後回しでいいと思います。パラメータの追加方法と管理方法というか制御方法を覚えれば、音声処理をしやすくなるので、先に覚えると楽です。
ここでは、ユーザ定義の2つのクラスが登場します。好きな名前をつけられる部分です。いかにも勝手に名前つけやがったなという意味でCxxという接頭句をつけてみました。
- CxxProc(AudioEffectクラスから派生)
- CxxEdit(EditControllerクラスから派生)
ヘッダファイルではこんな風に定義されます。
<syntaxhighlight lang="cpp">
- pragma once
//include headerfiles
- include "pluginterfaces\base\funknown.h"
- include "public.sdk/source/vst/vstaudioeffect.h"
- include "public.sdk/source/vst/vsteditcontroller.h"
- include "public.sdk/source/main/pluginfactory.h"
- include "pluginterfaces/vst/ivstparameterchanges.h"
- include "pluginterfaces/base/ibstream.h"
- include "vstgui/plugin-bindings/vst3editor.h"
namespace Steinberg{ namespace Vst {
- define xxVENDOR "VENDOR"
- define xxURL "https://wiki.yo-net.jp/"
- define xxEMAIL "mailto:__info@yo-net.jp"
- define xxVSTNAME "UnknownVST"
- define xxVERSION "1"
- define xxSUBCATEGORIES Vst::PlugType::kFx
static const FUID ProcessorUID(0x13E7D9FD, 0xE02B4003, 0xA2324A98, 0x45A53825); //{13E7D9FD-E02B-4003-A232-4A9845A53825} static const FUID ControllerUID(0xBFA33A3F, 0x06B34AEE, 0x83B53575, 0x0F947340); //{BFA33A3F-06B3-4AEE-83B5-35750F947340} enum ParaTag { INT32PARA = 1, PARAMVALUEPARA, };
Class CxxProc : AudioEffect { public: CxxProc();
tresult PLUGIN_API initialize(FUnknown* context) SMTG_OVERRIDE; tresult PLUGIN_API process(ProcessData& data) SMTG_OVERRIDE; tresult PLUGIN_API getState(IBStream* state) SMTG_OVERRIDE; tresult PLUGIN_API setState(IBStream* state) SMTG_OVERRIDE; static FUnknown* createInstance(void*) {
return (IAudioProcessor*)new CxxProc(); }
protected: int32 int32Para = 0; ParamValue paramvaluePara = 0.1; };
Class CxxEdit : EditController { public: tresult PLUGIN_API initialize(FUnknown* context) SMTG_OVERRIDE; tresult PLUGIN_API getState(IBStream* state) SMTG_OVERRIDE; tresult PLUGIN_API setState(IBStream* state) SMTG_OVERRIDE; tresult PLUGIN_API setComponentState(IBStream* state) SMTG_OVERRIDE; IPlugView* PLUGIN_API createView(const char* name) SMTG_OVERRIDE; static FUnknown* createInstance(void*) { return (IEditController*)new CxxEdit(); } };
}}//close namespace