随着信息技术的发展,人们对实时通信的需求不断增加,并逐渐成为工作生活中不可或缺的一部分。每年海量的音视频通话分钟数对互联网基础设施提出了巨大的挑战。尽管目前全球的互联网用户绝大多数均处于良好的网络状况,但仍有不少地区处于极差的网络条件下,除此之外,即使在网络良好区域,也仍会存在弱网现象。那么如何在有限的带宽下提供高质量的音频体验就成为了一个非常重要的研究方向。

在过去的几十年间,语音或音频的编码技术都涉及大量特定领域的知识,例如语音生成模型。近些年,随着深度学习类算法的快速发展,逐渐涌现出了多种基于神经网络的音频处理算法。阿里云视频云技术团队在综合分析了实际业务场景存在的共性问题的基础上,开始探索借助数据驱动的方式提高音频的编码效率,并提出了智能音频编解码器 AliIAC (Ali Intelligent Audio Codec),可以在有限的带宽条件下提供更高质量的音频通话体验。

什么是音频编解码器?

即使没有听说过音频编解码器这个概念,在日常生活中,也一定有使用到这项技术,从收看电视节目到使用移动手机打电话,从刷短视频到观看直播,都会涉及到音频编解码技术。

音频编码的目标是将输入音频信号压缩成比特流,其所占存储空间远小于输入的原始音频信号,然后在解码端通过接收到的比特流恢复出原始音频信号,同时希望重建的信号在主观听感上与原始信号尽可能相近,编码过程如下公式所示:



其中,代表时域语音信号,长度为 会进一步被转换为比特流远小于,解码过程如下公式所示:

传统的音频编解码器可以分为两大类:波形编解码器和参数编解码器(waveform codecs and parametric codecs)

波形编解码器

波形编解码器的重点是在解码器端产生输入音频样本的重建。

在大多数情况下,波形编解码器较依赖于变换编码技术,可以将输入的时域波形映射到时频域。然后,通过量化技术对变换系数进行量化,最后经过熵编码模块将其转化成可用于传输的比特流。在解码器端,通过相应的反变换来重建时域波形。

一般情况下,波形编解码器对待编码的音频的类型(如:语音、音乐等)做很少或不做任何假设,所以可以处理的音频范围很广泛。在中高比特率时这种方法可以产生非常高质量的音频,但在低比特率下往往会引入一些由编码引起的 artifacts,导致听感变差。

参数编解码器

参数编解码器的核心思想是通过对待编码的音频(如:语音)进行特定假设,并通过参数模型的形式将先验知识融合进编码的过程中。

编码器首先会估计模型的参数,然后经过量化模型进行进一步压缩,解码器则使用量化后的参数来驱动合成模式进行时域波形的重建。与波形编解码器不同的是,参数编解码器的目标不是在逐个样本的基础上获得高相似度的波形重建,而是生成在感知上与原始音频相近的音频。

传统音频编解码器面临的挑战

得益于 WebRTC 生态的蓬勃发展,opus 音频编解码器在业界被广泛使用,它着重于处理广泛的交互式音频应用场景,包括 VOIP (Voice over Internet Protocol)、视频会议、游戏内聊天,甚至远程现场音乐表演。

它由两种不同的编解码器构成,一个是用于语音的 SILK,另一个是用于音乐的 CELT。尽管 opus 及其他传统音频编解码器(如:EVS、AMR-WB、speex、MELP 等)都拥有着优异的效果,但在有限带宽条件下、信噪比低条件下和混响混音严重条件下均表现出了不同程度的局限性,无法应对当前复杂多变的应用场景,带来流畅清晰的音频通话体验。

AliIAC 智能音频编解码器

考虑到传统音频编解码在高码率下的优异表现及业内的主流地位,阿里云视频云音频技术团队提出了两款智能音频编解码器,E2E 版本和 Ex 版本。

其中,E2E 版本,可直接替换 opus 等传统编解码器模块,支持在 6kbps ~ 18kbps 下工作,对 16khz 音频进行编解码;Ex 版本则可在沿用传统编解码器的基础上,通过后处理的方式对 6kbps~8kbps 解码后的 16khz 音频进行修复增强,提升可懂度和音质。

