如何在Python中基于Librosa实现麦克风输入的MFCC提取与显示?
问题修复:录制音频并提取显示MFCC
代码存在的问题
- 核心错误:
librosa.load()用于加载本地音频文件,不能直接传入sounddevice录制得到的numpy数组。 - 次要问题:
sd.rec()返回的是二维数组(形状为(采样点数, 通道数)),而librosa处理音频需要一维信号。
修正后的代码
import librosa import librosa.display import matplotlib.pyplot as plt import sounddevice as sd import numpy as np print('start speaking') Fs = 16000 d = 3 # 录制3秒单通道音频,采样率16000 a = sd.rec(int(d*Fs), samplerate=Fs, channels=1, blocking=True) # 将二维录制数据转为一维,并转换为librosa兼容的浮点格式 signal = a.flatten().astype(np.float32) sr = Fs # 提取13维MFCC特征 mfccs = librosa.feature.mfcc(y=signal, n_mfcc=13, sr=sr) # 可视化MFCC特征 plt.figure(figsize=(25, 10)) librosa.display.specshow(mfccs, x_axis="time", sr=sr, hop_length=512) # 指定帧移,保证时间轴刻度准确 plt.colorbar(format="%+2.f") plt.title('MFCC特征热力图') plt.show()
关键修改说明
- 移除了Python中不必要的语句结尾分号。
- 对录制得到的二维数组做扁平化处理,同时转换数据格式以适配librosa的要求。
- 直接复用录制时的采样率,无需通过
librosa.load读取。 - 给
specshow添加hop_length参数,确保时间轴的显示与MFCC计算逻辑匹配。
内容的提问来源于stack exchange,提问作者jonghwan
相关产品推荐
相关产品推荐

