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

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法,并给出了代码实现。

目录

一、简介

二、代码

1. 安装必要的库

2. 代码

3. 各函数的介绍

4. 使用方法

 参考:


一、简介

音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。

使用数据增强的好处有:

  • 泛化能力:提高模型对未见数据的处理能力。
  • 减少过拟合:通过增加数据多样性来降低训练误差。
  • 模拟真实性:模拟现实世界中的音频变化。
  • 提升鲁棒性:使模型对噪声和失真更加不敏感。
  • 小数据集扩展:在数据量有限时增加有效样本。
  • 性能提升:通常能提高模型的测试性能。
  • 适应录音条件:适应不同的录音环境和设备。
  • 半监督/无监督学习:增强未标记数据的利用。
  • 可解释性:帮助理解模型决策。
  • 跨领域应用:增强模型在不同领域的适用性。

二、代码

1. 安装必要的库

pip install librosa soundfile

2. 代码

这里介绍几种常用的数据增强,代码如下:


import librosa
import numpy as np
import soundfile as sf# 载入音频文件
def load_audio_file(file_path, sr=None):audio, sample_rate = librosa.load(file_path, sr=sr)return audio, sample_rate# 时间拉伸
def time_stretch(audio, rate):return librosa.effects.time_stretch(audio, rate=rate)# 音高变换
def pitch_shift(audio, sample_rate, n_steps):return librosa.effects.pitch_shift(audio, sr=sample_rate, n_steps=n_steps)# 添加噪声
def add_noise(audio, noise_factor):noise = np.random.normal(0, 1, audio.shape)noisy_audio = audio + noise_factor * noisereturn noisy_audio# 保存音频
def save_audio(file_path, audio, sample_rate):sf.write(file_path, audio, sample_rate)

3. 各函数的介绍

  1. load_audio_file(file_path, sr=None)

    • 载入指定路径 file_path 的音频文件。
    • sr 参数用于指定音频的采样率(sampling rate)。如果未指定,将使用原始音频文件的采样率。
    • 返回音频信号 audio 和其采样率 sample_rate
  2. time_stretch(audio, rate)

    • 对音频信号 audio 进行时间拉伸,改变其持续时间而不改变音高。
    • rate 参数控制拉伸的程度,例如 rate=1.2 表示音频播放速度提高到原来的1.2倍。
  3. pitch_shift(audio, sample_rate, n_steps)

    • 对音频信号 audio 进行音高变换,改变音高而不改变播放速度。
    • sample_rate 是音频的采样率。
    • n_steps 是半音阶的步长,正值表示提高音高,负值表示降低音高。
  4. add_noise(audio, noise_factor)

    • 向音频信号 audio 添加高斯噪声。
    • noise_factor 参数控制噪声的强度,较大的值会导致更多的噪声被添加到音频中。
  5. save_audio(file_path, audio, sample_rate)

    • 将处理后的音频信号 audio 保存到文件 file_path
    • sample_rate 是音频的采样率,确保保存的音频文件具有正确的采样率。

4. 使用方法

使用上述的函数可以创建一个音频增强的pipeline,以提高音频分类模型的泛化能力和鲁棒性,以下是一个简单的使用pipeline:

