diff --git a/volia/data.py b/volia/data.py index 744a03a..b7afb0b 100644 --- a/volia/data.py +++ b/volia/data.py @@ -8,7 +8,6 @@ import core.data - def filter_file(file, filter, outfile): file_path = file filter_path = filter @@ -24,8 +23,28 @@ def filter_file(file, filter, outfile): def convert(file, type_from, type): + pass +def utt2dur(wavscp: str, outfile: str): + + import wave + import contextlib + + with open(wavscp, "r") as f, open(outfile, "w") as of: + for line in f: + splited = line.replace("\n", "").split(" ") + id_ = splited[0] + wav_ = splited[1] + duration = 0 + + with contextlib.closing(wave.open(wav_,'r')) as wav_f: + frames = wav_f.getnframes() + rate = wav_f.getframerate() + duration = frames / float(rate) + + of.write(f"{id_} {duration}\n") + if __name__ == "__main__": # Main parser @@ -46,6 +65,16 @@ if __name__ == "__main__": parser_convert.add_argument("--type", choices=["old-masseffect", "new-masseffect"], required=True) parser_convert.set_defaults(which="convert") + # utt2dur + parser_utt2dur = subparsers.add_parser("utt2dur", help="generate utt2dur file") + parser_utt2dur.add_argument("--wavscp", type=str, help="wav file", required=True) + parser_utt2dur.add_argument("--outfile", type=str, default="utt2dur", help="output file") + parser_utt2dur.set_defaults(which="utt2dur") + + # TODO: utt2label_to_label2utt + + # TODO: label2utt_to_utt2label + # Parse args = parser.parse_args() @@ -53,6 +82,7 @@ if __name__ == "__main__": runner = SubCommandRunner({ "convert" : convert, "filter": filter_file, + "utt2dur": utt2dur }) runner.run(args.which, args.__dict__, remove="which")