30111a5f0cd5b228c4fa4a9ed46c7478761903dd
之前 evaluate() 写死 0.8、decide() 直接透传,history 参数没人用, "自学习"只有骨架。这次补上: 置信度(MetadataNormalizer.evaluate) - 字段来源可追溯:NormalizedMetadata 新增 titleFromTag / artistFromTag / albumFromTag - 基础分 0.25;标题 +0.20、标题来自标签再 +0.10(文件名当标题则 -0.10) - 艺术家 +0.15、来自标签 +0.10;专辑 +0.10;年份 +0.03;封面 +0.02 - 历史一致性:同艺人 >=2 条 +0.05,同专辑 >=2 条 +0.03 - 结果 clamp 到 0.05~0.98,且每个加分项写入 evidence,便于日志解释 状态机(MetadataService) - 只有 confidence>=0.6 且 status=verified 的记录才直接命中 - pending 记录下次播放会重新读取并合并(自修复) - validation_count 累加;>=2 次且置信度达标才升级为 verified - 新结果置信度低于旧结果时保留旧字段,只累加验证次数 - 日志输出 status / confidence / validation_count / evidence 测试 - 新增 test/metadata_normalizer_test.dart,9 个用例覆盖来源标记、分级、 历史加权、证据、阈值;flutter test 全绿 真机验证 - 起播看门狗在真实弱网下触发:23:44:50 打开失败 → 15s 后自动重连 → 1.4s 出声(open 仅 100ms)
清听 QingTing
让远程音乐,像本地音乐一样可靠。
清听是一个面向 Android 的 WebDAV 音乐播放器。
它解决的事情很简单:
让存储在 WebDAV 服务器上的音频文件,获得稳定、连续、可控的本地级播放体验。
✨ 能力
- WebDAV 流式播放,无需下载
- 后台播放,退出应用不停
- 通知中心、锁屏、耳机控制
- 元数据读取与 SQLite 缓存
- 通知栏封面图
🚀 快速开始
# 克隆
git clone https://your-repo/qingting.git
cd qingting
# 获取依赖
flutter pub get
# 运行
flutter run
详细步骤:Getting Started →
📖 文档
- 整体架构 —— 系统怎么组织的
- 播放链路 —— 一首歌从点击到喇叭
- 元数据 —— 歌曲信息怎么被认识
- Android 集成 —— 怎么成为 Android 播放器
- 存储策略 —— 远程与本地如何共存
- 设计决策 —— 为什么选了这些方案
最好的播放器,是当你开始听歌之后,就再也感觉不到它技术细节的那一个。
Languages
Dart
96.7%
PowerShell
2.1%
Kotlin
1.2%