mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-11 19:00:04 +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.serial_port_process = None
|
||||
self.openframeworks_process = None
|
||||
self.remote_process = None
|
||||
self.set_capture_object('value')
|
||||
self.server = self.setup_osc_server()
|
||||
|
||||
@@ -706,8 +707,10 @@ class Actions(object):
|
||||
self.video_driver.exit_all_players()
|
||||
self.exit_openframeworks()
|
||||
self.exit_osc_server('','')
|
||||
self.create_client_and_shutdown_osc_server()
|
||||
self.stop_serial_port_process()
|
||||
self.stop_openframeworks_process()
|
||||
self.stop_remote_process()
|
||||
self.toggle_x_autorepeat()
|
||||
self.tk.destroy()
|
||||
|
||||
@@ -805,14 +808,59 @@ class Actions(object):
|
||||
this_dispatcher.map("/shutdown", self.exit_osc_server)
|
||||
#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_thread = threading.Thread(target=server.serve_forever)
|
||||
server_thread.start()
|
||||
return server
|
||||
|
||||
def exit_osc_server(self, unused_addr, args):
|
||||
print('shutting down of osc server')
|
||||
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):
|
||||
if self.serial_port_process == None:
|
||||
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 = 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):
|
||||
self.reset_players()
|
||||
self.exit_openframeworks()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import subprocess
|
||||
import json
|
||||
import xml.etree.ElementTree as ET
|
||||
import os
|
||||
@@ -72,6 +73,7 @@ class Data(object):
|
||||
|
||||
if os.path.isfile(self.PATH_TO_DATA_OBJECTS + 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.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)
|
||||
|
||||
|
||||
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
|
||||
def create_empty_bank():
|
||||
@@ -411,3 +421,5 @@ class Data(object):
|
||||
def try_remove_file(path):
|
||||
if os.path.exists(path):
|
||||
os.remove(path)
|
||||
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ class SettingsMenu(Menu):
|
||||
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' ]
|
||||
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']
|
||||
SHADER_ORDER = ['USER_SHADER']
|
||||
DETOUR_ORDER = ['TRY_DEMO']
|
||||
|
||||
@@ -3,15 +3,17 @@ from pythonosc import udp_client
|
||||
from pythonosc import dispatcher
|
||||
import argparse
|
||||
|
||||
def setup_osc_client():
|
||||
def setup_osc_client(ip, port):
|
||||
client_parser = argparse.ArgumentParser()
|
||||
client_parser.add_argument("--ip", default="127.0.0.1", help="the ip")
|
||||
client_parser.add_argument("--port", type=int, default=5433, help="the port")
|
||||
client_parser.add_argument("--ip", default=ip, help="the ip")
|
||||
client_parser.add_argument("--port", type=int, default=port, help="the port")
|
||||
|
||||
client_args = client_parser.parse_args()
|
||||
|
||||
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)
|
||||
|
||||
@@ -112,6 +112,35 @@
|
||||
"options": [],
|
||||
"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": {
|
||||
"action": null,
|
||||
"options": [
|
||||
|
||||
@@ -17,12 +17,28 @@ class OscInput(object):
|
||||
self.actions = actions
|
||||
self.data = data
|
||||
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):
|
||||
ip_address = self.data.get_ip_for_osc_client()
|
||||
|
||||
print('%%%%%%%%%%%%%%%%%%%%% setting up external_osc on ', ip_address)
|
||||
server_parser = argparse.ArgumentParser()
|
||||
server_parser.add_argument("--ip", default="127.0.0.1", help="the ip")
|
||||
server_parser.add_argument("--port", type=int, default=5433, help="the port")
|
||||
server_parser.add_argument("--ip", default=ip_address, help="the ip")
|
||||
server_parser.add_argument("--port", type=int, default=8080, help="the port")
|
||||
|
||||
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("/shaderparam3", self.on_param_osc_input)
|
||||
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_thread = threading.Thread(target=server.serve_forever)
|
||||
server_thread.start()
|
||||
return server
|
||||
self.osc_server = server
|
||||
|
||||
def exit_osc_server(self, unused_addr, args):
|
||||
print('%%%%%%%%%%%%%%%%%%%%% exiting external_osc')
|
||||
self.osc_server.shutdown()
|
||||
|
||||
def on_osc_input(self, addr, args):
|
||||
|
||||
Reference in New Issue
Block a user