Mercurial > hg > auditok
view auditok/cmdline_util.py @ 234:8b3c11cad8d8
Raise TooSamllBlockDuration in AudioDataSource instead of ValueError
author | Amine Sehili <amine.sehili@gmail.com> |
---|---|
date | Fri, 19 Jul 2019 23:01:36 +0100 |
parents | 00790b3d5aa2 |
children | 7652b6115c2d |
line wrap: on
line source
import sys import logging from collections import namedtuple LOGGER_NAME = "AUDITOK_LOGGER" KeywordArguments = namedtuple("KeywordArguments", ["io", "split"]) class TimeFormatError(Exception): pass def make_kwargs(args_ns): if args_ns.output_main is None: record = args_ns.plot or (args_ns.save_image is not None) else: record = False try: use_channel = int(args_ns.use_channel) except ValueError: use_channel = args_ns.use_channel io_kwargs = { "max_read": args_ns.max_time, "block_dur": args_ns.analysis_window, "sampling_rate": args_ns.sampling_rate, "sample_width": args_ns.sample_width, "channels": args_ns.channels, "use_channel": use_channel, "input_type": args_ns.input_type, "output_type": args_ns.output_type, "large_file": args_ns.large_file, "frames_per_buffer": args_ns.frame_per_buffer, "input_device_index": args_ns.input_device_index, "record": record, } split_kwargs = { "min_dur": args_ns.min_duration, "max_dur": args_ns.max_duration, "max_silence": args_ns.max_silence, "drop_trailing_silence": args_ns.drop_trailing_silence, "strict_min_dur": args_ns.strict_min_duration, "energy_threshold": args_ns.energy_threshold, } return KeywordArguments(io_kwargs, split_kwargs) def make_duration_fromatter(fmt): """ Accepted format directives: %i %s %m %h """ 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