Google's Summer of Code program provides funding for students who'd like to contribute to open source projects. It's a great opportunity to get involved in open source software, gain valuable new experience and meet interesting people. Mixxx is a good project to work on because it gives you experience working with cross-platform development as well as writing code that's going to power live performances (ie. stability is key). Mixxx also relies heavily on multithreading, which offers students an opportunity to learn about threading and work with it in a real-world application. Also the interesting people you'll meet will be us. And we're nice (honest).
Update: We've been accepted into Google Summer of Code 2008!
Here are some of our ideas. Under GSoC you can either apply to work on one of these suggestions or you can come up with an idea of your own. Also you may like the general outline of one of our ideas but would like to put a different spin on it, we're happy to discuss all these things.
Mixxx currently uses bitmap skins to allow users to change the look of the application. However this ties each skin to a specific window size. Being able to render skin elements using SVG would allow for not only a higher level of graphical quality but would also allow skins to fit many different screen sizes.
A student would initially implement support for rendering SVG graphics within the existing skin framework (using Qt's SVG rendering capabilities) and would then go on to implement support for resizing Mixxx's main window. This project might also be a good opportunity for a more artistic student as an optional add-on would be to design an SVG based skin to test all the code changes thoroughly.
Harmonic mixing is a technique many professional DJs use to give their mixes an extra edge. By mixing between songs that have “compatible” keys, a DJ can create interesting harmonies during their beatmixes. In order for a DJ to do harmonic mixing, they generally rely on a separate piece of software to calculate the key of the song. A project for a prospective student is to explore algorithms for determining the key of a song and implementing a suitable algorithm in Mixxx. Mixxx currently performs tempo (BPM) detection on songs it loads and a student may wish to review the BPM detection code before planning their implementation of key detection.
There are hundreds of different MIDI controllers in the world, all of which have different buttons and knobs. Mixxx currently relies on XML files which describe how to map MIDI events to user interface elements. At the moment these have to be created by hand and allow only the most basic types of mapping. A successful student in this project would put themselves in an excellent position to continue as a key member of the Mixxx development team after GSoC, should they want to do so. If you want to work on this, we may be able to lend you MIDI hardware but owning a MIDI controller would be an advantage. We have two ideas which we think would significantly improve support in Mixxx below but we're happy to discuss others:
There are all sorts of interesting controllers out there with buttons that return wierd ranges of values or that when you hold down make other buttons do certain things. Generally to support these you end up having to write some small piece of C++ that maps the output properly and then activate that from the XML somehow. This is kind of silly and means that if you aren't willing to compile your own version of Mixxx, it's often hard to get some features of your controller supported. The solution we're considering is to write a simple interpreter that parses commands in the XML file to allow simple calculations to be performed in a highly configurable way. This isn't as scary as it sounds and would be a really interesting piece of code to write.
Some people will never write an XML text file by hand to make their controller work. It would be really nice to have some kind of GUI which would allow even a preliminary version of an XML mapping to be produced. This would be a highly user interface focussed project and would be ideal for someone who enjoys this type of work.
A very nice addition to Mixxx would be to auto-detect when media players, mobile phones and mass storage devices are connected to a computer and allow access to this music immediately from within the library view. Then next time you're DJing at a party and someone says, 'Do you have “The Obscure Guys - Ambient Experiment #53 (Rare Techno Remix)”?', you can say, 'Just plug in your iPod'.
Some thought for this project would need to be put into how to detect media devices in a platform independant way. This is a very self-contained task and would therefore be suitable even for someone without too much experience working on large software projects.
For live performances, Mixxx must never-ever die. Although Mixxx is pretty good at the moment, there's room for a more serious approach to stability than just fixing crashes as we find them. A student could for example write a stress testing robot for Mixxx which helps weed out memory links and crash bugs automatically. They could also explore possibilities for recovering from crashes automatically and quickly. There is presumably plenty of room for clever ideas here. We offered this project last year and had to turn down some competent people in favour of higher priority projects but this year we're offering it again and would encourage people to reapply if they did so in the past.
Of course, you might have an even cooler idea. Perhaps you played with Mixxx for the first time and thought, “Damn these guys are really missing X with bells on!”. Whatever your ideas are, no matter how wierd and wonderful, we'd like to hear them. So go ahead and apply.
People often want to know what we're looking for in applications and what they can do to get selected. Here are three tips.
The above methods of contact are recommended for discussing projects. However if you just want to get involved with the community, there are many more ways to join in: