【Python百日进阶-Web开发-音频】Day705 - 音频加载 librosa.load / librosa.stream

2024-09-07 08:52

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

文章目录

  • 一、音频加载
    • 1.1 librosa.load
      • 1.1.1 语法与参数
      • 1.1.2 例子
        • 1.1.2.1 下载并加载文件
        • 1.1.2.2 加载并重采样
        • 1.1.2.3 加载文件,从第15秒开始,加载5秒-
    • 1.2 librosa.stream
      • 1.2.1 语法与参数
      • 1.2.2 例子
        • 1.2.2.1 一次对 256 帧的块应用短期傅里叶变换。
        • 1.2.2.2 使用较短的帧和不重叠的窗口计算流上的 mel 频谱图

一、音频加载

https://librosa.org/doc/latest/generated/librosa.load.html

1.1 librosa.load

1.1.1 语法与参数

librosa.load(path, *, sr=22050, mono=True, offset=0.0, duration=None, dtype=<class 'numpy.float32'>, res_type='kaiser_best')[source]

将音频文件加载为浮点时​​间序列。
音频将自动重新采样到给定的速率(默认sr=22050)。
要保留文件的本机采样率,请使用sr=None.

>参数:path:string, int, pathlib.Path, soundfile.SoundFile or file-like object输入文件的路径。任何支持soundfile或audioread将工作的编解码器。任何字符串文件路径,或任何实现 Python 文件接口的对象(例如pathlib.Path)都支持作为path。如果编解码器受 支持soundfile,则路径也可以是打开的文件描述符 (int) 或现有soundfile.SoundFile对象。相反,如果编解码器不支持soundfile (例如 MP3),则path必须是文件路径(字符串或pathlib.Path)。sr:number > 0 [scalar]目标采样率'None' 使用原生采样率mono:bool将信号转换为单声道offset:float在此时间之后开始阅读(以秒为单位)duration:float只加载这么多音频(以秒为单位)dtype:numeric typey的数据类型res_type:str重采样类型(见笔记)

笔记
默认情况下,这使用resampy’高质量模式’(‘kaiser_best’)。
有关其他重采样模式,请参阅resample

笔记
audioread可能会将音频数据的精度截断为 16 位。
有关备用加载方法,请参阅高级 I/O 用例。

>Returnsynp.ndarray [shape=(n,) or (…, n)]音频时间序列。支持多通道。srnumber > 0 [scalar]y的采样率

1.1.2 例子

1.1.2.1 下载并加载文件
import librosafilename = librosa.ex('trumpet')
print(filename)
# Downloading file 'sorohanro_-_solo-trumpet-06.ogg' from 'https://librosa.org/data/audio/sorohanro_-_solo-trumpet-06.ogg' to 'C:\Users\Administrator\AppData\Local\librosa\librosa\Cache'.
# C:\Users\Administrator\AppData\Local\librosa\librosa\Cache\sorohanro_-_solo-trumpet-06.oggy, sr = librosa.load(filename)
print(y)
"""[-1.4068224e-03 -4.4607223e-04 -4.1098078e-04 ...  7.9623060e-06-3.0417003e-05  1.2765067e-05]"""
print(sr)   
"""22050"""
1.1.2.2 加载并重采样
import librosa# 加载文件,重采样到 11 KHz
filename = librosa.ex('trumpet')
print(filename)
# Downloading file 'sorohanro_-_solo-trumpet-06.ogg' from 'https://librosa.org/data/audio/sorohanro_-_solo-trumpet-06.ogg' to 'C:\Users\Administrator\AppData\Local\librosa\librosa\Cache'.
# C:\Users\Administrator\AppData\Local\librosa\librosa\Cache\sorohanro_-_solo-trumpet-06.oggy, sr = librosa.load(filename, sr=11025)
print(y)
"""[-8.7455829e-04 -3.3625262e-04  1.4627795e-04 ...  1.2944983e-05-1.3008446e-05  0.0000000e+00]"""
print(sr)
"""11025"""
1.1.2.3 加载文件,从第15秒开始,加载5秒-
# 加载文件,从第15秒开始,加载5秒
import librosafilename = librosa.ex('brahms')
print(filename)
# Downloading file 'Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg' from 'https://librosa.org/data/audio/Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg' to 'C:\Users\Administrator\AppData\Local\librosa\librosa\Cache'.
# C:\Users\Administrator\AppData\Local\librosa\librosa\Cache\Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).oggy, sr = librosa.load(filename, offset=15.0, duration=5)
print(y)
"""[0.14572227 0.14410423 0.1298924  ... 0.20087598 0.12822492 0.01499038]"""
print(sr)
"""22050"""

