diff options
| author | Hiroshiba Kazuyuki <kazuyuki_hiroshiba@dwango.co.jp> | 2017-12-30 17:45:34 +0900 |
|---|---|---|
| committer | Hiroshiba Kazuyuki <kazuyuki_hiroshiba@dwango.co.jp> | 2017-12-30 17:45:34 +0900 |
| commit | 123fd90875f0b3d18192712a97008beb1493243a (patch) | |
| tree | 2d5aff5b139aa40ad38adefbc1ded6ab4226d36b /scripts/voice_conversion_test.py | |
| parent | 3b38bf420774f2a7f718be927689b67446e680c9 (diff) | |
w/o cropping mode
Diffstat (limited to 'scripts/voice_conversion_test.py')
| -rw-r--r-- | scripts/voice_conversion_test.py | 66 |
1 files changed, 66 insertions, 0 deletions
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) |
