Exemple #1
0
 def create_dispatcher(self):
     self.dispatcher = dispatcher.Dispatcher()
     for control in self.controls.items():
         self.dispatcher.map('/video/' + control[0], self.udp_update,
                             control[1])
Exemple #2
0
 def setupInputServer(self, context, envars):
     self.dispatcher = dispatcher.Dispatcher()   
Exemple #3
0
    def __init__(self):
        self.root = tk.Tk()
        self.root.title(APP_NAME)
        self.root.config(bg=COLOR_SCHEME['panel_bg'])
        hs = self.root.winfo_screenheight()
        self.root.geometry('1200x600+0+%d' % (hs / 2))
        #self.root.resizable(0, 0)

        #self.style = Style()
        #self.style.theme_use('clam')

        self.cl_ip = CLIENT_ADDR
        self.cl_port = CLIENT_PORT
        self.sv_ip = SERVER_ADDR
        self.sv_port = SERVER_PORT

        #self.client = udp_client.SimpleUDPClient(self.cl_ip, self.cl_port)
        self.updateClient()

        # for TouchOSC app...
        self.touchOSCdisp = dispatcher.Dispatcher()
        self.touchOSCdisp.map('/*', self.parseOSC)

        self.touchOSCServer = osc_server.BlockingOSCUDPServer(
            TOUCH_OSC_SERVER, self.touchOSCdisp)
        self.touchOSCClient = udp_client.SimpleUDPClient(*TOUCH_OSC_CLIENT)

        # setup managers...
        self.queue_manager = multiprocessing.Manager()
        self.request_queue = self.queue_manager.Queue()
        self.network_manager = NetworkManager(self.request_queue)

        self.network_manager.start()

        self.mainframe = tk.Frame(self.root, bg=COLOR_SCHEME['panel_bg'])
        #self.mainframe.pack_propagate(False)
        self.mainframe.pack(fill='both', expand=True)
        self.mainframe.columnconfigure(0, weight=1)
        #self.mainframe.rowconfigure(0, weight=1)

        # main control panel...
        self.maincontrols = tk.Frame(self.mainframe,
                                     bg=self.mainframe.cget('bg'))

        timeFont = font.Font(family='Courier', size=12, weight='bold')
        self.timeLabel = tk.Label(self.maincontrols,
                                  text='00:00',
                                  bg='#303030',
                                  fg='orange',
                                  width=10,
                                  relief='sunken',
                                  bd=2,
                                  font='Arial 16',
                                  padx=5,
                                  pady=5)

        self.BPM = tk.IntVar(self.maincontrols)
        self.bpmBox = tk.Spinbox(self.maincontrols,
                                 from_=20,
                                 to=240,
                                 textvariable=self.BPM,
                                 width=3,
                                 bg=self.maincontrols.cget('bg'),
                                 fg=COLOR_SCHEME['text_light'],
                                 buttonbackground=self.maincontrols.cget('bg'))

        self.panicButton = tk.Button(self.maincontrols,
                                     text='all off',
                                     command=self.panic,
                                     bg=self.maincontrols.cget('bg'),
                                     activebackground='orange',
                                     activeforeground='black',
                                     fg=COLOR_SCHEME['text_light'])
        # pack main controls...
        self.timeLabel.grid(row=0, column=4, rowspan=2, padx=5)
        tk.Label(self.maincontrols,
                 text='Tempo:',
                 fg=COLOR_SCHEME['text_light'],
                 bg=self.maincontrols.cget('bg')).grid(row=0,
                                                       column=5,
                                                       sticky='e')
        self.bpmBox.grid(row=0, column=6)
        self.panicButton.grid(row=1, column=5, columnspan=2, sticky='ew')

        # add clock...
        self.clockQueue = multiprocessing.Queue()
        mgr = multiprocessing.Manager()
        self.clockVar = mgr.dict()
        self.clock = Clock(self.client, self.clockVar, self.clockQueue)

        self.BPM.trace('w', self.BPMchange)
        self.BPM.set(80)

        # add instrument button and panels...

        #self.instrumentsBox = tk.Frame(self.mainframe, relief='sunken', bd=2, bg=COLOR_SCHEME['note_panel_bg'])
        self.instrumentsBox = VScrollFrame(
            self.mainframe,
            relief='sunken',
            bd=2,
        )

        self.ins_manager = InstrumentManager(self.instrumentsBox, self.client,
                                             self.request_queue,
                                             self.queue_manager, self.clockVar,
                                             self.touchOSCClient)
        #self.ins_manager.addInstrument()

        # add engine...
        #self.engine = Engine(self, self.ins_manager, self.BPM, touchOSCClient=self.touchOSCClient)
        self.engine = Engine(self, self.client, self.clockVar, self.clockQueue,
                             self.ins_manager)

        # add controls...
        self.controls = PlayerControls(self.maincontrols, self, self.engine)
        self.controls.grid(row=0, column=0, rowspan=2)

        # add status bar...
        self.statusBar = tk.Frame(self.mainframe,
                                  relief='sunken',
                                  bg=COLOR_SCHEME['dark_grey'],
                                  bd=2)
        self.statusLabel = tk.Label(self.statusBar,
                                    bg=self.statusBar.cget('bg'),
                                    fg=COLOR_SCHEME['text_light'],
                                    text='Connecting too: {}, Port:{}'.format(
                                        self.cl_ip, self.cl_port))
        self.statusLabel.bind('<Button-1>', self.editConnection)
        self.statusLabel.pack(side='right')

        # place everything...
        #self.maincontrols.pack(padx=5, pady=5)
        #self.instrumentsBox.pack(fill='both', expand=True, ipadx=4, ipady=4)
        #self.statusBar.pack(side='bottom', fill='x')
        self.mainframe.grid_rowconfigure(1, weight=1)
        self.maincontrols.grid(row=0, column=0)
        #self.instrumentsBox.grid(row=1, column=0, sticky='nsew')
        self.statusBar.grid(row=2, column=0, sticky='ew')

        # add OSC listeners...
        self.disp = dispatcher.Dispatcher()
        self.disp.map('/pingReply', self.pingReply, self.statusLabel)
        self.disp.map('/cc', self.ccRecieve)
        self.disp.map('/noteOn', self.noteOn)
        self.joystick_moved = False

        self.updateServer()
        self.listener = MessageListener(self.server)
        self.touchOSCListener = MessageListener(self.touchOSCServer)

        # start the loops...
        self.engine.daemon = True
        self.clock.start()
        self.engine.start()
        self.listener.start()
        self.touchOSCListener.start()
        self.checkConnection()
        self.updateGUI()

        self.root.mainloop()

        # tidy up on close...
        print('Closing threads...')
        self.ins_manager.send_message('/panic', 0)
        mgr.shutdown()
        self.engine.join(timeout=1)
        self.clock.join(timeout=1)
        self.listener.join(timeout=1)
        self.touchOSCListener.join(timeout=1)
        self.network_manager.terminate()
        self.network_manager.join(timeout=1)
