Showing posts with label library. Show all posts
Showing posts with label library. Show all posts

Monday, December 6, 2010

Mixxx 1.9.0 Beta1 and 1.8.2 Released!

Hot off the heels of 1.8.1, the Mixxx development team is pleased to announce the release of Mixxx 1.9.0 Beta1!



This public beta is intended to give (brave) Mixxx users a chance to try out some new features and help us find bugs. We do not recommend using beta software for live performance because there will be bugs. You can help improve Mixxx by reporting any bugs you find.

Important: Mixxx 1.9.0 beta1 will upgrade your library to a new format. This will make it incompatible with Mixxx 1.8.1. In order to try out Mixxx 1.9.0 beta1 you should upgrade to Mixxx 1.8.2, which we are also announcing today. You can switch back and forth between Mixxx 1.9.0 and Mixxx 1.8.2 with no trouble.

Among the new features in 1.9.0 Beta1 are:
  • Shoutcast / Icecast support
    • Mixxx can now broadcast over the internet (heavily requested feature)
  • External Mixer Support
    • The new Sound Hardware preferences pane allows you to route each playback deck separately, which allows you to use Mixxx with an external mixer.
  • ReplayGain normalization
    • A user from our forum worked closely with our developers to fully implement volume normalization, including performing the ReplayGain analysis for tracks which are not tagged.
  • Waveform Gain
    • The scrolling waveforms now scale according to the channel gain for better visual feedback.
  • Key lock buttons
    • Formerly known as "pitch-independent time stretch", there are now easily accessible key-lock buttons for each for deck.
  • Revamped default skin
    • Since the original source material for the Outline Netbook skin was lost eons ago, our artist completely redid it from scratch and tweaked it for better visibility. The new skin has also added EQ kill switches.
  • HSS1394 support (Windows, OS X)
    • Mixxx now supports firewire HSS1394 MIDI devices such as the Stanton SCS 1 series.
  • Improved FLAC support
    • We're now using libFLAC directly for smoother FLAC decoding.
  • Revamped metadata parsing
    • Integration of TagLib allows Mixxx to parse more metadata from songs, and do it more consistently.
  • Metadata writing
    • Mixxx can now write changes in song metadata back to disk. This feature is off by default, and can be enabled in the Library preferences pane.
  • Millisecond time display
    • The time counters in Mixxx now have an extra millisecond display.
  • Library improvements:
    • Played column - The library now indicates whether a song has been played in the current session already, and also counts the total number of times the song has been played.
    • Ratings column - 5 stars, no stars, or anywhere in between.
    • Better search - Search now searches in more columns, and by-term instead of by-phrase.
    • Revamped iTunes integration - A rewrite yielded a significant speedup of iTunes parsing.
    • Faster library scanning - The library scanner should perform much better on large libraries.
    • Inline Editing - double click any item in the track table to edit its contents.
    • Record in MP3/Ogg - Now your recordings can be saved in either MP3 or Ogg/Vorbis format.
  • New MIDI mappings:
    • Vestax Typhoon
    • Hercules DJ Console Mk4
    • Numark MIXTRACK
    • Pioneer CDJ-350
  • Updated MIDI mappings:
    • Hercules DJ Control MP3
    • Hercules DJ Control e2
    • Hercules DJ Control Steel
    • Vestax VCI-100
    • Reloop Digital Jockey 2
  • Tons of bug fixes and performance improvements!

Mixxx 1.8.2 has a wide variety of bug fixes, performance improvements, and the same MIDI mapping updates that 1.9.0 beta1 has.

The Mixxx team would like to give a shout out to these up-and-coming contributors who had a huge hand in helping make 1.9.0 awesome (in alphabetical order):
  • Irwin Céspedes
  • Vittorio Colao
  • Joseph Colosimo
  • Bill Good
  • Anders Gunnarson
  • Tobias Rafreider
  • Owen Williams

