语音增强方法

一、音量增强

音量增强,顾名思义就是音量的调大和调小,通过对音量进行增强可以使得模型更好的泛化。防止数据只有小音量时,当有大音量传入时模型不能很好的进行识别。

下面是我对音量增强生成频谱图进行可视化的结果
在这里插入图片描述

上面的一个图片是音量增强前的频谱图,下面是音量增加50dB(分贝)的结果。由图可知音量的增加使得频谱图更亮。

#对音量增强进行可视化
import os
from pydub import AudioSegment
import numpy as np
import librosa
import librosa.display
import matplotlib.pyplot as plt# 音频路径
audio_path = ""
output_path = ""# 创建输出目录
os.makedirs(output_path, exist_ok=True)def volume_boost(audio, gain_db):"""音量增强"""return audio + gain_dbdef plot_combined_spectrogram(original_samples, boosted_samples, sample_rate, title, output_file):"""绘制原始和增强后的频谱图在同一张图片中"""# 转换为浮点型并归一化original_samples = original_samples.astype(np.float32) / np.max(np.abs(original_samples))boosted_samples = boosted_samples.astype(np.float32) / np.max(np.abs(boosted_samples))# 使用 librosa 计算频谱S_original = librosa.feature.melspectrogram(y=original_samples, sr=sample_rate, hop_length=256)S_original_db = librosa.power_to_db(S_original, ref=np.max)S_boosted = librosa.feature.melspectrogram(y=boosted_samples, sr=sample_rate, hop_length=256)S_boosted_db = librosa.power_to_db(S_boosted, ref=np.max)# 绘制频谱图fig, axs = plt.subplots(2, 1, figsize=(12, 8), constrained_layout=True)# 原始频谱图librosa.display.specshow(S_original_db, sr=sample_rate, hop_length=256, x_axis='time', y_axis='hz', cmap='magma', ax=axs[0])axs[0].set_title(f"原始音频频谱: {title}")axs[0].set_ylabel("频率 (Hz)")axs[0].set_xlabel("时间 (s)")# 增强后频谱图librosa.display.specshow(S_boosted_db, sr=sample_rate, hop_length=256, x_axis='time', y_axis='hz', cmap='magma', ax=axs[1])axs[1].set_title(f"音量增强后频谱: {title}")axs[1].set_ylabel("频率 (Hz)")axs[1].set_xlabel("时间 (s)")# 保存图片plt.savefig(output_file)plt.close()# 遍历目录中的音频文件
for file_name in os.listdir(audio_path):if file_name.endswith(".wav"):file_path = os.path.join(audio_path, file_name)audio = AudioSegment.from_file(file_path)# 获取原始音频的时域数据original_samples = np.array(audio.get_array_of_samples())sample_rate = audio.frame_rate# 音量增强audio_volume_boosted = volume_boost(audio, gain_db=50)volume_boosted_samples = np.array(audio_volume_boosted.get_array_of_samples())# 保存原始和增强后频谱图到同一张图片combined_spectrum_file = os.path.join(output_path, f"{file_name}_combined_spectrum.png")plot_combined_spectrogram(original_samples, volume_boosted_samples, sample_rate, file_name, combined_spectrum_file)print(f"保存频谱图到: {combined_spectrum_file}")

二、EQ增强

EQ增强,首先应该了解什么是EQ?
EQ,全称Equalizer,中文称为均衡器,也常简称为“均衡”或“均衡调节”。它是一种音频处理工具,通过对不同频率段的音量进行独立增强或削弱,以达到改善或修饰声音色彩、平衡音色的作用。

通俗的讲:想象声音是一张由低音、中音、高音组成的图片。EQ就像调节图片每个色调的明暗,可以让低音更浑厚、高音更明亮、中音更突出,或者把某些不需要的频段衰减掉让声音更清晰。

下面图是EQ增强前的频谱图和对低频5000hz进行了20dB的增益的频谱图,发现在高频的亮度有明显的提升。
在这里插入图片描述

下面图是EQ增强前的频谱图和对低频1000hz进行了-20dB的增益的频谱图,发现亮度有明显的下降。

在这里插入图片描述

