diff options
| author | Hiroshiba Kazuyuki <hihokaruta@gmail.com> | 2018-01-12 07:56:33 +0900 |
|---|---|---|
| committer | Hiroshiba Kazuyuki <hihokaruta@gmail.com> | 2018-01-12 07:56:33 +0900 |
| commit | f9185301a22f1632b16dd5266197bb40cb7c302e (patch) | |
| tree | ae89f42c569aed32fb40fd47958b8869afb8a6aa | |
| parent | f0d5136fc22f1ed0b076b237584b2b822a7a0ca0 (diff) | |
超解像用のスペクトログラム切り出し
| -rw-r--r-- | scripts/extract_spectrogram_pair.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/scripts/extract_spectrogram_pair.py b/scripts/extract_spectrogram_pair.py new file mode 100644 index 0000000..02108fc --- /dev/null +++ b/scripts/extract_spectrogram_pair.py @@ -0,0 +1,83 @@ +""" +extract low and high quality spectrogram data. +""" + +import argparse +import multiprocessing +from pathlib import Path +from pprint import pprint + +import numpy +import pysptk +import pyworld + +from become_yukarin.dataset.dataset import AcousticFeatureProcess +from become_yukarin.dataset.dataset import WaveFileLoadProcess +from become_yukarin.param import AcousticFeatureParam +from become_yukarin.param import VoiceParam + +base_voice_param = VoiceParam() +base_acoustic_feature_param = AcousticFeatureParam() + +parser = argparse.ArgumentParser() +parser.add_argument('--input_directory', '-i', type=Path) +parser.add_argument('--output_directory', '-o', type=Path) +parser.add_argument('--sample_rate', type=int, default=base_voice_param.sample_rate) +parser.add_argument('--top_db', type=float, default=base_voice_param.top_db) +parser.add_argument('--pad_second', type=float, default=base_voice_param.pad_second) +parser.add_argument('--frame_period', type=int, default=base_acoustic_feature_param.frame_period) +parser.add_argument('--order', type=int, default=base_acoustic_feature_param.order) +parser.add_argument('--alpha', type=float, default=base_acoustic_feature_param.alpha) +parser.add_argument('--enable_overwrite', action='store_true') +arguments = parser.parse_args() + +pprint(dir(arguments)) + + +def generate_file(path): + out = Path(arguments.output_directory, path.stem + '.npy') + if out.exists() and not arguments.enable_overwrite: + return + + # load wave and padding + wave_file_load_process = WaveFileLoadProcess( + sample_rate=arguments.sample_rate, + top_db=arguments.top_db, + pad_second=arguments.pad_second, + ) + wave = wave_file_load_process(path, test=True) + + # make acoustic feature + acoustic_feature_process = AcousticFeatureProcess( + frame_period=arguments.frame_period, + order=arguments.order, + alpha=arguments.alpha, + ) + feature = acoustic_feature_process(wave, test=True).astype_only_float(numpy.float32) + high_spectrogram = feature.spectrogram + + fftlen = pyworld.get_cheaptrick_fft_size(arguments.sample_rate) + low_spectrogram = pysptk.mc2sp( + feature.mfcc, + alpha=arguments.alpha, + fftlen=fftlen, + ) + + # save + numpy.save(out.absolute(), { + 'low': low_spectrogram, + 'high': high_spectrogram, + }) + print('saved!', out) + + +def main(): + paths = list(sorted(arguments.input_directory.glob('*'))) + arguments.output_directory.mkdir(exist_ok=True) + + pool = multiprocessing.Pool() + pool.map(generate_file, paths) + + +if __name__ == '__main__': + main() |
