每个VST SDK似乎都适用于C ++,那么C#呢?

我想开始制作VSTi,更具体地说是midi – 那些不产生任何声音但只是将midi数据输出到其他vst插头(琶音器,和弦工具等)的人。

现在我刚刚为C#购买书籍,认为这将是一个很好的语言(不仅仅是为了vst编程),但每个人都在说C ++是要走的路,而VST.NET似乎是用于C ++的……在我的C#路上,似乎一切都不利于我?

我脑子里有“编程思维”,但是几年前我编程,Visual Basic,Turbo Pascal等等。 所以我的开始非常干净。

你在这里有什么建议,出售我的新C#书(或隐藏在书架中)并以C ++为目标,还是C#仍然可以? 我一直认为C ++比C#更复杂,需要学习。

顺便说一句,比如用于C ++的VST.NET SDK,它能以某种方式用于C#吗?

VST.NET不适用于C ++。 你在哪里得到这个想法? 转到VST.NET的代码并查看示例。 这会让事情变得更清楚 – 我希望如此。

希望能帮助到你。 Marc VST.NET和MIDI.NET的作者

Steinberg的VST插件架构已经存在了很长时间,最初于1996年发布。当然.NET还需要6年时间,所以当然很多示例代码都是用C ++编写的。 VST v3使用COM来更容易地用C ++以外的语言开发插件。

有两种COM,即基于IUnknown接口的“纯”类型。 而基于IDispatch的“实用”类型,也称为OLE自动化或ActiveX,现在只称为自动化,因为“ActiveX”的名称识别不再灌输信心:)

C#语言在“实用”类型中运行良好。 它支持类型库,这是一种描述COM服务器实现的类型的文件格式。 在C#程序中非常容易使用,只需添加对类型库的引用,它就像一个普通的.NET程序集。 然而,VST使用纯类,您没有可用于导入接口声明的方便类型库。

在C#中编写插件仍然是可能的,您必须使用C#语言重新声明VST接口类型或使用C ++ / CLI包装器来弥补差距。 要做到这一点非常痛苦,但之前已经完成了。 就像在这个开源项目中一样 。 或者这个 。 不知道他们有多好,顺便说一下。 第一个链接是VST.NET。 它是一个托管包装器,不适用于C ++。 无论如何编译之后,它使用C ++ / CLI来处理本机互操作。 第二个包装器不再完全可用,因为它需要Steinberg SDK。 最近才停止使用。 当然是不祥的标志。

我想第二个Obiwanjacobi。 我已经使用VST.Net几个月了,它非常棒。

使用C ++肯定存在争议,因为它确实允许对CPU优化进行更细粒度的控制。 但是,说C ++代码必然比C#代码更快,这是一个神话。 C#为你做了很多艰苦的工作,比如内存管理等等。 基本上,当有人说C ++比C#更快时,他们并不真正比较苹果和苹果。 但是,语言是个人选择。

我以为我会添加此链接,因为如果要创建VST,则需要控件。 以下是测试阶段的一组控件。 它们专为VST设计。 它们具有可剥性和重量轻的特点。

https://bitbucket.org/MelbourneDeveloper/vst-controls-.net

  1. 如果使用一个特定的dll,请使用p / invoke创建一个包装器,实现VST SDK中详述的function。
  2. 如果对一组VST使用generics方法,则创建一个混合模式ref类包装器,将文件名作为参数传递 – 您需要在C ++中执行此操作。 此类在托管和非托管内存之间编组数据。
  3. 由于VST3是最新的VST标准,并且与COM兼容,因此使用COM进行实例化。 有关一些想法,请参阅如何通过CLSID在C#中实例化COM对象?

原因很简单。 C ++是最低级别的高级语言之一。 C#和Java通常是Web应用程序或业务应用程序的最佳工具。 从来没有一个多媒体应用程序,其足迹的大小是指数和与其性能成反比。 ;)