Fundraiser
We're making great progress on our 1.9.0 Build Server fund, but we still need your help! This project will finance a dedicated build server that we will use to create nightly builds and automate our release process. This means the development team will have way more time to focus on making Mixxx better instead of dealing with packaging. Money raised will go to cover the cost of the server, and any leftover money will cover other ongoing expenses like web hosting, and otherwise help keep Mixxx rocking!

Click here to lend your support to: Mixxx 1.9 Build Server Fundraiser and make a donation at www.pledgie.com !

New Ubuntu PPAs
We've moved our official Mixxx repository for Ubuntu to a new PPA to increase security. The old repository is still online for now, but Ubuntu users will have to follow the instructions on our downloads page (click the Ubuntu download link) to get the new versions of Mixxx we've just released. There's also a separate Mixxx betas PPA, for brave souls.


Bugs
We depend on feedback from our users to guide Mixxx's development, so please file any bugs you find in this beta release on the Mixxx bug tracker. If you don't file a bug for the beta, don't be surprised when it isn't fixed in the final version!

Join Mixxx!
We're always looking for new contributors who are interested in working on Mixxx. If you're a programmer or artist and want to work with a creative, enthusiastic team, hop on our IRC channel (#mixxx on Freenode) or sign up for our developers' mailing list.


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!

Thursday, January 31, 2008

Progress since Beta 1


Since the release of Mixxx 1.6.0 beta1, we've been busy busy busy getting new features and bug fixes ready for beta2. The library has undergone substantial work including new playlist support, improvements to the file scanning, and several bug fixes that were causing stability issues in beta1.

Recently, Micah Lee (one of our Google Summer of Code students), began working on our BPM code again. Among his latest additions is support for "BPM schemes", which allows you to save preset BPM ranges to improve the accuracy of the BPM detection when launched from the track editor dialog.


"BPM Schemes" is one of the new features slipped into Mixxx 1.6.0 Beta2

Also, OS X users can expect a Leopard/Intel package for Beta2. Big thanks to all the testers who've helped me test the package.

Lastly, we expect the 1.6.0 beta2 release sometime in the next two weeks. There's still a few extra features we're going to try to slip in to the next release, so stay tuned!

Friday, November 30, 2007

November Update

The last month has been completely insane. We've been busy fixing bugs and not-quite-finished features like there's no tomorrow. Our Subversion repository has seen more than 70 commits (those are generally changes to Mixxx's code) in the last month, and we've still got a few things to finish before the beta.

Some cool stuff that's been done in the last month though is:
  • Multithreaded library scanning. Mixxx will scan your library in the background. Unfortunately, the actual library saving/loading part is slightly broken at the moment and I don't know if that will get fixed before the beta. (It just rescans your library every time, which is semi-annoying, but you always cancel it and use "Browse" mode.)
  • Automated (opt-in) crash reporting. We've added an exciting under-the-hood feature that allows us to gather crash reports automatically. This is strictly opt-in and so you're asked on your first run whether you'd like to help us out by enabling it or not.
  • The play queue works more or less now. This is a good example of the kind of dangling unfinished features we've been trying to get working before the beta.
  • Speed optimization
  • A few tweaks to the vinyl control in order to make it a little easier to use.
Lastly, I just want to say a word about vinyl control. Since I've been busy fixing other bugs for the last month, I haven't had time to give vinyl control the level of polish that I want it to have. When we release the beta, the viny control is probably going to be "very beta". If your timecode signal quality is bad, you'll probably have no idea what's going on. However, it should be usable, just not particularly user friendly. I'm hoping the beta release will spur some people to poke at the vinyl control code, which isn't terribly difficult to understand/tweak.

I've written a Vinyl Control page on our wiki which should hopefully answer some questions people have about it.

Tuesday, September 4, 2007

File browsing 2.0

Cedric coded up something cool yesterday:



He figured out how to integrate a file browser into our new library table view. Being able to browse directories is useful if you want to load songs that are outside your library (although you can just drag-and-drop them into Mixxx from outside). It's also handy if you have an inhumanly large MP3 collection and don't want to wait for it to import into Mixxx's library.

Progress towards a beta release is coming along well...