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