Category Archives: Ocarina

Ocarina 6.4.3

I just released Ocarina 6.4.3!  My main project over the last several months has been converting Ocarina over to C, and as of this release one quarter of my Ocarina codebase has been converted.

I have several reasons for this conversion, the first being that my natural coding style tends towards writing very C-ish code.  I don’t use a large number of classes or inheritance, and I find it easier to write a global function instead.  This can work in C++ or Python, but sufficiently large projects tend to get messy.

Switching over to C also makes it easier to make an interface in GTK.  Glade, the GTK interface designer, lets me assign callback functions in xml, cutting out a lot of code to wire everything up.  This works great in C, but breaks in C++ due to how C++ code is compiled.

Converting everything from C++ to C is surprisingly easy thanks to the extern keyword in C++, which I use to include C files in my remaining C++ code:

extern "C" {
#include <core/file.h>
#include <core/tags/track.h>
#include <core/audio.h>

I have enough changes stacked up that I can have an Ocarina release every other week for the next several months. This should give me plenty of buffer time while I work on GUI code.

Ocarina 6.4.3 can be downloaded here!

Ocarina 6.3

I officially released Ocarina 6.3 this morning!  Changes include:

  • Improve unit tests.
  • Finish up Doxygen documentation for core/.
  • Separate tag database into multiple files.
  • Move Gstreamer from core/ to gui/.
  • Various gui code cleanups.

The most interesting change this release is probably the gstreamer move.  Ocarina 6.2 added an audio “driver” interface to allow for faking playback when running unit tests.  This release takes the concept one step farther and moves all of gstreamer into the gui, simplifying many things.  My hope is that this will make it easier to port Ocarina to Android or OS X in the future.

Ocarina 6.3 can be downloaded here.

Ocarina 6.2

After over 4 months of development, I have finally released Ocarina 6.2!  If you’re hoping for flashy new interfaces or new features then you’re out of luck.  Most of my work this release involved splitting my GUI code into two different layers – one for controlling the actual GUI and another for GTK support code.

This release also adds in doxygen comments for almost everything in core/.  My eventual goal here is to convert my DESIGN text file into higher level notes about the design while the code contains the documentation for each function.

Ocarina 6.2 can be downloaded here.

Ocarina 6.0

I have not had an Ocarina release in almost a year and a half.  The last year has been busy (more on that later), but I haven’t forgotten about my pet-project!

I started working on a new rewrite of Ocarina in May 2013.  I created previous versions by writing whatever features I felt like implementing at the time.  There was no plan, and it didn’t take too long to transition into an ugly hackjob.  I felt like the code would have been almost impossible to update without breaking everything, so I started fresh.

For the first few weeks I only worked on a design document.  This allowed me to stay focused during development and gave me a chance to think out features before writing a lot of code.  I really like this approach, and I recommend it to everybody before starting off on a project.  I plan to keep this document updated as much as possible.

This is also the first version of Ocarina to have unit tests.  I like these so far, since I can now focus on testing a single component without needing to have a functional GUI.  I plan to keep these updated as much as possible, too.

Ocarina 6.0 is still Linux only and  I don’t have the time, resources, knowledge or interest to support a Windows or OSX port.  I am willing to work with anybody ambitious enough to attempt a port!  Let me know …

Other notable changes:

  • I continued to refine the UI (compared to Ocarina 5.10)
  • I made the switch to GTK-MM and GStreamer 1.2
  • I added support for “banned” and “favorites” playlists
  • I created a .desktop file so Ocarina will show up in your “applications menu”

Download Ocarina 6.0 here!

Ocarina 5.11

Happy Thanksgiving! I’ve done more work than I realized over the last few months.  Changes include:

  • I rewrote most of the playlist code to use a std::vector instead of a linked list.  The class is much simpler now and should be easier to maintain going forward.
  • Switch to gstreamer 1.0.
  • Added sort and random buttons to the UI and rip out extra playlist types.
  • Command line completion for ocarina-* commands.
  • Various other cleanups.

You can get it here. There is a PKGBUILD available here.

Ocarina 5.10

This release took a few months longer than I was planning on, but I put a lot of work into making ocarina easier to use. I started off writing my own linked list class to use in playlists, but the interface still needs work so I haven’t started using it everywhere.

Something I didn’t plan on doing was rewriting the entire UI… that’s really what took the longest. I had some messy, hand-written code for showing the application and it wasn’t easy to work with at all. I dreaded adding new features or cleaning any of it up because something might break. I knew I would have to rewrite most of it eventually anyway to work on some UI changes that I planned on making, so I decided I would try to make future edits as easy as possible. I found GtkBuilder and the Glade UI designer and then spent several weeks cutting out old code and making everything work with this new system. I think the end result was worth it!

New features in Ocarina 5.10 include:
– Move playlist close button into the tab page because tabs were growing too wide.
– j/k keys move the currently highlighted down or up (vim style!).
– d deletes selected songs from the current playlist.
– Now playing and the AutoPause / Library / Settings notebook share space, everything in a single notebook resulted in a lot of wasted space.
– Users can manually hide the Recently Played and Banned tracks lists from the Settings tab.

You can get it here. There is a PKGBUILD available here.

Ocarina 5.9

New features in Ocarina 5.9 include:
– Reordering playlist tabs to change where the next song is picked from
– Close button on playlist tabs
– Reworked the entire build system
– Keep a play count and remember the date songs were last played
– “Ban” songs from playing in the library

You can get it here. There is a PKGBUILD available here.

Ocarina 5.6

Just released Ocarina 5.6. New things include:
– Backend alsa is optional
– Output to other alsa devices
– git-ish commands (`ocarina play`, `ocarina pause`)
– Tooltips showing filepath of hovered song

You can get it here. There is a PKGBUILD available here.

Ocarina 5.5

I’ve been sitting on Ocarina 5.5-rc for a while now without finding any serious bugs. When I compiled without the -g flag to g++ a few weeks ago there was a segmentation fault when reading in save files. This problem seems to be gone now, so hopefully it was a g++ error (I have no idea what else would cause it…).

New features include:
– Fairly big cleanup of the entire backend
– Queue is automatically saved across sessions
– Songs can be removed from the queue
– Faster library scanning
– Library update removes tracks that no longer exist
– Gapless playback using gstreamers “about-to-finish” signal

You can get it here. There is a PKGBUILD available here.

Ocarina 5.4

Ocarina 5.4 has been released. You can get it here. There is a PKGBUILD available here.

New features include:
– Library filtering
– Playback queue
– Pause after current song

I’m doing a feature freeze for the next release or two so I can clean up the code and make everything easier to work with. I also have ideas for how to make library scanning more efficient.