WebRTC音頻QoS方法五(音頻變速算法之Expand算法實現)

一、概述介紹

在WebRTC中,存在兩種擴展算法:PreemptiveExpand和Expand。盡管這兩種算法的目標都是擴展音頻信號,但它們的實現原理和應用場景卻有所不同。

  • PreemptiveExpand(預防性擴張)

主動擴展策略,旨在防止即將出現的音頻數據短缺。當系統檢測到可播放的音頻數據即將耗盡,會根據當前的語音信號狀況,適當地插入舒適噪聲或復制基音周期,以減緩數據不足的趨勢。這種方法的關鍵在于:
平滑過渡:通過在音頻流中插入額外的噪聲或信號,PreemptiveExpand能夠確保播放的連貫性,不會引起聽覺上的不適。
預防為主:目前還有數據可播,不會強制補充破壞音質的數據,只是根據音頻數據的實際情況,適當的填充舒適噪音或周期基因。

  • 2. Expand(擴展)

與PreemptiveExpand不同,Expand是在系統已經沒有可播放音頻的情況下進行的補償措施。這種擴展算法主要用于處理丟包或音頻數據丟失的情況,確保音頻流的平滑過渡。其特點包括:
丟包補償:當音頻數據完全耗盡時,Expand通過生成合成音頻來填補空白,使得音頻播放不會突然中斷。
合成信號:該算法利用已有的信號特征(如有聲和無聲部分)來合成新的音頻信號,以保持音頻流的連貫性。

二、擴張實現

當網絡傳輸中出現音頻包丟失時,直接播放會產生卡頓。Expand在剛剛沒有數據可播的起始階段,在Expand::AnalyzeSignal函數中會調取之前播放的最后一幀數據,提取的播放前的最后一幀數據的音頻特征(周期性、頻譜、能量等),生成與原始音頻相似的臨時片段,填補丟包造成的時間缺口,讓聽眾感覺不到卡頓。

后續在持續沒有數據送來的情況下,通過混合、衰減、加噪聲等優化,盡量確保生成的填補音頻自然流暢,讓聽眾無法察覺丟包的存在。

step1:準備與初始化

首次擴張:調用 AnalyzeSignal 提取原始音頻的關鍵特征(基音周期、LPC 參數、混合比例等),存儲在 channel_parameters_ 中;
非首次擴張:直接復用已提取的特征,僅生成新的隨機噪聲向量(用于清音生成)。

step2:生成濁音部分(復制基因周期片段)

濁音的強周期性是生成的關鍵,若原始音頻中基音周期內的波形高度相似,則可通過復制周期片段 + 交叉淡入淡出生成新的濁音:

1)選擇擴張向量

從 AnalyzeSignal 提取的 expand_vector0 和 expand_vector1(原始音頻中兩個高相似性的周期片段)中,根據當前滯后(current_lag,即基音周期長度)選擇片段:

current_lag_index_=0:直接使用 expand_vector0;

current_lag_index_=1:3/4 expand_vector0 + 1/4 expand_vector1;

current_lag_index_=2:1/2 expand_vector0 + 1/2 expand_vector1;

混合不同比例是為了避免單純復制導致的 “機械感”,增加自然度。

2)重疊拼接(消除拼接雜音)

生成的新片段與歷史音頻的重疊部分(overlap_length_)采用 “交叉淡入淡出” 處理:

歷史音頻的重疊部分音量逐漸減小(muting_window);

新生成片段的重疊部分音量逐漸增大(unmuting_window);

兩者疊加后,拼接處音量平滑過渡,無 “爆音” 或 “斷裂感”。

step3:生成清音部分(濾波噪聲模擬頻譜)

清音無周期性,無法通過復制生成,需通過LPC 濾波隨機噪聲模擬原始音頻的頻譜特征:

1)生成隨機噪聲

通過 GenerateRandomVector 生成白噪聲(random_vector),作為清音的 “原材料”。

2)LPC 濾波塑造頻譜

用 AnalyzeSignal 提取的 LPC 參數(ar_filter)對隨機噪聲濾波:

LPC 參數模擬了原始音頻的聲道頻譜響應;

濾波后,白噪聲的頻譜被重塑為與原始清音相似的頻譜,保證音色一致;

同時通過 ar_gain 控制能量,避免音量突變。

step4:混合濁音與清音(比例動態調整)

根據 voice_mix_factor(濁音 / 清音混合比例,由 AnalyzeSignal 計算)動態混合兩部分:

高周期性(濁音為主):voice_mix_factor 大,濁音占比高;

低周期性(清音為主):voice_mix_factor 小,清音占比高;

混合通過 “交叉淡入淡出” 實現(DspHelper::CrossFade),避免過渡突兀。

step5:音量控制與背景噪聲(避免聽覺疲勞)

靜音衰減:連續擴張時(consecutive_expands_ 增加),通過 mute_slope 逐漸降低音量(如 3 次擴張后從 1.0→0.95),避免長時間重復片段導致的聽覺疲勞;

背景噪聲補充:當音量過低或擴張次數過多時,調用

background_noise_->GenerateBackgroundNoise 添加與環境匹配的背景噪聲,避免完全靜音的 空洞感。

step6:輸出與更新狀態

生成的臨時音頻片段存入 output,同時更新連續擴張計數(consecutive_expands_)和總擴張時長,防止無限制擴張導致音質惡化(超過閾值后強制限制)。

三、算法總結

該算法的核心邏輯是基于特征的相似性生成,本質是用已知推未知:

1、先通過AnalyzeSignal提取原始音頻的特征值(周期、頻譜、能量等參數);

2、對濁音:復制周期片段并混合,利用周期性保證相似性;

3、對清音:用LPC濾波噪聲,利用頻譜特征保證相似性;

最后通過混合、衰減、加噪聲等優化,確保生成的填補音頻自然流暢,讓聽眾無法察覺丟包的存在。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95442.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python - 基礎 - 工具】解決pycharm“No Python interpreter configured for the project”問題

解決pycharm“No Python interpreter configured for the project”問題 當你在 PyCharm 中遇到“No Python interpreter configured for the project”錯誤時,意味著你的項目沒有配置 Python 解釋器。以下是解決該問題的步驟。 示例 # 嘗試運行代碼時出現錯誤 prin…

Elasticsearch創建索引分片和副本大小建議

在Elasticsearch中,?分片(shard)和副本(replica)? 的設置直接影響集群性能、容錯能力和擴展性。以下是最佳實踐指南:核心概念?類型??描述??是否可修改??主分片(Primary Shard)?數據的最小存儲單元,每個索引被拆分成多個主分片? 索…

“人工智能+虛擬仿真”開啟新學期智慧學習之旅

在教育領域掀起數字化革新浪潮的今天,新學期的開啟不僅意味著知識探索新征程的起步,更蘊含著教育模式深度變革的無限可能。虛擬仿真技術作為教育現代化的關鍵驅動力,正重塑學習體驗,引領教育范式轉移。人工智能與虛擬仿真技術的結…

Photoshop用戶必看:讓你的PSD像JPG一樣可預覽

軟件介紹 Photoshop縮略圖補丁插件3.8.0.96是一款實用的工具,它能夠將PSD格式的文件(Photoshop的專用格式)以縮略圖的形式顯示出來。這一功能極大地提升了用戶在管理和查找圖像文件時的效率,使得看圖、找圖變得更加輕松便捷。該插…

idea2025.1.5安裝+pj

寫在前邊:如果是卸載舊版本IDEA重裝,一定記得之前的插件啥的,截個圖。還有主題字體設置啥的 目錄背景原因卸載原來版本安裝教程背景原因 原來的2022.2不支持jdk21的語言版本 卸載原來版本 1、如何徹底卸載 IDE, 可參考這篇的文章&#xff…

(四)Python控制結構(條件結構)

程序中的語句默認會按照自上而下的順序逐條執行,但通過一些特定的語句可以更改語句的執行順序,使之產生跳躍、回溯等現象,進而靈活地控制程序的執行流程。控制結構是編程中用于控制程序執行流程的語句,程序的三種基本控制結構為&a…

血緣元數據采集開放標準:OpenLineage Guides 使用 Apache Airflow? 和 OpenLineage + Marquez 入門

OpenLineage 是一個用于元數據和血緣采集的開放標準,專為在作業運行時動態采集數據而設計。它通過統一的命名策略定義了由作業(Job)、運行實例(Run)和數據集(Dataset) 組成的通用模型&#xff0…

FPGA|Quartus II 中使用TCL文件進行引腳一鍵分配

在FPGA設計過程中,合理的引腳分配是確保硬件功能正確實現的關鍵步驟之一。Quartus II 提供了通過 TCL(Tool Command Language)腳本自動化引腳分配的功能,這不僅可以大大提高設計效率,還能夠確保引腳分配的精確性和可重…

【Docker/Redis】服務端高并發分布式結構演進之路

目錄 概述 常見概念 基本概念 應用(Application)/ 系統(System) 模塊(Module)/ 組件(Component) 分布式(Distributed) 集群(Cluster&#x…

【Excel】將一個單元格內??的多行文本,??拆分成多個單元格,每個單元格一行??

??所有文本都堆積在“prefix”列頂部的同一個單元格里(很可能是B10單元格),并且它們是用空格分隔的,而不是換行符。??因此,您不需要處理換行符,而是需要??按“空格”進行分列,并且將分列后…

新手SEO操作第一步

內容概要 網站優化對于新手而言,常常感覺無從下手。別擔心,這篇文章就是為你量身打造的入門指南。我們將從最基礎也是最重要的關鍵詞研究開始講起,手把手教你如何精準找到目標用戶搜索的詞。掌握了關鍵詞,接下來就是如何創作出搜索…

【高階數據結構】秘法(一)——并查集:探索如何高效地管理集合

前言: 前面我們已經學習了簡單的數據結構,包括棧與隊列、二叉樹、紅黑樹等等,今天我們繼續數據結構的學習,但是難度上會逐漸增大,在高階數據結構中我們要學習的重點是圖等 目錄 一、并查集的原理 二、并查集的基本操作…

spring boot 整合AI教程

1、pom.xml配置<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

基于SpringBoot2+Vue2開發的儲物柜管理系統

角色 管理員&#xff1a;管理系統、用戶&#xff0c;管理儲物柜用戶&#xff1a;借用、歸還儲物柜&#xff0c;報修故障 技術棧 后端&#xff1a;Springboot2, JWT, PageHelper前端&#xff1a;Vue2數據庫&#xff1a;MySQL 核心功能 提供智能儲物柜管理&#xff0c;包括用戶注…

uniapp中輸入金額的過濾(只允許輸入數字和小數點)

一、完整代碼&#xff1a; <template><view class"numberIndex" :style"{ paddingTop: navbarHeight px }"><view class"custom-navbar" :style"{ paddingTop: statusBarHeight px }"><view class"navbar…

系統科學核心概念辨析及其在人工智能領域的應用研究:一個整合性分析框架

摘要&#xff1a;本文旨在系統性地梳理和辨析系統科學中的核心概念——結構、功能與層級。文章首先追溯系統思想的理論源流&#xff0c;確立其作為一種超越還原論的整體性研究范式。在此基礎上&#xff0c;深度剖析系統結構的內在構成&#xff08;組分、框架、動態性&#xff0…

Ubuntu環境下刪除Docker鏡像與容器、配置靜態IP地址

刪除Docker鏡像與容器刪除容器&#xff1a;要刪除特定的Docker容器&#xff0c;首先需要停止該容器&#xff1a;docker stop <container_id_or_name>然后可以使用以下命令刪除它&#xff1a;docker rm <container_id_or_name>如果要強制刪除正在運行的容器&#xf…

零樣本視覺模型(DINOv3)

DINOv3是Meta于2025年8月14日發布的第三代自監督視覺基礎模型&#xff0c;通過17億張無標注圖像訓練&#xff0c;參數規模最大達70億&#xff0c;首次在密集預測任務中全面超越弱監督模型&#xff0c;成為計算機視覺領域的里程碑。其核心突破在于無需人工標注即可生成高分辨率密…

【機器學習入門】5.2 回歸的起源——從身高遺傳到線性模型的百年演變

提到 “回歸”&#xff0c;很多剛入門的同學會覺得它是個抽象的數學概念&#xff0c;但你可能想不到&#xff0c;這個術語的誕生&#xff0c;竟然源于 19 世紀一位生物學家對 “身高遺傳” 的研究。回歸分析從 “觀察生物現象” 出發&#xff0c;逐步發展成機器學習中預測連續值…

輕型載貨汽車變速器設計cad+設計說明書

摘 要 變速器是汽車重要的傳動系組成&#xff0c;在較大范圍內改變汽車行駛速度的大小和汽車驅動輪上扭矩的大小。變速器能在發動機旋轉方向不變的前提下&#xff0c;使汽車倒退行駛&#xff0c;而且利用擋位可以中斷動力的傳遞。所以變速器的結構設計的合理性直接影響到汽車動…