一.原理
1.1降噪
noisereduce 库的 reduce_noise 函数使用的是一种基于频谱减法的噪声消除算法。它通过分析音频的频谱,识别出噪声成分,并尝试将这些噪声成分从音频信号中去除,从而提升信号的清晰度。
1.2 动态范围压缩(预加重)
预加重(Pre-emphasis)是一种简单的信号处理技术,常用于音频处理中。它通过增强音频信号的高频成分来改善信噪比,特别是在某些编码技术中。预加重可以看作是一种高通滤波操作,通过减少低频成分的能量相对增加高频成分的能量。
1.3 增益处理
增益处理是通过线性放大音频信号的幅值来增加其响度的。增益因子 gain_factor 的大小决定了放大倍数。需要注意的是,过高的增益因子可能会导致音频信号超出其允许的动态范围,从而引起失真。
1.4 信号裁剪
将数组的值限制在指定的范围内。这里将音频信号限制在 [-1.0, 1.0] 之间,以防止因增益处理导致的信号失真(即音频信号过大或过小,超出了标准音频信号的范围)。
二.库安装
pip install pydub
pip install noisereduce
三.测试代码
import numpy as np from pydub import AudioSegment import librosa import noisereduce as nr import librosa.effects as effects # 加载音频文件 librosa_audio, sr = librosa.load("zhibo60s.wav", sr=16000) # 使用noisereduce库进行噪声消除 reduced_noise_audio = nr.reduce_noise(y=librosa_audio, sr=sr) # 使用librosa的动态范围压缩进行音频增强 compressed_audio = effects.preemphasis(reduced_noise_audio) # 使用预加重作为简单的压缩方式 # 增加增益,提升音量 gain_factor = 1 # 增益因子,可根据实际情况调整 enhanced_audio = compressed_audio * gain_factor enhanced_audio = enhanced_audio * 2 # 确保音频信号在[-1, 1]范围内 enhanced_audio = np.clip(enhanced_audio, -1.0, 1.0) # 将处理后的人声转换回AudioSegment对象 vocals_audio_segment = AudioSegment( data=np.array(enhanced_audio * 32767, dtype=np.int16).tobytes(), sample_width=2, frame_rate=sr, channels=1 ) # 使用pydub调整增益 gain_db = 5 # 增益量,以dB为单位 enhanced_audio_segment = vocals_audio_segment.apply_gain(gain_db) # 导出处理后的人声 enhanced_audio_segment.export("zhibo60sout.wav", format="wav")
三.测试结果
测试原始文件 | 输出文件 | 原始波形图 | 输出文件波形图 |
见上传资源 | 见上传资源 | | |