musikcube

musikcube – free terminal-based audio player and streaming server

I started to really appreciate the versatility and awesomeness of console-based software after repairing a broken system using the ubiquitous vi text editor. It was figuratively a life saver. I’m always keen on exploring other wonderful console-based software, particularly multimedia software. So here’s musikcube. It’s a free, open source, cross-platform terminal-based audio engine, library, player and server written in C++.

musikcube has a streaming audio server enabled by default. The server runs a websocket server on port 7905, used for metadata retrieval, and an http server on port 7906 which serves (optionally transcoded) audio data to clients.

Installation

There’s excellent support for Linux distributions. The project offers packages for Fedora 26-28, Ubuntu (18.04 – Bionic Beaver, 17.10 – Artful Aardvark, and Ubuntu 17.04 – Zesty Zapus, 16.04 – Xenial Xerus), as well as packages for Mac OS X, and Windows.

There’s also a package for Armhf, which runs on Raspberry Pi series of devices and other single-board computers like the Asus Tinker Board. LinuxLinks kindly gave me a Tinker Board. The armhf package installs on the Tinker Board after installing the libev4 package. However, I was missing a couple of libraries before it’d run on the Tinker Board. This was fixed by issuing the following commands at a shell:

linaro@tinkerboard:$ sudo apt install libboost-chrono1.62.0
linaro@tinkerboard:$ sudo apt install libboost-atomic1.62.0

For my desktop machines, I’ve pretty much settled on the Manjaro distribution – it’s fast and efficient in operation. musikcube is available in the Arch User Repository and offers the latest version, which at the time of writing is version 0.51.0. But I decided to compile the source code. Alternatively, I could use debtap which converts .deb packages into Arch packages.

To compile the source, your system needs the following libraries and their development packages: cmake, boost, libogg, vorbis, flac, faad2, ncurses, zlib, asound, pulse, libcurl, libmicrohttpd, libmp3lame, and libev4 if you don’t have them already. All of these packages were already installed on my system.

[luke@thames Downloads]$ tar zxvf musikcube-0.51.0.tar.gz
[luke@thames Downloads]$ cd musikcube-0.51.0
[luke@thames Downloads]$ cmake .
[luke@thames Downloads]$ make -j6
[luke@thames Downloads]$ sudo make install

Installation proceeded without a hitch.

In operation

After installing the software, you next need to add some directories that contain music files. You browse directories in the top left box, adding them by pressing space. Once you’ve added the music directories, the software syncs the metadata. This process can be slow to complete if you have a large music collection.

Here’s a screenshot of musikcube in action. The interface is beautifully organised and thought out. It embodies both simplicity and functionality.

musikcube
(click the image to make full screen)

In browse mode, there are two main panes hosting artists and tracks, with a volume control and a playback bar. The panes change by pressing d. This lets you browse by directory. Just add music directories to the list of indexed paths in the settings screen.

Any music player worth its salt offers gapless playback. Gapless playback is the uninterrupted playback of consecutive audio tracks, such that relative time distances in the original audio source are preserved over track boundaries on playback. It’s essential if you listen to classical, electronic music, concept albums, and progressive rock. There’s a few Linux music players that don’t offer gapless playback. Fortunately musikcube offers both gapless playback and crossfade playback.

The Ctrl-R keybinding is useful. It displays an indexer dialog that allows the user to choose between a quick scan and full metadata rebuild.

Other features include:

  • Library view, browse by:
    • Artist, Album, Genre, Album artist, playlist, or directory.
  • last.fm scrobbling support.
  • ReplayGain support which allows musikcube to normalize loudness for individual tracks or albums.
  • Built-in hotkey viewer and editor.
  • Basic mouse handling support.
  • “proportional seek” functionality.
  • Support for audio encoder plugins.
  • Customizable keyboard shortcuts.
  • Configurable output device.
  • Plugins add functionality to the software:
    • AlsaOut IOutput.
    • FLAC IDecoder.
    • HTTP IDataStream.
    • M4A IDecoder.
    • nomad IDecoder.
    • Null IOutput.
    • Ogg IDecoder.
    • PulseAudio IOutput.
    • Stock Encoders (MP3, OGG).
    • Taglib 1.11 ITagReader.
  • Color themes: Default, 8 colors (compatibility mode), gruvbox_dark, solarized_dark, and solarized_light.
  • Internationalization support – translations are available for French, Italian, and Russian.

The software stores its database, cache, settings, and plugin files in ~/.musikcube. Instead of cluttering up users’ home directory, it would make sense for these files to go to ~/.config/musikcube. Let’s keep our filesystems tidy!

Summary

musikcube is a marvelous console application. It’s lean, looks beautiful, offers a good range of features, and is very stable. I’m not liking its slow syncing metadata which is annoying if you’ve a large music collection. The mouse support is particularly welcome.

Website: musikcube.com
Support: User Guide, GitHub code repository
Developer: Casey Langen and many contributors
License: BSD License

musikcube is written in C++. Learn C++ with our recommended free books and free tutorials.

Share this article

Share your Thoughts

This site uses Akismet to reduce spam. Learn how your comment data is processed.