語音增強方法

一、音量增強

音量增強,顧名思義就是音量的調大和調小,通過對音量進行增強可以使得模型更好的泛化。防止數據只有小音量時,當有大音量傳入時模型不能很好的進行識別。

下面是我對音量增強生成頻譜圖進行可視化的結果
在這里插入圖片描述

上面的一個圖片是音量增強前的頻譜圖,下面是音量增加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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86922.shtml
英文地址,請注明出處:http://en.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…