<p>Thats an awesome idea!<br>
You could solve <a href="http://last.fm">last.fm</a>'s downsides with ownCloud.<br>
Also it would be cool if this could work with android based devices, not sure if there are android music players that support statistics tough...</p>
<p>cobexer<br>
--<br>
Sent from my HTC DHD</p>
<div class="gmail_quote">Am 21.03.2012 00:06 schrieb "Matěj Laitl" <<a href="mailto:matej@laitl.cz">matej@laitl.cz</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Teo, Bart and list,<br>
as suggested by Teo, I've decided to try to take part in GSoC 2012 working as<br>
a student on Amarok. My idea is not on the KDE Ideas page, but I've been<br>
playing with (a variant of it) for months.<br>
<br>
Continues a very draft of my GSoC proposal. I'd be very grateful for any<br>
possible comments, pointed-out omissions or questions that may arise.<br>
<br>
Introduction<br>
=======<br>
Amarok has an ability to store per-track play statistics such as play count,<br>
first & last played date, rating and labels. It then has powerful means to<br>
generate custom-tailored playlists based on gathered statistics (e.g.: play me<br>
what I've listened to last month) that many users like to exploit. This works<br>
well when your computer is the only device you play music from. More likely<br>
situation is that you play music using Amarok at home, listen to iPod while<br>
commuting and use Amarok or another music player at work. All these 3 devices<br>
are able to keep track of what you've listened to, but each one only a third<br>
of it, which makes Amarok statistics more or less useless. This project aims<br>
to remedy the situation; Last.fm is an online service that can keep track of<br>
music a user listens to[1] and can help us with a part of this project. Amarok<br>
Users group on Last.fm has over 23 000 users.[2]<br>
<br>
Project Goals<br>
========<br>
This project will implement:<br>
 * track statistics synchronization between Amarok collections that support<br>
statistics; these are currently Local Collection and iPod Collection, but the<br>
framework will be general<br>
 * Last.fm scrobbling from pluggable media players that support statistics<br>
(iPods, currently) using the general framework from previous point<br>
 * ability to synchronize labels from Amarok to Last.fm<br>
 * ability to synchronize play counts, first & last played date from Last.fm to<br>
Amarok collections (other way around is already implemented by scrobbling)<br>
 * GUI dialogue for performing the synchronization/resolving conflicts<br>
<br>
Bonus points (what will Amarok gain for free):<br>
 * ability to synchronize statistics of Amarok and other media player that<br>
scrobbles to Last.fm<br>
 * track statistics backup through Last.fm<br>
<br>
Caveats:<br>
 * Last.fm has no concept of track ratings. This can be however worked around<br>
by special Last.fm-side labels such as "7/10 stars"<br>
 * advanced features will be only available for Last.fm users; Last.fm is free<br>
to use, but the data are public which may be unpleasant for certain users<br>
<br>
Implementation<br>
=========<br>
Amarok represents audio tracks by Meta::Track abstract C++ class that provides<br>
getter methods for meta-data (title, artist, album..) and getter/setter<br>
methods for statistics (rating, play count...). These tracks are grouped into<br>
so-called Collections, where each Collection represents one source of songs<br>
(iPod, Local, USB Mass Storage..). Tracks from different collections will be<br>
matched together using their meta-data and other collection's QueryMaker to<br>
perform the search. Moreover, iPods provide additional data that can be<br>
used for conflict-resolution: app_rating and recent_playcount. [3] I plan to<br>
expose these as new capability offered by Collections. This capability will<br>
also be used to implement Last.fm scrobbling from iPods (in fact, every<br>
collection that will support this capability), exploiting recent_playcount<br>
field in the iPod case. It should be noted that I have already implemented<br>
similar synchronization in my spare time back in summer 2011 [4], but I was<br>
not satisfied with its iPod-specific design and GUI, so I decided not to strive<br>
for its inclusion. But I have the code working and ported to Amarok 2.5, so it<br>
can be used to fast-start this project.<br>
<br>
Another interesting note is that scrobble-from-iPod-to-Last.fm was functional<br>
in Amarok 1.4 days, but this feature got dropped during rewrites leading to<br>
2.0, so this will fix one long-overdue regression.<br>
<br>
Speaking about Last.fm integration, Last.fm provides rather nice RESTful API<br>
[5] a subset of which is already used through liblastfm [6] library in Amarok<br>
to submit (scrobble) currently played songs. I plan to reuse this library and<br>
Amarok code dealing with it; the Last.fm API is powerful enough to support all<br>
claimed features. There is already even Last.fm on-line service Collection,<br>
but it focuses on playing Last.fm radio streams and doesn't handle individual<br>
tracks. In order to implement actual synchronization with Last.fm, user's<br>
Last.fm Library (that contains relevant track data) can be represented as a<br>
new (invisible) Collection or as special case in synchronizer, I have yet to<br>
decide this design choice.<br>
<br>
Timeline<br>
=====<br>
[To be done when the general idea is accepted.] Generally: inter-collection<br>
synchronization will be first and will be done by the midterm evaluation,<br>
Last.fm support will be second. I'm already quite bound to Amarok community,<br>
so I can finish the design, iron-out some details and perhaps present some GUI<br>
mockups during the community bonding period.<br>
<br>
If accepted, GSoC will be my main commitment during the summer, I plan to have<br>
a week-long vacation and a few 3-day trips, but I'm used to work during<br>
weekends on open source projects, so the vacation will be compensated.<br>
<br>
About me<br>
======<br>
I'm a 24-year-old student of mathematical informatics from Prague, Czech<br>
Republic. I've been passionate about FLOSS since high school and recently I've<br>
started contributing to a couple of projects (manly KDE related), most notably<br>
Amarok where I worked on fixing various bugs singe last autumn [7] and recently<br>
I've rewritten the iPod collection from scratch [8] as suggested by Amarok's<br>
Bart Cerneels; I plan to submit a review request for this in coming weeks.<br>
I've been also particularly active on KDE's bugzilla where I've commented to<br>
more than 300 bugs.[9] I know C, C++, Python, Java, a bit of French (pun<br>
intended) and some other less relevant languages. Thanks to my work on Amarok<br>
I have some experience in GUI programming in Qt & KDE libs.<br>
<br>
I've chosen Amarok because I fell in love with it last year, and statistics<br>
synchronization because it is an area where I found it a bit lacking; I'm a<br>
music enthusiast who dislikes to listen to the same song twice in a week and I<br>
believe more Amarok users are that picky and will therefore benefit from this<br>
work.<br>
<br>
I can be reached via e-mail <a href="mailto:matej@laitl.cz">matej@laitl.cz</a> which serves as my Jabber and<br>
Google account, too. I sometimes hang on #amarok under nick strohel.<br>
<br>
[1] <a href="http://www.last.fm/user/strohel" target="_blank">http://www.last.fm/user/strohel</a><br>
[2] <a href="http://www.last.fm/group/Amarok+Users" target="_blank">http://www.last.fm/group/Amarok+Users</a><br>
[3] <a href="http://www.gtkpod.org/libgpod/docs/libgpod-Tracks.html#Itdb-Track" target="_blank">http://www.gtkpod.org/libgpod/docs/libgpod-Tracks.html#Itdb-Track</a><br>
[4] <a href="http://mail.kde.org/pipermail/amarok/2011-June/032736.html" target="_blank">http://mail.kde.org/pipermail/amarok/2011-June/032736.html</a><br>
[5] <a href="http://www.last.fm/api/intro" target="_blank">http://www.last.fm/api/intro</a><br>
[6] <a href="https://github.com/mxcl/liblastfm/" target="_blank">https://github.com/mxcl/liblastfm/</a><br>
[7] <a href="https://www.ohloh.net/accounts/strohel" target="_blank">https://www.ohloh.net/accounts/strohel</a><br>
[8] <a href="http://goo.gl/B3Odu" target="_blank">http://goo.gl/B3Odu</a><br>
[9] <a href="http://goo.gl/afJN3" target="_blank">http://goo.gl/afJN3</a><br>
_______________________________________________<br>
Amarok-devel mailing list<br>
<a href="mailto:Amarok-devel@kde.org">Amarok-devel@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/amarok-devel" target="_blank">https://mail.kde.org/mailman/listinfo/amarok-devel</a><br>
</blockquote></div>