众多Python OSC模块 - 该用哪个?
开放声音控制(OSC)是一种用于计算机、声音合成器和其他多媒体设备之间通信的协议,它特别适合现代网络技术。OSC常常与MAX/MSP一起使用——实际上,我就是在用OSC和Python与MAX中的另一个子系统进行交流。
有很多Python模块支持OSC,这很好。而且它们都声称简单、有用、完美。不过,冒险进入主观领域,你的经验能给出以下模块的哪些使用场景呢?
- python-osc
- pyOSC
- SimpleOSC(不过这个模块看起来有点老旧)
我想一个简单的实现对我来说最合适,因为我对OSC的了解仅仅是皮毛。而且我使用的是Python 2.7。
6 个回答
这段内容虽然不是直接回答问题,但我觉得值得提一下:关于各种Python OSC模块,有一点让人烦恼的是,大部分模块要么只支持Python 2.x,要么只支持Python 3.x,而不能同时支持。这就意味着将来你可能需要更改代码,甚至重写部分应用程序。
我找到的唯一一个同时支持Python 2.x和3.x的模块是Pyliblo,它其实是一个C语言库Liblo的封装。Liblo经过专门测试,可以与Pd和SuperCollider配合使用(具体信息可以在它主页的底部找到),这也是我使用这些库时最关心的事情……不过,Liblo在MS Windows上使用起来有点麻烦,因为它只支持POSIX线程(pthreads),而不支持原生的win32线程API,所以你需要一个模拟库,具体可以参考http://liblo.sourceforge.net/README-platforms.html。不过,你也可以选择在Windows上编译时禁用线程功能。
对于那些每次寻找Python OSC实现时都会看到这个StackOverflow问题的人,如果你需要一个适用于Python 3的OSC实现,我可以确认osc4py3很好用,而且文档也很齐全。
这是我在2018年1月22日的调查结果:
pyOSC:似乎没有人维护了,我找不到一个能用的Python3版本,网上一些声称更新过的链接也都失效了。
aiosc:在测试中运行得不错(看起来实现得也很酷),但不知为何在我需要的带宽下,几秒钟后就出现了“打开文件过多”的错误。
osc4py3:通过pip安装,运行得很好,每秒能处理大约一千条消息,只要我确保在每条消息后调用osc_process()就行。
可能还有其他特别为Python 3设计的OSC版本,使用的人也更多,但由于这个领域的信息还不是很透明,我觉得在这里分享这些信息是最合适的。希望能帮到其他人节省一些时间。
我在OSX上使用pyOSC取得了很好的效果。这个代码虽然没有太多更新,但这可能是因为它很稳定、很简单。我简单试过一下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)