一种现代高效的osc客户机/服务器实现

oscp的Python项目详细描述


紧密性

Coverage StatusBuild Status

python2/3中osc的现代实现。

什么是OSC。

opensoundcontrol是一个基于udp的网络协议,它是为快速 顾名思义,它是设计用来发送时间敏感信息的 作为MIDI的替代品,但也适用于其他情况。协议是 简单易用,osc地址看起来像httpurl,并接受各种基本的 类型,如string、float、int等,基本上可以认为它是 http post,开销更小。

您可以在OpenSoundControl.org上了解有关OSC的更多信息

目标

  • python2.7/3.6+兼容性(可以在python3侧放松更多 如果需要,但不支持2.7之前的内容)
  • 易于使用
  • 健壮(在消息格式错误的情况下返回有意义的错误, 总是在正确的信息上做正确的事情)
  • 关注点分离(消息解析与通信)
  • 同步和异步兼容性(线程、异步、三元组…)
  • 清晰易读的代码

功能
  • 序列化和分析OSC数据类型/消息/捆绑包
  • 一个基于线程的udp服务器,用于打开套接字并在其上的osc地址上绑定回调
  • 一个简单的客户

安装

pip install oscpy

用法

服务器(线程)

fromoscpy.serverimportOSCThreadServerfromtimeimportsleepdefcallback(values):print("got values: {}".format(values))osc=OSCThreadServer()sock=osc.listen(address='0.0.0.0',port=8000,default=True)osc.bind(b'/address',callback)sleep(1000)osc.stop()

或者可以使用decorator api。

服务器(线程)

fromoscpy.serverimportOSCThreadServerfromtimeimportsleeposc=OSCThreadServer()sock=osc.listen(address='0.0.0.0',port=8000,default=True)@osc.address(b'/address')defcallback(values):print("got values: {}".format(values))sleep(1000)osc.stop()

服务器也是客户机,从某种意义上说,它们可以发送消息并响应 来自其他服务器的消息

fromoscpy.serverimportOSCThreadServerfromtimeimportsleeposc_1=OSCThreadServer()osc_1.listen(default=True)@osc_1.address(b'/ping')defping(*values):print("ping called")ifTrueinvalues:cont.append(True)else:osc_1.answer(b'/pong')osc_2=OSCThreadServer()osc_2.listen(default=True)@osc_2.address(b'/pong')defpong(*values):print("pong called")osc_2.answer(b'/ping',[True])osc_2.send_message(b'/ping',[],*osc_1.getaddress())timeout=time()+1whilenotcont:iftime()>timeout:raiseOSError('timeout while waiting for success message.')

服务器(异步)(TOdo!)

fromoscpy.serverimportOSCThreadServerwithOSCAsyncServer(port=8000)asOSC:foraddress,valuesinOSC.listen():ifaddress==b'/example':print("got {} on /example".format(values))else:print("unknown address {}".format(address))

客户

fromoscpy.clientimportOSCClientosc=OSCClient(address,port)foriinrange(10):osc.send_message(b'/ping',[i])

Unicode编码

默认情况下,服务器和客户端采用字节(编码字符串),而不是Unicode 字符串,用于OSC地址以及OSC字符串。但是,您可以通过 encoding使字符串自动编码和解码的参数 它们,所以回调将得到unicode字符串(python2中的unicode,str in Python3)。

osc=OSCThreadServer(encoding='utf8')osc.listen(default=True)values=[]@osc.address(u'/encoded')defencoded(*val):forvinval:assertnotisinstance(v,bytes)values.append(val)send_message(u'/encoded',[u'hello world',u'ééééé ààààà'],*osc.getaddress(),encoding='utf8')

u为清楚起见,此处添加文字)。

cli

oscpy提供了一个“oscli”实用程序,以帮助调试:

  • oscli dump收听并转储消息
  • oscli send向服务器发送消息或捆绑包

有关详细信息,请参见oscli -h

待办事项

  • 对timetag的真正支持(目前只支持可选的 丢弃延迟的捆绑包,而不是在将来延迟那些带有时间标签的捆绑包)
  • 支持其他参数类型
  • 面向异步的服务器实现
  • 示例和文档

贡献

查看我们的contribution guide并随时改进OSCPY。

许可证

OSCPY是根据麻省理工学院的许可条款发布的。 请参阅LICENSE.txt文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java消除多个构造函数中的冗余   java如何准备和提供测试数据   java如何处理Selenium Chromedriver选择证书弹出确认?   java服务器在命名时中断。重新绑定   java如何从包含许多元素的对象中提取对象的单个元素   主方法上的java执行   用于输出棋盘的按钮的java GridLayout   java如何结合Web/移动用户身份验证   要打开以运行(windows+R)和执行命令的Java代码   java我在忘记密码的电子邮件发送过程中遇到以下错误err=javax。邮政AuthenticationFailedException这是我的代码   列出在使用泛型集合的用户定义类中实现的JAVA 8。排序()不起作用   java Apache POI写入时间大于24小时   java Hibernate通过另一个实体映射   使用Java在现有json文件中追加json对象   Spring批处理上的java停止处理   java为特定的mybatisspring映射器设置不同的执行器类型   java我想阅读html的内容,我需要用所需的文本对其进行更改