欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

如何提取出一首歌曲的梅尔频谱

发布时间:2024/1/18 102 豆豆
生活随笔 收集整理的这篇文章主要介绍了 如何提取出一首歌曲的梅尔频谱 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

如何提取出一首歌曲的梅尔频谱

1.声谱图

如下图1一段声音信号直观地看起来是时间和能量的关系,在语音识别,音乐信息检索中常常关注的是声音中频率和能量的关系,即声谱图描述的就是频率和能量的关系。所以我们拿到一段音频需要先进行初步的处理,获得它的声谱图。具体的做法则是将声音信号分帧,然后对每一帧都用短时傅里叶变换处理,当然进行傅里叶变换之前还预先需要对声音信号进行预加重,加窗。

2.梅尔频谱

由于人耳对声音的感知不是线性的,人耳对声音的低频比对声音的高频更加敏感。所以常常需要将线性频谱转换到非线性的梅尔频谱。普通频率转换到梅尔频率的公式是 m = 2595 l o g 10 ( 1 + f 700 ) ​ m=2595log_{10}(1+\frac f{700})​ m=2595log10(1+700f),我们将一组频域信号通过梅尔滤波器组就可以获得梅尔频谱。

总结一下获得梅尔频谱的大概流程:首先对时域信号进行傅里叶变换转换到频域,然后再利用梅尔频率刻度的滤波器组对应频域信号进行处理,就可以得到梅尔频谱。这个流程可以使用librosa库来完成,下面就是相应的代码。

import librosa import numpy as np # audio_path是歌曲的保存路径,需要是load方法可以读取的歌曲文件格式 def get_melcepstrum(audio_path,mel_save_path):y, sr = librosa.load(aduio_path,sr=22050) #返回这首歌的time series序列和采样率S = librosa.core.stft(y,n_fft=1024,hop_length=512,win_length=1024)# S.shape = (1+n_fft/2,帧数)X = np.abs(S)mel_basis = librosa.filters.mel(r,n_fft=1024,n_mels=128) #梅尔滤波器矩阵# mel_basis.shape=(n_mels,1+n_fft/2)mel_s = np.dot(mel_basis,X)np.save(mel_save_path,mel_s)

reference

以下这两篇博客将梅尔频率倒谱系数(MFCC)讲得很清楚,推荐!求MFCC需要在梅尔频谱的基础上继续取对数再进行变换。这次我只是把梅尔频谱当做神经网络的输入,就先到这里。

  • https://blog.csdn.net/zouxy09/article/details/9156785
  • https://blog.csdn.net/xmdxcsj/article/details/51228791
  • CMU的教程也不错:http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf
  • 总结

    以上是生活随笔为你收集整理的如何提取出一首歌曲的梅尔频谱的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。