beaTunes News

Monday, August 23, 2021

How can I find the BPM for DRM-encrypted Apple Music songs?

With its streaming service Apple Music unfortunately re-introduced Digital Rights Management (DRM), which makes it very hard for third party apps to decrypt and analyze downloaded music files. But did you know there is a way around decrypting and decoding?

While beaTunes cannot access the raw audio for a thorough content analysis, it can access the track's metadata, i.e. its artist, album, title, and length. This is often enough information to look up BPM values in beaTunes' central database, which have been uploaded by other beaTunes users.

beaTunes Analysis Options dialog

So to download BPM values for your Apple Music tracks, just follow these simple steps:

  • In beaTunes, select the tracks you want BPM values for.
  • Open the File menu and choose Analyze.
  • In the Analysis Options dialog, enable only the Estimate BPM option.
  • Ensure that Use online resources is turned on.
  • Then start downloading BPM values by clicking on Analyze.

Note that since this operation depends on what other users have uploaded and whether the metadata matching is successful, your mileage may vary: some tracks may not be in the database yet, others may have inaccurate BPM values. That said, it certainly beats having no BPM values at all.

Labels: , ,

Tuesday, October 22, 2019

Music App: Forcing Synchronization

Pretty much since forever, beaTunes is capable of synchronizing with either a folder-based or an iTunes/Music.app-based music collection. In both cases beaTunes synchronizes its database with what is found either in music files or the iTunes/Music-database—like a smart import (changes originating from beaTunes, on the other hand, are typically written right away). You can imagine that importing whole libraries takes a very long time, especially when they reside on an external or network drive (not recommended). Therefore beaTunes employs some tricks to speed up the process. For the old iTunes XML files, for example, it does a smart diff, not unlike the Unix tool diff. Thus beaTunes is able to detect changes and only import the relevant parts. For folder-based libraries, beaTunes simply looks at the last modification dates of your audio files. If the file has been changed recently, its metadata is re-read.

Now, with macOS 10.15 and the new Music app, doing a diff is not an option anymore and checking the file system is inefficient. Therefore beaTunes uses a last-modification/hash-based approach, which works really well. It has only one downside: Apple hasn't updated the ITLibrary framework for years. This is the Apple API that must be used to access the Music library. You simply won't find newer properties like loved, movement, or work. This means that just using the recommended Apple API certain changes cannot be detected. However, those properties are available via AppleScript (Apple did a better job here). And this is where forcing synchronization comes into play. When you manually initiate synchronization via the File menu, and beaTunes 5.2 cannot detect any changes, you are given the option to force synchronization (see screenshot), i.e., to ignore any shortcuts, previous knowledge etc., and re-read all available data. This makes sure that all your play counts, loved flags, etc. reflect the status in the Music app. As you can imagine, the process takes a little longer, so you might not want to do this all the time, but only every now and then.

Labels: , , ,

Thursday, October 17, 2019

Shrink your Database

For certain features like acoustic duplicate detection or lookup of metadata for files with no metadata whatsoever, audio fingerprints are a great feature. However, when you've fixed all your metadata and are not hunting for duplicates, they take up a lot of space in beaTunes' internal database. That's why beaTunes 5.2.0 introduced a new feature that I believe is very handy, if you have a large library. It allows you to quickly delete all fingerprints from the database, which can substantially shrink the database file. Why is this a good thing? The more the database grows, the more disk I/O may happen, and the slower everything becomes. So if beaTunes feels sluggish, you have a large library, and you don't need those fingerprints anymore—just get rid of them, by opening the Tools menu and choosing Delete Fingerprints. This will delete all fingerprints currently in your internal beaTunes database. Note that for this to take full effect, you will need to restart beaTunes, as database compression always happens on shutdown. Depending on the size of your database, it might even be beneficial to restart beaTunes a couple of times.

Labels:

Wednesday, April 18, 2018

Show Key As If... Harmonic Mixing Without Time-Scale Modification