Exemple #4
0
 def setUp(self):
   super().setUp()
   self.dispatcher = dispatcher.Dispatcher()
Exemple #5
0
    plot_manager.plot_time_series(time_series)


def callback_print_test_breath():
    global test_breath_cycles, mean_tbc
    plot_manager.plot_breath_test(test_breath_cycles, mean_tbc)


def from_main_thread_blocking():
    callback = main_thread_queue.get()  #blocks until an item is available
    callback()


main_thread_queue = queue.Queue()

server_dispatcher = dispatcher.Dispatcher()
server_dispatcher.map("/max/cycle_sample", collect_breath_sample)
server_dispatcher.map("/max/start_cycle", start_cycle)
server_dispatcher.map("/max/model_path", load_model)

if __name__ == "__main__":

    client = udp_client.SimpleUDPClient(server_ip, port_max_msp)

    # server for receiving OSC messages

    s = OSC_server(server_ip, server_port, server_dispatcher)
    s.start_server()

    print("Server is ready!")
    def __init__(self, incoming, outgoing,  sparseOutput=None, config={}, device_source='Muse',
                 software_source='muselsl', debug_outputs=True, verbose=False):

        self.incoming = incoming
        self.outgoing = outgoing
        self.sparseOutput = sparseOutput
        self.device_source = device_source
        self.software_source = software_source
        self.debug_outputs = debug_outputs
        self.verbose = verbose
        self.eeg_chunk_length = 12

        # 1. Initialize inlet
        if isinstance(self.incoming, str):  # LSL inlet
            print('Looking for the {} stream...'.format(incoming))
            self._stream = resolve_byprop('type', incoming, timeout=2)

            if len(self._stream) == 0:
                raise(RuntimeError('Can\'t find {} stream.'.format(incoming)))
            print('Aquiring data from the \'{}\' stream...'.format(incoming))

            self._inlet = StreamInlet(self._stream[0],
                                      max_chunklen=self.eeg_chunk_length)
            self._info_in = self._inlet.info()

        else:  # OSC port
            if USE_LIBLO:
                self._osc_server = ServerThread(incoming['port'])
                print('OSC server initialized at port {}.'.format(
                        incoming['port']))
            else:
                self._dispatcher = dispatcher.Dispatcher()
                print('python-osc dispatcher initialized.')

        # 2. Initialize outlets
        if not isinstance(self.outgoing, tuple):
            self.outgoing = [self.outgoing]
        self._output_threads = []
        for out in self.outgoing:

            if isinstance(out, str):  # LSL outlet
                raise NotImplementedError

            elif isinstance(out, dict):  # OSC port
                if USE_LIBLO:
                    self._output_threads.append(Address(out['address'],
                                                  out['port']))
                else:
                    raise NotImplementedError
#                    self._client = udp_client.SimpleUDPClient(
#                            outgoing['address'], outgoing['port'])
                print('OSC client initialized at {}:{}.'.format(
                            out['address'], out['port']))

        if (self.sparseOutput !=None):
            if not isinstance(self.sparseOutput, tuple):
                self.sparseOutput = [self.sparseOutput]
            self._sparseOutput_threads = []
            for out in self.sparseOutput:
                if isinstance(out, str):  # LSL outlet
                    raise NotImplementedError

                elif isinstance(out, dict):  # OSC port
                    if USE_LIBLO:
                        self._sparseOutput_threads.append(Address(out['address'],
                                                      out['port']))
                    else:
                        raise NotImplementedError
                    print('OSC sparse output client initialized at {}:{}.'.format(
                                out['address'], out['port']))


        # 3. Initialize internal buffers and variables
        self._init_processing(config)
