GSoC:2006 Proposed projects

Erik Massop edited this page Nov 4, 2017 · 1 revision

Here is a list of proposed projects for the Summer of Code 2006. Feel free to suggest other ideas, features or client works (see #xmms2 on freenode)! IRC is heavily used among xmms2 developers, so that should be your first choice for discussing SoC projects. Please note that the XMMS2 team reserves the right to limit the number of projects accepted to ensure that mentors don't have to keep track of too many students.

You might also want to check out: Long Term wishlist

Auto-generated API and bindings

Currently, the C client library and the bindings (Python, Ruby, etc) have to be manually updated whenever a new function is introduced on the server. This work is tedious and mechanical, and the whole client API could in fact be automatically generated from a high-level description of the functions. The goal is therefore to determine the semantics of these descriptions (possibly using XML), and then use them to generate the different API source files.


The access to the media library should be abstracted from its implementation. Currently, clients use SQL queries to query it, and this restricts the possibilities of more advanced features (Party Shuffle-like playlists, saved views, sharing of queries among clients). The concept of Collections solves these issues by offering a higher-level representation of queries and a generalized structure for playlists. The design should first be discussed and finalized (both in terms of implementation and client library API), before it is implemented in the core of the server.

promoe client

The promoe client is a Winamp/XMMS1 clone for XMMS2, written in C++/Qt4. It currently supports skins, playback control, playlists and simple media library access, but still lacks most other features offered by XMMS2 (saved playlists, powerful media library browsing, properties modification, etc). It should also be ported to use the new C++ bindings (scheduled for the next release, DrEvil). Since Promoe is a skinable client this involves a lot of hacking on custom widgets and can be a very good way to learn more about the QT toolkit.

"turbox2" client

The "turbox2" client is a web client written using TurboGears. It is currently - possibly - the most robust client with support for browsing the media library and manipulating the playlist. Development targets for the summer are largely to get it to be release quality, but development would also focus on "Views" which would allow for the media library to be represented in a templated fashion.

Evaluate a Switch to GStreamer

A lot of discussion has occurred in the past about the issue of converting XMMS2 to using GStreamer. This project would be to evaluate the viability of that conversion and maybe do the implementation (proof of concept) if deemed a winning situation. (i.e. doing the conversion would have more pros than cons) On the other hand, if it isn't a winning situation, the outcome could contain suggested improvements to gstreamer to make it more suited for our use. You should probably look at and understand the Transforms concept currently implemented in XMMS2, when undertaking this task. A student interested in this project should observe that this subject may be highly controversial and flammable and might end in a big bolt of fire.

Support for DAAP

The DAAP protocol (used by Apple's iTunes) allows sharing of music libraries accross the network. Implementing it in XMMS2 (as a Transforms plugin) should allow remote browsing and streaming of music from other computers. There are also ideas about DAAP sharing from XMMS2.

Support for more formats/stream types

New formats can be supported by writing decoder modules for the server using our Transforms plugin interface, coupled with existing decoding libraries. Possible formats include, for instance:

  • Language: C
  • Level: Medium to Advanced
  • Mentor: TBA

XMMS2 Wiki

XMMS2 has been in long need of a good logo set, and our wiki is also in need of being made a little less ugly. This is a great project for a student who is into web development and really wants to participate in XMMS2 development but doesn't really have a lot of C coding ability needed to do Core work.

  • Language: PHP / Python and SVG
  • Level: Easy to Medium
  • Mentor: Sham Chukoury

Discussion about this task

Port Visualization to transforms API and extend it to give PCM data

Currently visualization in XMMS2's devel branch is disabled with the transition to Transforms. This project would be to port visualization to the devel branch as a transform plugin and to extend it to give full PCM data.


Testing XMMS2 is currently done the informal way: build the code, run it and see if it works. The problem with this approach is that it's difficult, if not impossible, to automatically and exhaustively test each component of the system to make sure they work well within their accepted parameters. This task requires you to:

  • Develop a test suite, possibly using a unit-testing approach (e.g. with libcheck) or otherwise, as deemed appropriate.
  • Provide recommendations on how to change the development workflow to actively use and maintain the test suite. (to ensure that the test suite doesn't go stale within a few weeks)
  • Optionally devise a method for maintaining a 'component status' page based on automated test results. (For an example, see Project Status)
  • Language: C / Python / Ruby
  • Level: Medium
  • Mentor: Sham Chukoury

Handle temporarily unavailable media better than removing from medialib

This task is fully described with context in Bug #519

Other Ideas?

GTK2/GNOME medialib centric client for xmms2

This project would be to develop a client using the GTK2 toolkit and possibly GNOME UI extensions. The goal of this client would be to be oriented around the Media Library in a fashion analagous to RhythmBox or iTunes, but with a distinctly XMMS2 colour. Students interested in working on this should contact Alexander Botero-Lowry as he has some code they might use as a starting place.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.