当前位置: 首页 > 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 程序…...

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…...

Java空指针异常处理:判空、Optional与Assert解析

在Java编程中&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;是最常见的运行时错误之一。本文将深入探讨三种处理空指针异常的方法&#xff1a;传统的判空检查、Java 8引入的Optional类以及使用断言&#xff08;Assert&#xff09;。通过代码示例和应用场…...

【vim】vim编辑器如何设置行号

vim编辑器如何设置行号 一、**临时设置行号**二、永久设置行号2.1. **用户配置文件方式&#xff08;针对当前用户&#xff09;**2.2. **全局配置文件方式&#xff08;谨慎使用&#xff0c;会影响所有用户&#xff09;** 在Vim中设置行号有以下两种常见的方法&#xff1a; 一、…...

MySQL可直接使用的查询表的列信息

文章目录 背景实现方案模板SQL如何查询列如何转大写如何获取字符位置如何拼接字段 SQL适用场景 背景 最近产品找来&#xff0c;想让帮忙出下表的信息&#xff0c;字段驼峰展示&#xff0c;每张表信息show create table全部展示&#xff0c;再逐个粘贴&#xff0c;有点太耗费时…...

在线宠物用品|基于vue的在线宠物用品交易网站(源码+数据库+文档)

|在线宠物用品交易网站 目录 基于springbootvue的在线宠物用品交易网站 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&am…...

《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; 《安富莱嵌入式周报》第349期&#xff1a;VSCode正式支持Matlab调试&#xff0c;DIY录音室级麦克风…...

使用LabVIEW的History功能实现队列数据的读取而不清空

在LabVIEW中&#xff0c;有多种方法可以读取队列中的数据而不清空它。使用 Dequeue Element 和 Enqueue Element 函数可以实现读取并重新插入数据回队列&#xff0c;但当需要处理大数据流或需要更动态的解决方案时&#xff0c;这种方法可能会变得繁琐。一个更高效的解决方案是利…...

电脑如何访问手机文件?

手机和电脑已经深深融入了我们的日常生活&#xff0c;无时无刻不在为我们提供服务。除了电脑远程操控电脑外&#xff0c;我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么&#xff0c;如何使用电脑远程访问手机上的文件呢&#xff1f; 如何使用电脑访问手机文件…...

SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用

SpringBoot实现定时任务&#xff0c;使用自带的定时任务以及调度框架quartz的配置使用 文章目录 SpringBoot实现定时任务&#xff0c;使用自带的定时任务以及调度框架quartz的配置使用一. 使用SpringBoot自带的定时任务&#xff08;适用于小型应用&#xff09;二. 使用调度框架…...

java上传图片功能实现

1 MinIO核心概念 下面介绍MinIO中的几个核心概念&#xff0c;这些概念在所有的对象存储服务中也都是通用的。 对象&#xff08;Object&#xff09; 对象是实际的数据单元&#xff0c;例如我们上传的一个图片。 存储桶&#xff08;Bucket&#xff09; 存储桶是用于组织对象的命…...