beaTunes News

Thursday, January 29, 2015

The quickest way to scan through a new album

beaTunes4 logo

A little while ago somebody requested a scan feature in the forum. Something that would play 10-20s of the most important part of a song and then move on to the next one. Ideal for quickly listening through a bunch of newly purchased songs to get a first impression. Back then I decided to quickly code a small beaTlet in Groovy to make it happen.

Today, I made the hack from back then a little bit more official. By that I mean, that you can now install the Scan Playlist plugin via the Plugins pane of the beaTunes preferences (v4.0.17 or later required). Simply click on the Plus button to install, restart beaTunes and you will find a new Scan control in the Controls menu. Admittedly, the plugin is still somewhat of a hack—after the first use, it's recommended to restart beaTunes again so some settings can take effect (in essence, the cover panel is turned off). Also, once scanning has started, you must stop it by using the same menu item (Stop Scan). Just pausing or using any other controls for controlling playback won't stop the scanning.

I hope this is useful for you. Enjoy!

Labels:

Wednesday, January 28, 2015

beaTunes 4.0.16/17

beaTunes4 logo

beaTunes 4.0.16 was released today. As always, the release contains some more or less important fixes, improvements, and updates.

You can download the software from the download section of the website.

Most important changes in 4.0.16

  • Fixed NullPointerException on new library in windows file system root.
  • Fixed previous/next issue in "Get Info" panel.
  • Fixed potential infinite loop when syncing with Synology NAS.
  • Improved failure behavior on OutOfMemoryError.
  • Improved resume analysis on restart.
  • Improved AirPlay playback on OS X.
  • Improved (shortened) shut down time.
  • Updated to JRuby 1.7.18.
  • Updated to Groovy 2.3.9.

Update

4.0.16 for Windows unfortunately contains a bug that prevents beaTunes to access all kinds of audio files. This bug is fixed in 4.0.17 (available now). If you tried out 4.0.16 on Windows, please update asap to spare yourself some unnecessary frustration. Apologies for this glitch.

Labels:

Monday, January 26, 2015

Audio Analysis Options Explained

In part 1 of this series of articles, I explained the overarching idea of beaTunes, i.e. how analysis and inspection help you to build better playlists. Part 2 explained the different kinds of libraries. Today, I am going to concentrate on analysis options.

Analysis allows you to compute or retrieve additional, mostly non-textual information about your music—great examples are tempo and key. While both can be useful for DJing, tempo can be used for all kinds of applications including workout playlists for running, spinning, and aerobics. You can trigger analysis by selecting a couple of songs and then clicking on the Analyze button in the toolbar.

Using Online Resources

For most analysis tasks, beaTunes offers to simply download the desired value instead of computing it. If the value cannot be found, beaTunes falls back on its built-in algorithm. To trigger this download-first-behavior, you must check the box Use online resources in the analysis options dialog—that's the dialog that pops up, when you click on Analyze (see screenshot below).

Now, should you check that box or not?

Let's take the BPM analysis as an example. While accuracy differs depending on genre, overall state-of-the-art BPM analysis is currently roughly 74% accurate—94%, if you are willing to tolerate x2 and x0.5 errors. This so called octave error is the biggest problem in automatic BPM detection. When downloading values from the database, you are downloading values computed or entered by other beaTunes users. Doing so, you give up any control over the BPM range (or octave) as well as the used algorithm. This is not all bad—the database uses some fancy heuristics to ignore bad values and attempts to pick the "right" ones. But the fact remains: you give up control over the largest error source. There is no way to increase the octave accuracy via tweaks. Plus, you cannot use this feature when you are offline. And when you're online, analysis speed depends on your Internet connection's bandwidth and the general load on the database server.

If you decide not to use online resources, you can force beaTunes to calculate a BPM value in a certain range, e.g. 80-160 BPM. Assuming you know what general tempo your music is in, this can help you to avoid the octave error. Additionally, you get to choose which algorithm beaTunes will use (OnsetPeak is the more modern algorithm). And if you don't use online services for any task, analysis speed only depends on your personal hardware and some settings. More about those later.

In the end, you might want to use online resources, if computing values locally is too slow and you don't care much about tweaking the algorithm. But if you have lots of local processing power, fast disks, and like to stay in control, not using the online database may be the better choice.

Computational Effort

Regarding online lookup, pretty much the same rules apply to the other computation tasks—namely segmentation, color, key, replay gain, and silence detection. It's worth noting though, that some of these require much more effort than others (see Table 1). Assuming a steady beat, beaTunes does not need to look at the whole file when analyzing just for BPM. Automatic segmentation on the other hand, requires beaTunes to read the whole file and do some hefty computations. Replay gain calculation also dictates that the whole file must be decoded and analyzed. And in the case of album replay gain, multiple files have to be read. So when you enable those analysis tasks and need results quickly for thousands of songs, think about what you really want: Each checked task adds more analysis time.

