*
Hello everyone.
Firstly I would like to congratulate the people and developers of Mixxx.
Awesome piece of Work. Kudos!
I wish to work on the project: Cover Art Support as listed on the Mixxx
Idea Page for GSoC 2013 <http://mixxx.org/wiki/doku.php/gsoc2013ideas>. I
understand its late and I have no work experience with Mixxx but,
nevertheless, I would love to do a GSoC for Mixxx.
Below is a draft copy of my project proposal. Currently I am expanding the
implementation section. It is taking time since I am going through the
Mixxx source code. The "Motivation for Proposal" and "Features that will be
added" sections are more-or-less complete from my side. I request you to
give me feedback, especially the negative ones. Its in plain text so that
you can comment as much as you want :)
Thanking you,
Vedant.
Name: Vedant Agarwala
Email Address: [email protected]
Freenode IRC Nick: vedant
IM Service and Username: xmpp-google: [email protected]
Location: Kolkata, India GMT+5.30
Proposal Title: Cover Art Support
Motivation for Proposal: Currently Mixxx has no support for album cover art
whatsoever. Displaying album art should be an expected feature of “the most
popular free DJ software in the world”. With version 1.10.1 Mixxx has a
large number of incredible features in a very visually appealing package
except for one thing- displaying cover art. Not only does cover art provide
a visual appeal to the library display and the currently playing song, it
has practical benefits too. Many users (home and DJs) go through their
entire library to select a particular song. Going through a library with
albums displayed through cover art (cover flow or grid-view) will be must
faster (and appealing) compared to going through a list of songs. The brain
takes longer to figure out text as compared to a picture. It may also
happen that a user is looking for a song/album he wants but can’t recall
the name; with so many songs going through the DJ’s head at a house party,
its not that hard to happen.
Let’s consider someone downloads and installs Mixxx. He, like me, is
astounded by look and feel of this free software. It’s so professional
looking. It has all the features he needs and many more. In the meantime
his library is being loaded onto Mixxx. After this is complete he starts
playing songs but soon realizes that there is something lacking. In his
earlier music player, his entire collection was a beautiful collection of
pictures, each representing albums. Now it is just a large list of titles.
Earlier, he would sometimes recall songs in his CD case by the color of the
CD's spine before the name came to him. He knows it's much faster scanning
through CDs when looking for a certain color swatch than reading each
title. Even the songs in the decks don’t show album cover art anywhere.
The above scenario isn’t an isolated incident. There have been bug reports
pertaining to this very issue ([1]<https://bugs.launchpad.net/mixxx/+bug/661459>
[2]
<https://bugs.launchpad.net/mixxx/+bug/890421>[3]<https://bugs.launchpad.net/mixxx/+bug/1015894>).
Cover art has been missing from mixxx; this project will add the cover art
support in a big way without wasting much of the precious real-estate of
mixxx.
Features that will be added:
-
I will update the existing list view of the library to display cover
art. Each track with cover art will occupy 2 lines. Whenever multiple
tracks of the same album are listed subsequently (in “Library”, “Auto DJ”
and all other lists) only the first song will display the cover art. Those
subsequent tracks will occupy single lines.
-
On the decks, just before the song name the respective cover art will be
present spanning both the lines. While dragging-and-dropping a song onto
the deck, the cover art will move along the cursor.
[Expected look after adding Cover Art to the decks and List View]
-
I will add more views, like Gridview and Cover flow, in place of the
existing list view. The view can be selected from settings or (as the user
selects) be available as tabs.
-
The vinyls will feature the respective songs’ cover art. They can be set
to be stationary or spinning with the vinyl. If time permits, I will make
the opacity (on a black background) user-determined too.
[ A spinning vinyl with cover art]
-
Missing Cover Art will be downloaded automatically from web services
while adding to library.
Implementation Details:
The main purpose of this implementation is to provide an idea of how I
intend to go about writing code. The exact technicalities might change
during the coding phase.
-
Add Cover Art support to the Mixxx library: I will create a covermanager
directory with all the classes related to cover art will be stored. It will
contain a CoverCache class. This will be a singleton class. The CoverCache
will provie a central repository for Album Cover Art QPixmaps. I
will typedef
QHash<int,QPixmapCache::Key> CoverKeys and an another mutable
QHash<const Meta::Album*,CoverKeys> m_keys. m_keys will be a cache
holding all the pixmaps. I will write its code with care so that these hash
keys don’t change from anywhere else even though they will be shared
everywhere. A SaveCoverToFile class will be made that will embed cover art
to files which support it and save it in the folder for the formats that
don’t. I will update the current LibraryScanner to scan and index image
files. All the images will be added to cache whether the corresponding
music file exists or not. This will prevent the same file from being
checked multiple times. The LibraryScanner will make the image files
available to a CoverChecker singleton class.
Job of the CoverCheck will be to check the existing library (made by the
LibraryScanner) for embedded cover art. Obviously, it will only check the
formats that support cover art. The CoverChecker will also try to link the
image files to their corresponding track (mainly based on filenames). This
will more efficient than trying to link tracks to images since number of
tracks will greater than (at worst, equal to) the number of images.
Finally, I will update the TrackInfoObject class to provide a method that
returns cover art. It will return a QPixmap using the CoverCache.
-
Update the existing list view of the library:
-
Add Cover Art to the decks:
-
Add the gridview and the coverflow view:
-
Get missing Cover Art from MusicBrainz: I will add classes to the
covercache directory to fetch cover art. I will be using the MusicBrainz
web service but code will be modularized and decoupled in the form of a
MusicBrainzFetcher class. Other sources of Cover Art (like itunes) can be
added later on. A CoverFetcher class will handle the available cover art
fetchers. A SettingsWidget, that will be included inside the Mixxx Settings
dialog, will handle the user settings and configuration (using the
KGlobal::config() )
MusicBrainz’ cover art
API<http://musicbrainz.org/doc/Cover_Art_Archive/API>is well
documented and returns a large enough (600x600) image file.
QNetworkAccessManager will handle the connection to the internet. A request
to the MusicBrainz web service can easily be made via the QNetworkRequest
after authentication using the QAuthenticator class. The reply will be
parsed by methods of QString class to fetch a URL of the image. The image
will then be downloaded and sent to the SaveCoverToFile for storage. The
CoverCache will be updated. Then, Cover Art can be retrieved by the
TrackInfoObject.
-
Add Cover Art to vinyls:
Tentative Timeline:
June-
<--- GSoC commences--->
week 3: Add Cover Art support to Mixxx.
week 4: Build, test to see if they work as expected.
July-
week 1: Update the List view.
week 2: Complete the List view and update the other GUI parts
(drag-and-drop, etc.)
week 3: Add Coverflow and Grid View
week 4: Update the Mixxx Preferences and test the new views.
<--- Mid term --->
August-
week 1: Add the “automatically download missing cover art” feature. Test to
see if it works
week 2: Add cover art to both decks.
week 3: Add cover art to Vinyls- both spinning and stationary. If time
permits add the “changeable opacity feature”
week 4: Test the above GUI features and fix any bugs.
September-
week 1: Update “Preferences” to display options of the newly added GUI
features..
week 2: Update Documentation, fix bugs and streamline code by testing and
tweaking.
<--- suggested “pens down” --->
week 3: Do some more code cleaning and fix bugs so that the new features
can be pushed into the master branch.
<--- firm “pens down” --->
week 4: Fix more bugs and complete documentation.
Work Schedule: Since I have no other obligations I can easily spent about
50 hours a week (7 to 8 hrs a day in slots of 2 to 3 hrs, one each in the
afternoon, evening and at night) coding; since summer vacations will be
going on till mid July. Even after college starts, very few classes are
held in the beginning of the semester and the college teachers make
exceptions for GSoC students. So, I can continue to code 50 hours a week
(with a similar schedule) even up till September.
About Me: I am currently in my second undergraduate year in National
Institute of Technology, Durgapur, India, studying Computer Science and
Engineering. I have experience coding experience with C/C++, Java
(including Android and making GUI using Java swing), SQL and web services.
I have been working for and submitting patches to KDE whose software is
based entirely on the Qt framework. Most of my work has been for Amarok,
the open source music player by KDE. Cover Art is fully supported in
Amarok. I have also taken help from the Amarok source code to make my
project proposal. I expect this to continue during the coding phase as
well. I have submitted 3 patches ([1]<https://git.reviewboard.kde.org/r/107662/>
[2]
<https://git.reviewboard.kde.org/r/109283/>[3]<https://git.reviewboard.kde.org/r/109295/>)
and 2 more are under review ([4] <https://git.reviewboard.kde.org/r/110101/>
[5] <https://git.reviewboard.kde.org/r/110082/>). One of them updates the
SQL database.
I am passionate about coding for open source and I fell in love with Mixxx
when I first saw it. I downloaded and built mixxx from source. I have been
considering myself a DJ since then. I’m sure working with a mentor who is
virtually present won’t be a problem. During the work period code can
easily be shared via github. If it is possible, meeting a mentor face to
face will obviously be much more helpful.
After GSoC I hope to become an active developer for Mixxx and help it
achieve such a level that it will rival the paid DJ mixing softwares.
*
------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
_______________________________________________
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel