Python 音频信号处理库 librosa

librosa 库官网
LibROSA 是一个用于音乐和音频分析的 python 包。它提供了创建音乐信息检索系统所需的构建块。
这篇博客就不展开说明了,为了方便日后随用随查,这里只是记录下 librosa 库的情况,细节还是看官方文档。

$ pip install librosa

库函数结构#

源文件 功能介绍
librosa.beat 用于估计节拍和检测节拍事件
librosa.core 核心功能包括从磁盘加载音频、计算各种谱图表示以及各种常用的音乐分析工具。为了方便起见,这个子模块中的所有功能都可以直接从顶层 librosa.* 名称空间访问。
librosa.decompose 利用 scikit-learn 中实现的矩阵分解方法实现谐波冲击源分离 (HPSS) 和通用谱图分解功能。
librosa.display 使用 matplotlib 的可视化。
librosa.effects 时域音频处理,如音高移动和时间拉伸。这个子模块还为分解子模块提供时域包装器。
librosa.feature 特征提取和操作。这包括低层次特征提取,如彩色公音、伪常量 q (对数频率) 变换、Mel 光谱图、MFCC 和调优估计。此外,还提供了特性操作方法,如 delta 特性、内存嵌入和事件同步特性对齐。
librosa.filters 过滤库生成 (chroma、伪 CQT、CQT 等)。这些主要是 librosa 的其他部分使用的内部函数。
librosa.onset 起跳检测和起跳强度计算。
librosa.output 文本和波形文件输出。
librosa.segment 用于结构分割的函数,如递归矩阵构造、时滞表示和顺序约束聚类。
librosa.sequence 用于顺序建模的函数。各种形式的维特比解码,以及用于构造转换矩阵的辅助函数。
librosa.util 辅助实用程序 (规范化、填充、居中等)。

Audio processing(音频处理)#

函数 功能
load() 从文件加载音频数据,貌似没有格式限制,而且可以通过参数设置是否保留双声道,采样率,重采样类型。
to_mono() 把音频数据降至单声道。
resample() 重采样,也可以称之为降采样。
get_duration() 计算音频时间序列、特征矩阵或文件名的持续时间 (以秒为单位)。从文件路径读取时间长度更快一些。
autocorrelate() 计算自相关。
zero_crossings() 找到过零点的位置。
clicks() 在信号指定的位置放置 click 信号。可以通过参数设置 click 信号的频率等属性。
tone() 生成一个 tone 信号,即一个简单的正弦波。
chirp() 生成一个 chirp 信号。

Spectral representations(谱表示)#

函数 功能
stft() 短时傅里叶变换。默认参数:sr=22050, n_fft=2048, hob_length=512
istft() 短时傅里叶逆变换。
ifgram() 计算得到的瞬时频率 (作为采样率的比例) 作为复谱相位的时间导数。
cqt() 常数 Q 变换。
icqt() 常数 Q 逆变换。
hybrid_cqt() 计算音频信号的混合常量 - q 变换。
pseudo_cqt() 计算音频信号的伪常量 - q 变换。
iirt() 使用 IIR 滤波器的时频表示。
fmt() 快速梅林变换 (FMT)
interp_harmonics() 计算谐波处的能量。
salience() 谐波突出功能。
phase_vocoder() 阶段声码器。给定一个 STFT 矩阵 D,将速度提高一个因子。
magphase() 计算复数图谱的幅度值和相位值。

Magnitude scaling(幅度标度)#

函数 功能
amplitude_to_db() 将振幅谱图转换为 db _scale 谱图。|
db_to_amplitude() 将 db 谱图转为普通振幅谱图。|
power_to_db() 功率谱转换。|
db_to_power() 功率谱转换。|
perceptual_weighting() 功率谱图的感知加权。|
A_weighting() 计算一组频率的 a 加权。|
pcen() 该函数通过自动增益控制对时频表示 S 进行归一化,然后进行非线性压缩。|

Time and frequency conversion(时间和频率转换)#

函数 功能
frames_to_sample() 将帧索引转换为音频样本索引。
frames_to_time() 将帧数转换为时间 (秒)。
samples_to_frames() 将样本索引转换为 STFT 帧。
samples_to_time() 将 STFT 帧转换为样本索引。
time_to_frames() 将时间戳转换为 STFT 帧。
time_to_samples() 将时间戳(以秒为单位)转换为样本索引。
hz_to_note() 将一个或多个频率(以 Hz 为单位)转换为最近的音符名称。
hz_to_midi() 获取给定频率的 MIDI 音符编号。
midi_to_hz() 获取 将一个或多个 MIDI 数转换为音符串。MIDI 音符的频率(Hz)
midi_to_note() 将一个或多个 MIDI 数转换为音符串。
note_to_hz() 将一个或多个音符名称转换为频率(Hz)
note_to_midi() 将一个或多个拼写音符转换为 MIDI 数字。
hz_to_mel() 将 Hz 转换为 Mels。
hz_to_octs() 将频率(Hz)转换为(分数)倍频程数。
mel_to_hz() 将 mel 频率转换为频率
octs_to_hz() 将八度数转换为频率。
fft_frequencies() np.fft.fftfreq 的替代实现。
cqt_frequencies() 计算 Constant-Q 箱的中心频率。
mel_frequencies() 计算调整到梅尔音阶的声学频率阵列。
tempo_frequencies() 计算对应于起始自相关或临时图矩阵的频率(以每分钟节拍数为单位)。
samples_like() 返回一组样本索引以匹配特征矩阵中的时间轴。
times_like() 返回一组时间值以匹配特征矩阵中的时间轴。