TaskFile PartComputational Effort
BPMsmalllow
Colorsmalllow
Keymedium/largelow
Silencewholelow
Track ReplayGainwholelow
Segmentationwholehigh
Album ReplayGainmultiple wholelow
Table 1: Disk IO and effort of computational analysis tasks

Keep in mind that analysis speed is bound by two factors: disk IO and processing power (Table 1). For disk IO the worst case is a music collection on a slow external device that's connected via a slow interface, e.g. a slow spinning disk connected via USB 2 or an old wireless network. So while a NAS is very convenient for your home entertainment system, for analysis it's not the greatest idea. The best case is currently a fast internal SSD. And if you must use an external drive, try to connect it via USB 3—it's substantially faster than its predecessor.

Last but not least, other, non-computational tasks—like missing metadata and Last.fm tag import—always depend on an online service, no matter what analysis options you use. This means that analysis speed is limited by your network bandwidth, server load, and possible throttling dictated by third party terms of service. Last.fm for example requires, that "You will not make more than 5 requests per originating IP address per second, averaged over a 5 minute period, without prior written consent" (Terms of Service §4.4).

Global Settings

Remember the settings I mentioned earlier? There are two of them that can make analysis slower or faster. In the beaTunes preferences, under the Analysis tab, you can set the number of parallel tasks. Typically, two or three parallel tasks are recommended. You can increase this number (restart required), but—because of Amdahl's law and bottlenecks like disk IO—this does not necessarily mean that beaTunes will process your files any faster. It will mean however, that beaTunes' memory usage will increase. And memory is the other setting you can change. Usually, modifying this parameter manually is not necessary—beaTunes should prompt you for an increase, if it needs one. Should you nevertheless decide you want to grant beaTunes more memory, please see this page. Specifically, large libraries may benefit from using a little more memory. If you are unsure about your current memory settings, just open the About dialog—it shows the configured min and max memory heap sizes.

Conclusion

I hope this article shed some light on the most important analysis options and their performance implications, and helps you make smart decisions about what box to check the next time you use beaTunes for audio analysis. If you have further questions, please comment below or start a discussion in the support forum.



This article is part of a small series under the heading "HowDoesItAllWork".

  • Part 1 explains the overarching idea behind beaTunes.
  • Part 2 explains what kind of libraries beaTunes supports.

Labels: , , , ,

Tuesday, January 20, 2015

Different Libraries for different Needs

In part 1 of this series of articles, I explained the overarching idea of beaTunes, i.e. how analysis and inspection help you to build better playlists. Today, I am going to concentrate on how to get started with beaTunes libraries.

Although beaTunes is also a music player and audio analysis tool, to a large degree, it is a music library management software. Therefore, when you first start beaTunes, it asks you what kind of library you would like to create:

You can choose between a folder- and an iTunes-based library. No worries, this decision isn't final—you can add other libraries later. But to help you make the right choice, let me explain how these two libraries differ.

Folder-Based Libraries

If you don't use iTunes, folder-based libraries are the right choice for you. To create one, point beaTunes to a base-folder in your file system. This can be any folder—local, remote, external—it does not matter, as long as it's visible in your file system. Usually it makes sense to choose the Music folder, but you're certainly not limited to it. Tip for OS X users: If you cannot find your external drive, try using the keyboard shortcut Command(⌘)-Shift-G and enter /Volumes. That's where external drives are usually mounted. When you have defined the base-folder, beaTunes will start adding all audio files in that folder and its sub-folders to its database. While doing so, it also imports all ID3 and other tags it can find. The process of reading external data is called Synchronization. More about that later.

Once your files are scanned, beaTunes presents your library to you and you are ready to go. Starting an analysis or an inspection is a good idea. All changes will be written directly to your files.

A common question that comes up is, "how do I add files to the library"? The easiest way is to add new sub-folders with audio files to your base-folder and then choose Synchronize from the File menu. Alternatively, you can also simply drag files into the beaTunes Music list. If the file is not already contained in the base-folder, a copy within in the base-folder will be created and added to the library.

iTunes-Based Libraries

If you are using iTunes and expect BPM values calculated by beaTunes to show up immediately, you should create an iTunes-based library. When you do so, beaTunes will add all files you have in iTunes to its database and also scan them for additional ID3 and other tags. But more importantly, whenever you change something in beaTunes, it tells iTunes that something has changed or even asks iTunes to perform the change. This ensures that you see changes in iTunes right away without having to play a file. However, it does not mean that other programs also see changes immediately. Software like Traktor typically has to re-scan files. Also, when in iTunes-library-mode, beaTunes by default does not write certain values to your files. If you are interested in embedding non-iTunes fields like key or color into your files, make sure to check the box Embed non-iTunes fields into audio files in the general preferences before you start the analysis. This can also turn out to be useful, should beaTunes' internal database ever get corrupted, as it can then be completely restored from your files.

Synchronization

