【问题标题】:How to have midi commands executed in real time from a Linux program如何让 Linux 程序实时执行 midi 命令
【发布时间】:2015-04-18 14:24:34
【问题描述】:

在 Windows 中,我有 OpenMidi CloseMidiSendMidi 命令。 在OpenMidi 之后,我得到了一个句柄,然后我可以使用SendMidi 发送像90 52 64 这样的midi 消息,我会在默认的原声三角钢琴上听到一个音符。

如何在 Linux 上执行等效操作,在我的程序(例如游戏)选择时执行 midi 命令?这是实时执行的,即在给出命令的确切时间。

【问题讨论】:

  • 哪个库实现了SendMidi 命令?你在 Linux 中使用的是什么库?
  • SendMidi 命令在大多数版本的 Windows 上都可用。你为什么要问?关于 Linux 中的库:我的问题相当于“Linux 中的哪个库会提供类似的设施”?
  • 我的 Windows 没有它。这可能是由您的编程语言提供的,无论它是什么。无论如何,在 Linux 中使用什么取决于您在那里使用的编程语言。
  • 编程语言无关。我是所有武器的大师。我不在乎它是程序还是库。我想找到一些关于 midi 的实时功能,仅此而已。如果你真的必须知道,我从我自己的 Forth 9ciforth 运行 SendMidi 命令)。它在东芝的某些 dll 中使用 XP,并且可以从任何接口的语言调用 dll,如您所知
  • 大部分声卡没有硬件合成器,默认不安装软件合成器。阅读this。我个人在 Timidity++ 上取得了成功。通过运行aplaymidi some-midi-file 验证您的设置。然后使用答案中提到的库之一,或重新利用aplaymidi 源代码。

标签: linux real-time midi


【解决方案1】:

快速搜索我的发行版包列表中的字符串“midi”至少提供了两个可能的候选者:

你看过这些吗?

【讨论】:

  • 我想要一个 3 字节的 midi 数据包实时发送。我不想指定将来某个时间的回调以设置在缓冲区等中。因为这就是我在我的程序中所做的事情。所以 portmidi 出来了。
  • RtMidi 包提供了该功能。在编写辅助程序后,我可以通过套接字或包装器使用它。
【解决方案2】:

在 Linux 中,内核的声音驱动程序和库是 ALSA project 的一部分。

MIDI 将由 sequencer API 处理,这没有很好的文档记录。
(some example code in C)

在 Python 中,使用 alsa-python 包中的 alsaseq 模块。

在 C++ 中,您可以尝试使用RtMidi library

【讨论】:

    【解决方案3】:

    我看到的大部分答案都不在话下,因为它们需要指定播放音符的时间,而不是实时发送事件。 除了这里的答案中提到的 rtmid , 链接问题“从 C++ 发送 midi 消息”的批准答案也是这个问题的答案,

    【讨论】:

      猜你喜欢
      • 2013-07-20
      • 2012-04-26
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2011-07-06
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多