beaTunes News

Wednesday, April 20, 2016

If you are using 32-bit beaTunes 4.x on Windows, update now!

At the end of the last post, there was a little note saying something about Apple's QuickTime. Even though it was stuck to the end of the post, it was important. Important enough to justify these extra lines. The gist of it is: If you are using the 32-bit version of beaTunes 4.x, you should update to beaTunes 4.6 and uninstall QuickTime. Why? QuickTime for Windows has known security issues that Apple will not fix. And beaTunes 4.6 does not require QuickTime anymore.

Why is this only important for the 32-bit version of beaTunes? Apple has never ported QuickTime into the 64-bit world, which is why the 64-bit version of beaTunes has never been able to use it. Instead, beaTunes uses the operating system's media libraries combined with FFsampledSP (a library based on FFmpeg).

Labels: , ,

Tuesday, April 19, 2016

beaTunes 4.6: High-Resolution Display Support for Windows and Other Goodies

I'm proud to write that today beaTunes 4.6 will be available for download as a free update for existing beaTunes 4 customers. Probably the most important new feature is the much improved high-resolution display support for Windows (sometimes referred to as HD or 4k). Yay! No more squinting to read an artist's name! As Windows hardware has slowly caught up with Apple's early Retina offensive and the Windows OS has started to support HiDPI displays much better, it was definitely time for this step. What was holding me back, was Java 8's lack of HiDPI support for Windows. To this day, there is still plenty wrong with it, so I had to build a few workarounds. Still, if you're using Windows with a high-resolution display, you will eventually notice some left-over rough edges, e.g. slightly odd-looking file dialogs. Those are presented by the Java Runtime Environment and pretty impossible to fix without patching the runtime itself. Luckily, the Oracle Java team is working hard to bring better HiDPI support to Java 9 and hopefully backports some fixes in the process. It may just be a matter of time, until all the little things are resolved.

You may ask, why ship something that's not perfect? Well, in my humble opinion, before today's update beaTunes was mostly broken on Windows HiDPI displays. With today's release it's 99% fixed—offering 100% of its functionality. If you ask me, that's a much better state of affairs.

Besides the obvious user interface changes, a bunch of things under the hood were improved. Writes to the internal database are now coalesced. In essence that means that a song property change is not persisted right away, but with a short delay. If other properties of the same song are also changed during this delay, these multiple write operations are combined into a single one. Especially during analysis of many different properties (e.g. key, BPM, ...) this behavior helps to avoid unnecessary database operations and thus reduces overall analysis time.

JavaScript Support

As we're already talking technical stuff—there's good news for JavaScript hackers! beaTunes now officially supports JavaScript as plugin scripting language. You may remember that Groovy, Jython, and JRuby are already supported. JavaScript is now the fourth language. Because JavaScript uses prototypical and not class-based inheritance, plugins are created in a slightly different way. But thanks to the Nashorn extensions, it's relatively easy for your JavaScript code to interact with beaTunes. Examples can be found in the beaTlet tutorial as well as on GitHub. BTW: the shipped implementations for Groovy and JRuby have been updated.

Pretty much with every minor (not micro) beaTunes update, an inspector gets a little makeover. For beaTunes 4.6, the English capitalization rules received some well-deserved love. For those of you, who've never noticed its existence, this inspector only shows problems, if the song language is known (different language, different rules). Prior to inspection, you can let beaTunes determine song languages automatically via the corresponding analysis task. Results are more accurate, if the lyrics are available. To make a long story short—the inspector has been rewritten and the results are much better now.

Other Little Fixes

A couple of other minor things have been fixed or improved. E.g. the Get Info dialog now shows a little icon to indicate whether a song has already been fingerprinted. And the visible column dialog finally contains proper descriptions for the columns Issue, DRM, and Enabled.

Specifically for Windows, there are two other important items:

  1. The Windows installer is now properly signed (I know, this should have happened a long time ago).
  2. The 32-bit version does not depend on Apple's QuickTime anymore, which turned out to be a serious security risk.

