【Python百日进阶-Web开发-音频】Day703 - librosa快速入门

2024-09-04 08:28

本文主要是介绍【Python百日进阶-Web开发-音频】Day703 - librosa快速入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、概述
  • 二、快速开始
  • 三、高级用法

https://librosa.org/doc/latest/tutorial.html

本节介绍使用librosa进行开发的基础知识,包括包概述、基本和高级用法以及与scikit-learn 包的集成。我们将假设您对 Python 和 NumPy/SciPy 有基本的了解。

一、概述

librosa包的结构是子模块的集合:

  • librosa

    • librosa.beat
      用于估计节奏和检测节拍事件的功能。

    • librosa.core
      核心功能包括从磁盘加载音频、计算各种频谱图表示以及用于音乐分析的各种常用工具的功能。为方便起见,此子模块中的所有功能都可以从顶级librosa.*命名空间直接访问。

    • librosa.decompose
      使用在scikit-learn中实现的矩阵分解方法进行谐波打击源分离 (HPSS) 和通用频谱图分解的函数 。

    • librosa.display
      使用matplotlib虚拟化并显示.

    • librosa.effects
      时域音频处理,例如音调偏移和时间拉伸。该子模块还为分解子模块提供了时域包装器 。

    • librosa.feature
      特征提取和操作。这包括低级特征提取,例如色谱图、梅尔谱图、MFCC 以及各种其他光谱和节奏特征。还提供了特征操作方法,例如增量特征和内存嵌入。

    • librosa.filters
      滤波器组生成(色度、伪 CQT、CQT 等)。这些主要是librosa其他部分使用的内部函数。

    • librosa.onset
      发病检测和发病强度计算。

    • librosa.segment
      对结构分割有用的函数,例如递归矩阵构造、时滞表示和顺序约束聚类。

    • librosa.sequence
      用于顺序建模的函数。各种形式的维特比解码,以及用于构建转移矩阵的辅助函数。

    • librosa.util
      辅助实用程序(规范化、填充、居中等)

二、快速开始

在深入细节之前,我们将通过一个简短的示例程序

