抖音怎么拍合唱有歌词(一起学(抖音快手)音视频,一篇文章解析「音视频同步」合唱实现)

作者:洪洋

原文:https://mp.weixin.qq.com/s/EmS5WfBS61qG4CpKW37PyA



就在上周末,我们见证了一场全球音乐会音乐活动,一个世界在家里一起。整个活动汇聚了大量名人大咖。他们在家里以网络直播的形式向全球观众演唱。其中很多艺人同屏演唱,但这其实是被录制播出的。来自世界各地的上百名歌手,现场设备和网络条件都有差异,实时演唱难度极大。

著名音乐电台DJ、SoundArio音乐基金会创始人加菲尔德说:

几百个歌手,时差、现场录音、网络技术条件都不一样,不可能在线实时协作进行直播,甚至两个人弹唱都不行,因为0.17秒的延时足以抵消世界顶尖音乐人的现场技巧。

这段话的延迟,《为什么》足以抵消世界顶级音乐人的现场技巧。我们举个例子来说明。以宋道祥为例。其钢琴乐谱为4/4拍,标准音乐速度为80拍/分钟。合唱团每小节唱8到12个词,主要由八分音符和十六分音符组成,基本上每个音符对应歌词中的一个词。粗略来说,唱一个词大概需要200-300ms。

