2 Ideas for Google Summer of Code 2011
Shane Bell edited this page 2014-05-08 03:16:32 -07:00

Status

Clementine wasn't accepted to GSoC as a mentor organisation this year, but we'll keep this list of ideas here anyway for reference.

Ideas

Here are some ideas that we've thought up that are about the right size for students to take on over the summer. Keep in mind that these are only suggestions - we'd love someone to come up with some entirely new feature we hadn't thought of before!

All ideas below will require some knowledge of C++. An indication of the types of additional skills involved is given beneath each idea. These are not necessarily requirements - the whole idea of Summer of Code is to give you experience in technologies you've never used before, so you should be able to learn what you need as you go.

How to apply

The list of GSoC mentoring organisations hasn't been announced yet (see the timelime) but if you think you might be interested in applying:

  • Join the IRC channel #clementine on Freenode and subscribe to the mailing list.
  • Check out the Clementine source code from Subversion and make sure you can compile it.
  • How to check out the source code.
  • Compiling From Source. It's possible to compile on Mac OS X or Windows as well but it's quite a bit more difficult.
  • Use Clementine - find out what it can do and where all the features are. Try listening to some internet radio or copying some songs to your iPod. More importantly: find out what it can't do or what you think it could do better :)
  • Familiarise yourself with the source code.
  • Consider submitting a patch to fix a bug or implement a feature. We've marked some issues with the PaperCut label in the issue tracker - these are small bugs that should be suitable for people without much experience with our code. If you need any help please ask in IRC or email the mailing list.

Easy

Compact view

Clementine's main window is really big, and at the moment it's the only way of interacting with the player (short of using the commandline or DBUS remote controls). There's an opportunity for a student who's keen on user-interface design to make a smaller more compact version of the interface that users could switch to instead.

This has been done before in Amarok 1 as well as the classic players like XMMS and Winamp. There are plenty of ways those interfaces could be improved though, maybe by:

  • Adding some quick-search bar (like Google Suggest) that would let a user search the library and quickly start playing a new song.
  • Doing some cool effects on systems that support it, like blur-behind on Windows Vista and Windows 7.
Difficulty Labels Issue
Easy GUI design issue 208

Moderate

Music store integration

Integrated music stores in music players have been getting more and more popular recently. The ability to buy music from inside a music player is already implemented in many mainstream applications for various shops available online.

Our goal here would be to incorporate support for at least one shop (let's say, 7digital.com) into Clementine while, at the same time, making it possible for other developers to add support for different stores in the future.

At the very least, integration should allow the music store's website to be browsed from a web-browser within Clementine. Integrating this into the existing user interface will be challenging, and the store should probably be shown in-place of the playlist while active. Other possible ideas include:

  • A download manager (probably shown in the sidebar somewhere) so the user can monitor the progress of their downloads, pausing and resuming them as necessary.
  • The ability to download directly to the library, and organise (rename) downloaded files automatically.
  • Secure storage of credentials (usernames/passwords) for the music store websites.
Difficulty Labels Issue
Moderate Networking, !WebKit, GUI design issue 908

New types of dynamic playlist

Clementine supports dynamic playlists - these are special kinds of playlists that are generated by algorithms using certain criteria. The dynamic playlists in Clementine at the moment are quite simple - the user can enter in a simple query like "Genre == Rock and Rating > 0.5", and songs matching that query are added to the playlist. We'd like to have some algorithms that were "smarter" about the songs they added, maybe using online services to find songs that were similar to other artists or that were tagged by other users as belonging to a certain genre.

Some ideas we've thought about:

  • Using the last.fm API to find songs similar to a given artist or tag.
  • Using the echonest API to find songs similar to a given artist or tag.
  • Support advanced echonest searches, and let the user enter queries like "happy pop songs from the 70s".
  • Make our query-based searches more useful by adding "fuzzy matching", so the user could search for, for example, "songs from around 1970". Amarok 2 does this already.

From a coding point of view Clementine already supports modular dynamic playlist "generators", so you should be able to focus on the algorithms without worrying about having to dig about in Clementine's code too much. A fun alternative (or additional) idea would be to add bindings for the dynamic playlist generators to our new Python scripting API, so developers could write new generators as Python plugins.

There's some more discussion about this idea in issue 273 and issue 1336.

Difficulty Labels Issue
Moderate Algorithms, REST APIs issue 273

Moodbar

Amarok supports something called a Moodbar - a replacement for the track seek-slider that shows different colours depending on the tempo and "mood" of the song at different places. It would be nice to have something like this in Clementine as well.

There is already a gstreamer plugin for analysing a song and generating the moodbar data, so it would be quite easy to implement in Clementine which already uses gstreamer for its playback. As an extension, a student could look at ways to improve or change the Moodbar algorithm to make it produce more visually pleasing output.

Difficulty Labels Issue
Moderate Algorithms, DSP, Graphics issue 328

Context view

At the moment Clementine has "artist info" and "song info" panes that fetch information from the internet about the song you're currently playing. We'd like to improve this feature by adding information that comes from your local library as well, such as:

  • What other albums you have by this artist.
  • What other songs you have that are similar to this one (the interpretation of "similar" is an excercise for the reader ;-)).
  • Which songs by this artist you've rated the highest.
  • How long ago you last listened to this album, and the first time you ever played it.