#对EQ增强进行可视化
import os
from pydub import AudioSegment
import numpy as np
import librosa
import librosa.display
import matplotlib.pyplot as plt
import scipy.signalaudio_path = ""
output_path = ""os.makedirs(output_path, exist_ok=True)def db_to_linear(gain_db):"""dB增益转线性倍数"""return 10 ** (gain_db / 20)def apply_eq(samples, sample_rate, eq_settings):"""简易EQ增强,对多个频段峰值调节:param samples: 一维int16/float音频数据:param sample_rate: 采样率:param eq_settings: [{'freq': center_freq, 'gain_db': gain, 'q': Q}, ...]:return: 增强后样本(int16)"""y = samples.astype(float)for eq in eq_settings:f0 = eq['freq']gain_db = eq['gain_db']Q = eq.get('q', 1.0)# 设计二阶峰值滤波器b, a = scipy.signal.iirpeak(w0=f0/(sample_rate/2), Q=Q)filtered = scipy.signal.lfilter(b, a, y)linear_gain = db_to_linear(gain_db)y += (linear_gain - 1) * filtered# 防止溢出并转换回int16y = np.clip(y, -32768, 32767)return y.astype(np.int16)def plot_combined_spectrogram(original_samples, boosted_samples, sample_rate, title, output_file):"""绘制原始和增强后的频谱图在同一张图片中"""# 转换为浮点型并归一化original_samples = original_samples.astype(np.float32) / np.max(np.abs(original_samples))boosted_samples = boosted_samples.astype(np.float32) / np.max(np.abs(boosted_samples))# 使用 librosa 计算频谱S_original = librosa.feature.melspectrogram(y=original_samples, sr=sample_rate, hop_length=256)S_original_db = librosa.power_to_db(S_original, ref=np.max)S_boosted = librosa.feature.melspectrogram(y=boosted_samples, sr=sample_rate, hop_length=256)S_boosted_db = librosa.power_to_db(S_boosted, ref=np.max)# 绘制频谱图fig, axs = plt.subplots(2, 1, figsize=(12, 8), constrained_layout=True)# 原始频谱图librosa.display.specshow(S_original_db, sr=sample_rate, hop_length=256, x_axis='time', y_axis='hz', cmap='magma', ax=axs[0])axs[0].set_title(f"原始音频频谱: {title}")axs[0].set_ylabel("频率 (Hz)")axs[0].set_xlabel("时间 (s)")# 增强后频谱图librosa.display.specshow(S_boosted_db, sr=sample_rate, hop_length=256, x_axis='time', y_axis='hz', cmap='magma', ax=axs[1])axs[1].set_title(f"EQ增强后频谱: {title}")axs[1].set_ylabel("频率 (Hz)")axs[1].set_xlabel("时间 (s)")# 保存图片plt.savefig(output_file)plt.close()eq_settings = [{'freq': 1000, 'gain_db': -20, 'q': 1.0},
]for file_name in os.listdir(audio_path):if file_name.endswith(".wav"):file_path = os.path.join(audio_path, file_name)audio = AudioSegment.from_file(file_path)original_samples = np.array(audio.get_array_of_samples())sample_rate = audio.frame_rateeq_samples = apply_eq(original_samples, sample_rate, eq_settings)combined_spectrum_file = os.path.join(output_path, f"{file_name}_eq_combined_spectrum.png")plot_combined_spectrogram(original_samples, eq_samples, sample_rate, file_name, combined_spectrum_file)print(f"保存频谱图到: {combined_spectrum_file}")

EQ增强和普通音量增强的区别
音量增强:是所有频率都等比例放大(比如整体变大声)。
EQ增强:只针对某些频率增强或削弱(如只让高频变大声、低频变安静),整体音量未必变化很大,而是“音色、清晰度”变化。

三、RIR增强

RIR增强,首先应该了解什么是RIR?
举个例子:
比如你录一段“你好”,在干净录音棚是很干净的,没有任何回声。
你把这段语音和一个会议室的RIR做卷积,这段录音就像是在会议室里说的,带有真实的混响、空间感。
如果用浴室的RIR,那就像你在浴室说话,回声很大。
————————————————————————————后续会更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网渗透测试技巧与利用操作手册(SMB / MSSQL / LDAP)

SMB 枚举与利用清单 &#x1f50d; SMB 枚举与连接 # 尝试空会话连接&#xff08;Null Session&#xff09; smbclient -N -U "" -L \\<IP> smbclient -N -U "test" -L \\<IP> smbclient -N -U "Guest" -L \\<IP># 下载共享…

ADB(Android Debug Bridge)Android官方调试工具及常用命令

ADB的定义 ADB&#xff08;Android Debug Bridge&#xff09;是Android官方提供的调试工具&#xff0c;属于Android SDK的一部分。它通过命令行与Android设备通信&#xff0c;支持安装应用、调试、文件传输、日志抓取等功能&#xff0c;适用于开发、测试及高级用户场景。 ADB工…

再现重大BUG,微软紧急撤回Win 11六月更新

BUG年年有&#xff0c;今年特别多&#xff01; Windows 11发布这近4年来&#xff0c;咱们算是一路见证了其「要么在修复BUG&#xff0c;要么在修复BUG路上」这么一件壮举。 最新的6月Windows 11 24H2更新&#xff08;版本号KB5060842&#xff09;&#xff0c;微软带来了多项改…

ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?

提问 ROS2 工作空间中, CMakeLists.txt&#xff0c; setup.py和 package.xml的作用分别是&#xff1f; 回答 在一个 ROS 2 包&#xff08;package&#xff09;里&#xff0c;这三个文件各司其职&#xff1a; package.xml 作用&#xff1a;声明包的元信息和依赖关系&#xff…

Untiy打包安卓踩坑

Untiy 版本&#xff1a;unity6.1 运行环境&#xff1a;Win11 报错一&#xff1a; Assembly ‘Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll’ will not be loaded due to errors: 解决方法&#xff1a;通过在 Unity Hub 中下载 iOS 包来解决 报错…

2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)

