Python-OSC :一个用于实现 OSC 协议的纯 Python 库,帮助开发者与音乐设备和控制应用进行交互

Python-OSC 是一个用于实现 Open Sound Control(OSC)协议的纯 Python 库。它使得开发者能够方便地与许多音乐设备和控制应用进行交互。本文将详细介绍 Python-OSC 的特性、安装方法及示例代码,帮助你快速上手。

Python-OSC 的核心特性

Python-OSC 提供了多种服务器和客户端实现,包括 UDP 和 TCP 的阻塞、线程、分叉及异步服务器。其主要特性包括:

  • • 多种服务器实现:支持 UDP 和 TCP 协议,适用于不同的应用场景。

  • • 协议格式支持:支持 OSC 1.0 和 1.1 协议格式的 TCP 客户端。

  • • 丰富的数据类型:支持多种 OSC 参数类型,包括整数、浮点数、字符串、MIDI、时间戳等。

  • • 简单的地址与回调匹配系统:用户可以轻松地将 OSC 地址与处理函数相匹配。

  • • 回应支持:服务器和客户端都可以从回调处理程序发送响应。

  • • 全面的单元测试覆盖:确保库的稳定性和可靠性。

安装 Python-OSC

Python-OSC 是一个纯 Python 库,没有外部依赖。可以通过以下命令简单安装:

$ pip install python-osc

简单客户端示例

下面是一个简单的 OSC 客户端示例,该程序向 /filter 地址发送 10 个随机值,每秒发送一次:

import argparse
import random
import time
from pythonosc import udp_client

if __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)

    for x inrange(10):
        client.send_message("/filter", random.random())
        time.sleep(1)

在这个示例中,客户端会连接到指定的 OSC 服务器并发送随机值。

简单服务器示例

下面是一个简单的 OSC 服务器示例,该程序监听多个地址,并打印接收到的数据:

import argparse
import math
from pythonosc.dispatcher importDispatcher
from pythonosc import osc_server

def print_volume_handler(unused_addr, args, volume):
    print("[{0}] ~ {1}".format(args[0], volume))

def print_compute_handler(unused_addr, args, volume):
    try:
        print("[{0}] ~ {1}".format(args[0], args[1](volume)))
    except ValueError:pass

if __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.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()

这个服务器将监听来自客户端的消息,并输出相应的值。

构建 OSC Bundles

Python-OSC 还支持构建 OSC Bundles,允许将多个消息组合在一起发送。以下是一个构建 Bundle 的示例:

from pythonosc import osc_bundle_builder
from pythonosc import osc_message_builder

bundle = osc_bundle_builder.OscBundleBuilder(osc_bundle_builder.IMMEDIATELY)
msg = osc_message_builder.OscMessageBuilder(address="/SYNC")
msg.add_arg(4.0)

# 添加多个消息到 Bundle
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"x01x02x03")
bundle.add_content(msg.build())

sub_bundle = bundle.build()
bundle.add_content(sub_bundle)

bundle = bundle.build()

# 通过客户端发送 Bundle
client.send(bundle)

这个示例展示了如何创建和发送一个包含多个消息的 OSC Bundle。

总结

Python-OSC 是一个强大且易于使用的库,适合任何想要使用 OSC 协议进行交互的开发者。无论是简单的客户端、服务器,还是更复杂的消息处理,它都能满足需求。通过本篇文章的介绍,希望你能快速上手并在项目中应用 Python-OSC。

项目地址:https://github.com/attwad/python-osc


原文始发于微信公众号(小白这样学Python):Python-OSC :一个用于实现 OSC 协议的纯 Python 库,帮助开发者与音乐设备和控制应用进行交互

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/308653.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!