Skip to main content

Process MIDI piano with (almost) no pain

Project description

Fortepyan :musical_keyboard:

GitHub CI Python 3.9 PyPI version PyPI download month

fortepyan is a glorified pandas wrapper for midi files with piano music.

The main class to operate with is MidiPiece, which gives you access to the notes dataframe, and some useful utilities:

from fortepyan import MidiPiece

piece = MidiPiece.from_file("foo.mid")

piece.df
#        pitch  velocity        start          end  duration
# 0         52        70     0.000000     0.538542  0.538542
# 1         52        62     0.660417     0.951562  0.291146
# 2         57        62    20.769792    21.207812  0.438021
# 3         67        65    62.172917    62.510937  0.338021
# 4         69        56    62.179167    62.232292  0.053125

Using with HuggingFace datasets:

from datasets import load_datasets

dataset = load_dataset("epr-labs/maestro-sustain-v2", split="train")
piece = MidiPiece.from_huggingface(dataset[312])
piece.source
# {
#     'composer': 'Franz Liszt',
#     'title': 'Dante Sonata',
#     'split': 'train',
#     'year': 2009,
#     'midi_filename': '2009/MIDI-Unprocessed_11_R1_2009_06-09_ORIG_MID--AUDIO_11_R1_2009_11_R1_2009_09_WAV.midi',
#     'dataset': 'maestro'
# }

Usage

import fortepyan as ff

piece = ff.MidiPiece.from_file("mymidi.mid")

ff.view.draw_pianoroll_with_velocities(piece)
ff.view.make_piano_roll_video(piece, "tmp.mp4")

Contributing

Development

Pre-commit hooks with forced python formatting (black, flake8, and isort):

pip install pre-commit
pre-commit install

Whenever you execute git commit the files altered / added within the commit will be checked and corrected. black and isort can modify files locally - if that happens you have to git add them again. You might also be prompted to introduce some fixes manually.

To run the hooks against all files without running git commit:

pre-commit run --all-files

Package release:

# from the root directory with clean working tree
# replace patch with one of: [major, minor, patch]
./scripts/release/start_release.sh patch

# Make any additional changes to the release commit
./scripts/release/finish_release.sh

Tests

Recommended way to run and monitor tests is using pytest-watch:

ptw

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

fortepyan-0.4.4.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

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

fortepyan-0.4.4-py3-none-any.whl (31.6 kB view details)

Uploaded Python 3

File details

Details for the file fortepyan-0.4.4.tar.gz.

File metadata

  • Download URL: fortepyan-0.4.4.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for fortepyan-0.4.4.tar.gz
Algorithm Hash digest
SHA256 f2f3be7e1dd1997bdb2b0b55d465a72ab58deaf7d562d1f98629d9f021e7ec31
MD5 9c9eb25e4c3ebeabea715a6adde2d1e8
BLAKE2b-256 0528da6a11edcfa5e9d4f3b7d9de084696205c01d25a3b80649eeab677647b4a

See more details on using hashes here.

File details

Details for the file fortepyan-0.4.4-py3-none-any.whl.

File metadata

  • Download URL: fortepyan-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 31.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for fortepyan-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a1deb3f3b12520690c7ec7841e895fe027f3d13b58c240e235664f4ab0c5b234
MD5 ac9b88c759876a82c4570324ea0e9f08
BLAKE2b-256 c37cc6862ed913c0fd1138bc4dd2a55d54fb4a707d2ad4b4f3b53b8bbc547733

See more details on using hashes here.

Supported by

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