在不考虑伴奏的情况下,假设两个歌手A和B之间的端到端延迟为100ms。从声音传播过程来看:

  • A先唱,B听到A的歌。此时产生100ms的延迟;
  • 听到A的歌声后,B开始加入合唱,歌声传到A,此时又产生100ms的延迟;
  • 然后a会一直延迟200ms去听B的歌。按照之前唱每个字所花的时间计算,在听感上至少会慢半个字,这是错位的。

    如果考虑到伴奏的传递,以及伴奏与演唱的混合,情况就更复杂了。一般只要端到端延迟小于150ms,听者就无法感知。所以,如果你以“稻香”的速度唱一首歌,你可以用小于80 ms的延迟来唱副歌,如果你唱的更快,歌词更密,延迟要求会更低,否则,当你一起唱的时候,两者永远不会在时间上对上,歌手的体验会很糟糕。中国距离美国一万多公里,光速30万km/s,光纤传输会有一些损耗,可以按照20万km/s计算,粗略按照中美之间15000km的物理距离计算,单向延迟约75ms,不可逾越的双向物理延迟约150 ms,而且一个世界的4人合唱现场一起涉及多方合作所以以目前的技术水平,跨超远距离的多方合唱是很难实现的。在《同一个世界》中,我们看到的基本上都是录播。但无论是录音还是实时合唱,给观众带来最好的体验才是最重要的。

    在很多社交应用中,都有合唱功能。这是如何工作的?


    合唱中的延时

    先解释一下延迟是怎么产生的。该场景中的延迟包括两部分:设备端延迟和端到端延迟。我们需要根据不同阶段的延迟来分析如何减少延迟。

    采集和回放终端的音频延迟



    图:音视频传输流程

    在这里,音频=唱歌,或者说音频=唱歌+伴奏。

  • 设备端的时延包括采集端的采集、预处理和编码,播放端的接收、解码和后处理产生的时延,编码前后两端的网络时延。
  • 服务器上的延迟主要与硬件性能、采用的编解码算法和音视频数据量有关。设备上的延迟可以达到30~200ms甚至更高。
  • 设备端的音频延迟也可以细分为以下几点:

  • 音频采集延迟:采集到的音频会先被声卡转换,声卡本身会产生延迟;
  • 音频播放延迟:这个延迟与播放设备的性能有关;
  • 音频处理延迟:前后处理算法,包括AEC、ANS、AGC等。,会带来算法延迟,通常这里的延迟就是滤波阶数;
  • 端网络延迟:这部分延迟主要出现在解码前的抖动缓冲区。
  • 此外,合唱场景通常为用户提供各种KTV音效,即语音在编码和传输前会增加一步预处理,这也会增加终端上的音频延迟。

    如果想降低音频在终端上的延迟,就需要针对不同的机型优化编解码算法,减少音频采集、编解码、音频处理带来的延迟。终端延迟还与设备性能和系统密切相关。如果其中一个歌手设备性能不好,也会影响合唱效果。


    端到服务器延迟

    除了终端上的延迟,音频数据从端到服务器、从服务器到服务器的传输也会有较大的延迟,这也是阻碍“实时合唱”功能落地的重要因素。

    影响采集终端与服务器之间、服务器与播放终端之间延迟的因素有几个:客户端与服务的物理距离、客户端与服务器的网络运营商、终端网络的网速、负载、网络类型等。如果服务器部署在附近的服务区,并且服务器和客户端的网络运营商相同,那么影响上下游网络延迟的主要因素是终端网络的负载和网络类型。一般来说,在无线网络环境下传输时延波动较大,传输时延通常在5ms ~ 10ms不等,而在有线宽带网络下,同城传输时延可以稳定低至5ms~10ms。而国内中小运营商多,还有一些重叠的网络环境,跨国传输,所以时延会更高。


    服务器之间的延迟

    这里,我们要考虑两种情况。第一,两端连接到同一个边缘节点,所以作为最优路径,数据通过边缘节点直接转发给播放器;其次,如果采集终端和回放终端不在边缘节点的同一个覆盖区域,那么数据将通过靠近采集终端的边缘节点传输到骨干网,然后发送到靠近回放终端的边缘节点。但是服务器之间的传输和排队也会造成延迟。


    在实时合唱的场景下,为了解决网络不畅和网络抖动的问题,需要在采集设备、服务器和播放器处添加缓冲策略。一旦触发缓冲策略,就会有延迟。如果多次堵塞,延迟会慢慢累积。为了解决阻塞问题和累积延迟,需要优化整个网络状况。


    合唱也要高音质


    歌手都有一个共同的心理需求,就是希望别人夸自己唱得好。在合唱现场,音质尤为重要。影响实时合唱音质的因素主要有:音频采样率、码率和延迟。

    采样率:是每秒钟从连续信号中提取的由离散信号组成的样本数。采样率越高,音频声音越接近真实声音。

    码率:是指每秒传输编码(压缩)后的音频数据所代表的数据量(比特数)。比特率越高,每秒采样的信息量越大,对这个样本的描述就越准确,音质就越好。

    假设网络状态稳定,采样率越高,比特率越高,音质越好,但对应的单次采样信息量越大,传输时间可能越长。换句话说,高音质也可能影响延迟。


    敲黑板:解题思路


    我们前面提到过,“音频”因解决方案不同而有不同的含义,这与你的实现逻辑有关。

    1.音频=唱歌+伴奏

    在采集端,如果我们传输的音频包含演唱和伴奏。那么就是这个逻辑的意思,如下图所示。



  • 一个歌手先得到伴奏;
  • A的歌曲和伴奏在本地混合后传输到B;
  • B按照A的音频唱歌,那么B就能听到合唱效果;
  • b将合唱后的混音传输给A,A可以听到合唱效果。
  • 在这种传输模式下,如果A要听到合唱效果,会有两个“端到端延迟”,即步骤2和3。因为B听到的是A的演唱和伴奏,这个方案可以保证B的体验。但是因为传送到B and B歌曲的伴奏需要传回给A,所以A听到的伴奏和B的声音之间有很大的延迟。根据上面的延迟推断,你需要付出更多的努力,将端到端的延迟降低到歌手a可以接受的水平。

    2.音频=唱歌

    在这里,我没有停止陪伴的意思。为了解决伴奏和演唱之间的时间延迟问题,我们还有另外一个方法,就是通过云端把伴奏同时传送给A和B,基本上保证了他们在同一秒内可以听到同一个音符。接下来要解决的只是歌曲的传输。基本实现逻辑如下,这也是我们自己的实现方法:



  • 声网从服务器或本地获取合唱伴奏;
  • 声网通过SD-RTN实时同步发送伴奏给歌手A和B;
  • 歌手A和B会同时听到伴奏,然后根据伴奏开始自己的演唱;
  • SD-RTN将A的歌曲实时传输给B,同样,B的歌曲也将实时传输给A;
  • 歌手A和B都能实时听到伴奏和对方的演唱;
  • 同时,观众可以实时听到两位歌手的合唱效果。
  • 这种逻辑的好处是,A和B可以几乎同时听到伴奏和唱歌,所以可以实时听到对方的声音。要解决的问题是减少每首歌传输到对方的端到端延迟。相对来说,更简单。

    另外,其实我们在线上的场景中可以看到,很多歌手平时唱歌的时候都会戴耳挂,所以这个耳挂的效果在线上的实时场景中也是非常重要的:

    (1)歌手是用来监听自己的声音和伴奏,调节音色和情绪的,对延时要求特别高。

    (2)通过叠加音效和美声唱法,歌手可以听到更极致的音效。

    Agora SDK提供了低延迟k歌耳环功能的统一接口。通过与手机厂商的深度技术合作,可以提供适用于不同手机品牌和型号的k歌和直播app的耳环应用。我们将传统耳环的延迟从100到300毫秒降低到50ms以内,结合整体Agora音频解决方案,实现超低延迟、超低噪音、极致音效的耳环体验。

    抖音怎么拍合唱

    在github上获取我们的合唱演示,并亲自尝试一下。

    https://github.com/AgoraIO-Usecase/Online-Chorus/

    我已经对提到的知识点做了一些系统的指导和视频。有需要的朋友可以私信我【NDK】我会分享给你。如有不妥,请指出,交流,共同进步。

    NDK模块开发

    音频和视频开发往往很困难,而这种困难的技术就是NDK的技术。音频/视频/高清大图/人工智能/直播/Tik Tok等今年是离用户最近的一年,和我们生活最相关的技术总是在寻找最终的技术落地平台。以前是windows系统,现在是移动系统,基于Android,所以AndroidNDK技术就成了我们的必备技能。要学好NDK,需要学习C/C++、jni、Linux的基础知识。除此之外,音视频编解码技术、流媒体协议、ffmpeg都是音视频开发的必备技能。



    您可以还会对下面的文章感兴趣

    使用微信扫描二维码后

    点击右上角发送给好友