前言¶
DeepSeek Harness(DSH)桌面會話頁右側有一列 turn rail 跳轉錨點,用來在長對話裏快速定位各輪次。默認樣式是靜態幾何:當前閱讀的錨點最長,未加載的最短。若希望在寫代碼、查資料時仍保留這層導航,又想讓界面有一點與當前播放內容同步的反饋,可以在不改錨點顏色、不蓋掉宿主狀態邏輯的前提下,用頻譜數據只驅動「條的長度」。
下面介紹社區插件 dsh-audio-rail-macos(維護者 Blueteemo,MIT,npm 包名 dsh-audio-rail-macos)。它僅面向 macOS 14.2+,通過 Core Audio Process Tap 採集本機正在播放的音頻,在瀏覽器側把 12 段對數頻譜映射到右側錨點的小白條長度上。分類上在 SkillHub 目錄裏屬於「趣味換裝」;倉庫當前 GitHub 星標爲 1。DSH 生態主張「一切皆插件」,SkillHub 等目錄站與 DeepSeek / 幻方無官方從屬關係,安裝前仍建議自行查看源碼與許可證。
這是什麼¶
一句話:macOS 專用 DSH 插件,讓會話頁右側錨點隨 Mac 當前播放音樂的 12 段真實頻譜脈衝,只改 2px 白條長度,不疊加顏色或發光,也不覆蓋「正在看最長、未加載最短」等宿主規則。
音頻分析在本地 Swift 採集器裏完成;瀏覽器只通過宿主在 127.0.0.1 上提供的 loopback 路由讀取每幀 12 個 0..1 的數值,音頻本身不上傳。
核心功能¶
視覺與頻譜¶
- 每根錨點對應一條 2px 高 的小白條;音樂只是在宿主已有的長度係數上疊加脈衝,不加顏色、不加發光。
- 12 段對數頻譜(約 45 Hz – 16 kHz),低頻在列底部、高頻在頂部,整列像豎起來的頻譜儀。
- 33 ms 一幀,帶 attack/release 平滑;停止播放後條會自行落回。
採集與生命週期¶
- 有頁面在看才採集:至少一個標籤頁訂閱時採集器才運行;最後一個訂閱斷開 15 秒 後自動退出;刷新頁面可接上仍在運行的實例。
- 不留下孤兒進程:宿主把 stdin 交給採集器,宿主退出(含崩潰)時管道關閉,採集器讀到 EOF 即退出,避免長期佔用系統音頻或錄音指示燈常亮。
- 換默認輸出設備(耳機、藍牙等)時採集器會重建 tap,無需重裝插件。
平臺與二進制¶
- 要求 macOS 14.2 及以上(Core Audio Process Tap)。
- 發佈包內採集器爲 arm64 + x86_64 通用二進制,Apple Silicon 與 Intel 均可使用。
package.json聲明宿主引擎dsh>= 0.2.0-rc.1,且"os": ["darwin"],非 macOS 不適用。
權限¶
首次運行需在 「系統設置 → 隱私與安全性 → 音頻錄製」 授權;被授權的是拉起採集器的進程(桌面端爲 DeepSeek Harness 本身)。拒絕授權不會彈錯,頁面 simply 不動;/audio-rail/status 會顯示 permission-denied,且不會空轉重試。授權後 刷新頁面(⌘R) 即可恢復訂閱。
安裝與啓用¶
先做安裝,再刷新會話頁並播放音樂驗證。
從 npm 安裝:
dsh plugin --profile desktop add dsh-audio-rail-macos
從 GitHub 安裝(倉庫已帶編譯好的通用二進制,無需本地 Swift 工具鏈):
dsh plugin --profile desktop add github:Blueteemo/dsh-audio-rail-macos
本地開發(改動即時可見):
dsh plugin --profile desktop add link:/path/to/dsh-audio-rail-macos
裝完後 刷新頁面(⌘R),播放任意系統音頻即可觀察右側錨點。
卸載:
dsh plugin --profile desktop remove dsh-audio-rail-macos
典型用法與自檢¶
日常¶
安裝並授權後,保持 DSH 會話頁打開,用 Music、瀏覽器或 IDE 播放音頻即可;無需額外配置文件。插件向 @deepseek-ai/dsh-client-ui-chat 注入客戶端邏輯(見 package.json 的 dsh.client.inject)。
用 curl 看狀態與幀¶
宿主在 127.0.0.1 上暴露 loopback 路由。將端口換成 GUI 地址欄中的 http://127.0.0.1:<port>:
curl -s http://127.0.0.1:<port>/audio-rail/status
期望形如 {"platform":"darwin","status":"listening",...}。status 可能依次爲 idle(無人訂閱)、starting、listening、permission-denied、error、unsupported。
查看實時幀(每行一個 event: frame,bands 爲 12 個 0..1):
curl -Ns http://127.0.0.1:58651/audio-rail/events | head -20
(示例端口 58651 需按你本機實際端口替換。)
單獨跑採集器(調試 native 層):
./native/bin/dsh-audio-rail-tap | head -3
輸出爲 NDJSON,約 33 ms 一幀。
實現要點(供排查參考)¶
native/ 內爲自寫 Swift 採集器:Core Audio Process Tap → 2048 點 FFT(Hann 窗)→ 12 段對數頻段 → 逐段相對歸一化,stdout 輸出 NDJSON。預編譯二進制位於 native/bin/dsh-audio-rail-tap;若改源碼需在本機執行:
npm run build:native
瀏覽器端思路(屬性選擇器跨 hash、脈衝乘在宿主狀態係數上、虛擬列表重掃等)借鑑 dsh-audio-rail(MIT);Core Audio 相關 Swift 改編自 dsh-bgm(MIT)。詳見倉庫 README 的 Credits。
適用場景與注意¶
適合誰: 在 macOS 14.2+ 上使用 DSH 桌面版、希望右側 turn rail 隨本機播放內容有輕微律動、且接受一次「音頻錄製」權限的用戶。偏展示與氛圍,不改變對話能力。
務必注意:
- 插件以 當前 DSH 進程權限 運行;安裝前應閱讀倉庫源碼與 MIT 許可證,確認隱私邊界(README 說明:採集在本地完成,瀏覽器只讀 12 個數字)。
- 無權限時界面無動靜屬預期行爲,先查
/audio-rail/status是否爲permission-denied。 - Linux / Windows 用戶應尋找其他平臺方案;本包
os字段僅darwin。
結尾¶
dsh-audio-rail-macos 把 Mac 系統播放音頻的 12 段真實頻譜接到 DSH 會話頁右側錨點上,只動白條長度、保留宿主錨點狀態語義,並在無訂閱時自動停採、避免孤兒進程。若需要目錄簡介與倉庫詳情,可分別打開 SkillHub 插件頁與 GitHub README:
- 目錄頁:https://www.skillhub.cn/plugins/Blueteemo/dsh-audio-rail-macos
- GitHub:https://github.com/Blueteemo/dsh-audio-rail-macos