# -*- coding: utf-8 -*- import argparse import sys import os import math class Config: def __init__(self, **kwargs): for arg in kwargs: setattr(self, arg, kwargs[arg]) config = Config(yml_file="config.yml") def path(): if getattr(sys, 'frozen', False): return sys._MEIPASS + "/" else: path = os.path.dirname(os.path.realpath(__file__)) return path + "/../" 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] sys.argv.extend(kivy_args) 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) config.yml_file = args.config 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" def yml_file(): return config.yml_file 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) 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)]