news 2026/6/15 16:18:58

识别音频中的噪音,自动降噪,保留人声,适配录制语音,会议录音去杂音需求。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
识别音频中的噪音,自动降噪,保留人声,适配录制语音,会议录音去杂音需求。

设计一个 “音频降噪与人声保留系统”,适用于录制语音、会议录音等场景,能够自动识别并去除背景噪音,保留清晰的人声。

1. 实际应用场景描述

在远程办公、在线教育、播客制作等场景中,录音质量直接影响沟通效果和内容质量。

常见的噪音包括:

- 环境噪声(空调声、风扇声、街道噪音)

- 设备底噪(麦克风电流声)

- 突发干扰(咳嗽、翻书、敲击声)

这些噪音会降低语音清晰度,影响听感和后续语音识别的准确性。

因此,需要一个 自动降噪工具,在保留人声的同时去除背景杂音。

2. 痛点分析

1. 手动降噪繁琐:专业软件操作复杂,不适合普通用户。

2. 噪音类型多样:单一滤波方法难以应对所有噪音。

3. 实时性需求:会议录音可能需要边录边降噪。

4. 音质损失:过度降噪会导致人声失真。

3. 核心逻辑讲解

1. 输入:音频文件(WAV/MP3)。

2. 噪音分析:

- 使用频谱分析识别噪音频率范围。

- 通过静音段检测提取噪音样本。

3. 降噪处理:

- 使用 谱减法(Spectral Subtraction) 或 RNNoise(基于深度学习的降噪)去除噪音。

- 保留人声频段(约 300Hz–3400Hz)。

4. 输出:降噪后的音频文件。

4. 模块化 Python 代码

这里使用

"pydub" 处理音频,

"noisereduce" 库进行降噪(基于谱减法),并封装为模块化结构。

文件结构

audio_denoiser/

├── main.py

├── config.py

├── audio_utils.py

├── denoise.py

└── README.md

"config.py"

INPUT_AUDIO = "input.wav"

OUTPUT_AUDIO = "output_denoised.wav"

NOISE_SAMPLE_START = 0 # 噪音样本起始时间(秒)

NOISE_SAMPLE_DURATION = 2 # 噪音样本时长(秒)

"audio_utils.py"

from pydub import AudioSegment

import os

def load_audio(file_path):

"""加载音频文件并转换为单声道、16kHz采样率"""

audio = AudioSegment.from_file(file_path)

audio = audio.set_channels(1).set_frame_rate(16000)

return audio

def export_audio(audio, file_path):

"""导出音频为WAV格式"""

audio.export(file_path, format="wav")

def extract_noise_sample(audio, start_sec, duration_sec):

"""提取噪音样本段"""

start_ms = start_sec * 1000

end_ms = start_ms + duration_sec * 1000

return audio[start_ms:end_ms]

"denoise.py"

import noisereduce as nr

import numpy as np

from pydub.utils import mediainfo

import io

def denoise_with_noisereduce(audio_samples, sample_rate, noise_clip=None):

"""

使用 noisereduce 进行降噪

:param audio_samples: numpy array of audio samples

:param sample_rate: 采样率

:param noise_clip: 噪音样本(numpy array)

:return: 降噪后的音频样本

"""

if noise_clip is not None:

denoised = nr.reduce_noise(y=audio_samples, y_noise=noise_clip, sr=sample_rate)

else:

# 如果没有提供噪音样本,则自动检测静音段作为噪音

denoised = nr.reduce_noise(y=audio_samples, sr=sample_rate)

return denoised

def convert_audio_to_numpy(audio_segment):

"""将AudioSegment转换为numpy数组"""

samples = np.array(audio_segment.get_array_of_samples())

return samples, audio_segment.frame_rate

def convert_numpy_to_audio(samples, sample_rate):

"""将numpy数组转换回AudioSegment"""

from pydub import AudioSegment

samples_int16 = np.int16(samples / np.max(np.abs(samples)) * 32767)

audio_segment = AudioSegment(

samples_int16.tobytes(),

frame_rate=sample_rate,

sample_width=2,

channels=1

)

return audio_segment

"main.py"

from audio_utils import load_audio, export_audio, extract_noise_sample

from denoise import denoise_with_noisereduce, convert_audio_to_numpy, convert_numpy_to_audio

from config import INPUT_AUDIO, OUTPUT_AUDIO, NOISE_SAMPLE_START, NOISE_SAMPLE_DURATION

def main():

print("=== 音频降噪系统 ===")

# 1. 加载音频

audio = load_audio(INPUT_AUDIO)

# 2. 提取噪音样本

noise_clip = extract_noise_sample(audio, NOISE_SAMPLE_START, NOISE_SAMPLE_DURATION)

# 3. 转换为numpy数组

