问题标签 [vst]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
70 浏览

macos - 与 Google Breakpad 链接后无法加载 VST

我正在尝试在 OSX 上构建一个 32 位 VST 插件并将其与 Google Breakpad 链接。可以按照官方指南 https://code.google.com/p/google-breakpad/wiki/MacBreakpadStarterGuide构建 Breakpad.framework

但是 MuLab 不再能够加载 VST 并失败并出现以下错误:FSOpenResFile with error -1409

有没有人遇到过这个问题?

0 投票
1 回答
205 浏览

c++ - XCode 4.6 上的 VST - 插件在加载时直接提供高输出

我正在 XCode 4.6 中编写 Steinberg VST 插件。

我已经实现了一个正常工作的高通滤波器。现在我试图用二次函数做一些非线性失真。在我实现了下面的几行并将插件加载到主机中后,我立即从插件中获得了一个输出 - 你什么也听不到,但仪表很高。

我真的无法想象为什么。发生数学运算的 processReplacing 函数只应在播放声音时调用,而不是在加载插件时调用。当我删除下面的几行代码时,一切正常并且听起来不错,所以我认为它与插件代码的其余部分无关。

该问题发生在两台主机中,因此它可能不是 VST 错误。有没有人遇到过类似的问题?

非常感谢, 法比安

编辑:我在每个函数中添加了日志文件输出并且它发生了,processReplacing 函数被永久调用,不仅在播放打开时......但是为什么呢?

0 投票
1 回答
734 浏览

c++ - VSTGUI:editor::open 和 editor::close 的约定

在使用 VSTGUI 编写新的 vst-plugin 时,我真的很想知道如何使用该库,并且大部分进展都是通过猜测和调试之后取得的(因为除了百万行和 ygrabit 之外真的没有任何文档,这说明不多显而易见的)。

到目前为止一切顺利,但我对项目的最后贡献涉及线程,这使设计更加成问题。具体来说,我正在处理容器中的一组文本标签(执行非原子操作),当用户关闭窗口时,这些可能(并且显然确实)在我不知情的情况下被破坏。即使在更改元素之前添加检查仍然可能是一个问题。所以我实际上需要控制这些对象的生命周期(这很好),除非它们显示在 CViewContainer 中,它会自动承担所有权。

我不知道如何编写编辑器的主干,所以我为此使用了一个名为 VSTGUIBuilder 的程序,并附加(并且基本上重写了)我需要的内容。但是,由于您可以使用的所有“视图”都需要父窗口或系统窗口,因此您无法在到达 AEffEditor::Open() 函数之前实例化任何视图/控件,每当弹出窗口时都会调用该函数。每当关闭窗口时,都会调用 AEffEditor::close() 方法。现在,vstguibuilder 放了一个

在 AEffEditor::close() 方法中,该方法建议您在每次打开和关闭时重建和分配所有资源。这真的是真的吗?如果是的话,我有没有办法保护我的容器的内容(详细来说是一个矢量< CTextLabel *>)免于被删除中间功能?以后处理掉也没问题,我只是担心改的时候会出现段错误。

使用互斥锁之类的确实是最后的手段(如果呼叫来自主机),如果我的代码出现故障并且永远不会释放,我无论如何都不想挂起主机。

编辑:我最终找到了一个不太优雅但可以安全工作的解决方案。这是worker函数中的代码:

bLock 是另一个保护消息队列的“互斥锁”,该函数将打印出来。bDeleteLock 保护复制行容器并“记住”它们的过程,如果之后立即释放。两者都被声明为 volatile bool,这还不够吗?顺便说一句,这是 close() 方法。

0 投票
1 回答
134 浏览

visual-c++ - 使 Oouras 的 FFT 工作