This task would involve some user interface work and could involve some clever algorithms or statistical analysis.

Difficulty Labels Issue
Moderate Algorithms, GUI issue 1507

Party mode

After you've prepared a playlist and started its playback, the playlist view may become unnecessary for a while. In such cases we could utilize the huge amount of space the playlist view normally occupies for another type of view.

One example would be "party mode" where the currently playing song would be thoroughly presented. This view would contain some contextual information about the song (and possibly also about the previous and the next song) including cover, basic metadata, statistics and, of course, karaoke enabled lyrics.

Issue 1427 has an attached mockup of this feature, created by one of our users.

Difficulty Labels Issue
Moderate GUI design issue 1427

CD playback, ripping and burning support

Clementine is great at playing music on the internet and from your hard disk, but at the moment it's no use for people with large CD collections. There are three different tasks here:

  • Add support for playing music from CDs. GStreamer supports playing "cdda://" URLs already, so the tricky bit will be adding this to Clementine's user interface in a nice way. Ideally Clementine would fetch the track names from the internet using services like Gracenote or freedb.
  • Rip tracks from CDs, encode them to mp3 (or flac, ogg, etc.) and save them to the library. Again, GStreamer can already do the ripping and the transcoding, the difficult bit will be plugging everything together and making it work nicely in Clementine's interface.
  • Burning tracks to CDs. This will require using the platform's native CD-burning APIs (like IMAPI on Windows), or running external CD-burning programs (like Brasero or K3B on Linux).
Difficulty Labels Issue
Moderate GStreamer, Native APIs issue 27, issue 701

Make it pink

One of Clementine's oldest and most critical bugs is that it is not pink. Giving a Clementine a brand new, pink, interface (with a sparkle feature and, of course, a cat) would be a perfect project!

Difficulty Labels Issue
Moderate GUI design issue 219

Hard

Podcast support

We'd like users to be able to browse and subscribe to Podcasts through Clementine. This would probably involve doing some or all of:

  • Looking for some big podcast directories on the internet, and finding whether they have public APIs for fetching content.
  • Designing a C++ interface that can be implemented by classes for communicating with these podcast directories. Ideally a new class could be dropped in to add support for a new podcast directory.
  • Designing a kind of "manager" class that is responsible for holding a list of these podcast directories and updating the list every week/month/day.
  • Designing and implementing a GUI that lets the user browse and search through lists of podcasts (and adding their own by URL).
  • Letting the user subscribe to individual podcasts. Clementine should then check the podcast for updates at some predetermined interval, download the newest items, make them available in a list in the GUI somewhere (probably the "Internet" tab) and finally show a notification telling the user that new stuff is available.
  • Optional: automatically sync new items in the podcast to removable devices (iPods). Users would be able to plug in their device and Clementine would automatically copy new files to it, and optionally delete ones from the device that had been listened to, or were older than a certain date.
Difficulty Labels Issue
Hard C++ object orientation, Networking, GUI design issue 44

Various providers for cover art, scrobbling and autotagging features

Right now, those are monopolized:

  • when we say 'covers', we think last.fm
  • when we say 'scrobbling', we think last.fm
  • when we say 'autotagging' we mean !MusicBrainz

On the other hand, we have radio services which got refactored as a part of upcoming 0.7 version. A common interface was extracted and made available for scripts. This means that adding a new radio to Clementine is now as simple as writing a bunch of code in Python.

It would be great if the aforementioned features got this treatment too. If there was a common scripting API for those, other people could enhance Clementine without the need to dig into it's codebase.

Whether it's covers from Amazon, scrobbling with libre.fm or autotagging with last.fm or discogs, all those would help to make working with Clementine a better experience.

Difficulty Labels Issue
Hard C++ object orientation, REST APIs issue 1, issue 918, issue 1168

DLNA or DAAP for sharing music over the local network

Lots of devices and music players are able to share the user's music collection with other devices over the network. This lets you, for example, play music from a NAS (Network Accessible Storage) box through the speakers attached to your PS3. Currently the two main standards for this are:

  • DAAP - Developed by Apple for iTunes but supported by most music players.
  • DLNA - Developed originally by Sony but now used by a number of major hardware manufacturers.

Ideally Clementine should be able to:

  • Export the user's local library to other devices using these standards.
  • Play music exported by other devices, automatically discovering them on the network.

This is quite a big project so we'd be happy to accept proposals that tackled only one of the two standards, as long as the design was flexible enough that implementations for other standards could be added later.

Difficulty Labels Issue
Hard Networking, Library, C++ object orientation issue 34

Other ideas

The ideas above are by no means exhaustive - we'd welcome new suggestions that we haven't thought of before! If you need some inspiration check out the issues list. If nothing there sounds interesting then feel free to suggest your favourite feature from another music player :-)