- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
示例:如果我想在我即将自制的 VST 乐器中播放一个声音,并且音序器中的这个音符有 15000 个样本长,并且该音符被 processEvents 设置为 ON,则 processReplace 函数开始播放声音从 0 到 sampleFrames(在我这里的例子中是 10000)。然后,下次进入 processReplace 循环时,音符将剩下 5000 个样本可播放,但循环仍将从 0 播放到 10000,这比音符要播放的样本多 5000 个。将播放 5000 个静音样本,这意味着直到 5000 个样本之后才会关闭此音符!?
如果音序器中的新声音直接放在第一个声音之后,processReplace 函数将看不到由 processEvents 设置的短时间关闭,并且将下一个样本视为第一个声音的连续声音,因为它只会看到再次进入循环时,新音符打开。
如何防止这种情况发生?如果音符在循环中间结束,我该如何停止 processReplace 循环?
最佳答案
我不确定我是否理解你的问题,但这里有一个问题。
当您确定从传入的 Midi 音符事件中在 processEvents 中生成什么声音时,下一次调用 processReplace 必须实现这一点。因此,您需要内部状态来记住在 processEvents 中检测到的注释,并且需要在 processReplace 期间输出。
当样本的持续时间(在您的情况下)长于缓冲区可以容纳的时间(sampleFrames)时,您需要记住您在做什么以及您在哪里。在您的示例中,样本的 2/3 已播放,下一个 processReplace 需要播放样本的最后 1/3。
如果 (Midi) 音符尚未关闭(您没有收到 Midi 音符关闭事件),作为 VSTi 插件,您必须决定如何处理它。因此,您可能想要重复相同的样本并在第二次 processEvents 调用中播放它的前 1/3 - 请记住您必须稍后播放该样本的其余部分。
如果您在这种情况下的任何地方收到 Midi note-off 消息 - 您将必须存储内部状态(数据),告诉插件的 processReplace 逻辑在正确的时间停止播放该样本。许多插件采用快捷方式,将在等于 processReplace 缓冲区的 sampleFrames 的样本 block 中处理此信息。但是,如果您想要精确,则必须检查传入的 Midi 音符事件的 deltaFrames,并在 processReplace 处理中考虑该偏移量。
主机 (DAW) 决定何时调用您的 processEvents 和 processReplace 方法。它通常会在您的插件(实例)的整个生命周期内继续这样做。因此,保持插件正在执行的内部状态是关键。如果它什么都不做——你无论如何都不要改变输出缓冲区(归零)。
希望对您有所帮助。马克
关于c++ - VST SDK 2.4 乐器 - processReplace 和 processEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004868/
我有一个从 QThreads 和主线程调用的方法。此方法有时可能需要很长时间才能在循环中进行计算,因此我放置了 QCoreApplication::processEvents() ,这可以防止 GUI
注意:所提供的代码只是给出了应用程序结构的概念 我有一个与外部硬件交互的 Qt 应用程序。该结构是这样的,用于与硬件接口(interface)的类继承自QObject,并与主GUI线程类组成。假设这个
由于只有一个QCoreApplication对象,为什么从哪个线程调用QCoreApplication::processEvents()无关紧要? 毕竟,线程都共享相同的地址空间。 最佳答案 您的标题
我有几个问题。 是否可以在一个线程上初始化 QApplication 对象并在另一个线程上销毁它? 为什么 QApplication 必须在分配它的同一线程上运行? 是否可以在创建 QApplicat
我的工作时间非常重要,我对 processEvents() 的行为有疑问。当我调用 processEvents() 时,它是否在单独的线程/进程上运行,以便在执行更多代码时它可能仍在运行? 如果不是,
QThread 文档建议了两种使代码在单独的线程中运行的方法。如果我使用 moveToThread 方法,我必须调用 processEvents() 来发出超时,以执行 lambda。而且这似乎花费了
我正在为 qt 编写一个新的平台插件,我想了解“processEvents”虚拟方法应该做什么?我的要求是我在文件描述符上接收事件并且应该将它们转换为 qt gui 事件并将它们传递给 qt。请建议。
我正在为 qt 编写一个新的平台插件,我想了解“processEvents”虚拟方法应该做什么?我的要求是我在文件描述符上接收事件并且应该将它们转换为 qt gui 事件并将它们传递给 qt。请建议。
在处理各种事件时,我的一般策略是创建一个 xxxHandler 类,如 MouseHandler、WindowHandler 等,它扩展了 Java 提供的适当的 xxxAdapter 类。 我刚刚回
我有一个用 PySide 编写的 Qt 应用程序(Qt Python 绑定(bind))。这个应用程序有一个 GUI 线程和许多不同的 QThreads,它们负责执行一些繁重的工作——一些相当长的任务
我正在尝试做一个项目,使用 Qt GUI C++ 5.6.2 在窗口上创建一些图形。我有两个名为“createVerticalSpeedIndicator”和“createAirSpeedIndica
下面是我的代码,用于列出目录的所有子目录。我用它来理解 PySide 中的 QThread 以及信号和槽。问题是,当我没有在 Main 类的 scan() 方法中使用 Qtcore.QApplicat
大家好 在我的 QT 应用程序中,我使用 OpenMP 来并行化循环。在循环中,我想更新当前 QMainWindow 的进度条值。以下代码片段显示了我是如何尝试这样做的: #ifdef OPENMP_
我有一个执行大量 IO 的循环,所以我不时调用 qApp->processEvents() 以保持 GUI 的 react 性。在 Linux 上,这会导致严重错误,因为提前调用了事件。 是否有可能从
有一个 QApplication::lastWindowClosed() 信号。 Qt docs说: This signal is emitted from QApplication::exec()
我正在开展一个项目,该项目使用 Qt 的 QCustomPlot 插件显示实时获取的实时数据。显示屏的背景色为黑色,多个数据通道的颜色不同。截图时,我们想让它适合打印,所以背景是白色的,所有数据都是黑
我通过实现 Microsoft.TeamFoundation.Framework.Server.ISubscriber 编写了一个 TFS 2013 插件界面。在 ProcessEvent 方法中,我
PyQT4.11 Python 2.7 我一直在尝试创建一个启动屏幕,以在选择特定选项卡时显示加载消息。当调用 app.processEvents() 时,我会显示一个灰色框而不是图像,但是如果我在调
我的应用程序绘制图像并为其添加标签。当窗口在等待输入时关闭,应用程序仍然在后台运行。这是我的捕获标签的函数示例。我是否遗漏了一些让程序正常退出的东西? void CustomMainWindow::
我想念任何Qt如果我替换 QApplication::exec() 的功能使用标准的 Windows 消息循环实现?这应该澄清我的意思: 运行事件处理的常用“Qt”方式: int main(int a
我是一名优秀的程序员,十分优秀!