回答里面说了很多差别这里就舉例一个比较细节的功能差异,也是蛮温馨的功能
在QQ新版的8.0里有这样一个设计:语音进度条功能,上线之后突然登上微博热搜那么这個温馨的功能,是如何开发出来的呢它的技术难点又在哪里?我们有第一手资料为你还原~
?现有的这些点击播放的语音气泡真的满足了所有用户需求吗?emm…?
总结一下:发送语音一时爽接收语音想撞墙。。
1、语音消息支持点击暂停、继续播放再也不用崩溃地“从头再来”。?
2、语音消息支持进度拖动想听哪里听哪里。
3、语音消息支持展示音量频谱声音大小一看便知。
整个需求可以简化成三个子过程:
2、 接收方音频数据的来源
3、 播放器支持暂停、恢复和拖动操作这里主要介绍过程一和过程二。
这里主偠涉及到波纹真实性问题和波纹美观两个问题
波纹真实性是指如何用较少的波纹个数代表较多的原始PCM数据,同时保证波纹的高振幅部分玳表声音响亮的部分
波纹美观主要问题包括:1、波形持续高的地方,波形较平;2、声音突然停止音柱落差较大
声纹的最大个数为28,但采样率16K会员最长录音5分钟,录制数据可达到5*60*16K,怎么通过使用28个波形来代表5*60*16K个原始数据
解决办法:一个波形代表一定时间的数据,整个原始波形被划分成一个一个的区间
如何代表:一种是取最大值,一种是取均值并进行试验对比。
综合以上实验抽样方式采用取区间方式,在区间内取均值且以四舍五入取区间的方式进行抽样。
在产品灰度和内部用户体验过程中反馈的一个主要问题是声纹波形不美观。经过和设计产品讨论得到不美观的两个原因及解决方案:
1.声音说话一直很大时,音柱高度达到最大导致波形较平
解决方案:因为是茬绘制波形时添加的随机处理,为了保证UI刷新时波形不变这里使用一种伪随机算法:以声纹个数作为随机种子,取余计算波形周期判斷音柱的高度,当超过一定值时对音柱做正弦波处理,平滑语音波形效果对比:
2.声音突然从低到高或者从高到低时,音柱高度落差过夶导致波形参差不齐。
解决方案:减速插值和平均综合
减速插值器:低振幅波纹绘制高度递增大于高振幅波纹绘制高度递增下图形象說明:
减速插值器使用的函数为y=1-(1-t)^(2f) ,通过f(factor)去调整减速的大小在实际过程中,经过对比f取值为1.5,即对应上面绿色的线
平均综合:在減速插值后,如果相邻两根音柱高度差仍较大超过阈值时,则拔高低的音柱从而降低音柱的落差。拔高的方式主要使用平均值法即取两条音柱高度的平均。效果对比:
经过上述两种波形处理后在保持用户能够区分语音有无声音的同时,也有一个相对美观的视觉效果
接受方有两种方式产生波形数据,一种是接受数据后在本地解码产生原始PCM数据(接收方解码方案);第二种在发送方,发送方将处理恏的波形数据点发送给接受方(发送方传输波纹特征方案)如何在这两种方案间取舍?先各自分析一下每个方案的优缺点:
1、 Ptt消息传输過程完全不需要改动
性能较差每收到一个ptt都需要额外开启一个解码线程去解码,在群聊天中如果有大量的ptt消息,会有很大的性能问题
发送方传输波纹特征方案
1、 Ptt消息传输需要增加波纹特征
2、 PC版本和老版本没有波纹特征数据,无法绘制波纹
接受方不需要解码没有性能问題
结论:虽然接收方解码方案比发送方传输波纹特征方案的有点还多一个,但是接收方解码方案的性能问题是致命的没有好的方法去優化同一时间接收大量ptt消息场景。因此选择了发送方传输波纹特征方案同时为了兼容各个版本,在没有波纹特征数据时接收方会随机苼成波纹来统一交互。
产品的意义对未来的展望
语音进度条发布后很好的满足了用户在收听过程中被打断时需要暂停和继续,以及需要偅复收听时可以灵活地选择起始位置的诉求大大地节省了时间用户收听语音消息的时间,提高了效率接下来,我们还将继续挖掘用户茬语音沟通中的痛点和诉求新增语音消息倍速播放、语音自动转文字等功能,进一步提供用户的沟通效率让沟通更加灵活和便捷。
补充:和创新点相关的小故事
语音消息作为如今最基本的沟通方式已经在各大社交APP中被广泛使用走路运动过程、眼神不好的老人、不会打芓的小孩,都可以用语音来发送信息与人交流,为人们的线上沟通提供了极大的方便
然而,对于语音接收方来说收听语音消息是一件相对比较耗时的事情,比如一个人阅读400字的文本消息只需要20秒,而听完一段400字的语音则需要1分钟在同样的信息量下,收听语音消比閱读文字消息整整需要花多3倍的时间!
而且现有的社交APP中,语音消息的收听必须是一件连贯的事情一旦中途被打断,必须从头再听一遍;或者语音消息的某部分未听清楚也必须从头再听一遍。
因此收听语音消息对于接收者来说,可能是一件非常耗时和低效的事情洏目前的语音转文字功能,虽然能一定程度上解决阅读效率的问题但是由于发送者的口音、语音识别技术的不成熟,转文字的过程往往會存在无法识别、识别错误或识别偏差的现象此时,接收者还是需要通过收听语音来准确获取消息的内容
基于以上的种种现象,我们茬QQ上提出对语音消息支持暂停、继续播放、进度拖动的语音进度条功能然后用户在收听过程可以随时暂停、随时继续、随意拖动,想听哪里就听哪里极大地增强了语音消息收听过程的灵活性和语音消息的收听效率,解决用户的一大痛点
腾讯技术工程来到知乎啦。本号竝足于计算机以及互联网领域技术相关话题特别是前沿领域的探索,目的是为技术爱好者提供专业、有见解的技术话题将鹅厂最新的技术文章传递给知友,同时为研究人员提供讨论和参与的开放平台共建技术生态圈。
腾讯技术工程未来也会邀请广大的鹅厂技术人员莋为我们的智囊团,为知友解答工作中的技术困惑同时也请大家多多为我们仔细准备的回答点个『赞』,让我们在分享和鼓励中共同进步有任何建议,欢迎私信我们!
更多技术干货请持续关注知乎号以及订阅我们的专栏