以编程方式配置Mac OS X MIDI

2024-05-14 18:03:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

使用FileMon,我观察到音频Midi安装程序.app在启用/禁用IAC驱动程序时修改此文件:

~/Preferences/ByHost(按主机)/com.apple.MIDI网站0.0017f2cxxxxx.plist在

号码0017f2cxxxxx是我的系统IOPlatformUUID。这是一个简单的XML属性列表,但是我对直接写入它很谨慎。即使我这么做了,大概我也需要诱使midi服务器进程重新读取它?在

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


Tags: 程序服务器live应用程序编程驱动程序情况midi
3条回答

PyGame本身在引擎盖下使用PortMidi。如果你不需要所有的PyGame库,也许这对你很有用。在

如果你想发送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 

你认为直接给plist写信的预感是对的,你可能不应该这样做。我不能百分之百的肯定这一点,但我有一种感觉,plist反映了MIDI设备的状态,但改变它不会打开或关闭MIDI设备,因为你需要。在

要真正打开MIDI设备,您可以使用类似pygame的东西。我已经在一些音频相关的项目中使用过它,而且SDK非常简单,易于使用。由于python没有很好地直接支持MIDI,这可能是您最好的选择(除了自己编写pythoncmodule之外,这将是相当痛苦的)。在

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

相关问题 更多 >

    热门问题