纯python中的开放式声音控制服务器和客户端实现
python-osc的Python项目详细描述
在pure python中打开声音控制服务器和客户端实现(3.5+)。
当前状态
这个库是按照 http://opensoundcontrol.org/spec-1_0 目前处于稳定状态。
功能
- udp阻塞/线程/分叉/异步服务器实现
- udp客户端
- int、float、string、double、midi、timestamps、blob osc参数
- 简单的OSC地址<;->;回调匹配系统
- 广泛的单元测试覆盖率
- 基本的客户机和服务器示例
安装
python osc是一个纯python库,它没有外部依赖项, 要安装它,只需使用pip(首选):
$ pip install python-osc
或者来自开发版本的原始源:
$ python setup.py test
$ python setup.py install
示例
简单客户端
"""Small example OSC client This program sends 10 random values between 0.0 and 1.0 to the /filter address, waiting for 1 seconds between each value. """importargparseimportrandomimporttimefrompythonoscimportudp_clientif__name__=="__main__":parser=argparse.ArgumentParser()parser.add_argument("--ip",default="127.0.0.1",help="The ip of the OSC server")parser.add_argument("--port",type=int,default=5005,help="The port the OSC server is listening on")args=parser.parse_args()client=udp_client.SimpleUDPClient(args.ip,args.port)forxinrange(10):client.send_message("/filter",random.random())time.sleep(1)
简单服务器
"""Small example OSC server This program listens to several addresses, and prints some information about received packets. """importargparseimportmathfrompythonoscimportdispatcherfrompythonoscimportosc_serverdefprint_volume_handler(unused_addr,args,volume):print("[{0}] ~ {1}".format(args[0],volume))defprint_compute_handler(unused_addr,args,volume):try:print("[{0}] ~ {1}".format(args[0],args[1](volume)))exceptValueError:passif__name__=="__main__":parser=argparse.ArgumentParser()parser.add_argument("--ip",default="127.0.0.1",help="The ip to listen on")parser.add_argument("--port",type=int,default=5005,help="The port to listen on")args=parser.parse_args()dispatcher=dispatcher.Dispatcher()dispatcher.map("/filter",print)dispatcher.map("/volume",print_volume_handler,"Volume")dispatcher.map("/logvolume",print_compute_handler,"Log volume",math.log)server=osc_server.ThreadingOSCUDPServer((args.ip,args.port),dispatcher)print("Serving on {}".format(server.server_address))server.serve_forever()
构建捆绑包
frompythonoscimportosc_bundle_builderfrompythonoscimportosc_message_builderbundle=osc_bundle_builder.OscBundleBuilder(osc_bundle_builder.IMMEDIATELY)msg=osc_message_builder.OscMessageBuilder(address="/SYNC")msg.add_arg(4.0)# Add 4 messages in the bundle, each with more arguments.bundle.add_content(msg.build())msg.add_arg(2)bundle.add_content(msg.build())msg.add_arg("value")bundle.add_content(msg.build())msg.add_arg(b"\x01\x02\x03")bundle.add_content(msg.build())sub_bundle=bundle.build()# Now add the same bundle inside itself.bundle.add_content(sub_bundle)# The bundle has 5 elements in total now.bundle=bundle.build()# You can now send it via a client as described in other examples.
执照?
无证,随你怎么办。(http://unlicense.org)