# 加载音频文件
audio_path = 'path_to_your_audio_file.wav'
audio, sr = load_audio_file(audio_path)# 时间拉伸:播放速度提高20%
stretched_audio = time_stretch(audio, rate=1.2)# 音高变换:降低半音
pitch_shifted_audio = pitch_shift(audio, sr, n_steps=-1)# 添加噪声:噪声强度为原始音频幅度的0.01倍
noisy_audio = add_noise(audio, noise_factor=0.01)# 保存增强后的音频
save_audio('enhanced_audio.wav', stretched_audio, sr)
save_audio('pitch_shifted_audio.wav', pitch_shifted_audio, sr)
save_audio('noisy_audio.wav', noisy_audio, sr)

 增强后的音频,可以用于音频分类/声纹识别等模型的训练中,比如我们上一篇博客《音频入门(一):音频基础知识与分类的基本流程》中介绍的音频分类算法,就可以使用这些增强的数据来提高模型的泛化能力:

  • 数据增强使得模型能够学习到在不同条件下音频特征的一致性,从而提高其对新情况的适应能力。
  • 数据增强使模型在训练过程中接触到各种扰动,迫使模型学习到更加鲁棒的特征表示,这些特征与音频的本质属性相关,而不受具体录音条件的影响。
  • 当原始数据集较小或包含的样本多样性不足时,模型可能会学习到数据中的特定噪声或异常值,导致过拟合。数据增强通过增加样本数量和多样性,帮助模型捕捉到更一般化的特征。
  • 现实世界中的音频记录会受到多种因素的影响,如背景噪声、不同的录音设备和环境。增强后的音频更贴近真实世界的复杂性,使模型在面对实际应用时更加稳定。
  • 通过增强技术,模型学习到的类内样本的分布更加紧凑,减少了类内方差,有助于模型更好地区分不同类别。
  • 增强后的样本可能在特征空间中分布得更广,有助于增加不同类别之间的距离,从而提高分类的准确性。
  • 数据增强有助于模型学习到更加清晰和准确的决策边界,使得模型在面对边缘样本或困难样本时,能够做出更准确的分类决策。
  • 数据增强有助于模型学习到更加清晰和准确的决策边界,使得模型在面对边缘样本或困难样本时,能够做出更准确的分类决策。

5. 增强效果可视化

原始音频(两通道):

增强后的音频(单通道): 

 

参考:

1. Librosa: https://librosa.org/

2. python-soundfile — python-soundfile 0.11.0 documentation

相关文章:

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法,并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考: 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…...

MySQL管理事务处理

目录 1、事务处理是什么 2、控制事务处理 (1)事务的开始和结束 (2)回滚事务 (3)使用COMMIT (4)使用保留点 (5)结合存储过程的完整事务例子 3、小结 …...

MySQL数值型函数详解

简介 本文主要讲解MySQL数值型函数,包括:ROUND、RAND、ABS、MOD、TRUNCATE、CEIL、CEILING、FLOOR、POW、POWER、SQRT、LOG、LOG2、LOG10、SIGN、PI。 本文所有示例中,双横杠左边为执行的SQL语句,右边为执行语句的返回值。 ROU…...

54.DataGrid数据框图 C#例子 WPF例子

首先是绑定一个属性&#xff0c;属性名称无所谓。到时候看属性设置的啥&#xff0c;可能要改。 <DataGrid ItemsSource"{Binding Index_instance}"/> 然后创建INotifyPropertyChanged的类&#xff0c;并把相关固定的代码粘贴上去。 然后把这个目录类建好&am…...

总结6..

背包问题的解决过程 在解决问题之前&#xff0c;为描述方便&#xff0c;首先定义一些变量&#xff1a;Vi表示第 i 个物品的价值&#xff0c;Wi表示第 i 个物品的体积&#xff0c;定义V(i,j)&#xff1a;当前背包容量 j&#xff0c;前 i 个物品最佳组合对应的价值&#xff0c;同…...

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…...

Gartner发布2025年网络治理、风险与合规战略路线图

新型网络风险和合规义务&#xff0c;日益成为网络治理、风险与合规实践面临的问题。安全和风险管理领导者可以参考本文&#xff0c;实现从被动、专注于合规的方法到主动、进一步自动化方法的转型。 主要发现 不断变化的监管环境和不断扩大的攻击面&#xff0c;使企业机构难以实…...

基于STM32的智能空气质量监测与净化系统设计

目录 引言系统设计 硬件设计软件设计 系统功能模块 空气质量检测模块自动净化模块数据显示与用户交互模块远程监控与数据上传模块 控制算法 空气质量检测与判断算法净化设备控制算法数据记录与远程反馈算法 代码实现 空气质量检测与显示代码自动净化与调节代码数据上传与远程控…...