One of the unique features of beaTunes 5 is the ability to show song keys as if the song was played at a different tempo. “World Sick” by Broken Social Scene is usually in C Major (1d) with a tempo of 118 BPM. If we played the song a bit faster using a DJ software like Traktor, say at 125 BPM, what key would it be in? The answer is D♭ Major (8d). beaTunes can show you this.

But why would you want to know this? How is this useful? If you're DJing using Harmonic Mixing, you need to know what key songs are in to create smooth transitions. Obviously the transition becomes even smoother, if the tempo also matches. There are three ways to achieve this:

  1. You only use songs that are in the desired key and have a matching tempo.
  2. You pick some song you really like and adjust pitch (key) and tempo using your DJ software.
  3. You pick a song that is in the target key when played with the matching tempo.
Using option 1) you will soon realize that it is pretty hard to find just the right song. Option 2) works well digitally, but is problematic when you DJ with vinyl. Also, even though time-scaling algorithms are really good these days, they sometimes introduce a slightly metallic sound. Especially transients aren't easy to slow down (see for example here). Lastly, option 3) avoids some of the disadvantages of time-scaling algorithms, but poses a new challenge: how can you find songs that are in a certain key when played at a given tempo? And that's exactly the problem that beaTunes 5 solves.

To unlock this feature you obviously first need to analyze your music, so that both tempo and key are known. Then simply click on the little Kebab menu at the right edge of the main table's header.

Clicking on the Kebab menu opens the table's View Options dialog. At its bottom you can turn on SYNC, the feature that cause beaTunes to show song keys, as if they were played with a different tempo.

Once SYNC is on, beaTunes displays the shifted key, i.e. the key a song would be in when played at a certain target tempo.

Being able to see the key in this modified way is a great tool for DJs who don't like to use the time-scale modification of their DJ software, but still want to mix harmonically. To make this even easier, the SYNC functionality is also built into beaTunes' Matching Songs pane. Once SYNC is enabled in the main pane, the similar BPM rule matches songs that have the target tempo.

Additionally, you can also configure the matching songs table to display keys as if played at the tempo of the song in the main table. To do so, just click on its SYNC button. Isn't this super cool?! I believe this feature is indispensable when mixing harmonically without time-scale modification.

Enjoy!

PS: To avoid confusion and disappointment, beaTunes cannot play a song at any other tempo than the original tempo. Time-scaling or pitch-shifting are not supported. You will need a proper DJ playback software for that.

Labels: , , ,

Sunday, February 11, 2018

From the trenches: Import play counts from Traktor

Here comes another little beaTlet that might prove handy for NI Traktor users: ImportTraktorDatesAndCounts. As might be obvious from the title, it allows you to import Traktor's play counts and last played dates into beaTunes (and thus iTunes, if you are using an iTunes-based collection). The idea is that the data may help with playlist creation. You can find some details about the beaTlet in this discussion. The latest version can be found on GitHub.

Labels: , , ,

Saturday, January 27, 2018

From the trenches: remove leading/trailing whitespace

It's not an official inspection, but a good example for how some things can be done quick & dirty with the plugin API: a little RemoveWhitespace beaTlet. Check out this help forum post for details. The source code can also be found in the GitHub repo under groovy.

Have a great weekend!

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/beaTunes5.app/Contents/MacOS/beaTunes5rc (on Windows, a similar executable is located in the installation directory). A handy action id to use is audioplayer.pause.play. So to toggle play/pause from another program or the commandline/terminal, simply execute:

/Applications/beaTunes5.app/Contents/MacOS/beaTunes5rc audioplayer.pause.play

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

{"request":"audioplayer.pause.play","status":"ok"}

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/beaTunes5.app/Contents/MacOS/beaTunes5rc 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

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.

Labels:

Friday, June 23, 2017

Scan Mode

Back in 2015 I wrote a little plugin for beaTunes 4 that helped to quickly scan through a list of songs. For beaTunes 5 this plugin was promoted to a built-in feature. To activate it, just click on that little barcode button right below the elapsed time counter.

What happens when you activate scan-mode? It puts the player in a mode, in which it only plays a short part of each song before continuing with the next one. Which song part is played depends on the specific scan mode you choose. The three available options are: Beginning, third and prominent. They describe the start point for playback. Beginning and third are pretty self-explanatory. Prominent means that beaTunes will choose a segment of each track for you based on its automatic segmentation. Depending on the kind of music, this may work better or worse, i.e. YMMV.

But in any case, this feature allows you to sit back and relax while beaTunes gives you an impression of a playlist of your choice. BTW: The length of this short preview is configurable in the playback preferences.

Labels: ,

Sunday, June 18, 2017

Re-Ordering Playlists by Property

Creating a playlist can be broken down in a two-step process: 1) selecting tracks, and 2) creating a compelling order. beaTunes supports selection through the matching song table below the main table. beaTunes 4 and earlier helped with ordering by letting the user apply a match ruleset, even on already existing list.

beaTunes 5 now offers an additional way of ordering: Order by property.

In it's simplest form this is like sorting by clicking on a table column header. The difference is that re-ordering is permanent, while sorting is just temporary. To re-order a list, so that all songs are ordered by their BPM values, just select a song in the list, right-click, and select Order Playlist by... -> Property from the context menu. Then select the property BPM.

Of course that's not all you can do. Obviously a choice between ascending and descending values is useful. And what about first ascending and then descending? No problem. Or ascending multiple times? That's what the Periods control is for. It lets you repeat the chosen pattern. Naturally, BPM is not the only property you can use for this. Key, mood and others are possible as well. Whenever the chosen property is circular in nature (mood, key), the selected song is taken as a starting point for a clockwise or counter-clockwise order. This is useful for harmonic mixing. Another application is workout playlists, when you want to increase intensity one or multiple times (e.g. spinning/indoor cycling).

Of course, after re-ordering like this, you can still fine-tune manually via drag and drop. In any case: I hope you enjoy this new feature.

Labels: , , , ,

Tuesday, June 13, 2017

Dealing with Analysis Errors

When analyzing tracks with beaTunes, every now and then, things don't go quite as expected. beaTunes 5 improved, how you can deal with such analysis failures. Whenever you see an error message in the Task Queue's message panel, you can right-click it to find some options. Often beaTunes will offer just a way to navigate to the problematic song. But in some cases real solutions are offered.

A good example is an iCloud song. As shown in the screenshot, beaTunes will offer to download it for you, as it cannot be analyzed while in the cloud (iCloud download only available on macOS).

Labels: , ,

Wednesday, June 7, 2017

Fixing Media Kind: It's a bird! It's a plane! No, it's a podcast!

iTunes had the ability to organize your media files into broad categories (music, movies, podcasts, audiobooks, ...) for a long time. This is especially significant for people who store audiobooks in iTunes and expect to listen to them on their iPhone using the iBooks app. That's only possible when the files are correctly categorized as "audiobook". Unfortunately, adjusting the media kind (that's what iTunes calls those categories) was only possible manually through the user interface. With version 12.4 Apple finally remedied this for macOS and the property was exposed via AppleScript. This means that software like beaTunes can manipulate it and move files into the correct category. A task made for a beaTunes inspection.

Now how would one know, whether a file is in the wrong category? The route I took for beaTunes 5 is to simply look at the genre label. If it says podcast in that label, chances are it's not a TV show. The same is true for audiobooks. The corresponding inspection is therefore aptly named "Genre does not match media kind". It lets you easily fix miscategorizations and thus makes it much easier to listen to your favorite audiobook while on the road. By the way, proper tracknumbers and identical album/artist values make it possible to group chapters into a book. Obviously, beaTunes can help here, too.

As mentioned above, programmatically manipulating the media kind on macOS happens via AppleScript. The Windows equivalent for this used to be the iTunes COM API. Unfortunately, Apple has abandoned it years ago. This is why beaTunes for Windows cannot offer the same functionality as beaTunes for macOS. On Windows, beaTunes offers proper media kind support only for folder-based libraries, where iTunes does not matter. It sure is disappointing, but it seems that Apple views iTunes for Windows as a legacy system, that's dragged along, because it cannot let it die for fear of public outcry. Which is ironic, given that so many people have a love/hate relationship with iTunes.