大家好&#xff0c;我是你们的编程搬砖工~ 今天给大家安排一篇超级详细、超接地气、纯小白友好的《Python 安装教程 for Windows》&#xff0c;从下载到安装&#xff0c;从环境变量到验证&#xff0c;手把手带你装好 Python&#xff0c;不管你是 Python3.7、3.9、3.10 还是 3.1…

【IEEE/EI/Scopus检索】2025年第五届机器学习与大数据管理国际会议 (MLBDM 2025)

2025年第五届机器学习与大数据管理国际会议 (MLBDM 2025) 2025 5th International Conference on Machine Learning and Big Data Management(MLBDM 2025)会议地点&#xff1a;南京&#xff0c;中国 时间&#xff1a;2025年12月26日- 28日 ● 会议简介 2025年第五届机器学习…

前端实现ios26最新液态玻璃效果!

先看效果图 实现步骤 先定义玻璃元素和液态滤镜 <!--玻璃容器--> <div class"glass-container"><!--使用液态滤镜--><div class"glass-filter"></div><!--边沿效果--><div class"glass-specular">…

麒麟系统集成开发环境Kylin-IDE初体验,菜鸟小白入门教程

一、安装Kylin-IDE 1、打开应用商店&#xff0c;转到“软件”->“开发”页面&#xff0c;找到“Kylin-IDE”&#xff0c;点下载。&#xff08;也可以在搜索栏搜索Kylin-IDE&#xff09; 2、等待Kylin-IDE下载并自动安装完成。 3、双击桌面的Kylin-IDE图标。 4、自动弹出“开…

Python爬虫实战:研究Bleach库相关技术

一、引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。网络爬虫作为一种自动获取网页内容的技术,能够高效地从互联网上收集所需信息,为数据分析、信息检索、舆情监测等应用提供基础。然而,爬取到的网页内容往往包含大量的 HTML 标签、JavaScri…

分布假设学习笔记

文章目录 分布假设学习笔记自然语言处理中的分布假设应用场景适用范围 Word2vec、BERT和GPTWord2vecBERTGPT 假设成立吗 分布假设学习笔记 自然语言处理中的分布假设 分布假设&#xff08;Distributional Hypothesis&#xff09;是指&#xff1a;词语在相似上下文中出现&…

提升开发思维的设计模式(上)

1. 设计模式简介 [设计模式]&#xff08;Design pattern&#xff09; 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的[可重用性]、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码…

LINUX613计划测put

FTP put ┌────────────────────────────────────────────────────────────────────┐│ • MobaXterm 20.0 • ││ (SSH client, X-serv…

NB-IoT-下行同步、广播信道和信号

这一篇主要讲解以下NPSS/NSSS/NPBCH信号的具体细节。还是依然先分析时频资源&#xff0c;再分析具体信号细节。 1、NPSS信道和信号 NPSS信号总是在每个无线帧的子帧5上。使用符号为3~13个OFDM符号&#xff0c;子载波使用0~10号&#xff08;11个子载波&#xff09;。如果部署为…

Java TCP网络编程核心指南

Java网络编程中TCP通信详解 TCP (Transmission Control Protocol) 是互联网中最核心的传输层协议&#xff0c;提供可靠的、面向连接的字节流传输服务。在Java网络编程中&#xff0c;TCP通信主要通过Socket和ServerSocket类实现。 一、TCP核心特性与Java实现 特性描述Java实现…

SVN迁移Git(保留历史提交记录)

第一步&#xff1a;安装git 下载地址&#xff1a;https://gitforwindows.org/ 第二步&#xff1a;先创建一个git创库&#xff0c;&#xff08;创建过程忽略&#xff09; 第三步&#xff1a;本地新建一个空的项目文件夹&#xff0c;用于存放要迁移的项目代码&#xff0c;我这创…

9.IP数据包分片计算

IP数据报分片计算 题目1&#xff1a;主机发送5400字节数据&#xff0c;MTU1400字节&#xff08;IPv4&#xff09;&#xff0c;填写分片后的字段值。 解答&#xff1a; 分片规则&#xff1a; 每片数据长度尽量接近MTU&#xff08;1400B&#xff09;&#xff0c;IP首部20B&…

pmset - 控制 macOS 系统电源、睡眠、唤醒与节能

文章目录 NAME概要描述SETTINGSETTINGSGETTING安全睡眠参数待机参数UPS 专用参数计划事件参数电源参数说明其他参数示例另请参阅文件 NAME pmset – manipulate power management settings概要 pmset [-a | -b | -c | -u] [setting value] [...]pmset -u [haltlevel percent]…

网络安全防护:点击劫持

目录 1、概念 2、攻击原理&#xff1a;视觉欺骗与层叠控制 3、点击劫持的危害 4、防御点击劫持 4.1 X-Frame-Options HTTP 响应头 (最直接有效) 4.2 Content-Security-Policy (CSP) HTTP 响应头 (现代、更强大) 4.3 客户端 JavaScript 防御 (Frame Busting) 1、概念 点…

Spring Boot常用依赖大全:从入门到精通

springboot <!-- Spring Boot 的 Spring Web MVC 集成 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 注解校验代替ifelse --> <de…