Skip to main content

code-music

Code-generated music. Write Python, hear sound, export to Spotify.

Try it in your browser — no install needed.


Who are you?

🎧 Just want to listen Start here →
🎹 Want to make music (no theory needed) Start here →
🎼 Know your modes and want full control Start here →
💻 Want to understand or extend the code Start here →

What is this?

A Python library and tool set for generating music programmatically — from a single scale all the way to full multi-track songs with orchestral instruments, EDM synthesis, jazz arpeggios, and effects chains.

from code_music import Song, Track, Note, Chord, EffectsChain, scale, reverb, play

song = Song(title="My Track", bpm=120)

pad  = song.add_track(Track(instrument="pad",    volume=0.5))
lead = song.add_track(Track(instrument="piano",  volume=0.8))

pad.add(Chord("A", "min7", 3, duration=8.0))
lead.extend(scale("A", "pentatonic", octave=5))

song.effects = {"pad": EffectsChain().add(reverb, room_size=0.7, wet=0.4)}

play(song)  # hear it instantly
code-music my_track.py --flac    # → Spotify-ready FLAC

Install

pip install code-music              # from PyPI
pip install code-music[play]        # + real-time playback (sounddevice)

Or develop from source:

git clone https://github.com/Talador12/code-music
cd code-music
make dev          # creates .venv, installs deps, checks ffmpeg
make test         # full pytest suite

Requires Python 3.11+. For MP3/FLAC/OGG export: brew install ffmpeg.

What's in the box

Directory What's there
examples/ 8 step-by-step tutorials: hello world → live coding
songs/ 140 full songs across 55+ genres
samples/ 100+ short instrument and technique demos
scales/ 31 guided scale demos (all 12 keys), plus arpeggio mode
styles/ Theory profiles for 7 genres (deadmau5, Zedd, bebop, cinematic…)
scripts/ Interactive scale/arp player with progress bar
code_music/ The engine, synth, effects, export, notation, voice

Play something right now

# Songs
make play-trance_odyssey      # 90s uplifting trance
make play-tank_bebop          # Cowboy Bebop big-band jazz
make play-deep_space_drift    # Brian Eno ambient
make play-clarity_drive       # Zedd-style festival EDM
make play-symphony_no1        # original orchestral movement
make preview-voice_pacing_demo # narration vs rap pacing demo
# Scales and key relationships
make play-scales
make play-scales-arp          # same scales as arpeggios
make play-scales-group GROUP=world
make play-scale-circle_of_fifths # key relationship reference run

# Direct playback (no file written)
code-music songs/trance_odyssey.py --play

# Live coding: auto-render + play on every save
code-music songs/my_wip.py --watch --play

# Import and render a MIDI file
code-music dummy.py --import-midi my_track.mid -o remix.wav

# Generate a random song and play it (no script needed)
code-music --random
code-music --random jazz
# Generate a complete song from a genre template
from code_music import generate_song, detect_key, play

song = generate_song("lo_fi", bars=16, seed=42)
play(song)

# Analyze any song's key
root, mode, conf = detect_key(song)
print(f"{root} {mode} ({conf:.0%})")

Learn by example

The examples/ directory walks through the entire API step by step:

# Example What you'll learn
01 hello_world.py Notes, tracks, Song basics
02 chords_and_scales.py Chord shapes, scale(), modes
03 effects_chain.py EffectsChain, reverb, delay, compress
04 arrangement.py Section, repeat, Song.arrange
05 track_transforms.py transpose, loop, split, merge, stretch, filter
06 midi_roundtrip.py Export to MIDI, import back, remix
07 json_save_load.py Song.export_json / Song.load_json
08 live_coding.py --watch --play for instant feedback
09 generative.py generate_song() — full AI-composed songs
10 analysis.py detect_key() — Krumhansl-Kessler key analysis
code-music examples/01_hello_world.py --play    # start here
code-music --random jazz                        # or just generate one

Export to Spotify

make spotify     # renders all songs to dist/flac/ + prints upload link

Upload at https://artists.spotify.com → Music → Upload Track. Minimum: 30s, 44100 Hz stereo. FLAC preferred.

Sheet music

make notation-all   # LilyPond (.ly), ABC (.abc), MusicXML (.xml) for every song
  • LilyPond: lilypond dist/notation/lily/trance_odyssey.ly → PDF
  • ABC: paste dist/notation/abc/tank_bebop.abc into https://abc.rectanglered.com
  • MusicXML: open in MuseScore, Sibelius, Dorico, Finale

See docs/ for audience-specific guides.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

code_music-5.1.0.tar.gz (366.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

code_music-5.1.0-py3-none-any.whl (81.5 kB view details)

Uploaded Python 3

File details

Details for the file code_music-5.1.0.tar.gz.

File metadata

  • Download URL: code_music-5.1.0.tar.gz
  • Upload date:
  • Size: 366.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for code_music-5.1.0.tar.gz
Algorithm Hash digest
SHA256 99f913d85b1a80555cc824a682b827e91200d193835d50ed9d3b56c50b78bd1a
MD5 b7e98e1b98508de63e4c2b91234d49be
BLAKE2b-256 11bce833a3aba84c7c7dec2f96276e0d3ee9652e3a2078dd9313231c1b580669

See more details on using hashes here.

Provenance

The following attestation bundles were made for code_music-5.1.0.tar.gz:

Publisher: ci.yml on Talador12/code-music

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file code_music-5.1.0-py3-none-any.whl.

File metadata

  • Download URL: code_music-5.1.0-py3-none-any.whl
  • Upload date:
  • Size: 81.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for code_music-5.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7c5c81387165664aeb661c6b779b9b9a782bdba7960d32e984c3fd08355e5947
MD5 4e391f75740a284d9bdd9617a16d85f1
BLAKE2b-256 2e8320232346961f95bc6732c7ce81848ce863a307ae3a521d0531bd7cb27413

See more details on using hashes here.

Provenance

The following attestation bundles were made for code_music-5.1.0-py3-none-any.whl:

Publisher: ci.yml on Talador12/code-music

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

5.1.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page