Множество модулей OSC Python - какой из них использовать?
Open Sound Control (OSC) - это протокол для обмена данными между компьютерами, звуковыми синтезаторами и другими мультимедийными устройствами, оптимизированными для современных сетевых технологий. Особенно часто используется OSC с MAX/MSP - на самом деле это то, что я делаю, используя OSC с Python, чтобы поговорить с другой подсистемой в MAX.
Существует куча модулей python, которые поддерживают OSC. Отлично. И все они утверждают, что они простые, полезные и совершенные. Из-за того, что вы рискуете оказаться на субъективной территории, какие варианты использования вашего опыта предлагают для следующих модулей?
Я предполагаю, что простая реализация послужит мне самой лучшей, поскольку у меня есть только странное знакомство с OSC. И я использую Python 2.7.
Ответы
Ответ 1
Я использовал pyOSC с большим успехом на OSX. Код не очень развит, но это, скорее всего, связано с его стабильностью и простотой. Я кратко попробовал txosc, и это может потребовать дальнейшего тестирования.
Мое использование pyosc ограничено, но оно работает хорошо. например.
import OSC
c = OSC.OSCClient()
c.connect(('127.0.0.1', 57120)) # connect to SuperCollider
oscmsg = OSC.OSCMessage()
oscmsg.setAddress("/startup")
oscmsg.append('HELLO')
c.send(oscmsg)
Ответ 2
Это не совсем то, что задал вопрос, но я думаю, что это стоит упомянуть здесь: одна неприятная вещь о различных модулях OSC Python заключается в том, что большинство из них работают либо с Python 2.x, либо с Python 3.x, но не с оба, что означает, что вам, возможно, придется изменить базу кода и переписать часть своего приложения в будущем.
Единственное, что я обнаружил для целей Python 2.x и 3.x, Pyliblo, на самом деле является оберткой для C library Liblo. Liblo был специально протестирован для работы с Pd и SuperCollider (см. Примечание в конце его главной страницы), о чем я в основном заботился при использовании таких библиотек... Недостатком Liblo является то, что немного сложнее работать в MS Windows, потому что он поддерживает только потоки POSIX (pthreads), но не собственный API-интерфейс нитей win32, поэтому вам нужна библиотека эмуляции, как описано в http://liblo.sourceforge.net/README-platforms.html. Но вы также можете скомпилировать его с отключением потоков в Windows.
Ответ 3
Я использую pyOSC в течение многих лет... и "Я был там", когда он переносился с Python 2 на 3. Ну... если я не помню хорошо, я спросил у сопровождающего в тот момент (Артем Багинский), чтобы сделать это!
Теперь есть две страницы, на которых размещается pyOSC... и, по вашему вопросу, одна из страниц (самая старая) хост-версия Python2. И тот, что в Github (что он уже давно и не развит уже), версия Python3.
Я не уверен в версиях pyOSC, потому что OSC.py changelog ничего не говорит о версии Python. Возможно, это было неправильно учтено.
pyOSC 0.3.5 (Python2): https://trac.v2.nl/wiki/pyOSC
pyOSC 0.3.6 (Python3): https://github.com/ptone/pyosc
Как сказал ptr, его очень легко реализовать. Я использую для подключения Blender Game Engine с PureData.
Ответ 4
Для всех, кто сталкивается с этим вопросом stackoverflow каждый раз, когда они ищут реализацию OSC-кода python и кому нужна работающая реализация OSC для Python 3, я могу подтвердить, что osc4py3 работает хорошо и хорошо документирован.
Результаты моего опроса с 22 января 2018 года:
pyOSC: похоже, не поддерживается, и я не смог найти рабочую версию Python3, некоторые ссылки, которые я нашел для версий, которые утверждали, что были обновлены для python3, были сломаны.
aiosc: работал в тестировании (и выглядел как классная реализация), но по какой-то причине он потерпел неудачу с ошибкой "Слишком много открытых файлов" через несколько секунд при требуемой пропускной способности.
osc4py3: установлен с помощью пипса, работал хорошо и дал мне нулевые проблемы со скоростью около тысячи сообщений в секунду, если я обязательно позвонил osc_process() после каждого сообщения.
Там может быть другая версия OSC, которая особенно хорошо разработана для py3k, и что больше людей используют, но поскольку поле по-прежнему немного непрозрачно, я чувствовал, что это, вероятно, самое подходящее место, чтобы поделиться этим. Надеюсь, это немного сэкономит кому-то еще.