01
音频链路:编码到输出的四段
服务端以 FLAC/MP3 双版本分发,客户端按设备能力选择,解码后经系统混音或独占通道输出。
四段分别是:服务端编码、CDN 分发、客户端解码、设备输出。任何一段的重采样都会让高码率失去意义,桌面端因此提供「独占输出」开关绕过系统混音。
解码使用平台原生 API(Windows 为 Media Foundation,macOS 为 CoreAudio),避免第三方解码库带来的额外延迟。
- 双版本分发,按能力选择
- 原生解码 API
- 独占输出可绕过混音
- 支持 44.1/48/96kHz 输出
02
一起听:同步的是位置不是音频流
房间内共享曲目与播放位置,音频各端独立拉流,因此音质不互相拖累,人数上限 50。
同步采用「权威时钟 + 偏移补偿」:房主每 2 秒上报一次播放位置,其他端按自身时钟推算并微调播放速率,避免频繁跳转造成的听觉断裂。
网络抖动超过 500ms 时,客户端会主动降级为「按曲目对齐」,即只在切歌时同步,中间不追帧。
- 房间上限 50 人
- 同步误差 180–260ms
- 各自拉流不降音质
- 弱网降级为切歌对齐
03
下载管理:队列归并与校验
同一专辑的下载任务自动归并,支持限速、断点续传与文件校验,失败原因逐条可见。
队列并发默认 4,机械硬盘建议降到 2,否则随机写入会拖慢整机。限速可按时段设置,比如工作日 9:00–18:00 限制在 1MB/s。
每个文件下载完成后会做一次 SHA-256 校验,校验失败自动重试一次,仍失败则标记为「文件损坏」并给出重新下载入口。
- 专辑级队列归并
- 并发与限速可调
- SHA-256 校验
- 失败原因可见
04
桌面歌词与输出设备切换
歌词窗口独立置顶,支持双行与字号调节;音频输出设备可在播放中热切换,不需要重启客户端。
热切换时会保留播放位置与缓冲状态,实测从板载声卡切到 USB DAC 的中断时间约 0.4 秒。
歌词窗口支持点击穿透,方便在写代码或做表格时把歌词浮在最上层而不挡操作。
- 歌词窗口独立置顶
- 双行/字号可调
- 输出设备热切换
- 切换中断约 0.4 秒
05
本地库与云盘合并检索
本地文件、云盘文件与曲库结果在同一搜索框内分栏展示,可按来源过滤,避免重复下载。
检索优先级为:本地 > 云盘 > 曲库。同一首歌在本地已存在时,播放页会显示「本地文件」标签,点击可直接播放,不消耗流量。
本地文件按 ID3 标签建立索引,标签缺失时回退到文件名解析,支持「歌手 - 歌名」与「01. 歌名」两种常见格式。
- 三来源同框检索
- 本地优先播放
- ID3 索引与文件名回退
- 支持按来源过滤
06
开放平台:硬件与第三方接入
以 OAuth 2.0 授权,提供播放控制、曲库检索与状态回调三类接口,最小权限原则申请。
车机厂商通常只需要「播放控制 + 状态回调」两项权限,不需要读取用户歌单;智能音箱多申请一项「曲库检索」。权限在授权页逐项列出,可单独拒绝。
接口有速率限制:单应用每分钟 600 次调用,超限返回 429 并给出重试间隔。
- OAuth 2.0 授权
- 三类接口按需申请
- 权限逐项可见
- 限流 600 次/分钟