Wednesday, December 17, 2008

Looking for a Community Coordinator

Are you a creative Mixxx enthusiast?
Would you like volunteer with the project, but don't know how to code?
If so, we might have found the role for you - We are officially looking for a Mixxx Community Coordinator.



As the Mixxx community grows, we're finding that we're spending more and more time on administrative tasks and less time writing code. We've got cool ideas for stuff to do with our community, but we don't have time to do them and keep pushing development forwards at the same time. A community coordinator will help fill a growing niche in our development team and will be a great benefit to the project.

Our community coordinator will have many responsibilities, including moderating the forums, writing blog and news posts, and will also hold the cherished title of Mixxx Chocolatier*. We're looking for a dynamic, enthusiastic individual with a passion for DJing (and excellent English language skills) to fill this position. Any experience with forums and HTML is a plus.

If you think you'd be a good candidate and you'd like to be our community coordinator, please contact Adam or Albert and tell us a bit about yourself. Due to the importance of the responsibilities involved, we'll be following up with interviews for potential candidates.

As Mixxx continues to grow, more opportunities for more volunteers to help out without coding will continue to arise. We've seen tremendous growth since our 1.6.0 release, and there's no signs of slowing down. Getting involved with an open source project also looks good on your resumé or CV, and it can help demonstrate the diversity and flexibility of your background. 2009 will be a great year for Mixxx, and we're looking forward to hearing from interested volunteers!

* More on the chocolatier front will come as we fill this position.

Wednesday, December 3, 2008

Rewriting the Library

This developer commentary explains the trials and tribulations of Mixxx's library code, and what the Mixxx developers are doing to improve it.

In the (long) development cycle between Mixxx 1.5.0 and 1.6.0, several changes were made to the library. Some of the more visible changes were the addition of our search box and "Browse" mode, which allows you to play songs off your hard drive without importing them into the library. There was also significant work done on playlist handling and management.


Mixxx 1.5.0, with our old-school library



Mixxx 1.6.1, with the new library


One not-so-apparent difference is that the underlying code was changed to use the Model-View-Controller (MVC) paradigm, which is easy to do with Qt 4 (... or so we thought).

As it turns out, many of the library problems that have been discovered since 1.6.0 are tied to the fact that we botched our use of MVC. Even if you grasp the MVC concepts at a high level, when you get deep into coding it, the separation between "models", "views", and the organization of GUI code can become mucky. Basically, we made some design mistakes, and the only way to correct them and allow us to continue improving the library is to go back and rewrite it from scratch. Some of the library-related bugs in our tracker are going to be very tough to fix because of the current poor design (#194415, #202594, #257769, #258955, #275198, etc!). Rewriting the library code will prevent many of these bugs from reappearing, and should also prevent us from being in a quagmire like this again in the future. Of course, this all depends on us having learned from our mistakes, and I hope that we have. :)



Mixxx with the even newer library! (work-in-progress)


Back in October at the GSoC Mentor Summit, I started hacking our library to use an integrated SQLite database to store track metadata, instead of storing them in a flat XML file on disk. I quickly discovered that there were two separate problems - The first being how the library was stored inside Mixxx at runtime, and the other being how it was stored on disk (XML).

At runtime, we were using a gigantic skip-list to store the metadata of every single track in the library. If you had a library with 100,000 songs, we were keeping the metadata (eg. ID3 tag info) for every song in memory. As you might guess, this was probably something the original Mixxx developers didn't think very hard about, because it doesn't scale well to large libraries. This brings us to the second problem.

When Mixxx starts up or is shut down, it read/writes all of this track metadata to an XML file (mixxxtrack.xml). Again, this simply doesn't scale well for large libraries because it takes a very long time to write metadata for a library of 100,000 songs (and is another example of where the original Mixxx developers didn't think hard enough).

When I started hacking SQLite integration into Mixxx, I started replacing the XML file loading/saving stuff. I quickly realized that I was going to need to fix the skip-list problem too, and then the lightbulb went on - Switching to SQLite solves both of these problems. Rather than storing metadata for all the tracks in memory at runtime, we could simply query the database to retrieve what we need. With that thought, I started deleting as much of the old library code as possible - It was a complete write-off.

I wanted to start from scratch to prevent myself from falling into the trap of the poor design of the old library. I coded many of the changes to the library that were made in 1.6.0, and it took a long time for me to finally give up and realize it was never going to be salvageable. I find this amusing because history is repeating itself - I made major changes to the soundcard I/O code inside Mixxx several times before I gave up and rewrote it all from scratch (which enabled things like vinyl control and multiple soundcard support to happen). For me, this is the fuel that keeps me coding. I know that cool things will be possible if I rewrite the library the Right Way (TM).

There is still a very long way to go before the new library code is complete, but I already have a few new features that people have been requesting, like the ability to move the columns in the library around (which saves automatically too!). Starting and shutting down Mixxx is faster, and I'm hoping that searching will be faster as well. The rewrite has also improved other areas of Mixxx's code - Some pieces of the old library were tied to seemingly unrelated parts of Mixxx, and fortunately I've been able to separate them, which solves many of the code organization problems that the old library had.