算法原理

1、E2E 版本:是基于端到端的 encoder-decoder 模型,同时考虑了实际应用场景中会遇到的语音频谱损伤、存在混响及残留噪声等问题,结合 GAN 网络的训练策略,进一步提升解码后的音频质量;为了方便部署与使用,采用残差量化模块,支持单一模型可变比特率,范围在 6kbps ~ 18kbps。

2、Ex 版本:是针对被传统编解码器如:Opus, 在 6kbps ~ 8kbps 条件下解码后的音频,进行频率域修复 / 增强的深度模型。对 0 ~4kHz 频域进行幅度谱的损失补偿,在 4~8kHz 频域进行频谱的预测补偿,修复 / 增强后的音频在主观听感上(可懂度和音质)有明显提升。

算法性能

算法效果

场景一:真实场景有损频谱+混响情况

原始音频音频

opus 6kbps 效果音频

opus+Ex 增强效果音频

E2E 6kbps 效果音频

E2E 18kbps 效果音频

不同方法的频谱图对比:

从主观听感和频谱图均可看出,opus 6k Ex、E2E 6k、E2E 18k 版本较opus 6k版本在效果上均有明显提升,其中 opus 6k Ex 和 E2E 6k 在前半段频谱明显有损伤的情况下解码后有些许杂音残留,E2E 18k 版本则基本接近原始音频。

场景二:真实场景带噪情况

原始音频音频

opus 6kbps 效果音频

opus+Ex 增强效果音频

E2E 6kbps 效果音频

E2E 18kbps 效果音频

不同方法的频谱图对比:

从主观听感和频谱图均可看出,opus 6k Ex、E2E 6k、E2E 18k 版本较 opus 6k 版本在效果上均有明显提升,且音色音调均与原始音频接近。

AliIAC智能音频编解码器将继续演进

AliIAC 作为阿里云视频云音频解决方案的一部分,旨在充分利用数据驱动的思想来提高音频的编码效率,使得可以在更低带宽代价的前提下获得更好的音频通话体验。

目前,AliIAC 还处于算力、码率与效果的平衡阶段,需要进一步去解决实时性与音频生成效果稳定性等问题,但在带宽受限条件下,AliIAC 相较传统音频编解码器已经表现出了优异的效果。其中,在大多数实际场景中,E2E 18kbps 的效果与 opus 24kbps 的效果持平,E2E 6kbps 的效果与 opus 12kbps 的效果持平,平均可以节省 25% ~ 50% 的带宽消耗;而 Ex 版本则可以在不额外消耗带宽资源的前提下,主观 MOS 分平均提升 0.2 ~0.4。在未来,阿里云视频云音频技术团队将继续探索基于深度学习 + 信号处理的音频技术,创造极致的音频体验。

「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云产品技术交流群,和业内大咖一起探讨音视频技术,获取更多行业最新信息。

