MidiGen

Object-oriented MIDI generation with music theory support. Create songs with chord progressions, scales, melodies, and drums in Python.

Python 3.10+ Music Theory 17+ Scales GPL-3.0
pip install midigen-lib

Features

🎼

Chord Progressions

Roman numeral notation (I-V-vi-IV) with automatic voice leading and inversions.

🎹

17+ Scales

Major, minor, modes, pentatonic, blues, whole-tone, chromatic, and more.

🥁

Drum Programming

DrumKit class with human-readable names like "Bass Drum 1" and "Hi Hat".

🎸

Multi-Track

Layer instruments across separate MIDI tracks with General MIDI support.

🎵

Melody Generation

Create melodies from scale degrees, note names, or random walk algorithms.

🔀

Arpeggios

Ascending, descending, and alternating arpeggio patterns built-in.

Quick Start

create_song.py
from midigen import Song, Section, Key
from midigen.compiler import MidiCompiler

# Create a song in C major at 120 BPM
song = Song(key=Key("C", "major"), tempo=120)

# Add a verse with a classic chord progression
song.add_section(Section(
    name="Verse",
    length=8,
    chord_progression="I-V-vi-IV"
))

# Add piano
song.add_instrument("Acoustic Grand Piano")

# Compile and save
compiler = MidiCompiler(song)
compiler.compile().save("my_song.mid")

Supported Scales

Major (Ionian) Natural Minor (Aeolian) Harmonic Minor Melodic Minor Dorian Phrygian Lydian Mixolydian Locrian Major Pentatonic Minor Pentatonic Blues Whole Tone Chromatic Diminished Augmented Bebop Dominant