通过编程配置 Mac OS X MIDI

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驱动程序,这样我的所有问题都将得到解决...

3个回答

3
你对直接写入plist的想法是正确的,但你可能不应该这样做。我不能百分之百确定,但我有一种感觉,即plist反映了MIDI设备的状态,但改变它不会像你需要的那样打开或关闭MIDI设备。
要实际打开MIDI设备,你可以使用类似pygame的东西。我已经在一些音频相关项目中使用过它,SDK非常简单易用。由于Python没有直接支持MIDI,因此这可能是你最好的选择(除了自己编写Python C模块,这将是相当痛苦的)。
至于IAC,其他操作系统没有像这样的虚拟MIDI设备真是太可惜了。IAC非常有用并且功能强大。因此,尽管依赖IAC进行这样的事情不具备跨平台性,但你可以编写一个抽象层来操作回送设备。对于Windows用户,你可以推荐使用免费的MIDI loopback设备来与你的软件一起使用。

谢谢Nik,这真的很有帮助。我已经在Python中使用pyPortMIDI进行MIDI输出,这是PyGame中使用的相同库。我曾希望能够神奇地配置一切,然后它就可以“自动工作”,但似乎需要更多的工作。 - jayp

1
如果您想将OSC发送到MIDI,最好在软件中创建一个虚拟MIDI端口,而不是尝试远程配置IAC。这个虚拟端口将会出现在Ableton等软件中,这样您就可以通过编程方式控制它。
您可以使用 rtmidi-python 库(或旧的、略微不同的 pyrtmidi),两者都基于跨平台 rtmidi lib,提供了简单的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 

0

PyGame本身在底层使用PortMidi。如果您不需要整个PyGame库,那么这可能对您有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接