Summer of Code 2008/Last.fm radio
From The Neuros Technology Wiki
Contents |
[edit] General Information
Student: Guillaume Béland
Mentor: Anders Waldenborg
I will blog on a regular basis about my progress here [1]. If you want to talk to me, give me suggestions, comments or feedback you are welcome. My nickname on IRC is guillaumebel and my e-mail is guillaume dot beland at gmail dot com.
[edit] The Project
[edit] Abstract
The Neuros OSD is a great platform that lets you record and store different types of media on an external hard drive. It also give you access to your media collection from your television with a nice interface. Another thing that the OSD allows is the bridging online services to your television. A good example is the YouTube application where you can access YouTube video directly from your television. There's other work in progress to bridge the gap between the internet and the television as well. On the audio side, the OSD has basic playback and music management capability. But the OSD doesn't help when the user wants to discover new music with the OSD. There's literally no option currently available to the user, of course, in general there are few good ways to discover music these days. Most of the time we discover new music by a friend suggesting a new artist, listening to the radio or other such things.
Appearing on the scene recently is an increasingly popular online services called Last.fm. Using a music recommendation system known as "Audioscrobbler" Last.fm builds a detailed profile of each user's musical taste by recording details of all the songs the user listens to, either on the streamed radio stations or on the user's computer or portable music device. All this information can be used to create a custom radio station based on user's musical taste and suggesting new music to the user. Last.fm's slogan is “The social music revolution”. The goal of this project is to bring this revolution to the OSD, to give the user a new way to discover and enjoy music.
[edit] Project summary
The application need to be simple to use but still full of information. The Last.fm web services API allow developer to access a very important quantity of information concerning the user's musical taste. The goal is to provide a good quantity of valuable information to the user as well as a rock solid radio engine.
There's no need to have a Last.fm account to enjoy the application. Although more customized radio station can be created when the user have an account. It is possible to create radio station based on tag, similar artist, fan of artist. So a standard use case would be: the user enter in the application, choose to create a new station, choose between different type of station, enter required data with the on screen keyboard, save the station and start enjoying great music. From there, useful information about the currently playing artist will be displayed on the screen (top songs and albums from this artist, biography if available etc.). If the user have an account on Last.fm, all listened track will be scrobbled to his profile and more information will be displayed about his personal musical taste (top artist, weekly top artists, top tracks etc.). All these information are displayed nicely to the user. The user will be able to create as much stations as he want. Some stations will be pre-built for user owning an account. Station like “Recommended Artist” and “Neighborhood Radio”, based on the user taste can only be built if the user have an account on Last.fm.
The only thing the application will depend on is, of course, an internet connection in order to retrieve the radio stream from Last.fm. Other than that there's absolutely no dependencies.
[edit] In details...
Here lay down the principals components of the application and the work that will need to be done on the OSD in order to make the application functional.
[edit] HTTP-Streaming playback
One of the first thing that will need to be done is to add the support for HTTP-Streaming playback to the audio player engine so it can handle radio stream from Last.fm. This will require to implement the curl backend from xmms2 to the current audio player. The xmmsclient library provide everything need in order to make this step possible.
[edit] XML parser
Last.fm offer a huge quantity of information thought web services (refer to http://www.audioscrobbler.net/data/webservices/). All this information come in different formats and the most used is obviously XML. In order to retrieve all the information wanted from a Last.fm account, the need of a good XML parser is mandatory. This module aim to be a low level XML parser for any Last.fm information.
[edit] Last.fm services
This module can be considered as the child of the XML Parser. This is a high level library that will use the XML parser in order to retrieve and convert the information in a way that it can be used and displayed easily to the end user. The design of this library need to be very extensible so if there's new information on Last.fm web services page, or there's a need for a custom information, it won't be hard to use or modify the library to retrieve the information wanted. This module also handle standard Last.fm functionality like the user account login, protocol handshake, love/ban/tag tracks and other such things.
[edit] Last.fm radio
The radio module is self explanatory. The module handle the creation, modification and deletion of radio station. It will also be responsible to provide the radio stream to the player. Last.fm provide 7 type of radio, all of them will be implemented (Personal, neighborhood, loved, group, similar artist, artist fan and tag radio) and some of them will be created by default. The user will be able to create and save different type of station.
[edit] Player
This is an evident module. Standard playback from the radio stream will be handled in this module. This module will also include a stopwatch in order to determinate when and if the track need to be scrobbled.
[edit] Audioscrobbler
The audioscrobbler will be linked with the player in order to submit played track to Last.fm account.
[edit] Roadmap
| Task | Status | Priority |
|---|---|---|
| Core functionality | ||
| Player engine Player engine which handle streaming over HTTP. This will be implemented with the xmmsclient library. | Not started | High |
| Stream Stream object which can be played with the player engine, Best case scenario would be to support any type of stream so user could enter custom stream and play it with the player | Not started | High |
| XML Parser XML parser to handle XML information from Last.fm from a low level perspective. | Not started | High |
| Last.fm core Last.fm core classes which handle account and protocol stuff with Last.fm services | Not started | High |
| Connection Audioscobbler and Radio connection. | Not started | High |
| User Account | Not started | High |
| Mid level functionality | ||
| Last.fm services Child of XML classes, Used to get any type of information from Last.fm services. | Not started | High |
| Audioscrobbler If the user have an account, every track will be scrobbled. | Not started | Medium |
| Last.fm radio | ||
| Station Builder Build radio station according to different criteria. | Not started | High |
| Configuration User account information, Miscellaneous useful function related to saving and loading radio station and general preferences (audioscrobbler, chart etc) | Not started | Medium |
| Metadata Last.fm radio stream provide some basic metadata with every track played (and possibly album art). This module is tied with the player engine, audioscrobbler and the user interfaces modules. | Not started | Medium |
| User interface | ||
| Global screen | ||
| Playlist Last.fm provide four track, this playlist show these 4 track as well as previously played track. | Not started | Medium |
| Metadata box Each radio stream provide some basic metadata for each track. This widget simply display them as well as the album art when available. | Not started | Medium |
| Available station A list of previously created station | Not started | Medium |
| Account screen | ||
| Weekly Top played artist | Not started | Low |
| Global Top artist | Not started | Low |
| Recently played track | Not started | Low |
| On demand chart The goal of this module will be to provide access to most (if not every) chart information from Last.fm. This option won't be displayed as part of the default GUI but will be available with the XIM key and displayed on demand. | Not started | Low |
| Artist screen | ||
| Top song from artist | Not started | Low |
| Top album from artist | Not started | Low |
| Similar artist | Not started | Low |
| Biography | Not started | Low |
[edit] Profit for the Neuros OSD
As mentioned in the abstract. The Neuros OSD could greatly benefit form such an application. In an age where most of our tasks and entertainment is done on our computer and on the internet. A device capable of playing different music station and make us discover new music based on our taste in the comfort of our living room is priceless. Bringing this “social music revolution” to our television enhance the multimedia experience that the OSD procure.
[edit] Success criteria
Having a working Last.fm radio player by the end of the Summer Of Code with all the specification mentioned above
