Настройка Mac OS X MIDI программно - PullRequest
4 голосов
/ 03 мая 2011

Я пишу программу, которая преобразует OSC в MIDI, позволяя приложениям с поддержкой OSC (например, touchOSC на моем iPhone) управлять приложениями с поддержкой 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 голосов
/ 04 мая 2011

Ваша догадка о записи непосредственно в список правил верна - вам, вероятно, не следует этого делать.Я не уверен на 100% в этом, но у меня есть ощущение, что plist отражает состояние MIDI-устройства, но изменение его не приведет к открытию или закрытию того MIDI-устройства, которое вам нужно.

Для фактического открытияMIDI-устройство, вы можете использовать что-то вроде pygame .Я использовал его для некоторых аудио проектов, и SDK очень прост и с ним легко работать.Поскольку python не имеет большой поддержки MIDI напрямую, это, вероятно, ваша лучшая ставка (если не писать сам модуль Python C, что было бы довольно болезненно).

Что касается IAC, то позор, что другиеОС не поставляются с такими виртуальными MIDI-устройствами.IAC очень полезен и хорош в том, что он делает.Поэтому, полагаясь на IAC для чего-то подобного, не будет кроссплатформенным, вы можете написать уровень абстракции для управления устройством обратной связи.Для пользователей Windows вы можете порекомендовать бесплатное петлевое MIDI-устройство для использования с вашим программным обеспечением.

1 голос
/ 12 февраля 2014

Если вы хотите отправить OSC в MIDI, то лучше всего создать виртуальный порт Midi в программном обеспечении, а не пытаться удаленно настроить IAC. Этот виртуальный порт будет отображаться в Ableton и т. Д., Поэтому вы сможете управлять им программно.

Вы можете сделать это с помощью библиотеки rtmidi-python (или более старой и немного другой pyrtmidi ) - обе основаны на кроссплатформенной rtmidi lib, которая обеспечивает простую отправку MIDI Control и нот:

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 голосов
/ 25 октября 2013

Сам PyGame использует PortMidi под капотом. Если вам не нужна вся библиотека PyGame, возможно, это вам пригодится.

...