操作系统 :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 获取。

音频文件降噪及python示例的更多相关文章

  1. Python调用百度接口(情感倾向分析)和讯飞接口(语音识别、关键词提取)处理音频文件

    本示例的过程是: 1. 音频转文本 2. 利用文本获取情感倾向分析结果 3. 利用文本获取关键词提取 首先是讯飞的语音识别模块.在这里可以找到非实时语音转写的相关文档以及 Python 示例.我略作了 ...

  2. 单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)

    单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件) webrtc的音频处理模块分为降噪ns,回音消除aec,回声 ...

  3. Python实例---爬取下载喜马拉雅音频文件

    PyCharm下python爬虫准备 打开pycharm 点击设置 点击项目解释器,再点击右边+号 搜索相关库并添加,例如:requests 喜马拉雅全网递归下载 打开谷歌/火狐浏览器,按F12打开开 ...

  4. Python开发【Tornado】:搭建文件下载服务、音频文件播放

    Tornado 如何做文件下载 要求:浏览器输入url地址,直接弹窗提示下载 Tornado服务端,搭建文件下载服务 #!/usr/bin/env python # -*- coding:utf-8 ...

  5. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作

    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处 一.关于为什么用pymediainfo以及pymediainfo的安装 使用python对视频/音频文件进行详 ...

  6. 使用Python处理Excel文件的一些代码示例

    笔记:使用Python处理Excel文件的一些代码示例,以下代码来自于<Python数据分析基础>一书,有删改 #!/usr/bin/env python3 # 导入读取Excel文件的库 ...

  7. 使用Python处理CSV文件的一些代码示例

    笔记:使用Python处理CSV文件的一些代码示例,来自于<Python数据分析基础>一书,有删改 # 读写CSV文件,不使用CSV模块,仅使用基础Python # 20181110 wa ...

  8. 吴裕雄--天生自然python学习笔记:python 用pygame模块处理音频文件

    除了对图片. Word 等普通格式的文件进行处理外, Python 还有强大的多媒体文件操作能力,如对音频.视频 文件的操作 . 如果要播放音乐,我们可以用 pygame 包中的 mixer 对 象. ...

  9. python引用C++ DLL文件若干解释及示例

    python引用C++ DLL文件若干解释及示例 首先说一下,python不支持C++的DLL,但是支持C的DLL:C++因为和C兼容可以编译为C的DLL,这是下面文章的背景与前提 首先我这儿的示例使 ...

  10. C语言解析WAV音频文件

    C语言解析WAV音频文件 代码地址: Github : https://github.com/CasterWx/c-wave-master 目录 前言 了解WAV音频文件 什么是二进制文件 WAV的二 ...

随机推荐

  1. diffusion model(一):DDPM技术小结 (denoising diffusion probabilistic)

    发布日期:2023/05/18 主页地址:http://myhz0606.com/article/ddpm 1 从直觉上理解DDPM 在详细推到公式之前,我们先从直觉上理解一下什么是扩散 对于常规的生 ...

  2. Windows Server系统 PaddleOCR失败解决方案

    因PaddleOCR引用了Opencv,在windows server 上 使用opencv出现 DLL load failed错误,发现缺失部分dll:MFPlat.dll.MF.dll.MFRea ...

  3. Apisix网关-使用Grafana可视化Apisix的Prometheus数据

    Apisix安装部署 Apisix官网安装教程 Apisix Dashboard官网安装教程 本次教程使用RPM包安装方式 使用systemctl管理服务 Apisix配置要点 /usr/local/ ...

  4. switch的穿透

      // switch 的 穿透         // 什么是switch的穿透         // 如果在 switch 中没有定义break , switch 会从定位的程序,一直执行到所有sw ...

  5. linux系统下,安装docker教程,以CentOS8为例

    查看本机的系统信息: 使用命令 lsb_release -a ,可以看到本机是CentOS系统,版本是8.4.2105 一.安装docker 1.Docker的安装要求CentOS系统内核版本要高于3 ...

  6. SQL SERVER 2012的安装

    1.将光盘镜像用虚拟光驱加载(WIN10自带虚拟光驱) 2.双击setup.exe 3.选择"安装"-"全新 SQL Server 独立安装或向现有安装添加功能" ...

  7. 如何发现及处理 MySQL 主从延迟问题

    在 Percona MySQL 支持团队中,我们经常看到客户抱怨复制延迟的问题.当然,这对 MySQL 用户来说并不是什么新鲜事,多年来我们在 MySQL 性能博客上发表过一些关于这个主题的文章(过去 ...

  8. Java连接mySql——简单JDBC连接数据库

    利用JDBC开发数据库 经典应该用框架:      第一步,加载JDBC数据库驱动程序(不同的数据库有不同的数据库驱动,所以在连接数据库之前,需加载驱动)     格式:     String dri ...

  9. JavaScript通过递归实现深拷贝

    思路 首先是用Object.prototype.toString.call(obj)来得到传入的值的类型,如果是几个基本类型,则直接返回值就可以了 如果是引用类型,则通过深拷贝函数递归进行再次拷贝. ...

  10. es6.6.1 rest常规操作

    ES 内置的REST接口/ 获取版本信息/index/_search 搜索指定索引下的数据 test/_search/_aliases 获取或者操作索引下的别名 _aliases/index/ 查看指 ...