从频谱图重建音频有一些librosa剪辑

2024-10-03 15:30:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做:


    melspectrogram = librosa.feature.melspectrogram(
        y=samples, sr=sample_rate, window=scipy.signal.hanning, n_fft=n_fft, hop_length=hop_length)

    print('melspectrogram.shape', melspectrogram.shape)
    print(melspectrogram)

    audio_signal = librosa.feature.inverse.mel_to_audio(
        melspectrogram, sr=sample_rate, n_fft=n_fft, hop_length=hop_length, window=scipy.signal.hanning)
    print(audio_signal, audio_signal.shape)

    sf.write('test.wav', audio_signal, sample_rate)

重建的wav文件听起来与原始文件非常相似,但有一些轻微的剪辑和音频伪影。有没有更完美的重建方法


Tags: samplefftsignalratescipywindowaudiolength
1条回答
网友
1楼 · 发布于 2024-10-03 15:30:24

正如documentation所述,关于mel_to_audio

This is primarily a convenience wrapper for:

S = librosa.feature.inverse.mel_to_stft(M)
y = librosa.griffinlim(S)

换句话说,生成的Mel谱图用于近似STFT幅度。然后使用Griffin Lim算法将STFT谱图转换回时域

从Mel到STFT谱图的转换不是完全无损的(由于Mel谱图的构造中使用了overlapping triangular filters,可能存在重叠的频率范围),并且从STFT幅度谱图到时域(即到音频)的转换肯定不是完美的,由于STFT幅度谱图缺少相位信息,必须使用Griffin Lim算法进行近似。这种近似从来都不是完美的,会引入相位伪影(金属“相位”)

不使用Mel比例,而是简单地使用STFT和逆STFT可以获得更好的结果。然而,只要在反演之前开始处理频域中的任何内容,就会遇到类似的问题,但可能没有使用Mel谱图时那么大

相关问题 更多 >