
背景
习惯泛听的专辑顺序强迫症重症患者
!html
- 喜欢复合类型的音乐,追踪创做型音乐人/团队
- 只听专辑,并且必定要按顺序来听
- 习惯根据当前心态快速造成有针对性的播放列表
音乐历史:git
- 从有条件配置录音机开始
- 上百盒带,几百CD,MP3CD
- 硬盘常备 30G+ APC
- 以往移动音乐习惯:
- iOS 用 podcast 下载有关频道的音乐
- Android 用自行上传的音乐,以
类别/音乐人/专辑
为目录形式组织
- 用内置播放器以目录为线索播放
- 管理/播放 流程继续电脑中 cmus 的习惯
- 为制做 大小丸子:"情人节快乐;-)" 才知道 xiami
- 变成移动音乐主力陪伴平台
- 下载过 900+ 专辑
- 播放 20000+ 首音乐
现象
实际上定心使用 xiami 音乐应用,也通过了很长时间的折腾:github
- 从 Play 市场上安装了全部高分音乐播放器, 没有一个超过 winamp 的尿性
- 从 碗豆茄 下载安装了全部高分音乐应用, 发现都一个尿性:
- 在播放界面中没有当前播放列表的快速入口
- 播放清单界面没有专辑封面缩图
- 没法从当前播放快速进入 专辑/艺人/相关艺人 页面,并进行快速下载
- 只有乱序播放,没有顺序播放的快捷方式
- ...
- 相比下来,只有 xiami 还能忍受
- 可是,当本地音乐 下载3000+音乐, 艺人超过5屏,专辑超过100时
- 各类杯具开始了:
- 下载/播放/删除 同时进行时,闪退
- 任何界面中,批量删除时,闪退, 恢复时老是删不干净
- 常常专辑/艺人封面丢失, 一片空白没法要求强行同步/从新下载
- 批量操做,常常定住,无反应
- 每次启动,进入本地音乐界面时,有必定比例闪退
- 每次启动进入本地音乐时, 每次都要消耗几十秒从新加载
- ...
问题
基本上,俺对手机上的音乐品质已经不报但愿了,
只要求:网络
- 能够快速选中想听的艺人
- 能快速追加其它下载的指定艺人全部专辑到当前播放清单中
- 快速按照下载的专辑以及专辑内顺序依次播放
可是,以上三个基本需求,无一能在当前已知全部移动播放器中做到:多线程
- 选择艺人, 只有 Google Play音乐 基本做到舒心了:

- 点击进入
个人乐库
优先进入 音乐人, 而不是 其它 tab
- 全部卡片用的是现有专辑的拼贴
- 杯具的是, 从本地导入音乐的过程,以及目录 是没法控制的
- 若是经过其它应用删除了相关音乐, GPlayer 是不知道什么时候能更新的
- 快速根据须要组合出当前播放清单, 没有应用能知足:
- 多数强行要求建立 播放列表/精华 没有7次以上的操做不可能完成
- xiami 还限定只能有 50 首音乐的上限制
- 这就很杯具了: 俺播放本地的音乐,为毛要限制俺的 playlist 长度?!
- 按照一张专辑接一张专辑,音乐依从专辑原有顺序播放
- 这应该是最吻合音乐人当初创意的音乐收听顺序了
- 可是,这居然成为全部 音乐类应用 最不肯意实现的功能?!
- 为何呢?! 细思恐极....
分析
MP3 meta信息
参考:ui
从 mpeg-1 时代开始, 音乐文件中就已经能包含完备的专辑/艺人/播放顺序 的信息!spa
可是!
xiami 也好,其它音乐应用也好, 走的都是 ucg 模式,以便避开版权纠纷;线程
- 这就致使各家音乐库中的音乐文件自己 meta 信息混乱/不全
- 进一步的,为了不在移动设备上进行大量的目录操做, 你们都将下载文件放在一个目录中
- 更加可悲的, 为了快速开发使用 SQLite 来管理全部音乐 meta 信息
- 综上, 致使了:
- 没法合理的触发 下载/meta提取/刷新/使用 时机
- 人为造成多重等待
- 并在错误的信息基础上,几乎没法进行合理的控制识别
- 最终造成相似情景:

- 根据音乐人信息, 从专辑列表,下载多个专辑后
- 在音乐人界面, 看到的就是这种专辑顺序混杂的情景
- 实际播放时,能够想象是多么难受的事儿
- xiami 中还有一个诡异的现象是:
- 即便相关专辑都下载到了本地
- 可是,在一个专辑播放过程当中
- 动态的从其它本地专辑界面,点击加入当前播放列表后
- 当播放追加专辑音乐时, xiami 不从本地播放,而是无视音乐已经下载的状态,尝试从网络中下载播放!
- 这得是什么样的脑洞经理,才做的出这种产品决策呢...
建议
- 基于用户上传的音乐文件表直接使用:
- 根据官方的信息, 在服务端统一刷一下 meta 信息吧
- 并将相关 meta 信息,独立保存一下
- 在其它用户下载音乐文件的同时, 直接向客户端 push 对应的meta 信息, 就别生从本地文件中再遍历读取了吧
- 下载/管理/播放, 用多线程/进程来处理吧
- 最简单的,别将 meta 信息和其它控制信息放在同一 DB 中哪
- SQLite 这货就是单用户单线程最轻量级DB
- 对于这种专辑信息,又不涉及交叉关系索引
- 就是用个内存 KV 效率也比用 SQL 高哪
总之, 亲, 你们喜欢 xiami 的音乐库, 努磨 SD 卡拼命下载了几千音乐到本地了code
就让俺们愉快的自由播放 ,很差嘛?!orm
进展