CI は Github Checks によって行われます。ビルド ステータスについては現在のコミットを参照してください。
Python2/3 用の OSC の最新の実装。
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.' )
サーバー (非同期) (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 文字列として、Unicode 文字列ではなくバイト (エンコードされた文字列) を受け取ります。ただし、 encoding
パラメータを渡すと、文字列が自動的にエンコードおよびデコードされるため、コールバックは Unicode 文字列 (python2 では unicode、python3 では str) を取得します。
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 ファイルを参照してください。