يتم تنفيذ CI بواسطة Github Checks، راجع الالتزام الحالي لمعرفة حالة البناء.
تطبيق حديث لـ OSC لـ python2/3.
OpenSoundControl هو بروتوكول شبكة يعتمد على UDP، وهو مصمم للإرسال السريع للرسائل الحساسة للوقت، وكما يوحي الاسم، فقد تم تصميمه كبديل لـ MIDI، ولكنه ينطبق جيدًا على المواقف الأخرى. البروتوكول سهل الاستخدام، وعناوين OSC تبدو مثل عناوين URL لـ http، وتقبل أنواعًا أساسية مختلفة، مثل السلسلة، و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
أو يمكنك استخدام واجهة برمجة تطبيقات الديكور.
الخادم (الموضوع)
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.' )
الخادم (غير متزامن) (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 ])
افتراضيًا، يأخذ الخادم والعميل وحدات البايت (سلاسل مشفرة)، وليس سلاسل Unicode، لعناوين 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.