可编程“实时”MIDI处理

问题描述:

在我的乐队中,所有音乐家的双手随时都在忙碌。但是,我们要添加全合成和弦(1/4 ..全音符长度),也许是一个简单的脚踏开关,每次触发(因为沿打目前太难为我们)。可编程“实时”MIDI处理

前段时间,我在C(MinGW)中编写了一个(Windows)控制台应用程序,它将传入的MIDI事件转换为文本,将该文本传送到外部程序(AWK脚本),并将外部程序的文本输出重新转换回到MIDI事件。基本上,每种过滤或事件生成都是可能的;我实际上创造了简单的控制信息触发的和弦;我一直音符打开在内存中,以便能够- 关他们时,一个新的和弦被送往等 - 实际处理(执行)的时间是不是在所有问题

但我(!)必须明白,不仅延迟,而且众所周知的不可靠(关于“何时”,“多长时间”)用户应用程序OS多任务/切换使得这个概念实际上毫无价值,至少对于“实时”使用是毫无价值的。总是有明显可感知的延迟,持续时间不可预知。 我阅读了关于用户模式驱动程序编程并下载了一些资源,但不知何故停止了在该项目上的工作,却没有得到真正的结果。

除此之外具体的项目,我甚至在写小的“虚拟”的机器,让整整表达变量,条件和数学,存储为标记的树和非常快处理一些经验。也许还有嵌入Lua,V8或类似的东西的选项。所以调用另一个(外部)程序的在这里不一定是问题,因为这是可以避免的。

剩下的是,该处理作为一个整体仍然受到(用户)应用所做的问题。所以我认为在这种情况下,没有办法绕过(用户模式)驱动程序

另外,我即使考虑(更多的“实时”)硬件 - 一个Raspi或类似 - 但随后的MIDI接口,可能是一个额外的挑战。

是否有任何可用作此类_Generic MIDI过滤器/处理器_的基础的硬件或软件解决方案(或项目)?除了可预测的时间行为,建立过滤器/规则时不需要(C)编译环境,因为这个“创意”步骤可能发生在我们的排练室(可用笔记本电脑),这当然不是“编程实验室”。基于文本的“程序”很好 - 长期来说,我可能会建立一个用于布线/生成规则的GUI。

+0

只要没有其他的东西正在运行,多任务应该不会引入明显的延迟。我猜想问题是您的应用程序中的计时器延迟或AWK解释器的启动时间。 –

+0

有趣但很长,非常广泛和非常题外话的SO问题。在Windows或Linux上,你应该不需要驱动程序,MIDI是一个UART串行协议.MIDI是一个相当简单的硬件接口,需要MIDI IN(你可能不需要)上的光隔离器,只需要MIDI OUT电阻。硬件接口的信号可以直接从TTL(5v)逻辑电平和31.25波特的UART驱动。许多微处理器使用3.3v逻辑,这不会严格遵守,但可能会起作用 - 这真是一个关于https://electronics.stackexchange.com/的问题。 – Clifford

+0

我不清楚从MIDI到文本的转换,然后回来。这可能是延迟的原因,如果整个事情都是在二进制MIDI消息级别的C中完成的,除非PC忙于其他活动,否则我会感到惊讶。 – Clifford

MIDI在Windows中处理得相当好。我不确定你遇到的原始问题的来源。毫无疑问,虽然有一些延迟。

您可以用微控制器的实时处理这个问题。好消息是,你甚至不需要构建硬件。现成的控制器可用于此。例如:http://www.midisolutions.com/prodevp.htm