Labels: , , , , , , , ,

Monday, June 5, 2017

The little things: smart mass-editing

The upcoming beaTunes 5 contains a lot of little changes that are too many to talk about in great detail. Nevertheless, I'd like to point out one of these little things. Like most other music library management apps, beaTunes lets you edit properties like the album or artist name inline, i.e. in the main table view. When you do so in version 5, beaTunes will not just write the desired edit, but also check, if it could apply the same change to other songs as well. After all, you hardly ever want to change an album name for a single song—you want to change it for all songs in an album. So if it makes sense to make the same change for other songs, beaTunes asks you, what you'd like to do.

Similar checks are in place for the fields album artist, composer, compilation, sort artist, genre, etc.

I bet this will make your life a little bit easier.

Labels:

Tuesday, April 25, 2017

Importing Third Party Key Values

beaTunes4 logo

As you probably know, beaTunes plays really well with iTunes. Not that it needs iTunes, there is the folder-based mode, but it's just really comfy with iTunes. Like a good buddy. beaTunes also assumes that it's the only game in town when it comes to Key detection. Why should you trust anybody else to write those to your precious files? Oh—you do? Well...

Here's the problem. When using an iTunes-based library, beaTunes only reads your files once: When you create the library. Once that is done, it does never again try to read the files' Key field. And why should it? To this date, iTunes hasn't even acknowledged that there is such a thing, much less allowed you to edit it. All information coming from iTunes is contained in the iTunes Library.xml file.

But what if there is some third player, that allows Key editing and you want to see those edits in beaTunes?

You basically have two options:

  1. Use a folder-based library.
  2. Force beaTunes somehow to re-read your files.
Option 1 is pretty straight forward and works well, if your third party editor updates the last-modified timestamp. But what if you don't want to loose the tight iTunes integration? Then you might want to use the little beaTlet RefreshFromFileAction.groovy. Just install the file RefreshFromFileAction.groovy into your plugin folder and restart beaTunes. After the restart, you will find a new menu item under File called Refresh from File. To use it, select a couple of files and click it. Things like Key will be imported from the file. Note that existing values will be overwritten without warning. So be careful!

Curious? Want to find out more about writing plugins/beaTlets for beaTunes? Then check out the plugin intro page. There are also a bunch of examples on GitHub.

Oh and by the way, I've released a minor update yesterday. Most prominently, I have finally found a way to get rid of that ugly bold font, some of you may have seen on Windows. The (to me very unexpected) solution was to set the system property -Dfile.encoding=UTF-8. After all these years, programming is still full of surprises...

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

Changes in 4.6.14

  • Fixed bold default font issue on Windows.
  • Fixed permission issue in Windows installer.
  • Fixed NPE caused by artwork inspector.
  • Enforce uppercase ReplayGain tags when writing.
  • Fallback to lowercase ReplayGain tags when reading.

Labels: , , , ,

Wednesday, December 21, 2016

Update: AcousticBrainz Mood Plugin

beaTunes4 logo

For the last 1.5 years, lots of you have taken advantage of the AcousticBrainz plugin for beaTunes. I've finally found the time to move the source code to GitHub, so that it can be found in the same repository as the other sample plugins.

While doing so, I added two features:

  1. You can now choose, whether the plugin should replace existing mood values or not.
  2. You can ask the plugin to embed mood attributes in the id3 v2.4 TMOO tag.

Please note, that to retrieve mood values from AcousticBrainz, MusicBrainz ids are required. beaTunes makes an effort to find those, but may not always succeed. Also, keep in mind, that the values AcousticBrainz offers are based on a statistical model. In other words, the accuracy may vary.

You can install/update the plugin via beaTunes' Plugin preferences. Enjoy.

Labels: , , , ,

Thursday, April 28, 2016

How to use multiple folders in a single, folder-based collection

beaTunes4 logo

A question that comes up every now and then is how to use multiple base-folders in a folder-based library. Folder-based libraries are those, that have nothing to do with iTunes, but basically contain all songs in a given base folder (more info). By default, folder-based libraries are based on a single folder and the beaTunes user interface does not let you add other folders. Despite this, beaTunes 4 is capable of basing folder-based libraries on more than one folder—but it requires a tiny bit of hacking.

