CI เสร็จสิ้นโดย Github Checks ดูการคอมมิตปัจจุบันสำหรับสถานะบิวด์
การใช้งาน OSC ที่ทันสมัยสำหรับ python2/3
OpenSoundControl เป็นโปรโตคอลเครือข่ายที่ใช้ UDP ซึ่งออกแบบมาเพื่อการส่งข้อความที่มีความละเอียดอ่อนด้านเวลาอย่างรวดเร็ว ดังที่ชื่อแนะนำ โดยได้รับการออกแบบมาทดแทน MIDI แต่ใช้ได้กับสถานการณ์อื่นๆ ได้ดี โปรโตคอลนี้ใช้งานง่าย ที่อยู่ OSC มีลักษณะเหมือน http URL และยอมรับประเภทพื้นฐานต่างๆ เช่น string, float, int ฯลฯ โดยพื้นฐานแล้วคุณสามารถมองได้ว่ามันเป็น http POST โดยมีค่าใช้จ่ายน้อยกว่า
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ OSC ได้ที่ OpenSoundControl.org
pip install oscpy
เซิร์ฟเวอร์ (เธรด)
from oscpy . server import OSCThreadServer
from time import sleep
def callback ( * values ):
print ( "got values: {}" . format ( values ))
osc = OSCThreadServer () # See sources for all the arguments
# You can also use an *nix socket path here
sock = osc . listen ( address = '0.0.0.0' , port = 8000 , default = True )
osc . bind ( b'/address' , callback )
sleep ( 1000 )
osc . stop () # Stop the default socket
osc . stop_all () # Stop all sockets
# Here the server is still alive, one might call osc.listen() again
osc . terminate_server () # Request the handler thread to stop looping
osc . join_server () # Wait for the handler thread to finish pending tasks and exit
หรือคุณสามารถใช้ API ของมัณฑนากร
เซิร์ฟเวอร์ (เธรด)
from oscpy . server import OSCThreadServer
from time import sleep
osc = OSCThreadServer ()
sock = osc . listen ( address = '0.0.0.0' , port = 8000 , default = True )
@ osc . address ( b'/address' )
def callback ( * values ):
print ( "got values: {}" . format ( values ))
sleep ( 1000 )
osc . stop ()
เซิร์ฟเวอร์ยังเป็นไคลเอนต์ในแง่ที่สามารถส่งข้อความและตอบข้อความจากเซิร์ฟเวอร์อื่นได้
from oscpy . server import OSCThreadServer
from time import sleep
osc_1 = OSCThreadServer ()
osc_1 . listen ( default = True )
@ osc_1 . address ( b'/ping' )
def ping ( * values ):
print ( "ping called" )
if True in values :
cont . append ( True )
else :
osc_1 . answer ( b'/pong' )
osc_2 = OSCThreadServer ()
osc_2 . listen ( default = True )
@ osc_2 . address ( b'/pong' )
def pong ( * values ):
print ( "pong called" )
osc_2 . answer ( b'/ping' , [ True ])
osc_2 . send_message ( b'/ping' , [], * osc_1 . getaddress ())
timeout = time () + 1
while not cont :
if time () > timeout :
raise OSError ( 'timeout while waiting for success message.' )
เซิร์ฟเวอร์ (async) (TODO!)
from oscpy . server import OSCThreadServer
with OSCAsyncServer ( port = 8000 ) as OSC :
for address , values in OSC . listen ():
if address == b'/example' :
print ( "got {} on /example" . format ( values ))
else :
print ( "unknown address {}" . format ( address ))
ลูกค้า
from oscpy . client import OSCClient
address = "127.0.0.1"
port = 8000
osc = OSCClient ( address , port )
for i in range ( 10 ):
osc . send_message ( b'/ping' , [ i ])
ตามค่าเริ่มต้น เซิร์ฟเวอร์และไคลเอนต์จะใช้ไบต์ (สตริงที่เข้ารหัส) ไม่ใช่สตริงยูนิโค้ด สำหรับที่อยู่ osc เช่นเดียวกับสตริง osc อย่างไรก็ตาม คุณสามารถส่งพารามิเตอร์ encoding
เพื่อให้สตริงของคุณเข้ารหัสและถอดรหัสโดยอัตโนมัติได้ ดังนั้นการโทรกลับของคุณจะได้รับสตริง Unicode (unicode ใน python2, str ใน python3)
osc = OSCThreadServer ( encoding = 'utf8' )
osc . listen ( default = True )
values = []
@ osc . address ( u'/encoded' )
def encoded ( * val ):
for v in val :
assert not isinstance ( v , bytes )
values . append ( val )
send_message (
u'/encoded' ,
[ u'hello world' , u'ééééé ààààà' ],
* osc . getaddress (), encoding = 'utf8' )
( u
เพิ่มตัวอักษรที่นี่เพื่อความชัดเจน)
OSCPy จัดเตรียมยูทิลิตี้ "oscli" เพื่อช่วยในการดีบัก:
oscli dump
เพื่อฟังข้อความและดัมพ์oscli send
เพื่อส่งข้อความหรือบันเดิลไปยังเซิร์ฟเวอร์ ดู oscli -h
สำหรับข้อมูลเพิ่มเติม
None
ในการทำให้เป็นอนุกรมลองอ่านคู่มือการมีส่วนร่วมของเราและปรับปรุง OSCPy ได้ตามใจชอบ
OSCPy ได้รับการเผยแพร่ภายใต้เงื่อนไขของใบอนุญาต MIT โปรดดูไฟล์ LICENSE.txt