jammittools: Export sheet music and audio from Windows/Mac app Jammit

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.


Jammit is a service and associated app for Windows/Mac/iOS that sells isolated instrument audio tracks from popular music, along with full transcriptions. This is a library and executable that allow you to export the sheet music (in PDF format) and audio (in WAV format) to tracks that you have purchased.

Any sheet music or audio you export is solely for your own use, e.g. for use on Linux and Android devices that do not have the official app available. Please do not use this tool to share content with others who have not purchased it!

You must install ImageMagick and Sox for sheet music and audio export respectively, because they are used to do the actual conversion. Please see the README for usage information.

[Skip to ReadMe]


Versions0.2.0.1, 0.3, 0.3, 0.3.2, 0.4, 0.4.1,, 0.5,,,, 0.5.1, 0.5.2, 0.5.3,, 0.5.4, 0.5.5,,
Change logNone available
Dependenciesbase (>= && <5), boxes (>=0.1.3 && <1.2), containers (>= && <0.6), directory (>= && <1.3), filepath (>= && <1.4), jammittools (==0.3), process (>= && <1.3), property-list (>= && <0.2), temporary (>= && <1.3), transformers (>= && <0.5) [details]
AuthorMichael Tolly
Home pagehttps://github.com/mtolly/jammittools
Bug trackerhttps://github.com/mtolly/jammittools/issues
Source repositoryhead: git clone https://github.com/mtolly/jammittools
UploadedThu Sep 11 23:47:54 UTC 2014 by mtolly



Maintainers' corner

For package maintainers and hackage trustees

Readme for jammittools-0.3

[back to package description]


A command-line tool for exporting sheet music and audio from the Windows/Mac app Jammit. It should go without saying, but please do not distribute content from songs you have purchased -- it is for your use only!


This is basically a fancy shell script but written in Haskell. ImageMagick and Sox are used to do the actual conversion work, so install those and put them in your path. If you're on Windows, ImageMagick convert infamously conflicts with a system tool of the same name, but jammittools tries looking in your Program Files so you shouldn't have to do anything.


jammittools -?
# Print usage info.

jammittools -d
# Displays the entire library.

jammittools -t "My Song" -r "Some Artist" -x dir
# Easiest export option: exports all sheet music and audio for a song.

jammittools -t "My Song" -r "Some Artist" -s file.pdf -y <parts>
# Exports a single sheet music file with a list of parts, interleaved.
# See below for the syntax of instrument parts.

jammittools -t "My Song" -r "Some Artist" -a file.wav -y <parts>
# Exports a single audio file with a list of parts, mixed together.
# See below for the syntax of instrument parts.

jammittools -t "My Song" -r "Some Artist" -c -y <parts>
# Do a "dry run" of audio extraction, which checks if the parts exist
# but does not do any conversion. Exits with a non-zero code if any
# part does not exist.

Other lesser-used flags:

-j /path/to/jammit/lib
# On Windows and OS X, the official app's library location is used
# if you do not specify this flag.
# You can also specify the environment variable JAMMIT.

-T "My Song"
# Exact search on title, instead of -t which is case-insensitive substring.

-R "Some Artist"
# Exact search on artist, instead of -r which is case-insensitive substring.

-n <parts>
# Allows you to invert certain audio parts when exporting a WAV file.
# This can be used to access "hidden" parts that aren't a part of any
# transcribed instrument part, see below.

-l <number>
# Select the number of sheet music systems per page.
# One system contains a line from each individual part.
# If this flag is not given, an appropriate number of systems will be chosen
# to get close to an 8.5" by 11" page ratio.

Instrument parts are given by this somewhat terse syntax:

g - Guitar (1)
r - Guitar 2
b - Bass
d - Drums
k - Keyboard (1)
y - Keyboard 2
p - Piano
s - Synth
v - Vocals (Lead)
x - Vocals (Backing)
GRB - in sheet music, tab instead of notation
GBDKV - in audio, the backing track for an instrument

So, for example, to make a backing track consisting of just drums and bass:

jammittools <search parameters> -a out.wav -y db

To make a sheet music file with Guitar 1's notation and tab interleaved:

jammittools <search parameters> -s out.pdf -y gG

Accessing hidden parts

Not all the audio in a song has been transcribed and sold by Jammit. Things such as sound-effects, other instruments like violin, and occasionally third guitar or keyboard parts are "hidden" inside the backing tracks for every instrument package that you can purchase. You can listen to these parts by performing audio subtraction, where you take two audio files, invert one of them, and then mix them together.

Let's say you own all 5 instruments for a song. You can access the "hidden" track with the following command:

jammittools <search parameters> -a out.wav -y D -n grbkyvx

This uses the -n flag to mix many audio files in after inverting them. The D part is the backing track for the drums package. What this does is subtract the non-drums instrument parts from this backing track, leaving you with just the portion of the song that isn't present in any of the transcribed parts. If you use the -x option to export all parts of a song, this process will be done for you and placed in a file called backing.wav.

The resulting file has a thin layer of noise, because all the audio used in Jammit is lossily encoded, which means the backing tracks are not quite perfect mixes of their constituent parts. But the results are generally pretty good, and you can easily use something like Audacity's noise filter to clean it up further. Using the drums backing track as a base is preferred, because drums leaves the most audible noise when you remove it from a different backing track.