2009年2月23日 星期一

從一件小事看iPod nano的歌曲星等實作機制

我平常在外聽音樂用的是iPod nano。用了四年以上的古董了。
(不過小小一台很方便,雖然偶爾有點秀抖,電池也開始衰退了)

平常聽歌都是編輯一個「某某歌手多少星等以上」的Smart playlist,
不過這樣就得歌曲要給星等。最近新增還沒給星等的歌曲又有點多,
就想說先來排序(用自己寫的簡單javascript),然後看哪個區間要給星等。

所以排序完。把原本有給星等的歌通通取消星等。
依照排序的結果一個一個給分。嗯,這邊五分....這裡開始四分....以下略。

今天早上要聽歌的時候打開同樣的Smart playlist發現,
咦,歌曲的列表怎麼是照我給分的順序?
##ReadMore##

理論上如果歌曲是以資料庫的方式,每首歌給一個row來存的話是不太可能會這樣的。
給五星就是五星,五星的歌曲間不會有任何區分,先給後給都一樣。
資料庫本身不會記憶被給星等的時間。

我最後的結論是,他們星等是另外維持一個列表,
表上列出哪些歌是五星,哪些歌是四星,依此類推。
由於這樣你把歌曲給星等時,不是像資料庫一樣分數被「改」動而是被「加」上去的,
所以會有加上去的先後順序。會依照加上去的順序列出歌曲。

至於為什麼會這樣我就不知道了。
也許因為給星等的歌通常不多,避免佔據空間?(可是一首挺多1Byte耶)
也許這樣比較快?或者只是因為這是四年多前的iPod了,現在已經改掉了。

不過這樣的排序方式對我來說也方便就是了 :p

沒有留言: