page contents

Python-OSC :一个用于实现 OSC 协议的纯 Python 库!

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

attachments-2025-11-AhTxGmO9691d1f49d0de3.pngPython-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"\x01\x02\x03")
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。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1543 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1543 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章