Skip to main content

Python toolkit for working with chord progressions

Project description

jchord - toolkit for working with chord progressions

https://github.com/jonathangjertsen/jchord/actions/workflows/build.yml/badge.svg https://codecov.io/gh/jonathangjertsen/jchord/branch/master/graph/badge.svg

What’s this then?

jchord is a Python package which provides tools for working with chord progressions. jchord:

  • has object representations for notes, chords, and progressions (in the Western 12-tone system)

  • knows about naming conventions for chords, and can convert back and forth between objects and names

  • can be used as a converter between strings, text files, XLSX files, PDFs and MIDI files (see “converter script” below)

Get it

Basic installation:

pip install jchord

Installation with dependencies for reading and writing MIDI/XLSX/PDF files:

pip install jchord[midi,xlsx,pdf]

Convert between formats

If you just want the converter functionality, invoke jchord on the command line:

usage: jchord [-h] [--midi MIDI] [--pdf PDF] file_in file_out

Converts between different representations of the same format

positional arguments:
  file_in      Input progression as string, .txt, .xlsx or .midi
  file_out     Output file as .txt, .xlsx, .midi or .pdf

optional arguments:
  -h, --help   show this help message and exit
  --midi MIDI  comma separated list of arguments for midi, e.g. tempo=8,beats_per_chord=2
  --pdf PDF    comma separated list of arguments for pdf, e.g. chords_per_row=8,fontsize=30

Example:

jchord "Cm A E7 F#m7" example.mid --midi tempo=80,beats_per_chord=1

As a library

Here is an example that parses a chord progression written as a string, transposes it upwards by 2 semitones, converts it back to a string and then creates a midi file from it.:

from jchord import ChordProgression, MidiConversionSettings
prog = ChordProgression.from_string("C -- Fm7 -- C -- G7 -- C -- E7 Am F Bm7b5 E7 Am9 F Bo C69 --")
prog = prog.transpose(+2)
print(prog.to_string())
prog.to_midi(MidiConversionSettings(filename="example.midi", tempo=100, beats_per_chord=2, instrument=4))

Output:

D       --      Gm7     --
D       --      A7      --
D       --      F#7     Bm
G       C#m7b5  F#7     Bm9
G       C#o     D69     --

For more examples, see the documentation.

Documentation

Documentation lives here: jonathangjertsen.github.io/jchord/

Contributing

To contribute, open an issue or create a Pull Request in the Github repo.

Project details


Download files

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

Source Distribution

jchord-3.1.1.tar.gz (31.1 kB view details)

Uploaded Source

Built Distribution

jchord-3.1.1-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file jchord-3.1.1.tar.gz.

File metadata

  • Download URL: jchord-3.1.1.tar.gz
  • Upload date:
  • Size: 31.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.0

File hashes

Hashes for jchord-3.1.1.tar.gz
Algorithm Hash digest
SHA256 f1d78a4ecc4c95033d02537a793e91f00a444423306d06ad2152c4de38aaece4
MD5 8915e801ed034caf65154e43657c36cc
BLAKE2b-256 9c6ff212b97bd1f375009f06b0f4afd679a72cffb6f22f3068c12230818805ea

See more details on using hashes here.

File details

Details for the file jchord-3.1.1-py3-none-any.whl.

File metadata

  • Download URL: jchord-3.1.1-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.0

File hashes

Hashes for jchord-3.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6bddf6928e1965624b832c0c131d80c5761bc55b5123fbab72ae90c82855b315
MD5 e533fac24933fe6092a13d2863bc87c0
BLAKE2b-256 1c7a4662527ccd98f0db0280b4f9c3c669a4cda6f802edf22ee64521b6e4e96a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page