1.2 librosa.stream

https://librosa.org/doc/latest/generated/librosa.stream.html

1.2.1 语法与参数

librosa.stream(path, *, block_length, frame_length, hop_length, mono=True, offset=0.0, duration=None, fill_value=None, dtype=<class 'numpy.float32'>)[source]

在固定长度的缓冲区中流式传输音频。
这主要用于处理一次无法完全放入内存的大文件。
此函数不是将整个音频信号加载到内存中(如 load中),此函数生成跨越固定数量的帧的音频块,具有指定的帧长度和跳跃长度。
虽然此函数力求与load 类似的行为,但用户应该注意一些警告:

  • 此函数不直接返回音频缓冲区。它返回一个生成器,您可以对其进行迭代以生成音频块。在这种情况下,块是指跨越给定数量(可能重叠)帧的音频缓冲区。

  • 不支持自动采样率转换。音频将以其原生采样率流式传输,因此没有为frame_length 和hop_length提供默认值。建议您首先使用 get_samplerate获取相关文件的采样率,然后相应地设置这些参数。

  • 许多分析需要访问整个信号才能正确运行,例如resample、cqt或 beat_track,因此这些方法不适用于流数据。

  • 该block_length参数指定每个块将产生多少帧音频。较大的值会消耗更多的内存,但处理下游的效率会更高。最佳价值最终将取决于您的应用程序和其他系统限制。

  • 默认情况下,大多数 librosa 分析(例如,短时傅立叶变换)假设居中帧,这需要在开始和结束处填充信号。当信号被雕刻成块时,这将无法正常工作,因为它会在信号中间引入填充。要禁用此功能,请center=False在所有基于框架的分析中使用。

有关此功能的正确用法,请参见以下示例。

>参数path:string, int, sf.SoundFile, or file-like object要流式传输的输入文件的路径。soundfile此处允许任何支持的编解码器。soundfile.SoundFile也可以提供现有对象。block_length:int > 0每个块中包含的帧数。请注意,在文件末尾,可能没有足够的数据来填充整个块,因此默认情况下会产生较短的块。要输出信号以使块始终为全长,请设置fill_value(见下文)。frame_length:int > 0每帧的样本数。hop_length:int > 0在帧之间前进的样本数。请注意,当hop_length < frame_length 时,相邻帧将重叠。类似地,一个块的最后一帧将与下一个块的第一帧重叠。mono:bool在流式传输期间将信号转换为单声道offset:float在此时间之后开始读取(以秒为单位)duration:float只加载这么多音频(以秒为单位)fill_value:float [optional]如果填充信号以产生恒定长度的块,则该值将在信号的末尾使用。在大多数情况下,fill_value=0(silence) 是预期的,但您可以在此处指定任何值。dtype:numeric type要生成的音频缓冲区的数据类型>返回值(Yields)y:np.ndarray(最多) (block_length-1) * hop_length + frame_length 样本的音频缓冲区。

1.2.2 例子

1.2.2.1 一次对 256 帧的块应用短期傅里叶变换。

请注意,流式操作需要左对齐的帧,因此我们必须设置center=False以避免填充伪影。

