Python Librosa 库

2024 年 8 月 29 日 | 5 分钟阅读

Librosa 是一个有价值的 Python 音乐和声音处理库,它帮助程序开发人员使用 Python 构建用于处理音频和音乐文件格式的应用程序。这个用于音乐和声音分析的 Python 包主要用于处理音频数据,例如音乐生成(使用 Lstm)、自动语音识别。

该库易于使用,可以处理与音频和音乐处理相关的基本任务和高级任务。它是一个开源项目,在 ISC 许可证下免费提供。

该库支持与音频文件处理和提取相关的多种功能,例如从磁盘加载音频、计算各种频谱表示、谐波-打击乐源分离、经典频谱分解、堆叠和转换音频、时域音频处理、序列建模、匹配谐波-打击乐分离、节拍同步以及更多功能。

Librosa 有助于可视化音频信号,并使用各种信号处理技术进行特征提取。

它将帮助我们实现

  1. 音乐音频信号分析。该库为可能对处理音频文件感兴趣的高级用户提供了极大的灵活性。
  2. 常见技术的参考实现。它提供了构建音乐信息检索系统所需的构建块。
  3. 音乐信息检索 (MIR) 的构建块。

安装

使用 PyPI (Python 包索引)

在系统上打开命令提示符,然后键入以下任一命令。

Conda 安装

如果您使用 conda/Anaconda 环境,可以从 conda-fashion 频道安装 librosa。打开 Anaconda 提示符并输入

注意:如果您使用的是 conda 中的 Python 3.5 环境,您可能会遇到 numba 依赖项问题。

在安装 librosa 之前,可以先从 numba conda 频道安装 numba 来避免此问题。

librosa 包被组织成一个子模块集合

  1. beat: 用于估计节拍和检测节拍事件的功能。
  2. core: 核心功能包括从磁盘加载音频、计算各种频谱表示以及用于音乐分析的各种常用工具的功能。为了方便起见,此子模块中的所有功能都可以直接从高级 librosa.* 命名空间访问。
  3. librosa.decompose: 用于谐波-打击乐源分离 (HPSS) 和使用 scikit-learn 实现的矩阵分解技术的经典频谱分解的功能。
  4. display: 使用 matplotlib 进行可视化和显示例程。
  5. effects: 时域音频处理,例如音高转移和时间拉伸。此子模块还为 break-down 子模块提供了时域封装。
  6. feature: 包括特征提取和操作。这包括低级特征提取,例如色度图、Mel 频谱图、MFCCC 以及各种其他频谱和音调特征。此外,还提供了特征操作方法,例如增量特征和内存嵌入。
  7. filters: 滤波器组生成(色度图、伪 CQT、CQT 等)。这些主要是 librosa 各部分使用的内部功能。
  8. onset: 音符开始检测和音符开始强度计算。
  9. segment: 有助于结构化分割的功能,例如重复矩阵构造、延迟表示和序列约束聚类。
  10. sequence: 用于序列建模的功能。各种形式的 Viterbi 解码和用于构建转移矩阵的辅助功能。
  11. util: 辅助工具(标准化、填充、居中等)

示例

在深入细节之前,我们先来看一个简单的程序示例。

说明

步骤 1:程序的第一个步骤

获取 librosa 附带的音频示例文件的路径。之后,文件名将是一个变量字符串,包含示例音频文件的路径。

步骤 2: 第二步

将音频加载并转换为时间序列 y,表示为一个一维 NumPy 浮点数组。变量 srs 包含 y 的采样率,即每秒音频的采样数。默认情况下,所有音频在加载时都会被重采样并混合为单声道至 22050 Hz。通过向 librosa.load 提供额外的参数可以覆盖此行为。

步骤 3:接下来,我们运行节拍跟踪器

节拍跟踪器的结果是对节拍(每分钟节拍数)的估计以及与已识别节拍事件对应的帧号数组。

这里的帧对应于信号 (y) 的短窗口,每个窗口由 hop_length = 512 个样本分隔。librosa 使用重叠帧,以便第 k 帧基于样本 k * hop_length。

步骤 4: 下一个操作将帧号 beat_frames 转换为时间戳。

现在,beat_times 将是一个与已识别节拍事件对应的浮点数数组(时间戳)。

beat_times 中的项目应该看起来像这样

输出

7.43
8.29
9.218
10.124
...

高级用法

在这里,我们将介绍一个更高级的语法示例,即集成谐波-打击乐分离、多个频谱特征和节拍同步特征聚合的语法。

加载示例剪辑的语法

设置 hop 长度的语法;在 22050 Hz 下,512 个样本 ~= 24ms

将谐波和打击乐分离为两个波形的语法

对打击乐信号进行节拍跟踪的语法

从原始信号计算 MFCCC 特征的语法

使用一阶差分(增量特征)的语法

堆叠和同步节拍事件之间的特征的语法(这次,我们将使用均值(默认)而不是中值)

从谐波信号计算色度图特征的语法

聚合节拍事件之间的色度图特征的语法(此处,使用每个特征在节拍帧之间的中值)

将所有节拍同步特征堆叠在一起的语法