Browsed by
Tag: riker

Riker 0.1

Riker 0.1

I have now created a distribution file for Riker 0.1. It’s not a music player yet; instead, it’s a proof of concept for two things: Using gstreamer to read tags from files, and using Vala bindings for libmusicbrainz4 to perform a query on the MusicBrainz webservice.

Get it from the Github Releases page.

If you’re running Linux, I invite you to give this a try!

To build, run the standard ./configure; make stanza. Please do not install this package yet, instead run it from the source directory.

Usage is pretty simple. In the source directory, run

./tagread file:///home/user/Music/path/file.mp3

It should print out information pulled from the file, including tagged MBIDs, and then perform a query on the MusicBrainz webservice – printing out the fetched release title.

If you have any issues with reading file tags or with the query, please let me know by sending me an email, or creating an issue on the github issues page.

Distribution-Specific Build Notes

For Ubuntu, you will need the following development packages installed:

  • libgee-dev
  • libgstreamer-plugins-base-dev
  • libsqlite3-dev

Although Ubuntu has a “libmusicbrainz4-dev” package, it is either broken or out of date. You’ll have to manually install a recent libmusicbrainz4 beta version, which can be downloaded from

Vala Bindings for libmusicbrainz4

Vala Bindings for libmusicbrainz4

When developing Riker, I had a bit of a choice – I could either write (from scratch) a new library to interface with the MusicBrainz XML webservice, or I could create bindings to access the existing libmusicbrainz library from within Vala. Up to today, I’ve gone a little ways down both paths, and both have problems.

If I write new bindings from scratch, they’ll have some nice features like integrating into the Glib main loop, and automatically determining proxy settings from the environment. But it will be a lot of coding; and even more debugging.

The existing libmusicbrainz code is better tested, and writing bindings is less overall code to write. Unfortunately, I’m writing Vala bindings for the C bindings to a C++ library. The extra steps cause some weirdness, which means that the bindings are more complicated than I would like.

And then there are a few things with the C bindings to libmusicbrainz that it simply gets wrong. For example, it has no working typechecking! As a result, even some of the internal test code gets types mixed up, causing hard to debug issues. I’m working on a patch to correct this, which will change the C bindings API slightly. (But curiously enough, not the ABI).

But in the end, simply to get started faster, I decided that the bindings are the way to go. The hypothetical GObject-based MusicBrainz webservice library will have to wait for another day.

Take a look at my progress so far on the vala bindings at libmusicbrainz4.vapi.