Repository navigation
v0.31.0
ToneCore v0.31.0
网易云音源自研直连(不依赖第三方脚本);入库改为按精确曲目 ID(避免入库到翻唱版);曲库页功能收纳。
一、网易云音源自研直连
为什么必须补
v0.30.0 把音源并入 RoMusic 与飞牛后,实测 23 份脚本里 5 份加载失败
(六音音源、聚合API接口、野花、野草、长青SVIP,均为联网初始化超时)。
而当时的自研直连只覆盖酷我(fetchKwUrl)。网易云是搜索质量最好的主力平台,
却只能靠第三方脚本 —— 脚本一失效,主力平台就没了。这是明显的能力缺口,
所以照酷我的范式补上 wy-url.ts。
实测结论(不是猜的)
| 接口 | 结果 |
|---|---|
/api/song/enhance/player/url?ids=[id]&br=<码率> |
✅ 免登录,直接返回真实播放地址 |
/api/song/enhance/player/url/v1?level=exhigh |
❌ 参数错误 code:400(需额外加密参数,故不用) |
一个必须说清楚的事实:无损会被静默降级
实测同一首歌(id 1973665667)各档位:
br=128000 → type=mp3 br=128000 ✅
br=192000 → type=mp3 br=192000 ✅
br=320000 → type=mp3 br=320000 ✅
br=999000 → type=mp3 br=320000 ⚠️ 实际只给到 320k!
也就是无 VIP 时要无损也会拿到 320k。好消息是响应里的 br 会如实反映,
所以代码回读实际 br/type 来判定音质 —— 界面显示的是真实音质,不会谎报「无损」,
落盘扩展名也与内容一致。
二、修复:入库可能落到翻唱版(重点)
这是哥哥说「仔细思考还缺少什么」时我发现的真问题,跟「歌词提前跑完」是同一个坑。
根因
/api/play 只吃 keyword + artist,会把推荐位和搜索结果自带的精确平台 ID 丢掉,
退化成「按歌名重新搜一遍」。
问题在于:打分再准,也抵不过再搜一次带来的不确定性。用户在推荐位看到的
明明是原唱,点「入库」后服务端重新搜索,很可能落到翻唱版 —— 用户完全无从察觉。
修法
新增 POST /api/fetch-by-id(platform + songId),直接按 ID 取链,
保住用户看到的那一首。
前端两处入库都改走它:
- 曲库页推荐位(
saveOne) - 在线搜索(
saveOne+saveBatch)
批量入库此前有同一个问题,一并修正了。批量现在是「入队」语义
(逐条入下载队列),文案也相应改为「已入队」,不再声称「已入库」。
三、曲库页功能收纳
改之前的状态很不一致:
| 位置 | 改前 |
|---|---|
| 曲库页推荐行 | 完全没有操作按钮,只能点整行播放 |
| 在线搜索行 | 3 个按钮平铺(播放 / 入队 / 入库) |
| 主页列表行 | 已用 RowActions 收纳(v0.28.0) |
现在统一按主页 RowActions 范式:
- 列表视图:播放留行内(高频操作),其余收进「更多」菜单
—— 播放 / 加入队列 / 下载入库 / 复制曲目信息 - 网格视图:hover 浮出,避免小卡片被按钮挤满
- 以后新增功能只需在
rowActions()里加一项,不用再挤布局
验证
npm run build ✅ web + server 均通过
npm test ✅ 15 项全过
package-lock ✅ 未漂移
需要你实测确认
- 曲库页:推荐行右侧应出现「更多」菜单,含 下载入库 / 复制曲目信息
- 入库正确性(本次重点):从推荐位挑一首入库,到主页比对是否是原唱
—— 这是这次修的核心问题,值得验一下 - 音质:非 VIP 账号入库无损时,实际会得到 320k(界面会如实显示,不是 bug)
待办
- 酷我(kw)在线搜索封面:该平台不返回可用封面地址(实测 404)
- 音源状态显示口径
- 锁屏动态歌词:浏览器能力边界,做不到