Summer of Code 2008/Last.fm radio

From The Neuros Technology Wiki

Jump to: navigation, search

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.

Graphical representation of the different component of the application
Graphical representation of the different component of the application

[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

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

Personal tools