Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/attwad/python-osc
Open Sound Control server and client in pure python
https://github.com/attwad/python-osc
osc python sound
Last synced: 17 days ago
JSON representation
Open Sound Control server and client in pure python
- Host: GitHub
- URL: https://github.com/attwad/python-osc
- Owner: attwad
- License: unlicense
- Created: 2013-07-10T11:44:16.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-08-17T19:02:31.000Z (3 months ago)
- Last Synced: 2024-10-10T07:28:08.196Z (about 1 month ago)
- Topics: osc, python, sound
- Language: Python
- Homepage:
- Size: 304 KB
- Stars: 515
- Watchers: 27
- Forks: 106
- Open Issues: 41
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
==========
python-osc
==========Open Sound Control server and client implementations in **pure python**.
.. image:: https://github.com/attwad/python-osc/actions/workflows/python-test.yml/badge.svg
:target: https://github.com/attwad/python-osc/actions/workflows/python-test.ymlCurrent status
==============This library was developed following the
`OpenSoundControl Specification 1.0 `_
and is currently in a stable state.Features
========* UDP blocking/threading/forking/asyncio server implementations
* UDP client
* int, int64, float, string, double, MIDI, timestamps, blob, nil OSC arguments
* simple OSC address<->callback matching system
* extensive unit test coverage
* basic client and server examplesDocumentation
=============Available at https://python-osc.readthedocs.io/.
Installation
============python-osc is a pure python library that has no external dependencies,
to install it just use pip (prefered):.. image:: https://img.shields.io/pypi/v/python-osc.svg
:target: https://pypi.python.org/pypi/python-osc.. code-block:: bash
$ pip install python-osc
Examples
========Simple client
-------------.. code-block:: python
"""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.
"""
import argparse
import random
import timefrom 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 in range(10):
client.send_message("/filter", random.random())
time.sleep(1)Simple server
-------------.. code-block:: python
"""Small example OSC server
This program listens to several addresses, and prints some information about
received packets.
"""
import argparse
import mathfrom pythonosc.dispatcher import Dispatcher
from pythonosc import osc_serverdef 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: 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.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()Building bundles
----------------.. code-block:: python
from pythonosc import osc_bundle_builder
from pythonosc import osc_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.License?
========
Unlicensed, do what you want with it. (http://unlicense.org)