0

外部ハードウェアから自分のコンピューターに OSC データを受け入れて印刷できる、動作する OSC python スクリプトの作成/適応に成功しました。

現在、このデータを別のプログラムに送信しようとしています。スクリプトは、最初の UDP メッセージのみを送信する以外は機能しています。コンソールでは、osc データを受信したときにコードのさまざまな側面を出力するため、スクリプトが機能していることがわかります。

UDPレシーバーは、他のメッセージを外部プログラムに送信しているため、反対側で機能しています。

問題の特定に役立つコードの一部が含まれています。データを送信する最後の行ではなく、関数の残りの部分が再び呼び出されて機能するのは奇妙です...

別の関数を試して、osc ハンドラー関数の最後でその関数を呼び出しましたが、最初の UDP メッセージのみを送信するという同じ問題が残ります。

前もって感謝します!

ip = socket.gethostbyname(socket.gethostname()) #Gets IP of MacBook Pro

receive_address = ip, 4567 # MacBook Pro Adress, Outgoing Port
send_address = '192.168.#.##', 9112 # iPhone Adress, Incoming Port
 
# ------------------ UDP to send  IP/ Port Settings ----------------- #


UDP_IP = "127.0.0.1" # Local machine to send data internally
UDP_PORT = 1234 # Local UDP Port

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((UDP_IP, UDP_PORT))


# --------------------- OSC Server and client start -------------------------------- #
 
# Initialize the OSC server and the client.
s = OSC.OSCServer(receive_address)
c = OSC.OSCClient()
c.connect(send_address)
 
s.addDefaultHandlers()

def multixy1(add, tags, stuff, source): #osc handler
	
	print "Message received:"
	msg = OSC.OSCMessage()
	print msg
	msg.setAddress(addr)
	msg.append(stuff)
	c.send(msg)
	
        # Testing osc is working/updating with each message input #
        print "Raw OSC Mesagge = ", msg
	print "X Value: ", stuff[0]

	UDP_to_Send = str(msg)
	
        print "UDP Send message = ", UDP_Send
	print sock
	print datetime.now()
	
        tm = str(datetime.now())
	print "size = ", sys.getsizeof(tm), "bytes"
	
        sock.send(tm) # this line does not appear to be called again despite the rest of the function being called

s.addMsgHandler("/1/fader1",  multixy1)

# ----------- Starting OSC server ----------- #

print "\nStarting OSCServer."

st = threading.Thread( target = s.serve_forever )
st.start()

# Loop while threads are running.
try :
    while 1 :
	time.sleep(0.1)
	
except KeyboardInterrupt :
    print "\nClosing OSCServer."
    s.close()
    print "Waiting for Server-thread to finish"
    st.join()
    print "Done"

4

0 に答える 0