2011-05-03 103 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 
相關問題