I hope you enjoy this free update. As always, you can download it from the download section of the website.

Thank you.

Most important changes in 4.6.0

  • Fixed relative salience error on 0 BPM.
  • Fixed some English capitalization rules.
  • Fixed missing artist in Album Info pane.
  • Fixed writing of last played date on Windows.
  • Fixed sorting by Album Replay Gain.
  • Fixed DNS lookup during database ops (caused by URL.equals()).
  • Improved performance, via coalesced database writes (reduced disk IO).
  • Improved some analysis error messages.
  • Improved "Analyze New"-behavior: Use last sync as reference point.
  • Improved "Album Info" to more often show actually useful info.
  • Improved HiDPI support for Windows.
  • Added fingerprint icon to Get Info pane.
  • Added support for JavaScript beaTlets.
  • Added signature to Windows installer.
  • Added index column to visible columns popup.
  • Removed QuickTime for Windows dependency (32bit).
  • Updated to JRuby 9.0.5.0.
  • Updated to Groovy 2.4.6.
  • Updated to Hibernate 5.1.0.
  • Updated to japlscript 3.1.3.
  • Updated to jipes 0.9.12.
  • Updated to slf4j 1.7.21.

Labels: , , , , ,

Wednesday, August 21, 2013

64 bit beaTunes on Windows 7/8

beaTunes2 logoFor years now, beaTunes has used Apple's QuickTime SDK for Windows to decode and play audio files (on OS X, beaTunes uses CoreAudio and QTKit). Unfortunately, QuickTime for Windows is 32 bit only and has been all but abandoned by Apple a couple of years ago. In the OS X world it has been first replaced by QTKit and more recently by AVFoundation—and both are available in 64 bit, but not on Windows.

Truth be told, the QuickTime SDK is covered with quite a bit of patina. But to my knowledge it is the only commercially available, comprehensive cross-platform multimedia API. The only other library that comes close is the open source project FFmpeg (…which does not take care of licensing issues).

Why am I telling you all this?

Without some sort of inter process communication (a trick used by the QuickTime X player), any program that wants to use a 32 bit library, has to be a 32 bit process as well. And 32 bit means 4 GB of addressable memory per process—a boundary beaTunes with a big library and lots of parallel analysis tasks can bump against. As a consequence, to allow beaTunes to run as 64 bit process, I have to get rid of QuickTime and replace it with something else. This something else will be a mixture of different SampledSP-libraries—FFSampledSP for free codecs like FLAC and OGG and MFSampledSP for commercial formats like AAC, MP3 and WMA. For a complete list of available MFSampledSP decoders, please see this Microsoft Media Foundation article.

The switch away from QuickTime is planned for beaTunes 4, not due for at least a couple of months. But since most of the code for 64 bit audio decoding is already written and available, I'm making a special 64 bit Windows 7/8 build of beaTunes 3.5.15 available for you today. This should be interesting to folks with memory problems on Windows. In the 64 bit version they can increase the maximum heap size to a much larger value than the typical 1200 MB. If you want to try this, please keep in mind, that you need at least Windows 7—this will not work properly on Vista or XP! Obviously, you also need a 64 bit operating system and 64 bit hardware.

You can get the 64 bit version here: beaTunes-3-5-15-x86_64-win.exe

This build contains MFSampledSP, but not FFSampledSP. So working with most commercial codecs should be fine. Free or Apple specific codecs (e.g. Apple Lossless) on the other hand might be problematic.

Of course I'm putting this out there for your benefit, but also for mine. Please let me know, if you run into any kind of problems! I need your feedback to solve issues.

Thank you.

Labels: , , , ,

Friday, December 9, 2011

beaTunes 3.5 Early Access 1: Faster, more responsive

beaTunes2 logoSurprising to some, I have not been idle in the past couple of months since the first release of beaTunes 3. In preparation of beaTunes 3.5, I have spent a lot of time on improving Jipes and the SampledSP collection. Both are open source libraries and central to beaTunes 3.x. Let me explain why..

