X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=helpers%2F__init__.py;h=2339b9ba7852318d043abf45373a3a38f089089c;hb=1b4b78f5b6df7182ac066fcc26a7b4f0e8586a47;hp=b3ab1eba61d302a2cd249fd17c39fd4754a2c323;hpb=9de92b6dd2bd906f6a64fce7c90a6aff0dbb27a2;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git diff --git a/helpers/__init__.py b/helpers/__init__.py index b3ab1eb..2339b9b 100644 --- a/helpers/__init__.py +++ b/helpers/__init__.py @@ -1,68 +1,70 @@ # -*- coding: utf-8 -*- -from .music_file import * -from .mapping import * -from .lock import * -import yaml +import argparse +import sys +import os +import math -def parse_config(mapping): - stream = open("config.yml", "r") - config = yaml.load(stream) - stream.close() +class Config: + def __init__(self, **kwargs): + for arg in kwargs: + setattr(self, arg, kwargs[arg]) - aliases = config['aliases'] - seen_files = {} +config = Config(yml_file="config.yml") - file_lock = Lock("file") +def path(): + if getattr(sys, 'frozen', False): + return sys._MEIPASS + "/" + else: + path = os.path.dirname(os.path.realpath(__file__)) + return path + "/../" - channel_id = 0 +def parse_args(): + argv = sys.argv[1:] + sys.argv = sys.argv[:1] + if "--" in argv: + index = argv.index("--") + kivy_args = argv[index+1:] + argv = argv[:index] - for mapped_key in config['keys']: - key = mapping.find_by_unicode(mapped_key) - if key is None: - continue + sys.argv.extend(kivy_args) - for action in config['keys'][mapped_key]: - action_name = list(action)[0] - action_args = {} - if action[action_name] is None: - action[action_name] = [] + parser = argparse.ArgumentParser(description="A Music Sampler application.") + parser.add_argument("-c", "--config", + default="config.yml", + required=False, + help="Config file to load") + parser.add_argument("-V", "--version", + action="version", + help="Displays the current version and exits. Only use in bundled package", + version=show_version()) + parser.add_argument('--', + dest="args", + help="Kivy arguments. All arguments after this are interpreted by Kivy. Pass \"-- --help\" to get Kivy's usage.") + args = parser.parse_args(argv) - if 'include' in action[action_name]: - included = action[action_name]['include'] - del(action[action_name]['include']) + config.yml_file = args.config - if isinstance(included, str): - action[action_name].update(aliases[included], **action[action_name]) - else: - for included_ in included: - action[action_name].update(aliases[included_], **action[action_name]) +def show_version(): + if getattr(sys, 'frozen', False): + with open(path() + ".pyinstaller_commit", "r") as f: + return f.read() + else: + return "option '-v' can only be used in bundled package" - for argument in action[action_name]: - if argument == 'file': - filename = action[action_name]['file'] - if filename not in seen_files: - if 'name' in action[action_name]: - seen_files[filename] = MusicFile(filename, file_lock, channel_id, name = action[action_name]['name']) - else: - seen_files[filename] = MusicFile(filename, file_lock, channel_id) - channel_id = channel_id + 1 +def yml_file(): + return config.yml_file - action_args['music'] = seen_files[filename] +def duration_to_min_sec(duration): + minutes = int(duration / 60) + seconds = int(duration) % 60 + if minutes < 100: + return "{:2}:{:0>2}".format(minutes, seconds) + else: + return "{}:{:0>2}".format(minutes, seconds) - else: - action_args[argument] = action[action_name][argument] +def gain(volume, old_volume = None): + if old_volume is None: + return 20 * math.log10(volume / 100) + else: + return [20 * math.log10(max(volume, 0.1) / max(old_volume, 0.1)), max(volume, 0)] - key.add_action(action_name, **action_args) - - for key_property in config['key_properties']: - key = mapping.find_by_unicode(key_property) - if key is None: - continue - - if 'description' in config['key_properties'][key_property]: - key.set_description(config['key_properties'][key_property]['description']) - if 'color' in config['key_properties'][key_property]: - key.set_color(config['key_properties'][key_property]['color']) - - # Return the number of channels reserved - return (channel_id + 1, seen_files)