Chromaprint 1.4 released

A new version of Chromaprint has been released. This is a fairly big release I originally intended to call 2.0, but one key feature I was planning to include is not yet finished, so I decided to go with 1.4 instead.

So what's new?

The biggest feature is that all components of audio fingerprinting process now work in a streaming fashion and can provide partial results at any time. That means that it's now possible to feed a continuous audio stream to the process and get back partial fingerprints. This is useful if you want to fingerprint e.g. an internet radio stream and do not want to explicitly split the stream into small chunks. There are also side effects of these changes and the whole process is now faster and uses less memory.

This change is also reflected in the fpcalc utility, which can now work on streams. In fact, the fpcalc utility has been completely rewritten. It now also supports JSON output for easier integration, since you can find JSON parser in the standard library of almost every new programing language.

Here is an example using an online radio:

$ fpcalc -ts -chunk 10 -overlap -json http://icecast2.play.cz/radio1.mp3
{"timestamp": 1480789416.14, "duration": 12.60, "fingerprint": "AQAAUFSSTEnCRBKeZsR0..."}
{"timestamp": 1480789423.68, "duration": 12.60, "fingerprint": "AQAAUZOSRIsUTkGz9SCZ..."}
{"timestamp": 1480789433.68, "duration": 12.60, "fingerprint": "AQAAUYmWfJIoiNIRHzsl..."}

Or you can fingerprint raw pcm data from an external audio input:

$ arecord --format=S16 --rate=44100 --channels=1 --file-type=raw \
    | fpcalc -format s16le -rate 44100 -channels 1 -ts -chunk 10 -overlap -json -
{"timestamp": 1480789965.67, "duration": 12.60, "fingerprint": "AQAAUFqkMVmyJMHWBa97..."}
{"timestamp": 1480789975.81, "duration": 12.60, "fingerprint": "AQAAUVGYSEkXJvit4ce1..."}
{"timestamp": 1480789985.72, "duration": 12.60, "fingerprint": "AQAAUcoSpRunwN6Op_hy..."}

This opens up many options how Chromaprint can be used outside of AcoustID.

There has also been a big source code cleanup. A lot of old code has been removed. We started using C++11 features, so it's no longer possible to compile Chromaprintwith old C++ compilers. Unit tests no longer depend on boost. KissFFT is now bundled in the package and used as a fallback if no other FFT library is found. That means Chromaprint can be now build without any external dependencies.

The public C API now uses standard fixed-size int types from stdint.h. This breaks API-level backwards compatibility, you will need to modify your programs. The binary interface has not changed and programs compiled against the old version of the library will continue working.

All source code from Chromaprint written by me has been relicensed from LGPL to MIT. Note that this does not mean much for the library as a whole, since it still depends on LGPL code, but it's now easier to reuse parts of the code in other projects, if needed.

We also have fpcalc binaries for ARM processors now. They were built and tested on Raspberry Pi, but might work on other ARM devices.

Download:

mbdata 2016.07.17 released

I have released a new version of mbdata. It's a small Python package for working with the MusicBrainz database using SQLAlchemy.

This version updates the SQLAlchemy models to the latest MusicBrainz database schema. It also adds support for Python 3 in addition to Python 2.

Install:

pip install mbdata==2016.7.17

Chromaprint 1.3.2 released

A new version of Chromaprint has been released. This is a very small bug fix release fixing fpcalc crash on a corrupt file.

Changes since version 1.3.1:

  • Fixed crash on an invalid audio file that FFmpeg could not decode.
  • Fixed build on Ubuntu 14.04 with libav.

Download:

Chromaprint 1.3.1 released

A new version of Chromaprint has been released.

Changes since version 1.3:

  • Fixed fpcalc -length to actually restrict fingerprints the requested length.
  • Fixed SONAME version for the shared library.

Download:

Chromaprint 1.3 released

A new version of Chromaprint has been released. This is another small release, there are no changes to the core functionality.

Changes since version 1.2:

  • The binary packages have been built with FFmpeg 2.8.6, adding support for DSF files
  • You can use use fpcalc -length 0 to get the full fingerprint
  • New function chromaprint_get_fingerprint_hash for calculating SimHash from the fingerprint data
  • Added info section to the fpcalc executable on Mac OS X
  • Generate .pc (pkg-config) file on Mac OS X when not building a framework
  • Removed use of some long deprecated FFmpeg APIs
  • Some smaller bug fixes

Download:

← Older posts