Download utils/utils.py from XDHDD/Fckngproj: direct link, hf CLI and curl.
- Browser
- Download file 2.26 kB
-
https://huggingface.co/spaces/XDHDD/Fckngproj/resolve/main/utils/utils.py
- Command line
-
hf download hf://spaces/XDHDD/Fckngproj/utils/utils.py
-
curl -L -o utils.py https://huggingface.co/spaces/XDHDD/Fckngproj/resolve/main/utils/utils.py
2.26 kB
| import os | |
| import librosa | |
| import librosa.display | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | |
| from config import CONFIG | |
| def mkdir_p(mypath): | |
| """Creates a directory. equivalent to using mkdir -p on the command line""" | |
| from errno import EEXIST | |
| from os import makedirs, path | |
| try: | |
| makedirs(mypath) | |
| except OSError as exc: # Python >2.5 | |
| if exc.errno == EEXIST and path.isdir(mypath): | |
| pass | |
| else: | |
| raise | |
| def visualize(target, input, recon, path): | |
| sr = CONFIG.DATA.sr | |
| window_size = 1024 | |
| window = np.hanning(window_size) | |
| stft_hr = librosa.core.spectrum.stft(target, n_fft=window_size, hop_length=512, window=window) | |
| stft_hr = 2 * np.abs(stft_hr) / np.sum(window) | |
| stft_lr = librosa.core.spectrum.stft(input, n_fft=window_size, hop_length=512, window=window) | |
| stft_lr = 2 * np.abs(stft_lr) / np.sum(window) | |
| stft_recon = librosa.core.spectrum.stft(recon, n_fft=window_size, hop_length=512, window=window) | |
| stft_recon = 2 * np.abs(stft_recon) / np.sum(window) | |
| fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharey=True, sharex=True, figsize=(16, 10)) | |
| ax1.title.set_text('Target signal') | |
| ax2.title.set_text('Lossy signal') | |
| ax3.title.set_text('Reconstructed signal') | |
| canvas = FigureCanvas(fig) | |
| p = librosa.display.specshow(librosa.amplitude_to_db(stft_hr), ax=ax1, y_axis='linear', x_axis='time', sr=sr) | |
| p = librosa.display.specshow(librosa.amplitude_to_db(stft_lr), ax=ax2, y_axis='linear', x_axis='time', sr=sr) | |
| p = librosa.display.specshow(librosa.amplitude_to_db(stft_recon), ax=ax3, y_axis='linear', x_axis='time', sr=sr) | |
| mkdir_p(path) | |
| fig.savefig(os.path.join(path, 'spec.png')) | |
| def get_power(x, nfft): | |
| S = librosa.stft(x, n_fft=nfft) | |
| S = np.log(np.abs(S) ** 2 + 1e-8) | |
| return S | |
| def LSD(x_hr, x_pr): | |
| S1 = get_power(x_hr, nfft=2048) | |
| S2 = get_power(x_pr, nfft=2048) | |
| lsd = np.mean(np.sqrt(np.mean((S1 - S2) ** 2 + 1e-8, axis=-1)), axis=0) | |
| S1 = S1[-(len(S1) - 1) // 2:, :] | |
| S2 = S2[-(len(S2) - 1) // 2:, :] | |
| lsd_high = np.mean(np.sqrt(np.mean((S1 - S2) ** 2 + 1e-8, axis=-1)), axis=0) | |
| return lsd, lsd_high | |