diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/extract_acoustic_feature.py | 3 | ||||
| -rw-r--r-- | scripts/voice_conversion_test.py | 66 |
2 files changed, 69 insertions, 0 deletions
diff --git a/scripts/extract_acoustic_feature.py b/scripts/extract_acoustic_feature.py index 169e3f3..e1794cf 100644 --- a/scripts/extract_acoustic_feature.py +++ b/scripts/extract_acoustic_feature.py @@ -5,6 +5,7 @@ extract alignments voices. import argparse import multiprocessing from pathlib import Path +from pprint import pprint import numpy @@ -36,6 +37,8 @@ parser.add_argument('--disable_alignment', action='store_true') parser.add_argument('--enable_overwrite', action='store_true') arguments = parser.parse_args() +pprint(dir(arguments)) + def make_feature( path, diff --git a/scripts/voice_conversion_test.py b/scripts/voice_conversion_test.py new file mode 100644 index 0000000..e0ed8c4 --- /dev/null +++ b/scripts/voice_conversion_test.py @@ -0,0 +1,66 @@ +import argparse +import glob +import multiprocessing +import re +from functools import partial +from pathlib import Path + +import librosa +import numpy + +from become_yukarin import VoiceChanger +from become_yukarin.config import create_from_json as create_config + +parser = argparse.ArgumentParser() +parser.add_argument('model_names', nargs='+') +parser.add_argument('-md', '--model_directory', type=Path, default=Path('/mnt/dwango/hiroshiba/become-yukarin/')) +parser.add_argument('-iwd', '--input_wave_directory', type=Path, + default=Path('/mnt/dwango/hiroshiba/become-yukarin/dataset/hiho-wave/hiho-pause-atr503-subset/')) +args = parser.parse_args() + +model_directory = args.model_directory # type: Path +input_wave_directory = args.input_wave_directory # type: Path + +paths_test = list(Path('./test_data/').glob('*.wav')) + + +def extract_number(f): + s = re.findall("\d+", str(f)) + return int(s[-1]) if s else -1 + + +def process(p: Path, voice_changer: VoiceChanger): + try: + if p.suffix in ['.npy', '.npz']: + p = glob.glob(str(input_wave_directory / p.stem) + '.*')[0] + p = Path(p) + wave = voice_changer(p) + librosa.output.write_wav(str(output / p.stem) + '.wav', wave.wave, wave.sampling_rate, norm=True) + except: + import traceback + print('error!', str(p)) + traceback.format_exc() + + +for model_name in args.model_names: + base_model = model_directory / model_name + config = create_config(base_model / 'config.json') + + input_paths = list(sorted([Path(p) for p in glob.glob(str(config.dataset.input_glob))])) + numpy.random.RandomState(config.dataset.seed).shuffle(input_paths) + path_train = input_paths[0] + path_test = input_paths[-1] + + model_paths = base_model.glob('predictor*.npz') + model_path = list(sorted(model_paths, key=extract_number))[-1] + print(model_path) + voice_changer = VoiceChanger(config, model_path) + + output = Path('./output').absolute() / base_model.name + output.mkdir(exist_ok=True) + + paths = [path_train, path_test] + paths_test + + process_partial = partial(process, voice_changer=voice_changer) + pool = multiprocessing.Pool() + pool.map(process_partial, paths) |
