dsh-audio-rail-macos:讓 DSH 會話錨點跟着 Mac 系統音頻律動

前言

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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