VST SDK 3.x 开发(一):VST结构介绍
注:所有文章内容均可在VST SDK的doc文件夹中找到英文版。如果你英文非常好可以忽略这个系列的文章直接看原版。本文并不是翻译而是个人对说明文档的理解
一、VST音频插件
VST(Virtual Sound Technology)音频插件是Steinberg公司创造的。简单的说VST技术就是由一个宿主程序(如Cubase,Protools,Audition)提供音频数据块(block)到一个VST插件中,再由插件的编写者在VST插件中对音频数据块进行处理后返回给宿主程序的技术。
二、VST-MA
VST-MA(VST Module Architecture)是用来描述VST插件代码结构的术语。VST的开发类似于COM开发,主要通过接口与外部进行交流,但是VST插件并不是COM,所以目前VST代码只提供C++一种版本,并且不可以被其他语言所重复利用。
VST插件代码的主要结构如下:
首先由宿主程序扫描VST插件所在的文件夹(不同于COM通过注册ID),当用户通过宿主程序启动一个VST插件时,宿主程序通过IPluginFactory接口创建VST插件的实例,然后通过IPluginBase接口对VST插件及插件界面进行初始化或终止,通过IComponent接口获取VST插件的相关信息,然后VST插件通过IAudioProcessor接口与宿主程序进行交互,并在该接口中完成对音频数据的处理和返回。同时,用户还可以通过IEditController接口获得VST插件提供的控制界面,通过该界面可以帮助用户设定音频处理过程中产生的变量。
IComponent和IEditController都继承自IPluginBase,前者表示插件本身,后者表示插件界面,IAudioProcessor继承自FUnknown表示插件处理音频的接口。
以下为宿主程序创建VST插件的代码片段
//------------------------------------------------------------------------...
// 表示VST插件Vst::IComponent* processorComponent;
// 表示VST插件的界面Vst::IEditController* editController;
// 创建VST插件实例的接口IPluginFactory* factory;...// 宿主程序启动后会对factory进行初始化...
// 第一步:通过插件ID创造一个VST插件的实例并赋值给processorComponenttresult result = factory->createInstance (classID, Vst::IComponent::iid, (void**)&processorComponent);if (processorComponent && (result == kResultOk)){// 第二步:初始化VST插件res = (processorComponent->initialize (gStandardPluginContext) == kResultOk);// 第三步:查看插件是否具有Interface(界面)if (processorComponent->queryInterface (Vst::IEditController::iid, (void**)&editController) != kResultTrue){FUID controllerCID;if (processorComponent->getControllerClassId (controllerCID) == kResultTrue && controllerCID.isValid ()){ // 第四步:如果VST插件包含界面,则创建界面组件并赋值非editControllerresult = factory->createInstance (controllerCID, Vst::IEditController::iid, (void**)&editController);if (editController && (result == kResultOk)){// 第五步:初始化VST插件的界面res = (editController->initialize (gStandardPluginContext) == kResultOk);// now processorComponent and editController are initialized... :-)}}}}//------------------------------------------------------------------------
基本数据结构及接口描述如下
FUID
每一个VST插件以及插件所包含的类都包含一个特定的长度为16字节的ID,叫做FUID,定义在Steinberg::FUID类中
FUnknown
VST插件最基本的接口是FUnknown类似于COM中的IUnknown,接口提供以下功能:
1.所有VST插件相关的类都继承这个接口,接口中包含一个唯一标识符FUID,用来区分这些类。
2.FUnknown接口包含一个可以遍历所有组件的方法。
3.FUnknown接口包含计数器增加、减少以及释放接口的方法,同COM中的IUnknown
IPluginBase
VST插件所继承的接口,这个接口包含两个方法,初始化和终止
IPluginFactory
VST SDK 3.x 开发(一):VST结构介绍相关推荐
- 原生Android开发基础项目结构介绍
原生Android开发基础项目结构介绍 1.软件整体结构 2.具体的页面书写 3.实例分析 4.后续 下面先来总结一下软件的基本目录结构,这一般是开发的关键,只有明白了软件的目录结构,才能更加 ...
- AngularJS+Ionic开发-2.项目结构介绍
使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...
1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)...
1.前言 今天再一次在官网看到了ArcGIS Runtime SDK for Android下一个版本"Quartz"版的更新资料,它将是一个非常重要的更新,包括API接口的重构和 ...
- 【Cat.1模组】 广和通L610 基于OpenCPU的SDK二次开发
目前支持Cat.1网络的芯片平台主要是紫光展锐UIS8910和翱捷ASR1603,基于紫光展锐平台,各大厂商延伸出多款Cat.1模组:广和通L610就是其中之一.本文记录开发过程,供日后参考. 广和通 ...
- 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)
Livox Lidar + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...
- WSL构建nRF5 SDK + ARM GCC开发环境 – RTT打印调试日志
陈拓 2022/07/28-2022/11/04 1. 概述 在<WSL构建nRF5 SDK + ARM GCC开发环境> https://zhuanlan.zhihu.com/p/544 ...
- cuSPARSELt开发NVIDIA Ampere结构化稀疏性
cuSPARSELt开发NVIDIA Ampere结构化稀疏性 深度神经网络在各种领域(例如计算机视觉,语音识别和自然语言处理)中均具有出色的性能.处理这些神经网络所需的计算能力正在迅速提高,因此有效 ...
- STM32单片机SIM800C创客GSM短信GPRS可编程模块SDK二次开发DIY
STM32单片机SIM800CGSM电话短信GPRS网络可编程模块SDK二次开发 板载STM32F103RCT6单片机,板载LDO,板载SIM800C,有SDK,有基础技术支持,可深度定制. 通过我们 ...
最新文章
- 为什么二级菜单会被挡住_武夷红茶为什么是二级茶?我们平时喝的红茶会不会被加了糖?...
- 图像的zoomfft变换
- 教程Xcode 4下编译发布与提交App到AppStore
- GDCM:gdcm::PNMCodec的测试程序
- php session/完整判断是否https/对象与数组互转/文件下载
- yii 2.0 代码阅读 小记
- Spark练习 - 提交作业到集群 - submit job via cluster
- 利用VBS合并Excel中相同单元格
- 2019-07-18
- Java网络编程实现
- 过采样:SMOTE算法
- Excel高级函数应用总结
- 国家地区代号与英文名对应表
- 【愚公系列】2022年09月 微信小程序-自定义tabBar的实现
- Android WebView播放视频flash(判断是否安装flash插件)
- 小程序调用腾讯视频插件
- 中国无线蓝牙打印机行业市场供需与战略研究报告
- Vue技术栈(全家桶)
- 腾讯位置服务---->(小程序简单使用+显示附近WC步行路线)
- Linux如何使用WIFI连接abd