Exemple #7
0
 def _get_dispatcher(self):
     d = dispatcher.Dispatcher()
     d.map("/debug", print)
     d.map("/muse/eeg", self._eeg_handler, "EEG")
     return d
Exemple #8
0
        sleep(msec / 1000.0)  #sleep for duration of note
        #stop current song if playing set to False by received "/abort" message
        if playing == False:
            break
    client.send_message("/finished", True)  #broadcasts osc msg when finished


def killPlay(unused_addr):  #sets playing flag to False when "/abort" received
    global playing
    playing = False
    print("Playing stopped")


try:
    #set up dispatcher to handle incoming OSC messages
    dispatcher = dispatcher.Dispatcher()  #initialise dispatcher
    #check incoming OSC messages and dispatch handlers for matching ones
    #handler for "/name" calls getData with name of ringtone as a parameter
    dispatcher.map("/name", getData, "name")  #get name of ringtone to play
    #handler for "/abort" calls killPlay
    dispatcher.map("/abort",
                   killPlay)  #this dispatcher is used to abort playing
    #set up server on localhost linked to dispatcher
    server = osc_server.ThreadingOSCUDPServer(('127.0.0.1', 8000), dispatcher)
    #print configuration data on terminal screen
    print("Serving on {}".format(server.server_address))
    print("Data broadcast to {} to port {}".format(broadcastAddress, 4559))
    #start serving
    server.serve_forever()

#allow clean ctrl-C exit
Exemple #9
0
def main():
    global hue_list, bridge, SRT_FILENAME, HUE_IP_ADDRESS, MAX_BRIGHTNESS
    global DMX_INTERVAL, INTERVAL, TRANSITION_TIME, HUE_IP_ADDRESS, DEBUG, VERBOSE
    global subs, srtFile
    global ipcon, tfIDs, dmx

    f1 = Figlet(font='standard')
    print(f1.renderText('LushRoom'))
    f2 = Figlet(font='standard')
    print(f2.renderText('OSC live record'))

    parser = argparse.ArgumentParser()
    parser.add_argument("--ip",
                        default="127.0.0.1",
                        help="OSC ip address to listen to")
    parser.add_argument("--port",
                        type=int,
                        default=8000,
                        help="OSC port to listen to")
    parser.add_argument("-s",
                        "--srt",
                        default=SRT_FILENAME,
                        help=".srt file name for lighting events")
    parser.add_argument("-b",
                        "--brightness",
                        default=MAX_BRIGHTNESS,
                        help="maximum brightness")
    parser.add_argument("-i",
                        "--interval",
                        default=INTERVAL,
                        help="sampling interval for Philips Hue events")
    parser.add_argument("-d",
                        "--dmx_interval",
                        default=DMX_INTERVAL,
                        help="sampling interval for DMX events")
    parser.add_argument("-t",
                        "--transition_time",
                        default=TRANSITION_TIME,
                        help="transition time between Philips Hue events")
    parser.add_argument("--hue",
                        default=HUE_IP_ADDRESS,
                        help="Philips Hue bridge IP address")

    args = parser.parse_args()

    print(args)

    MAX_BRIGHTNESS = int(args.brightness)
    SRT_FILENAME = args.srt
    INTERVAL = float(args.interval)
    DMX_INTERVAL = float(args.dmx_interval)
    TRANSITION_TIME = float(args.transition_time)
    HUE_IP_ADDRESS = args.hue
    # VERBOSE = args.verbose
    # DEBUG = args.debug

    if SRT_FILENAME != "":
        print("Start recording the %s subtitles track for light events." %
              SRT_FILENAME)
        srtFile = SubRipFile(path=SRT_FILENAME)

    if PLAY_HUE:
        bridge = Bridge(HUE_IP_ADDRESS)
        bridge.connect()
        bridge.get_api()
        lights = bridge.lights
        for l in lights:
            print(l.name)
        for l in lights:
            l.on = True
            l.brightness = MAX_BRIGHTNESS

        light_names = bridge.get_light_objects('name')
        print("Light names:", light_names)

        if PLAY_HUE:
            hue_list = hue_build_lookup_table(lights)
        # else:
        #     hue_list = [[0],['1'],[2],[3],[4],[5],[6],[7],[8],[9]]
        print(hue_list)

    if PLAY_DMX:

        ipcon.connect(HOST, PORT)

        # Register Enumerate Callback
        ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE, cb_enumerate)

        # Trigger Enumerate
        ipcon.enumerate()

        sleep(2)

        if DEBUG:
            print(tfIDs)

        dmxcount = 0
        for tf in tfIDs:
            # try:
            if True:
                # print(len(tf[0]))

                if len(
                        tf[0]
                ) <= 3:  # if the device UID is 3 characters it is a bricklet
                    if tf[1] in deviceIDs:
                        if VERBOSE:
                            print(tf[0], tf[1], getIdentifier(tf))
                    if tf[1] == 285:  # DMX Bricklet
                        if dmxcount == 0:
                            print(
                                "Registering %s as slave DMX device for capturing DMX frames"
                                % tf[0])
                            dmx = BrickletDMX(tf[0], ipcon)
                            dmx.set_dmx_mode(dmx.DMX_MODE_MASTER)
                            # channels = int((int(MAX_BRIGHTNESS)/255.0)*ones(512,)*255)
                            # dmx.write_frame([255,255])
                            sleep(1)
                            # channels = int((int(MAX_BRIGHTNESS)/255.0)*zeros(512,)*255)
                            # dmx.write_frame(channels)
                        dmxcount += 1

    disp = dispatcher.Dispatcher()
    # print(dir(dispatcher))

    for h in range(512):
        disp.map("/hue%s" % h, play_record_hue, "%s" % h)

    for h in range(512):
        disp.map("/dmx%s" % h, play_record_dmx, "%s" % h)

    server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), disp)
    print("Serving OSC on {}".format(server.server_address))
    signal.signal(signal.SIGINT, signal_handler)
    server.serve_forever()
