惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
Jina AI
Jina AI
量子位
博客园 - 叶小钗
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
博客园 - 聂微东
美团技术团队
Last Week in AI
Last Week in AI
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
V
Visual Studio Blog
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog

博客园 - Mike_Zhang

使用python统计FreeSWITCH呼叫并发 从pcap文件提取sip信令文本 FreeSWITCH开启silk编码及转码 FreeSWITCH使用mod_fail2ban模块来提升安全 FreeSWITCH使用RNNoise进行实时通话降噪 使用RNNoise进行音频降噪 python3.14版本的free-threading功能体验 一种FreeSWITCH流量镜像WebSocket音频推流方案 C++使用WinHTTP访问http/https服务 cJSON静态库编译及vs2022使用示例 openssl静态库编译及vs2022使用示例 FreeSWITCH日志功能分析及apr模拟 使用pjsip封装自定义软电话sdk pjsip编译、说明及vs2022使用示例 使用kamailio进行分机注册及互拨 apr库编译及队列使用笔记 debian10环境安装rtpengine FreeSWITCH对接http协议的tts服务 python3解析wav文件获取dtmf值 FreeSWITCH使用soundtouch进行变声
音频文件降噪及python示例
Mike_Zhang · 2024-07-20 · via 博客园 - Mike_Zhang

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

安装命令:

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

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 获取。

使用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 获取。