当前位置: 首页 > news >正文

音频特征工具Librosa包的使用

深入探索Mamba模型架构与应用 - 商品搜索 - 京东

 DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东

要使用深度学习与语音特征进行抽取,首先需要准备能够对语音特征进行解析的工具。

Librosa是一个用于音频、音乐分析与处理的Python工具包,常见的时频处理、特征提取、绘制声音图形等功能应有尽有,功能十分强大。Librosa提供了多种音频读取和写入的方法,支持多种音频格式的读取和写入,如WAV、FLAC、MP3等。Librosa提供了多种音频特征提取的方法,如MFCC、Chromagram等。此外,Librosa还提供了多种音频可视化的方法,如绘制声谱图、绘制频谱图等。

下面将使用Librosa完成音频信号的特征提取和可视化,并对其涉及的内容进行详细讲解。

15.1.1  基于Librosa的音频信号读取

音频信号是日常生活中最常见且人们接触最多的信号类型,它们以具有频率、带宽、分贝等参数的音频信号形式存在。典型的音频信号可以表示为振幅随时间变化的函数,如图15-1所示。

图15-1  音频信号的分解

而落实到具体的音频文件上来说,音频文件的格式多种多样,可以使用计算机读取和分析它们。比如:

  • MP3格式。
  • WMA(Windows媒体音频)格式。
  • WAV(波形音频文件)格式。

对于已经存储在计算机中的音频文件,需要使用特定的Python库进行处理。在这里,作者选择的是Librosa。这是一个Python第三方库,主要用于分析音频信号,尤其适合音乐分析。Librosa涵盖了构建音乐信息检索(Music Information Retrieval,MIR)系统的具体细节。它提供了详尽的文档记录,以及丰富的示例和教程。

1. 采用Librosa对音频进行读取

为了简化起见,在这里首先使用Librosa对音频信号进行读取,代码如下:

import librosa as lbaudio_path = "../第三章/carsound.wav"audio, sr = lb.load(audio_path)
print(len(audio),type(audio))
print(sr,type(sr))

此时的load函数直接根据音频地址对数据进行读取,这里读取出的两个参数,audio为音频序列,而sr则是音频的采样率,输出结果如下:

88200 <class 'numpy.ndarray'>
22050 <class 'int'>

第一行是音频的长度与生成的数据类型,而第二行是音频的采样率。此时,如果想更换采样率对音频信号进行采集,则可以使用如下代码:

audio, sr = lb.load(audio_path,sr=16000)

同样,可以对结果进行打印,请读者自行尝试。

对于将音频采样率修正后的复制和写入操作,读者可以使用SciPy库来完成,代码如下:

from scipy.io import wavfilewavfile.write("example.wav",sr, audio)

读者可以自行尝试。

2. 音频可视化

对于获取的音频,读者可以使用以下代码对音频进行生成:

import matplotlib.pyplot as pltimport librosa.displaylibrosa.display.waveshow(audio, sr=sr)plt.show()

这里使用waveshow函数对读取到的音频进行转换,并将结果输出。形成的图形如图15-2所示。

图15-2  音频转换结果

3. 一般频谱图(非MFCC)的可视化展示

频谱图是音频信号频谱的直观表示,前面在3.3.2节中使用短时傅里叶变换完成了一般频谱图的展示,在这里可以使用同样的函数对信号进行处理,代码如下:

audio = lb.stft(audio)                    # 短时傅里叶变换audio_db = lb.amplitude_to_db(abs(audio))  # 将幅度频谱转换为dB标度频谱。也就是对序列取对数lb.display.specshow(audio_db, sr=sr, x_axis='time', y_axis='hz')plt.colorbar()plt.show()

这里首先使用短时傅里叶变换完成了图谱转换,而amplitude_to_db的作用将幅度频谱转换为dB标度频谱。也就是对序列取对数,读者可以使用如下代码对其进行验证,这里不再过多阐述。

arr = [10000,20000]audio_db = librosa.amplitude_to_db(arr)print(audio_db)

specshow是用于展示图谱的函数,生成的音频图谱如图15-3所示(颜色越红,表示信息含量越多)。

图15-3  特定音频的频谱图(颜色越红,表示信息含量越多)

图15-3是生成的音频频谱图,横坐标是时间的延续,而纵坐标是显示频率(0~10000Hz),注意到图谱的底部信息含量比顶部多,可以对纵坐标进行变换,即对所有的数值取对数。代码如下:

lb.display.specshow(audio_db, sr=sr, x_axis='time', y_axis='log')

新的图谱如图15-4所示。

图15-4  取对数处理后的频谱图

可以明显看出,与原始频谱图相比,取对数后的频谱图对信息丰富的部分提供了更为显著的显示。

15.1.2  基于Librosa的音频多特征提取

对于音频特征较为常用的分别是MFCC(梅尔频率倒谱系数)、chroma_stft(色度频率)以及梅尔频谱图,而Librosa库也为我们提供了专门的特征提取方法。下面我们依次对这些特征及其提取方法进行详细讲解。

1. MFCC音频特征

我们首先使用Librosa完成MFCC特征的抽取,代码如下:

