justyoung/DiffSinger
1
1import subprocess2import matplotlib3 4matplotlib.use('Agg')5import librosa6import librosa.filters7import numpy as np8from scipy import signal9from scipy.io import wavfile10 11 12def save_wav(wav, path, sr, norm=False):13 if norm:14 wav = wav / np.abs(wav).max()15 wav *= 3276716 # proposed by @dsmiller17 wavfile.write(path, sr, wav.astype(np.int16))18 19 20def get_hop_size(hparams):21 hop_size = hparams['hop_size']22 if hop_size is None:23 assert hparams['frame_shift_ms'] is not None24 hop_size = int(hparams['frame_shift_ms'] / 1000 * hparams['audio_sample_rate'])25 return hop_size26 27 28###########################################################################################29def _stft(y, hparams):30 return librosa.stft(y=y, n_fft=hparams['fft_size'], hop_length=get_hop_size(hparams),31 win_length=hparams['win_size'], pad_mode='constant')32 33 34def _istft(y, hparams):35 return librosa.istft(y, hop_length=get_hop_size(hparams), win_length=hparams['win_size'])36 37 38def librosa_pad_lr(x, fsize, fshift, pad_sides=1):39 '''compute right padding (final frame) or both sides padding (first and final frames)40 '''41 assert pad_sides in (1, 2)42 # return int(fsize // 2)43 pad = (x.shape[0] // fshift + 1) * fshift - x.shape[0]44 if pad_sides == 1:45 return 0, pad46 else:47 return pad // 2, pad // 2 + pad % 248 49 50# Conversions51def amp_to_db(x):52 return 20 * np.log10(np.maximum(1e-5, x))53 54 55def normalize(S, hparams):56 return (S - hparams['min_level_db']) / -hparams['min_level_db']57 