導讀:隨着現代社會生活方式變化,社交娛樂的方式也在逐漸改變。傳統面對面的社交娛樂活動正在逐步變革,越來越多的交互行為逐漸轉移到網絡上。RTC 技術的進步也推動了網絡娛樂形式的變化,單方向信息傳遞方式如電影、聽歌、看視頻為主的娛樂方式占比在下降,互動性更強的方式如互動直播、語音通話、在線 KTV 歌等卻在逐步崛起。
音頻處理的必要性
作為人類最重要的交流方式之一,聲音的處理至關重要。一方面是因為人類對於聲音極其敏感,聲音的傳播受人體生理結構特點的影響,由於視覺受限於光照和方位,不是時刻可以依賴的信息獲取來源,很多情況下聽覺成為人類對環境信息感知的最重要通道。另一方面聲音脫離畫面單獨存在的交流方式也有獨立應用的場景。
RTC 互動交流功能作為極其重要的功能,對音頻通話的處理提出了以下要求:
-
超低延時。實時互動零距離
-
超高的通話質量。回聲、噪聲等影響聽感的因素需妥善處理,使通話過程無干擾
而社交娛樂的特點對音頻處理又提出了新的要求。如用戶希望得到高質量的音樂、好的臨場感、趣味性強的音頻效果、高質量音頻內容共享等方面。因此,這就要求我們需要從不同的方面去優化音頻,以達到最優效果。今天我們分享的就是音頻共享。
音頻共享的概念
音頻共享一般是指將設備中音頻聲音共享給其他參與者,使雙方能夠聽到同一種聲音,如一起聽歌等。
通話中的用戶聽到相同的聲音,在某些情況下對於用戶的臨場感提升很重要。有一種直接的方式是可以從麥克風通道讓對面的用戶聽見本端的聲音,但很多時候這樣的效果不會太好。采集播放環節的失真,麥克風通道針對人聲的特定處理都可能會破壞高質量音頻的效果。
提供一個繞過前端處理環節並且靈活方便應對各種場景的音頻共享功能就變成了現實需求。
網易雲信音頻共享的實現方案
為了滿足用戶多個場景下對音頻共享的需求,網易雲信實現了使用靈活的音頻共享方案。
這里提供了多種共享聲音來源。可以使用源文件,當然也包括網絡音頻源。
通過內置解碼器解碼后混音,可以兼容常見的 Mp3,AAC 等多種格式數據文件,這是最簡單常見的一種方式。
當用戶對第三方軟件播放的聲音很喜歡時怎么辦?我們基於系統接口提供了播放數據的抓取和處理,讓用戶不用苦於無法獲取數據源,使得音頻共享的來源更加多樣化。
這里的架構和常見的 RTC 架構似乎有些許不同之處,不光增加了一個回聲消除模塊,參考信號的來源似乎也有變化。這就是這個架構特殊的地方,下面一個回聲消除模塊用於基本通話,由於共享的聲音同時要被自己和對方聽到,麥克風采集到的聲音里也可能會包含這部分信號,需要消除的部分不僅要包括對端的聲音,還要包括本端播放的聲音。
這里取用實際播出的信號作為參考輸入,可以保證本端人聲輸入更干凈。另外一個額外的回聲消除用於消除對端的人聲。在使用第三方播放聲音作為共享源的時候,我們拿到的信號包含了播放的全部內容。這樣的處理可以在共享源中消除掉對端聲音,使得共享過程中仍能保證高質量的音頻通話。
音頻共享的應用場景
上述音頻共享方案是一個統一架構,可以用於游戲開黑、音頻分享、線上 KTV 等場景。涵蓋了娛樂辦公的多個場景。
有了這個基本處理框架以后,就可以通過靈活設置內部流程,配合適當的外部邏輯實現各項功能。以下圖為例:
把上面的第三方音頻內容換成游戲、音樂播放器或者瀏覽器,就可以通過簡單操作實現游戲開黑、一起聽歌、會議等音頻共享場景了。
如果覺得這個例子有些簡單,那么以下是一個在線 KTV 合唱實現的例子。
左側是主唱端,提供伴奏音樂,在本地的人聲加入后,通過 RTC 音頻流傳給副唱。
右側的演唱者的聲音會通過 RTC 流傳給主唱,以供兩人合唱同步,同時將副唱的人聲和主唱側傳過來的包含主唱人聲的歌曲混合,形成完整的合唱,推送給直播觀眾。
以上是一個在線 KTV 的場景實現。當然,在線 KTV 場景的實現涉及多個方面,遇到的問題遠遠不止音頻共享這部分。歌詞的傳遞、各端的同步、音頻端到端的延時等問題都是需要克服的障礙,解決好這些問題才能提供更好的體驗
總結
網易雲信的 SDK 產品提供完整的音頻共享解決方案,支持雙聲道全頻道,可以覆蓋包括游戲開黑、一起聽歌,在線 KTV 等一系列場景。如有興趣可以登錄網易雲信官網下載 Demo 進行體驗。