I started making a music library manager like 2 weeks ago, a., because I wanted to know and share my process for creating apps, apps that me (and maybe 9 other people use), and b, I needed a good media player that was minimalistic and aesthetically pleasing.

Naming & inspiration

The first step in creating a project, is to name it. And whatever way to brand something than to pull a name out of thin air. I listen to a lot bandori, love live, you know music from those rhythm mobages, so of course I'm gonna name it aidoru!

Of course, the look and feel for the project was not gonna be out of the hat. Much of the design was inspired from a now defunct media library program, Voltra – which a friend recommended me a while long ago. I also took some inspiration from websites like deviantart/behance, where lots of UI designers better than me made some beautiful media player concepts. Funnily enough, I also took design from vscode of all things for the sidebar that would be added later in development.

Here's the thing, I did not have an idea how the media player would look like from the start, I just wanted to recreate the minimalism of Voltra. The design would then change and adapt, sometimes, according to my moods, dynamically and fluidly.

how voltra looked like

The plan

I had past experience, wonderful ones with crystal (from building a matrix bot/client) and Qt from building a desktop shell. So why not use them both? There is a Qt5 binding library for crystal, qt5.cr. However, that hasn't been updated since Qt 5.9 was released, and I couldn't get it to compile on my machine. So I was stuck with using some other language then.

I knew I wasn't using C++ again, because frankly I'm tired of those slow compilation times. Was Ruby fit for this job? Probably not, yeah my crystal skills would translate well into Ruby, however I don't have enough experience in the Ruby ecosystem to do it. So the next best language was Python+PyQt5, as I am sort of fluent in the langauge and have used the library before.

The journey

If you scroll far back enough in the project's Github's commit history, you'll stumble upon the first initial commit, and let me tell you, it would later become a very small part in the program. It was the first strokes of the brush on the canvas, the mini player.

mini player

I would later add a smaller mode, a micro player:

micro player

This was all design of course, controlling music would later be added in commit #5. Up until this point, the player was still using a hard coded music path. So in commit #6 I added drag and drop support.

Sure this thing could play music now, however a real music player has album support. I made an assumption that all music the user has is well organized into separate album folders. So in commit eb885e6, I added album support. Autoplay and keyboard shortcuts were added later that day, and that was the end of March 11.

album view

On commit 014e494 (about a day later), I did a rough sketch for the file list view, and 2 commits later the file list view was done, and that marked the end of March 12.

file list view

March 13, I split the program – which up until this point had been entirely in one file – into multiple source files, making development easier for me. I also added custom icons and the sidebar I mentioned earlier. It was also at this point when I announced it on Mastodon.

Porting to Windows

I announced the beta on mastodon on the 18th. I got lots of positive responses <3, some people like it, and raised lots of interesting suggestions. For one, the program was only tested on Linux, so I had to port it to Windows now.

Getting it to run on this OS was a pain, I had to do workarounds with taglib to get some mp3 files work, before realising it was actually a codec problem. After fiddling and installing random codec packs, I finally ended on K-Lite's Codec Pack.

Next, I searched for a good packaging application for Python, and I found that pyinstaller was the easiest to use, simply by doing

pyinstaller aidoru.spec

with a specification file, a distribution folder is generated. I can then just archive it and share it over the net.

The release

I added a light theme for the player later,

windows port

I also forked pytaglib to find cover art embedded in music metadata. Supposedly pytaglib has plans to support this feature once taglib 2.0 rolls out, which hopefully by then would "provide a uniform interface for album covers." However, who's got the time to wait, eh?

On the next 2 days, I would finish adding an update function for Windows. My original plan was to have the program kill itself, while calling a helper batch script that would download the latest version, then automatically extract the archive into the program's directory. A day into it, I would realise that batch files were terrible for this job and switched to doing Powershell scripts. After a little bodging, it eventually worked.

I also added album searching that same day.

windows port

Feature addition slowed down by this point, as I was only doing small bugfixes, and some small quality of life desktop integration like adding MPRIS support for Linux. I finally published the program's site, which lies here!

The end?

Of course this is far from the end of development, I do have plans to add music streaming service support, as well as manual/automatic tagging features. However, I'd say the program is pretty feature complete so far, and I hope that you all enjoy using it!