Showing posts with label picsoritdidnthappen. Show all posts
Showing posts with label picsoritdidnthappen. Show all posts

Sunday, February 20, 2011

Mixxx Debuts as #1 Free App in the Mac App Store


How are you doing up there, Angry Birds?

In less than 48 hours since we went live, Mixxx has become the #1 Top Free App in the USA, Germany, and Italy. We're also one of the top 3 Apps in Brazil, Canada, France, Japan, and the UK. 

We're completely overwhelmed by the response - I don't think anyone saw this coming. We wanted to be in the Mac App Store to reach more users, and now we're reaching far more than we ever expected!

I'd like to thank our entire community of DJs, artists, and developers for their dedication and cooperation that have brought Mixxx this far. Without the devotion of many individuals, Mixxx would not be the software it is today.

Feed a Hungry Mixxx Developer
As a shameless plug, I'm finishing my degree next month and I'm looking for a job! I'm interested in pursuing a career in game development or live performance audio software. If you know someone who needs a C++ programmer with several years of experience with Qt or real-time audio, please let me know!


"honestly, this is perhaps the BEST app that is currently available for free... if you enjoy music, this is a MUST!"  - VBkappasig

Wednesday, December 23, 2009

Mixxx 1.8 Preview

After many months of planning and development, we're finally approaching a beta release of Mixxx 1.8. Since our last release, several major new features have matured and are almost ready for public testing.
Our main focus for 1.8 has been improving the library, which is a direct result of continued feedback from our users. We're also excited to have been able to address several other major feature requests, and we think 1.8 is a big step in the right direction.

Library

The brand new database-powered library is not only faster, but much more flexible as well. The new library features include:
  • Keep your library organized by sorting your tracks into crates.
  • Need to take a break for a few minutes? Throw some tracks into the Auto DJ playlist and let Mixxx cover you.
  • The new Analyze view lets you peek at your recently added tracks and perform batch BPM detection.
  • A brand new intelligent library scanning algorithm is both quick and accurate at importing new tracks when you launch Mixxx. The library scanner is even smart enough to notice when you've moved tracks around inside your library and preserves any extra metadata you've added in Mixxx like comments and BPMs.
Crates in the new library


Looping and Ramping Pitch Bend

A major rework of our audio engine also brings looping to the next release of Mixxx. Running out of time to find that perfect next track for your mix? Lay down a loop and buy yourself more time. Unlike the competition, Mixxx has no limitations on the length of your loop, so you can be as creative as you want to be.
Additional work on our mixing engine has lead to a new feature we call ramping pitch bend. Ramping pitch bend helps you add extra smoothness to your mixes by making temporary pitch bends accelerate rather than jump suddenly.

MIDI Enhancements

A brand new MIDI backend completes the rewrite of Mixxx's MIDI code, the first part of which was included in 1.7 and enabled innovative new features like our MIDI scripting engine. The hot new addition for 1.8 is integrated multiple MIDI device support.
What do we mean by integrated? Check it out:





AAC and iTunes Support

Mixxx 1.8 can playback DRM-free AAC/M4A files on Windows, Mac OS X, and Linux. On Windows and OS X, Mixxx can also now see your iTunes library and let you play tracks from it without importing them.

In addition to a 1.8 beta, we're also preparing a 1.7.2 bug fix release. This release will fix MIDI on OS X and improve stability for certain hardware configurations.
2009 has been an exciting year for Mixxx, and 2010 is shaping up to be even better. As the year closes, we'd like to thank all of our generous contributors and supporters. We hope you're looking forward to next year as much as we are!


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!