首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

音频文件降噪及python示例

编程知识
2024年07月20日 20:52

操作系统 :Windows 10_x64

Python版本:3.9.2

noisereduce版本:3.0.2

从事音频相关工作,大概率会碰到降噪问题,今天整理下之前学习音频文件降噪的笔记,并提供Audacity和python示例。

我将从以下几个方面展开:
  • noisereduce库介绍
  • 使用Audacity进行降噪
  • 使用fft滤波降噪
  • 使用noisereduce进行降噪
  • 运行效果截图及视频
  • 配套资源下载

一、noisereduce库介绍

pypi地址:https://pypi.org/project/noisereduce/

 

GitHub地址:

https://github.com/timsainb/noisereduce

安装命令:

pip install noisereduce

noisereduce库用于音频降噪,支持稳态降噪和非稳态降噪,大致介绍如下:

其中稳态降噪基于(并不完全是)Audacity的降噪算法,降噪Audacity效果可通过体验,对应的C++实现如下:

https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp

如果链接打不开,可从文末提供的渠道获取该文件。

Audacity的降噪算法需要两个输入:1) 带噪音的音频数据;2) 噪音特征音频数据;

其核心思路是通过fft在频域进行滤波处理并还原,具体实现建议阅读源码。

非稳定降噪算法是稳态降噪算法的扩展,但允许噪声门随时间变化。

二、噪音文件准备

Audacity版本:3.1.3

这里使用Audacity进行噪音文件的生成,如果不了解Audacity软件,可参考这篇文章:

1、生成鼓点音轨,模拟正常音频

这里使用鼓点模拟正常音频,具体如下:

2、生成噪音音轨

选择菜单“生成-》噪音”选项,这里选择“白噪音”,振幅选择0.1:

3、合并音轨并导出文件

选中两个音轨,然后混音:

如果想直接使用导出的混音文件(mix1.wav),可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240720 获取。

三、降噪示例

这里首先描述下如何使用Audacity进行降噪,其中,Audacity降噪是完全操作层面的事情,不涉及编写代码;进一步的,会提供如何使用fft进行滤波降噪的示例,主要是模拟稳态降噪算法(并不完全是);最后,会提供如何使用noisereduce进行降噪的示例。

1、使用Audacity进行降噪

1) 选中噪音特征数据

 2) 获取噪音特征数据

 3) 选中需要降噪的原始音频,执行降噪操作

 降噪后的效果如下:

 使用Audacity进行降噪的过程及效果视频,可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024072001 获取。

2、使用fft滤波降噪

傅立叶变换是可逆的,在频域中对信号所做的任何更改都将在将其变换回时域时应用。可利用这一点来过滤音频并去除高频,进而实现降噪,当然该方法仅适用于高频噪音。

直接在频域进行过滤,大致流程如下:

1) 加载混音文件(mix1.wav),使用fft获取频域数据;
2) 加载噪音文件(noise1.wav),使用fft获取频域数据;
3) 在频域进行滤波;
4) 进行ifft逆变换;
5) 导出降噪后的文件;

示例如下(fftTest1.py):

完整源码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240720 获取。
运行效果如下:

 使用fft进行降噪的运行效果视频,可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024072002 获取。

3、使用noisereduce进行降噪

3.1 使用非标准降噪

直接使用noisereduce库进行操作,示例如下(nrTest1.py):

from scipy.io import wavfile
import noisereduce as nr
# load data
rate, data = wavfile.read("mix1.wav")
# perform noise reduction
reduced_noise = nr.reduce_noise(y=data, sr=rate)
wavfile.write("clean_nr1.wav", rate, reduced_noise)

运行效果如下:

 使用noisereduce库进行降噪的运行效果视频,可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024072003 获取。

3.2 使用标准降噪

也可以使用标准降噪,提取音频特征文件后过滤,示例如下:

from scipy.io import wavfile
import noisereduce as nr
# load data
rate, data = wavfile.read("mix1.wav")
_, noise_data = wavfile.read("noise1.wav")
# perform noise reduction
reduced_noise = nr.reduce_noise(y=data, sr=rate,
y_noise =noise_data,
stationary = True, # this should be true
#sigmoid_slope_nonstationary = 50,

)
wavfile.write("clean_nr2.wav", rate, reduced_noise)

运行效果如下:

三、资源下载

本文涉及源码及相关文件,可以从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240720 获取。

From:https://www.cnblogs.com/MikeZhang/p/18313792/pynr20240720
本文地址: http://shuzixingkong.net/article/231
0评论
提交 加载更多评论
其他文章 LLM并行训练6-激活优化
LLM训练activation优化相关技术, 包括激活重计算/序列并行/zero-R/zero-offload等
LLM并行训练6-激活优化 LLM并行训练6-激活优化 LLM并行训练6-激活优化
玄机-第二章日志分析-mysql应急响应
玄机-第二章日志分析-mysql应急响应 mysql应急响应 ssh账号 root 密码 xjmysql ssh root@env.xj.edisec.net -p 端口号 1.黑客第一次写入的shell flag{关键字符串} 2.黑客反弹shell的ip flag{ip} 3.黑客提权文件
玄机-第二章日志分析-mysql应急响应 玄机-第二章日志分析-mysql应急响应 玄机-第二章日志分析-mysql应急响应
Known框架实战演练——进销存数据结构
系统主要包含商品信息、商业伙伴(客户、供应商)信息、业务单表头信息、业务单表体信息、对账单表头信息、对账单表体信息。 1. 商品信息(JxGoods) 该表用于存储公司商品信息。 名称 代码 类型 长度 必填 商品信息 JxGoods 商品编码 Code Text 50 Y 商品名称 Name Te
前端说你的API接口太慢了,怎么办?
当有千万条海量数据时,前端调取接口发现接口响应的太慢,前端这时让你优化一下接口,你说有几千万条数据,觉得自己尽力了,前端觉得你好菜,别急,读完这篇文章,让前端喊你一声:大佬,厉害!!! 常用的方法总结 通过合理的分页加载、索引优化、数据缓存、异步处理、压缩数据等手段,可以有效地优化接口性能,提升系统
同时使用线程本地变量以及对象缓存的问题
同时使用线程本地变量以及对象缓存的问题 如有转载请著名出处:https://www.cnblogs.com/funnyzpc/p/18313879 前面 前些时间看别人写的一段关于锁的(对象缓存+线程本地变量)的一段代码,这段代码大致描述了这么一个功能: 外部传入一个key,需要根据这个key去全局
同时使用线程本地变量以及对象缓存的问题 同时使用线程本地变量以及对象缓存的问题 同时使用线程本地变量以及对象缓存的问题
keepalived
四、Keepalived 【1】、keepalived运行原理 Keepalived检测每个服务器接节点状态 服务器节点异常或出现工作故障,keepalived将故障节点从集群系统中剔除 故障节点恢复后,Keepalived再将其加入到集群系统中 所有工作自动完成,无需人工干预 keepalived
keepalived
如何在.NET Framework及.NET8以前项目中使用C#12新特性
前两天发了一篇关于模式匹配的文章,链接地址,有小伙伴提到使用.NET6没法体验 C#新特性的疑问, 其实呢只要本地的SDK源代码编译器能支持到的情况下(直接下载VS2022或者VS的最新preview版本) 只需要做很小的改动就可以支持的. 目前仍然还有一些小伙伴因为历史原因可能还在写.NET Fr
如何在.NET Framework及.NET8以前项目中使用C#12新特性
GIS前沿技术
无论是初步接触到GIS的学生,还是对GIS已经有一定的了解的从业者,肯定都非常关心两个问题:GIS有没有发展前景,GIS有哪些应用价值? 关于这两个问题,笔者的答案是GIS作为一门融合了空间数据采集、存储、处理、分析和可视化的学科,涉及到多个交叉领域和技术,因此非常容易与时下流行的前沿科技相结合,因
GIS前沿技术 GIS前沿技术 GIS前沿技术