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

提供:yonewiki
2023年5月31日 (水) 20:52時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「== '''概要''' ==  音声処理の核心に触れることなく、パラメータだけを追加して管理するコードを覚えます。音声処理はかなり難しいので、後回しでいいと思います。パラメータの追加方法と管理方法というか制御方法を覚えれば、音声処理をしやすくなるので、先に覚えると楽です。  ここでは、ユーザ定義の2つのクラスが登場します。好きな名…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

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


 ここでは、ユーザ定義の2つのクラスが登場します。好きな名前をつけられる部分です。いかにも勝手に名前つけやがったなという意味でCxxという接頭句をつけてみました。


  • CxxProc(AudioEffectクラスから派生)
  • CxxEdit(EditControllerクラスから派生)


ヘッダファイルではこんな風に定義されます。


<syntaxhighlight lang="cpp">

  1. pragma once

//include headerfiles

  1. include "pluginterfaces\base\funknown.h"
  2. include "public.sdk/source/vst/vstaudioeffect.h"
  3. include "public.sdk/source/vst/vsteditcontroller.h"
  4. include "public.sdk/source/main/pluginfactory.h"
  5. include "pluginterfaces/vst/ivstparameterchanges.h"
  6. include "pluginterfaces/base/ibstream.h"
  7. include "vstgui/plugin-bindings/vst3editor.h"

namespace Steinberg{ namespace Vst {

  1. define xxVENDOR "VENDOR"
  2. define xxURL "https://wiki.yo-net.jp/"
  3. define xxEMAIL "mailto:__info@yo-net.jp"
  4. define xxVSTNAME "UnknownVST"
  5. define xxVERSION "1"
  6. 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