我正在尝试对两个信号进行简单的卷积。一个是信号(例如音乐),另一个是 IR(类似这种方案的简单延迟:

所以它应该产生一个小的回声。

我了解到时域中的卷积是频域中的乘法。

所以我的想法是对两个信号(音乐和 IR)进行 FFT,然后将得到的几个数字 re & im(来自 re + im*i)相乘,然后进行 iFFT 并欣赏结果。

唯一的问题是它不起作用。

我已经尝试了 RFDT 和 CFDT,但我产生了一个奇怪的结果:我的信号被延迟但反向。这是FFT的事情吗?

首先对于 RDFT(Real DFT : re in, re & im out),我在最后添加了 +n/2 个零样本或音乐和 IR,用于卷积,然后使用 4 个重叠缓冲区(这是所需的数量)并在时间合适时计算两者的 FFT,然后相乘,然后 iFFT 等。

其次是 CDFT(复杂 DFT:re & im in & out),我每两个样本放一个音乐样本(虚部为零),然后做 cdft,相乘等

但两者都不起作用并给出相同的结果:反转和延迟声音的奇怪混合。

请帮忙。

  • 项目清单
0 投票
1 回答
1210 浏览

c++ - SetFocus 到父窗口,然后回到子窗口

我正在尝试使用 VSTGUI 4.0 实现 VST。我的 DAW 使用 WM_KEYDOWN 和 WM_KEYUP 消息来发送基于键盘按下的 MIDI 音符,以便您可以使用键盘演奏 VST。问题是,VSTGUI 在收到 WM_LBUTTONDOWN 消息时会执行此操作:

这会从 DAW 中窃取焦点,并且不允许它处理按键。VSTGUI 需要窗口焦点来处理 WM_MOUSEWHEEL 和 WM_KEYUP/WM_KEYDOWN 事件以调整控件。但是当您在 VST 中调整控件时,您显然希望能够使用键盘弹奏音符以查看它们的声音,因此这两个功能都很重要。

我能想到解决问题的唯一方法是将 SetFocus() 发送到父窗口,使用 SendMessage() 将 WM_KEYUP/WM_KEYDOWN 消息发送回它,然后将 SetFocus() 发送回 VST 窗口:

这非常有效,直到您单击 VST 并同时按下一个键,此时会发生未定义的事情(冻结 DAW、使 DAW 崩溃、堆栈溢出等)。

所以很明显我对此采取了错误的方法。我觉得我需要 PostMessage() 并等待回调,然后再将焦点返回到 VST 或类似的东西。即使这听起来有点混乱,那么处理这样的问题的正确方法是什么?

请记住,我无权访问传递消息的 DAW 窗口的代码,因此我无法实现自定义消息或类似的东西。

0 投票
1 回答
392 浏览

ios - iOS VST 音频插件支持

作为一名 Objective C 开发人员,是否有一个库或其他聪明的“简单”方法可以让 VST 插件在 iOS 上运行?

(如果您有任何建议,请改进标记。)

0 投票
1 回答
283 浏览

c++ - 如何在 OSX 上的 C++ 应用程序中播放合成器声音?

我想在我的应用程序中播放器乐声音。声音的持续时间是灵活的,所以 MIDI 似乎是最好的解决方案。

我现在正在使用开放框架。使用音频单元,我设法处理输入声音,而不是通过乐器演奏。我在我的 Mac 上找到了 AUi 工具,但我不知道如何从我的代码中访问它们。我没有找到任何演奏 General Midi(内置 MIDI 乐器)的方法。没有找到 RTMidi 的输出端口。

有没有人有办法解决吗?谢谢!

0 投票
1 回答
1108 浏览

c++ - 在 VST 仪器中快速(实时)下采样 96 到 44.1 kHz 音频

我正在尝试在我的 VSTi (c++) 中创建一个快速的下采样功能,但我很难让它工作。这就是我所拥有的,也是我正在尝试做的。首先是低通滤波器..

使用上述低通滤波器后,我通过步进 96000/44100=2,1769 播放缓冲区。截断这意味着我将通过 pp->cOffset[o] 2, 4, 6, 8, 10, 13, 15, 17, 19, 21, 23, 26, 28, 30 获得索引(int)系列。 . 来自 96kHZ 缓冲器。我可以听到滤波器在高频上取得了成功,但由于我从缓冲区中读取系列的方式,有更深的金属声音。

然后我尝试添加以下内容来处理它(请不要笑):

这使一些金属声音消失了,但不是全部,我迷路了,不知道该怎么做。我现在头上的头发比昨天少!

输出是主机的输出缓冲区,主机设置为 44.1kHz 采样率,而我的波形采样为 96kHz。

请让我找到继续前进的方法。

0 投票
1 回答
461 浏览

c++ - 主机中相同 VST 乐器的多个实例播放相同的 MIDI 声音

我用 C++ 制作了 VST2.4 乐器,一切正常,但是如果我将乐器加载到主机的多个通道中,它们都会互相播放彼此的 midi 文件。如果我复制我的 dll 并更改 dll 副本的名称,那么我可以加载两个实例并按照它们应该的方式分别播放它们。但只要我加载多个相同的dll,它们都会播放相同的midi。

在我的 dll 中,当处理 midi 事件时,我确实忽略了通道,我只是在处理笔记,这是我能想到的代码中唯一可能导致这种情况的部分。我需要知道什么才能使其与同一 VST 仪器的多个实例一起工作吗?

我使用的 midi 事件函数取自 VST.SDK V2.4 中包含的合成器示例

我知道这与唯一 ID 无关。

问候,摩根

0 投票
1 回答
245 浏览

c++ - VST2.x GUI 它是如何工作的?

虽然我今天知道如何创建 VST 插件,但我仍然不了解它的 GUI 部分。

我一直在玩 Steinbergs 示例,我可以看到他们在示例中使用了一些默认滑块,但是我应该在设计自己的滑块并对其应用一些图形时使用这些滑块吗?还是我应该完全创建自己的?我应该如何考虑 GUI 方法以使 GUI 代码以后也适用于 PC 和 MAC?

我一直在寻找我的背后,但在任何地方都找不到关于这些问题的任何信息。请给我一个领导或引导我走向光明,这样我就可以让我的头发长回来。