注:所有文章内容均可在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

宿主程序通过这个类的CreateInstance方法,创建一个VST插件的实例
IComponent
该接口包含一个插件的信息,比如获取插件ID,获取\设定插件运行模式,获取\设定插件状态,以及获取\设定声道数量等
IEditController
该接口提供一个界面,同时提供一系列的参数与界面上的控件进行绑定。同时可以通过接口提供的方法获取\设定参数值或者获取\设定界面及控件的状态。由于宿主程序通常由MFC开发,所以VST插件的界面是一个CView类型。
IAudioProcessor
数据处理接口,通过该接口可以设定缓冲大小,修改处理函数指针,设定声道数量。

VST SDK 3.x 开发(一):VST结构介绍相关推荐

  1. 原生Android开发基础项目结构介绍

    原生Android开发基础项目结构介绍 1.软件整体结构 2.具体的页面书写 3.实例分析 4.后续     下面先来总结一下软件的基本目录结构,这一般是开发的关键,只有明白了软件的目录结构,才能更加 ...

  2. AngularJS+Ionic开发-2.项目结构介绍

    使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...

    1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)...

    1.前言 今天再一次在官网看到了ArcGIS Runtime SDK for Android下一个版本"Quartz"版的更新资料,它将是一个非常重要的更新,包括API接口的重构和 ...

  5. 【Cat.1模组】 广和通L610 基于OpenCPU的SDK二次开发

    目前支持Cat.1网络的芯片平台主要是紫光展锐UIS8910和翱捷ASR1603,基于紫光展锐平台,各大厂商延伸出多款Cat.1模组:广和通L610就是其中之一.本文记录开发过程,供日后参考. 广和通 ...

  6. 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

    Livox Lidar  + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...

  7. WSL构建nRF5 SDK + ARM GCC开发环境 – RTT打印调试日志

    陈拓 2022/07/28-2022/11/04 1. 概述 在<WSL构建nRF5 SDK + ARM GCC开发环境> https://zhuanlan.zhihu.com/p/544 ...

  8. cuSPARSELt开发NVIDIA Ampere结构化稀疏性

    cuSPARSELt开发NVIDIA Ampere结构化稀疏性 深度神经网络在各种领域(例如计算机视觉,语音识别和自然语言处理)中均具有出色的性能.处理这些神经网络所需的计算能力正在迅速提高,因此有效 ...

  9. STM32单片机SIM800C创客GSM短信GPRS可编程模块SDK二次开发DIY

    STM32单片机SIM800CGSM电话短信GPRS网络可编程模块SDK二次开发 板载STM32F103RCT6单片机,板载LDO,板载SIM800C,有SDK,有基础技术支持,可深度定制. 通过我们 ...

最新文章

  1. 为什么二级菜单会被挡住_武夷红茶为什么是二级茶?我们平时喝的红茶会不会被加了糖?...
  2. 图像的zoomfft变换
  3. 教程Xcode 4下编译发布与提交App到AppStore
  4. GDCM:gdcm::PNMCodec的测试程序
  5. php session/完整判断是否https/对象与数组互转/文件下载
  6. yii 2.0 代码阅读 小记
  7. Spark练习 - 提交作业到集群 - submit job via cluster
  8. 利用VBS合并Excel中相同单元格
  9. 2019-07-18
  10. Java网络编程实现
  11. 过采样:SMOTE算法
  12. Excel高级函数应用总结
  13. 国家地区代号与英文名对应表
  14. 【愚公系列】2022年09月 微信小程序-自定义tabBar的实现
  15. Android WebView播放视频flash(判断是否安装flash插件)
  16. 小程序调用腾讯视频插件
  17. 中国无线蓝牙打印机行业市场供需与战略研究报告
  18. Vue技术栈(全家桶)
  19. 腾讯位置服务---->(小程序简单使用+显示附近WC步行路线)
  20. Linux如何使用WIFI连接abd

热门文章

  1. H5 实现自定义video播放器,快来点我吧
  2. index=False含义
  3. idft重建图像 matlab_1周学FFT——第2天 DFT和IDFT的MATLAB实现
  4. 完全竞争市场的含义和特征
  5. Docker-------网络模式
  6. git版本控制命令行说明
  7. java自定义注解详解
  8. 毕马威误删,14.5万个账号清零,微软确认数据不可恢复
  9. 混迹币圈想超越他人,你不得不了解的CCR智能炒币机器人
  10. MySQL中间件Atlas