mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-12 03:10:17 +01:00
add settings for osc, accesspoint and remote server
This commit is contained in:
54
actions.py
54
actions.py
@@ -28,6 +28,7 @@ class Actions(object):
|
|||||||
self.capture = None
|
self.capture = None
|
||||||
self.serial_port_process = None
|
self.serial_port_process = None
|
||||||
self.openframeworks_process = None
|
self.openframeworks_process = None
|
||||||
|
self.remote_process = None
|
||||||
self.set_capture_object('value')
|
self.set_capture_object('value')
|
||||||
self.server = self.setup_osc_server()
|
self.server = self.setup_osc_server()
|
||||||
|
|
||||||
@@ -706,8 +707,10 @@ class Actions(object):
|
|||||||
self.video_driver.exit_all_players()
|
self.video_driver.exit_all_players()
|
||||||
self.exit_openframeworks()
|
self.exit_openframeworks()
|
||||||
self.exit_osc_server('','')
|
self.exit_osc_server('','')
|
||||||
|
self.create_client_and_shutdown_osc_server()
|
||||||
self.stop_serial_port_process()
|
self.stop_serial_port_process()
|
||||||
self.stop_openframeworks_process()
|
self.stop_openframeworks_process()
|
||||||
|
self.stop_remote_process()
|
||||||
self.toggle_x_autorepeat()
|
self.toggle_x_autorepeat()
|
||||||
self.tk.destroy()
|
self.tk.destroy()
|
||||||
|
|
||||||
@@ -805,14 +808,59 @@ class Actions(object):
|
|||||||
this_dispatcher.map("/shutdown", self.exit_osc_server)
|
this_dispatcher.map("/shutdown", self.exit_osc_server)
|
||||||
#this_dispatcher.map("/player/a/status", self.set_status)
|
#this_dispatcher.map("/player/a/status", self.set_status)
|
||||||
|
|
||||||
|
osc_server.ThreadingOSCUDPServer.allow_reuse_address = True
|
||||||
server = osc_server.ThreadingOSCUDPServer((server_args.ip, server_args.port), this_dispatcher)
|
server = osc_server.ThreadingOSCUDPServer((server_args.ip, server_args.port), this_dispatcher)
|
||||||
server_thread = threading.Thread(target=server.serve_forever)
|
server_thread = threading.Thread(target=server.serve_forever)
|
||||||
server_thread.start()
|
server_thread.start()
|
||||||
return server
|
return server
|
||||||
|
|
||||||
def exit_osc_server(self, unused_addr, args):
|
def exit_osc_server(self, unused_addr, args):
|
||||||
|
print('shutting down of osc server')
|
||||||
self.server.shutdown()
|
self.server.shutdown()
|
||||||
|
|
||||||
|
def create_client_and_shutdown_osc_server(self):
|
||||||
|
from pythonosc import udp_client
|
||||||
|
client_parser = argparse.ArgumentParser()
|
||||||
|
client_parser.add_argument("--ip", default=self.data.get_ip_for_osc_client(), help="the ip")
|
||||||
|
client_parser.add_argument("--port", type=int, default=8080, help="the port")
|
||||||
|
|
||||||
|
client_args = client_parser.parse_args()
|
||||||
|
|
||||||
|
client = udp_client.SimpleUDPClient(client_args.ip, client_args.port)
|
||||||
|
client.send_message("/shutdown", True)
|
||||||
|
|
||||||
|
def toggle_access_point(self, setting_value):
|
||||||
|
osc_setting_state = self.data.settings['user_input']['OSC_INPUT']['value']
|
||||||
|
self.data.settings['user_input']['OSC_INPUT']['value'] = 'disabled'
|
||||||
|
self.tk.after(2000, self.toggle_access_point_delay, setting_value, osc_setting_state)
|
||||||
|
|
||||||
|
def toggle_access_point_delay(self, setting_value, osc_setting_state ):
|
||||||
|
if setting_value == 'enabled':
|
||||||
|
subprocess.call(['sudo', 'bash', '/home/pi/raspiApWlanScripts-master/switchToAP.sh'])
|
||||||
|
else:
|
||||||
|
subprocess.call(['sudo', 'bash', '/home/pi/raspiApWlanScripts-master/switchToWlan.sh'])
|
||||||
|
self.tk.after(6000, self.enable_osc, osc_setting_state)
|
||||||
|
|
||||||
|
def toggle_remote_server(self, setting_value):
|
||||||
|
osc_setting_state = self.data.settings['user_input']['OSC_INPUT']['value']
|
||||||
|
self.data.settings['user_input']['OSC_INPUT']['value'] = 'disabled'
|
||||||
|
self.tk.after(2000, self.toggle_remote_server_delay, setting_value, osc_setting_state)
|
||||||
|
|
||||||
|
def toggle_remote_server_delay(self, setting_value, osc_setting_state):
|
||||||
|
if setting_value == 'enabled':
|
||||||
|
self.remote_process = subprocess.Popen(['node', '/home/pi/connecting-websockets-to-osc-for-rpi/webserver.js'])
|
||||||
|
else:
|
||||||
|
self.stop_remote_process()
|
||||||
|
self.data.settings['user_input']['OSC_INPUT']['value'] = osc_setting_state
|
||||||
|
|
||||||
|
def enable_osc(self, osc_setting_state):
|
||||||
|
self.data.settings['user_input']['OSC_INPUT']['value'] = osc_setting_state
|
||||||
|
|
||||||
|
|
||||||
|
def show_ip(self, *args):
|
||||||
|
address = self.data.get_ip_address()
|
||||||
|
self.message_handler.set_message('INFO', 'ip is {}:8080'.format(address))
|
||||||
|
|
||||||
def create_serial_port_process(self):
|
def create_serial_port_process(self):
|
||||||
if self.serial_port_process == None:
|
if self.serial_port_process == None:
|
||||||
self.serial_port_process = subprocess.Popen("exec " + "ttymidi -s /dev/serial0 -b 38400 -n serial", shell=True)
|
self.serial_port_process = subprocess.Popen("exec " + "ttymidi -s /dev/serial0 -b 38400 -n serial", shell=True)
|
||||||
@@ -823,6 +871,12 @@ class Actions(object):
|
|||||||
self.serial_port_process.kill()
|
self.serial_port_process.kill()
|
||||||
self.serial_port_process = None
|
self.serial_port_process = None
|
||||||
|
|
||||||
|
|
||||||
|
def stop_remote_process(self):
|
||||||
|
if self.remote_process is not None:
|
||||||
|
self.remote_process.kill()
|
||||||
|
self.remote_process = None
|
||||||
|
|
||||||
def restart_openframeworks(self):
|
def restart_openframeworks(self):
|
||||||
self.reset_players()
|
self.reset_players()
|
||||||
self.exit_openframeworks()
|
self.exit_openframeworks()
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import subprocess
|
||||||
import json
|
import json
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
import os
|
import os
|
||||||
@@ -72,6 +73,7 @@ class Data(object):
|
|||||||
|
|
||||||
if os.path.isfile(self.PATH_TO_DATA_OBJECTS + self.SETTINGS_JSON):
|
if os.path.isfile(self.PATH_TO_DATA_OBJECTS + self.SETTINGS_JSON):
|
||||||
self.settings = self._read_json(self.SETTINGS_JSON)
|
self.settings = self._read_json(self.SETTINGS_JSON)
|
||||||
|
self.settings['user_input']['REMOTE_SERVER']['value'] = 'disabled' # remote server off at boot
|
||||||
|
|
||||||
self.key_mappings = self._read_json(self.KEYPAD_MAPPING_JSON)
|
self.key_mappings = self._read_json(self.KEYPAD_MAPPING_JSON)
|
||||||
self.osc_mappings = self._read_json(self.OSC_MAPPING_JSON)
|
self.osc_mappings = self._read_json(self.OSC_MAPPING_JSON)
|
||||||
@@ -79,7 +81,15 @@ class Data(object):
|
|||||||
self.analog_mappings = self._read_json(self.ANALOG_MAPPING_JSON)
|
self.analog_mappings = self._read_json(self.ANALOG_MAPPING_JSON)
|
||||||
|
|
||||||
|
|
||||||
|
def get_ip_address(self):
|
||||||
|
ip = subprocess.check_output(['hostname', '-I']).decode('utf-8').split()[0]
|
||||||
|
return ip
|
||||||
|
|
||||||
|
def get_ip_for_osc_client(self):
|
||||||
|
if self.settings['user_input']['REMOTE_SERVER']['value'] == 'enabled':
|
||||||
|
return '127.0.0.1'
|
||||||
|
else:
|
||||||
|
return self.get_ip_address()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_empty_bank():
|
def create_empty_bank():
|
||||||
@@ -411,3 +421,5 @@ class Data(object):
|
|||||||
def try_remove_file(path):
|
def try_remove_file(path):
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ class SettingsMenu(Menu):
|
|||||||
FOLDER_ORDER = ['video', 'sampler', 'user_input', 'capture', 'shader', 'detour', 'system' ]
|
FOLDER_ORDER = ['video', 'sampler', 'user_input', 'capture', 'shader', 'detour', 'system' ]
|
||||||
SAMPLER_ORDER = ['LOOP_TYPE', 'LOAD_NEXT', 'RAND_START_MODE', 'RESET_PLAYERS', 'FIXED_LENGTH_MODE', 'FIXED_LENGTH', 'FIXED_LENGTH_MULTIPLY' ]
|
SAMPLER_ORDER = ['LOOP_TYPE', 'LOAD_NEXT', 'RAND_START_MODE', 'RESET_PLAYERS', 'FIXED_LENGTH_MODE', 'FIXED_LENGTH', 'FIXED_LENGTH_MULTIPLY' ]
|
||||||
VIDEO_ORDER = ['VIDEOPLAYER_BACKEND']
|
VIDEO_ORDER = ['VIDEOPLAYER_BACKEND']
|
||||||
USER_INPUT_ORDER = ['MIDI_INPUT', 'MIDI_STATUS', 'CYCLE_MIDI_PORT']
|
USER_INPUT_ORDER = ['MIDI_INPUT', 'MIDI_STATUS', 'CYCLE_MIDI_PORT', 'OSC_INPUT', 'ACCESS_POINT', 'REMOTE_SERVER', 'SHOW_IP' ]
|
||||||
CAPTURE_ORDER = ['DEVICE', 'TYPE']
|
CAPTURE_ORDER = ['DEVICE', 'TYPE']
|
||||||
SHADER_ORDER = ['USER_SHADER']
|
SHADER_ORDER = ['USER_SHADER']
|
||||||
DETOUR_ORDER = ['TRY_DEMO']
|
DETOUR_ORDER = ['TRY_DEMO']
|
||||||
|
|||||||
@@ -3,15 +3,17 @@ from pythonosc import udp_client
|
|||||||
from pythonosc import dispatcher
|
from pythonosc import dispatcher
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
def setup_osc_client():
|
def setup_osc_client(ip, port):
|
||||||
client_parser = argparse.ArgumentParser()
|
client_parser = argparse.ArgumentParser()
|
||||||
client_parser.add_argument("--ip", default="127.0.0.1", help="the ip")
|
client_parser.add_argument("--ip", default=ip, help="the ip")
|
||||||
client_parser.add_argument("--port", type=int, default=5433, help="the port")
|
client_parser.add_argument("--port", type=int, default=port, help="the port")
|
||||||
|
|
||||||
client_args = client_parser.parse_args()
|
client_args = client_parser.parse_args()
|
||||||
|
|
||||||
return udp_client.SimpleUDPClient(client_args.ip, client_args.port)
|
return udp_client.SimpleUDPClient(client_args.ip, client_args.port)
|
||||||
|
|
||||||
client = setup_osc_client()
|
client = setup_osc_client('127.0.0.1',5433)
|
||||||
|
client.send_message("/shutdown", True)
|
||||||
|
|
||||||
|
client = setup_osc_client('127.0.0.1',9000)
|
||||||
client.send_message("/shutdown", True)
|
client.send_message("/shutdown", True)
|
||||||
|
|||||||
@@ -112,6 +112,35 @@
|
|||||||
"options": [],
|
"options": [],
|
||||||
"value": null
|
"value": null
|
||||||
},
|
},
|
||||||
|
"OSC_INPUT": {
|
||||||
|
"action": null,
|
||||||
|
"options": [
|
||||||
|
"enabled",
|
||||||
|
"disabled"
|
||||||
|
],
|
||||||
|
"value": "disabled"
|
||||||
|
},
|
||||||
|
"ACCESS_POINT": {
|
||||||
|
"action": "toggle_access_point",
|
||||||
|
"options": [
|
||||||
|
"enabled",
|
||||||
|
"disabled"
|
||||||
|
],
|
||||||
|
"value": "disabled"
|
||||||
|
},
|
||||||
|
"REMOTE_SERVER": {
|
||||||
|
"action": "toggle_remote_server",
|
||||||
|
"options": [
|
||||||
|
"enabled",
|
||||||
|
"disabled"
|
||||||
|
],
|
||||||
|
"value": "disabled"
|
||||||
|
},
|
||||||
|
"SHOW_IP": {
|
||||||
|
"action": "show_ip",
|
||||||
|
"options": [],
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
"ANALOG_INPUT": {
|
"ANALOG_INPUT": {
|
||||||
"action": null,
|
"action": null,
|
||||||
"options": [
|
"options": [
|
||||||
|
|||||||
@@ -17,12 +17,28 @@ class OscInput(object):
|
|||||||
self.actions = actions
|
self.actions = actions
|
||||||
self.data = data
|
self.data = data
|
||||||
self.osc_mappings = data.osc_mappings
|
self.osc_mappings = data.osc_mappings
|
||||||
self.osc_server = self.setup_osc_server()
|
|
||||||
|
self.osc_enabled = False
|
||||||
|
self.osc_server = None
|
||||||
|
self.poll_settings_for_osc_info()
|
||||||
|
|
||||||
|
def poll_settings_for_osc_info(self):
|
||||||
|
osc_setting_enabled = self.data.settings['user_input']['OSC_INPUT']['value'] == 'enabled'
|
||||||
|
if osc_setting_enabled and not self.osc_enabled:
|
||||||
|
self.setup_osc_server()
|
||||||
|
self.osc_enabled = True
|
||||||
|
elif not osc_setting_enabled and self.osc_enabled:
|
||||||
|
self.actions.create_client_and_shutdown_osc_server()
|
||||||
|
self.osc_enabled = False
|
||||||
|
self.root.after(1000, self.poll_settings_for_osc_info)
|
||||||
|
|
||||||
def setup_osc_server(self):
|
def setup_osc_server(self):
|
||||||
|
ip_address = self.data.get_ip_for_osc_client()
|
||||||
|
|
||||||
|
print('%%%%%%%%%%%%%%%%%%%%% setting up external_osc on ', ip_address)
|
||||||
server_parser = argparse.ArgumentParser()
|
server_parser = argparse.ArgumentParser()
|
||||||
server_parser.add_argument("--ip", default="127.0.0.1", help="the ip")
|
server_parser.add_argument("--ip", default=ip_address, help="the ip")
|
||||||
server_parser.add_argument("--port", type=int, default=5433, help="the port")
|
server_parser.add_argument("--port", type=int, default=8080, help="the port")
|
||||||
|
|
||||||
server_args = server_parser.parse_args()
|
server_args = server_parser.parse_args()
|
||||||
|
|
||||||
@@ -34,13 +50,16 @@ class OscInput(object):
|
|||||||
this_dispatcher.map("/shaderparam2", self.on_param_osc_input)
|
this_dispatcher.map("/shaderparam2", self.on_param_osc_input)
|
||||||
this_dispatcher.map("/shaderparam3", self.on_param_osc_input)
|
this_dispatcher.map("/shaderparam3", self.on_param_osc_input)
|
||||||
this_dispatcher.map("/shutdown", self.exit_osc_server)
|
this_dispatcher.map("/shutdown", self.exit_osc_server)
|
||||||
|
#this_dispatcher.map("/*", print)
|
||||||
|
|
||||||
|
osc_server.ThreadingOSCUDPServer.allow_reuse_address = True
|
||||||
server = osc_server.ThreadingOSCUDPServer((server_args.ip, server_args.port), this_dispatcher)
|
server = osc_server.ThreadingOSCUDPServer((server_args.ip, server_args.port), this_dispatcher)
|
||||||
server_thread = threading.Thread(target=server.serve_forever)
|
server_thread = threading.Thread(target=server.serve_forever)
|
||||||
server_thread.start()
|
server_thread.start()
|
||||||
return server
|
self.osc_server = server
|
||||||
|
|
||||||
def exit_osc_server(self, unused_addr, args):
|
def exit_osc_server(self, unused_addr, args):
|
||||||
|
print('%%%%%%%%%%%%%%%%%%%%% exiting external_osc')
|
||||||
self.osc_server.shutdown()
|
self.osc_server.shutdown()
|
||||||
|
|
||||||
def on_osc_input(self, addr, args):
|
def on_osc_input(self, addr, args):
|
||||||
|
|||||||
Reference in New Issue
Block a user