## 诊断流程样例:歌词 Anki 音频对齐闸门 ### 输入 | 字段 | 示例 | |---|---| | song_id | `beauty-and-a-beat` | | 权威 MP3 | `~/Music/lyrics-authoritative/Beauty and a Beat.mp3` | | 候选 LRC | `downloads/lrc_candidates/beauty-and-a-beat/*.lrc` | | 既有生成记录 | `generated/beauty-and-a-beat/summary.json` | | Anki 媒体清单 | `collection.media` / 本次 package manifest | ### 流程 1. 读取 MP3 元信息:时长、title、artist、bitrate、文件 hash。 2. 对比 `summary.json`:如果 summary 记录的音频时长是 34 秒,但权威 MP3 是约 230 秒,直接失败,禁止导入。 3. 对每个 LRC 候选抽查首句、副歌、中段、尾句 4 个同步点,生成试听切片和 HTML 预览。 4. 检查卡片音频引用是否整体前后错一格;如出现 Heat Waves 式“卡片是后一句、音频是前一句”,报告 offset 诊断并要求显式确认修正。 5. 检查 Anki 媒体名是否带版本/hash;如果会复用旧媒体名,强制改名并更新 manifest。 ### 成功信号 - MP3 是完整权威版本,不是短视频片段。 - LRC 中段同步点与音频窗口一致。 - 预览 HTML 中 3-5 个抽查点都能听到当前卡片歌词。 - package manifest 写入 `alignment_pass=true`。 ### 失败信号 - 候选 LRC 总时长接近但中段结构错位。 - staging 下载到的歌手/版本与用户指定版本不一致。 - Anki 媒体名未变,可能复用旧缓存。 - 用户听测反馈 L07 或其他中段卡片不同步。 ### 建议落地 先把 gate 做成独立脚本,任何歌词 deck 生成命令必须先读取 gate manifest;失败时只生成诊断报告和试听预览,不写入 Anki。