人工智能之数学基础:线性代数中的线性相关和线性无关

本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...

08 工欲善其事必先利其器—常用类

1 字符串相关 1.1 String 所属包&#xff1a;java.lang 代表不可变的字符序列 注意&#xff1a;Java中&#xff0c;String是一个final类 1&#xff09;创建字符串方式 String a "hello"; // 开辟内存空间 String b new String("hello"); String d…...

Redis实战-初识Redis

初识Redis 1、Redis简介2、 Redis数据结构简介3、 Redis命令3.1 字符串3.2 列表3.3 集合3.4 散列3.5 有序集合3.6 发布与订阅3.7 其他命令3.7.1 排序3.7.2 过期时间 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 本篇文章大部分是来…...

spring boot中实现手动分页

手动分页 UserMapper.xml <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace"cn.m…...

【优选算法】5----有效三角形个数

又是一篇算法题&#xff0c;今天早上刚做的热乎的~ 其实我是想写博客但不知道写些什么&#xff08;就水一下啦&#xff09; -------------------------------------begin----------------------------------------- 题目解析: 这道题的题目算是最近几道算法题里面题目最短的&a…...

C++打字模拟

改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...

最新版pycharm如何配置conda环境

首先在conda prompt里创建虚拟环境&#xff0c;比如 conda create --prefix E:/projects/myenv python3.8然后激活 conda activate E:/projects/myenv往里面安装点自己的包&#xff0c;比如 conda install pytorch1.7.1 torchvision0.8.2 -c pytorch打开pycharm 注意&#x…...

UML-对象图(Object Diagram)

一、定义 UML对象图用于描述系统中对象的状态和相互关系,是类图的一个实例化版本,主要展示了类图中定义的关系在特定时间点的实际体现。它帮助开发者在设计阶段理解对象之间的实际关系、属性值和状态,从而支持系统设计的准确性与有效性。 二、组成要素 UML对象图主要由以…...

Jmeter 动态参数压力测试时间段预定接口

&#x1f3af; 本文档详细介绍了如何使用Apache JMeter进行压力测试&#xff0c;以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求&#xff0c;利用CSV文件动态配置时间段ID和用户token&#xff0c;确保了测试数据的真实性和有效性。文档中还…...

超大型集团合并报表数智管理转型

摘要&#xff1a;数字经济时代&#xff0c;数字化技术已成为驱动财务管理价值释放的重要引擎&#xff0c;数智化能力的提升是当前一流财务信息化建设的最新趋势。财务部门是企业的“数据交汇中心”和“信息加工中心”&#xff0c;通过对企业各项财务数据的分类、汇总和清晰呈现…...

[MCAL]Mcu配置

PostBuild: PreCompile: 选择时钟来源&#xff1b; 选择初始McuInitClock() 函数 电路手册里有晶振频率&#xff0c;如上所示&#xff1b;...

Qt基础项目篇——Qt版Word字处理软件

一、核心功能 本软件为多文档型程序&#xff0c;界面是标准的 Windows 主从窗口 拥有&#xff1a;主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西&#xff0c;均在下图了。 开发该软件&#xff0c;主要分为下面三个阶段 1&#xff09;界面设计开发 多窗口 MDI 程序…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 &#x1f680; 深度解析&#xff1a;etcd 在 Milvus 向量数据库中的关键作用 &#x1f4a1; 什么是 etcd&#xff1f; &#x1f9e0; Milvus 架构简介 &#x1f4e6; etcd 在 Milvus 中的核心作用 &#x1f527; 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

GeoServer发布PostgreSQL图层后WFS查询无主键字段

在使用 GeoServer&#xff08;版本 2.22.2&#xff09; 发布 PostgreSQL&#xff08;PostGIS&#xff09;中的表为地图服务时&#xff0c;常常会遇到一个小问题&#xff1a; WFS 查询中&#xff0c;主键字段&#xff08;如 id&#xff09;莫名其妙地消失了&#xff01; 即使你在…...