CoolFace
Apppublic

justyoung/DiffSinger

sourceHugging Faceupdated 3y agoView on Hugging Face
1likes
audio.py57 linesDownload Raw Back to utils
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