Mercurial > hg > auditok
changeset 174:ec7b0b3c9818
Put cmdline util functions in a separate module
author | Amine Sehili <amine.sehili@gmail.com> |
---|---|
date | Mon, 11 Mar 2019 20:14:46 +0100 |
parents | f35c0a18f4cb |
children | 592ec1821452 |
files | auditok/cmdline_util.py |
diffstat | 1 files changed, 79 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/auditok/cmdline_util.py Mon Mar 11 20:14:46 2019 +0100 @@ -0,0 +1,79 @@ +import sys +import logging + + +LOGGER_NAME = "AUDITOK_LOGGER" + +class TimeFormatError(Exception): + pass + +def make_kwargs(args_namespace): + kwargs = {'min_dur' : args_namespace.min_duration, + 'max_dur' : args_namespace.max_duration, + 'max_silence' : args_namespace.max_silence, + 'drop_trailing_silence': args_namespace.drop_trailing_silence, + 'strict_min_length' : args_namespace.strict_min_length, + 'energy_threshold' : args_namespace.energy_threshold, + 'max_read_time' : args_namespace.max_time, + 'analysis_window' : args_namespace.analysis_window, + 'sampling_rate' : args_namespace.sampling_rate, + 'sample_with' : args_namespace.sample_width, + 'channels' : args_namespace.channels, + 'use_channel' : args_namespace.use_channel, + 'input_type' : args_namespace.input_type, + 'output_type' : args_namespace.output_type, + 'large_file' : args_namespace.large_file, + 'frames_per_buffer' : args_namespace.frame_per_buffer, + 'input_device_index' : args_namespace.input_device_index} + return kwargs + + +def make_duration_fromatter(fmt): + """ + Accepted format directives: %i %s %m %h + """ + # check directives are correct + + if fmt == "%S": + def fromatter(seconds): + return "{:.3f}".format(seconds) + + elif fmt == "%I": + def fromatter(seconds): + return "{0}".format(int(seconds * 1000)) + else: + fmt = fmt.replace("%h", "{hrs:d}") + fmt = fmt.replace("%m", "{mins:d}") + fmt = fmt.replace("%s", "{secs:d}") + fmt = fmt.replace("%i", "{millis:03d}") + try: + i = fmt.index("%") + raise TimeFormatError("Unknow time format directive '{0}'".format(fmt[i : i + 2])) + except ValueError: + pass + + def fromatter(seconds): + millis = int(seconds * 1000) + hrs, millis = divmod(millis, 3600000) + mins, millis = divmod(millis, 60000) + secs, millis = divmod(millis, 1000) + return fmt.format(hrs=hrs, mins=mins, secs=secs, millis=millis) + return fromatter + + +def make_logger(debug_stdout=False, debug_file=None): + if not debug_stdout and debug_file is None: + return None + logger = logging.getLogger(LOGGER_NAME) + if debug_stdout: + handler = logging.StreamHandler(sys.stdout) + handler.setLevel(logging.DEBUG) + logger.addHandler(handler) + + if debug_file is not None: + handler = logging.FileHandler(debug_file, "w") + fmt = logging.Formatter("[%(asctime)s] | %(message)s") + handler.setFormatter(fmt) + handler.setLevel(logging.DEBUG) + logger.addHandler(handler) + return logger \ No newline at end of file