隨時待命的聽歌識曲,這項 Pixel 獨占功能現在你也可以體驗

2022-07-06   少數派

原標題:隨時待命的聽歌識曲,這項 Pixel 獨占功能現在你也可以體驗

聽歌識曲功能大家肯定不陌生,它讓我們知道了不少金曲的演唱者和歌曲名。不過時間不等人,有時候當我們聽到心動旋律、慌忙掏出手機、打開 App、按下按鈕之後,歌曲已經進入尾聲。難道我們就只能惋惜著錯過可能的「本命歌曲」嗎?

此時一位 Pixel 用戶表示:

錯過金曲是不可能的,因為我們有聞曲知音(Now Playing)。

錯過金曲是不可能的,因為我們有聞曲知音(Now Playing)。

什麼是「聞曲知音」?

聞曲知音是 Pixel 手機搭載的一項聽歌識曲功能,它能夠讓 Pixel 手機自動識別周圍正在播放的歌曲而無需用戶手動觸發,並且更值得我們關注的是,這整個過程都是在本地離線完成,這是「聞曲知音」與一般聽歌識曲類 App 最本質的兩點區別。

Google Pixel 所搭載的聞曲知音功能

不過因為這項功能涉及到硬、軟體配合,所以在此之前一直都是 Pixel 獨占。好在最近,藉助 Ambient Music Mod這個開源項目(為了行文方便以下簡稱 AMM),我們也能把「聞曲知音」這樣獨特的功能帶到其他 Android 設備上來。

運行環境

畢竟是屬於一個移植項目,使用時 App 可能需要調用或配置某些系統接口,所以 AMM 需要一些特殊的運行環境:

對於搭載 Android 12 及更高版本設備,可以通過 Shizuku為應用提供運行環境;

對於搭載 Android 9 及更高版本設備,需要授予 root 權限;

必要的暢通網絡;

雖然開發者並沒有特別要求,但建議使用 ARM v7 及更新架構的高通 SoC 設備。

本文以配置了 Shizuku(ADB 激活)的三星設備為例,系統版本為 One UI 4.1(Android 12)。

安裝過程莫要心急

AMM 並不是一個開箱即用的 App,其初始化過程相對繁瑣一些。首先我們要知道,AMM 本身份為兩個應用組件,其中 AMM 應用主體是為用戶提供一個操作和配置的入口,另一個則是真正實現聽歌識曲功能的「聞曲知音」應用。因此在第一次啟動 AMM 並授權 Shizuku 權限後,應用就會提示下載安裝「聞曲知音」和配套的離線曲庫。

Shizuku 授權

這裡的曲庫並非是一系列完整歌曲,而是已經被 Google 處理過的歌曲特徵指紋。為了平衡存儲數量和識別效率,Google 將曲庫分為了兩類,其一是所有用戶通用的核心區庫,大約有 1.6 萬首曲目,其二是為不同國家和地區提供了更符合當地場景的曲庫(畢竟美洲大陸一般也不會播放東南亞歌曲吧),例如美國曲庫大約就包含了 69k 首曲目的特徵指紋。在設置過程中,你可以根據自己的聽歌喜好自由選擇地區,或者乾脆選擇自動。

接下來應用會申請一系列必要的權限,其中獲取手機狀態權限是為了監聽用戶是否在撥打電話或是設備自身正在播放聲音(包括提醒聲音和播放音頻),關閉電池優化則是保證 App 即使在後台也可以自動識別歌曲。另外,因為曲庫特徵數據來自於 Google,所以記得配置好網絡環境,最後等待曲庫下載完成,就可以正式開始「邂逅金曲之旅」了。

使用、設置與故障排查

雖然 AMM 是一個偏「極客」向的開源項目,但它仍然有著較好的使用體驗。值得稱讚的是,它的 UI 設計已經儘可能還原 Pixel 原生「聞曲知音」功能,應用適配了 Material You 設計,並且全量支持動態取色和動態主題圖標,能夠跟隨系統調色板變化 App 和圖標的配色風格,所以在 Android 12 中運行會獲得最好的視覺體驗。另外 AMM 還提供了一個非常好看的桌面小組件。

左:Pixel 原生功能 | 右:Ambient Music Mod

01邂逅金曲

