音频文件降噪及python示例
操作系统 :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),可从如下渠道获取:
三、降噪示例
这里首先描述下如何使用Audacity进行降噪,其中,Audacity降噪是完全操作层面的事情,不涉及编写代码;进一步的,会提供如何使用fft进行滤波降噪的示例,主要是模拟稳态降噪算法(并不完全是);最后,会提供如何使用noisereduce进行降噪的示例。
1、使用Audacity进行降噪
1) 选中噪音特征数据

2) 获取噪音特征数据

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

降噪后的效果如下:

使用Audacity进行降噪的过程及效果视频,可从如下渠道获取:
2、使用fft滤波降噪
傅立叶变换是可逆的,在频域中对信号所做的任何更改都将在将其变换回时域时应用。可利用这一点来过滤音频并去除高频,进而实现降噪,当然该方法仅适用于高频噪音。
直接在频域进行过滤,大致流程如下:
1) 加载混音文件(mix1.wav),使用fft获取频域数据;
2) 加载噪音文件(noise1.wav),使用fft获取频域数据;
3) 在频域进行滤波;
4) 进行ifft逆变换;
5) 导出降噪后的文件;
示例如下(fftTest1.py):

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

使用fft进行降噪的运行效果视频,可从如下渠道获取:
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库进行降噪的运行效果视频,可从如下渠道获取:
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)
运行效果如下:

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

音频文件降噪及python示例的更多相关文章
- Python调用百度接口(情感倾向分析)和讯飞接口(语音识别、关键词提取)处理音频文件
本示例的过程是: 1. 音频转文本 2. 利用文本获取情感倾向分析结果 3. 利用文本获取关键词提取 首先是讯飞的语音识别模块.在这里可以找到非实时语音转写的相关文档以及 Python 示例.我略作了 ...
- 单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)
单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件) webrtc的音频处理模块分为降噪ns,回音消除aec,回声 ...
- Python实例---爬取下载喜马拉雅音频文件
PyCharm下python爬虫准备 打开pycharm 点击设置 点击项目解释器,再点击右边+号 搜索相关库并添加,例如:requests 喜马拉雅全网递归下载 打开谷歌/火狐浏览器,按F12打开开 ...
- Python开发【Tornado】:搭建文件下载服务、音频文件播放
Tornado 如何做文件下载 要求:浏览器输入url地址,直接弹窗提示下载 Tornado服务端,搭建文件下载服务 #!/usr/bin/env python # -*- coding:utf-8 ...
- [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作
[原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处 一.关于为什么用pymediainfo以及pymediainfo的安装 使用python对视频/音频文件进行详 ...
- 使用Python处理Excel文件的一些代码示例
笔记:使用Python处理Excel文件的一些代码示例,以下代码来自于<Python数据分析基础>一书,有删改 #!/usr/bin/env python3 # 导入读取Excel文件的库 ...
- 使用Python处理CSV文件的一些代码示例
笔记:使用Python处理CSV文件的一些代码示例,来自于<Python数据分析基础>一书,有删改 # 读写CSV文件,不使用CSV模块,仅使用基础Python # 20181110 wa ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块处理音频文件
除了对图片. Word 等普通格式的文件进行处理外, Python 还有强大的多媒体文件操作能力,如对音频.视频 文件的操作 . 如果要播放音乐,我们可以用 pygame 包中的 mixer 对 象. ...
- python引用C++ DLL文件若干解释及示例
python引用C++ DLL文件若干解释及示例 首先说一下,python不支持C++的DLL,但是支持C的DLL:C++因为和C兼容可以编译为C的DLL,这是下面文章的背景与前提 首先我这儿的示例使 ...
- C语言解析WAV音频文件
C语言解析WAV音频文件 代码地址: Github : https://github.com/CasterWx/c-wave-master 目录 前言 了解WAV音频文件 什么是二进制文件 WAV的二 ...
随机推荐
- 大数据Hadoop集群的扩容及缩容(动态添加删除节点)
添加白名单和黑名单 白名单,表示在白名单的主机IP地址可以用来存储数据 企业中:配置白名单,可以尽量防止黑客恶意访问攻击. 配置白名单步骤如下:原文:sw-code 1)在NameNode节点的/op ...
- datagridview 批量更新、日期设置、指定列弹出右键菜单
需求是这样,只有调整日期,调整金额两列能被修改,其余的列都不能被修改.日期格式要防止用户输错.数字输入了中文也要提示. 数据来源于存储过程里的视图,这里需要注意的一点是:datagridview采用a ...
- Python 潮流周刊#52:Python 处理 Excel 的资源
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Java线程概念集合
线程 概念 1.程序:为解决某种问题,使用计算机语言编写的一系列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比 ...
- 小程序视图组件 scroll-view
视图容器组件 3.2.1.swiper 滑块视图容器. https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html 3 ...
- 绑定style
² 对象语法 <div:style="{color: redColor, fontSize: '20px'}">对象写法</div> data: { red ...
- CentOS7打开终端快捷键
点击右上角的用户名,选择设置>>键盘>>快捷键,然后点+,名称自己写,命令是"/usr/bin/gnome-terminal",这个是不能改的,再点应用,这 ...
- MySql 中 select 使用
MySql select 多种查询方式 前言 在数据库使用过程中,使用最多的场景就是查询数据,所以今天我们总结一下常用用的查询 简单查询 带条件查询 多条件查询 输出指定字段查询 分组查询 查询结果排 ...
- VMWare配置处理器个数和实际电脑CPU核心线程数关系
配置说明 处理器数量 :指CPU内核数量(例如:4C / 8C),并不是指CPU颗数. 每个处理的核心数量:指CPU中的线程(4C8T中的8T),并不是指核心(Core)数量. 示例配置 处理器数量 ...
- OSI七层网络模型和TCP/IP四层模型
OSI七层网络模型 OSI: 开放系统互连参考模型是ISO制定的一个用于计算机或通信系统间互联的标准体系 OSI七层模型功能: 物理层: 七层模型的最底层,主要是物理介质传输媒介(网线或者无线),在不 ...