feat(music): add audio quality workflow

This commit is contained in:
jxxghp
2026-08-10 10:23:02 +08:00
parent b3b376f2b1
commit 75e56d8e9a
31 changed files with 1085 additions and 12 deletions

View File

@@ -190,6 +190,8 @@ AniList 榜单、探索、详情、人物和推荐接口优先通过 `anilist-ch
音乐元数据使用 `MusicMeta` / `MusicInfo` 独立模型。`music_type=recording` 表示单曲,`album` 表示包含多首曲目的完整专辑,`artist` 仅用于浏览;稳定身份分别使用对应的 `musicbrainz:<mbid>`。单曲和专辑可进入搜索、订阅、下载、整理、刮削和已配置音乐媒体服务器的入库检查,艺术家不能作为订阅或下载目标。
音乐识别结果同时提供 `audio_format``audio_lossless``audio_quality``bit_depth``sample_rate``bitrate``audio_specs``audio_quality_score`。本地文件识别读取实际音频流参数,站点资源识别从标题和描述提取声明参数;码率、采样率的存储单位分别为 bps 和 Hz。
| 方法 | 路径 | 说明 |
| :--- | :--- | :--- |
| GET | `/api/v1/media/search` | 当 `type=music``source=musicbrainz` 时按歌曲、专辑或歌手关键词搜索音乐元数据,参数:`title``type``count` |
@@ -203,6 +205,8 @@ AniList 榜单、探索、详情、人物和推荐接口优先通过 `anilist-ch
专辑下载与订阅按“整包”处理:下载层会读取种子文件清单并以专辑 `total_tracks` 校验独立音频文件数量;未确认完整覆盖时不会把专辑订阅销订,也不会把部分曲目报告为完整专辑已入库。音乐刮削遵循 `music` 的标签、封面和歌词策略,歌词通过带有界 TTL/LRU 缓存的 LRCLIB 模块保存为同名 `.lrc``.txt` 旁挂文件。
音乐订阅可使用 `audio_quality=hires|lossless|lossy`(支持正则组合)、`audio_format``min_bitrate``min_bit_depth``min_sample_rate` 过滤资源。`best_version=1` 开启音质洗版,系统按格式、无损属性、位深、采样率和码率换算 0-100 优先级,只下载高于 `current_priority` 的候选DSD 或 24-bit/192 kHz 无损资源达到终态 100。内置规则 `HIRES``LOSSLESS``FLAC``ALAC``APE``WAV``DSD``MP3``AAC``OPUS``BITRATE320``BITRATE256``BITRATE192` 可用于自定义过滤规则组。
#### 下载
| 方法 | 路径 | 说明 |
@@ -288,7 +292,7 @@ TMDB 缓存查询响应的 `data` 包含 `count`、`recognized`、`unrecognized`
媒体相关 MCP 工具(如 `search_media``query_media_detail``search_torrents``query_library_exists``add_subscribe``transfer_file``scrape_metadata`)接受 `tmdb_id`/`tmdbid``douban_id`/`doubanid``bangumi_id`/`bangumiid``anilist_id`/`anilistid`,也接受 `media_source` + `media_id`。音乐调用还使用 `media_type=music``music_type=recording|album|artist`;其中艺术家只允许搜索和详情浏览。工具返回的媒体、订阅、下载和整理记录会带回可复用的专用 ID、通用主身份以及音乐实体字段。
Agent 音乐流程与影视共用同一采集管线,但实体边界不同:单曲通过 `music_type=recording` 按一个文件处理;专辑通过 `music_type=album` 类似电视剧整季包,按一个目录/资源处理并校验总曲目数;艺术家不是采集目标。`scrape_metadata(media_type="music")` 会按策略写音频标签、封面和歌词,并返回歌词新增、已存在、未匹配和失败数量。
Agent 音乐流程与影视共用同一采集管线,但实体边界不同:单曲通过 `music_type=recording` 按一个文件处理;专辑通过 `music_type=album` 类似电视剧整季包,按一个目录/资源处理并校验总曲目数;艺术家不是采集目标。`add_subscribe` / `update_subscribe` 支持音乐音质筛选字段和 `best_version` 音质洗版;`query_subscribes` 会返回筛选条件及当前音质快照。`scrape_metadata(media_type="music")` 会按策略写音频标签、封面和歌词,并返回歌词新增、已存在、未匹配和失败数量。
`get_search_results` 可使用 `title_pattern` 对种子标题执行正则筛选,也可使用 `content_pattern` 联合匹配种子标题、简介和标签。`title_pattern` 保持仅匹配标题的兼容语义;需要在结果中查看种子简介时,传入 `include_description=true`。两种正则参数与站点、分辨率等结构化筛选条件同时传入时按 AND 关系组合。