2016-08-09 12 views
1

Я пытаюсь отправить несколько сообщений OSC в Supercollider с использованием переменных (1-13) из neuroPy. Он отлично работает только с одной переменной. Как я могу использовать больше переменных.сценарий python для отправки OSC в SuperCollider с использованием Neusysys mindwave и модуля NeuroPy

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, вы можете отправить одно сообщение 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, чтобы увидеть больше примеров того, как вы можете создать свое сообщение.