以编程方式配置Mac OS X MIDI

时间:2011-05-03 16:48:46

标签: python macos audio midi coremidi

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

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

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

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

〜/偏好/ ByHost / com.apple.MIDI.0017f2cxxxxx.plist

编号0017f2cxxxxx是我的系统IOPlatformUUID。这是一个简单的XML属性列表,但我很担心直接写它。即使我这样做了,大概我也需要哄骗midi服务器进程以某种方式重新阅读它?

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

3 个答案:

答案 0 :(得分:3)

你直接写到plist的预感是正确的 - 你可能不应该这样做。我不是100%肯定这一点,但我感觉plist反映了MIDI设备的状态,但改变它不会打开或关闭MIDI设备。

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

至于IAC,很遗憾其他操作系统没有像这样的虚拟MIDI设备。 IAC非常有用并且擅长它的功能。因此,虽然依赖IAC这样的东西不会是跨平台的,但你可以编写一个抽象层来操作环回设备。对于Windows用户,您可以建议使用free MIDI loopback device与您的软件一起使用。

答案 1 :(得分: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 

答案 2 :(得分:0)

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