Spaces:
Build error
Build error
import numpy as np | |
import tensorflow as tf | |
import matplotlib.pyplot as plt | |
import matplotlib | |
import librosa | |
from scipy.io.wavfile import write | |
k = 1e-16 | |
def np_log10(x): | |
numerator = np.log(x + 1e-16) | |
denominator = np.log(10) | |
return numerator / denominator | |
def sigmoid(x): | |
s = 1 / (1 + np.exp(-x)) | |
return s | |
def inv_sigmoid(s): | |
x = np.log((s / (1 - s)) + 1e-16) | |
return x | |
def spc_to_VAE_input(spc): | |
"""Restrict value range from 0 to 1.""" | |
return spc / (1 + spc) | |
def VAE_out_put_to_spc(o): | |
"""Inverse transform of function 'spc_to_VAE_input'.""" | |
return o / (1 - o + k) | |
def denoise(spc): | |
"""Filter back ground noise. (Not used.)""" | |
return np.maximum(0, spc - (2e-5)) | |
hop_length = 256 | |
win_length = 1024 | |
def np_power_to_db(S, amin=1e-16, top_db=80.0): | |
"""Helper method for scaling.""" | |
ref = np.max(S) | |
# set fixed value for ref | |
# 每个元素取max | |
log_spec = 10.0 * np_log10(np.maximum(amin, S)) | |
log_spec -= 10.0 * np_log10(np.maximum(amin, ref)) | |
log_spec = np.maximum(log_spec, np.max(log_spec) - top_db) | |
return log_spec | |
def show_spc(spc, resolution=(512, 256)): | |
"""Show a spectrogram.""" | |
spc = np.reshape(spc, resolution) | |
magnitude_spectrum = np.abs(spc) | |
log_spectrum = np_power_to_db(magnitude_spectrum) | |
plt.imshow(np.flipud(log_spectrum)) | |
plt.show() | |
def save_results(spectrogram, spectrogram_image_path, waveform_path): | |
"""Save the input 'spectrogram' and its waveform (reconstructed bu Griffin Lim) | |
to path provided by 'spectrogram_image_path' and 'waveform_path'.""" | |
# save image | |
magnitude_spectrum = np.abs(spectrogram) | |
log_spc = np_power_to_db(magnitude_spectrum) | |
log_spc = np.reshape(log_spc, (512, 256)) | |
matplotlib.pyplot.imsave(spectrogram_image_path, log_spc, vmin=-100, vmax=0, | |
origin='lower') | |
# save waveform | |
abs_spec = np.zeros((513, 256)) | |
abs_spec[:512, :] = abs_spec[:512, :] + np.sqrt(np.reshape(spectrogram, (512, 256))) | |
rec_signal = librosa.griffinlim(abs_spec, n_iter=32, hop_length=256, win_length=1024) | |
write(waveform_path, 16000, rec_signal) | |