所以我正在创建一些带有 librosa 的频谱图以保存为图像,之后我打算直接对图像进行修改(即添加随机噪声等),然后我想从该图像重建音频。
不管怎样,一些研究让我找到了类似过程的例子(参见here https://stackoverflow.com/questions/61132574/can-i-convert-spectrograms-generated-with-librosa-back-to-audio or here https://stackoverflow.com/questions/34710011/how-do-i-go-from-sound-to-spectrum-then-back-to-sound-in-python)但没有什么像我想做的那样,即获取频谱图的 png/jpg 图像并将其转换回可用的音频文件。
这是我用来生成规格图像的完整代码:
import librosa
from librosa import display
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
filename = librosa.util.example_audio_file()
y, sr = librosa.load(filename)
window_size = 1024
window = np.hanning(window_size)
stft = librosa.core.spectrum.stft(y, n_fft=window_size, hop_length=512, window=window)
out = 2 * np.abs(stft) / np.sum(window)
fig = plt.Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
ax.axis('tight')
ax.axis('off')
p = librosa.display.specshow(librosa.amplitude_to_db(out, ref=np.max), ax=ax, y_axis='log', x_axis='time')
fig.savefig('spectrogram.png')
这会产生这个精确的图像:频谱图.png https://i.stack.imgur.com/e5tU7.png
但是像 librosa.istft 或 librosa.griffinlim 这样的函数期望 librosa.core.spectrum.stft 的输出,并且我无法仅从图像文件反转整个过程。假设我有这张图片,有什么方法可以重新构建音频(即使它是有损的)?还需要哪些类型的其他信息?我该怎么做?
提前致谢。