2011-05-03 86 views
4

我正在编写一个将OSC转换为MIDI的程序,允许启用OSC的应用程序(如我的iPhone上的touchOSC)控制MIDI启用的应用程序(Sibelius,Ableton Live等)。以编程方式配置Mac OS X MIDI

我使用Python创建OSC服务器并将其从OSC转换为MIDI。为了让MIDI进入有问题的应用程序,我将MIDI输出到Apple IAC驱动程序,然后将其作为相关程序的输入。

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

使用FileMon的,我观察到,音频MIDI Setup.app启用/禁用IAC驱动程序时修改此文件:

〜/首选项/ ByHost/com.apple.MIDI.0017f2cxxxxx.plist

编号0017f2cxxxxx是我的系统IOPlatformUUID。这是一个简单的XML属性列表,但我很谨慎地直接写入它。即使我这样做了,估计我需要哄骗midi服务器进程重新读取它。

最后,我越来越意识到使用IAC驱动程序是一个非常好的解决方案 - 一开始它只能在Mac上使用!理想情况下,我会编写一个环回MIDI驱动程序,我的所有问题都将得到解决......

回答

3

您对直接写入plist的直觉是正确的 - 您可能不应该这样做。我对此并不十分确定,但我有一种感觉,即plist反映了MIDI设备的状态,但改变它不会根据需要打开或关闭该MIDI设备。

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

至于IAC,其他操作系统没有像这样的虚拟MIDI设备,这是一个耻辱。 IAC非常有用,擅长它。所以,虽然依赖于IAC这样的东西不是跨平台的,但你可以编写一个抽象层来操纵回送设备。对于Windows用户,您可以推荐将free MIDI loopback device用于您的软件。

+0

感谢尼克,这真的很有帮助。我已经在Python中使用pyPortMIDI进行MIDI输出,这是PyGame中使用的相同库。我希望我能够神奇地配置一切,它会“正常工作”,但似乎并非没有更多的工作。 – jayp 2011-05-04 14:41:33

0

PyGame本身在底层使用PortMidi。如果你不需要所有的PyGame库,这可能对你有用。

1

如果你想发送OSC到MIDI,那么你最好用软件创建一个Virtual 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