From 0ba74fd6ed2b1007a444e2423b9907fbfc266f33 Mon Sep 17 00:00:00 2001 From: Gurkengewuerz Date: Wed, 20 Feb 2019 14:51:19 +0000 Subject: [PATCH] changes for raspberry pi 3 --- python/lib/config.py | 94 +++++----------------------------------- python/lib/devices.py | 2 +- python/lib/microphone.py | 3 +- python/lib/settings.ini | 6 +-- python/main.py | 18 ++++---- 5 files changed, 26 insertions(+), 97 deletions(-) diff --git a/python/lib/config.py b/python/lib/config.py index 3ff9901..ea57107 100644 --- a/python/lib/config.py +++ b/python/lib/config.py @@ -12,7 +12,7 @@ use_defaults = {"configuration": True, # See notes bel settings = { # All settings are stored in this dict "configuration":{ # Program configuration - 'USE_GUI': True, # Whether to display the GUI + 'USE_GUI': False, # Whether to display the GUI 'DISPLAY_FPS': False, # Whether to print the FPS when running (can reduce performance) 'MIC_RATE': 48000, # Sampling frequency of the microphone in Hz 'FPS': 60, # Desired refresh rate of the visualization (frames per second) @@ -32,17 +32,17 @@ settings = { # All settings # All devices and their respective settings. Indexed by name, call each one what you want. "devices":{"Desk Strip":{ - "configuration":{"TYPE": "ESP8266", # Device type (see below for all supported boards) + "configuration":{"TYPE": "RaspberryPi", # Device type (see below for all supported boards) # Required configuration for device. See below for all required keys per device - "AUTO_DETECT": True, # Set this true if you're using windows hotspot to connect (see below for more info) - "MAC_ADDR": "2c-3a-e8-2f-2c-9f", # MAC address of the ESP8266. Only used if AUTO_DETECT is True - "UDP_IP": "192.168.1.208", # IP address of the ESP8266. Must match IP in ws2812_controller.ino - "UDP_PORT": 7778, # Port number used for socket communication between Python and ESP8266 + "LED_INVERT": False, # Set this true if you're using windows hotspot to connect (see below for more info) + "LED_PIN": 18, # MAC address of the ESP8266. Only used if AUTO_DETECT is True + "LED_FREQ_HZ": 800000, # IP address of the ESP8266. Must match IP in ws2812_controller.ino + "LED_DMA": 5, # Port number used for socket communication between Python and ESP8266 "MAX_BRIGHTNESS": 250, # Max brightness of output (0-255) (my strip sometimes bugs out with high brightness) # Other configuration - "N_PIXELS": 58, # Number of pixels in the LED strip (must match ESP8266 firmware) + "N_PIXELS": 150, # Number of pixels in the LED strip (must match ESP8266 firmware) "N_FFT_BINS": 24, # Number of frequency bins to use when transforming audio to frequency domain - "current_effect": "Energy" # Currently selected effect for this board, used as default when program launches + "current_effect": "Power" # Currently selected effect for this board, used as default when program launches }, # Configurable options for this board's effects go in this dictionary. @@ -77,7 +77,7 @@ settings = { # All settings "b_multiplier": 1.0, # How much blue "blur": 0.2}, # Amount of blur to apply "Power": {"color_mode": "Spectral", # Colour gradient to display - "s_count": 20, # Initial number of sparks + "s_count": 0, # Initial number of sparks "s_color": "White", # Color of sparks "mirror": True, # Mirror output down central axis "flip_lr":False}, # Flip output left-right @@ -102,79 +102,7 @@ settings = { # All settings "g": 100, "b": 100} } - }, - "Main Strip":{ - "configuration":{"TYPE": "ESP8266", # Device type (see below for all supported boards) - # Required configuration for device. See below for all required keys per device - "AUTO_DETECT": True, # Set this true if you're using windows hotspot to connect (see below for more info) - "MAC_ADDR": "5c-cf-7f-f0-8c-f3", # MAC address of the ESP8266. Only used if AUTO_DETECT is True - "UDP_IP": "192.168.1.208", # IP address of the ESP8266. Must match IP in ws2812_controller.ino - "UDP_PORT": 7778, # Port number used for socket communication between Python and ESP8266 - "MAX_BRIGHTNESS": 180, # Max brightness of output (0-255) (my strip sometimes bugs out with high brightness) - # Other configuration - "N_PIXELS": 226, # Number of pixels in the LED strip (must match ESP8266 firmware) - "N_FFT_BINS": 24, # Number of frequency bins to use when transforming audio to frequency domain - "current_effect": "Single" # Currently selected effect for this board, used as default when program launches - }, - - # Configurable options for this board's effects go in this dictionary. - # Usage: config.settings["devices"][name]["effect_opts"][effect][option] - "effect_opts":{"Energy": {"blur": 1, # Amount of blur to apply - "scale":0.9, # Width of effect on strip - "r_multiplier": 1.0, # How much red - "g_multiplier": 1.0, # How much green - "b_multiplier": 1.0}, # How much blue - "Wave": {"color_wave": "Red", # Colour of moving bit - "color_flash": "White", # Colour of flashy bit - "wipe_len":5, # Initial length of colour bit after beat - "decay": 0.7, # How quickly the flash fades away - "wipe_speed":2}, # Number of pixels added to colour bit every frame - "Spectrum": {"r_multiplier": 1.0, # How much red - "g_multiplier": 1.0, # How much green - "b_multiplier": 1.0}, # How much blue - "Wavelength":{"roll_speed": 0, # How fast (if at all) to cycle colour overlay across strip - "color_mode": "Spectral", # Colour gradient to display - "mirror": False, # Reflect output down centre of strip - "reverse_grad": False, # Flip (LR) gradient - "reverse_roll": False, # Reverse movement of gradient roll - "blur": 3.0, # Amount of blur to apply - "flip_lr":False}, # Flip output left-right - "Scroll": {"lows_color": "Red", # Colour of low frequencies - "mids_color": "Green", # Colour of mid frequencies - "high_color": "Blue", # Colour of high frequencies - "decay": 0.995, # How quickly the colour fades away as it moves - "speed": 1, # Speed of scroll - "r_multiplier": 1.0, # How much red - "g_multiplier": 1.0, # How much green - "b_multiplier": 1.0, # How much blue - "blur": 0.2}, # Amount of blur to apply - "Power": {"color_mode": "Spectral", # Colour gradient to display - "s_count": 20, # Initial number of sparks - "s_color": "White", # Color of sparks - "mirror": True, # Mirror output down central axis - "flip_lr":False}, # Flip output left-right - "Single": {"color": "Purple"}, # Static color to show - "Beat": {"color": "Red", # Colour of beat flash - "decay": 0.7}, # How quickly the flash fades away - "Bars": {"resolution":4, # Number of "bars" - "color_mode":"Spectral", # Multicolour mode to use - "roll_speed":0, # How fast (if at all) to cycle colour colours across strip - "mirror": False, # Mirror down centre of strip - #"reverse_grad": False, # Flip (LR) gradient - "reverse_roll": False, # Reverse movement of gradient roll - "flip_lr":False}, # Flip output left-right - "Gradient": {"color_mode":"Spectral", # Colour gradient to display - "roll_speed": 0, # How fast (if at all) to cycle colour colours across strip - "mirror": False, # Mirror gradient down central axis - "reverse": False}, # Reverse movement of gradient - "Fade": {"color_mode":"Spectral", # Colour gradient to fade through - "roll_speed": 1, # How fast (if at all) to fade through colours - "reverse": False}, # Reverse "direction" of fade (r->g->b or r<-g<-b) - "Calibration":{"r": 100, - "g": 100, - "b": 100} - } - } + } }, @@ -360,7 +288,7 @@ for board in settings["devices"]: settings["devices"][board]["configuration"]["SOFTWARE_GAMMA_CORRECTION"] = False else: raise ValueError("Invalid device selected. Device {} not known.".format(settings["devices"][board]["configuration"]["TYPE"])) - settings["devices"][board]["effect_opts"]["Power"]["s_count"] = settings["devices"][board]["configuration"]["N_PIXELS"]//6 + #settings["devices"][board]["effect_opts"]["Power"]["s_count"] = settings["devices"][board]["configuration"]["N_PIXELS"]//6 # Cheeky lil fix in case the user sets an odd number of LEDs if settings["devices"][board]["configuration"]["N_PIXELS"] % 2: settings["devices"][board]["configuration"]["N_PIXELS"] -= 1 diff --git a/python/lib/devices.py b/python/lib/devices.py index af19163..c0f7ec4 100644 --- a/python/lib/devices.py +++ b/python/lib/devices.py @@ -255,7 +255,7 @@ class RaspberryPi(LEDController): rgb = np.bitwise_or(np.bitwise_or(r, g), b) # Update the pixels for i in range(n_pixels): - self.strip._led_data[i] = rgb[i] + self.strip._led_data[i] = int(rgb[i]) self.strip.show() diff --git a/python/lib/microphone.py b/python/lib/microphone.py index 48d292e..abbc38a 100644 --- a/python/lib/microphone.py +++ b/python/lib/microphone.py @@ -16,8 +16,9 @@ def start_stream(callback): prev_ovf_time = time.time() while True: try: - y = np.fromstring(stream.read(frames_per_buffer), dtype=np.int16) + y = np.fromstring(stream.read(frames_per_buffer, exception_on_overflow=False), dtype=np.int16) y = y.astype(np.float32) + stream.read(stream.get_read_available(), exception_on_overflow=False) callback(y) except IOError: overflows += 1 diff --git a/python/lib/settings.ini b/python/lib/settings.ini index 769e003..242f436 100644 --- a/python/lib/settings.ini +++ b/python/lib/settings.ini @@ -1,6 +1,6 @@ [General] -settings_dict="@Variant(\0\0\0\b\0\0\0\x5\0\0\0\x12\0g\0r\0\x61\0\x64\0i\0\x65\0n\0t\0s\0\0\0\b\0\0\0\t\0\0\0\f\0S\0u\0n\0s\0\x65\0t\0\0\0\t\0\0\0\x3\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\n\0S\0u\0n\0n\0y\0\0\0\t\0\0\0\x4\0\0\0\n\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\n\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\t\0\0\0\b\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\n\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\n\0\0\0\b\0P\0i\0n\0k\0\0\0\b\0R\0u\0s\0t\0\0\0\t\0\0\0\x2\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0P\0\x65\0\x61\0\x63\0h\0\0\0\t\0\0\0\x2\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\b\0P\0i\0n\0k\0\0\0\n\0O\0\x63\0\x65\0\x61\0n\0\0\0\t\0\0\0\x3\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\n\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\f\0J\0u\0n\0g\0l\0\x65\0\0\0\t\0\0\0\x3\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\f\0\x46\0r\0u\0i\0t\0y\0\0\0\t\0\0\0\x2\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x14\0\x44\0\x61\0n\0\x63\0\x65\0\x66\0l\0o\0o\0r\0\0\0\t\0\0\0\x4\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\b\0P\0i\0n\0k\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\xe\0\x64\0\x65\0v\0i\0\x63\0\x65\0s\0\0\0\b\0\0\0\x2\0\0\0\x14\0M\0\x61\0i\0n\0 \0S\0t\0r\0i\0p\0\0\0\b\0\0\0\x2\0\0\0\x16\0\x65\0\x66\0\x66\0\x65\0\x63\0t\0_\0o\0p\0t\0s\0\0\0\b\0\0\0\f\0\0\0\x14\0W\0\x61\0v\0\x65\0l\0\x65\0n\0g\0t\0h\0\0\0\b\0\0\0\a\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0r\0o\0l\0l\0\0\0\x1\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0g\0r\0\x61\0\x64\0\0\0\x1\0\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x6@\b\0\0\0\0\0\0\0\0\0\b\0W\0\x61\0v\0\x65\0\0\0\b\0\0\0\x5\0\0\0\x14\0w\0i\0p\0\x65\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x2\0\0\0\x10\0w\0i\0p\0\x65\0_\0l\0\x65\0n\0\0\0\x2\0\0\0\x5\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xe6\x66\x66\x66\x66\x66\x66\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0w\0\x61\0v\0\x65\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x16\0\x63\0o\0l\0o\0r\0_\0\x66\0l\0\x61\0s\0h\0\0\0\n\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0u\0m\0\0\0\b\0\0\0\x3\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\f\0S\0i\0n\0g\0l\0\x65\0\0\0\b\0\0\0\x1\0\0\0\n\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\f\0S\0\x63\0r\0o\0l\0l\0\0\0\b\0\0\0\t\0\0\0\n\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x1\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x14\0m\0i\0\x64\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\x14\0l\0o\0w\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x14\0h\0i\0g\0h\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xef\xd7\n=p\xa3\xd7\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x6?\xc9\x99\x99\x99\x99\x99\x9a\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\n\0P\0o\0w\0\x65\0r\0\0\0\b\0\0\0\x5\0\0\0\xe\0s\0_\0\x63\0o\0u\0n\0t\0\0\0\x2\0\0\0%\0\0\0\xe\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\x1\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\x10\0G\0r\0\x61\0\x64\0i\0\x65\0n\0t\0\0\0\b\0\0\0\x4\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\xe\0r\0\x65\0v\0\x65\0r\0s\0\x65\0\0\0\x1\0\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\b\0\x46\0\x61\0\x64\0\x65\0\0\0\b\0\0\0\x3\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x1\0\0\0\xe\0r\0\x65\0v\0\x65\0r\0s\0\x65\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\f\0\x45\0n\0\x65\0r\0g\0y\0\0\0\b\0\0\0\x5\0\0\0\n\0s\0\x63\0\x61\0l\0\x65\0\0\0\x6?\xec\xcc\xcc\xcc\xcc\xcc\xcd\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x16\0\x43\0\x61\0l\0i\0\x62\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\x3\0\0\0\x2\0r\0\0\0\x2\0\0\0\x64\0\0\0\x2\0g\0\0\0\x2\0\0\0\x64\0\0\0\x2\0\x62\0\0\0\x2\0\0\0\x64\0\0\0\b\0\x42\0\x65\0\x61\0t\0\0\0\b\0\0\0\x2\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xe6\x66\x66\x66\x66\x66\x66\0\0\0\n\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\b\0\x42\0\x61\0r\0s\0\0\0\b\0\0\0\x6\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0r\0o\0l\0l\0\0\0\x1\0\0\0\0\x14\0r\0\x65\0s\0o\0l\0u\0t\0i\0o\0n\0\0\0\x2\0\0\0\x4\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\x1a\0\x63\0o\0n\0\x66\0i\0g\0u\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\n\0\0\0\x1c\0\x63\0u\0r\0r\0\x65\0n\0t\0_\0\x65\0\x66\0\x66\0\x65\0\x63\0t\0\0\0\n\0\0\0\f\0S\0i\0n\0g\0l\0\x65\0\0\0\x10\0U\0\x44\0P\0_\0P\0O\0R\0T\0\0\0\x2\0\0\x1e\x62\0\0\0\f\0U\0\x44\0P\0_\0I\0P\0\0\0\n\0\0\0\x1a\0\x31\0\x39\0\x32\0.\0\x31\0\x36\0\x38\0.\0\x31\0.\0\x32\0\x30\0\x38\0\0\0\b\0T\0Y\0P\0\x45\0\0\0\n\0\0\0\xe\0\x45\0S\0P\0\x38\0\x32\0\x36\0\x36\0\0\0\x32\0S\0O\0\x46\0T\0W\0\x41\0R\0\x45\0_\0G\0\x41\0M\0M\0\x41\0_\0\x43\0O\0R\0R\0\x45\0\x43\0T\0I\0O\0N\0\0\0\x1\0\0\0\0\x10\0N\0_\0P\0I\0X\0\x45\0L\0S\0\0\0\x2\0\0\0\xe2\0\0\0\x14\0N\0_\0\x46\0\x46\0T\0_\0\x42\0I\0N\0S\0\0\0\x2\0\0\0\x18\0\0\0\x1c\0M\0\x41\0X\0_\0\x42\0R\0I\0G\0H\0T\0N\0\x45\0S\0S\0\0\0\x2\0\0\0\xb4\0\0\0\x10\0M\0\x41\0\x43\0_\0\x41\0\x44\0\x44\0R\0\0\0\n\0\0\0\"\0\x35\0\x63\0-\0\x63\0\x66\0-\0\x37\0\x66\0-\0\x66\0\x30\0-\0\x38\0\x63\0-\0\x66\0\x33\0\0\0\x16\0\x41\0U\0T\0O\0_\0\x44\0\x45\0T\0\x45\0\x43\0T\0\0\0\x1\x1\0\0\0\x14\0\x44\0\x65\0s\0k\0 \0S\0t\0r\0i\0p\0\0\0\b\0\0\0\x2\0\0\0\x16\0\x65\0\x66\0\x66\0\x65\0\x63\0t\0_\0o\0p\0t\0s\0\0\0\b\0\0\0\f\0\0\0\x14\0W\0\x61\0v\0\x65\0l\0\x65\0n\0g\0t\0h\0\0\0\b\0\0\0\a\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0r\0o\0l\0l\0\0\0\x1\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0g\0r\0\x61\0\x64\0\0\0\x1\0\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x6@\b\0\0\0\0\0\0\0\0\0\b\0W\0\x61\0v\0\x65\0\0\0\b\0\0\0\x5\0\0\0\x14\0w\0i\0p\0\x65\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x2\0\0\0\x10\0w\0i\0p\0\x65\0_\0l\0\x65\0n\0\0\0\x2\0\0\0\x5\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xe6\x66\x66\x66\x66\x66\x66\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0w\0\x61\0v\0\x65\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x16\0\x63\0o\0l\0o\0r\0_\0\x66\0l\0\x61\0s\0h\0\0\0\n\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0u\0m\0\0\0\b\0\0\0\x3\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\f\0S\0i\0n\0g\0l\0\x65\0\0\0\b\0\0\0\x1\0\0\0\n\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\f\0S\0\x63\0r\0o\0l\0l\0\0\0\b\0\0\0\t\0\0\0\n\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x1\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x14\0m\0i\0\x64\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\x14\0l\0o\0w\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x14\0h\0i\0g\0h\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xef\xd7\n=p\xa3\xd7\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x6?\xc9\x99\x99\x99\x99\x99\x9a\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\n\0P\0o\0w\0\x65\0r\0\0\0\b\0\0\0\x5\0\0\0\xe\0s\0_\0\x63\0o\0u\0n\0t\0\0\0\x2\0\0\0\t\0\0\0\xe\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\x1\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\x10\0G\0r\0\x61\0\x64\0i\0\x65\0n\0t\0\0\0\b\0\0\0\x4\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\xe\0r\0\x65\0v\0\x65\0r\0s\0\x65\0\0\0\x1\0\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\b\0\x46\0\x61\0\x64\0\x65\0\0\0\b\0\0\0\x3\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x1\0\0\0\xe\0r\0\x65\0v\0\x65\0r\0s\0\x65\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\f\0\x45\0n\0\x65\0r\0g\0y\0\0\0\b\0\0\0\x5\0\0\0\n\0s\0\x63\0\x61\0l\0\x65\0\0\0\x6?\xec\xcc\xcc\xcc\xcc\xcc\xcd\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x16\0\x43\0\x61\0l\0i\0\x62\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\x3\0\0\0\x2\0r\0\0\0\x2\0\0\0\x64\0\0\0\x2\0g\0\0\0\x2\0\0\0\x64\0\0\0\x2\0\x62\0\0\0\x2\0\0\0\x64\0\0\0\b\0\x42\0\x65\0\x61\0t\0\0\0\b\0\0\0\x2\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xe6\x66\x66\x66\x66\x66\x66\0\0\0\n\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\b\0\x42\0\x61\0r\0s\0\0\0\b\0\0\0\x6\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0r\0o\0l\0l\0\0\0\x1\0\0\0\0\x14\0r\0\x65\0s\0o\0l\0u\0t\0i\0o\0n\0\0\0\x2\0\0\0\x4\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\x1a\0\x63\0o\0n\0\x66\0i\0g\0u\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\n\0\0\0\x1c\0\x63\0u\0r\0r\0\x65\0n\0t\0_\0\x65\0\x66\0\x66\0\x65\0\x63\0t\0\0\0\n\0\0\0\f\0S\0\x63\0r\0o\0l\0l\0\0\0\x10\0U\0\x44\0P\0_\0P\0O\0R\0T\0\0\0\x2\0\0\x1e\x62\0\0\0\f\0U\0\x44\0P\0_\0I\0P\0\0\0\n\0\0\0\x1a\0\x31\0\x39\0\x32\0.\0\x31\0\x36\0\x38\0.\0\x31\0.\0\x32\0\x30\0\x38\0\0\0\b\0T\0Y\0P\0\x45\0\0\0\n\0\0\0\xe\0\x45\0S\0P\0\x38\0\x32\0\x36\0\x36\0\0\0\x32\0S\0O\0\x46\0T\0W\0\x41\0R\0\x45\0_\0G\0\x41\0M\0M\0\x41\0_\0\x43\0O\0R\0R\0\x45\0\x43\0T\0I\0O\0N\0\0\0\x1\0\0\0\0\x10\0N\0_\0P\0I\0X\0\x45\0L\0S\0\0\0\x2\0\0\0:\0\0\0\x14\0N\0_\0\x46\0\x46\0T\0_\0\x42\0I\0N\0S\0\0\0\x2\0\0\0\x18\0\0\0\x1c\0M\0\x41\0X\0_\0\x42\0R\0I\0G\0H\0T\0N\0\x45\0S\0S\0\0\0\x2\0\0\0\xfa\0\0\0\x10\0M\0\x41\0\x43\0_\0\x41\0\x44\0\x44\0R\0\0\0\n\0\0\0\"\0\x32\0\x63\0-\0\x33\0\x61\0-\0\x65\0\x38\0-\0\x32\0\x66\0-\0\x32\0\x63\0-\0\x39\0\x66\0\0\0\x16\0\x41\0U\0T\0O\0_\0\x44\0\x45\0T\0\x45\0\x43\0T\0\0\0\x1\x1\0\0\0\x1a\0\x63\0o\0n\0\x66\0i\0g\0u\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\t\0\0\0\xe\0U\0S\0\x45\0_\0G\0U\0I\0\0\0\x1\x1\0\0\0\"\0N\0_\0R\0O\0L\0L\0I\0N\0G\0_\0H\0I\0S\0T\0O\0R\0Y\0\0\0\x2\0\0\0\x4\0\0\0(\0M\0I\0N\0_\0V\0O\0L\0U\0M\0\x45\0_\0T\0H\0R\0\x45\0S\0H\0O\0L\0\x44\0\0\0\x6?PbM\xd2\xf1\xa9\xfc\0\0\0\x1a\0M\0I\0N\0_\0\x46\0R\0\x45\0Q\0U\0\x45\0N\0\x43\0Y\0\0\0\x2\0\0\0\x14\0\0\0\x10\0M\0I\0\x43\0_\0R\0\x41\0T\0\x45\0\0\0\x2\0\0\xbb\x80\0\0\0\x1a\0M\0\x41\0X\0_\0\x46\0R\0\x45\0Q\0U\0\x45\0N\0\x43\0Y\0\0\0\x2\0\0\x46P\0\0\0\x1c\0M\0\x41\0X\0_\0\x42\0R\0I\0G\0H\0T\0N\0\x45\0S\0S\0\0\0\x2\0\0\0\xfa\0\0\0\x6\0\x46\0P\0S\0\0\0\x2\0\0\0<\0\0\0\x16\0\x44\0I\0S\0P\0L\0\x41\0Y\0_\0\x46\0P\0S\0\0\0\x1\0\0\0\0\f\0\x63\0o\0l\0o\0r\0s\0\0\0\b\0\0\0\t\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\xffK\0\x87q\0.\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\xffK\xff\x87q\0.\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\0K\0\x87q\0.\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3KPK\x5K\xfc\x87q\0.\0\0\0\b\0P\0i\0n\0k\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\0K\xb2\x87q\0.\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK(K\0\x87q\0.\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\x1K\xf7K\xa1\x87q\0.\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\0K\xffK\0\x87q\0.\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\0K\0K\xff\x87q\0.\0\0\0\x10\0G\0U\0I\0_\0o\0p\0t\0s\0\0\0\b\0\0\0\x5\0\0\0.\0R\0\x65\0\x61\0\x63\0t\0i\0v\0\x65\0 \0\x45\0\x66\0\x66\0\x65\0\x63\0t\0 \0\x42\0u\0t\0t\0o\0n\0s\0\0\0\x1\x1\0\0\0\x36\0N\0o\0n\0 \0R\0\x65\0\x61\0\x63\0t\0i\0v\0\x65\0 \0\x45\0\x66\0\x66\0\x65\0\x63\0t\0 \0\x42\0u\0t\0t\0o\0n\0s\0\0\0\x1\x1\0\0\0\f\0G\0r\0\x61\0p\0h\0s\0\0\0\x1\x1\0\0\0\x1e\0\x46\0r\0\x65\0q\0u\0\x65\0n\0\x63\0y\0 \0R\0\x61\0n\0g\0\x65\0\0\0\x1\x1\0\0\0\x1c\0\x45\0\x66\0\x66\0\x65\0\x63\0t\0 \0O\0p\0t\0i\0o\0n\0s\0\0\0\x1\x1)" +settings_dict="@Variant(\0\0\0\b\0\0\0\x5\0\0\0\x12\0g\0r\0\x61\0\x64\0i\0\x65\0n\0t\0s\0\0\0\b\0\0\0\t\0\0\0\f\0S\0u\0n\0s\0\x65\0t\0\0\0\t\0\0\0\x3\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\n\0S\0u\0n\0n\0y\0\0\0\t\0\0\0\x4\0\0\0\n\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\n\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\t\0\0\0\b\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\n\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\n\0\0\0\b\0P\0i\0n\0k\0\0\0\b\0R\0u\0s\0t\0\0\0\t\0\0\0\x2\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0P\0\x65\0\x61\0\x63\0h\0\0\0\t\0\0\0\x2\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\b\0P\0i\0n\0k\0\0\0\n\0O\0\x63\0\x65\0\x61\0n\0\0\0\t\0\0\0\x3\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\n\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\f\0J\0u\0n\0g\0l\0\x65\0\0\0\t\0\0\0\x3\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\f\0\x46\0r\0u\0i\0t\0y\0\0\0\t\0\0\0\x2\0\0\0\n\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x14\0\x44\0\x61\0n\0\x63\0\x65\0\x66\0l\0o\0o\0r\0\0\0\t\0\0\0\x4\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\n\0\0\0\b\0P\0i\0n\0k\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\xe\0\x64\0\x65\0v\0i\0\x63\0\x65\0s\0\0\0\b\0\0\0\x1\0\0\0\x14\0\x44\0\x65\0s\0k\0 \0S\0t\0r\0i\0p\0\0\0\b\0\0\0\x2\0\0\0\x16\0\x65\0\x66\0\x66\0\x65\0\x63\0t\0_\0o\0p\0t\0s\0\0\0\b\0\0\0\f\0\0\0\x14\0W\0\x61\0v\0\x65\0l\0\x65\0n\0g\0t\0h\0\0\0\b\0\0\0\a\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0r\0o\0l\0l\0\0\0\x1\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0g\0r\0\x61\0\x64\0\0\0\x1\0\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x6@\b\0\0\0\0\0\0\0\0\0\b\0W\0\x61\0v\0\x65\0\0\0\b\0\0\0\x5\0\0\0\x14\0w\0i\0p\0\x65\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x2\0\0\0\x10\0w\0i\0p\0\x65\0_\0l\0\x65\0n\0\0\0\x2\0\0\0\x5\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xe6\x66\x66\x66\x66\x66\x66\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0w\0\x61\0v\0\x65\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x16\0\x63\0o\0l\0o\0r\0_\0\x66\0l\0\x61\0s\0h\0\0\0\n\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0u\0m\0\0\0\b\0\0\0\x3\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\f\0S\0i\0n\0g\0l\0\x65\0\0\0\b\0\0\0\x1\0\0\0\n\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\f\0S\0\x63\0r\0o\0l\0l\0\0\0\b\0\0\0\t\0\0\0\n\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x1\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x14\0m\0i\0\x64\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\x14\0l\0o\0w\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x14\0h\0i\0g\0h\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xef\xd7\n=p\xa3\xd7\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x6?\xc9\x99\x99\x99\x99\x99\x9a\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\n\0P\0o\0w\0\x65\0r\0\0\0\b\0\0\0\x5\0\0\0\xe\0s\0_\0\x63\0o\0u\0n\0t\0\0\0\x2\0\0\0\x19\0\0\0\xe\0s\0_\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\x1\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\x10\0G\0r\0\x61\0\x64\0i\0\x65\0n\0t\0\0\0\b\0\0\0\x4\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\xe\0r\0\x65\0v\0\x65\0r\0s\0\x65\0\0\0\x1\0\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\b\0\x46\0\x61\0\x64\0\x65\0\0\0\b\0\0\0\x3\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\x1\0\0\0\xe\0r\0\x65\0v\0\x65\0r\0s\0\x65\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\f\0\x45\0n\0\x65\0r\0g\0y\0\0\0\b\0\0\0\x5\0\0\0\n\0s\0\x63\0\x61\0l\0\x65\0\0\0\x6?\xec\xcc\xcc\xcc\xcc\xcc\xcd\0\0\0\x18\0r\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x18\0g\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\b\0\x62\0l\0u\0r\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x62\0_\0m\0u\0l\0t\0i\0p\0l\0i\0\x65\0r\0\0\0\x6?\xf0\0\0\0\0\0\0\0\0\0\x16\0\x43\0\x61\0l\0i\0\x62\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\x3\0\0\0\x2\0r\0\0\0\x2\0\0\0\x64\0\0\0\x2\0g\0\0\0\x2\0\0\0\x64\0\0\0\x2\0\x62\0\0\0\x2\0\0\0\x64\0\0\0\b\0\x42\0\x65\0\x61\0t\0\0\0\b\0\0\0\x2\0\0\0\n\0\x64\0\x65\0\x63\0\x61\0y\0\0\0\x6?\xe6\x66\x66\x66\x66\x66\x66\0\0\0\n\0\x63\0o\0l\0o\0r\0\0\0\n\0\0\0\x6\0R\0\x65\0\x64\0\0\0\b\0\x42\0\x61\0r\0s\0\0\0\b\0\0\0\x6\0\0\0\x14\0r\0o\0l\0l\0_\0s\0p\0\x65\0\x65\0\x64\0\0\0\x2\0\0\0\0\0\0\0\x18\0r\0\x65\0v\0\x65\0r\0s\0\x65\0_\0r\0o\0l\0l\0\0\0\x1\0\0\0\0\x14\0r\0\x65\0s\0o\0l\0u\0t\0i\0o\0n\0\0\0\x2\0\0\0\x4\0\0\0\f\0m\0i\0r\0r\0o\0r\0\0\0\x1\0\0\0\0\xe\0\x66\0l\0i\0p\0_\0l\0r\0\0\0\x1\0\0\0\0\x14\0\x63\0o\0l\0o\0r\0_\0m\0o\0\x64\0\x65\0\0\0\n\0\0\0\x10\0S\0p\0\x65\0\x63\0t\0r\0\x61\0l\0\0\0\x1a\0\x63\0o\0n\0\x66\0i\0g\0u\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\n\0\0\0\x1c\0\x63\0u\0r\0r\0\x65\0n\0t\0_\0\x65\0\x66\0\x66\0\x65\0\x63\0t\0\0\0\n\0\0\0\n\0P\0o\0w\0\x65\0r\0\0\0\b\0T\0Y\0P\0\x45\0\0\0\n\0\0\0\x16\0R\0\x61\0s\0p\0\x62\0\x65\0r\0r\0y\0P\0i\0\0\0\x32\0S\0O\0\x46\0T\0W\0\x41\0R\0\x45\0_\0G\0\x41\0M\0M\0\x41\0_\0\x43\0O\0R\0R\0\x45\0\x43\0T\0I\0O\0N\0\0\0\x1\x1\0\0\0\x10\0N\0_\0P\0I\0X\0\x45\0L\0S\0\0\0\x2\0\0\0\x96\0\0\0\x14\0N\0_\0\x46\0\x46\0T\0_\0\x42\0I\0N\0S\0\0\0\x2\0\0\0\x18\0\0\0\x1c\0M\0\x41\0X\0_\0\x42\0R\0I\0G\0H\0T\0N\0\x45\0S\0S\0\0\0\x2\0\0\0\xfa\0\0\0\xe\0L\0\x45\0\x44\0_\0P\0I\0N\0\0\0\x2\0\0\0\x12\0\0\0\x14\0L\0\x45\0\x44\0_\0I\0N\0V\0\x45\0R\0T\0\0\0\x1\0\0\0\0\x16\0L\0\x45\0\x44\0_\0\x46\0R\0\x45\0Q\0_\0H\0Z\0\0\0\x2\0\f5\0\0\0\0\xe\0L\0\x45\0\x44\0_\0\x44\0M\0\x41\0\0\0\x2\0\0\0\x5\0\0\0\x1a\0\x63\0o\0n\0\x66\0i\0g\0u\0r\0\x61\0t\0i\0o\0n\0\0\0\b\0\0\0\t\0\0\0\xe\0U\0S\0\x45\0_\0G\0U\0I\0\0\0\x1\x1\0\0\0\"\0N\0_\0R\0O\0L\0L\0I\0N\0G\0_\0H\0I\0S\0T\0O\0R\0Y\0\0\0\x2\0\0\0\x4\0\0\0(\0M\0I\0N\0_\0V\0O\0L\0U\0M\0\x45\0_\0T\0H\0R\0\x45\0S\0H\0O\0L\0\x44\0\0\0\x6?PbM\xd2\xf1\xa9\xfc\0\0\0\x1a\0M\0I\0N\0_\0\x46\0R\0\x45\0Q\0U\0\x45\0N\0\x43\0Y\0\0\0\x2\0\0\0\x14\0\0\0\x10\0M\0I\0\x43\0_\0R\0\x41\0T\0\x45\0\0\0\x2\0\0\xbb\x80\0\0\0\x1a\0M\0\x41\0X\0_\0\x46\0R\0\x45\0Q\0U\0\x45\0N\0\x43\0Y\0\0\0\x2\0\0\x46P\0\0\0\x1c\0M\0\x41\0X\0_\0\x42\0R\0I\0G\0H\0T\0N\0\x45\0S\0S\0\0\0\x2\0\0\0\xfa\0\0\0\x6\0\x46\0P\0S\0\0\0\x2\0\0\0<\0\0\0\x16\0\x44\0I\0S\0P\0L\0\x41\0Y\0_\0\x46\0P\0S\0\0\0\x1\0\0\0\0\f\0\x63\0o\0l\0o\0r\0s\0\0\0\b\0\0\0\t\0\0\0\f\0Y\0\x65\0l\0l\0o\0w\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\xffK\0\x87q\0.\0\0\0\n\0W\0h\0i\0t\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\xffK\xff\x87q\0.\0\0\0\x6\0R\0\x65\0\x64\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\0K\0\x87q\0.\0\0\0\f\0P\0u\0r\0p\0l\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3KPK\x5K\xfc\x87q\0.\0\0\0\b\0P\0i\0n\0k\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK\0K\xb2\x87q\0.\0\0\0\f\0O\0r\0\x61\0n\0g\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\xffK(K\0\x87q\0.\0\0\0\x14\0L\0i\0g\0h\0t\0 \0\x62\0l\0u\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\x1K\xf7K\xa1\x87q\0.\0\0\0\n\0G\0r\0\x65\0\x65\0n\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\0K\xffK\0\x87q\0.\0\0\0\b\0\x42\0l\0u\0\x65\0\0\0\x7f\0\0\0\xePyQt_PyObject\0\0\0\0\f\x80\x3K\0K\0K\xff\x87q\0.\0\0\0\x10\0G\0U\0I\0_\0o\0p\0t\0s\0\0\0\b\0\0\0\x5\0\0\0.\0R\0\x65\0\x61\0\x63\0t\0i\0v\0\x65\0 \0\x45\0\x66\0\x66\0\x65\0\x63\0t\0 \0\x42\0u\0t\0t\0o\0n\0s\0\0\0\x1\x1\0\0\0\x36\0N\0o\0n\0 \0R\0\x65\0\x61\0\x63\0t\0i\0v\0\x65\0 \0\x45\0\x66\0\x66\0\x65\0\x63\0t\0 \0\x42\0u\0t\0t\0o\0n\0s\0\0\0\x1\0\0\0\0\f\0G\0r\0\x61\0p\0h\0s\0\0\0\x1\x1\0\0\0\x1e\0\x46\0r\0\x65\0q\0u\0\x65\0n\0\x63\0y\0 \0R\0\x61\0n\0g\0\x65\0\0\0\x1\x1\0\0\0\x1c\0\x45\0\x66\0\x66\0\x65\0\x63\0t\0 \0O\0p\0t\0i\0o\0n\0s\0\0\0\x1\x1)" [MainWindow] -geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\xff\xff\xff\xf8\xff\xff\xff\xf8\0\0\a\x87\0\0\x4?\0\0\x2\x80\0\0\x1,\0\0\x5)\0\0\x3\xfb\0\0\0\0\x2\0\0\0\a\x80)" -state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\a\x80\0\0\x3\xf6\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0t\0o\0p\0_\0t\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\b\x1b\0\0\0\xda\0\0\n\xd1\0\0\x3\xdc\0\0\b\x1b\0\0\0\xda\0\0\n\xd1\0\0\x3\xdc\0\0\0\0\0\0\0\0\x14\xa0) +state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x2\xb7\0\0\x2\xd0\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0t\0o\0p\0_\0t\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) diff --git a/python/main.py b/python/main.py index 2aabf59..c25bb89 100644 --- a/python/main.py +++ b/python/main.py @@ -13,12 +13,12 @@ import lib.melbank as melbank import lib.devices as devices import random from PyQt5.QtCore import QSettings -if config.settings["configuration"]["USE_GUI"]: - from lib.qrangeslider import QRangeSlider - from lib.qfloatslider import QFloatSlider - import pyqtgraph as pg - from PyQt5.QtCore import * - from PyQt5.QtWidgets import * +#if config.settings["configuration"]["USE_GUI"]: +from lib.qrangeslider import QRangeSlider +from lib.qfloatslider import QFloatSlider +import pyqtgraph as pg +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * class Visualizer(): def __init__(self, board): @@ -1332,7 +1332,7 @@ def microphone_update(audio_samples): # Visualization for each board for board in boards: # Get visualization output for each board - audio_input = audio_datas[board]["vol"] > config.settings["configuration"]["MIN_VOLUME_THRESHOLD"] + audio_input = (audio_datas[board]["vol"]) > (config.settings["configuration"]["MIN_VOLUME_THRESHOLD"]) outputs[board] = visualizers[board].get_vis(audio_datas[board]["mel"], audio_input) # Map filterbank output onto LED strip(s) boards[board].show(outputs[board]) @@ -1359,8 +1359,8 @@ def microphone_update(audio_samples): app.processEvents() # Left in just in case prople dont use the gui - elif vol < config.settings["configuration"]["MIN_VOLUME_THRESHOLD"]: - print("No audio input. Volume below threshold. Volume: {}".format(vol)) + elif audio_datas[board]["vol"] < config.settings["configuration"]["MIN_VOLUME_THRESHOLD"]: + print("No audio input. Volume below threshold. Volume: {}".format(audio_datas[board]["vol"])) if config.settings["configuration"]["DISPLAY_FPS"]: print('FPS {:.0f} / {:.0f}'.format(fps, config.settings["configuration"]["FPS"]))