PyRealPro

iRealPro is a pretty handy tool for iOS; as they describe it on their site, it provides a "Music book and backing tracks" -- It can store chord chart for hundreds of different songs, and play them as instrumental backing tracks in a few dozen different musical styles (and each style lets you choose from among a few different synth instruments.)

You can export MIDI files or digital audio tracks for use elsewhere, or just play them as is and practice along.

The only thing I'm not crazy about is entering tracks in the touchscreen app itself, and a while back I started fooling around with a Python script that could automate most of the process and spit out an iRealPro "file" at the end of it. (Terminology is slippery because they describe a file format which is in reality a proprietary URL scheme.)

By the time I fleshed out the idea it was a little beyond my original utility script, but it may be useful for converting songs from one format to another, generating random songs, et cetera.

Here's PyRealPro on github, and the easiest way to install it is via pip install pyrealpro.

Example usage:

from pyrealpro.pyrealpro import Song, Measure, TimeSignature

s = Song(title="Automation Blues", composer="pyrealpro", key='G', style='New Orleans Swing',
                 composer_name_first="Otto",
                 composer_name_last="Matonne")

s.measures.append(Measure(chords='G7', barline_open='{', staff_text='Generated by pyrealpro'))
s.measures.append(Measure(chords='G7'))
s.measures.append(Measure(chords='G7'))
s.measures.append(Measure(chords='G7', barline_close=']'))

s.measures.append(Measure(chords='C7', barline_open='['))
s.measures.append(Measure(chords='C7'))
s.measures.append(Measure(chords='G7'))
s.measures.append(Measure(chords='G7', barline_close=']'))

s.measures.append(Measure(chords='D7', barline_open='['))
s.measures.append(Measure(chords='C7'))

s.measures.append(Measure(chords='G7', ending='N1'))
s.measures.append(Measure(chords='D7', barline_close='}'))

s.measures.append(Measure(chords='G7', ending='N2'))
s.measures.append(Measure(chords='G7', barline_close='Z'))

print(s.url())

The above program will output the following URL, which can be imported into iRealPro:

irealbook://Automation%20Blues=Matonne%20Otto=New%20Orleans%20Swing=G=n=%7BT44%3CGenerated%20by%20pyrealpro%3EG7%20%20%20%7CG7%20%20%20%7CG7%20%20%20%7CG7%20%20%20%5D%5BC7%20%20%20%7CC7%20%20%20%7CG7%20%20%20%7CG7%20%20%20%5D%5BD7%20%20%20%7CC7%20%20%20%7CN1G7%20%20%20%7CD7%20%20%20%7DN2G7%20%20%20%7CG7%20%20%20Z