Dan Ellis : Research :

[cover song image] Music Beat Tracking and Cover Song Identification

When different musicians or groups perform the same songs or pieces, they may change the tempo, style, instrumentation of the song, but typically retain enough of the melodic and harmonic content to preserve the identity of the piece. This project is concerned with automatic identification of cover versions through cross-correlation of beat-synchronous chroma representations.

See the overview description for more details on cover song detection. See the page on beat tracking and tempo estimation for details of the beat time extraction used as the time base for this processing. . See also the separate page on Chroma Feature Analysis and Synthesis that gives more detail about the feature representation which is used here.

We have collected a small development set of 80 pairs of pop music cover versions that can be used for developing cover systems - see the covers80 dataset page.


We are making the entire MATLAB code for our cover song system available under Gnu GPL. You can download the whole thing in a tar-gzip-ball, labrosa-coversongid.tgz. Here is its README file.

Note that the beat tracking (but not the IF chroma extraction or song matching) has been ported to Java as part of MEAPsoft.

Main routines

Example Usage

Here's an example of beat-tracking a music sample, then playing it along with its extracted click-track:

>> % Load a song
>> [d,sr] = wavread('train/train2.wav');
>> % Calculate the beat times
>> b = beat(d,sr);
>> % Resynthesize a blip-track of the same length
>> db = mkblips(b,sr,length(d))
>> % Listen to them mixed together
>> soundsc(d+db,sr);

A simple cover song test might look like this:

>> % Check the contents of the file containing the list of soundfiles
>> type list.txt


>> % Calculate beat-synchronous chroma features for all files
>> qlist = calclistftrs('list.txt');
song 1 bars_smith.mp3 -> bars_smith
22:30:31 bars_smith.mp3 ncols=313 bpm=136.3636
song 2 bars_phillips.mp3 -> bars_phillips
22:31:13 bars_phillips.mp3 ncols=354 bpm=138.8889
song 3 river_green.mp3 -> river_green
22:32:31 river_green.mp3 ncols=884 bpm=238.0952
song 4 river_lennox.mp3 -> river_lennox
22:33:33 river_lennox.mp3 ncols=767 bpm=217.3913
>> % Calculate the matrix of cover song similarities
>> R = coverTestLists(qlist)

R =

    0.3852    0.1482    0.0416    0.0364
    0.1444    0.3148    0.0330    0.0376
    0.0337    0.0290    0.2307    0.0208
    0.0376    0.0325    0.0203    0.2373

>> % Leading diagonal is self similarity; first pair match well (0.1482), second doesn't (0.0208)


See also the poster we made describing our system and its top-ranked performance in the MIREX-06 Cover Song Identification Evaluation. Also check out the talk slides from the ICASSP presentation, which include many audio examples.

D. Ellis & G. Poliner (2007). Identifying `Cover Songs' with Chroma Features and Dynamic Programming Beat Tracking
Proc. Int. Conf. on Acous., Speech, & Sig. Proc. ICASSP-07, Hawai'i, April 2007, pp.IV--1429-1432.


This material is based in part upon work supported by the National Science Foundation under Grant No. IIS-0238301. Any opinions, findings and conclusions or recomendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation (NSF).

This work was also supported by the Columbia Academic Quality Fund.

Valid HTML 4.0! Last updated: $Date: 2014/04/09 15:15:20 $
Dan Ellis <dpwe@ee.columbia.edu>