语音聊天室源码中的变声,应用了哪些算法?
导读:2021开年以来,语音聊天室源码伴随着Clubhouse的爆火再获资本的关注,国内相关产品都迎来了股价的大幅上涨,预计未来音频化在社交领域还会有长期且广泛的需求。
在移动互联网技术加持下,语音聊天室源码不仅可以满足多场景下的社交需求,体验也迎来了革新,尤其是AI+5G技术,对音频社交的驱动将更为明显。在语音聊天室源码中会基于音频技术增加变声、美声、立体声、混响和场景化音效等,来丰富用户的听感体验。本篇技术分享就来讲讲音频社交场景中的变声是应用了哪些算法来实现的。
01 变声是如何实现的?
当我们日常观看视频时,有时会使用倍速播放。在加快播放速度时,我们会感觉视频中的男声听起来有点像“女声”;在放慢播放速度时,我们能听到类似于《疯狂动物城》中那个说话慢吞吞的“树懒声”。这些其实就是简单的变声。
从技术的角度并不难理解,如果我们用16k的采样率去采集一个100Hz的正弦波,而用32k或者8k的采样率去播放的话,那么这个正弦波的频率就会提升一倍(200Hz)或者降低一倍(50Hz)。这样将音频的频率升高或者降低的方法很简单,提升一倍就是每隔一个丢弃一个样本,放慢一倍就是进行一个线性插值。用专业的术语来说,这是一个重采样的过程。按照重采样方法是可以实现一个变调的,但同时也很容易发现,音频的时间变长或者变短了,和我们原始输入的音频长度不一致了,这在实时通信中是不能接受的。在实时通信中,我们要的是一个变调不变速的变声功能,单一的重采样方法是做不到的。当然除了重采样,我们还有其他的一些变声方法能够实现变调不变速的需求。
02 变声有哪些常见的算法?
常见的变调算法有时域、频域和参量法。时域较易实现,多采用变速不变调+重采样实现变调不变速等。频域以及参量法就相对复杂,并且计算量相比于时域大了很多。本次主要简单介绍一些常见的时域和频域算法。
在时域内主要是OLA(Overlap-Add)类算法:OLA,同步波形叠加法(Synchronized Overlap-Add, SOLA)、固定同步波形叠加法(Synchronized Overlap-Add and Fixed Synthesis, SOLAFS)、时域基音同步叠加法(Time-Domain Pitch Synchronized Overlap-Add, TD-PSOLA) 波形相似叠加法(waveform similarity overlap-and-add, WSOLA)等,频域内主要是基音同步波形叠加算法(Pitch-Synchronized OLA, PSOLA)等。
1)OLA
OLA是最简单粗暴的一种TSM方式。对原始语音进行分帧后,间隔一段采样点,重复或者丢弃其中某些语音帧来重新建立语音。这样就实现语音聊天室源码简单的变音效果。原理如下图所示:
a.分帧,对时域音频进行分帧处理;
b.在输入信号X上加上一个汉宁窗;
c.在第一帧后间隔固定点数Ha取出第二帧;
d.把第二帧语音加窗后与第一帧overlap-add。
如此操作到语音结束就能重建一个新的变调语音。但是这算法存在一定的局限性,无法保证语音是连续的,可能会出现基音断裂的情况。这样的语音听起来会有咔吧声,造成了语音的失真。
2)波形相似叠加法(waveform similarity overlap-and-add, WSOLA)
了解了简单粗暴的OLA算法后,我们可以清晰的知道OLA算法的局限和缺陷。当然也知道造成这种缺陷的原因是什么:相位不连续导致的。为了减小基音断裂和相位不连续问题,Verhelst和Roelands提出了波形相似叠加法(WSOLA)。目前开源代码soundtouch使用的就是该算法。其原理如下图:
a.在原始音频中取出第一帧,让后对该帧进行加窗,输出到y信号上;
b+c. 在虚线蓝色范围内找到第二帧,第二帧相位参数应该和第一个帧相位对齐,在蓝色范围内寻找与第二帧最相似的帧作为输出帧,作为y信号的第二帧;
d. 最为相似的帧与第一帧overlap-add到y信号上
重点在b.c两步操作中,如何寻找最相似的帧。很多论文中给出了一种最直接的方法,计算“自相关”。虽然WSOLA能够解决基音断裂和相位不连续问题,但是它会影响音色,将WSOLA应用于打击乐乐器的音频时,这种现象将会更加的明显。
3)基音同步波形叠加算法(Pitch-Synchronized OLA, PSOLA)
PSOLA的算法原理与WSOLA有所不同,PSOLA在频域处理的,它能进一步达到基音同步的目的。在该算法中,变速和变调是两个独立的过程,由不同的参数控制。先对基音进行检测,标记基音周期。通过标记的基音周期将语音划分为多个合成单元。通过重复或者丢失合成单元来实现语速的控制。通过改变相邻合成单元的重叠长度或者重采样结合变速来改变语音的基频。
PSOLA是对基频进行修改的,因此很好的保护了共振峰,不会对音色有太大的影响。不过该算法在频域中进行处理的,计算量大,很难满足实时的变速与变调处理。
03 结束语
以上简单介绍了语音聊天室源码中三种常见的变声算法,这三种算法可以粗略实现大叔音、萝莉音以及怪兽声等。但是想要做到变声后的声音听起来更加真实自然,就需要进一步的优化调试了。除了这些算法外,还有其他的变声音效,比如常见的“惊悚声”,运用了vibrato或者tremolo算法,还有“山谷空灵音”运用了echo算法等等,这些算法都是基于传统的信号处理实现的。在传统的信号处理变声方法外,还有更高级的变声算法:AI变声。AI变声相比于传统的信号处理方法,会让语音聊天室源码变声后的声音更加真实自然。
注:文中图片来源于《A Review of Time-Scale Modification of Music Signals》论文
语音聊天室源码中的变声,应用了哪些算法?相关推荐
- 语音聊天室源码开发点赞功能,用 MySQL 还是 Redis ?
为了提升用户在语音聊天室源码中的互动性,一般在开发动态广场功能时会支持用户间对动态进行点赞,所以点赞功能可以说是语音聊天室源码开发的基础性功能,今天我们就来聊聊点赞.评论.收藏等这些场景的db数据库设 ...
- 使用 Redis 实现语音社交聊天室源码中的排行榜功能
在语音社交聊天室源码中,排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择. 一般语音社交聊天室源码的排行榜都是有实效性的,比如"用户积分榜&quo ...
- Android聊天室源码开发,悬浮窗的实现及封装思路
为了实现语音聊天室源码的多场景应用,悬浮小窗口在语音聊天室源码开发中还是比较常见的需求,主要是指用户在语音连麦过程中打开其它界面或者退到桌面时语音连麦不会中断且会有一个悬浮小窗口位于最上层,接下来我们 ...
- YShout一款PHP+TXT+Ajax嵌入式在线聊天室源码
简介: YShout是一款PHP+TXT+AJAX开发嵌入式在线聊天室源码,UTF-8编码. 可以非常方便的嵌入到的你的网站中,无需数据库,采用TXT存储数据,小巧灵活,移植方便.采用AJAX技术,增 ...
- 如何正确使用语音聊天平台源码的用户分析功能
任何一个平台的运营,都首先要了解自己平台的用户,用户从哪里来.从哪个渠道了解到我们.留存率是多少.充值打赏率是多少.可能有什么阻碍了用户付费--这些都是平台运营的关键,我们无法直接知晓用户心里在想些什 ...
- 想把语音聊天程序源码上架,这工作可怎么做?
<2019中国网络视听发展研究报告>显示,2019年,网络视频用户规模高达7.25亿,其中网络音频用户达3.01亿,且从2018年底开始,陌生人语音社交程序如一匹黑马般杀出,成为新的社交热 ...
- 聊天室平台搭建【免费下载 无需积分/C币】java、Android、php多平台聊天室源码打包下载
关键词:多款聊天平台源码合集免费下载 #聊天源码,#聊天工具,#源码下载,#仿QQ,#聊天室源码 聊天室平台搭建 搭建自己的聊天交流平台 [点击此处]下载源码 原网址:https://download ...
- 仿9158 VC++视频聊天室源码
视频聊天室源码简介: 成熟产品可提供全套系统源代码(包服务端,客户端,网站平台) 采用C++语言开发系统速度快,稳定.H264视频编解码视频清晰,流畅,同时3路视频
- 什么是语音聊天软件源码,语音直播间礼物如何开发
语音聊天软件源码是指,能够通过其搭建"用户使用其可以进行语音聊天操作"的软件源码. 语音聊天软件源码的形式是很多样的,它可以以直播的形式出现,可以以多人语音房间的形式出现,也可以用 ...
最新文章
- MFC对话框控件成员变量编程熟悉 - 开发一个简单天线长度计算器
- c语言 字符串 if,C语言用if(strstr(s1,s2))判断字符串是否存在子字符串,无论有没有都会进入到if里是怎么回事?...
- Embeded linux之移植iptables
- linux socket 编程(C语言)
- 以下不属于时序逻辑电路的有_电工电子技术(不建议浪费时间学习的科目)
- kubectl apply -f_广州车展捷豹路虎参展阵容 全新F-PACE 路虎卫士90
- 漫话:如何给女朋友解释String对象是不可变的?
- 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点
- scrcpy能显示不能控制
- diskcheck.sh
- 苹果cms视频模板源码
- 常用正则表达式匹配Antconc英文句式搭配
- 使用typescript开发集成阿里云短信接口
- 【每日随笔】飞书云文档使用 ( 注册飞书云文档账号 | 创建云文档 | 分享云文档 )
- KumiaoQQ机器人框架源码
- 快速部署安装libart_lgp
- my.cnf文件的内容详细解释
- Java8 :流式数据处理
- 用dd实现linux硬盘备份
- exchange 2013 批量启用AD域中已存账号的邮箱(转)