V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
vincentchyu
V2EX  ›  分享创造

SonicLens:让听歌记录成为你的数字资产,不应只是流媒体服务器上的冷数据

  •  
  •   vincentchyu · 14 天前 · 1040 次点击

    🎵 你的听歌历史,不应只是流媒体服务器上的冷数据

    大家好,作为一名 macOS 深度乐迷,我一直觉得:音乐不仅是流动的空气,更是我们生命中不曾停歇的数字资产。

    然而,目前的流媒体平台( Apple Music, Tidal, Qobuz 等)往往将我们的听歌记录封锁在各自的围墙内。如果你使用 AudirvanaRoon 追求极致音质,这些宝贵的聆听痕迹更是难以被统一记录和深度挖掘。

    于是,我用 Go 编写了 SonicLens (音眸)


    ✨ 什么是 SonicLens ?

    SonicLens 是一架专为 macOS 用户打造的“声之透镜”。它静默地守候在播放器之后,通过高频采样与无感监控,将你的每一次聆听凝结为属于你个人的、跨平台的音眸轨迹

    🔗 GitHub: https://github.com/vincentchyu/sonic-lens


    🚀 核心亮点

    • 🛡️ 数据资产化: 所有播放数据通过 SQLite 、MySQL 存储在本地,彻底摆脱平台限制,你的数据你做主。
    • 🎧 多平台无感监控: 基于 Go 并发特性,完美支持 AudirvanaRoon 以及 Apple Music 的实时状态采集。
    • 👁️ 音眸智能洞察 (Sonic Insight): 接入 AI 大模型( Gemini/Ollama 等),对歌词进行深度情感与语义解析,帮你从文字维度重新认识每一首歌,尤其是小语种。
    • 实时交互仪表板: 采用 WebSocket 架构,秒级同步播放状态(比特率、封面、进度等),UI 追求极致的设计感。
    • 📮 一键分享印记: 生成带有封面的 AI 见解海报,让你的聆听瞬间充满仪式感。

    🛠️ 技术侧写

    作为一个程序员,我在实现过程中加入了一些好玩的细节:

    • 使用 Goroutines 为每个播放器开启独立监听。
    • 通过 AppleScript 实现对底层播放器的无感采样。
    • 遵循 Last.fm 协议实现 Scrobble 逻辑,并使用 Redis 进行状态预测加速。
    • 前端基于 SSE (Server-Sent Events) 实现 AI 解析结果的流式呈现。

    📸 效果展示

    (附上 README 中的几张截图)

    项目展示 AI 解析展示 1 AI 解析展示 2 播放展示


    📢 结语

    这个项目是我对“科技与人文”结合的一次尝试。如果你也是对音质有追求、对数据有执念的 macOS 用户,欢迎试用并提出你的建议!

    如果觉得还不错,也欢迎点个 Star 鼓励一下。

    再次感谢大家的时间。


    GitHub 地址:https://github.com/vincentchyu/sonic-lens


    小红书可以搜索 #Soniclens #音眸轨迹 词条

    第 1 条附言  ·  11 天前
    # 专辑管理与 MusicBrainz 深度集成特性清单

    ## 概述
    实现了完整的专辑( Album )生命周期管理,并深度集成 MusicBrainz (MB) 能力,支持专辑元数据的精准补全、曲目轨道号自动校正及可视化详情展示。

    ## 变更详情

    ### 1. 数据库模型扩展
    - **Album**: 独立存储专辑信息(名称、艺术家、发行日期,流派)。
    - **TrackAlbum**: 维护歌曲与专辑的多对多关联,并记录每张专辑内的曲目序号(`track_number`)。
    - **ReleaseMB**: 缓存从 MusicBrainz API 搜索到的原始 Release JSON 数据。
    - **AlbumReleaseMB**: 记录用户手动确认的本地专辑与 MusicBrainz Release (MBID) 的关联关系。
    - **TrackPlayRecord**: 新增 `album_id` 字段,解决同名专辑区分问题。

    ### 2. 后端逻辑 (MusicBrainz Service)
    - **数据归集**: 实现了从现有记录中自动提取并生成专辑档案的初始化逻辑。
    - **初选补全**: 实现 `SearchAndCacheReleases`,支持根据专辑名/艺术家搜索 MB 候选发行版。
    - **精选维护 (深度维护)**: 实现 `DeepingMaintenance`。获取 MBID 详细元数据后,支持自动同步发行日期、确认曲目列表完整性,并强制校正本地记录的轨道序号。
    - **SaveReleaseMB 优化**: 改用 `(mbid, album_id)` 组合索引,解决同名专辑搜索重复问题。

    ### 3. API 与交互
    - **REST API**:
    - `GET /api/albums/:id`: 获取专辑详情及其所有曲目。
    - `GET /api/musicbrainz/search-releases/:album_id`: 触发 MB 搜索。
    - `POST /api/musicbrainz/deep-maintenance/:album_id`: 触发深度同步维护。
    - `POST /api/track-album/unlink`: 解除 TrackAlbum 关联(人工修复用)。
    - `GET /api/track`: 返回 Track 信息时增加 `album_id` 字段。
    - **前端增强**:
    - 在仪表盘热门专辑图表点击可直接弹出专辑详情模态框。
    - **样式重构**: 使用 CSS 变量统一亮色/暗色主题,修复之前硬编码颜色问题。
    - **操作按钮**: 详情页新增"初选补全"和"精选维护"交互按钮,打通 MB 同步链路。
    - **歌曲详情跳转**: 歌曲详情页的专辑名可点击跳转至专辑详情模态框。
    - **曲目管理**: 专辑详情中的曲目列表增加"解除"按钮,支持人工修复错误关联。

    ## 相关截图
    - ![专辑详情 1]( https://raw.githubusercontent.com/vincentchyu/sonic-lens/main/memory/2026-03-09/album_2026-03-10_18-40-26.png)
    - ![专辑详情 2]( https://raw.githubusercontent.com/vincentchyu/sonic-lens/main/memory/2026-03-09/album_2026-03-10_18-40-43.png)
    - ![专辑详情 3]( https://raw.githubusercontent.com/vincentchyu/sonic-lens/main/memory/2026-03-09/album_2026-03-10_18-41-26.png)
    - ![专辑详情 4]( https://raw.githubusercontent.com/vincentchyu/sonic-lens/main/memory/2026-03-09/album_2026-03-10_18-42-51.png)
    8 条回复    2026-03-17 20:14:47 +08:00
    astrodaw
        1
    astrodaw  
       14 天前 via Android
    很早就有这个想法,一直没有行动。
    感谢开发者。即刻用起来
    Aaron01
        2
    Aaron01  
       14 天前 via iPhone
    很有意思👍
    vincentchyu
        3
    vincentchyu  
    OP
       13 天前
    @Aaron01 感谢
    vincentchyu
        4
    vincentchyu  
    OP
       13 天前
    @astrodaw 因为用的平台很多,最致命的是当因为某个音乐平台恶性竞争而弃用时发现歌单听歌数据全部不能导出。当 Apple Music 要换区,几年的歌单数据,收藏没法做新账号的自动迁移,太痛了。每年出榜单还要等各个官方出歌单 top 统计,还有就是听了好多年的小语种的某些资源,解析后突然发现原来歌词讲的是这个太惊艳了。
    aero99
        5
    aero99  
       13 天前
    项目挺有意思,可是听歌大部分时间是用手机
    Siefy1024
        6
    Siefy1024  
       12 天前 via iPhone
    @aero99 #5 +1
    vincentchyu
        7
    vincentchyu  
    OP
       12 天前
    @aero99 哈哈后面会有用音箱的时候,手机耳机的质量 后面会做提升的
    linuslv
        8
    linuslv  
       4 天前
    以前有个 Last.FM ,在各大平台记录,但也一直无法覆盖所有端。
    非常支持您的项目,希望越做越好,目前手机、数播( NAS 里本地音乐+流媒体 TIDAl/网易云/Apple Music )比较多,macos 上几乎不会播放
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2902 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:11 · PVG 21:11 · LAX 06:11 · JFK 09:11
    ♥ Do have faith in what you're doing.