Traditionally, Java offers very poor multimedia support. To illustrate this: In Java you can't just load and play an AAC file. Instead you have to find or write some code that does it for you. Support out of the box is not available. The same is true for all but the most simple (PCM) or obscure (μ-law) encodings.

The SampledSP collection remedies this situation by providing a bridge to native audio libraries like Apple QuickTime (32bit), Apple CoreAudio (OS X) and Microsoft MediaFoundation (>= Windows 7). Furthermore, it provides basic resampling capabilities.

beaTunes 3.5 will take full advantage of these libraries. It will also better take advantage of Jipes. Here's how: To analyze, all versions of beaTunes prior 3.5 first decoded the audio file to memory. Then, one after another, each requested algorithm would operate on the decoded audio data. While this approach is very efficient for multipass algorithms (decode once, process many times), it is flawed, when you want to process many files in parallel, as decoded audio can easily be 50MB and bigger. And once you have used lots of memory, the system becomes less responsive, because the OS is busy with memory management... not a pleasant situation. Starting with version 3.5, beaTunes processes small chunks of audio at a time, drastically reducing peak memory consumption, thus easing the strain on the OS. At the same time, processing steps that many algorithms have in common are only executed once, thus saving some work. The magical framework that makes this possible is Jipes.

To make this all work in beaTunes 3.5, I had to rewrite some of the existing algorithms and the task handling infrastructure. Most plugin APIs stayed unchanged, though. Additionally, the bundled JRuby and Groovy scripting engines were updated to current versions.

Better Responsiveness

While the audio processing stuff is probably the biggest change under the hood, I have also spent some time on other, more immediate performance aspects. One of them being UI responsiveness. When playing with 3.5, you will notice that scrolling around in playlists is a lot smoother than it used to be. There may be a slight flicker when beaTunes has to load data from the database, but typically values should appear in less than 0.5s. In fact, I have not seen this take more than 0.25s. Another area of work has been general responsiveness during standard tasks, like adding analysis tasks to the queue. Here, you should also notice an improvement.

Last but not least, I rewrote much of the online resources interaction code. Before 3.5, beaTunes first sent all data to the server, processed all the results and then added the unsuccessful tasks to the queue for local processing. Considering, that server processing takes a long time, but not a whole lot of resources, while local processing takes a lot of resources and a lot of time, this is a poor approach. In version 3.5 beaTunes sends data to the server (indicated by a message in the status bar of the task queue). In parallel, all tasks are added to the queue. But unlike before, beaTunes does not wait for all results from the online database to be processed before processing the remaining tasks locally. Instead, a task in the queue is processed locally right after we received data from the server for the task at hand (if at that point it is still necessary at all). In essence, both ways of processing (with online resources and locally) are more or less parallelized, thus significantly reducing the total processing time.

One last but important remark about colors: beaTunes 3.5 calculates colors slightly differently. If you have a big collection (i.e. more than 10,000 songs), this can slow down analysis significantly, as many colors (not just for the song you added to the queue) have to be changed in the background. Also, colors calculated with prior versions will have a different meaning, thus similarity can only be computed correctly, after all colors have been re-calculated.

As always, there is some more info in the NOTES.txt file.

Alright, here's the obligatory warning: Before downloading and installing this, please make sure you understand what Early Access means:

  • Absolutely no warranty for whatever
  • Features may or may not work, appear, and disappear
  • It may not be possible to migrate data to future or previous versions (even though I make a reasonable effort)
  • This version will cease to function one week after its release
  • You cannot buy this version

And here are the download links:

Important