Exemple #10
0
    def setup(self):
        self.dispatcher = dispatcher.Dispatcher()
        self.server = osc_server.ThreadingOSCUDPServer(('0.0.0.0', 8000),
                                                       self.dispatcher)

        self.setup_listeners()
Exemple #11
0
soundObjects = {}

# current sound data
currentSound = None
# handle to manage the sound player
soundPlayerHandle = None

# current video path
videoSource = None
# handle to manage the child process (the video player)
videoProcessHandle = None

# path to the video player to be invoked to play video files
VIDEO_PLAYER = "/bin/mpv"

oscDispatcher = osc_dispatcher.Dispatcher()
# ip to listen to
neoIP = "127.0.0.1"
port = 9999
oscServer = osc_server.ThreadingOSCUDPServer((neoIP, port), oscDispatcher)


def setup():
    global oscDispatcher
    global soundObjects
    global videoProcessHandle

    # map osc labels to methods
    oscDispatcher.map("/francais", setSource)
    oscDispatcher.map("/anglais", setSource)
    oscDispatcher.map("/medieval", changeMusic)
Exemple #12
0
 def __init__(self, port):
     self.dispatcher = dispatcher.Dispatcher()
     self.server = osc_server.ThreadingOSCUDPServer(("0.0.0.0", port),
                                                    self.dispatcher)
Exemple #13
0
def createServer(port):
    disp = dispatcher.Dispatcher()
    print("Starting server on: {0}:{1}".format(socket.gethostbyname(socket.gethostname()),port))
    disp.map( "/quit", onOSC_quit )
    server=OSCServer(port,disp)
    return server
Exemple #14
0
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-send-ip", default="127.0.0.1", help="The IP to send OSC to")
    parser.add_argument("-send-port", type=int, default=57120, help="The port to send OSC to")
    parser.add_argument("-rcv-ip", default="127.0.0.1", help="The OSC IP to listen to")
    parser.add_argument("-rcv-port", type=int, default=9191, help="The OSC port to listen to")
    parser.add_argument("-ws-port", type=int, default=8080, help="The websockets port listening for connection from a browser")
    parser.add_argument("-origin", default="https://anatomiesofintelligence.github.io", help="Allowed client URL")
    parser.add_argument("-echo", type=bool, default=False, help="Enable server echo")
    clargs = parser.parse_args()
    WSHandler.server_out = (clargs.send_ip, clargs.send_port)
    WSHandler.server_in = (clargs.rcv_ip, clargs.rcv_port)
    WSHandler.allowed_origins.append(clargs.origin)
    WSHandler.echo = clargs.echo

    app = make_app()
    app.listen(clargs.ws_port)
    print("Waiting for websockets connection on port {} .... ".format(clargs.ws_port))

    WSHandler.osc_client = udp_client.SimpleUDPClient(WSHandler.server_out[0], WSHandler.server_out[1])
    print('Sending UDP/OSC messages to {}: {} ...'.format(WSHandler.server_out[0], WSHandler.server_out[1]))

    WSHandler.osc_dispatcher = dispatcher.Dispatcher()
    WSHandler.osc_dispatcher.set_default_handler(WSHandler.osc_message)
    WSHandler.osc_serv = osc_server.AsyncIOOSCUDPServer(WSHandler.server_in, WSHandler.osc_dispatcher, asyncio.get_event_loop())
    WSHandler.osc_serv.serve()
    print("Listening for OSC messages on {}: {} ...".format(WSHandler.server_in[0], WSHandler.server_in[1]))

    tornado.ioloop.IOLoop.instance().start()
Exemple #15
0
            print("\t+ abort code running")
            if thread is not None:
                thread.kill()
                thread.join()
                if not thread.isAlive():
                    print('thread killed')
            else:
                print("no thread to kill")
            # Clean message buffer
            message = ""

    except Exception as e:
        print('Error, Msg: %s, %s' % (e, traceback.format_exc()))


# Set up address and port.
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1", help="The ip to listen on")
parser.add_argument("--port",
                    type=int,
                    default=5001,
                    help="The port to listen on")
args = parser.parse_args()

dispatch = dispatcher.Dispatcher()
dispatch.map(address, callback)

