python - Librosa 的逆梅尔谱图到 stft 需要很长时间
问题描述
我目前正在尝试将 mel 频谱图转换回音频文件,但是,librosa 的 mel_to_stft 函数需要很长时间(最多 15 分钟)才能读取以 384kHz 采样的 30 秒 .wav 文件。
以下是我的代码:
# Code for high pass filter
def butter_highpass(cutoff, fs, order=5):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='high', analog=False)
return b, a
def butter_highpass_filter(data, cutoff, fs, order=5):
b, a = butter_highpass(cutoff, fs, order=order)
y = filtfilt(b, a, data)
return y
def high_pass_filter(data, sr):
# set as a highpass filter for 500 Hz
filtered_signal = butter_highpass_filter(data, 500, sr, order=5)
return filtered_signal
example_dir = '/Test/test.wav'
sr, data = wavfile.read(example_dir)
des_sr = 44100
data_resamp = samplerate.resample(data, des_sr/sr, 'sinc_best')
data_hp = high_pass_filter(data_resamp, des_sr)
mel_spect = librosa.feature.melspectrogram(y=data_resamp, sr=des_sr)
S = librosa.feature.inverse.mel_to_stft(mel_spect)
y = librosa.griffinlim(S)
解决方案
Griffin-Lim 是一种迭代方法,用于估计从仅幅度频谱图所需的相位信息。librosa 实现中的迭代次数可以调整(n_iter
)。减少它会加快速度,但通常速度很慢。
频谱处理后返回波形可以通过以下方式加速:
- 使用一次性近似方法,如神经网络。例如使用多头卷积神经网络的快速频谱图反演
- 通过使用原始相位信息而不是根据修改后的幅度谱图来估计它。这要求相位频谱图可用(不仅仅是幅度),但在对音频文件进行频谱处理时通常会出现这种情况。
推荐阅读
- delphi - 如何将 Delphi 10 与 NexusDB 旧版本连接起来
- javascript - 谷歌助手和节点红色设置
- html - 基于 SVG 模式的分隔 div
- redux - 在操作中构建部分状态以更新 REST API
- android - 在 Android 中跳过 Firebase Firestore 侦听器
- javascript - import vue.js 报错 Uncaught SyntaxError: Unexpected identifier
- r - boot.ci() 无法计算置信区间
- laravel - Docker /user/sbin/apache2ctl:未找到
- laravel-5.7 - laravel5.7发送验证邮件出错
- python - HCF Python 程序未调试