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

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

目录

一、简介

二、代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5916.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络(一)

目录 1. 网络基础(一); 2. 网络套接字; 3. TCP实现; 1. 网络基础(一) 1.1 网络发展: 从一个个计算器都是独立的, 到计算机连接起来进行数据共享, 后期计算机数量很多通过交换器和路由器进行传输(局域网). 广域网就是世界各个计算器进行数据共享, 也是由一个个局域网组成. 1…

风光并网对电网电能质量影响的matlab/simulink仿真建模

这个课题早在一几年的时候比较热门,之前作电科院配电网的一个项目中也有所涉及,我把其中一部分经典仿真模型思路分享给大家,电能质量影响这部分,我在模型中主要体现的就是不同容量的光伏、风电接入,对并网点的电压影响…

【深度学习入门】深度学习知识点总结

一、卷积 (1)什么是卷积 定义:特征图的局部与卷积核做内积的操作。 作用:① 广泛应用于图像处理领域。卷积操作可以提取图片中的特征,低层的卷积层提取局部特征,如:边缘、线条、角。 ② 高层…

MySQL(4)多表查询

引言:为什么需要多表的查询? A:提高效率,多线进行。 高内聚、低耦合。 一、多表查询的条件 1、错误的多表查询: SELECT employee_id,department_name FROM employees,departments; SELECT employee_id,department…

PIC单片机HEX文件格式分析

在调试PIC单片机在bootloader程序时,需要将hex文件转换为bin文件,在转换之前先了解一下hex文件中数据是如何定义的。 直接打开一个LED灯闪烁的程序生成的hex文件,芯片型号为PIC18F46K80 可以看到每条数据都是由6部分组成的,下面分…

CANoe Trace窗口

文章目录 一、Trace窗口简介二、Trace窗口打开三、Trace窗口菜单栏介绍1. Detail View2. Statistic View3. Difference view4. Predefined filter5. Analysis filter6. Toggle time mode7. Toggle display mode8. Change font size 四、Trabe窗口配置1. 打开 Trace配置窗口2. 增…

c#配置config文件

1,引用命名空间 Configuration 及配置信息

idea新增java快捷键代码片段

最近在写一些算法题&#xff0c;有很多的List<List这种编写&#xff0c;想着能否自定义一下快捷键 直接在写代码输入&#xff1a;lli&#xff0c;即可看见提示

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…

鸿蒙参考文档和问题记录

本文用于记录鸿蒙使用过程中的问题和相关参考文档 问题记录 1. 兼容性测试套件问题 ActsStartAbilityForResultNoTargetBundleListStageTest套件测试失败&#xff1a;模块FreeInstall 技术资料 1. HarmonyOS应用如何打包HAP并安装到真机 HarmonyOS应用如何打包HAP并安装到真…

NewStar CTF week1 web wp

谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id&#xff0c;是一个占位符&#xff0c;按第二列排序用来测试列数&#xff0c;如果没有两列则会报错-1 union select 1,2 -1同样是占位符&#xff0c;union的作用是将注入语句合并到原始语句…

3.CSS的背景

通过CSS背景属性&#xff0c;可以给页面元素添加背景样式。 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 3.1 背景颜色 background-color属性定义了元素的背景颜色 background-color:颜色值&#xff1b; 一般情况下元素背景颜色默认值…

登录认证(4):令牌技术:JWT令牌

如上文所说&#xff08;登录认证&#xff08;1&#xff09;&#xff1a;登录的基本逻辑及实现思路登录&#xff09;&#xff0c;因为 HTTP协议是无状态的协议&#xff0c;我们需要使用会话跟踪技术实现同一会话中不同请求之间的数据共享&#xff0c;但Cookie技术和Session技术都…

2025.1.20——二、buuctf BUU UPLOAD COURSE 1 1 文件上传

题目来源&#xff1a;buuctf BUU UPLOAD COURSE 1 1 目录 一、打开靶机&#xff0c;查看信息 二、解题思路 step 1&#xff1a;上传一句话木马.php文件康康回显 step 2&#xff1a;蚁剑连接 三、小结 一、打开靶机&#xff0c;查看信息 这里提示到了文件会被上传到./uplo…

【玩转全栈】----Django制作部门管理页面

目录 大致效果 BootStrap BootStrap简介 BootStrap配置 BootStrap使用 基本配置 部分代码解释及注意&#xff1a; 用户编辑&#xff1a; 新添数据&#xff1a; 删除数据&#xff1a; 大致效果 我先给个大致效果&#xff0c;基本融合了Django、Bootstrap、css、html等等。 基于D…

新年好(Dijkstra+dfs/全排列)

1135. 新年好 - AcWing题库 思路&#xff1a; 1.先预处理出1,a,b,c,d,e到其他点的单源最短路&#xff0c;也就是进行6次Dijkstra 2.计算以1为起点的这6个数的全排列&#xff0c;哪种排列方式所得距离最小&#xff0c;也可以使用dfs 1.Dijkstradfs #define int long longusing …

Golang之Context详解

引言 之前对context的了解比较浅薄&#xff0c;只知道它是用来传递上下文信息的对象&#xff1b; 对于Context本身的存储、类型认识比较少。 最近又正好在业务代码中发现一种用法&#xff1a;在每个协程中都会复制一份新的局部context对象&#xff0c;想探究下这种写法在性能…

AIGC浪潮下,图文内容社区数据指标体系如何构建?

文章目录 01 案例&#xff1a;以图文内容社区为例实践数据指标体构建02 4个步骤实现数据指标体系构建1. 明确业务目标&#xff0c;梳理北极星指标2. 梳理业务流程&#xff0c;明确过程指标3. 指标下钻分级&#xff0c;构建多层级数据指标体系4. 添加分析维度&#xff0c;构建完…

数据结构:二叉树

目录 一、树型结构 1、基本概念 2、重要概念 3、树的表示形式 二、二叉树 1、概念 2、两种特殊的二叉树 3、二叉树的性质 4、二叉树的存储 5、二叉树的遍历 二叉树的构建 &#xff08;1&#xff09;前序遍历 &#xff08;2&#xff09;中序遍历 &#xff08;3&am…

SpringBoot项目中的异常处理

定义错误页面 SpringBoot 默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会像/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicExceptionController 来处理/error 请求&#xff0c;然后跳转到…