Module music_df.scripts.search_for_feature
Functions
def main()-
Expand source code
def main(): args, remaining = parse_args() get_config = partial(Config, input_files=args.input_files) config = read_config_oc(args.config_file, remaining, get_config) for input_file in args.input_files: music_df = read(input_file) result = find_simultaneous_feature( music_df, config.feature_name, config.feature_values ) result = merge_contiguous_durations(result) result = [ tuple(((x, *time_to_bar_number_and_offset(music_df, x)) for x in t)) for t in result ] if not result: continue print(input_file) for r in result: print_result(r, indent=4) def parse_args()-
Expand source code
def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--config-file") parser.add_argument("--input-files", nargs="+") # remaining passed through to omegaconf args, remaining = parser.parse_known_args() return args, remaining def print_result(result: tuple[tuple[float, int, float], ...], indent: int = 0)-
Expand source code
def print_result(result: tuple[tuple[float, int, float], ...], indent: int = 0): def _format(t: tuple[float, int, float]) -> str: return f"m{t[1]}.{t[2] + 1:.3} (offset={t[0]})" print(f"{' ' * indent}From {_format(result[0])} to {_format(result[1])}")
Classes
class Config (feature_name: str, feature_values: Iterable[Any], input_files: Iterable[str])-
Expand source code
@dataclass class Config: feature_name: str feature_values: Iterable[Any] input_files: Iterable[str]Config(feature_name: str, feature_values: Iterable[Any], input_files: Iterable[str])
Instance variables
var feature_name : strvar feature_values : Iterable[Any]var input_files : Iterable[str]