server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatch)
print("Serving on {}".format(server.server_address))
server.serve_forever()
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip",
                        default="127.0.0.1",
                        help="The ip to listen on")
    parser.add_argument("--port",
                        type=int,
                        default=1000,  # make sure you change the port every time you wanna run the code
                        # for example next one would be 5050 :)

                        help="The port to listen on")
    parser.add_argument("--serial",
                        default="",
                        help="Arduino serial port")
    args = parser.parse_args()

    dispatcher.Dispatcher()
    dispatcher.Dispatcher().map("/debug", print)
    dispatcher.Dispatcher().map("/muse/notch_filtered_eeg", eeg_handler, "EEG")
    dispatcher.Dispatcher().map("/muse/elements/jaw_clench", jawClench, "EEG")
    #########################################################################   dispatcher.map("/muse/elements/blink", blink, "EEG")

    server = osc_server.ThreadingOSCUDPServer(
        (args.ip, args.port), dispatcher)
    print("Serving on {}".format(server.server_address))
    server.serve_forever()
    #p1 = Process(target=Drone)
    #p2 = Process(target=Muse)
    #p3 = Process(target=Test)

#    p1.start()
#    p2.start()
Exemple #17
0
 def __init__(self):
     self.dispatcher = dispatcher.Dispatcher()
     self.server = osc_server.ThreadingOSCUDPServer(ip, port), dispatcher)
    def __init__(self):
        r_times = []
        # note lookup
        # self.lib = seq.Libraries("squiggles")
        # sequencer to use # note, no support for multiple sequencers yet
        #self.seq = seq.Sequencer(self.lib)
        #self.seq.mutate(1.0)

        self.robots = []

        self.mutation_probability = 0.04

        self.bpm_activation_level = 0.0
        self.leakiness = 0.99
        self.bpm = 50
        self.bpm_max = 200
        self.bpm_min = 50

        self.density_r = 0.0
        self.density_l = 0.0

        parser = argparse.ArgumentParser()
        robotTestIP = "192.168.43.116"
        robotTestIP = "127.0.0.1"
        robotTestIP = "192.168.43.135"
        parser.add_argument("--ip",
                            default=robotTestIP,
                            help="The ip to listen on")
        parser.add_argument("--port",
                            type=int,
                            default=9000,
                            help="The port to listen on")

        broadcastIp = "255.255.255.255"
        parser.add_argument("--bcip",
                            default=broadcastIp,
                            help="The ip to broadcast on")
        parser.add_argument("--bcport", type=int, default=9001)
        args = parser.parse_args()

        self.client = udp_client.SimpleUDPClient(args.bcip, args.bcport, True)

        self.counter = 0.0
        dispatcher = DPatcher.Dispatcher()
        #dispatcher.map("/beat", beat_handler, "beat")
        dispatcher.map("/beat", self.broadcast, "rhythm")
        dispatcher.map("/bpm", self.setbpm, "bpm")
        dispatcher.map("/emg", self.broadcastemg, "emg")

        self.emg_signal_l = []  # array of 8 values
        self.emg_signal_r = []
        self.emg_right_buffer = []
        self.emg_left_buffer = []

        self.acc_l = 0.0
        self.acc_r = 0.0
        self.acc_left_buffer = []
        self.acc_right_buffer = []

        self.acc_l_max = 0.0
        self.acc_r_max = 0.0

        #dispatcher.map("/volume", print_volume_handler, "Volume")
        #dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)

        self.server = osc_server.ThreadingOSCUDPServer((args.ip, args.port),
                                                       dispatcher)
        print("Serving on {}".format(self.server.server_address))
        self.server.serve_forever()

        c_parser = argparse.ArgumentParser()
        c_parser.add_argument("--ip",
                              default="192.168.43.135",
                              help="The ip of the OSC server")
        c_parser.add_argument("--port",
                              type=int,
                              default=9001,
                              help="The port the OSC server is listening on")
        c_args = parser.parse_args()
        self.client = udp_client.SimpleUDPClient(c_args.ip, c_args.port)
Exemple #19
0
    def __init__(self):
        self.name = 'eos'
        super().__init__()

        self.client = udp_client.SimpleUDPClient(
            self.config['console']['ip'],
            int(self.config['console']['rx-port']))

        self.data = {'group': {}, 'preset': {}}

        self.set_eos_user(int(self.config['console']['user']))

        def data_reply_handler(address, *args):
            """Deals with groups and presets messages.
            These can include counts, data dumps, and empty returns 
            indicating the group or preset has been deleted.

            /eos/out/get/group/count=3
            /eos/out/get/group/1/list/0/3=74738347 3829383 LABEL
            """
            def delete_num_from_data(eos_type, num):
                """Delete a given Eos item from the internal data dict."""
                for k, v in self.data[eos_type].items():
                    if v == num:
                        del self.data[eos_type][k]
                        break

            address = address.split('/')
            eos_type = address[4]

            # Empty arguments and an address length of 6 indicates that the
            # request address has been returned empty, so we can assume it
            # has been deleted on the console and therefore remove it from
            # our internal dict.

            if len(address) == 6 and not args:
                num = address[5]
                delete_num_from_data(eos_type, num)

            # Keyword 5 being count indicates we are receiving the count
            # number for a data type in the arguments. We then request all
            # data in the list by sending OSC requests for every index.

            elif address[5] == 'count':
                self.log('Found {0} {1}'.format(args[0], eos_type))
                for i in range(0, args[0]):
                    msg = '/eos/get/{0}/index/{1}'.format(eos_type, str(i))
                    self.send_osc_message(msg, 0)

            # Keyword 6 being list indicates we have received an information
            # dump in the arguments, in this case containing the label.

            elif address[6] == 'list':
                num = address[5]
                label = args[2].upper()
                # We don't know whether this is a new group/preset or a
                # change of name of an existing one, so we need to check if
                # there is already a group/preset with this number in the
                # dictionary, and if there is, delete it and add this one.
                if num in self.data[eos_type].values():
                    delete_num_from_data(eos_type, num)
                self.data[eos_type][label] = num

        def subscription_handler(address, *args):
            """Deals with all Eos automatic notifications."""
            address = address.split('/')
            # All currently supported notifications have their Eos type
            # in keyword 4, so we can just dump everything else.
            eos_type = address[4]
            if eos_type in self.data.keys():
                num = args[1]
                self.send_osc_message(
                    '/eos/get/{0}/{1}'.format(eos_type, str(num)), 0)

        router = dispatcher.Dispatcher()
        router.map('/eos/out/get/group/*', data_reply_handler)
        router.map('/eos/out/get/preset/*', data_reply_handler)
        router.map('/eos/out/notify/*', subscription_handler)

        # Listen for OSC packets in a new thread
        server = osc_server.ThreadingOSCUDPServer(
            (self.config['server']['listen-ip'],
             int(self.config['console']['tx-port'])), router)
        server_thread = threading.Thread(target=server.serve_forever)
        try:
            server_thread.start()
        except (KeyboardInterrupt, SystemExit):
            server.shutdown()

        # Subscribe to Eos updates so we can update the group and preset lists
        # automatically
        self.send_osc_message('/eos/subscribe', 1)

        self.generate_label_dict()
Exemple #20
0
	def __init__(self, ip, port):
		self.dispatcher = dispatcher.Dispatcher()
		self.dispatcher.map("/clip", self.print_clip_handler, "")
		self.server = osc_server.ThreadingOSCUDPServer((ip, port), self.dispatcher)
Exemple #21
0
    import os
    ip_address = os.popen(
        'ip addr show wlp1s0 | grep "\<inet\>" | awk \'{ print $2 }\' | awk -F "/" \'{ print $1 }\''
    ).read().strip()
if "win" in platform:
    try:
        import netifaces
    except:
        print(
            "netifaces module missing - try to install it using pip3 install netifaces"
        )
    netifaces.ifaddresses(netifaces.gateways()['default'][netifaces.AF_INET]
                          [1])[netifaces.AF_INET][0]['addr']
port = 9000  ## Choose any


def on_message_received(*args):  ## Our callback
    print(args)  ## In this case only printing the arguments


dispatcher = dispatcher.Dispatcher(
)  ## Create a dispatcher - you can create more than one for different address patterns
dispatcher.map(osc_address_pattern, on_message_received)
server = osc_server.ThreadingOSCUDPServer(
    (ip_address, port),
    dispatcher)  ## Create and start an OSC server with the attached dispatcher
print("Server listening on %s:%d for address pattern %s" %
      (ip_address, port, osc_address_pattern))
print("Start an OSC device or your phone OSC stream.")
server.serve_forever()
Exemple #22
0
 def init_server(self, handle):
     self.handler = dispatcher.Dispatcher()
     self.handler.map("/machine1_server", handle)
     self.server = osc_server.ThreadingOSCUDPServer((self.host, self.port),
                                                    self.handler)
Exemple #23
0
 def __init__(self, *args, **kw):
     super(OSCServer, self).__init__(*args, **kw)
     self.dispatcher = dispatcher.Dispatcher()
Exemple #24
0
 def __init__(self, ip, port):
     self.dispatcher = dispatcher.Dispatcher()
     self.dispatcher.map("/reply", self.reply_handler, "")
     self.server = osc_server.ThreadingOSCUDPServer((ip, port),
                                                    self.dispatcher)
Exemple #25
0
def main(argv):
    args = process_arguments(argv)
    # Set the NGIMU to send to this machine's IP address
    client = udp_client.SimpleUDPClient(args.ip, args.port)
    client.send_message('/wifi/send/ip', get_address())
    client.send_message('/wifi/send/port', args.receive_port)

    #CSV file setup
    global flag, outfile, writer, prevTime, totalTimeBtwn, timeBtwnCnt
    totalTimeBtwn = 0  #Sums up the time between each message being recorded
    timeBtwnCnt = 0  #Counts how many times a message has been recorded
    outfile = open('imuData' + csvNumber + '.csv',
                   'w')  #CSV for storing data recieved from the imu
    writer = csv.writer(outfile)
    flag = False  #Flag for a button press on the imu, used to start and stop recording data

    def sensorsHandler(t, add, gx, gy, gz, ax, ay, az, mx, my, mz, b):
        global flag, prevTime, totalTimeBtwn, timeBtwnCnt
        if (flag):
            #Used to calculate average frequency of messages being received
            if (timeBtwnCnt == 0):
                prevTime = t
                timeBtwnCnt += 1
            else:
                timeBtwn = t - prevTime
                totalTimeBtwn += timeBtwn
                timeBtwnCnt += 1
                prevTime = t
            #Record data to CSV
            writer.writerow([t, math.sqrt(ax**2 + ay**2 + az**2)])

    def setFLag(add, t):
        global flag
        flag = not flag
        print('Flag', flag)

    dispatch = dispatcher.Dispatcher()
    dispatch.map('/sensors', sensorsHandler)
    dispatch.map('/button', setFLag)

    # Set up receiver
    receive_address = get_address(), args.receive_port
    server = osc_server.ThreadingOSCUDPServer(receive_address, dispatch)
    print("Serving on {}".format(server.server_address))
    print("\nUse ctrl-C to quit.")
    print("\nTap button on NGIMU to begin data logging")

    # Start OSCServer
    server_thread = threading.Thread(target=server.serve_forever)
    prevTime = time.time()
    server_thread.start()

    # Loop while threads are running
    try:
        while 1:
            time.sleep(1)

    except KeyboardInterrupt:
        f = open('imuFreq' + csvNumber + '.csv', 'w')
        w = csv.writer(f)
        w.writerow([totalTimeBtwn / timeBtwnCnt])
        server.shutdown()
        server_thread.join()
        return 0
