4

我正在编写一个将 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 驱动程序,我的所有问题都会得到解决......

4

3 回答 3

3

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

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

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

于 2011-05-04T08:19:02.927 回答
1

如果您想将 OSC 发送到 MIDI,那么您最好在软件中创建一个 Virtual 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 
于 2014-02-12T18:22:22.837 回答
0

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

于 2013-10-25T12:14:51.873 回答