Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
prophesier
GitHub Repository: prophesier/diff-svc
Path: blob/main/utils/audio.py
694 views
1
import subprocess
2
import matplotlib
3
4
matplotlib.use('Agg')
5
import librosa
6
import librosa.filters
7
import numpy as np
8
from scipy import signal
9
from scipy.io import wavfile
10
11
12
def save_wav(wav, path, sr, norm=False):
13
if norm:
14
wav = wav / np.abs(wav).max()
15
wav *= 32767
16
# proposed by @dsmiller
17
wavfile.write(path, sr, wav.astype(np.int16))
18
19
20
def get_hop_size(hparams):
21
hop_size = hparams['hop_size']
22
if hop_size is None:
23
assert hparams['frame_shift_ms'] is not None
24
hop_size = int(hparams['frame_shift_ms'] / 1000 * hparams['audio_sample_rate'])
25
return hop_size
26
27
28
###########################################################################################
29
def _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
34
def _istft(y, hparams):
35
return librosa.istft(y, hop_length=get_hop_size(hparams), win_length=hparams['win_size'])
36
37
38
def 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, pad
46
else:
47
return pad // 2, pad // 2 + pad % 2
48
49
50
# Conversions
51
def amp_to_db(x):
52
return 20 * np.log10(np.maximum(1e-5, x))
53
54
55
def normalize(S, hparams):
56
return (S - hparams['min_level_db']) / -hparams['min_level_db']
57
58