VSTe 操作するパラメータを管理するコードを覚える

提供:yonewiki
2023年5月31日 (水) 20:52時点におけるYo-net (トーク | 投稿記録)による版 (→‎概要)

概要

 音声処理の核心に触れることなく、パラメータだけを追加して管理するコードを覚えます。音声処理はかなり難しいので、後回しでいいと思います。パラメータの追加方法と管理方法というか制御方法を覚えれば、音声処理をしやすくなるので、先に覚えると楽です。


 ここでは、ユーザ定義の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