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

《Librosa :一个专为音频信号处理和音乐分析设计的Python库》

Librosa是一个专为音频信号处理和音乐分析设计的Python库。它提供了丰富的工具,可用于音频加载、特征提取、可视化以及音频信号的各种变换操作。下面为你详细介绍它的主要功能和使用示例:
在这里插入图片描述

主要功能

  1. 音频加载与处理:能轻松加载不同格式的音频文件,并且可以对音频进行重采样等处理。
  2. 特征提取:支持提取MFCCs、谱图、色度图等多种音频特征。
  3. 音高与节拍分析:可以分析音频的音高变化,检测节拍和节奏。
  4. 音频可视化:提供了将音频特征可视化的功能,便于直观分析。
  5. 音频合成与变换:能够进行音频的合成以及各种变换操作。

安装方法

使用pip可以很方便地安装Librosa:

pip install librosa

使用示例

以下是一些Librosa常见功能的使用示例:

1. 加载并播放音频
import librosa
import librosa.display
import matplotlib.pyplot as plt# 加载音频文件
audio_file = "your_audio_file.wav"
y, sr = librosa.load(audio_file)# 打印音频的基本信息
print(f"采样率: {sr} Hz")
print(f"音频长度: {len(y)/sr:.2f} 秒")# 波形可视化
plt.figure(figsize=(10, 4))
librosa.display.waveshow(y, sr=sr)
plt.title('音频波形')
plt.tight_layout()
plt.show()
2. 提取梅尔频谱图(Mel Spectrogram)
# 提取梅尔频谱图
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)# 转换为对数刻度(通常用dB表示)
S_dB = librosa.power_to_db(S, ref=np.max)# 可视化梅尔频谱图
plt.figure(figsize=(10, 4))
librosa.display.specshow(S_dB, sr=sr, x_axis='time', y_axis='mel')
plt.colorbar(format='%+2.0f dB')
plt.title('梅尔频谱图')
plt.tight_layout()
plt.show()
3. 提取MFCC特征
# 提取MFCC特征
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)# 可视化MFCC
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCC特征')
plt.tight_layout()
plt.show()
4. 节拍检测
# 节拍检测
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)print(f"估计的节拍速度: {tempo:.2f} BPM")# 将节拍帧转换为时间点
beat_times = librosa.frames_to_time(beat_frames, sr=sr)# 可视化节拍位置
plt.figure(figsize=(10, 4))
librosa.display.waveshow(y, sr=sr)
plt.vlines(beat_times, -1, 1, color='r', alpha=0.5, linestyle='--', label='Beats')
plt.legend()
plt.title('音频波形与检测到的节拍')
plt.tight_layout()
plt.show()

应用场景

Librosa在音频和音乐分析领域有广泛的应用,包括:

  • 音乐信息检索(如识别音乐流派、歌手等)
  • 语音识别与自然语言处理
  • 环境声音分类(如检测警报声、动物叫声等)
  • 音频内容分析(如分析音频情感、节奏等)
  • 音乐生成与音频合成

如果需要更具体的功能实现,可以进一步探讨你感兴趣的方向!

使用Librosa对音频进行可视化,能让你直观地理解音频的特征和结构。下面为你介绍几种常见的音频可视化方式及其实现代码:

1. 波形图(Waveform)

波形图以时间为横轴、振幅为纵轴展示音频信号。

import librosa
import librosa.display
import matplotlib.pyplot as plt# 加载音频文件
audio_file = "your_audio_file.wav"
y, sr = librosa.load(audio_file)# 绘制波形图
plt.figure(figsize=(10, 4))
librosa.display.waveshow(y, sr=sr)
plt.title('音频波形图')
plt.xlabel('时间 (秒)')
plt.ylabel('振幅')
plt.tight_layout()
plt.show()

2. 频谱图(Spectrogram)

频谱图用颜色表示频率随时间的变化,有线性频谱图和对数频谱图两种。

# 计算STFT(短时傅里叶变换)
X = librosa.stft(y)
Xdb = librosa.amplitude_to_db(abs(X))# 绘制线性频谱图
plt.figure(figsize=(10, 4))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
plt.colorbar(format='%+2.0f dB')
plt.title('线性频谱图')
plt.tight_layout()
plt.show()# 绘制对数频谱图(更符合人耳感知)
plt.figure(figsize=(10, 4))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('对数频谱图')
plt.tight_layout()
plt.show()

3. 梅尔频谱图(Mel Spectrogram)

梅尔频谱图是一种特殊的频谱图,它的频率轴基于梅尔刻度,更符合人耳对音高的感知。

