Python 音频特征提取

作者:追风剑情 发布于:2026-6-9 15:46 分类:AI

Mel 频谱图

将音频信号转换为梅尔标度的频谱,模拟人耳对频率的非线性感知。

MFCC 特征

MFCC(梅尔频率倒谱系数),从 Mel 频谱进一步提取倒谱系数,是语音识别、说话人识别等任务的经典特征,压缩了声道特性。

对数功率谱

将功率谱转换为分贝(dB)单位,更符合人耳响度感知。

语音相关任务:MFCC 和 Mel 频谱图是主流特征,用于唤醒词检测、情感识别等。

音乐相关任务:Mel 频谱图常用于流派分类、节拍检测等。

  在大模型嵌入应用中,通常会将各种特征提取方法结合到一个流水线中,以获取更全面的音频表示。选择哪些特征提取方法取决于具体的应用场景和任务要求。一般来说,MFCC和梅尔频谱图是语音相关任务中最常用的特征表示方法,而梅尔频谱图也被广泛用于音乐相关任务。

示例:

# 安装依赖 pip install librosa matplotlib numpy
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np

# ========== 1. 加载音频 ==========
audio_file = "888.wav"          # 请替换为你的音频文件路径
# 如果文件不存在,则使用 librosa 内置的示例音频
try:
    y, sr = librosa.load(audio_file, sr=None)
    print(f"已加载文件: {audio_file}, 采样率: {sr} Hz, 时长: {len(y)/sr:.2f} 秒")
except FileNotFoundError:
    print(f"文件 {audio_file} 未找到,使用内置示例音频 'nutcracker'")
    y, sr = librosa.load(librosa.ex('nutcracker'), duration=5)

# ========== 2. 提取 Mel 频谱图 ==========
n_mels = 128
fmax = 8000
mel_spec = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels, fmax=fmax)
# 转换为对数刻度(dB)
log_mel_spec = librosa.power_to_db(mel_spec, ref=np.max)

# ========== 3. 提取 MFCC 特征 ==========
n_mfcc = 20
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=n_mfcc)

# ========== 4. 可视化 ==========
# 4.1 绘制 Mel 频谱图
plt.figure(figsize=(10, 6))
librosa.display.specshow(log_mel_spec, sr=sr, x_axis='time', y_axis='mel')
plt.colorbar(format='%+2.0f dB')
plt.title(f'Mel Spectrogram (n_mels={n_mels}, fmax={fmax})')
plt.tight_layout()
plt.show()

# 4.2 绘制 MFCC 特征图
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar(label='MFCC coefficients')
plt.title(f'MFCC (n_mfcc={n_mfcc})')
plt.tight_layout()
plt.show()

# ========== 可选:打印特征形状 ==========
print(f"Mel 频谱图形状: {log_mel_spec.shape}  (频率轴 × 时间轴)")
print(f"MFCC 特征形状: {mfccs.shape}")


1111111.png


22222222222222.png

标签: AI

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号