Skip to content

Nospoko/fortepyan

Repository files navigation

Fortepyan 🎹

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

About

[fɔrˈtɛ.pjan]

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •