python中用librosa提取mfcc特征的小坑一个

在使用Python的librosa库提取音频MFCC特征时,若直接读取wav文件并提取特征,会遇到ParameterError异常,提示输入数据类型错误。解决办法是先将信号数据归一化,即除以其绝对值的最大值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyhton中用librosa.feature.mfcc提取mfcc的一个坑

我们在提取一个wav的mfcc特征的时候,如果直接这样写:

from librosa import feature
sample = wav.read('./audio_data/male_audio/M_1298636292/1298636292_1.wav')
rate, sig = sample
mfcc_feats = feature.mfcc(y = sig, sr = rate)

这样的话会报错:

librosa.util.exceptions.ParameterError: data must be floating-point

提示输入的y必须是浮点型,如果直接强制转换整形的y为浮点型效果不好,实际上我也没有成功,于是我们可以将y=sig直接归一化

sig = sig/max(abs(sig))

归一化之后提取mfcc就没有报错了:

from librosa import feature
sample = wav.read('./audio_data/male_audio/M_1298636292/1298636292_1.wav')
rate, sig = sample
sig = sig/max(abs(sig))
mfcc_feats = feature.mfcc(y = sig, sr = rate)
Librosa库是一个广泛用于音频信号处理的Python库,其中`librosa.feature.mfcc()`函数用于提取Mel频率倒谱系数(Mel-frequency cepstral coefficients, MFCCs)。MFCC是一种常用的音频特征表示方法,它将原始频谱转换成一组离散的、人类语音更易识别的特征。 每个MFCC系数对应的是一个连续的音频频谱范围通过Mel滤波器组(Mel filterbank)得到的。Mel滤波器组是一系列线性间隔的低通滤波器,其频率间距基于人耳对频率感知的变化而设计。在实际计算过程中,首先对音频信号做短时傅立叶变换(STFT),然后对STFT的结果应用Mel滤波器,最后取每个滤波器的对数能量作为MFCC系数。 以下是一个简单的Python代码示例,说明如何使用librosa提取MFCC并计算对应频段: ```python import librosa import numpy as np def get_mfcc_freq_range(audio_path, n_mfcc=13): # 加载音频文件 y, sr = librosa.load(audio_path) # 提取MFCC mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=n_mfcc) # 获取Mel滤波器中心频率 mel_frequencies = librosa.filters.mel(sr, fmax=np.max(librosa.fft_frequencies(sr)), n_mels=n_mfcc + 1)[1:-1] # 计算每个MFCC系数对应的频段 freq_bands = (mel_frequencies[:-1] + mel_frequencies[1:]) / 2 return freq_bands, mfcc # 使用方法 audio_path = 'your_audio_file.wav' freq_bands, mfcc_features = get_mfcc_freq_range(audio_path) print("MFCC系数对应的频段:", freq_bands) ``` 在这个例子中,`n_mfcc`参数指定了要提取MFCC系数的数量。`freq_bands`变量就是你想要的答案,它是所有MFCC系数所对应的频段列表。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值