audio_samples, sample_rate = convert_audio_to_numpy(audio)

noise_samples, _ = convert_audio_to_numpy(noise_clip)

# 4. 降噪

print("正在降噪...")

denoised_samples = denoise_with_noisereduce(audio_samples, sample_rate, noise_clip=noise_samples)

# 5. 转换回AudioSegment并导出

denoised_audio = convert_numpy_to_audio(denoised_samples, sample_rate)

export_audio(denoised_audio, OUTPUT_AUDIO)

print(f"降噪完成,已保存为 {OUTPUT_AUDIO}")

if __name__ == "__main__":

main()

5. README.md

# 音频降噪系统

## 功能

- 自动识别并去除背景噪音

- 保留清晰人声

- 支持WAV/MP3输入

## 安装

bash

pip install pydub noisereduce numpy

(Linux 可能需要安装 ffmpeg:`sudo apt install ffmpeg`)

## 使用

1. 将待处理音频命名为 `input.wav` 放在项目目录

2. 修改 `config.py` 中的参数(如噪音样本位置)

3. 运行 `python main.py`

4. 降噪后文件保存为 `output_denoised.wav`

## 扩展

- 实时降噪(使用 PyAudio 流式处理)

- 深度学习降噪(如 RNNoise)

- 图形界面(Tkinter/PyQt)

6. 使用说明

1. 准备一个 WAV 格式的音频文件(可用

"ffmpeg" 转换 MP3 为 WAV)。

2. 在

"config.py" 中设置噪音样本的时间段(通常是录音开头的几秒静音)。

3. 运行

"main.py",程序会自动降噪并输出新文件。

4. 可使用 Audacity 等工具对比前后效果。

7. 核心知识点卡片

知识点 说明

频谱分析 识别噪音频率分布

谱减法 从音频频谱中减去噪音估计

noisereduce 库 Python 实现的降噪算法

pydub 音频文件读写与格式转换

numpy 数组操作 高效处理音频数据

模块化设计 分离工具、降噪、主程序逻辑

8. 总结

本系统通过 噪音样本提取 + 谱减法降噪,实现了对录音中背景噪音的有效抑制,保留了清晰的人声,适用于会议录音、语音采集等场景。

当前使用

"noisereduce" 库,效果良好且易于上手;未来可升级为 基于深度学习的 RNNoise 或 实时流式降噪,进一步提升性能和适用场景。

如果你需要,还可以实现一个实时麦克风采音+降噪的版本,并打包成桌面应用,方便非技术用户直接使用。

利用AI高效解决实际问题,如果你觉得这个工具好用,欢迎关注我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 0:33:00

Linux内核中SPI 子系统的整体架构

SPI 子系统的整体架构 用户空间应用程序↓spidev.c (字符设备驱动,可以用内核写好的通用字符设备驱动,也可以自己写)↓ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━SPI 核心层 (spi.c)- 注册/注销 SPI Master- 注册/注销…

作者头像 李华
网站建设 2026/6/15 13:13:06

为何标准化蓝牙功能的通信至关重要

蓝牙是全球范围内安全、灵活、可靠、便捷的无线连接基准。如今,全球数十亿台蓝牙设备正被个人、企业与行业以各类方式使用,未来还会有更多设备接入。毫不夸张地说,世界的运转已离不开蓝牙技术。蓝牙技术联盟(SIG)与成员…

作者头像 李华
网站建设 2026/6/15 13:07:19

Jmeter请求发送加密参数

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快最近在做http加密接口,请求头的uid参数及body的请求json参数都经过加密再发送请求,加密方式为:ase256。所以,jmeter发…

作者头像 李华
网站建设 2026/6/10 7:49:21

接口加密了怎么测?

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、定义加密需求确定哪些数据需要进行加密。这可以是用户敏感信息、密码、身份验证令牌等。确定使用的加密算法,如对称加密(如AES&#…

作者头像 李华
网站建设 2026/6/13 1:31:14

利用ai搜索文献:提升学术研究效率与文献检索质量的实践探讨

做科研的第一道坎,往往不是做实验,也不是写论文,而是——找文献。 很多新手科研小白会陷入一个怪圈:在知网、Google Scholar 上不断换关键词,结果要么信息过载,要么完全抓不到重点。今天分享几个长期使用的…

作者头像 李华
网站建设 2026/6/15 14:58:56

2026聚焦:AI驱动的智能安全检测技术革新——从异常分析到自动化响应

一,网络安全漏洞 安全威胁是指所有能够对计算机网络信息系统的网络服务和网络信息的机密性,可用性和完整性产生阻碍,破坏或中断的各种因素。安全威胁可分为人为安全威胁和非人为安全威胁两大类。 1,网络安全漏洞威胁 漏洞分析的…

作者头像 李华