雷锋网(搜索“雷锋网”公众号关注)按:本文作者陈孝良,工学博士,声智科技创始人。雷锋网独家文章,转载请联系授权。 微信应用号的内测无疑是一个重磅消息,这几日覆盖了媒体头条,各个领域都在猜测微信应用对于APP带来的重要影响。虽然暂时还无法确认微信应用在音频支持方面的细节,但是微信这几年在音频方面的进步还是有很多惊喜。 微信对于音频的支持主要有两种方法, 一个是微信内置的浏览器,另外一个就是JS-SDK,这两种方法面向的开发应用场景不同。JS-SDK对于音频的支持主要是录音和识别,但是这两个功能被微信自身严重限制,扩展性很差,当前主要应用于微信Native SDK集成的场景。 微信应用推出之前,真正能够带给开发人员想象力的则是微信浏览器。微信浏览器曾经也很垃圾,老版本对于H5和CSS3的支持很差,一度让开发者吐槽为“移动端的IE”。 2016年4月,微信浏览器终于升级到X5 Blink内核,而且Android和IOS平台兼容性基本一致,当时就激起各个开发社区的一波热浪。 微信浏览器能够支持哪些音频功能?我们用html5test进行了测试,结果如下图:
可以看到,微信浏览器已经全面支持最重要的Web Audio API接口。Web Audio API是H5里面一个用来处理和合成声音的Java接口。这个API可以被用来编写游戏声音引擎,以及实现类似各种音乐制作软件对声音的编辑和处理等功能。 事实上,Web上的音频播放一直比较落后,在H5之前主要依赖于Flash或者QuickTime的插件形式。而在此之前的音效体验,基本都是依赖于APP底层驱动或者硬件内置音效的方法。H5的Audio标签具有非常重要的意义,它允许了基本的流式音频播放。 但是, Audio标签仅能提供给开发人员对声音文件进行读取,播放,暂停以及音量调节的功能,它并不能处理更复杂的音频应用。对于复杂的基于Web 的游戏或者交互式应用,特别是游戏音频引擎和桌面音频处理应用里实现的混音、处理、滤波、音效、定位等功能,则就需要Web Audio API来进行处理。 Web Audio API包括了支持复杂混音的模组化音频路由、高动态范围音频处理、多采样精度和低延时音频处理、动态音效生成、声音包络和淡入淡出支持、声道分离和合并处理、音视频分离支持、网络实时通信支持、现场音频处理支持、动态压缩和频域处理、音频可视化支持、非线性效果和滤波器支持以及声信号参数生成等等。这些功能罗列起来,是不是有点类似音频领域的PS软件?事实上,利用这些API,可以快速做出一款“美声”的微信应用出来,下图就是Web Audio API的可视化效果截图。
甚至,Web Audio API直接支持了各种场景空间音效,比如仅仅通过简单的几行H5代码就可以随意切换不同的场景,仿佛置身于真实的场景之中,享受沉浸式的声音体验。这些场景包括:大/小房间、教堂、音乐厅、山洞、隧道、门厅、森林、露天剧场、通过门口的一个遥远房间的声音、滤波器效果。好吧,几乎可以抛弃专业的音效插件了!甚至将来,硬件仅仅打通录音和播放的通道就可以了,至于效果完全交由软件来处理。 当然,Web Audio API最为吸引人的,还是对于空间音频,通常称为3D音频的支持。这里所说的3D音频需要加上“虚拟”两字,毕竟和杜比全景声相比还是有较大差距,但是若应用于当前流行的VR游戏或者聊天,Web Audio API的这项功能也还是不错。Web Audio API全面支持Equal-power、HRTF、距离衰减、多普勒频移、声源/听者模型等虚拟3D音频功能,利用这些API,几十行代码就可以实现较为逼真的3D效果。
这里要阐述下HRTF,即头相关传递函数(Head Related Transfer Function),通俗来说,就是试图模拟人耳获取声音的模型,并且通过这个模型虚拟出来任意声源所对人耳所造成的感觉。 Equal-power也是3D音频的一种方法,但是效果不如HRTF更好一些。HRTF主要参数是ITD(Interaural Time Difference )双耳时间差、ILD(Interaural Level Difference)双耳强度差和双耳相关系数(Interaural Coherence)。科学家通过大量实验验证,这些参数和人耳处理声音的机制密切相关,但是没有准确的理论推导。因此HRTF需要测量众多人耳的数据,并通过这些数据建立起黑盒子的声学模型,atv,这有点类似机器学习的意思。 (责任编辑:本港台直播) |