GSoC:2007 Proposed projects

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

The accepted projects can be found on the Summer of Code 2007 page!

Also check leftovers from Summer of Code 2006/Proposed projects. And the long term wishlist in Bug 520.

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. There is already some proof of concept.

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

Currently visualization in XMMS2's devel branch is disabled with the transition to Transforms. This project would be to implement a shared memory mechanism to give clients access to visualization data, such as FFT and PCM data. See visualisation for details.

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:

Just implementing one new format which already has a library might not be a task that will give a full summer of code

Service clients implementation

A specialized type of client that is designed to accept commands from other clients to do specialized tasks like tag a file, or lookup certain types of metadata like data from This project would be to implement the mechanism for registering service clients and their commands, as well as implementing a service client to demonstrate the API.

Further development on a pre-existing GUI client

XMMS2 has a few GUI clients that are maturing towards real usability but are not quite there yet. Rather then try and develop yet another client, this project would be to jump on the development of a pre-existing client and get it in a really useable state. Tasks might include integrating collections with the client, or finishing various unimplemented features. Some of the potential clients for this are Esperanza, Insanity, and Euphoria

Development of new bindings

XMMS2 provides a client library which is bound to a number of popular languages (C++, Python, Java, Ruby, Perl, Objective C). This project would be to develop bindings for another language. Possible candidates include Common Lisp, Lua, or Io.

Support for Multiple Output plugins

Currently only one output plugin can playback sound at a time. This project would consider the implications of supporting multiple output plugins and find the best way to implement support for them.


Since XMMS2's client-server design and emphasis on implementing most features as clients, there are a large number of smaller projects developed around XMMS2. We currently provide development frameworks for some of these projects including git repositories, and occasionally bug trackers. XMMS2Forge is a project to implement an automated web system for setting up these sub projects and providing administrative abilities to the project leaders.

Testing framework

Currently XMMS2 does not have a complete testing framework. A number of attempts have been made in the past including some work on unit tests by Sham Chukory, and a failed SoC project last year to develop a testing system for XMMS2.

XMMS2-specific GUI toolkit widgets (gtk or qt)

XMMS2 clients developed for gtk or qt often implement the same widgets for displaying playlists, media status, and the media library. This project would be to implement a set of widgets for developing an xmms2 client for one of the popular toolkits. The study of existing music players and interest in HCI would be required. Advanced examples include: a rich medialib display (scriptable, see foobar2000), a graphical editor for Collections, cover art manager, preferences panel for changing configvals, etc.

Media Library Database Backend

XMMS2 uses sqlite as the backend for its media library. Since XMMS2 basically maps a key-value pairing, it has been aruged that using an sql database in this case is suboptimal. This project would be to take advantage of the abstraction provided by Collections, and look into implementing other backends for the XMMS2 media library. This project would include performance testing of the various potential databases.

In xmms2d lisp environment

Collection operators are hard coded in the daemon. By putting a lisp interpreter in the daemon and rewriting them in lisp it would be possible to add new ones runtime. And when lisp is there it might even be allowed to spill over into other areas of xmms2d for even more possibilities of customization.

Multiple channel support

New formats like AC3 and DTS supports multiple channels. XMMS2 is kind of prepared for this but without any decent support in the output plugins. The task will be to get full multiple channel support in XMMS2 for the alsa and oss output (bonus if coreaudio also supports it!)

Fullscreen client

XMMS2 Mediacenter edition! Client designed to run on a TV (also see: )

Port to NetBSD and/or OpenBSD

Currently XMMS2 works great on FreeBSD, Linux, Solaris, Mac OS X, and even to some degree on windows, but there is a general lack of (working) support for NetBSD and OpenBSD. NetBSD encounters problems with attempting to override the medialib when it should be blocking, which renders XMMS2 useless on NetBSD; it is likely this problem would also be the case on OpenBSD. Aside from fixing the medialib corruption bug, the student should be prepared to write a sun audio plugin, preferably one that works on Solaris as well, and also package the latest release of XMMS2 for pkgsrc or OpenBSD ports (or maybe even both!). If there is extra time, the student should port and package a few popular XMMS2 clients as well.

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.