2016-08-09 6 views
1

Supercolliderに複数のOSCメッセージを、neuroPyの変数(1〜13)を使用して送信しようとしています。 1つの変数でうまく動作します。より多くの変数をどのように活用できますか?NeuroskysのmindwaveとNeuroPyモジュールを使用してOSCをSuperColliderに送信するPythonスクリプト

from NeuroPy import NeuroPy 
import time 
import OSC 

port = 57120 
sc = OSC.OSCClient() 
sc.connect(('192.168.1.4', port)) #send locally to laptop 
object1 = NeuroPy("/dev/rfcomm0") 
zero = 0 
variable1 = object1.attention 
variable2 = object1.meditation 
variable3 = object1.rawValue 
variable4 = object1.delta 
variable5 = object1.theta 
variable6 = object1.lowAlpha 
variable7 = object1.highAlpha 
variable8 = object1.lowBeta 
variable9 = object1.highBeta 
variable10 = object1.lowGamma 
variable11 = object1.midGamma 
variable12 = object1.poorSignal 
variable13 = object1.blinkStrength 


time.sleep(5) 

object1.start() 

def sendOSC(name, val): 
    msg = OSC.OSCMessage() 
    msg.setAddress(name) 
    msg.append(val) 
    try: 
     sc.send(msg) 
    except: 
     pass 
    print msg #debug 



while True: 
    val = variable1 
    if val!=zero: 
     time.sleep(2) 
     sendOSC("/att", val) 

これはうまく動作し、期待どおりのSupercolliderでメッセージが表示されます。

変数を追加してメッセージを増やすにはどうすればよいですか?

私はそれがsetCallBackで何かであるはずだと考えました。

答えて

2

複数のOSCメッセージを送信する必要はなく、すべての値を含む1つのOSCメッセージを送信することができます。実際には、すべての更新された値が同期して到着するため、少ないネットワークトラフィックが必要になります。

あなたのコードは、現在、一つの値の罰金です

msg = OSC.OSCMessage() 
msg.setAddress("/att") 
msg.append(object1.attention) 
sc.send(msg) 

の同等を行います。あなたはほぼ同じであるとして、次の操作を行うことができ、複数の値の場合:

msg = OSC.OSCMessage() 
msg.setAddress("/neurovals") 
msg.append(object1.attention) 
msg.append(object1.meditation) 
msg.append(object1.rawValue) 
msg.append(object1.delta) 
# ... 
sc.send(msg) 

それはあなたの中に複数のデータとのOSCメッセージが表示されます、問題ないはずあなたはまた、

msg = OSC.OSCMessage() 
msg.setAddress("/neurovals") 
msg.extend([object1.attention, object1.meditation, object1.rawValue, object1.delta]) # plus more vals... 
sc.send(msg) 
として上記を書くことができます。

OSCMessageクラスのドキュメントを参照して、メッセージを構成する方法の例を参照してください。

関連する問題