import math
import sounddevice as sd
import logging
+import gettext
+gettext.install('music_sampler')
Logger = logging.getLogger("kivy")
from . import sysfont
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.")
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.")
+ help=_("Kivy arguments. All arguments after this are interpreted\
+ by Kivy. Pass \"-- --help\" to get Kivy's usage."))
args = parser.parse_args(argv)
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:
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)
20 * math.log10(max(volume, 0.1) / max(old_volume, 0.1)),
max(volume, 0)]
-def debug_print(message, with_trace=False):
+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):
- 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):
Logger.warn('MusicSampler: ' + message, exc_info=with_trace)