# 节拍跟踪示例
import librosa# 1.获取包含的音频示例的文件路径。在这一步之后, filename将是一个字符串变量,其中包含示例音频文件的路径。
filename = librosa.example('nutcracker')
print(filename)
# C:\Users\Administrator\AppData\Local\librosa\librosa\Cache\Kevin_MacLeod_-_P_I_Tchaikovsky_Dance_of_the_Sugar_Plum_Fairy.ogg# 2. 将音频加载和解码为时间序列 y,表示为一维 NumPy 浮点数组。变量sr包含y 的采样率, 即音频每秒的采样数。默认情况下,所有音频都混合为单声道并在加载时重新采样为 22050 Hz。可以通过向librosa.load 提供附加参数来覆盖此行为。
y, sr = librosa.load(filename)
print(y)
print(sr)
"""
[ 2.2716861e-06  5.3327208e-06 -7.2473290e-06 ...  1.1170751e-051.2871889e-06  5.4120628e-06]
22050
"""# 3.运行默认的节拍跟踪器,节拍跟踪器的输出是对速度的估计(以每分钟节拍为单位),以及对应于检测到的节拍事件的帧数数组。
# 这里的帧对应于信号 (y) 的短窗口,每个都由样本分隔。 librosa使用居中的帧,因此第k个帧以 sample 为中心。hop_length = 512k * hop_length
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print('估计速度: {:.2f} 拍/分钟'.format(tempo))
# 估计速度: 107.67 拍/分钟# 4. 将节拍事件的帧索引转换为时间戳
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
print(beat_times)
print(len(beat_times))  # 212
"""
[  1.18421769   1.71827664   2.32199546   2.87927438   3.459773244.01705215   4.59755102   5.13160998   5.7353288    6.292607716.84988662   7.40716553   7.9876644    8.54494331   9.125442189.65950113  10.21678005  10.72761905  11.28489796  11.7957369612.32979592  12.86385488  13.42113379  13.95519274  14.489251715.02331066  15.55736961  16.09142857  16.62548753  17.1595464917.69360544  18.25088435  18.80816327  19.31900227  19.8762811820.38712018  20.92117914  21.4552381   21.98929705  22.5233560123.05741497  23.59147392  24.12553288  24.65959184  25.1936507925.72770975  26.26176871  26.81904762  27.35310658  27.8871655328.44444444  29.00172336  29.55900227  30.11628118  30.6735600931.20761905  31.78811791  32.34539683  32.85623583  33.3670748333.90113379  34.43519274  34.94603175  35.45687075  35.9909297136.52498866  37.03582766  37.56988662  38.12716553  38.6612244939.2185034   39.75256236  40.30984127  40.84390023  41.4011791441.9352381   42.46929705  43.02657596  43.56063492  44.1179138344.67519274  45.2092517   45.76653061  46.30058957  46.8578684847.41514739  47.94920635  48.48326531  48.99410431  49.5049433150.03900227  50.54984127  51.08390023  51.61795918  52.1055782352.61641723  53.17369615  53.7077551   54.24181406  54.7758730255.28671202  55.82077098  56.35482993  56.91210884  57.446167858.00344671  58.56072562  59.09478458  59.62884354  60.1861224560.72018141  61.27746032  61.81151927  62.32235828  62.8331972863.36725624  63.90131519  64.43537415  64.94621315  65.4570521565.99111111  66.50195011  67.03600907  67.57006803  68.1041269868.63818594  69.1722449   69.72952381  70.28680272  70.8440816371.40136054  71.98185941  72.56235828  73.14285714  73.7001360574.28063492  74.83791383  75.37197279  75.90603175  76.5097505777.04380952  77.62430839  78.1815873   78.73886621  79.2961451279.85342404  80.38748299  80.92154195  81.47882086  82.0593197382.66303855  83.26675737  83.87047619  84.45097506  85.0779138385.6584127   86.26213152  86.84263039  87.44634921  88.0268480788.63056689  89.21106576  89.76834467  90.34884354  90.929342491.48662132  92.06712018  92.64761905  93.20489796  93.7621768794.34267574  94.89995465  95.48045351  96.03773243  96.5950113497.15229025  97.70956916  98.26684807  98.82412698  99.381405999.93868481 100.47274376 101.05324263 101.58730159 102.16780045102.70185941 103.25913832 103.81641723 104.37369615 104.93097506105.48825397 106.04553288 106.60281179 107.1600907  107.71736961108.25142857 108.80870748 109.36598639 109.92326531 110.48054422111.03782313 111.59510204 112.15238095 112.70965986 113.24371882113.80099773 114.3814966  114.93877551 115.47283447 116.03011338116.58739229 117.1446712 ]
212"""

三、高级用法

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

