外部ハードウェアから自分のコンピューターに 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"