承上一篇:python:audioFlux 使用教程
XXCC: 倒谱系数,支持所有频谱类型. 可以提取梅尔频率倒谱系数(MFCC)
     Cepstrum coefficients, supports all spectrum types.
以下是使用 audioflux 库中 XXCC 类计算倒谱系数(如 MFCC)的示例代码
代码说明:
- 音频读取:使用 
af.utils.sample_path('220')获取一个 220Hz 的音频文件路径,然后使用af.read函数读取音频数据和采样率。 - 频谱图提取:创建 
BFT对象,设置参数并调用bft方法提取 mel 频谱图,最后取绝对值得到幅度谱。 - MFCC 提取:创建 
XXCC对象,设置时间长度,然后调用xxcc方法提取 MFCC 特征。 - 可视化:使用 
fill_spec函数将 MFCC 特征可视化,并添加颜色条。 
编写示例 audio_xxcc.py 如下
# -*- coding: utf-8 -*-
""" XXCC: 倒谱系数,支持所有频谱类型. 提取梅尔频率倒谱系数(MFCC)Cepstrum coefficients, supports all spectrum types.
"""
import audioflux as af
import numpy as np
import matplotlib.pyplot as plt
from audioflux.type import SpectralFilterBankScaleType, SpectralDataType, CepstralRectifyType
from audioflux.display import fill_spec# 获取一个 220Hz 的音频文件
sample_path = af.utils.sample_path('220')
print(sample_path)
# 读取音频文件
audio_arr, sr = af.read(sample_path)# 创建 BFT 对象并提取 mel 梅尔频谱
num = 128
bft_obj = af.BFT(num=num,radix2_exp=12,samplate=sr,scale_type=SpectralFilterBankScaleType.MEL, # 梅尔刻度data_type=SpectralDataType.POWER # 使用功率谱
)
spec_arr = bft_obj.bft(audio_arr)
spec_arr = np.abs(spec_arr) # 取绝对值,确保数据为实数# 初始化 XXCC对象
xxcc_obj = af.XXCC(num=bft_obj.num)
# 设置时间长度
xxcc_obj.set_time_length(time_length=spec_arr.shape[1])# 提取 XXCC 特征
cc_num = 13 # 提取的XXCC系数数量
mfcc_arr = xxcc_obj.xxcc(spec_arr, cc_num=13, rectify_type=CepstralRectifyType.LOG)# 可视化
audio_len = audio_arr.shape[0]
x_coords = bft_obj.x_coords(audio_len)
fig, ax = plt.subplots(figsize=(10, 6))
img = fill_spec(mfcc_arr,axes=ax,x_coords=x_coords,x_axis='time',title='MFCC via XXCC'
)
fig.colorbar(img, ax=ax)
plt.show()
 
关键说明
-  
BFT 类的作用:
用于生成梅尔频谱(Mel Spectrogram),作为XXCC的输入。参数radix2_exp=12表示 FFT 窗口大小为2^12=4096。 -  
XXCC 参数配置:
-  
num必须与BFT的num一致(梅尔滤波器数量)。 -  
必须调用
set_time_length设置时间维度长度(对应频谱的帧数)。 
 -  
 -  
输出维度:
mfcc_arr的维度为(cc_num, time),与标准 MFCC 一致。 -  
扩展功能:
使用xxcc_standard方法可提取带能量项和一阶/二阶差分的 MFCC: 
energy_arr = np.sum(spec_arr, axis=0)  # 计算频谱能量
coe_arr, delta1, delta2 = xxcc_obj.xxcc_standard(spec_arr,energy_arr,cc_num=13,delta_window_length=9
)
 
常见问题
-  
输入数据类型:频谱需为实数(
np.abs处理后的功率谱或幅度谱)。 -  
多通道支持:若音频为多通道,需分别处理每个通道的频谱。
 -  
参数调优:调整
cc_num可控制系数数量(如 20 或 40 维 MFCC)。