Pitch and tuning(音调和调谐)#

函数 功能
estimate_tuning() 估计音频序列的音调或者频谱输入。
pitch_tuning() 给定一个集合,估计其调谐偏移 (一个 bin 的分数) 相对于 A440 = 440.0Hz。
piptrack() 阈值抛物线插值 STFT 上的节距跟踪。

Deprecated (moved)(不推荐(移动))#

函数 功能
dtw() 动态时间扭曲。
fill_off_diagonal() 将一个矩阵的所有细胞设置为给定的值,如果它们位于约束区域之外。

Display(显示)#

通过 librosa.display.* 访问函数。

函数 功能
specshow() Display a spectrogram/chromagram/cqt/etc.
waveplot() 绘制波形的振幅包络。
camp() 从给定的数据中获取默认的颜色映射。
TimeFormatter() 时间轴的刻度格式化程序。
NoteFormatter() Notes 的刻度格式。
LogHzFormatter() 用于对数频率的制表程序。
ChromaFormatter() 色度轴的格式化程序。
TonnetzFormatter() tonnetz 轴的格式化程序。

Feature extraction(特征提取)#

通过 librosa.feature.* 访问函数。

Spectral features(光谱特征)#

函数 功能
chroma_stft() 从 stft 的结果计算色谱图
chroma_cqt 常数 Q 色谱图。
chroma_cens() 色谱能量归一化。
melspectrogram() 计算梅尔频谱。
mfcc() 梅尔倒频谱系数。
rms() 谱的均方根。
spectral_centroid() 谱中心
spectral_bandwidth() 谱带宽。
spectral_contrast() 谱对比度。
spectral_flatness() 频谱平坦度。
spectral_rolloff() 滚降频率。
poly_feature() 求一个 n 阶多项式与谱图列的拟合系数。
tonnetz() 计算色调质心特征 (tonnetz)。
zero_crossing_rate() 过零率。

Rhythm features(节奏特征)#

函数 功能
tempogram() 计算模板图:起始强度包络线的局部自相关。

Feature manipulation(特征操作)#

函数 功能
delta() 计算增量特性:对输入数据沿选定轴的导数进行局部估计。计算了三角函数的萨维茨基 - 戈莱滤波。
stack_memory() 短期历史嵌入:将数据向量或矩阵与自身的延迟副本垂直连接。

Spectrogram decomposition(谱图分解)#

通过 librosa.decompose.* 访问。

函数 功能
decompose() 分解一个特征矩阵。
hpss() Median-filtering harmonic percussive source separation (HPSS).
nn_filter() Filtering by nearest-neighbors.

Output(输出)#

通过 librosa.ouput.* 来访问。

函数 功能
annotation() 保存 3 列格式的注释。
time_csv() 按 CSV 格式保存时间步骤。这可以用来存储打击跟踪器或分割算法的输出。
write_wav() 保存为 wav 文件格式。

Utilities(实用功能)#

通过 librosa.util.* 来访问。

Array operations(数组操作)#

函数 功能
frame() 将时间序列分割成重叠的帧。
pad_center() 将数组居中。
fix_length() 将数组数据的长度固定为精确的大小。
fix_frames 固定一个帧的最大值和最小值。
index_to_slice() 从索引数组生成切片数组。
softmask() 鲁棒地计算软掩码操作。
sync() 边界之间多维数组的同步聚合。
axis_sort() 对数组的行或列进行排序。
normalize() 沿着选定的轴对数组进行标准化。
roll_sparse() 系数矩阵滚动。
sparsify_rows() 返回一个近似于输入 x 的行稀疏矩阵。
buf_to_float() 将整数缓冲区转换为浮点值。
tiny() 计算与输入数据类型对应的极小值。就是比如输入数据是 int8 类型,则返回 int8 类型可以表示的最小的数。

Matching(匹配)#

函数 功能
match_intervals() 将一组时间间隔与另一组时间间隔匹配。
match_events() 将一组事件与另一组事件匹配。

Miscellaneous#

函数 功能
localmax() 在数组 x 中找到局部最大值。
peak_pick() 使用灵活的启发式算法选择信号中的峰值。

Input Validation(输入验证)#

函数 功能
valid_audio() 验证变量是否包含有效的单声道音频数据。
valid_int() 确保输入值是整型的。
valid_intervals() 确保数组是时间间隔的有效表示。

File operations(文件操作)#

函数 功能
example_audio_file() 获取包含音频示例文件的路径。
find_files() 获取目录或目录子树中已排序的 (音频) 文件列表。
本作品采用《CC 协议》,转载必须注明作者和本文链接
不要试图用百米冲刺的方法完成马拉松比赛。