频谱图 PNG 返回 WAV 音频

问题描述 投票:0回答:1

我正在完成一项似乎无法完成的特殊任务。我有一堆音频,我将它们转换为频谱图 png(我使用 plt 保存的时频图)。我正在训练 GAN 来生成类似的频谱图,并希望将这些生成的频谱图转换回音频 .wav 文件。

这是我用来获取频谱图的:

y, sr = librosa.load(wav_file, sr=rate, duration=1)
stft = librosa.stft(y, n_fft=n_fft, hop_length=hop_length, win_length=win_length)
mag_spectrogram, phase_spectrogram = librosa.magphase(stft)
plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.amplitude_to_db(np.abs(mag_spectrogram), ref=np.max), sr=sr,   hop_length=hop_length, x_axis='time', y_axis='linear')

plt.gca().set_title('')
plt.colorbar().remove()
plt.axis('off')
plt.savefig("saved_mag_spec.png", bbox_inches='tight', pad_inches=0)

如何加载类似 plt 图形的频谱图,以便我可以单独从这些频谱图中重建音频?

我确实明白,使用此图作为频谱图并不是完全正确的表示方式,以便最终恢复音频。我相信如果我跟踪每个频谱图的相位信息,我可以使用 istft 甚至恢复音频。

问题在于幅度谱图或 stft 输出(和相位信息)本质上采用(freq_bins,帧)的形式。当我使用 librosa.specshow 将其转换为 png 频谱图时,我将频谱图的大小和形状更改为时间、频率分布。我如何加载此图像并跟踪相位信息,以便我可以使用此频谱图信息来生成音频。

python audio signal-processing librosa spectrogram
1个回答
0
投票

你似乎让你的生活变得更加困难。为什么首先将 GAN 结果转换为 PNG 文件?

您应该让 GAN 以 stft 或频谱图的形式生成结果,可以通过

istft
“消化”(您需要使用
np.exp
将频谱图转换为 stft)。您可以为 stft 的实部和虚部生成 2 通道频谱图。给定大量数据,GAN 应该学习如何产生“正确”的阶段。

另一个想法是另一个神经网络模型,它学习如何“恢复”频谱图的相位。注意:你无法真正恢复原来的相位,通过

abs
操作你会永远失去它。但你可以生成一些听起来合理的东西。

© www.soinside.com 2019 - 2024. All rights reserved.