def undo_melspect(spect, sample_rate=SAMPLE_RATE, fps=FPS, frame_len=FRAME_LEN, min_freq=MIN_FREQ, max_freq=MAX_FREQ, invert_melbank_method='transpose', phases='random', normalize=False):
"""
Resynthesizes a mel spectrogram into a numpy array of samples.
"""
# undo logarithmic scaling
spect = undo_logarithmize(spect)
# undo Mel filterbank
spect = undo_melfilter(spect, sample_rate, frame_len, min_freq, max_freq, invert_melbank_method)
# randomize or reuse phases
if phases == 'random':
spect = spect * np.exp(np.pi*2.j*np.random.random(spect.shape))
elif phases is not None:
spect = spect * np.exp(1.j * np.angle(phases))
# undo STFT
hop_size = sample_rate / fps
samples = undo_stft(spect, hop_size, frame_len)
# normalize if needed
if normalize:
samples -= samples.mean()
samples /= np.abs(samples).max()
return samples.astype(np.float32)
评论列表
文章目录