# 特征提取示例
import numpy as np
import librosa# 加载示例剪辑
y, sr = librosa.load(librosa.ex('nutcracker'))
print(y)
print(sr)
"""
[ 2.2716861e-06  5.3327208e-06 -7.2473290e-06 ...  1.1170751e-051.2871889e-06  5.4120628e-06]
22050
"""
print('---------1')# 设置跳跃长度;在22050 Hz时,512个样本~=23ms
hop_length = 512# 将谐波和打击音分离为两种波形
# 这条线的结果是时间序列y被分成两个时间序列,包含信号的谐波(音调)和打击(瞬态)部分。每个y_harmonic和y_percussive具有与y 相同的形状和持续时间。
# 这种操作的动机有两个:第一,打击乐元素往往是节奏内容的更强指标,可以帮助提供更稳定的节拍跟踪结果;其次,敲击元素可以通过在所有频带上贡献能量来污染音调特征表示(例如色度),所以没有它们我们会更好。
y_harmonic, y_percussive = librosa.effects.hpss(y)
print(y_harmonic)
print(y_percussive)
"""
[ 9.6558847e-07  1.9192130e-06 -2.4968756e-06 ...  7.1187296e-06-5.8214446e-06  1.4830528e-06]
[ 1.3060979e-06  3.4135082e-06 -4.7504536e-06 ...  4.0520222e-067.1086342e-06  3.9290112e-06]
"""
print('---------2')# 打击信号的节拍
tempo, beat_frames = librosa.beat.beat_track(y=y_percussive,sr=sr)
print(tempo)
print(beat_frames)
"""
107.666015625
[  51   74  100  124  149  173  198  221  246  270  295  319  344  367393  415  439  461  485  507  531  554  577  600  623  646  669  692716  739  762  785  807  831  855  877  900  923  946  969  993 10151038 1061 1085 1107 1131 1155 1178 1201 1225 1248 1272 1296 1320 13441368 1392 1414 1437 1460 1483 1505 1527 1550 1573 1595 1618 1641 16641688 1712 1735 1758 1782 1806 1829 1852 1876 1900 1924 1947 1971 19942018 2041 2064 2087 2110 2132 2155 2177 2200 2222 2244 2266 2289 23122335 2357 2380 2404 2427 2451 2474 2498 2521 2544 2568 2592 2615 26382661 2684 2706 2728 2752 2775 2797 2819 2842 2864 2887 2910 2933 29552978 3001 3024 3050 3075 3100 3125 3150 3174 3199 3223 3246 3269 32953317 3340 3362 3385 3409 3432 3456 3480 3508 3533 3560 3585 3612 36373663 3688 3714 3740 3766 3791 3816 3841 3866 3890 3915 3940 3965 39894014 4038 4063 4087 4111 4135 4159 4183 4208 4231 4255 4279 4304 43274351 4374 4399 4422 4447 4471 4495 4519 4543 4567 4590 4614 4638 46624686 4709 4734 4758 4781 4805 4829 4853 4877 4901 4925 4949 4973 49975021]
"""
print('---------3')# 从原始信号计算MFCC特征,引入特征模块并从原始信号中提取y梅尔频率倒谱系数
# 这个函数的输出是矩阵mfcc,它是一个numpy.ndarray形状(其中T表示以帧为单位的轨道持续时间)。请注意,我们在这里使用与节拍跟踪器中相同的hop_length值,因此检测到的 beat_frames值对应于mfcc
mfcc = librosa.feature.mfcc(y=y, sr=sr, hop_length=hop_length, n_mfcc=13)
print(mfcc)
"""
[[-602.36005 -602.36005 -602.36005 ... -602.36005 -602.36005 -602.36005][   0.         0.         0.      ...    0.         0.         0.     ][   0.         0.         0.      ...    0.         0.         0.     ]...[   0.         0.         0.      ...    0.         0.         0.     ][   0.         0.         0.      ...    0.         0.         0.     ][   0.         0.         0.      ...    0.         0.         0.     ]]
"""
print('---------4')# 介绍的第一种特征操作是delta,它计算输入列之间的(平滑的)一阶差分,生成的矩阵mfcc_delta与输入具有相同的形状mfcc。
mfcc_delta = librosa.feature.delta(mfcc)
print(mfcc_delta)
"""
[[-1.4463899e-14 -1.4463899e-14 -1.4463899e-14 ... -6.2357583e-03-6.2357583e-03 -6.2357583e-03][ 0.0000000e+00  0.0000000e+00  0.0000000e+00 ... -3.2735986e-03-3.2735986e-03 -3.2735986e-03][ 0.0000000e+00  0.0000000e+00  0.0000000e+00 ...  6.3850912e-036.3850912e-03  6.3850912e-03]...[ 0.0000000e+00  0.0000000e+00  0.0000000e+00 ... -6.9502019e-03-6.9502019e-03 -6.9502019e-03][ 0.0000000e+00  0.0000000e+00  0.0000000e+00 ... -7.6169395e-03-7.6169395e-03 -7.6169395e-03][ 0.0000000e+00  0.0000000e+00  0.0000000e+00 ...  1.2936007e-031.2936007e-03  1.2936007e-03]]
"""
print('---------5')# 第二种类型的特征操作是sync,它在样本索引(例如,节拍帧)之间聚合其输入的列
# 在节拍事件之间堆叠和同步,使用平均值(默认值)而不是中值
# 在这里,我们将mfcc和mfcc_delta矩阵垂直堆叠在一起。此操作的结果是一个beat_mfcc_delta行数与其输入相同的矩阵,但列数取决于beat_frames. 每列beat_mfcc_delta[:, k] 将是beat_frames[k]和beat_frames[k+1]之间的输入列 的平均值。(beat_frames将扩展到[0, T]整个范围,以便考虑所有数据。)
beat_mfcc_delta = librosa.util.sync(np.vstack([mfcc, mfcc_delta]),beat_frames)
print(beat_mfcc_delta)
"""
[[-5.96049988e+02 -4.71975800e+02 -4.18740723e+02 ... -2.30209213e+02-1.81633041e+02 -4.22515228e+02][ 5.29752207e+00  1.19491829e+02  1.19481026e+02 ...  6.63411026e+016.66919479e+01  7.45729675e+01][ 1.79374278e+00  5.01075478e+01  1.31605749e+01 ... -6.48235626e+01-6.93393173e+01 -2.06293182e+01]...[-6.54890239e-02 -1.46449849e-01  5.33927456e-02 ... -1.69990078e-016.22177720e-01  1.29084542e-01][-2.32196320e-02 -1.37379706e-01 -1.14388270e-02 ... -2.49835134e-012.49134526e-01  8.30472354e-03][ 2.86480300e-02 -2.01024413e-01 -5.54224029e-02 ...  7.50199929e-02-6.15619719e-01  7.62829408e-02]]
"""
print('---------6')# 根据谐波信号计算色度特征
# 在这一行之后,chromagram将是一个(12, T)numpy.ndarray形状,并且每一行对应一个音高等级(例如,C、C#等)。chromagram的每一列 都按其峰值进行归一化,尽管可以通过设置norm参数来覆盖此行为。
chromagram = librosa.feature.chroma_cqt(y=y_harmonic,sr=sr)
print(chromagram)
"""
[[0.39842078 0.72821146 0.5112     ... 0.07674009 0.1826097  0.21996354][0.184021   0.2362303  0.20697293 ... 0.14807418 0.12667468 0.12313929][0.26100114 0.47968242 0.3257294  ... 0.50196356 0.3805346  0.3323997 ]...[0.43242434 1.         0.36311993 ... 0.08561122 0.11927649 0.1906719 ][0.5385497  0.75896347 0.5056572  ... 0.2465618  0.19920714 0.25050488][1.         0.9247911  1.         ... 0.97489566 0.87546647 1.        ]]
"""
print('---------7')# 一旦我们有了色度图和节拍帧列表,我们再次同步节拍事件之间的色度:
# 节拍事件之间的聚合色度特征
# 我们将在拍帧之间使用每个特征的中值
# 这一次,我们用中位数替换了默认的聚合操作( average,如上用于 MFCC)。一般来说,这里可以提供任何统计汇总函数,包括np.max()、np.min()、np.std()等。
beat_chroma = librosa.util.sync(chromagram,beat_frames,aggregate=np.median)
print(beat_chroma)
"""
[[0.30175975 0.03334792 0.10535411 ... 0.15082903 0.07464597 0.07904111][0.26126412 0.04063718 0.08386499 ... 0.09641555 0.12792844 0.09272036][0.46405286 0.0580609  0.09553827 ... 0.44566268 0.1866724  0.1327422 ]...[0.24895    0.01804281 0.03957673 ... 0.18349287 0.9024316  0.03978507][0.209619   0.01893757 0.05923    ... 0.14936522 0.17757306 0.05588835][0.28115574 0.04807906 0.35781693 ... 0.40019333 0.2977572  0.35058373]]
"""
print('---------8')# 最后,将所有节拍同步特征叠加在一起
# 产生一个beat_features形状(12 + 13 + 13, # beat intervals) 的特征矩阵。
beat_features = np.vstack([beat_chroma, beat_mfcc_delta])
print(beat_features)
"""
[[ 0.30175975  0.03334792  0.10535411 ...  0.15082903  0.074645970.07904111][ 0.26126412  0.04063718  0.08386499 ...  0.09641555  0.127928440.09272036][ 0.46405286  0.0580609   0.09553827 ...  0.44566268  0.18667240.1327422 ]...[-0.06548902 -0.14644985  0.05339275 ... -0.16999008  0.62217770.12908454][-0.02321963 -0.1373797  -0.01143883 ... -0.24983513  0.249134530.00830472][ 0.02864803 -0.20102441 -0.0554224  ...  0.07501999 -0.61561970.07628294]]"""
print('---------9')

这篇关于【Python百日进阶-Web开发-音频】Day703 - librosa快速入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135504

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal