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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;而且利用挡位可以中断动力的传递。所以变速器的结构设计的合理性直接影响到汽车动…