首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扫描/枚举vst插件dll?

如何扫描/枚举vst插件dll?
EN

Stack Overflow用户
提问于 2009-07-15 01:34:38
回答 3查看 3.4K关注 0票数 10

我试图建立一个小程序,托管vst效果,我想扫描一个文件夹的插件dll。

我知道如何找到所有的all,但现在我有以下问题:

  • 确定给定的dll是否是vst插件的最佳方法是什么? 我只想看看ddl是否导出了适当的函数,这对于使用最新版本的vst制作的插件来说很好,因为它导出了一个名为"VstPluginMain“的方法,但较早的版本导出了一个相当通用的”主“函数。
  • 如何确定插件是一种效果还是一种工具?
  • 如何扫描vst外壳插件? Shell插件基本上是包含多种效果的dll。这方面的一个例子是由Waves http://www.waves.com/制作的插件

如果有一个图书馆可以为我做所有这一切,请告诉我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-15 02:49:37

如何确定VST插件?

一旦你找到main/VSTPluginMain..。快说啊!如果返回的内容为NULL,则它不是VST。如果返回的是一个指向字节"VstP“的指针(参见aEfft.h中的VstInt32 magic; ///< must be #kEffectMagic ('VstP') ),那么您将得到一个VST。

VSTPluginMain返回指向AEffect结构的指针。您将需要查看这个结构。

效果还是工具?AEffect::flags | (effFlagsIsSynth = 1 << 8)

Shell VST更复杂:

类别为kPlugCategShell

支持"shellCategory“canDo。

使用effShellGetNextPlugin枚举。

例如,使用所需的ID响应回调中的audioMasterCurrentId。

票数 9
EN

Stack Overflow用户

发布于 2013-05-17 16:09:01

@Dave做得不错,但我想在VST插件上添加一些东西,因为它们的使用有点棘手。

若要确定VST是否为shell插件,请将effGetPlugCategory操作码发送到插件分配器。如果它返回kPlugCategShell,那么它就是一个shell插件。要获取shell中的子插件列表,基本上可以调用effShellGetNextPlugin,直到它返回0。示例代码片段(改编自工作VST主机):

代码语言:javascript
复制
// All this stuff should probably be set up far earlier in your code...
// This assumes that you have already opened the plugin and called VSTPluginMain()
typedef VstIntPtr (*Vst2xPluginDispatcherFunc)(AEffect *effect, VstInt32 opCode, VstInt32 index, VstIntPtr value, void *ptr, float opt);
Vst2xPluginDispatcherFunc dispatcher;
AEffect* plugin;
char nameBuffer[40];

while(true) {
  memset(nameBuffer, 0, 40);
  VstInt32 shellPluginId = dispatcher(pluginHandle, effShellGetNextPlugin, 0, 0, nameBuffer, 0.0f);
  if(shellPluginId == 0 || nameBuffer[0] == '\0') {
    break;
  }
  else {
    // Do something with the name and ID
  }
}

如果你真的想在VST外壳中加载一个插件,那就有点棘手了。首先,主机需要处理主机回调中的audioMasterCurrentId操作码。当您调用VST的VSTPluginMain()方法实例化插件时,它将使用此操作代码调用主机回调,并询问应该加载的唯一ID。

由于此回调是在主函数返回之前进行的(因此,在将AEffect*传递给主机之前),这意味着您可能需要将外壳插件ID存储在全局变量中,因为您无法及时在AEffect结构的void* user字段中保存指向任何有意义数据的指针,以便在主机回调中将其传回给您。

票数 3
EN

Stack Overflow用户

发布于 2010-02-03 11:56:10

如果您想在.NET中开发VST主机应用程序,请看一下VST.NET

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1128958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档