# 一次对 256 帧的块应用短期傅里叶变换
import librosafilename = librosa.ex('brahms')
print(filename)
# Downloading file 'Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg' from 'https://librosa.org/data/audio/Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg' to 'C:\Users\Administrator\AppData\Local\librosa\librosa\Cache'.
# C:\Users\Administrator\AppData\Local\librosa\librosa\Cache\Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg# 获取采样率
sr = librosa.get_samplerate(filename)
print(sr)
"""22050"""stream = librosa.stream(filename,block_length=256,frame_length=4096,  # 每帧的样本数hop_length=1024)  # 在帧之间前进的样本数
print(stream)
"""<generator object stream at 0x000001C815B63C48>"""for i, y_block in enumerate(stream):print(i)print(y_block)"""[-3.1496827e-05  4.5770057e-06  6.3310699e-06 ... -8.2008503e-02-7.9319969e-02 -8.7967388e-02]"""print(len(y_block))"""265216"""D_block = librosa.stft(y_block, center=False)print(D_block)"""[[ 3.9462452e-06+0.0000000e+00j -4.2860594e-04+0.0000000e+00j-4.4429451e-02+0.0000000e+00j ...  9.0596670e-01+0.0000000e+00j1.0863085e+00+0.0000000e+00j  4.7810212e-01+0.0000000e+00j][ 2.9570426e-06+1.2171593e-06j -1.4515008e-03+1.4394075e-04j-1.6228624e-02-3.7583090e-02j ... -6.5300924e-01+4.2781284e-01j-6.6830617e-01-2.9303274e-01j -9.7318277e-02-2.5682163e-01j][ 2.5077386e-06+6.6349764e-07j -1.6190697e-03-2.1295755e-03j1.6848169e-02-2.1939585e-02j ...  4.6755204e-01-2.4281009e-01j2.3243992e-01-7.0751928e-02j -4.8002440e-01+1.8090662e-01j]...[-7.9427258e-04-1.1073556e-04j  7.7687885e-04-1.3622991e-04j-1.7804574e-04+1.3721849e-04j ...  5.8425709e-08+5.5215997e-07j-1.2150664e-06-1.2982581e-06j  1.1569686e-06+1.4246973e-06j][ 4.2866904e-04-1.6869348e-04j -4.1043581e-04-1.7193315e-04j7.1108429e-05+1.7076092e-04j ... -1.2678531e-06+6.2611531e-07j7.7128408e-07+7.5858810e-07j -8.3601338e-07-3.0237211e-07j][-1.8035354e-04+0.0000000e+00j  1.5730789e-04+0.0000000e+00j1.6102471e-04+0.0000000e+00j ...  1.1947994e-06+0.0000000e+00j5.3288360e-08+0.0000000e+00j -7.6422538e-07+0.0000000e+00j]]"""print(len(D_block))"""1025"""
1.2.2.2 使用较短的帧和不重叠的窗口计算流上的 mel 频谱图
# 一次对 256 帧的块应用短期傅里叶变换
import librosafilename = librosa.ex('brahms')
print(filename)
# Downloading file 'Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg' from 'https://librosa.org/data/audio/Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg' to 'C:\Users\Administrator\AppData\Local\librosa\librosa\Cache'.
# C:\Users\Administrator\AppData\Local\librosa\librosa\Cache\Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg# 获取采样率
sr = librosa.get_samplerate(filename)
print(sr)
"""22050"""stream = librosa.stream(filename,block_length=256,frame_length=2048,  # 每帧的样本数hop_length=2048)  # 在帧之间前进的样本数
print(stream)
"""<generator object stream at 0x000001C815B63C48>"""for i, y_block in enumerate(stream):print(i)print(y_block)"""[-3.1496827e-05  4.5770057e-06  6.3310699e-06 ... -8.2008503e-02-7.9319969e-02 -8.7967388e-02]"""print(len(y_block))"""524288"""m_block = librosa.feature.melspectrogram(y=y_block,sr=sr,n_fft=2048,hop_length=2048,center=False)print(m_block)"""[[9.6281457e-13 2.7688695e-03 7.5639214e-04 ... 1.6573029e-022.8924078e-03 9.0584690e-03][9.5268086e-13 1.1838382e-03 2.0444903e-03 ... 3.9315559e-021.8904578e-02 3.3565365e-02][1.1129384e-12 1.5215129e-02 2.8256567e-02 ... 3.3301312e-011.8309818e-01 4.1257823e-01]...[3.4372974e-08 2.4842016e-06 3.2516091e-06 ... 1.1653316e-045.5192772e-04 5.0611934e-04][2.8690021e-08 6.0933803e-07 2.1853284e-06 ... 7.7757053e-053.9183855e-04 3.9222173e-04][2.2792443e-08 3.2445975e-08 2.1418403e-07 ... 4.0516574e-051.4503595e-05 1.7872562e-06]]"""print(len(m_block))"""128"""

这篇关于【Python百日进阶-Web开发-音频】Day705 - 音频加载 librosa.load / librosa.stream的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1