AliIAC 智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验的更多相关文章

  1. 移动通信最先进的音频编解码器EVS及用好要做的工作

    语音通信从最初的只有有线通信变成后来的有线通信与无线通信(移动通信)的竞争,当移动语音通信价格下来后有线语音通信明显处于逆势.如今移动语音通信的竞争对手是OTT(On The Top)语音,OTT语音 ...

  2. WebRTC音视频引擎研究(2)--VoiceEngine音频编解码器数据结构以及参数设置

    1.VoiceEngine Codec数据结构 WebRTC中,用一个结构体struct CodecInst表示特定的音频编解码器对象: struct CodecInst { int pltype;  ...

  3. 虚拟机在 OpenStack 里没有共享存储条件下的在线迁移

    虚拟机在 OpenStack 里没有共享存储条件下的在线迁移 本文尝试回答与 Live migration 相关的几个问题:Live migration 是什么?为什么要做 Live migratio ...

  4. 【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)

    智能合约的现状 以太坊在区块链上实现了智能合约的概念,用于:同质化通证发行(ERC-20).众筹.投票.存证取证等等,共同点是:合约逻辑简单,只是业务流程中的关键节点,而非整个业务流程.而智能合约想解 ...

  5. jQuery打造智能提示插件二(可编辑下拉框)

    在上一篇 jQuery打造智能提示插件 上改进,增加下拉按钮,修复点击下拉区域外不隐藏BUG 效果 下拉按钮素材: js封装,注意红色部分为BUG修复,然后传入boxwidth不带px: /* /// ...

  6. 使用n2n在没有公网IP条件下访问树莓派

    实现:在树莓派2和客户机都没有公网IP条件下实现远程访问控制 不足:暂时没实现网页代理 因为校园网环境没有公网IP,无法直接访问树莓派.之前有想过SSH反向代理:使用VPN,ddns(花生壳.no-i ...

  7. .NET DLL 保护措施详解(五)常规条件下的破解

    为了证实在常规手段破解下能有效保护程序核心功能(演示版本对AES加解密算法及数据库的密钥(一段字符串)进行了保护),特对此DLL保护思路进行相应的测试,包含了反编译及反射测试,看是否能得到AES加解密 ...

  8. 《Python CookBook2》 第四章 Python技巧 - 若列表中某元素存在则返回之 && 在无须共享引用的条件下创建列表的列表

    若列表中某元素存在则返回之 任务: 你有一个列表L,还有一个索引号i,若i是有效索引时,返回L[i],若不是,则返回默认值v 解决方案: 列表支持双向索引,所以i可以为负数 >>> ...

  9. 如何在已安装Python条件下,安装Anaconda,,并将原有Python添加到Anaconda中

    在安装Anaconda之前,有的已经安装过一个Python版本了,但是又不想删除这个Python版本,该怎么办呢? 概括:轻松两步--在系统环境变量中找到对应之前安装Python的路径并删除:直接将你 ...

随机推荐

  1. spring-boot--lernning之自定义starters

    思路: 1这个场景需要使用到的依赖是什么??? 2如何编写自动配置 @Configuration 指定这个类是一个配置类 @ConditionalOnXXXX 指定条件下成立的情况下自动配置类生效 @ ...

  2. python面向对象--快速入门

    1面向对象基本用法 1.1基本格式 class 类名: def __init__(self,x): self.x = x def 方法名字 (self): #函数在类里称为方法,self就是固定参数, ...

  3. Atomic 的实现原理

    1.直接操作内存,使用Unsafe 这个类 2.使用 getIntVolatile(var1, var2) 获取线程间共享的变量 3.采用CAS的尝试机制(核心所在),代码如下: public fin ...

  4. 学习GlusterFS(九)

    环境说明: 3台机器安装 GlusterFS 组成一个集群. 使用 docker volume plugin GlusterFS 服务器: 10.6.0.140 10.6.0.192 10.6.0.1 ...

  5. CountDownLatch和CyclicBarrier:如何让多线程步调一致?

    案例:对账系统的业务是这样的,用户通过在线商城下单,会生成电子订单,保存在订单库:之后物流会生成派送单给用户发货,派送单保存在派送单库.为了防止漏派送或者重复派送,对账系统每天还会校验是否存在异常订单 ...

  6. 无单位数字和行高 —— 别说你懂CSS相对单位

    前段时间试译了Keith J.Grant的CSS好书<CSS in Depth>,其中的第二章<Working with relative units>,书中对relative ...

  7. Chrome 已经原生支持截图功能,还可以给节点截图!

    昨天 Chrome62 稳定版释出,除了常规修复各种安全问题外,还增加很多功能上的支持,比如说今天要介绍的强大的截图功能. 直接截图 打开开发者工具页面,选择左上角的元素选择按钮(Inspect) W ...

  8. Android Studio配置openvc

    最近项目中需要用到opencv,于是就研究了一下怎么在Android studio中配置opencv,记录一下,免得以后还会使用. 一.因为本人Android Studio是4.1的,网上资料大多是3 ...

  9. Shiro 安全框架详解一(概念+登录案例实现)

    shiro 安全框架详细教程 总结内容 一.RBAC 的概念 二.两种常用的权限管理框架 1. Apache Shiro 2. Spring Security 3. Shiro 和 Spring Se ...

  10. 微信小程序获取当前时间戳、获取当前时间、时间戳加减

    //获取当前时间戳 var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log("当前 ...