作者 / Smule 工程團隊: David Gayle、Chris Manchester、Mark Gills、Trayko Traykov、Randal Leistikow、Mariya Ivanova。
作為目前下載量排名前列的唱歌類應用,Smule Inc. 一直致力於投入大量資源來提升其應用的 Android 體驗,以提高整體音頻質量。具體而言就是減少延遲時間,讓歌手在表演時能夠通過耳機聽到自己的聲音。擅長音頻和視頻技術的團隊在 2021 年很大一部分時間都忙於必需的提升工作,將逾千萬 Android 用戶使用的 Smule 應用從使用 OpenSL 音頻 API 轉換為使用 Oboe 音頻庫,從而使錄製完成率提高了約 10% 以上。Smulehttps://play.google.com/store/apps/details?id=com.smule.singandroidSmule Inc. 是卡拉 OK 應用的潮流企業,旗下的應用每天幫助數百萬用戶演唱最愛的歌曲,並分享表演。Smule 應用超越了傳統的卡拉 OK,專注於共同創作,為用戶創造了獨一無二的機會,可以與朋友、平台上的其他歌手及其最喜歡的音樂人分享音樂和合作。而音頻質量至關重要,Smule 團隊在 2020 年看到了在 Android 平台提升體驗的潛力。
Smule 使用的舊版 OpenSL 雖然支持全球市場的各種設備,但不太適合利用新設備的高速硬件。Smule 開發團隊認為,升級音頻系統是必要且合乎邏輯的改進。Smule 曾面對兩種可行的改進途徑,第一種是針對 AAudio 進行改進,這是 Android O 中引入的高性能 Android C 音頻 API,專為需要低延遲的應用而設計。第二種是採用在內部同時封裝了 AAudio 和 OpenSL 的 Oboe。經過細緻評估,Smule 開發團隊選擇了 Oboe,此方案具有易用的代碼庫、廣泛的設備兼容性和強大的社區支持,可最大限度減少延遲時間,並充分利用可用的原生音頻。AAudiohttps://developer.android.google.cn/ndk/guides/audio/aaudio/aaudioOboehttps://developer.android.google.cn/games/sdk/oboe改用 Oboe 意味着在應用架構和技術上將發生重大的變化。因此,Smule 在更新過程中採取了謹慎的做法,有計劃地逐步發布,首先面向少數的特定設備型號以驗證質量;然後逐漸地面向更多設備 (將少數使用 Oboe 時出現問題的設備恢復到 OpenSL)。這種循序漸進、有條不紊的方法可以最大限度地降低風險,並讓開發團隊能夠在出現設備特定問題時及時處理。Smule 改用 Oboe 來幫助改善應用體驗。他們希望大幅降低音頻播放崩潰率,消除錄製時的迴響和噼啪聲等問題,以及減少音頻延遲。在之前的推文《關於 Android 音頻延遲的最新動態》中曾介紹過,二十種最熱門的設備使用 Oboe 後,平均延遲時間從 2017 年的 109 毫秒減少到現在的 39 毫秒。109 毫秒的監聽延遲會聽到干擾現場演唱的明顯迴響,而延遲 39 毫秒則低於實時應用可接受的閾值。當下高端設備的延遲時間都在 22 毫秒以內,這種一致性是一大優勢。Smule 使用 Oboe 後,或許是因為延遲時間更短,歌手藉助 Smule 首屈一指的音頻效果演唱時能通過耳機聽到自己的聲音,同時又沒有迴響,錄製完成率因此得以提升。利用 Oboe 專用的高效協作式 GitHub 門戶,Google 團隊發揮了重要作用,不但幫助 Smule 實現 Oboe 集成,還為其提供重要的數據洞察和支持。兩家團隊通力合作,完成了迄今最大的 Oboe 部署,數百萬活躍用戶受益匪淺。Smule 團隊解決了某些 Oboe 代碼問題,而 Google 團隊與部分移動設備製造商一起進一步增強了 Oboe 的兼容性。Oboehttps://github.com/google/oboe/issues
對於歌手社區而言,音頻質量至關重要,我們一起致力於幫助 Smule 提供最佳體驗,並助力音樂創作,我們為此深感欣慰。
既然是大規模部署,自然會面臨設備特定問題。例如,操作系統內置功能會導致原始音頻流中出現迴響聲效,造成 Smule 不能正常應用自己的專利 DSP 算法和音頻濾波器。Google 團隊立即施以援手,迅速為開發庫提供更新和補丁。Oboe 問題反饋的流程簡單,描述明確,便於 Google 團隊及時解決。Smule 還克服了其他設備特定障礙,其中包括特定芯片組錯誤。比如,Oboe 需要單聲道麥克風輸入時,一些設備提供的是引入一個模擬單聲道麥克風輸入的立體聲輸入。Smule 在 Oboe 的 GitHub 中創建工單,以提供示例並使用 Oboe 測試應用重現此問題。Oboe 的 GitHubhttps://github.com/google/oboeGoogle 開發的 Oboe 測試器應用工具可幫助用戶在實現過程中解決和標識問題。事實證明,此工具在測試 Oboe、AAudio 和 OpenSL ES 的許多功能、測試 Android 設備,以及衡量延遲時間和故障等方面特別有用。此應用可提供大量有助於模擬絕大部分音頻設置的功能。Oboe 測試器還可用於自動化測試,方法是使用 Android Intent 從 Shell 腳本啟動。由於集成涉及大量設備,Smule 非常依賴自動化測試。Oboe 測試器應用https://github.com/google/oboe/tree/master/apps/OboeTester/docs在 Smule 確信已解決設備特定問題,並且 Oboe 音頻相當穩定後,Smule 改用大範圍的對比測試發布方式。短短几周內,Smule 將使用 Oboe 的人群從目標設備的 10% 增加到 100%,這得益於 Oboe 在發布期間不斷收到積極反饋和綠色 KPI 指標。結果不言而喻,使用 Oboe 的 Smule 用戶會唱更多歌,就這麼簡單。不重複的卡拉 OK 錄製量以及合唱 (或二重奏) 增加了高達 8.07%,不重複的上傳量增加了 3.84%,而演唱完成率則增加了 4.10% 以上。Smule 觀察到,在 2021 年第三季度和第四季度,錄製完成率增加了 10% 以上。使用 Google 提供的 Firebase Crashlytics 工具,Smule 發現自 Oboe 全面應用以來,與音頻相關的崩潰減少,應用更穩定,即便使用低端設備也如此。Smule 敬業的客服團隊發現,與音頻相關的投訴減少了 33%,其中包括 (非預期的) 機器人音效和迴響等問題的投訴。Firebase Crashlyticshttps://firebase.google.cn/docs/crashlytics改用 Oboe 的決策已頗有成效。此應用不同以往,更穩定更出類拔萃,Smule 完全能夠採用更新技術,進一步提升音頻和硬件質量。最重要的是,Smule 用戶可以更得心應手地製作音樂,這才是我們的使命。歡迎您關注 "Android 開發者" 微信公眾號了解更多開發者的成功故事。您可以通過下方二維碼或在文章底部私信,向我們提交反饋,分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支持!

點擊屏末|閱讀原文|即刻了解更多應用質量優化的相關內容
