我想制作(或学习如何制作)VST插件.有没有特殊的SDK?如何产生.vst而不是.exe?另外,如果有人想为Logic Pro制作音频单元,那怎么办呢?谢谢
我来自使用MSC*MidiSequencer进行Delphi XE2项目的背景,并且本周末一直在玩DelphiASIOVST,因为MIDI可能足够稳定,可以用作我的核心MIDI引擎,同时也允许我支持VST插件插件.我将D16主干从SVN上拉下来,经过一些路径调整后毫不费力地编译.
我理解了很多我所看到的内容,但我想知道其他人是否在MiniHost示例应用程序中遇到MIDI文件播放问题.特别是在一个音轨旋律演奏的情况下,听起来音符会被跳过和/或稍后播放其他正在播放的音符.基本上,如果甚至根本没有播放音符,它就会被击中或错过.
我的机器上有很多专业音序器,MIDI文件很好.他们也支持VST几乎没有问题.我也知道MIDI最低级别的文件格式,并且知道文件结构是合理的.
TMidiFile可以直接播放到计算机中的标准MIDI合成器吗?我试图通过获得内置合成器的直接管道来排除VST问题.除此之外,任何人都可以使用组件集看到这些问题或者知道更多/更好的MIDI文件示例到VST?
我正在尝试使用 SDK 中包含的 VST 托管实用程序来加载插件。代码如图:
#include "vst/v3/Vst3CommonIncludes.h"
int main()
{
std::string vst3_module_path = R"(C:\Program Files\Common Files\VST3\Kontakt.vst3)";
std::string error;
std::shared_ptr<Module> vst_module = Module::create(vst3_module_path, error);
std::vector<ClassInfo> class_infos = vst_module->getFactory().classInfos();;
assert(error.empty());
assert(class_infos.size());
ClassInfo plugin_info = class_infos[0]; //Crash
//... load the plugin and do more things
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中仅包含来自和
8 的Vst3CommonIncludes.h所有 VST SDK 标头pluginterfaces/vstpublic.sdk/source/vst
就我而言,SDK 包含源文件和 cmake 文件,可将它们构建到静态库中。所以我的代码和SDK代码共享同一个编译器。
我的调查显示PluginFactory::classInfos()返回了损坏的数据,尝试从它们中分配原因,std::bad_alloc因为 的大小std::string无效。
VST SDK中PluginFactory::classInfos()的定义:
PluginFactory::ClassInfos PluginFactory::classInfos () const …Run Code Online (Sandbox Code Playgroud) 我想使用Qt GUI库作为VST插件的用户界面.VST插件是Windows上的DLL.宿主应用程序调用DLL上的各种函数,包括类似的东西openGUI().
我想知道如何从DLL使用Qt GUI; 我做了一些研究来研究可能的选择,但我不完全确定这些限制.
主要问题是在哪里创建QApplication对象并对其进行调用exec()(这是一个在应用程序退出之前不会返回的函数).
我已经看过这篇文章中给出的解决方案了,但是经过进一步的阅读后,看起来这个解决方案在Mac OS X上不起作用,因为Cocoa对GUI可以运行的特定线程更具限制性.这真是一个黑客攻击.
我也看过这个解决方案,但依赖于它,QMfcApp并且QWinWindow它似乎不再是Qt库的一部分.
这是我的DLL生成一个新的应用程序本身的唯一方法吗?据推测,我可以通过调用QProcess并使用一些共享内存在GUI应用程序和我的VST DLL之间共享来启动一个?有没有人遇到过这类问题?我是否会走这条路,或者有什么我还没想到的?
更新
经过进一步研究,我遇到了QAbstractEventDispatcher全班同学.我看过这篇文章似乎说可以QApplication::processEvents()从你自己(我的插件的主机)调用事件循环而不是调用QApplication::exec().有没有人试过这样做?
好的,我知道还有其他帖子关于你怎么不能从OS X二进制文件中实际删除Objective-C符号,因为它们对于Obj-C来说是必要的,但我的情况有点不同.
我有一个二进制文件,它是一个包.它既可以用作VST插件,也可以用作AudioUnit插件.这个想法是二进制包含所有这两种格式的入口点,你只编译一次,然后将其命名一个副本" .VST "为VST版本,而" .component "为AU版本. (这是使用JUCE框架BTW.)
问题是对于AU方面,您必须导出Obj-C类以创建Cocoa UI视图.在VST方面,永远不会使用此类.但是如果你有像Ableton Live这样的主机允许你同时加载同一个插件的AU和VST版本,那么现在我们遇到了典型的Obj-C命名空间冲突问题.
在VST方面,特定的Obj-C类永远不会被使用.所以我想做的是使用"strip"从生成的二进制文件中删除那些Obj-C类.这仍然保留了为两种格式只编译一次的优点.
无论如何,我已经尝试过使用"strip -R stripfile.txt <path to binary>",其中stripfile.txt包含我想要删除的符号,但它始终无法说明在二进制文件中找不到符号.我已经尝试在条带文件中修改名称,但这没有帮助(或者我做错了).
以下是我想要剥离的相关符号,作为"nm -m"的输出:
000000000003bb00 (__TEXT,__text) non-external -[JuceDemoProjectAU description]
000000000003bb60 (__TEXT,__text) non-external -[JuceDemoProjectAU interfaceVersion]
000000000003ba00 (__TEXT,__text) non-external -[JuceDemoProjectAU uiViewForAudioUnit:withSize:]
0000000000b02398 (__DATA,__objc_data) external _OBJC_CLASS_$_JuceDemoProjectAU
0000000000b023c0 (__DATA,__objc_data) external _OBJC_METACLASS_$_JuceDemoProjectAU
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
顺便说一下,我随后能够动态注册有问题的类(使用唯一的名称),这也解决了这个问题.但是,如果我可以开始工作,我可以为现有的二进制文件部署解决方案.
以Tweakbench的VSTi Triforce为例.当加载到市场上的任何VST主机中时,它允许主机向VSTi发送(可能是MIDI)信号.然后,VSTi将处理该信号并输出由VSTi内的软件仪器创建的合成音频.
例如,向VSTi发送A4(我相信的MIDI音符)将使其合成中间C上方的A.它将音频数据发送回VST主机,然后VST主机可以在我的扬声器上播放或保存它.wav或其他一些音频文件格式.
假设我有Triforce,并且我试图用我选择的语言编写一个程序,可以通过发送要合成的A4音符与VSTi进行交互,并自动将其保存到系统上的文件中?
最后,我希望能够解析整个单轨MIDI文件(使用已经可用于此目的的已建立的稳定库)并将其发送到VSTi以"渲染"/合成为音频文件.
我将如何解决这个问题,我应该用什么语言来构建核心框架?
最终,它将用于基于Ruby的项目,因此任何指向特定Ruby资源的指针都会很好.
但是,我只是想了解一下VSTi的API是如何工作的.(我已经意识到这个问题与构建VST主机的问题非常相关,尽管只能将VST输出保存到文件中而不能播放它们,并且范围要小得多)
在此先感谢任何帮助=)
我正在尝试阅读在C++或C#中构建准系统虚拟仪器主机所涉及的努力程度,但我无法获得任何硬信息.有没有人知道任何好的入门应用程序,教程,助手库这类东西?
如果重要,目标是a)接受传入的MIDI事件,b)将它们发送到虚拟乐器.在C++或C#中,如果可能的话.
谢谢!
我正在尝试构建一个托管vst效果的小程序,我想扫描一个文件夹中的插件dll.
我知道如何找到所有的dll,但现在我有以下问题:
ps:如果有一个库可以为我做所有这些,请告诉我.
首先,抱歉没有在这里发布代码.出于某种原因,当我试图输入我在此页面上的代码时,所有代码都搞乱了upp,无论如何发布它可能太多了,无法接受.这是我的代码:http://pastebin.com/bmMRehbd
现在从我所说的,我无法从这段代码中获得好结果的原因是因为我没有使用重叠添加.我试图在互联网上阅读几个来源,为什么我需要使用重叠添加,但我无法理解它.似乎实际过滤器工作,导致任何高于给定截止值,确实切断.
我应该提到这是为vst2-sdk工作的代码.
有人能告诉我为什么我需要添加它以及如何在给定代码中实现重叠添加代码?
我还应该提到,当谈到算法和数学时,我真的很愚蠢.我是那些需要在视觉上抓住我正在做的事情的人之一.那或者通过代码解释的东西:),然后我的意思是实际的重叠.
Overlad添加理论:http://en.wikipedia.org/wiki/Overlap%E2%80%93add_method
感谢您提供的所有帮助!
vst ×10
c++ ×5
audio ×3
delphi ×2
dll ×2
midi ×2
audiounit ×1
c# ×1
cocoa ×1
convolution ×1
delphi-xe2 ×1
fft ×1
filter ×1
objective-c ×1
qt ×1
ruby ×1
synthesizer ×1
visual-c++ ×1