beaTunes stores information about music collections in a file called preferences2.xml, which is stored in the folder ~/Library/Application Support/beaTunes/ on OS X and in %LocalAppData%\tagtraum industries\beaTunes\ on Windows. Unfortunately, the folders are a little hard to find on both operating systems. On OS X, ~/Library/ is hidden—use Go -> Go to Folder... in Finder to find it. On Windows, simply copy the mentioned path and paste it into the File Explorer's path field.

Before you open the file, please make sure that beaTunes is not running. Then take a look with your favorite text editor, e.g. Atom. If you're using multiple, folder-based libraries, you should see something like this:

<?xml version="1.0" encoding="UTF-8"?>
<preferences>
    <components>
        <component id="beatunes">
            <file-collection persistentid="7DB1A93611184EB2" selected="true" name="FileSystem">
                <root>/Users/demo_user/folder_a</root>
            </file-collection>
            <file-collection persistentid="7BAF626404544925" name="FileSystem">
                <root>/Users/demo_user/folder_b</root>
            </file-collection>
            [...]
        </component>
        [...]
    </components>
</preferences>

In essence, this describes two folder-based libraries: One based on folder_a and one on folder_b. All you need to do to combine both libraries into one, is to move the <root>-element describing folder_b to the <file-collection>-element containing folder_a. Once that is done, you can remove the now empty <file-collection>-element for folder_b. The result looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<preferences>
    <components>
        <component id="beatunes">
            <file-collection persistentid="7DB1A93611184EB2" selected="true" name="FileSystem">
                <root>/Users/demo_user/folder_a</root>
                <root>/Users/demo_user/folder_b</root>
            </file-collection>
            [...]
        </component>
        [...]
    </components>
</preferences>

Now save the preferences2.xml file, start beaTunes and select the library we just modified. To identify which one it is, open the beaTunes general preferences and open the combo box that lists the existing libraries. When hovering over the items with the mouse, beaTunes will show all root-folders for each library in the tooltip (screenshot). Once the right library is selected, you may need to synchronize via the File menu, if beaTunes isn't doing it automatically.

