Una gran cantidad de módulos OSC de Python, ¿cuál usar?
python-module (5)
Open Sound Control (OSC) es un protocolo para la comunicación entre computadoras, sintetizadores de sonido y otros dispositivos multimedia que está optimizado para la tecnología de redes moderna. Es particularmente común usar OSC con MAX / MSP, que de hecho es lo que estoy haciendo, usando OSC con Python para hablar con otro subsistema en MAX.
Hay un montón de módulos de Python que admiten OSC. Genial. Y todos afirman ser simples, útiles y perfectos. A riesgo de bordear un territorio subjetivo, ¿qué casos de uso sugiere su experiencia para los siguientes módulos?
- python-osc
- pyOSC
- SimpleOSC (aunque esto parece un módulo más antiguo)
Supongo que una implementación simple me serviría mejor, ya que solo estoy familiarizado con la OSC. Y estoy usando Python 2.7.
Esto no es exactamente lo que hizo la pregunta, pero creo que es algo que vale la pena mencionar aquí: una cosa molesta acerca de los diversos módulos OSC de Python es que la mayoría funciona con Python 2.xo con Python 3.x pero no con ambos , lo cual significa que es posible que deba cambiar el código base y volver a escribir parte de su aplicación en el futuro.
El único que encontré que apunta tanto a Python 2.xy 3.x es Pyliblo , que en realidad es una envoltura para la biblioteca C de Liblo . Liblo ha sido probado específicamente para trabajar con Pd y SuperCollider (ver nota al final de su página principal), que es lo que más me importaba al usar tales bibliotecas ... Un aspecto negativo de Liblo es que es un poco más difícil trabajar en MS Windows porque solo admite subprocesos POSIX (pthreads) pero no la API nativa de subprocesos win32, por lo que necesita una biblioteca de emulación como se explica en http://liblo.sourceforge.net/README-platforms.html . Pero también puedes compilarlo con subprocesos deshabilitados en Windows.
He estado usando pyOSC durante años ... y "Estaba allí" cuando migró de Python 2 a 3. Bueno ... si no recuerdo bien, le pregunté al mantenedor en ese momento (Artem Baguinski) a ¡hazlo!
Ahora, hay dos páginas que albergan pyOSC ... y, con respecto a su pregunta, una de las páginas (la más antigua) contiene la versión de Python2. Y el de Github (que también es viejo, y que no está más desarrollado), la versión Python3.
No estoy seguro de las versiones de pyOSC, porque OSC.py changelog no dice nada sobre la versión de Python. Tal vez no fue correctamente documentado.
pyOSC 0.3.5 (Python2): pyOSC
pyOSC 0.3.6 (Python3): https://github.com/ptone/pyosc
Como dijo ptr, es muy fácil de implementar. Yo uso para conectar Blender Game Engine con PureData.
He utilizado pyOSC con gran éxito en OSX. El código no está en desarrollo, pero es muy probable que se deba a su estabilidad y simplicidad. Intenté txosc brevemente y puede justificar pruebas adicionales.
Mi uso de pyosc es limitado pero funciona bien. p.ej.
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)
Para cualquier otra persona que se encuentre con esta pregunta de cada vez que busque una implementación de OSC de python y que necesite una implementación de OSC para Python 3, puedo confirmar que osc4py3 funciona bien y está bien documentado.
Los resultados de mi encuesta del 22 de enero de 2018:
pyOSC : no parece mantenerse y no pude encontrar una versión de Python3 que funcione, algunos enlaces que encontré a versiones que decían estar actualizadas para python3 estaban dañados.
aiosc : trabajó en las pruebas (y me pareció una implementación genial) pero por alguna razón falló con el error "Demasiados archivos abiertos" después de unos segundos en el ancho de banda que necesitaba.
osc4py3 : instalado con pip, funcionó bien y me dio cero problemas con alrededor de mil mensajes por segundo, siempre que me asegurara de llamar a osc_process () después de cada mensaje.
Puede haber otra versión de OSC que esté especialmente diseñada para py3k y que más gente esté usando, pero como el campo aún es un poco opaco, siento que este es probablemente el lugar más apropiado para compartir esto. Espero que le ahorre a alguien un poco de tiempo.
Solo quiero mencionar que recientemente comencé una nueva implementación, con el objetivo de limpiar el código y el soporte para python2.7 y python3 (solo probado 3.6, pero el código central no usa nada específico). Uno puede encontrarlo en https://pypi.org/project/oscpy/ y https://github.com/kivy/oscpy si está interesado, tuve cuidado de mantener el código limpio y documentado. Tiene licencia MIT.