Process MIDI piano with (almost) no pain
Project description
Fortepyan :musical_keyboard:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2f3be7e1dd1997bdb2b0b55d465a72ab58deaf7d562d1f98629d9f021e7ec31
|
|
| MD5 |
9c9eb25e4c3ebeabea715a6adde2d1e8
|
|
| BLAKE2b-256 |
0528da6a11edcfa5e9d4f3b7d9de084696205c01d25a3b80649eeab677647b4a
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1deb3f3b12520690c7ec7841e895fe027f3d13b58c240e235664f4ab0c5b234
|
|
| MD5 |
ac9b88c759876a82c4570324ea0e9f08
|
|
| BLAKE2b-256 |
c37cc6862ed913c0fd1138bc4dd2a55d54fb4a707d2ad4b4f3b53b8bbc547733
|