X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=music_sampler%2Fhelpers.py;h=2199058cf58555b9ce2a3aec67d2da94340d1fb7;hb=6a3271735186a2b4d3c500f4f60c0c03a12bdd2f;hp=1788084b59100ce028aa31c36fb37bc81525830d;hpb=6ebe62478a49df22c55ef6a2b1200473500a7f80;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git diff --git a/music_sampler/helpers.py b/music_sampler/helpers.py index 1788084..2199058 100644 --- a/music_sampler/helpers.py +++ b/music_sampler/helpers.py @@ -5,6 +5,9 @@ import os import math import sounddevice as sd import logging +import gettext +gettext.install('music_sampler') +Logger = logging.getLogger("kivy") from . import sysfont @@ -28,11 +31,11 @@ def register_fonts(): symbola = find_font("Symbola") if ubuntu_regular is None: - error_print("Font Ubuntu regular could not be found, please install it.") - sys.exit() + error_print("Font Ubuntu regular could not be found, " + "please install it.", exit=True) if symbola is None: - error_print("Font Symbola could not be found, please install it.") - sys.exit() + error_print("Font Symbola could not be found, please install it.", + exit=True) if ubuntu_bold is None: warn_print("Font Ubuntu Bold could not be found.") @@ -59,71 +62,82 @@ def parse_args(): sys.argv.extend(kivy_args) + os.environ["KIVY_NO_CONFIG"] = 'true' + sys.argv.extend(["-c", "kivy:log_level:warning"]) + sys.argv.extend(["-c", "kivy:log_dir:/tmp"]) + sys.argv.extend(["-c", "kivy:log_name:/tmp/music_sampler_%_.txt"]) + parser = argparse.ArgumentParser( - description="A Music Sampler application.", + description=_("A Music Sampler application."), formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-c", "--config", default="config.yml", required=False, - help="Config file to load") + help=_("Config file to load")) parser.add_argument("-p", "--music-path", default=".", required=False, - help="Folder in which to find the music files") + help=_("Folder in which to find the music files")) parser.add_argument("-d", "--debug", nargs=0, action=DebugModeAction, - help="Print messages in console") + help=_("Print messages in console")) parser.add_argument("-m", "--builtin-mixing", action="store_true", - help="Make the mixing of sounds manually\ - (do it if the system cannot handle it correctly)") + help=_("Make the mixing of sounds manually\ + (do it if the system cannot handle it correctly)")) parser.add_argument("-l", "--latency", default="high", required=False, - help="Latency: low, high or number of seconds") + help=_("Latency: low, high or number of seconds")) parser.add_argument("-b", "--blocksize", default=0, type=int, required=False, - help="Blocksize: If not 0, the number of frames to take\ - at each step for the mixer") + help=_("Blocksize: If not 0, the number of frames to take\ + at each step for the mixer")) parser.add_argument("-f", "--frame-rate", default=44100, type=int, required=False, - help="Frame rate to play the musics") + help=_("Frame rate to play the musics")) parser.add_argument("-x", "--channels", default=2, type=int, required=False, - help="Number of channels to use") + help=_("Number of channels to use")) parser.add_argument("-s", "--sample-width", default=2, type=int, required=False, - help="Sample width (number of bytes for each frame)") + help=_("Sample width (number of bytes for each frame)")) parser.add_argument("-V", "--version", action="version", - help="Displays the current version and exits. Only use\ - in bundled package", + help=_("Displays the current version and exits. Only use\ + in bundled package"), version=show_version()) parser.add_argument("--device", action=SelectDeviceAction, - help="Select this sound device" + help=_("Select this sound device") ) parser.add_argument("--list-devices", nargs=0, action=ListDevicesAction, - help="List available sound devices" + help=_("List available sound devices") + ) + parser.add_argument("--no-focus-warning", + action='store_true', + help=_("Don't show warning when focus is lost") + ) + parser.add_argument("-L", "--language", + required=False, + default="fr", + help=_("Select another language") ) parser.add_argument('--', dest="args", - help="Kivy arguments. All arguments after this are interpreted\ - by Kivy. Pass \"-- --help\" to get Kivy's usage.") - - from kivy.logger import Logger - Logger.setLevel(logging.WARN) + help=_("Kivy arguments. All arguments after this are interpreted\ + by Kivy. Pass \"-- --help\" to get Kivy's usage.")) args = parser.parse_args(argv) @@ -135,6 +149,11 @@ def parse_args(): Config.channels = args.channels Config.sample_width = args.sample_width Config.builtin_mixing = args.builtin_mixing + Config.no_focus_warning = args.no_focus_warning + if args.language != 'en': + gettext.translation("music_sampler", + localedir=path() + '/locales', + languages=[args.language]).install() if args.music_path.endswith("/"): Config.music_path = args.music_path else: @@ -142,8 +161,7 @@ def parse_args(): class DebugModeAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): - from kivy.logger import Logger - Logger.setLevel(logging.DEBUG) + sys.argv.extend(["-c", "kivy:log_level:debug"]) class SelectDeviceAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): @@ -160,7 +178,7 @@ def show_version(): with open(path() + ".pyinstaller_commit", "r") as f: return f.read() else: - return "option '-v' can only be used in bundled package" + return _("option '-V' can only be used in bundled package") def duration_to_min_sec(duration): minutes = int(duration / 60) @@ -178,15 +196,29 @@ def gain(volume, old_volume=None): 20 * math.log10(max(volume, 0.1) / max(old_volume, 0.1)), max(volume, 0)] -def debug_print(message, with_trace=False): - from kivy.logger import Logger +def debug_print(message, with_trace=None): + if with_trace is None: + with_trace = (Logger.getEffectiveLevel() < logging.WARN) + with_trace &= (sys.exc_info()[0] is not None) + Logger.debug('MusicSampler: ' + message, exc_info=with_trace) -def error_print(message, with_trace=False): - from kivy.logger import Logger - Logger.error('MusicSampler: ' + message, exc_info=with_trace) +def error_print(message, exit=False, with_trace=None): + if with_trace is None: + with_trace = (Logger.getEffectiveLevel() < logging.WARN) + with_trace &= (sys.exc_info()[0] is not None) + + # FIXME: handle it correctly when in a thread + if exit: + Logger.critical('MusicSampler: ' + message, exc_info=with_trace) + sys.exit(1) + else: + Logger.error('MusicSampler: ' + message, exc_info=with_trace) + +def warn_print(message, with_trace=None): + if with_trace is None: + with_trace = (Logger.getEffectiveLevel() < logging.WARN) + with_trace &= (sys.exc_info()[0] is not None) -def warn_print(message, with_trace=False): - from kivy.logger import Logger Logger.warn('MusicSampler: ' + message, exc_info=with_trace)