For those still using beaTunes 2: beaTunes 3.x changes beaTunes' internal database layout quite a bit, which takes a while. Do not interrupt this process, even if it takes very long! beaTunes 2.x will not be able to use the database anymore, after you ran beaTunes 3.x. If you intend to try 3.x and then go back to 2.x, make sure you back up the database before you try 3.x (depending on your OS it's in ~/Library/Application Support/beaTunes/Database, C:\Users\<username>\AppData\Local\tagtraum industries\beaTunes\database or C:\Documents and Settings\<username>\Local Settings\Application Data\tagtraum industries\beaTunes\database)! You also might want to check out this article about exporting beaTunes data.

Feedback

Please provide feedback! Let me know what does not work. Especially audio decoding problems, OutOfMemoryErrors and UI hangs and hiccups.

Thanks.

PS: The update from 3.0 to 3.5 will be free.

Labels: , , , ,

Thursday, June 3, 2010

Problems with Detect Silence on Windows

beaTunes2 logoFor a little while now, I've been receiving problem reports describing beaTunes crashes on Windows (beaTunes claims there was a 'corrupt file'). Apparently, this is due to a bug in some of Apple's QuickTime for Windows code and only happens when executing the Detect Silence task. Be assured that I'm investigating the matter and filed a bug report. Unfortunately, there is not a quick solution to the problem. So if you are experiencing this (Windows only), for now, please stop using the Detect Silence task and things should be fine.

Thank you for your patience.

Update

As of beaTunes 2.1.9 I believe I have found a workaround for this issue.

Labels: , ,

Wednesday, January 27, 2010

beaTunes 2.1.3 fixes non 44.1kHz problems

beaTunes2 logoConsidering that today's beaTunes release coincides with Apple's big media event, I don't expect for this to be noticed much... Anyhow, let's try!

As mentioned recently in this blog, beaTunes 2.1 had some problems on OS X with files not sampled at the standard 44.1Khz. This was due to a bug in the beaTunes code that interacts with the CoreAudio/QTKit decoders. This problem should be fixed for now. Note, that on Windows this problem was never an issue (and no, this does not mean Window is somehow better, it just means my code for Windows was somewhat better).

The changes made to fix this bug, may also lead to better support of other, more exotic audio formats, that only QuickTime supports.

The second nice thing in this release is the addition of genre and release year import in the MusicIP analysis task. So, if the genre and release year are in the MusicIP database, beaTunes should be able to import them.

Enjoy!

Labels: , ,

Wednesday, July 30, 2008

Sort this!

beaTunes LogoEven though we made some significant changes, today's new Early Access release 4 is probably not very exciting from a user's point of view. A biggie for us is the complete removal of any QuickTime for Java (QTJ) dependencies. QTJ lets Java programmers easily access one of the most powerful multimedia libraries out there. Unfortunately, as part of the 64bit-Carbon-abandonment, Apple decided to drop all QTJ support in the 64bit-only Java 6 VM and as a result, we'll have to slowly migrate away from it. As of now, beaTunes 2 is still dependent on (native, Carbon-based) QuickTime and will only run in a 32bit JVM. But at least we got rid of the QTJ code as a first step.

In the Windows world, this move away from QTJ will have positive side-effects. For quite a while now, the iTunes updater tended to mess up the QTJ installation. Many users weren't even able to install beaTunes properly without technical support. With QTJ out of the way, we're looking forward to many happy Windows users and fewer support cases.

But enough with the technical whining - there are other neat little improvements contained in this release. First of all, beaTunes now finally supports iTunes-style sorting utilizing sort name, sort artist, etc. We added a corresponding info dialog pane and, probably best of all, some new inspections designed to deal with wrong or butchered sort names.

As you might know, iTunes determines sort names mostly automatically. If, for example, a song title starts with the word "an", it is assumed to be an indefinite English article and therefore dropped from the sort name. Unfortunately, languages like German also have a word "an", which happens to be a preposition, not an indefinite article and should not be dropped from the sort name. beaTunes now has the ability to detect such errors taking advantage of its language field. So for best results, run the language analysis before inspecting sort names.

We also got to improve the typo inspector - it should now do a better job with short names. Another goodie: Searchboxes now have a little popup menu that let's you specify the search mode. E.g., you can now limit a search to the artist field.

