Spaces:
Running
on
Zero
Running
on
Zero
| import os | |
| import torch | |
| import torchaudio | |
| import numpy as np | |
| import argparse | |
| import librosa | |
| import scipy | |
| # PCS400 parameters | |
| PCS400 = np.ones(201) | |
| PCS400[0:3] = 1 | |
| PCS400[3:5] = 1.070175439 | |
| PCS400[5:8] = 1.182456140 | |
| PCS400[8:10] = 1.287719298 | |
| PCS400[10:110] = 1.4 # Pre Set | |
| PCS400[110:130] = 1.322807018 | |
| PCS400[130:160] = 1.238596491 | |
| PCS400[160:190] = 1.161403509 | |
| PCS400[190:202] = 1.077192982 | |
| maxv = np.iinfo(np.int16).max | |
| def Sp_and_phase(signal): | |
| signal_length = signal.shape[0] | |
| n_fft = 400 | |
| hop_length = 100 | |
| y_pad = librosa.util.fix_length(signal, size=signal_length + n_fft // 2) | |
| F = librosa.stft(y_pad, n_fft=400, hop_length=100, win_length=400, window=scipy.signal.windows.hamming(400)) | |
| Lp = PCS400 * np.transpose(np.log1p(np.abs(F)), (1, 0)) | |
| phase = np.angle(F) | |
| NLp = np.transpose(Lp, (1, 0)) | |
| return NLp, phase, signal_length | |
| def SP_to_wav(mag, phase, signal_length): | |
| mag = np.expm1(mag) | |
| Rec = np.multiply(mag, np.exp(1j*phase)) | |
| result = librosa.istft(Rec, | |
| hop_length=100, | |
| win_length=400, | |
| window=scipy.signal.windows.hamming(400), | |
| length=signal_length) | |
| return result | |
| def cal_pcs(signal_wav): | |
| noisy_LP, Nphase, signal_length = Sp_and_phase(signal_wav.squeeze()) | |
| enhanced_wav = SP_to_wav(noisy_LP, Nphase, signal_length) | |
| enhanced_wav = enhanced_wav/np.max(abs(enhanced_wav)) | |
| return enhanced_wav | |