# 计算梅尔频谱图
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)
S_dB = librosa.power_to_db(S, ref=np.max)# 绘制梅尔频谱图
plt.figure(figsize=(10, 4))
librosa.display.specshow(S_dB, sr=sr, x_axis='time', y_axis='mel')
plt.colorbar(format='%+2.0f dB')
plt.title('梅尔频谱图')
plt.tight_layout()
plt.show()

4. MFCC特征图

MFCC(梅尔频率倒谱系数)是一种描述音频频谱包络的特征,常用于语音识别和音乐信息检索。

# 计算MFCC
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)# 绘制MFCC特征图
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCC特征图')
plt.tight_layout()
plt.show()

5. 色度图(Chromagram)

色度图展示了音乐的12个音高类别(C, C#, D, …, B)随时间的分布情况。

# 计算色度图
chroma = librosa.feature.chroma_stft(y=y, sr=sr)# 绘制色度图
plt.figure(figsize=(10, 4))
librosa.display.specshow(chroma, y_axis='chroma', x_axis='time')
plt.colorbar()
plt.title('色度图')
plt.tight_layout()
plt.show()

6. 多图组合展示

将多种可视化结果组合在一个图表中,便于全面分析音频。

# 创建一个包含多个子图的图表
fig, axs = plt.subplots(3, 1, figsize=(10, 12))# 波形图
librosa.display.waveshow(y, sr=sr, ax=axs[0])
axs[0].set_title('波形图')
axs[0].set_xlabel('时间 (秒)')
axs[0].set_ylabel('振幅')# 梅尔频谱图
S_dB = librosa.power_to_db(librosa.feature.melspectrogram(y=y, sr=sr), ref=np.max)
librosa.display.specshow(S_dB, sr=sr, x_axis='time', y_axis='mel', ax=axs[1])
axs[1].set_title('梅尔频谱图')
axs[1].set_xlabel('时间 (秒)')
axs[1].set_ylabel('频率 (Hz)')
fig.colorbar(axs[1].collections[0], ax=axs[1], format='%+2.0f dB')# MFCC图
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)
librosa.display.specshow(mfccs, sr=sr, x_axis='time', ax=axs[2])
axs[2].set_title('MFCC特征图')
axs[2].set_xlabel('时间 (秒)')
axs[2].set_ylabel('MFCC系数')
fig.colorbar(axs[2].collections[0], ax=axs[2])plt.tight_layout()
plt.show()

可视化技巧

  • 中文显示问题:若图表中的中文无法正常显示,可添加以下代码:
    plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
    
  • 自定义颜色映射:通过cmap参数可以自定义颜色映射,例如:
    librosa.display.specshow(S_dB, sr=sr, x_axis='time', y_axis='mel', cmap='viridis')
    
  • 调整图表大小:使用figsize参数调整图表尺寸,例如:
    plt.figure(figsize=(12, 6))
    

通过这些可视化方法,你可以更深入地理解音频数据的特征,为后续的音频处理和分析工作打下基础。

http://www.xdnf.cn/news/1123849.html

相关文章:

  • Pythonic:Python 语言习惯和哲学的代码风格
  • Kubernetes 高级调度01
  • STM32F1_Hal库学习UART
  • 破局与重构:文心大模型开源的产业变革密码
  • Java-ThreadLocal
  • java基础(day07)
  • 打开xmind文件出现黑色
  • 【LeetCode 热题 100】94. 二叉树的中序遍历——DFS
  • 13.计算 Python 字符串的字节大小
  • SpringMVC2
  • 鸿蒙开发NDK之---- 如何将ArkTs的类型转化成C++对应的类型(基础类型,包含部分代码解释)
  • 修改主机名颜色脚本
  • 虚拟货币交易:游走在合法与犯罪的生死线
  • 在Adobe Substance 3D Painter中,已经有基础图层,如何新建一个图层A,clone基础图层的纹理和内容到A图层
  • Java:继承和多态(必会知识点整理)
  • 【React Natve】NetworkError 和 TouchableOpacity 组件
  • Python 基础语法2:组合数据类型、异常
  • 【深度学习框架终极PK】TensorFlow/PyTorch/MindSpore深度解析!选对框架效率翻倍
  • JavaScript中Object.defineProperty的作用和用法以及和proxy的区别
  • SSM框架学习——day1
  • Datawhale AI夏令营-基于带货视频评论的用户洞察挑战赛
  • AI Linux 运维笔记
  • Imx6ull用网线与电脑连接
  • 使用 pytest 测试框架构建自动化测试套件之一
  • ethers.js-5–和solidity的关系
  • pytorch学习1(DataSet+Transforms+TensorBoard)
  • LeetCode 692题解 | 前K个高频单词
  • 工业软件加密锁复制:一场技术与安全的博弈
  • Lovable - AI 驱动的全栈应用开发平台
  • PyTorch张量(Tensor)创建的方式汇总详解和代码示例