ソフトウェアシンセサイザー・エフェクタのプログラム間のインタフェースとなる標準的な規格です。
この規格のソフトウェア開発キット(SDK)は Steinberg 社が無料で公開しているため、
DAW 上で使えるシンセサイザーやエフェクタ(VSTプラグイン)は自作することができます。
VST プラグインの開発ですが、根本となる信号処理・MIDIの扱い方については、検索すれば参考となる文献・Web ページを見つけることができると思います。
しかし、VST の SDK を用いて、実際に DAW で使えるプログラムを作る、すなわちコードを動的リンクライブラリ化する ( *.dll を作る) 方法については、今のところ情報源が限られています。
いくつか VST プラグイン開発の参考となる Web ページ を列挙します。
下記のサイトでは、 Visual Studio を使って VST プラグインを開発しています。
Visual Studio は便利ですが、やはり個人的にはコマンドライン (Cygwin) で制作したい…
というわけで、Cygwin 上で VST プラグインを制作する方法を探してみたところ、以下の動画を見つけました。
この動画を参考にしながら、動作テスト程度に VSTプラグイン (エフェクタ) を制作してみました。
・プラグイン名: LR2RL
・効果: L と R の信号を入れ替える
(0) 準備
Cygwin: make, gcc (c++), dllwrap を使用出来る状態まで設定
vstsdk2.4: Steinberg のwebページより入手
(1) *.def 作成
以下のようなモジュール定義ファイル (.def) を作成します。
・LR2RL.def
LIBRARY LR2RL
DESCRIPTION "VSTe: LR2RL"
EXPORTS main=VSTPluginMain
2行目の"DESCRIPTION"は無くても良いので、実質 2行だけのテキストファイルです。
(2) LR2RL.cpp 作成
VST プラグインの本体です。
"C++でVST作り"を参考に、最小構成で組んでいます。
・LR2RL.cpp
#include "audioeffectx.h"
#define MY_VST_INPUT_NUM 2
#define MY_VST_OUTPUT_NUM 2
#define MY_VST_UNIQUE_ID 'SMPL'
#define MY_VST_PRESET_NUM 1
#define MY_VST_PARAMETER_NUM 0
class LR2RL : public AudioEffectX{
public:
// Constructor
LR2RL(audioMasterCallback audioMaster);
// processReplacing
virtual void processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames);
};
AudioEffect* createEffectInstance(audioMasterCallback audioMaster){
return new LR2RL(audioMaster);
}
// (1) Constructor
LR2RL::LR2RL(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM){
setNumInputs(MY_VST_INPUT_NUM);
setNumOutputs(MY_VST_OUTPUT_NUM);
setUniqueID(MY_VST_UNIQUE_ID);
isSynth (false);
canProcessReplacing();
}
// (2) processReplacing
void LR2RL::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames){
float *inL = inputs[0];
float *inR = inputs[1];
float *outL = outputs[0];
float *outR = outputs[1];
for(int i = 0; i < sampleFrames; i++){
outR[i] = inL[i];
outL[i] = inR[i];
}
}
(3) makefile 作成
VST プラグイン作成の肝となるステップです。
・makefile
VSTPATH=/cygdrive/c/vstsdk2.4
VSTSRCPATH=/public.sdk/source/vst2.x
## plugin name
PLUGIN=LR2RL
CXX=gcc-3
CXXFLAGS=-I$(VSTPATH) -I$(VSTPATH)$(VSTSRCPATH) -DBUILDING_DLL -mno-cygwin
DLLWRAP=dllwrap --target=i386-mingw32
DLL=$(PLUGIN).dll
$(DLL): $(PLUGIN).o audioeffect.o audioeffectx.o vstplugmain.o
$(DLLWRAP) --driver-name c++-3 -mno-cygwin --def $(PLUGIN).def $^ -o $@
audioeffect.o: $(VSTPATH)$(VSTSRCPATH)/audioeffect.cpp
$(CXX) $(CXXFLAGS) -c $<
audioeffectx.o: $(VSTPATH)$(VSTSRCPATH)/audioeffectx.cpp
$(CXX) $(CXXFLAGS) -c $<
vstplugmain.o: $(VSTPATH)$(VSTSRCPATH)/vstplugmain.cpp
$(CXX) $(CXXFLAGS) -c $<
## Clean up
.PHONY: clean
clean:
rm -f *.o
gcc (c++) で "-mno-cygwin" を使うためにバージョン指定をしていることに注意。
(4) make
LR2RL.dll 制作後、FL studio 10 で動作を確認しました。
0 件のコメント:
コメントを投稿