老柯修机铺

通讯行老师傅的手机软件笔记——每款 App 装过、用过,才敢写下来

Pulsar 掃歌、增益與音效三層架構解析

為什麼這款播放器能在同樣的安卓媒體庫之上做到 ReplayGain、實時音效與曲庫治理三位一體?我從掃描機制到 Pro 版效果器層層拆解它的取捨。

Pulsar 是什麼、能幹嘛、適合誰

Pulsar 中文名叫脈衝音樂播放器,是安卓上一款存在超過十年、但至今仍被玩家反覆推薦的本地音樂播放器,更多功能細節可參考 Pulsar文檔。它把封面、藝術家、專輯、文件夾、流派、曲目六種分類同時擺在側邊抽屜裡,打開後自動把手機裡所有本機音樂資源掃進曲庫。支援 MP3、AAC、FLAC 等無損格式,Pro 版再疊上五段均衡器、四個實時效果器與 Last.fm scrobble,幾乎把一款離線播放器能做的事都做滿了。

但如果只是功能清單多,它早該被同類淹沒。真正讓我在意的是:同樣跑在安卓媒體庫之上,為什麼它在掃歌、ReplayGain、實時音效這三件事上的表現,從 1.x 用到 1.13.11 沒有人抱怨過「還是卡」?這背後是一套三層架構的設計取捨。

安裝

Pulsar 目前最新版本是 1.13.11,安裝包大小 13.51MB,僅支援 Android 平台。安裝本身是標準 APK 流程——從手機的應用商店或 Pulsar下載 頁面側載後點一次就能裝完。

真正要注意的是首次啟動的三件事:第一,它會立刻請求「音樂與音訊」權限,這個權限沒給,曲庫永遠是空的,後面再怎麼重掃都是白搭;第二,Pro 版與免費版的應用資料目錄名不同(com.rhmsoft.pulsar.pro vs com.rhmsoft.pulsar),兩者的播放列表、統計資料互不相通,同時在用兩個版本的切記別把備份文件放錯目錄;第三,如果你之前用過其他播放器在手機裡寫過 ReplayGain 標籤,Pulsar 會在掃描時自動讀取,但它不會自己分析並寫入增益數據——這件事必須事先在電腦端用第三方音訊工具批量做完,否則 ReplayGain 頁面的設置對那些沒有標籤的 mp3 完全不起作用。

安裝完成後的側邊導航抽屜,六種分類同時列出

第一層:掃歌——它怎麼從雜亂的手機裡抽出一個曲庫

我看過太多玩家抱怨「這款播放器掃不著我的歌」,最後絕大多數根因不是播放器,而是他們把 Pulsar 的掃描機制誤以為跟其他播放器一樣。

Pulsar 的掃描走的是安卓系統媒體庫 + 自己的資料表兩條路並行。系統媒體庫是安卓從 4.x 起就內建的一個 ContentProvider,任何播放器都可以查詢它拿到手機裡所有音樂文件的元數據;但系統媒體庫只負責「告訴你有這麼個文件」,不負責幫你排除鈴聲、錄音、語音備份這些東西。Pulsar 在這之上加了自己的過濾器——它讀每個文件的路徑與標籤,把 .nomedia 文件夾、通話錄音目錄、鈴聲文件夾這些自動排除;同時維護一張本地資料表,記錄每首歌的藝術家、專輯、文件夾、流派、播放次數與收藏狀態。

這裡有一個很容易被忽略的細節:Rescan library 只掃新增,不更新已有文件的元數據。你在電腦端給 mp3 補了 ReplayGain 標籤或改了封面,Pulsar 不會自動重新讀取這首歌的標籤——它只查自己本地那張資料表。要讓新標籤生效,得用它自帶的標籤編輯器進去存一次,或者清掉「媒體存儲」數據讓安卓重建系統媒體庫,再讓 Pulsar 重新掃。這是一個取捨:選擇快速掃描(只看 mtime)換來了掃描速度,但代價是對已有文件的標籤變更不敏感。

播放器自帶的標籤編輯器,ReplayGain 標籤可以在這裡查看與手動修改