import librosa as lbimport matplotlib.pyplot as pltaudio , sr = lb.load("example.wav",sr=16000)melspec = lb.feature.mfcc(y=audio, sr=sr, n_mels=40)lb.display.specshow(melspec, sr=sr, x_axis='time', y_axis='log')plt.colorbar()plt.show()

生成的波形图请读者自行查看。

在生成MFCC频谱的基础上,还可以执行特征缩放,使得每个系数维度具有零均值和单位方差:

from sklearn import preprocessingmelspec = preprocessing.scale(melspec, axis=1)

请读者自行尝试使用。

2. chroma_stft音频特征

除常用的MFCC外,Librosa还提供了其他一些特征提取函数。其中,librosa.feature.chroma_stft 是Librosa库中的一个函数,用于计算音频信号的基于音高的谱图特征。该函数首先使用短时傅里叶变换(Short-Time Fourier Transform,STFT)将音频信号转换为频谱图,然后计算出每个分带中的基于音高的强度。

具体来说,librosa.feature.chroma_stft函数的输入参数包括音频时间序列和采样率,输出结果是一个二维数组,其中每一行代表一个分带,每一列代表一个时间帧,数组中的值表示该时间帧在该分带中的基于音高的强度。其实现代码如下:

import librosa as lbimport matplotlib.pyplot as pltimport numpy as npaudio , sr = lb.load("example.wav",sr=16000)stft=np.abs(lb.stft(audio))chroma = lb.feature.chroma_stft(S=stft, sr=sr)lb.display.specshow(chroma, sr=sr, x_axis='time', y_axis='log')plt.colorbar()plt.show()

请读者自行打印图谱图形。

顺便讲一下,chroma_stft和MFCC都是音频处理中常用的特征提取方法。其中,MFCC是一种基于梅尔倒谱系数的特征,用于描述音频信号的频谱特性;而chroma_stft则是基于音高的谱图特征,用于描述音频信号的时域特性。

3. 梅尔频谱图

librosa.feature.melspectrogram是Librosa库中的一个函数,用于计算音频信号的梅尔频谱图。该函数的输入参数包括音频时间序列y和采样率sr,输出结果是一个二维数组,其中每一行代表一个时间帧,每一列代表一个频率,数组中的值表示该时间帧在该频率中的梅尔频谱强度。实现代码如下:

mel = lb.feature.melspectrogram(y=audio, sr=sr, n_mels=40, fmin=0, fmax=sr//2)mel = lb.power_to_db(mel)lb.display.specshow(mel, sr=sr, x_axis='time', y_axis='log')plt.colorbar()plt.show()

梅尔频谱图形请读者自行查看。

梅尔频谱图则是先将音频信号进行分帧,并对每一帧音频信号进行短时傅里叶变换,得到每个时间帧对应的频谱图。接着,对每个频谱图应用梅尔滤波器组进行变换,得到每个频率对应的梅尔功率谱密度。最后,将所有频率对应的梅尔功率谱密度合并成一个二维数组,即为梅尔频谱图。

MFCC和梅尔频谱图都是音频信号处理中常用的特征提取方法。其中,MFCC是一种基于梅尔倒谱系数的特征,用于描述音频信号的频谱特性;而梅尔频谱图则是基于梅尔滤波器组的变换,将音频信号从时域转换到频域,然后计算出每个频率对应的梅尔功率谱密度。

相关文章:

  • 在Window上面添加交叉编译链 MinGW+NDK
  • jackson-dataformat-xml引入使用后,响应体全是xml
  • 3.1 泰勒公式出发点
  • 9.9 Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析
  • “端 - 边 - 云”三级智能协同平台的理论建构与技术实现
  • 组合问题(多条件)
  • AWS IoT Core自定义域名配置实战指南
  • 某实战项目登录口处的渗透测试
  • 机器学习 --- 特征工程(一)
  • redis数据结构-09 (ZADD、ZRANGE、ZRANK)
  • 线代第二章矩阵第八节逆矩阵、解矩阵方程
  • 脑机接口技术:开启人类与机器融合的新时代
  • Gatsby知识框架
  • 软考架构师考试-UML图总结
  • eward hacking 问题 强化学习钻空子
  • 科研领域开源情报应用:从全球信息网络到创新决策
  • SpringBoot与Eventuate Tram整合 - 实现转账最终一致性系统
  • 替换 FastJSON:推荐 Jackson 及详细用法指南(含工具类 + 替换方案)
  • Shell脚本实践(修改文件,修改配置文件,执行jar包)
  • 2025年中期大语言模型实力深度剖析
  • 美国务卿鲁比奥将前往土耳其参加俄乌会谈
  • 多家中小银行存款利率迈入“1时代”
  • 人民币对美元即期汇率盘中创半年新高,离岸市场升破7.2
  • 民生谣言误导认知,多方联动守护清朗——中国互联网联合辟谣平台2025年4月辟谣榜综述
  • 来伊份深夜回应“粽子中吃出疑似创可贴”:拿到实物后会查明原因
  • 中美经贸高层会谈在日内瓦结束,中国代表团将举行发布会