以编程方式配置 Mac OS X MIDI

Posted

技术标签:

【中文标题】以编程方式配置 Mac OS X MIDI【英文标题】:Configure Mac OS X MIDI programmatically 【发布时间】:2011-05-03 16:48:46 【问题描述】:

我正在编写一个将 OSC 转换为 MIDI 的程序,允许启用 OSC 的应用程序(如我 iPhone 上的 touchOSC)控制启用 MIDI 的应用程序(Sibelius、Ableton Live 等)。

我正在使用 Python 创建 OSC 服务器并将 OSC 转换为 MIDI。为了获得相关应用程序的 MIDI,我将 MIDI 输出到 Apple IAC 驱动程序,然后在相关程序中将其作为输入启用。

有人知道以编程方式配置 Mac MIDI 设备的方法吗?特别是,我需要启用默认禁用的 IAC 驱动程序。

使用 FileMon,我观察到 Audio Midi Setup.app 在启用/禁用 IAC 驱动程序时会修改此文件:

~/Preferences/ByHost/com.apple.MIDI.0017f2cxxxxx.plist

数字 0017f2cxxxxx 是我的系统 IOPlatformUUID。这是一个简单的 XML 属性列表,但我对直接写入它持谨慎态度。即使我这样做了,大概我也需要诱使 midi 服务器进程以某种方式重新读取它?

最后,我越来越意识到使用 IAC 驱动程序是一个非常糟糕的解决方案 - 首先它只适用于 Mac!理想情况下,我会编写一个环回 MIDI 驱动程序,我的所有问题都会得到解决......

【问题讨论】:

【参考方案1】:

您对直接写入 plist 的预感是正确的——您可能不应该这样做。我不是 100% 确定这一点,但我感觉 plist 反映了 MIDI 设备的状态,但更改它不会根据需要打开或关闭该 MIDI 设备。

要真正打开 MIDI 设备,您可以使用 pygame 之类的东西。我已经将它用于一些与音频相关的项目,并且 SDK 非常简单易用。由于 python 没有直接对 MIDI 提供很好的支持,这可能是你最好的选择(没有自己编写 python C 模块,这将是相当痛苦的)。

至于 IAC,遗憾的是其他操作系统没有配备这样的虚拟 MIDI 设备。 IAC 非常有用并且擅长它的工作。因此,虽然依靠 IAC 来完成这样的事情不会是跨平台的,但您可以编写一个抽象层来操作环回设备。对于 Windows 用户,您可以推荐 free MIDI loopback device 与您的软件一起使用。

【讨论】:

谢谢 Nik,这真的很有帮助。我已经在 Python 中使用 pyPortMIDI 进行 MIDI 输出,这与 PyGame 中使用的库相同。我曾希望我能够神奇地配置所有内容并且它会“正常工作”,但似乎并非没有更多工作。【参考方案2】:

如果您想将 OSC 发送到 MIDI,那么您最好在软件中创建一个虚拟 Midi 端口,而不是尝试远程配置 IAC。此虚拟端口将显示在 Ableton 等中,因此您可以让它以编程方式控制事物。

您可以使用 rtmidi-python 库(或更旧且略有不同的 pyrtmidi)来执行此操作 - 两者都基于跨平台的 rtmidi 库,它提供了直接发送 MIDI 控制和音符:

import rtmidi_python as rtmidi

vmidi_out = rtmidi.MidiOut()
vmidi_out.open_virtual_port('My Virtual MIDI Output Port')

vmidi_out.send_message([0x90, 48, 100]) # Note on
vmidi_out.send_message([176, 7, 100]) # Control Change - Volume 

【讨论】:

【参考方案3】:

PyGame 本身在后台使用PortMidi。如果您不需要所有 PyGame 库,也许这对您有用。

【讨论】:

以上是关于以编程方式配置 Mac OS X MIDI的主要内容,如果未能解决你的问题,请参考以下文章

Mac os x以编程方式获取域名

以编程方式在 Mac OS X 上创建 PPTP ***

在 10.6 (Snow Leopard) 之后以编程方式设置 Mac OS X 音量

在 Mac OS X 上以编程方式为 Matplotlib 选择正确的后端

在 Mac OS X 上以编程方式获取睡眠时间(和其他节能设置)

以编程方式设置 dock:name Java Mac OS X JVM 属性