The example above assumes that you already have multiple folder-based libraries and shows you how to merge them into one. However, multiple libraries are not strictly necessary to add another base-folder to a library. In fact, you can simply add a new <root>-element to an existing <file-collection>, save the file and then start beaTunes (again: don't edit the file while beaTunes is running!). The two things you have to pay attention to though, are overlaps and loops. You should never add a folder to the file collection that is in some form a sub-folder of an already existing <root>-element. Also, you should never create loops in your directory structure, e.g. via symbolic links.

I hope this helps some folks with sprawling libraries. If you have any questions, please don't hesitate to ask.

Labels:

Friday, December 11, 2015

beaTunes for ballroom dancers: Displaying MPM

Often beaTunes is perceived as a tool strictly for EDM DJs. From years of support work, I can tell you that that is definitely not the case. Yes, EDM DJs like beaTunes. But so do runners, spinning instructors, and last but not least dance teachers.

For dance teachers, BPM (beats per minute) is a very useful value to determine the tempo of a song. However, even more useful is MPM (measures per minute). Measures or bars per minute are the de facto indicator for tempo in the ballroom world. How many beats are in a measure is determined by the time signature or meter. Samba, Polka, and Paso Doble usually contain 2 beats per measure, Waltz 3 beats, and most other dances 4.

It's a little known fact that beaTunes has been offering an MPM column in its main table for many years. To enable it, just right-click on the table header and select MPM in the drop down menu. Alternatively, select a song, open the View menu and select View Options. A dialog box will then allow you to customize shown columns via drag and drop. Unfortunately, making the column visible does not fill it. But don't despair—in most cases that's easily done, as the MPM value is automatically calculated from the BPM value—as long as the Time Signature is set.

First, to make the signature value visible, make sure to enable its column. This is done in exactly the same way as the MPM column. Then let beaTunes compute the BPM values (using the OnsetPeak algorithm). In this step, beaTunes may already fill in some Time Signature values—but be warned, the algorithm used in beaTunes 4.x isn't very accurate. You're probably much better off setting the time signature manually. To do so, click on the table header Genre to sort your library by genre. Then select e.g. all Waltz tracks and open the Get Info dialog (e.g. via right-click). Go to the BPM & Co tab and change the value to ¾-time (see screenshot, please forgive me the AC/DC cover in there…). Then continue with other genres.

That's it.

Hopefully, this helps you taking advantage of beaTunes even more, when preparing your next ballroom dance class or competition.

Update

Starting with beaTunes 4.5.8, time signature detection has been improved. See here for details.

Labels: , , , , ,

Friday, September 25, 2015

This Open Key thing is great, but can I have parentheses, please?

beaTunes 4 introduced the capability to easily copy key values to the comment field during analysis. Pretty handy, as it allows easy access to key values from applications that don't really support keys (e.g. iTunes). Recently, I was told, that this works really well, but it would be even better to have parentheses around the Open Key code to better distinguish 2d from 12d when searching.

Thanks to the plugin API, there was a super simple solution to this: Just write a custom Key Text Renderer. The two needed classes, Key and KeyTextRenderer, are documented here and here.

And this is what the Groovy code looks like:

import com.tagtraum.audiokern.key.Key
import com.tagtraum.beatunes.KeyTextRenderer

class BracedOpenKey implements KeyTextRenderer {

    /**
     * Create a textual representation for a Key object.
     *
     * @param key key
     * @return textual representation
     */
    def String toKeyString(Key key) {
        String openKeyCode = key.getOpenKeyCode()
        // create the final string
        return "($openKeyCode)"    //  <- this is where we add the parentheses!
    }

    /**
     * Create a tooltip representation for a key object.
     * This may also include html-tags.
     *
     * @param key key
     * @return tooltip representation
     */
    def String toToolTip(Key key) {
        toKeyString(key)
    }

    /**
     * Short name of this renderer. To be used in the user interface.
     *
     * @return name
     */
    def String getName() {
        "Braced OpenKey"
    }

}

To install, just save it in a file called BracedOpenKey.groovy and place it in the plugins folder. Upon restart, it will show up in the display format preferences and the export-as-comment option (see screenshot above).

Labels: , , ,

Tuesday, September 22, 2015

Introducing Quick-Search

beaTunes4 logo

With increasing collection sizes, navigating the library becomes more and more difficult. Of course you can filter and search, but quickly going to an album or artist with just a couple of keystrokes is probably the easiest way to navigate. Starting with beaTunes 4.5.3, this is now possible.

Here's how:

For quick-search to work, you need to sort your library by one of the textual columns, e.g. Artist or Album. Make sure the table has the keyboard focus and then start typing the first couple of letters of what you are searching for. In an overlay, beaTunes will show those letters and—once you stop typing—scroll to the next matching row.

As mentioned above, this works for pretty much all textual fields and one additional column: BPM. So when the table is sorted by BPM, you can simply type 100 and beaTunes will scroll to the first song with 100 beats per minute.

There are a couple of other improvements and fixes. Details can be found below. As always, you can download the update from the download section of the website.

Most important changes in 4.5.3

  • Fixed exception after clearing ignored issues.
  • Fixed HiDPI drag and drop images.
  • Fixed error in bpm range coercion arithmetic.
  • Fixed exclusion of audiobooks/iTunesU/home videos from analysis.
  • Added current heap memory use info to About dialog.
  • Added quick-search popup for sorted playlists.
  • Added visual indicator for computed ratings.
  • Improved sync of folder-based-library.
  • Improved built-in Help.
  • Improved AppleScript/COM error reporting.
  • Improved handling of digital booklets.
  • Improved different album artist inspection.

Labels: , ,

Wednesday, September 9, 2015

How to enable the BPM column in iTunes 12

beaTunes4 logo

iTunes 12.2 with its fancy album views made it a lot harder for the average user to enable the Beats Per Minute column. Here's a quick, visual howto guide.

Labels: , ,