The biggest problem in library management is dealing with external changes. If you for example mass rename all your files, beaTunes will have great trouble connecting the files under their new name to their corresponding database entry. Removing or adding songs from your iTunes library may also pose problems. This is why synchronization is needed. It's basically an attempt to synchronize the internal beaTunes database with your actual library—be it folder- or iTunes-based. To achieve this, beaTunes supports two kinds of synchronization: Automatic on window activation and manual.

Automatic synchronization re-scans your library every time you switch from another program back to beaTunes. Naturally, it does not always re-read the whole library, but pays attention to certain changes. Nevertheless, this can slow down the software quite a bit. If you find that beaTunes spends a lot of time on this, it's better to turn it off. Again, this can be done in the general preferences under Synchronize on window activation. With automatic synchronization turned off, data may get out of sync at some point. Then it's time for a manual synchronization. This can easily be done with the corresponding item in the File menu. Tip: If you don't want beaTunes to work on outdated data, synchronize every time before you run an inspection.

Creating a new Library

If you realize after a while that you need to switch between a folder-based and an iTunes-based library or simply want to use a different base-folder, it's time to create a new library. The easiest way to do so, is to open the File menu and select New Library.... beaTunes will ask you which kind of library you would like to create and either prompt you for a folder name or the iTunes Music Library.xml file you want to base your library on. To switch back to another library, simply open the general preferences and choose another library from the drop down list.

Conclusion

I hope this article explained how the two kinds of libraries differ. Please comment below, if you have any questions or start a discussion in the help forum.

Thank you.



This article is part of a small series under the heading "HowDoesItAllWork".

  • Part 1 explains the overarching idea behind beaTunes.
  • Part 3 takes a closer look at analysis and analysis options.

Labels: ,

Tuesday, January 13, 2015

Using clean Metadata to build great Playlists

Over the years many different people tried beaTunes. Aerobics and spinning instructors love it to prepare their classes, marathon runners to keep their pace, audiophiles to fix their tags, and DJs to detect key and BPM for their next set. But what about the tagline: Build better playlists? Why this tagline? What's the original idea?

I love to explain this.

One of beaTunes' most popular features is audio analysis. That's really just a fancy phrase for saying, the program manages somehow to measure the tempo in BPM and find out the musical key. Perhaps some other stuff like ReplayGain or automatic segmentation. The idea here is to find out something about the music that's not already in widely available textual tags. Something that helps you to see right away that there is a similarity between two audio pieces. Tempo and key are pretty good candidates, so is beaTunes' color (more or less a measure of dominant frequency ranges). In essence, via analysis, beaTunes tries to better describe your music.

The next thing beaTunes is loved for is inspection. That's what I call the systematic and automatic inspection of mostly textual tags (e.g. ID3 tags) for consistency. Is the name for a given artist always spelled the same way? Does s/he always sing in the same language? Are his/her songs in the same genre? Answers to these questions aren't easily given. But beaTunes supports you in finding issues and making decisions in order to clean up your tags. That's right, it's all about improving the available metadata, making it more consistent.

Both calculating new metadata via analysis and improving existing metadata through inspection serve one ultimate purpose: Creating playlists that rely on good metadata.

beaTunes' MatchList feature allows you to formulate rules (in the application preferences), that determine whether two songs are similar or match. If you want to create a playlist that has to have a fairly constant tempo, you can put emphasis on the "similar BPM" rule. If the same language is important to you, again, just put emphasis on the corresponding rule. To create a MatchList, simply select a template song and click on the "Create MatchList" button. beaTunes will do the rest for you.

Of course, there are other ways of building great playlists. But having additional and clean metadata is definitely helpful. And this is where beaTunes excels. This is what beaTunes was originally built for.



This article is part of a small series under the heading "HowDoesItAllWork".

  • Part 2 explains what kind of libraries beaTunes supports.
  • Part 3 takes a closer look at analysis and analysis options.

Labels: , ,

Tuesday, January 6, 2015

beaTunes 4.0.15: Update recommended

beaTunes4 logo

I'm happy to announce that beaTunes 4.0.15 was released today. This update contains some important fixes, especially for people who use folder-based collections or choose to embed non-iTunes meta data. Therefore I recommend updating asap.

You can download the software from the download section of the website.

Most important changes in 4.0.15

  • Fixed possible mp3 file corruption during analysis.
  • Fixed index confusion upon deletion from library.
  • Improved import of existing mood tags.
  • Improved sort order of key column.
  • Improved support for "Open With" from file system.
  • Added guard against StackoverFlow stemming from large in() clause.

Labels:

Wednesday, December 17, 2014

beaTunes 4.0.14

beaTunes4 logo

beaTunes 4.0.14 is out. This is mostly a maintenance release—no big changes.

You can download the software from the download section of the website.

Most important changes in 4.0.14

  • Improved play behavior with open match table.
  • Improved support for ID3v1.
  • Improved folder-based sync on mass changes.
  • Added explicit symlink handling for folder-based libraries.
  • Added ability to upload logs.

Labels: