Basic description: MPlay3 is a music player that lists and plays all .mp3 files in a given folder. It lists all Genres, Artists, Albums and Songs in four different columns. If one or multiple entries in a column are selected all subsequent columns will be adjusted to only display the entries corresponding to the selected ones. For example: if the genre rock is selected, then only artists that are in the category rock are shown in the artist column. Based on that, only albums created by the artists that are still visible are in the album column and only the songs on those albums are then shown in the song column. This enables you to very quickly assemble a list of songs. The application crawls through the given folder path once, counts all .mp3 files, extracts the metadata if they exist and saves them in a small plaintext save file. The metadata is the basis for the different columns. Additional features are basic stuff like music shuffle, looping, a search for each column and mulitple color-palettes. A short video of the application is on youtube https://www.youtube.com/watch?v=pW9DGD-zUSw&ab_channel=TimDierks and additionally the code is now also on Github https://github.com/CaptainTimberTim/MPlay3.

Motivation: After I got my first and only Apple product I ever had, the second generation iPod, I started using iTunes as a music player. For quite some time I was happy with it and especially liked the feature that you could have columns for genre, artist, album and songs next to each other. But at some point this feature was destroyed in an update, which prompted me to never update my iTunes again. But as I upgraded to Windows 10 I stopped trying to keep the old version of iTunes, as it was too much of a hassle. From then on I used VLC to play my music, which is mediocre for that purpose at best, but I was annoyed trying to find a replacement and gave up. And I like to own the music I listen to, streaming services are not for me. Then I got the idea to just create my own music player as a hobby project. This was at the beginning of 2020 and since then I worked on this player.

Goals:

Done:

  • Crawl through given folder/subfolder and find all files ✓
  • Extract metadata from files ✓
  • Decode .mp3 files for playing (only via single header file library MiniMP3) ✓
  • Design a simple UI that supports resizing and the previously mentioned features ✓
  • Make it possible to change the music folder path or rescan the existing path for changes ✓
  • Create different color-palettes that can be switched through ✓
  • Extract music playing into a audio-sub-thread ✓
  • Multithread the loading and decoding of .mp3 files ✓
  • Add application quit verification popup (or something similar) ✓
  • Add proper double-click for song selection ✓
  • Pressing the dedicated keyboard buttons for Play/Pause/Next/Previous while window is not in focus should work ✓
  • Let the user create their own color-palettes ✓
  • Add a color picker to make color palette creation easier ✓
  • Change the loading of .mp3 files to enable larger .mp3 file sizes (> 128MB) ✓
  • Add information screen for all keyboard shortcuts ✓
  • Solidify font-rendering ✓
  • Load a backup truetype file if international unicode is not supported in current font ✓
  • Solidify Playlists ✓
  • Deprecate stb_image and use my own code ✓
Long term:
  • Switch from OpenGL to DirectX
  • Deprecate stb_truetype and use my own code
  • Deprecate MiniMP3 and use my own code
  • Get rid of the standard library
Short term:
  • Fix all the bugs, all the time

Most of the big goals are done and -as far as I know and tested it- the application is now basically usable (I hope). In the next months I will work on it, to finish all the small things and then start to tackle the bigger and more intesive parts like all the deprecation work.