创建一个最简单的VST

 2023-09-05 阅读 43 评论 0

摘要:创建一个最简单的VST 现在主流的是vst3,Steinberg已经不想支持VST之前的版本了。从官方下载的VST3 SDK中(只提供3.0版)附带VST2 SDK,但是实测缺少一些头文件,无法单独使用,网络上资源也是极其难找。据说VST现在只作为VST3的子集使用

创建一个最简单的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 = Inputwhile (--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 = Inputwhile (--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"
#endifAudioEffect* createEffectInstance(audioMasterCallback audioMaster)
{return new ABypass(audioMaster);
}

第五步

见证奇迹的时刻:F7导出。

不写了,做后期去了。

二〇二〇年三月二十八日

2020-3-29
补充细节:
项目→项目属性→链接器→模块定义文件 设置为vstplug.def

做VST开发不指望能混口饭吃,只是为了好玩。这东西在国内无钱可赚,就是因为大量精美的、好用的pojie VST插件正在被广泛使用。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/1344.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息