Spaces:
Runtime error
Runtime error
import argparse | |
import librosa | |
import numpy as np | |
import os | |
import scipy | |
import scipy.io.wavfile | |
import sys | |
from glob import glob | |
from tqdm import tqdm | |
from joblib import Parallel, delayed | |
def check_directories(dir_input, dir_output): | |
if not os.path.exists(dir_input): | |
sys.exit("Error: Input directory does not exist: {}".format(dir_input)) | |
if not os.path.exists(dir_output): | |
sys.exit("Error: Output directory does not exist: {}".format(dir_output)) | |
abs_a = os.path.abspath(dir_input) | |
abs_b = os.path.abspath(dir_output) | |
if abs_a == abs_b: | |
sys.exit("Error: Paths are the same: {}".format(abs_a)) | |
def resample_file(input_filename, output_filename, sample_rate): | |
mono = ( | |
True # librosa converts signal to mono by default, so I'm just surfacing this | |
) | |
audio, existing_rate = librosa.load(input_filename, sr=sample_rate, mono=mono) | |
audio /= 1.414 # Scale to [-1.0, 1.0] | |
audio *= 32767 # Scale to int16 | |
audio = audio.astype(np.int16) | |
scipy.io.wavfile.write(output_filename, sample_rate, audio) | |
def downsample_wav_files(input_dir, output_dir, output_sample_rate): | |
check_directories(input_dir, output_dir) | |
inp_wav_paths = glob(input_dir + "/*.wav") | |
out_wav_paths = [ | |
os.path.join(output_dir, os.path.basename(p)) for p in inp_wav_paths | |
] | |
_ = Parallel(n_jobs=-1)( | |
delayed(resample_file)(i, o, output_sample_rate) | |
for i, o in tqdm(zip(inp_wav_paths, out_wav_paths)) | |
) | |
def parse_args(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--input_dir", "-i", type=str, required=True) | |
parser.add_argument("--output_dir", "-o", type=str, required=True) | |
parser.add_argument("--output_sample_rate", "-s", type=int, required=True) | |
return parser.parse_args() | |
if __name__ == "__main__": | |
args = parse_args() | |
downsample_wav_files(args.input_dir, args.output_dir, args.output_sample_rate) | |
print(f"\n\tCompleted") | |