Exemple #26
0
def Muse():
    print('hello')

    # Array to store OSC data for further processing
    TempCH1 = []
    TempCH2 = []
    TempCH3 = []
    TempCH4 = []

    # Global Variable
    is_jaw_clench = False

    def counter(x):
        counter.calls += 1
        return x + 1

    def LookLeft():
        upward_spike_ch3 = any(
            a > 880 for a in TempCH3[(len(TempCH3) - 5):(len(TempCH3) - 1)])

        downward_spike_ch2 = any(
            b < 830 for b in TempCH2[(len(TempCH2) - 5):(len(TempCH2) - 1)])

        within_range_ch1 = any(
            (740 > c or c > 920)
            for c in TempCH1[(len(TempCH1) - 30):(len(TempCH1) - 3)])

        if downward_spike_ch2 and upward_spike_ch3 and not within_range_ch1:

            upward_spike_ch2 = any(d > 870
                                   for d in TempCH2[(len(TempCH2) -
                                                     30):(len(TempCH2) - 3)])

            downward_spike_ch3 = any(e < 820
                                     for e in TempCH3[(len(TempCH3) -
                                                       30):(len(TempCH3) - 3)])

            downward_spike_ch4 = any(f < 830
                                     for f in TempCH4[(len(TempCH4) -
                                                       30):(len(TempCH3) - 3)])

            if downward_spike_ch3 and upward_spike_ch2 and downward_spike_ch4:
                print("look Left")
                print("_____")
                return True

        return False

    def LookRight():
        downward_spike_ch3 = any(
            a < 810 for a in TempCH3[(len(TempCH3) - 5):(len(TempCH3) - 1)])

        downward_spike_ch4 = any(
            b < 810 for b in TempCH4[(len(TempCH4) - 5):(len(TempCH4) - 1)])

        within_range_ch1 = any(
            (780 > c or c > 880)
            for c in TempCH1[(len(TempCH1) - 30):(len(TempCH1) - 3)])

        if downward_spike_ch3 and downward_spike_ch4 and within_range_ch1:

            upward_spike_ch3 = any(d > 870
                                   for d in TempCH3[(len(TempCH3) -
                                                     30):(len(TempCH3) - 3)])

            downward_spike_ch2 = any(
                (740 < e < 830)
                for e in TempCH2[(len(TempCH2) - 30):(len(TempCH2) - 3)])

            if upward_spike_ch3 and downward_spike_ch2:
                print("look Right")
                return True
        return False

    """
    def blink(unused_addr, args, ch5):
        if ch5 > 0.2:

            print("Blinked rigorously")
            return True
        return False
    """

    def jawClench(unused_addr, args, ch6):
        global is_jaw_clench
        if ch6 > 0.2:
            print("clench")
            is_jaw_clench = True
            return True
        is_jaw_clench = False
        return False

    # the eeg_handler function imports the OSC values with a frequence of
    # 256 readings per 1 second (256/1sec = every 3.90625 milliseconds)

    def eeg_handler(unused_addr, args, ch1, ch2, ch3, ch4):
        counter.calls += 1  # calling the counter function

        if counter.calls > 10:
            # print("EEG (uV) per channel: ", ch1, ch2, ch3, ch4)
            # print("counter works!!", counter.calls)
            TempCH1.append(ch1)
            TempCH2.append(ch2)
            TempCH3.append(ch3)
            TempCH4.append(ch4)

            LookLeft()
            LookRight()

            counter.calls = 0  # resetting the counter so that it counts back to 10 every time

    counter.calls = 0

    parser = argparse.ArgumentParser()
    parser.add_argument("--ip",
                        default="127.0.0.1",
                        help="The ip to listen on")
    parser.add_argument(
        "--port",
        type=int,
        default=
        1000,  # make sure you change the port every time you wanna run the code
        # for example next one would be 5050 :)
        help="The port to listen on")
    parser.add_argument("--serial", default="", help="Arduino serial port")
    args = parser.parse_args()

    dispatcher.Dispatcher()
    dispatcher.Dispatcher().map("/debug", print)
    dispatcher.Dispatcher().map("/muse/notch_filtered_eeg", eeg_handler, "EEG")
    dispatcher.Dispatcher().map("/muse/elements/jaw_clench", jawClench, "EEG")
    #########################################################################   dispatcher.map("/muse/elements/blink", blink, "EEG")

    server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatcher)
    print("Serving on {}".format(server.server_address))
    server.serve_forever()
Exemple #27
0
def interaction_loop():
    """Interaction loop for the box, reads serial,
    makes predictions, outputs servo and sound."""
    userloc = np.random.rand()  # Fake data
    if userloc is not None:
        if args.verbose:
            print("Input:", userloc)
        osc_predictor.send_message(INTERFACE_MESSAGE_ADDRESS, userloc)
        osc_synth.send_message(INTERFACE_MESSAGE_ADDRESS, userloc)


