创建一个最简单的VST
现在主流的是vst3,Steinberg已经不想支持VST之前的版本了。从官方下载的VST3 SDK中(只提供3.0版)附带VST2 SDK,但是实测缺少一些头文件,无法单独使用,网络上资源也是极其难找。据说VST现在只作为VST3的子集使用。
VST插件在国内音乐人中还是被广泛使用的,从0开始开发VST插件,我个人想着还是从VST开始比较好。
因为Win32的基础不是很好,动态链接库的编程也不清楚,所以吃了很多苦头。
废话戛然而止。
第一步
使用VS2013 新建工程,Win32工程,DLL,空项目,导出符号。这里我一开始新建的是MFC DLL,需要改很多才能搞好。
第二步
添加VST SDK的文件。将pluginterfaces文件夹和vstsdk2.4\public.sdk\source\vst2.x内的文件拷贝到工程目录。这样安排符合它头文件引用的目录结构,否则找不到文件。添加vstplug.def文件。
第三步
新建派生类,继承自AudioEffectX,重写构造函数、processReplacing、processDoubleReplacing。
#include "ABypass.h"
#define UID_TANG (VstInt32)0x676e6154 // "Tang"
ABypass::ABypass(audioMasterCallback audioMaster) :AudioEffectX(audioMaster, 1, 0)
{
setNumInputs(2);
setNumOutputs(2);
setUniqueID(UID_TANG);
canProcessReplacing();
canDoubleReplacing();
}
ABypass::~ABypass()
{
}
void ABypass::processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames)
{
float *in1 = inputs[0];
float *in2 = inputs[1];
float *out1 = outputs[0];
float *out2 = outputs[1];
// Ouput = Input
while (--sampleFrames >= 0)
{
(*out1++) = (*in1++);
(*out2++) = (*in2++);
}
}
void ABypass::processDoubleReplacing(double** inputs, double** outputs, VstInt32 sampleFrames)
{
double *in1 = inputs[0];
double *in2 = inputs[1];
double *out1 = outputs[0];
double *out2 = outputs[1];
// Ouput = Input
while (--sampleFrames >= 0)
{
(*out1++) = (*in1++);
(*out2++) = (*in2++);
}
}
#pragma once
#include "audioeffectx.h"
class ABypass :
public AudioEffectX
{
public:
ABypass(audioMasterCallback audioMaster);
virtual ~ABypass();
virtual void processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames);
///< Process 32 bit (single precision) floats (always in a resume state)
virtual void processDoubleReplacing(double** inputs, double** outputs, VstInt32 sampleFrames);
///< Process 64 bit (double precision) floats (always in a resume state) \sa processReplacing
};
第四步
新建Main.cpp,负责创建该派生类的一个实例。
#ifndef __aempty__
#include "ABypass.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster)
{
return new ABypass(audioMaster);
}
第五步
见证奇迹的时刻:F7导出。
不写了,做后期去了。
二〇二〇年三月二十八日
2020-3-29
补充细节:
项目→项目属性→链接器→模块定义文件 设置为vstplug.def
做VST开发不指望能混口饭吃,只是为了好玩。这东西在国内无钱可赚,就是因为大量精美的、好用的pojie VST插件正在被广泛使用。