Скрипт на python для отправки OSC в SuperCollider с помощью Mindwave от Neurosky и модуля NeuroPy

Я пытаюсь отправить несколько сообщений OSC в Supercollider, используя переменные (1-13) из 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.


person Alexandros S. Skentos    schedule 09.08.2016    source источник


Ответы (1)


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

person Dan Stowell    schedule 09.08.2016