# Set up OSC client and server
osc_predictor = udp_client.SimpleUDPClient(args.predictorip,
                                           args.predictorport)
osc_synth = udp_client.SimpleUDPClient(args.synthip, args.synthport)
disp = dispatcher.Dispatcher()
disp.map(PREDICTION_MESSAGE_ADDRESS, handle_prediction_message)
server = osc_server.ThreadingOSCUDPServer((args.serverip, args.serverport),
                                          disp)
server_thread = Thread(target=server.serve_forever,
                       name="server_thread",
                       daemon=True)

print("Interface server started.")
print("Serving on {}".format(server.server_address))

thread_running = False

print("starting up.")
if args.verbose:
    print("Verbose mode on.")
Exemple #28
0
    def start(self, clients):
        """
        Start OSC server to receive messages for all mapped functions regarding the provided
        clients. In the current implementation running the OSC server blocks further application
        execution, , keeping the application alive until the server is released.

        Parameters
        ----------
        clients : list of SubProcess
            clients that receive a function mapping (see implementation for individual functions)
            so they will be remote controllable
        """
        def add_mapping(command, function_name, is_reversible=True):
            """
            Add mapping from an OSC target to a function. The function will be invoked with all
            additionally provided parameters as soon as the matching OSC command is received.

            Parameters
            ----------
            command : str
                OSC target command which will be used in combination with the client name to invoke
                the mapped function
            function_name : str
                name of the clients function that will be invoked later
            is_reversible : bool, optional
                if OSC target will be mapped twice, so the order of the command and the client name
                does not matter
            """
            # check if client has the named function
            if not (hasattr(client, function_name)
                    and callable(getattr(client, function_name))):
                return

            # add mapping
            dispatch.map(
                f"{client_name}/{command}",
                OscRemote.handle_function,
                client,
                function_name,
                self._logger,
            )
            if is_reversible:
                dispatch.map(
                    f"{command}/{client_name}",
                    OscRemote.handle_function,
                    client,
                    function_name,
                    self._logger,
                )

        # generate mapping for all clients
        dispatch = dispatcher.Dispatcher()
        for client in clients:
            if not client:
                continue

            # prepare simplified client name as OSC target
            client_name = tools.transform_into_osc_target(client.name)

            # see `JackClient` if not otherwise specified
            add_mapping("mute", "set_output_mute")
            add_mapping("volume", "set_output_volume_db")
            add_mapping("volume_relative", "set_output_volume_relative_db")
            add_mapping("volume_port_relative",
                        "set_output_volume_port_relative_db")
            add_mapping("delay", "set_input_delay_ms")
            add_mapping("crossfade",
                        "set_client_crossfade")  # see `JackRenderer`
            add_mapping("passthrough",
                        "set_client_passthrough")  # see `JackRenderer`
            add_mapping("order", "set_renderer_sh_order")  # see `JackRenderer`
            add_mapping("zero", "set_zero_position")  # see `HeadTracker`
            add_mapping("azimuth", "set_azimuth_position")  # see `HeadTracker`
            add_mapping("stop", "stop")  # see `JackPlayer`
            add_mapping("play", "play")  # see `JackPlayer`

            # TODO: implement `JackPlayer` restarting if playback was finished
            # player = _setup_player(
            #     pre_renderer
            #     if (pre_renderer and pre_renderer.is_alive())
            #     else renderer,
            #     player,
            # )

        # add mapping to terminate
        dispatch.map("/quit", OscRemote.handle_terminate, self)
        dispatch.map("/exit", OscRemote.handle_terminate, self)

        # TODO: This line fails in case multiple ReTiSAR instances are run, due an OSC server
        #  already running (the same port being already bound). In the second instance, either try
        #  to reference the already existing OSC server or create a new server with an available
        #  port number!?
        # start OSC server
        self._server = osc_server.ThreadingOSCUDPServer(
            ("127.0.0.1", self._port), dispatch)
        log_str = f"listening to OSC messages at {self._server.server_address} ..."
        self._logger.info(log_str) if self._logger else print(log_str)

        # run OSC server and block further execution, keeping the application alive until the
        # server is released
        self._server.serve_forever()
def print_volume_handler(unused_addr, args, volume):
    print("[{0}] ~ {1}".format(args[0], volume))


def print_compute_handler(unused_addr, args, volume):
    try:
        print("[{0}] ~ {1}".format(args[0], args[1](volume)))
    except ValueError:
        pass


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip",
                        default="127.0.0.1",
                        help="The ip to listen on")
    parser.add_argument("--port",
                        type=float,
                        default=12000,
                        help="The port to listen on")
    args = parser.parse_args()

    dispatcher = dispatcher.Dispatcher()
    dispatcher.map("/Scratch_detected", print)
    dispatcher.map("/volume", print_volume_handler, "Volume")
    dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)

    server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatcher)
    print("Serving on {}".format(server.server_address))
    server.serve_forever()
Exemple #30
0
def oscserver():
    osc_disp = dispatcher.Dispatcher()
    #    osc_disp.map(".*", osc_handler)
    osc_disp.map(".*", osc_Ldata)
    server = osc_server.ThreadingOSCUDPServer(("0.0.0.0", 8888), osc_disp)
    server.serve_forever()