创建一个最简单的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 = 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相关推荐
- 在VS中手工创建一个最简单的WPF程序
如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件--新建--项目--空项目,创建一个空项目. 第二步:添加引用,Presen ...
- 创建一个最简单的win32应用程序
创建一个最简单的win32应用程序 使用的是vs2013 中文版 首先创建一个win32 应用程序 工程 也可以使用快捷键 Ctrl+Shift +N 创建的工程名字是 HelloApp 下一步 建立 ...
- matlab程序 如何使用,如何使用MATLAB创建一个最简单的程序
<如何使用MATLAB创建一个最简单的程序>由会员分享,可在线阅读,更多相关<如何使用MATLAB创建一个最简单的程序(4页珍藏版)>请在人人文库网上搜索. 1.如何使用MAT ...
- 用python创建一个最简单的触发器trigger
用python创建一个最简单的触发器trigger 上面就是自己的创建效果了,点击之后会有对话框弹出来,这就是最简单的触发器原理了. trigger就是触发器,触发器主要是通过事件进行触发而被执行的工 ...
- SAP Cloud Platform integration上创建一个最简单的iFlow
登录SAP CPI控制台,点击这个铅笔图标进入工作区域: 选择一个已经存在的content package: 在这个content package里创建一个新的iFlow: 默认生成的iFlow模型如 ...
- 创建一个最简单的imgui测试用例
在上一篇文章中,我们初步认识了一下imgui,并且成功运行了他提供的demo.这只是开始学习imgui的第一步,在实际使用时,我们需要将imgui应用到自己的工程中去,所以你需要具备将imgui加到你 ...
- oracle简易数据库搭建,Oracle 10g 手工创建一个最简单的数据库
[root@blliu ~]# su - oracle [oracle@blliu ~]$ cd $ORACLE_HOME/dbs [oracle@blliu dbs]$ touch initorcl ...
- Thinkphp入门-创建一个最简单的ThinkPhp项目工程
从今天起,开始认真写博客,记录总结一些经验,也分享一下自己的学习过程. 说一说ThinkPhp入门创建工程吧,开始ThinkPhp应用编程的第一步. 软件环境: 1.phpstom,下载链接:点击打开 ...
- 用java创建一个最简单的窗口
如何使在创建窗体前,需要导入相关的 package 包. import java.awt.*; import javax.swing.*; 使用new关键词来创建一个窗体对象 JFrame j ...
最新文章
- Transformer哪家强?Google爸爸辨优良!
- c# uri 取文件名_asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码...
- Py:python利用easygui实现最简单GUI带你学习区块链技术的发展和由来
- lucky前面加a还是an_lucky的用法
- windows 串口编程 c语言,windows下C语言版串口发送程序(基于VS2017)
- php png缩放,PHP实现对png图像进行缩放的方法(支持透明背景)
- 【Flink】Flink连接prometheus报错 IOException :Response code formxxx/metrics/job/rule
- 离散数学期末复习知识总结
- 宏杉科技引领数据中心全IP化潮流 一站式存储专家优势凸显
- 新手必看的入门编程教程
- 《图解HTTP》笔记
- Testlink开启图片上传功能
- element-ui的select组件设置预选项没问题,但重新选中不改变的问题解决
- 九宫格六边形html,六边形拼图
- 取消职称英语计算机考试的文件,2010年有没有可能取消职称英语及计算机考试...
- Synchronized Lock 锁 同步
- 2020年 - 年终总结
- 硬件学习笔记(一)AD入门+STM32C8T6最小开发板得制作
- mysql 8.0.11-winx64_mysql-8.0.11-winx64 安装步骤
- 以word转PDF为例,免费的文档格式转换方法分享
热门文章
- 完全解密企业信息安全风险评估
- oracle查询前五条数据库,Oracle查询前几条数据的方法详解
- 动态规划简单例子——国王与金矿(c++)
- lightinthebox火车头数据采集器(20120812更新) 使用火车头接口技术一键批量采集 批量发布 批量去水印 接口技术
- 简论我国大数据国家战略:数据治国与数据强国
- 计算机ppt怎么播放,怎么让PPT放映期间播放歌曲?
- 设计人员拿到的工程坐标系等高线CAD图如何加载进图新地球
- pytorch lightning
- java怎么导入包语句_java包(package),包导入详解
- [AWS] [Root User] 分配一个IAM账号