VSTe 操作するパラメータを管理するコードを覚える
概要
音声処理の核心に触れることなく、パラメータだけを追加して管理するコードを覚えます。音声処理はかなり難しいので、後回しでいいと思います。パラメータの追加方法と管理方法というか制御方法を覚えれば、音声処理をしやすくなるので、先に覚えると楽です。
ここでは、ユーザ定義の2つのクラスが登場します。好きな名前をつけられる部分です。いかにも勝手に名前つけやがったなという意味でCxxという接頭句をつけてみました。
- CxxProc(AudioEffectクラスから派生)
- CxxEdit(EditControllerクラスから派生)
ヘッダファイルではこんな風に定義されます。
#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