![88720847.jpg (600×368)](http://static.javashuo.com/static/loading.gif)
背景
習慣泛聽的專輯順序強迫症重症患者
!html
- 喜歡複合類型的音樂,追蹤創做型音樂人/團隊
- 只聽專輯,並且必定要按順序來聽
- 習慣根據當前心態快速造成有針對性的播放列表
音樂歷史:git
- 從有條件配置錄音機開始
- 上百盒帶,幾百CD,MP3CD
- 硬盤常備 30G+ APC
- 以往移動音樂習慣:
- iOS 用 podcast 下載有關頻道的音樂
- Android 用自行上傳的音樂,以
類別/音樂人/專輯
爲目錄形式組織
- 用內置播放器以目錄爲線索播放
- 管理/播放 流程繼續電腦中 cmus 的習慣
- 爲製做 大小丸子:"情人節快樂;-)" 才知道 xiami
- 變成移動音樂主力陪伴平臺
- 下載過 900+ 專輯
- 播放 20000+ 首音樂
現象
實際上定心使用 xiami 音樂應用,也通過了很長時間的折騰:github
- 從 Play 市場上安裝了全部高分音樂播放器, 沒有一個超過 winamp 的尿性
- 從 碗豆茄 下載安裝了全部高分音樂應用, 發現都一個尿性:
- 在播放界面中沒有當前播放列表的快速入口
- 播放清單界面沒有專輯封面縮圖
- 沒法從當前播放快速進入 專輯/藝人/相關藝人 頁面,並進行快速下載
- 只有亂序播放,沒有順序播放的快捷方式
- ...
- 相比下來,只有 xiami 還能忍受
- 可是,當本地音樂 下載3000+音樂, 藝人超過5屏,專輯超過100時
- 各類杯具開始了:
- 下載/播放/刪除 同時進行時,閃退
- 任何界面中,批量刪除時,閃退, 恢復時老是刪不乾淨
- 常常專輯/藝人封面丟失, 一片空白沒法要求強行同步/從新下載
- 批量操做,常常定住,無反應
- 每次啓動,進入本地音樂界面時,有必定比例閃退
- 每次啓動進入本地音樂時, 每次都要消耗幾十秒從新加載
- ...
問題
基本上,俺對手機上的音樂品質已經不報但願了,
只要求:網絡
- 能夠快速選中想聽的藝人
- 能快速追加其它下載的指定藝人全部專輯到當前播放清單中
- 快速按照下載的專輯以及專輯內順序依次播放
可是,以上三個基本需求,無一能在當前已知全部移動播放器中做到:多線程
- 選擇藝人, 只有 Google Play音樂 基本做到舒心了:
![150205-gplayer-lib.png(PNG 圖像,370x489 像素)](http://static.javashuo.com/static/loading.gif)
- 點擊進入
個人樂庫
優先進入 音樂人, 而不是 其它 tab
- 全部卡片用的是現有專輯的拼貼
- 杯具的是, 從本地導入音樂的過程,以及目錄 是沒法控制的
- 若是經過其它應用刪除了相關音樂, GPlayer 是不知道什麼時候能更新的
- 快速根據須要組合出當前播放清單, 沒有應用能知足:
- 多數強行要求建立 播放列表/精華 沒有7次以上的操做不可能完成
- xiami 還限定只能有 50 首音樂的上限制
- 這就很杯具了: 俺播放本地的音樂,爲毛要限制俺的 playlist 長度?!
- 按照一張專輯接一張專輯,音樂依從專輯原有順序播放
- 這應該是最吻合音樂人當初創意的音樂收聽順序了
- 可是,這居然成爲全部 音樂類應用 最不肯意實現的功能?!
- 爲何呢?! 細思恐極....
分析
MP3 meta信息
參考:ui
從 mpeg-1 時代開始, 音樂文件中就已經能包含完備的專輯/藝人/播放順序 的信息!spa
可是!
xiami 也好,其它音樂應用也好, 走的都是 ucg 模式,以便避開版權糾紛;線程
- 這就致使各家音樂庫中的音樂文件自己 meta 信息混亂/不全
- 進一步的,爲了不在移動設備上進行大量的目錄操做, 你們都將下載文件放在一個目錄中
- 更加可悲的, 爲了快速開發使用 SQLite 來管理全部音樂 meta 信息
- 綜上, 致使了:
- 沒法合理的觸發 下載/meta提取/刷新/使用 時機
- 人爲造成多重等待
- 並在錯誤的信息基礎上,幾乎沒法進行合理的控制識別
- 最終造成相似情景:
![150205-xiami-local-chaos.jpg(JPEG 圖像,720x1280 像素) - 縮放 (59%)](http://static.javashuo.com/static/loading.gif)
- 根據音樂人信息, 從專輯列表,下載多個專輯後
- 在音樂人界面, 看到的就是這種專輯順序混雜的情景
- 實際播放時,能夠想象是多麼難受的事兒
- xiami 中還有一個詭異的現象是:
- 即便相關專輯都下載到了本地
- 可是,在一個專輯播放過程當中
- 動態的從其它本地專輯界面,點擊加入當前播放列表後
- 當播放追加專輯音樂時, xiami 不從本地播放,而是無視音樂已經下載的狀態,嘗試從網絡中下載播放!
- 這得是什麼樣的腦洞經理,才做的出這種產品決策呢...
建議
- 基於用戶上傳的音樂文件表直接使用:
- 根據官方的信息, 在服務端統一刷一下 meta 信息吧
- 並將相關 meta 信息,獨立保存一下
- 在其它用戶下載音樂文件的同時, 直接向客戶端 push 對應的meta 信息, 就別生從本地文件中再遍歷讀取了吧
- 下載/管理/播放, 用多線程/進程來處理吧
- 最簡單的,別將 meta 信息和其它控制信息放在同一 DB 中哪
- SQLite 這貨就是單用戶單線程最輕量級DB
- 對於這種專輯信息,又不涉及交叉關係索引
- 就是用個內存 KV 效率也比用 SQL 高哪
總之, 親, 你們喜歡 xiami 的音樂庫, 努磨 SD 卡拼命下載了幾千音樂到本地了code
就讓俺們愉快的自由播放 ,很差嘛?!orm
進展