主介面「Now Playing」則是我們使用和設置的功能入口,同時也集成了 Pixel 官方剛剛更新的手動觸發識別按鈕。

細心的你一定會發現,AMM 相比 Pixel 原生功能增加了一個「Updates」,在這裡我們不僅可以查看已安裝組件版本,還能切換、瀏覽和搜索離線曲庫內容,甚至還根據歌手和專輯進行了分類。關於曲庫操作的這些功能,可是連 Pixel 官方都沒有提供(與此同時,Pixel 用戶正在為切換曲庫地區而愁容滿面)。

在以上環境都配置完成的情況下,AMM 就已經可以進行聽歌識曲功能:

後台自動識別:識別成功的結果會顯示在主介面「Now Playing History」中,並且能夠看到具體時間,方便我們確定具體是哪一首歌打動了我們;同時 AMM 也提供了將當前識別結果顯示在鎖屏介面的開關,用戶還可以自定義樣式、位置、點擊操作等,不過該功能需要允許無障礙權限。

手動觸發識別:點擊按鈕後 AMM 會彈出錄製提示,等待進度環閉合後就會彈出識別結果;識別成功的話,用戶可以通過詢問 Google Assistant 搜索詳細信息,或者調用手機內已安裝的流媒體平台播放;無論是否識別成功,用戶都可以點擊「Playback」按鈕回放剛才錄製的音頻,並能夠保存為 PCM 格式文件。你也可以通過 AMM 提供的桌面小組件手動觸發識別。

02 一些你可能會用到的優化選項

AMM 已經儘可能還原了 Pixel 原生的「聞曲知音」功能,不過這兩者在原理上存在微小差異,暫時還不能做到像 Pixel 原生功能那樣「傻瓜且智能」。關於 AMM 的實現原理我們放到文末來說,這裡先來看有哪些選項可以進行優化。

為了平衡續航和識別功能,AMM 並不是一直在錄製和識別周圍的背景音頻,而是每間隔一段時間就啟動一次錄製識別,用戶可以在設置中通過「Period」和「Buffer」選項來調整識別間隔以及緩衝時長。過短的時間間隔能夠讓識別更加靈敏,但也會帶來更高的能耗,但時間過長也有可能錯過廣告插曲等背景音樂。如果你不希望 AMM 持續在後台監聽音頻,但又想儘快啟動識別,可以使用「Trigger when Screen On」選項,這樣只需要你在聽到音頻當下開啟手機螢幕,AMM 將會被立即觸發識別。

相對較新款的手機中,SoC 一般都會使用「大小核」設計,即使用性能更高的大核心去處理複雜任務,使用性能更低的小核心去處理簡單任務。用戶可以限制 AMM 僅使用小核心進行音頻識別,這樣能夠降低 AMM 的耗電量,尤其是你設置了更短的時間間隔。我們可以在高級設置中找到這一開關,當然這也不一定適用於所有手機,我們可以觀察開啟前後的耗電量差異來判斷該選項是否有效。

除此之外,AMM 還提供了夜間模式、備份和恢復、電源和流量使用限制等設置,大家可以根據需求自行調整。

如果 AMM 能夠在手機上正常使用,我們建議其他設置保持默認即可。不過 AMM 雖然被設計為在儘可能多的 Android 設備上運行,但由於不同設備之間的硬體選型、系統魔改等存在差異,所以你的手機在默認設置下不一定能夠正常使用 AMM。

03 如果不能正常使用…

當你測試很多遍之後仍然無法獲得識別結果,就需要排查故障原因了:

回放音頻異常:藉助 AMM 提供的回放功能,我們可以確認「聞曲知音」能否正常錄製音頻。正常情況下,回放的音頻至少是能夠聽出個大概;如果聲音太小,那麼就需要在高級設置中拉升「Gain」即音頻增益;如果你聽到的是一堆雜音,那麼需要在高級設置中啟用「Alternative Encoding」,根據開發者的描述,該選項會導致音頻聲音變小,所以還需要配合拉升增益。

On Demand 不支持:這一功能可以理解為「按需在線識別」,即當「聞曲知音」無法在離線曲庫中匹配到任何歌曲時,允許音頻上傳至 Google 進行在線識別。顯而易見,這項功能需要某些特殊的 Google 組件,然而遺憾的是,絕大多數國行手機都沒有內置完整的 Google 套件,其中就包括這一功能所需的「Music Recognition Service」,並且該組件要求系統內建才能夠正常運行。解決方法之一就是通過 Magisk 刷入對應模組,或是乾脆給手機刷入一個國際版 ROM,具體操作方法可以查看應用內提示或 開發者的說明;另外,該功能僅支持 ARM v8 架構 SoC。

無法成功錄製:我們在第一次使用 AMM 時一切正常,但過一段時間發現 AMM 不會在後台進行識別了,此時我們第一反應是通過手動識別進行測試;如果手動識別時應用多次提示錄製失敗,或者是卡在錄製啟動的 Loading 畫面,我們就要去檢查 App 的應用權限和後台電池優化選項是否正常,別忘了還有一個「聞曲知音」,因為它才是真正執行音頻識別任務的那個主角。

殊途同歸的實現方式

如果你讀完以上部分,那麼 AMM 應該可以正常使用了,如果出現了我們之前沒有發現的問題,也可以前往項目 GitHub 主頁提交 issues。如果你想了解關於「聞曲知音」和 AMM 的大致實現方式,可以繼續往下翻。

正如開篇所說,Now Playing 其實是 Pixel 獨占功能,因為 Google 基於 Pixel 手機特定的 DSP 硬體(音頻信號處理器)開發出了一種音樂識別模型。而 DSP 原本可以用來實現「OK Google」這種低功耗、無接觸的語音喚醒功能,即「熱詞監測」。

Google 對該功能進行了功能擴展,音樂識別模型就是通過熱詞方式來監聽背景聲音,如果判斷背景聲音是音樂,並且同時滿足了多種條件(例如沒有在撥打電話、設備自身沒有在播放音樂等),則會錄製 8s 音頻轉交給「Android System Intelligence」組件進行音樂識別,Now Playing 便是這個組件當中的一項功能。至於離線識別,其原理與在線識別相似,只是將篩選和壓縮後的音頻指紋庫存儲在本地。

Pixel 上的音頻偵測和識別流程

由於識別模型是針對特定 DSP 硬體開發,它難以適配到其他手機上。根據 AMM 開發者的描述,這種音樂識別模型只是「判斷音樂」而不是「檢測音樂」,所以他另闢蹊徑,繞過了 DSP 模型判斷,直接讓 AMM 定時觸發並將結果注入到監測過程當中,再通過熱詞權限進行錄音、遞交至修改版的「Android System Intelligence」(即之後安裝的「聞曲知音」應用),然後執行與 Pixel 相同的識別過程。這種方式存在一定劣勢,那就是無法精確感知音樂的開始和結束,所以才有了剛才提到的識別間隔、緩衝時長以及亮屏觸發等設置選項。

AMM 使用定時觸發的工作流程

你可能會發現,在使用 AMM 錄音時 Android 系統似乎並沒有在狀態欄彈出隱私指示標識,這正是由於使用了熱詞權限的原因。得益於 Android 12 更新,「熱詞監測」變成了一項系統權限,我們可以藉助 Shizuku 這種「橋樑」賦予給應用,這也是為什麼在 Android 12 上需要 Shizuku,而低版本則需要 Root 權限了。

藉助 Shizuku 使用熱詞權限進行音頻監測和識別的工作流程

雖然 AMM 只能通過定時觸發這樣的方式達成「被動音樂識別」的效果,在能效上肯定不及 Pixel 原生方案,並且現在主流設備也都使用了更先進的晶片(855 和 8 Gen1 除外)和更大的電池,能耗代價並沒有那麼顯著,幾天測試下來,AMM 和「聞曲知音」的耗電量遠不及我們聊微信、刷抖音,甚至低於「連接至 Windows」這種常駐後台、頻繁進行連接的服務,所以你可以放心地讓它常駐後台。

以上就是關於 Ambient Music Mod 和「聞曲知音」相關介紹,如果你想要獲得與 Pixel 近乎一致的「聞曲知音」體驗,可以前往 Ambient Music Mod 的 GitHub 主頁查看和下載最新版。

Ambient Music Mod:https://github.com/KieronQuinn/AmbientMusicMod

原文連結:

https://sspai.com/post/74109?utm_source=wechat&utm_medium=social

作者:Noah_Choi & 路中南

責編:克萊德

/ 更多熱門文章 /