FALCON is an open source tool for music identification, written in Java and based on the popular search engine library Lucene.
Try out the online demo or download the program and test it on your own computer - there are also sample datasets on which you can immediately try it out (see the tutorial). Source code is of course available, along with an ANT script for easy building.
If you have any question or intend to contribute to the development of FALCON, please contact the authors. Any feedback is welcome.
The results of our participation to the MusiCLEF evaluation campaign (the dataset consists of classical music works, for which FALCON-compatible features are available) are shown in the table at the right. Our reference machine has a dual-core, 3.4Ghz CPU.
We are also working on the identification of tracks in LPs. Even though it is still a work in progress, as the task is radically different from the traditional cover-identification setup, we are obtaining interesting results: you can click here to visualize the results for a typical LP (this is also MusiCLEF data).
This is the Side A of a recording of the second symphony by J. Brahms. The relevant results have been highlighted. Notice that there can be multiple versions of a work in the reference database. The identification of the entire LP (both sides) took about 67 seconds.
|1||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ALLEGRO NON TROPPO (1.MOV)|
|2||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ALLEGRO NON TROPPO (1.MOV)|
|3||WOLFGANG AMADEUS MOZART - CONCERTO PER VIOLINO N.5 IN LA MAG K.219 "ALLA TURCA" (1.MOV)|
|4||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ADAGIO NON TROPPO (2.MOV)|
|5||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ADAGIO NON TROPPO (2.MOV)|
|6||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ALLEGRO NON TROPPO (1.MOV)|
|7||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ADAGIO NON TROPPO (2.MOV)|
|8||FRANZ SCHUBERT - QUINTETTO IN LA MAG PER PF E ARCHI OP.114 D.667 "LA TROTA"|
|9||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ADAGIO NON TROPPO (2.MOV)|
|10||JOHANNES BRAHMS - OVERTURE TRAGICA IN RE MIN OP.81|
|11||WOLFGANG AMADEUS MOZART - CONCERTO PER VIOLINO N.5 IN LA MAG K.219 "ALLA TURCA" (3.MOV)|
|12||LUDWIG VAN BEETHOVEN - SINFONIA N.2 IN RE MAG OP.36 ADAGIO MOLTO/ALLEGRO CON BRIO (1.MOV)|
|13||FRANZ LISZT - RAPSODIA UNGHERESE N.2 PER ORCHESTRA|
|14||GIUSEPPE VERDI - AIDA|
|15||FRANZ SCHUBERT - QUINTETTO IN LA MAG PER PF E ARCHI OP.114 D.667 "LA TROTA"|
|16||JOHANNES BRAHMS - SINFONIA N.2 IN RE MAG OP.73 ALLEGRO NON TROPPO (1.MOV)|
This quickstart guide is for the command line interface of FALCON, and illustrates the basic steps needed to perform a search; source code documentation is found in the download packages. In order to search a collection for cover songs, the following operations have to be performed... [expand tutorial]
In order for FALCON to analyze the audio content, an audio file must be converted into an intermediate representation that makes use of CHROMA features.
FALCON expects plain-text files contaning chroma features in comma-separated-values format (such as the output of MATLAB's dlmwrite command). Each line must contain 12 values.
There are several options for extracting chroma features, among which:
Use FALCON to create an inverted-index for the collection,
with the following command:
java -jar dist/falcon.jar -i FILES_TO_INDEX INDEX_PATH
which writes the index into INDEX_PATH . Optional parameters:
- -l segment length -- as a rule of thumb, set it so that in seconds it corresponds to 15/30 seconds
- -o segment overlap -- half segment length is typical, however no overlap (0) also works fine in most situations
- -s subsampling -- the higher, the faster (1 equals no subsampling)
- -t perform transposition -- this uses a key-finding algorithm (set this to 1 in indexing)
- -f comma-separated forced transpositions -- manually specify transpositions (only one during indexing)
Querying the collection
Querying the collection is done with the following line (for a single query):
java -jar dist/falcon.jar -q QUERY_FILE INDEX_PATH
or, in the case of a batch of queries, one per line:
cat QUERY_FILE_LIST | java -jar dist/falcon.jar -b INDEX_PATH
with the same options as the indexing step.
It is possible to speed up the computation and obtain better accuracy by using a query pruning strategy with the -p switch in certain cases, but the strategy should be trained (using the -P switch) depending on the features parametrization.
All resources are hosted on FALCON's github repository.
- latest source tarball
- pre-compiled distribution
- join the MusiCLEF evaluation campaign for some data!
You can read more about FALCON here:
- E. Di Buccio, N. Montecchio, N. Orio. A Scalable Cover Identification Engine . Proceedings of ACM Multimedia 2010 International Conference, October 2010, Florence, Italy. [link]
- E. Di Buccio, N. Montecchio, N. Orio. FALCON: FAst Lucene-based Cover sOng identificatioN . Proceedings of ACM Multimedia 2010 International Conference - Open source software competition , October 2010, Florence, Italy. [link]