Some of the (big) things that need to be added still are playlist support, browse mode, and some sort of intelligent library scanning. The last item is being worked on by a new contributor, and we've been playing around with some cool ideas that we're both hoping will improve the library scanning/rescanning situation greatly. (That topic probably deserves a blog article on it's own.) :) In any event, the new library code won't be ready for at least another release or two.

Anyways, the main focus is to reimplement all the library functionality that was there before, but while I'm hacking the library, I want to hear what cool new features you (Mixxx users) want. If you want to share a neat idea, please leave a comment!

Monday, November 24, 2008

Effects Progress

Since the 1.6.1 release, we've been hard at work integrating several new features that have been in the works for a while.

In our last user survey, many people told us that Mixxx needed some effects besides the flanger. In response to your feedback, we had Pawel Bartkiewicz work on LADSPA integration through Google Summer of Code in 2007. LADSPA is a terribly misleading acronym for "Linux Audio Developers Simple Plugin API". As it turns out, LADSPA isn't just for Linux - it's a cross-platform effects plugin framework, and that made it the natural choice for us. Pawel did great work last Summer, but it came in middle of our 1.6.0 development cycle and in order to properly integrate his work into Mixxx, several other tasks needed to be completed first.

One of these more noticeable tasks has been to create a new tabbed view, where both the library and effects pane can be managed.

With the new reverb and "DJFlanger" effects, you can add some interesting flavour to your mixes.

The screenshot above shows the effects panel inside the new tabbed view. It also shows several of the effects that we're going to bundle, on the left. The tabbed view will also give us a compact place to expand Mixxx's user interface in the future.

If you look at the screenshot closely, you can spot some rough edges that we're trying to fix before our next major release. The main tasks that remain are bug fixing, polishing, and updating our distribution stuff (installers, packaging scripts, etc.).

For Windows and OS X users hoping for VST support, we think it should be possible via Audacity's awesome VST enabler. The VST enabler should allow us to load VST plugins, but to my knowledge, nobody's tested it yet. The reason we can't build native VST support directly into Mixxx is because of Steinberg's restrictive license on their VST software development kit.

That's all for now! We're going to keep hacking away at LADSPA and the rest of the new features we're working on, and hopefully we'll have something out the door before the end of the year.

Wednesday, November 12, 2008

Mixxx @ GSoC Mentor Summit

Three of the Mixxx development team recently attended the Google Summer of Code Mentor Summit. For those of you who don't know, GSoC is a programme where Google funds students to spend their Summers working on open source software.


GSoC 2008 Mentors from Mixxx - Adam, Albert, and Garth

We got to meet a lot of developers from other open source audio packages which was, very interesting. It was also a good opportunity for Garth, Albert and myself to sit down and do some hacking on Mixxx together. One thing to come out of this already has been some serious work on rewriting the library code to use SQLite, which should make Mixxx scale to large music libraries much more smoothly.


Developers from CLAM, VLC, Audacity, and Mixxx!

Overall we had a great weekend at Google and we got to have some good discussion relating to Summer of Code 2008. Mixxx developers also ran sessions on "Monetizing your Open Source Project (without being evil)" and "What open source can learn from commercial software development", both of which were well received.

We'd also like to thank everyone at Google who worked on Summer of Code for making it happen.

Saturday, September 27, 2008

Mixxx 1.6.1 Released!

Hot off the heels of our last release comes Mixxx 1.6.1, bringing a handful of new features and bug fixes.



Some of the more important changes are:
  • The waveform view now zooms instead of speeding up when the pitch is adjusted. This allows the beat ticks to align when songs are beatmatched, and was a feature request we heard many times after the 1.6.0 release.
  • FLAC support for Windows users! (Another much requested feature, and you can thank Michael Pujos for his hard work on this.)
  • Fixed a problem where the waveform view went unresponsive (thanks to Mark Glines for the patch)
  • Properly read artist and title names from FLAC files (another one from Mark)
  • Fixed drag-and-drop on Windows with the "Simple" display mode.
  • Fixed a Hercules RMX problem with its MIDI mapping.
  • Fix for songs with short artist names.
We've also had some mild success with M4A/AAC support, but it's still going to be a while before that feature makes it into a release unfortunately. We're also still working on our OS X 10.4 (Intel) package still, but we do have an unsupported OS X 10.5 package for PPC available for download here.

Wednesday, September 24, 2008

Updated MixMan DM2 Driver for OS X


Joe Mattiello has updated his MixMan DM2 driver for Mac OS X. From his release announcement:


This version adds Mixxx support, which should mimic the Linux ALSA (Jan's) driver. This means it should be a drop in replacement with the same .xml config file already packaged. Note, this is different then the version for the DM2 under windows, which is a completely different setup.

This version also includes a more extendable Generic MIDI mode which supports 4 banks completely and a PD patch to get you started on custom setups.

Sites / DL's / Source :
http://code.google.com/p/dm2usbmididriver/
http://www.joemattiello.com/dm2/

The driver is also open source now, which the code available here.

Monday, September 1, 2008

PPC Support Problems for Mixxx 1.6.0

We've got some bad news about the Mac PPC version of 1.6.0. Due to a "communication error", I thought we had someone building a PPC release and it turns out that person was actually doing something completely different. Unfortunately, I also promised erroneously to some people on the forums that it would be ready very soon.

So the situation is this, it seems that building a PPC release is beyond our available resources currently, as few of our current developers have access to such hardware. As such, we are urgently seeking someone to fill the role of PPC packager for Mixxx, this person will need access to a PPC Mac, some expertise in building software on it and some spare time. We will support this person to the best of our ability and they will be recognised as an official member of the development team on our website. We may also be able to pay in Mixxx branded t-shirts or mousemats. :)

If anyone is interested in this, please contact us using any of the usual methods.

So again, apologies to all those PPC Mac users out there who were misled, this was an honest mistake and we feel quite bad. Hopefully we will have a PPC release for you soon.

Sorry,

Adam

Update: We've had several volunteers come forward, and we're working with them to get a PPC build working. How long this will take depends on how much time the volunteers have, so I don't a package very soon, but at least the gears are turning now. :) Thanks for your help!