第二層:ReplayGain——它讀取但不創造

ReplayGain 是整個 Pulsar官網 架構裡最讓我印象深刻的一個設計決策:它只讀取增益數據,不自己分析。

三種增益模式——Track(音軌增益)、Album(專輯增益)、Auto(自動)——全部是在播放時對當前這首歌的音量做一個偏移量調整。如果這個 mp3 文件裡寫了 REPLAYGAIN_TRACK_GAIN 標籤,Pulsar 在解碼之前就把偏移量套進去;如果沒寫,就用你在設置裡配置的「默認補償值」。這裡的關鍵是:ReplayGain 的運算量不小(每首歌需要解碼 10~30 秒才能算出合適的增益值),而安卓手機的 CPU 並不總是在空閒狀態。Pulsar 選擇把分析成本前置到桌面端工具(像 foobar2000、Metaflac 這些),播放器只做讀取與應用——這讓它在任何千元機上開啟 ReplayGain 也不會卡。

但代價也顯而易見:你必須事先給文件寫好標籤,這個功能才有意義。我看過幾個玩家以為 Pulsar 會自動幫他們算增益,然後說它的 ReplayGain 完全沒效果——這不是 bug,是設計者做的一個非常明確的邊界劃分。

第三層:實時音效——Pro 版才有的那四個盒子

Pulsar Pro 的音效頁共管六樣東西:五段均衡器(帶九組預設)加上四個實時效果器——混響、低音增強、環繞虛擬化、响度。這四個效果器全部是實時處理,不修改音訊文件本身。

我曾經好奇為什麼 Pro 版要把混響、低音增強、環繞、响度這四個效果器做成獨立開關而不是疊在均衡器裡。後來看了它的引擎切換設置(ExoPlayer vs MediaPlayer)才理解:這四個效果器走的是安卓原生的 AudioEffect API,而均衡器走的是 ExoPlayer 自己的 DSP 鏈。兩條路徑的延遲與兼容性不同——AudioEffect 在 MediaPlayer 引擎下延遲更低,但部分藍牙耳機鏈路下會失效;ExoPlayer 引擎下均衡器更穩,但與 AudioEffect 疊加時可能出現衝突。Pulsar 讓兩條路徑共存,用戶自己選引擎,這也是它在十年後仍沒有被音訊處理複雜度拖垮的原因。

「全部開上」永遠不是最優解——我自己的使用習慣是:現場錄音才加混響、重低音耳機才加低音增強、藍牙耳機大音量時關掉响度、外放時關掉環繞。每個效果器解耦成獨立盒子,就是讓你可以用最精準的方式搭配而不必被迫買一個大套裝。

架構取捨背後的適用場景

把三層放在一起看,Pulsar 設計者的傾向很清晰:把重計算、低頻操作丟給桌面端或系統層,播放器只做輕量、高頻、離線可見的事。ReplayGain 的分析丟給 foobar2000,掃描的系統媒體庫更新丟給安卓,實時音效走原生 API 而不是自己寫 DSP——每一個決策都讓它在低端機上跑得動,同時在高端機上不限制用戶疊加外部工具。

當然,這也意味著它從來不是給小白準備的。你得願意在電腦端給 mp3 寫標籤、得理解什麼是系統媒體庫重建、得在引擎切換頁面裡試兩三次才能找到最適合你耳機的那個組合。如果你要的是裝完就能直接聽、什麼都不用管的一鍵體驗,Pulsar 不是那類播放器——在那個場景下,Google Play Music 或 Spotify 的離線下載反而是更合適的選擇。

但如果你是那種會花一下午整理曲庫、會在手機上裝兩三個播放器對比、會在意「這首歌為什麼比前一首大聲」的人,Pulsar 這套三層架構的取捨會讓你覺得每一個決定都在你看得懂的範圍內。它沒有隱藏的魔法,也沒有讓你無法理解的黑箱。這或許就是一款能活過十年的本地播放器最核心的品質:它從一開始就選好了自己要服務的那群人,並且從來沒改過主意。

本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

同类文章