beaTunes News

Monday, September 11, 2017

beaTunes on High Sierra

macOS 10.13, also known as High Sierra, is going to be released very soon, which means it's time to talk about compatibility with beaTunes. An issue some beta users reported is a missing menu bar. In essence, just the application name, but none of the usual menu items are visible, which makes it impossible to work with beaTunes.

Should you encounter this issue, please try the following solution:

  • Go it and install the latest Java version distributed by Apple.
  • The package will install two items: An antique Java Virtual Machine (JVM) and the JavaVM.framework.
  • Unless you still use an application that uses Java 6 (beaTunes does not), you should remove the Java 6 VM right away, because of security issues.
  • But for beaTunes to work properly, you must keep the JavaVM.framework, which has no known security issues.

Please let me know, should you encounter any other High Sierra-related issues.


Labels: , ,

Thursday, August 17, 2017

Remote Control

I've recently mentioned that starting with beaTunes 5.0.3 there is a mechanism that allows limited remote control of beaTunes from another process. This mechanism is pretty straight forward:

  1. Start beaTunes
  2. Locate the beaTunes5rc executable
  3. Run beaTunes5rc SOME.ACTION.ID

Let's assume you're on macOS and have installed beaTunes in the regular /Applications folder. Then beaTunes5rc is located at /Applications/ (on Windows, a similar executable is located in the installation directory). A handy action id to use is So to toggle play/pause from another program or the commandline/terminal, simply execute:


As return value you'll usually get a JSON document similar to this one:


In beaTunes most UI actions have an id and therefore can be triggered via this mechanism. A couple of these ids are listed in the API for RemoteControlService. However, the best way to find valid ids is to ask beaTunes5rc itself. To do so, simply call:

/Applications/ list

This will return a JSON-formatted list of valid ids, often along with short descriptions.

Additionally to a simple status message some actions may return useful information. To get information about the currently playing song, you can e.g. use audioplayer.track.

The mechanism can be used integrate beaTunes with 3rd party applications, like BeardedSpice. And if you'd like to see a beaTunes integration with BeardedSpice, feel free to upvote the corresponding pull request.

Labels: , ,

Tuesday, August 15, 2017

Update: beaTunes 5.0.4

Today's update addresses a couple of nuisances, like a too small speaker icon, issues with inline BPM editing, etc. Furthermore, it contains some of changes that are supposed to make things run more smoothly, if you happen to have a large library (at least 10,000 songs—see also this post).

Because it has been requested independently by multiple people, I have added a field containing the date of the last analysis. This should make it easier to selectively analyze songs, based on when you last analyzed them. Note that this field does not indicate which analysis task you ran—just that you analyzed something. Initially this fields is empty, because beaTunes did not keep track of when you analyzed your songs prior to version 5.0.4. Also new in this version is the description field. It's the equivalent of the ID3 subtitle frame. If you are using an iTunes-based collection, please be aware that this field is not automatically read from iTunes, because iTunes does not seem to export it to its iTunes Library.xml file. If you want to populate it for specific, selected files, you might want to use File -> Refresh from File.

As always, you can download the new version from the download section of the website.

Changes in 5.0.4

  • Fixed ignore Amazon album version solution.
  • Fixed "Play in [preferred player]" not showing up in context menu.
  • Fixed database update for very large BPM values.
  • Fixed inline BPM editor for tempi without relative salience.
  • Fixed potential NPE in artwork inspector solution.
  • Fixed potential infinite loop in BPM detection for very short files.
  • Added field description.
  • Added field for last analysis date.
  • Increased size of speaker icon for currently playing song.
  • Decreased time to analysis start (sending data to server).
  • Improved error reporting for elevation errors on Windows.
  • Improved performance.
  • Updated built-in Discogs database.
  • Updated to JRuby
  • Updated to Groovy 2.4.12-indy.
  • Updated to Hibernate 5.1.9.


Do you have more than 10,000 songs in your collection?

These days music collections are usually a couple of thousand songs big. For these kinds of libraries, beaTunes features something called automatic synchronization. Whenever you switch from beaTunes to another application and back, beaTunes will try to make sure that changes to your music files are automatically imported. This is very convenient and no big deal—unless of course you have a very large collection. And with very large I mean ten thousands of songs.

Synchronizing external changes with the built-in internal database can take a while, especially when your music resides on a slow external drive, e.g. a NAS. You'll notice that beaTunes becomes sluggish, you may see timeouts, and in its status bar beaTunes displays something about synchronizing. Fortunately, this annoying behavior can easily be avoided.

Simply open the general preferences and turn off Synchronize on window activation. Of course that means that external changes aren't automatically discovered by beaTunes anymore. But this issue can easily be solved as well. Whenever you believe, beaTunes has gotten out of sync with your files, simply run File -> Synchronize. This lets you synchronize your metadata at a time of your choosing, and only when it's really necessary.


Friday, July 28, 2017

Update: beaTunes 5.0.3

I have so admit: I'm pretty glad that today's update isn't trying to fix humongous bugs that popped up in the weeks since the original v5 release. Only one of the changes qualifies as a real bugfix (an infinite loop). Hopefully this means that you guys didn't find any major bugs and not that they just weren't reported.

So most changes are small improvements in how beaTunes behaves, e.g. on macOS you can now close the main window without shutting down the whole app.

The only "major" feature change is the new ability to remote control beaTunes. To do so, 5.0.3 comes with an executable named beaTunes5rc. On macOS, this is hidden in the app bundle under /Contents/MacOS. On Windows, it's in the installation directory. It understands arguments like (others) and thus allows you to trigger certain actions from other processes. As the remote control server opens a local socket, you might get a firewall warning when you first start beaTunes. If you don't intend to use the remote control, you should deny beaTunes the ability to accept incoming connections. In any case, beaTunes always checks where a connection is coming from and drops it, if it's not from your own machine. I will soon post more about the whole thing in a separate post.

As always, you can download the new version from the download section of the website.

Changes in 5.0.3

  • Fixed main window close behavior on macOS.
  • Fixed infinite analysis loop after filename change.
  • Changed genre rule so that identical spellings always hit top score.
  • Improved duplicates inspection to not show solutions that don't apply.
  • Improved handling of synchronization errors.
  • Added simple remote control mechanism.
  • Added ability to restore similar songs playlist after restart.


“There was joy inside my music library that I was unaware of until beaTunes showed it to me.”

In case you need to convince someone that beaTunes rocks—watch what tech journalist Andy Ihnatko has to say:


Friday, June 30, 2017

AcousticBrainz Plugin Available Now

If you haven't heard of AcousticBrainz yet, it's a fantastic project that "aims to crowd source acoustic information for all music in the world and to make it available to the public". Crowd source means that the project needs people like you and me to run a so-called feature extractor through their music libraries and submit the results to the AcousticBrainz database. There are multiple ways to do this—e.g. you can use the tools available on the AcousticBrainz website or the MusicBrainz Picard Tagger. And as of today, there is another way.

beaTunes 5 offers a new plugin that runs the feature extractor and submits the results for you. You can install it via the plugin preferences (see screenshot above, select plugin, click on the + button). Once installed, it's packaged as an analysis task, which means, that it shows up at the bottom of the available tasks whenever you run an analysis. Just check the box and beaTunes will run it.

Please note that running the extractor is not a quick thing. It does a lot of things very thoroughly, so analysis will take a long time. But you'll be doing a good thing! :-)

Thank you for your contribution. Among others, beaTunes uses AcousticBrainz data internally and indirectly benefits from your submissions.

The source code for the plugin is available on GitHub.

Labels: ,