Hello everyone. Here is my project of making a MP3 player. Another yet MP3 player? I hope no! Let me introduce it.
Genesis
I am currently coding this as an open source software, so it's cross platform and based on Qt 4.8.x SDK. First, it was design for my friend which is on Ubuntu, because she doesn't like very much other existing MP3 players, and I always found the idea of giving sources to the communauty very interesting. This project is hosted on Github, and you are welcome to fork it
What is the purpose of this software? To read MP3, and not more! Inside, you won't find any shortcuts to Wikipedia when you're selecting an artist, nor to link it with lastFM. I don't think this is useful. A good player is, for me, fast with a intuitive user interface.
Main features
Well... reading MP3! But the UI is highly customizable, and in a very easy way. This part was quite hard to realize, because it's building dynamic GUI using stylesheets at runtime. It's difficult to avoid code inflation. I don't know if it was the best idea to use stylesheets or if I should have wrote everything in pure C++. Anyway, the class StyleSheetUpdater is doing the job, so it can be changed latter.
Building the library is quite slow the first time you're opening the player (after choosing music paths). Once it's completed, the next time you're opening the player, it will be fast, using a file which keeps references to your music (less than 1 second to build more than 10000 items in the library treeview).
- Classic playback features (skip, seek, play/pause, stop, repeat)
- Two treeviews: one for the saved library, the other for browing the filesystem
- A search bar for the library, with clear button (subclasses of QLineEdit with http://doc.qt.io/qt-4.8/QSortFilterProxyModel)
- Customize UI: colors, fonts, buttons, covers, ...
- Customize Options: langage, paths (default path provided with http://doc.qt.io/qt-4.8/QDesktopServices) and shortcuts too
- Multiple playlists using tabs
- Keeps playlists in memory when closing
Short-, medium- and long-term goals
Actually, the 0.2.0 release for Windows and Ubuntu has not so much original features. But I'm planning to make this software better. What is comming:
- Managing playlists is started
- Favorites (rating tracks)
- Random playback feature
For the medium-term objectives, and after read this in the documentation:
QtMultimediaKit provides a set of APIs that allow the developer to play, record and manage a collection of media content. It is dependent on the QtMultimedia module. QtMultimediaKit is the recommended API to build multimedia applications using Qt. The Phonon API is no longer recommended.
- Delete Phonon by its equivalent in the QtMultimediaKit (if it's possible for a Desktop software)
- Make a real cross platform compilation with CMake?
- Make a Mac OSX release
- Add drag & drop from the desktop to the player, from the library to one playlist
And for long-term objectives:
- Build a Debian or Ubuntu package, make an installer for Windows
- Extend views with a mode Simplaylist for FooBar which I currently use. I also would like to make a multi-column mode when it's in fullscreen
- Respect native theme for Ubuntu when no colors are set
- Incorporate some Windows 7 taskbar features (small media buttons when the mouse is hovering the application)
So, as you can see, there's a lot of work to do! I code on my free time, so obviously it's quite slow to make all of this. But I'm beginning to have a good understanding of Qt'SDK. Code documentation is up to date, so don't hesitate young developer, join this project! It's also important even for myself because sometimes when you're reading your code few weeks later you're like "What the frak!". Retro UML design has started with standard modeler, but I didn't find something dedicated to the Signal/Slot mechanism.
Specific features
All features are more or less configurable. Those features are just "simple" features. I'm wondering if I should add an advanced button and make it to customize everything, every part in details. Firstly, I need to focus on more important features. And secondly, I'm afraid of the exponential inflation of code just for some details used by almost no one.
Each functionnality is configurable and applied in real time: you don't have to push an apply button (there is no such thing, it's a choice).
Resources
The project: https://github.com/MBach/Madame-Miam-Miam-Music-Player
How to contribute to the project?
You are welcome to help me to improve this project! You can test it and track bugs, I am also open to suggestions, comments, haters, here or on GitHub.
Bookmarks