Spaces:
Build error
Build error
| import argparse | |
| import glob | |
| import os | |
| from argparse import RawTextHelpFormatter | |
| from multiprocessing import Pool | |
| from shutil import copytree | |
| import librosa | |
| import soundfile as sf | |
| from tqdm import tqdm | |
| def resample_file(func_args): | |
| filename, output_sr = func_args | |
| y, sr = librosa.load(filename, sr=output_sr) | |
| sf.write(filename, y, sr) | |
| def resample_files(input_dir, output_sr, output_dir=None, file_ext="wav", n_jobs=10): | |
| if output_dir: | |
| print("Recursively copying the input folder...") | |
| copytree(input_dir, output_dir) | |
| input_dir = output_dir | |
| print("Resampling the audio files...") | |
| audio_files = glob.glob(os.path.join(input_dir, f"**/*.{file_ext}"), recursive=True) | |
| print(f"Found {len(audio_files)} files...") | |
| audio_files = list(zip(audio_files, len(audio_files) * [output_sr])) | |
| with Pool(processes=n_jobs) as p: | |
| with tqdm(total=len(audio_files)) as pbar: | |
| for _, _ in enumerate(p.imap_unordered(resample_file, audio_files)): | |
| pbar.update() | |
| print("Done !") | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser( | |
| description="""Resample a folder recusively with librosa | |
| Can be used in place or create a copy of the folder as an output.\n\n | |
| Example run: | |
| python TTS/bin/resample.py | |
| --input_dir /root/LJSpeech-1.1/ | |
| --output_sr 22050 | |
| --output_dir /root/resampled_LJSpeech-1.1/ | |
| --file_ext wav | |
| --n_jobs 24 | |
| """, | |
| formatter_class=RawTextHelpFormatter, | |
| ) | |
| parser.add_argument( | |
| "--input_dir", | |
| type=str, | |
| default=None, | |
| required=True, | |
| help="Path of the folder containing the audio files to resample", | |
| ) | |
| parser.add_argument( | |
| "--output_sr", | |
| type=int, | |
| default=22050, | |
| required=False, | |
| help="Samlple rate to which the audio files should be resampled", | |
| ) | |
| parser.add_argument( | |
| "--output_dir", | |
| type=str, | |
| default=None, | |
| required=False, | |
| help="Path of the destination folder. If not defined, the operation is done in place", | |
| ) | |
| parser.add_argument( | |
| "--file_ext", | |
| type=str, | |
| default="wav", | |
| required=False, | |
| help="Extension of the audio files to resample", | |
| ) | |
| parser.add_argument( | |
| "--n_jobs", type=int, default=None, help="Number of threads to use, by default it uses all cores" | |
| ) | |
| args = parser.parse_args() | |
| resample_files(args.input_dir, args.output_sr, args.output_dir, args.file_ext, args.n_jobs) | |