通过 64 位 Delphi 发送 MIDI 控制消息

Posted

技术标签:

【中文标题】通过 64 位 Delphi 发送 MIDI 控制消息【英文标题】:Sending MIDI control message via 64 bit Delphi 【发布时间】:2021-03-01 04:49:20 【问题描述】:

需要在 Delphi 中发送 91.17.00 之类的 midi 消息。 GitHub 上有一个包 midiio-master,它适用于 32 位的输入和输出。输入功能也适用于 64 位,但不适用于输出。尝试设置输出设备时会引发异常。有一个新的包,“NativeMidi”,它似乎有 64 位功能,但没有文档或示例,我不知道如何使用它。修复 midiio-master 或 NativeMidi 控件输出示例都会有很大帮助。

【问题讨论】:

抛出的异常究竟是什么?显示异常发生位置的源代码。编辑您的消息以添加信息。 欢迎来到互联网 - 它通过链接工作。请链接到“GitHub 上的 package midiio-master”和“一个新的包,'NativeMidi'”,因为不是每个读者都必须自己弄清楚,我们' re 也在查看完全相同的代码。 我希望您明白,除非您展示您遇到问题的代码,否则没有人可以帮助您解决问题。因此,请显示您用于发送 midi 消息的代码,包括变量声明。此外,按照其他人的要求,显示触发异常的代码并重复确切的错误消息。 【参考方案1】:

通过更改 midiio-master 包中的模块 Midiout.pas 解决了问题。

第 580 行说

for TestDeviceID := -1 to (MidiOutGetNumDevs - 1) do

需要改成

for TestDeviceID := 0 to (MidiOutGetNumDevs - 1) do

在 32 位环境中,-1 触发测试以查看是否存在任何 Midi 接口,但在 64 位环境中失败。

解压包后,为 64 位源创建一个子文件夹,并将所有 .pas files 复制到其中。相应地更改工具 > 选项 > 语言 > Delphi 选项 > 库中的库文件引用。这样你就可以拥有两个版本的Midiout.pas

【讨论】:

那么很有可能是beNative midiio。

以上是关于通过 64 位 Delphi 发送 MIDI 控制消息的主要内容,如果未能解决你的问题,请参考以下文章

JACK midi 事件在 64 位机器上丢失

如何使用 pyPortMidi 或 pygame 发送 midi 控制更改消息 (CC)?

无法在 Midi 控制器中添加多个电位器

C# / nAudio - 向控制器发送 MIDI 消息

如何在 unix 中将 midi 音符输出到 midi 乐器?

使用 QT 通过 USB 发送 midi 消息