This software was developed during my MSc and PhD projects. I may continue to use and develop it now that these are over, but its development will not be very active from now on.

The Jazz Parser Structural analysis of the harmony of chord sequences can be performed using linguistic grammars. I have implemented a parser specially for chord sequences using a combinatory categorial grammar (CCG) to analyse the structure underlying the harmony. Despite its name, it's not restricted to parsing jazz, though the models already trained are optimized for jazz standards!

The parser is written in Python and is open source, licensed under the GPL v3.

Getting the Parser

Release

The code is available as a tarball:

Check that you have the dependencies listed below. The parser requires no installation. Extract the downloaded tarball to a location of your choosing using tar or another archive reader. For example:

tar zxf jazzparser-3.1.tar.gz

This should produce a directory called jazzparser. The guides on this website will assume that this is located in your home directory ~/jazzparser/. If not, you'll need to alter the paths as appropriate.

Aside from the source code, the release also contains input data, including my annotated corpus of jazz chord sequences, and the parsing models trained on this corpus.

Latest Unreleased Code

The code is also available in a Github repository.

Dependencies

At the moment, the only things you'll need to be able to run the parser are

Using the Parser

First, check that the parser runs.

cd ~/jazzparser/bin
./jazzparser

This should give you some information about parameters, followed by a prompt to enter a chord sequence:

Enter chord sequence:
# 

If this works, you're ready to follow the introductory guide:

There's not much documentation at the moment. Here are some pages on specific subjects:

Extending the Parser

The Python source code is all in the download. You are welcome to extend the parser (under the terms of its GPL license) or use its Python API. If you're using it for anything, I'd love to hear about it.

See TheoryDocuments for details of the theory.


  1. I'm using Python 2.7 myself, but I believe all my code is compatible with 2.6. If you try running it using 2.6 and have problems, please let me know and I'll try to make it compatible. (1)