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

创建一个最简单的VST相关推荐

  1. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件--新建--项目--空项目,创建一个空项目. 第二步:添加引用,Presen ...

  2. 创建一个最简单的win32应用程序

    创建一个最简单的win32应用程序 使用的是vs2013 中文版 首先创建一个win32 应用程序 工程 也可以使用快捷键 Ctrl+Shift +N 创建的工程名字是 HelloApp 下一步 建立 ...

  3. matlab程序 如何使用,如何使用MATLAB创建一个最简单的程序

    <如何使用MATLAB创建一个最简单的程序>由会员分享,可在线阅读,更多相关<如何使用MATLAB创建一个最简单的程序(4页珍藏版)>请在人人文库网上搜索. 1.如何使用MAT ...

  4. 用python创建一个最简单的触发器trigger

    用python创建一个最简单的触发器trigger 上面就是自己的创建效果了,点击之后会有对话框弹出来,这就是最简单的触发器原理了. trigger就是触发器,触发器主要是通过事件进行触发而被执行的工 ...

  5. SAP Cloud Platform integration上创建一个最简单的iFlow

    登录SAP CPI控制台,点击这个铅笔图标进入工作区域: 选择一个已经存在的content package: 在这个content package里创建一个新的iFlow: 默认生成的iFlow模型如 ...

  6. 创建一个最简单的imgui测试用例

    在上一篇文章中,我们初步认识了一下imgui,并且成功运行了他提供的demo.这只是开始学习imgui的第一步,在实际使用时,我们需要将imgui应用到自己的工程中去,所以你需要具备将imgui加到你 ...

  7. oracle简易数据库搭建,Oracle 10g 手工创建一个最简单的数据库

    [root@blliu ~]# su - oracle [oracle@blliu ~]$ cd $ORACLE_HOME/dbs [oracle@blliu dbs]$ touch initorcl ...

  8. Thinkphp入门-创建一个最简单的ThinkPhp项目工程

    从今天起,开始认真写博客,记录总结一些经验,也分享一下自己的学习过程. 说一说ThinkPhp入门创建工程吧,开始ThinkPhp应用编程的第一步. 软件环境: 1.phpstom,下载链接:点击打开 ...

  9. 用java创建一个最简单的窗口

    如何使在创建窗体前,需要导入相关的 ​package​ 包. import java.awt.*; import javax.swing.*; 使用​new​关键词来创建一个窗体对象 JFrame j ...

最新文章

  1. Transformer哪家强?Google爸爸辨优良!
  2. c# uri 取文件名_asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码...
  3. Py:python利用easygui实现最简单GUI带你学习区块链技术的发展和由来
  4. lucky前面加a还是an_lucky的用法
  5. windows 串口编程 c语言,windows下C语言版串口发送程序(基于VS2017)
  6. php png缩放,PHP实现对png图像进行缩放的方法(支持透明背景)
  7. 【Flink】Flink连接prometheus报错 IOException :Response code formxxx/metrics/job/rule
  8. 离散数学期末复习知识总结
  9. 宏杉科技引领数据中心全IP化潮流 一站式存储专家优势凸显
  10. 新手必看的入门编程教程
  11. 《图解HTTP》笔记
  12. Testlink开启图片上传功能
  13. element-ui的select组件设置预选项没问题,但重新选中不改变的问题解决
  14. 九宫格六边形html,六边形拼图
  15. 取消职称英语计算机考试的文件,2010年有没有可能取消职称英语及计算机考试...
  16. Synchronized Lock 锁 同步
  17. 2020年 - 年终总结
  18. 硬件学习笔记(一)AD入门+STM32C8T6最小开发板得制作
  19. mysql 8.0.11-winx64_mysql-8.0.11-winx64 安装步骤
  20. 以word转PDF为例,免费的文档格式转换方法分享

热门文章

  1. 完全解密企业信息安全风险评估
  2. oracle查询前五条数据库,Oracle查询前几条数据的方法详解
  3. 动态规划简单例子——国王与金矿(c++)
  4. lightinthebox火车头数据采集器(20120812更新) 使用火车头接口技术一键批量采集 批量发布 批量去水印 接口技术
  5. 简论我国大数据国家战略:数据治国与数据强国
  6. 计算机ppt怎么播放,怎么让PPT放映期间播放歌曲?
  7. 设计人员拿到的工程坐标系等高线CAD图如何加载进图新地球
  8. pytorch lightning
  9. java怎么导入包语句_java包(package),包导入详解
  10. [AWS] [Root User] 分配一个IAM账号