创建一个最简单的VST

创建一个最简单的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插件正在被广泛使用。

你可能感兴趣的:(vst,dll)