Python library for generating simple chord progression midi files
pip install midigen
Play a ii-V-I-vi
pattern in the key of G
; loop it four times
midigen --key G --chords ii V I vi --loop 4 --play
from midigen.notes import Note
from midigen.keys import Key, Mode
from midigen.time import TimeSignature, Measure
from midigen.sequencer import Song, Track, open_output
port = open_output()
# play C minor scale
Key(Note.C, Mode.Minor).to_track().play(port)
# make a simple ii V I vi chord progression in the key of C
key = Key(Note.C, Mode.Major)
time_signature = TimeSignature(4, 4)
tempo = 90
progression = [2, 5, 1, 6]
chords = Track.from_measures([
Measure.from_pattern(
pattern=[
key.relative_key(degree).chord(
# default chords are the base triad - try adding extensions
extensions=[7],
# pick a voicing close to the root triad
match_voicing=key.triad()
)
] * time_signature.numerator,
time_signature=time_signature,
velocity=90
)
for degree in progression
])
# play to port
chords.play(port, tempo=tempo)
# write the song to a MIDI file
Song([chords]).to_midi('midigen.mid', tempo=tempo)