So - here's the obligatory warning: Before downloading and installing this, please make sure you understand what Early Access means:

  • Absolutely no warranty for whatever
  • Features may or may not work, appear, and disappear
  • It may not be possible to migrate data to future versions (even though we make a reasonable effort)
  • This version will cease to function 2 weeks after its release
  • You cannot buy this version

Just so that there is no doubt about it: EA4 isn't even a beta version.

And here are the download links:

Note for EA3 users

EA4 changes the database schema first introduced in EA2. During the update, beaTunes will display a dialog box. Please be patient. The update may take a while.

Labels: ,

Saturday, May 24, 2008

UnsatisfiedLinkError: beaTunes, Leopard and Java 6

beaTunes LogoA little while ago, Apple finally released Java 6 for Leopard. Unfortunately, the 64bit Java 6 does not support QuickTime for Java anymore. Why? QuickTime for Java depends on Carbon, for which Apple is dropping support in 64bit environments.

What does this mean for beaTunes? In the long term we will move away from the QuickTime for Java API on OS X. We already utilize CoreAudio in parts of the application, which will not be affected by Apple's discontinued support for Carbon based APIs. We will replace the remaining code that is still using QuickTime.

Are users affected by this right now? Yes, unfortunately they are. As beaTunes works quite nicely with Java 6 on Windows, the current OS X version of beaTunes (1.2.9) will also start with Java 6, if it is installed. And this will fail due to the reasons mentioned above with an UnsatisfiedLinkError. To fix this, one needs to edit the file Contents/Info.plist in the beaTunes application bundle and replace the existing JVMVersion string with the value 1.5* (instead of 1.5+)

We will release an update next week, which contains this fix.

Labels: , , ,

Friday, November 16, 2007

OS X 10.4.11 solves iTunes Plus-CoreAudio problems

beaTunes LogoIt looks like the recent OS X 10.4.11 update solved a couple of issues with opening iTunes Plus files with CoreAudio. Previously, CoreAudio APIs were often not able to even open an iTunes Plus file even though no DRM was employed. For beaTunes users this was pretty annoying, since they had to fall back to a not as fast QuickTime implementation of the same code, that had to be manually enabled.

Labels: , , , ,

Wednesday, November 14, 2007

beaTunes 1.2.5 released

beaTunes LogoWe just released beaTunes 1.2.5. This release fixes a couple of Leopard UI issues. Furthermore the delayed commit progress dialog now refreshes correctly, the recently-added-songs logic was improved and unnecessary fallbacks to QuickTime are now avoided. Mac users should definitely update.

Enjoy!

Labels: , , ,

Sunday, July 15, 2007

Problems with iTunes 7.3.1 and QuickTime 7.2

iTunes logoA couple of days ago Apple released iTunes 7.3.1 and QuickTime 7.2.

beaTunes works fine with both new versions, if they are installed correctly. Unfortunately it looks like the iTunes/QuickTime update procedure doesn't always work the way it should. Long story short - some of you might have encountered the following error when starting beaTunes:

A fatal error occurred during initialization: java.lang.NoClassDefFoundError:quicktime/internal/jdirect/Linker

If you are on OS X, you will need to re-install QuickTime. Just download it from Apple. Install it. Things should be fine.

If you run Windows, re-install beaTunes, try whether it works, if not, re-install QuickTimes and re-install beaTunes again.

If you are still encountering issues, please email our support.

Labels: ,

Thursday, March 8, 2007

iTunes 7.1 is out

iTunes logoOn 3/5/07 Apple released version 7.1 of iTunes. The probably coolest new feature is the full screen Cover Flow. Apple definitely took a step in the right direction. You've got to check it out!

The iTunes update also includes an update of QuickTime to version 7.1.5. If you are using beaTunes on Windows, you might need to re-install beaTunes, should you run into any problems. Mac users should not have any problems.

Labels: ,