Множество модулей 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, и что больше людей используют, но поскольку поле по-прежнему немного непрозрачно, я чувствовал, что это, вероятно, самое подходящее место, чтобы поделиться этим. Надеюсь, это немного сэкономит кому-то еще.