https://github.com/hoffa/pyogi
A simpler music notation for casual piano learners
https://github.com/hoffa/pyogi
Last synced: 2 months ago
JSON representation
A simpler music notation for casual piano learners
- Host: GitHub
- URL: https://github.com/hoffa/pyogi
- Owner: hoffa
- License: other
- Created: 2018-09-15T03:40:03.000Z (almost 7 years ago)
- Default Branch: main
- Last Pushed: 2024-10-28T23:32:15.000Z (8 months ago)
- Last Synced: 2024-11-09T22:38:49.619Z (8 months ago)
- Language: Python
- Homepage:
- Size: 24.4 MB
- Stars: 133
- Watchers: 5
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# pyogi
[](https://github.com/hoffa/notation/actions/workflows/build.yml)
[](https://creativecommons.org/licenses/by-nc-nd/4.0/)A simpler music notation for casual piano learners.
## Why?
I'm bad at piano but I'm trying to learn by myself, and I find modern music notation overwhelming.
For example:
1. Why does the note corresponding to a line on the [staff]() depend on (1) the [clef](https://en.wikipedia.org/wiki/Clef), (2) the [key signature](https://en.wikipedia.org/wiki/Key_signature), and (3) the [accidental]() next to a note? I need to look in 3 places just to know which key to press.
1. Why have both C♯ and D♭ when they correspond to the same key?
1. Why aren't staff lines for different [octaves](https://en.wikipedia.org/wiki/Octave) consistent? If a note is on a solid line, the same note one octave higher is on a blank line.## Example
Schubert's Allegretto in Pyogi notation

See the [`testdata/output/pdf`](testdata/output/pdf) directory for more examples.
## The notation in 1 minute
- Thick lines are [C notes]().
- The higher the note, the higher the pitch.
- White notes are naturals.
- Black notes are sharps.There are no explicit flats, rests, note values, time signatures, key signatures, etc. Play what sounds good.
## Usage
Convert a [MusicXML](https://en.wikipedia.org/wiki/MusicXML) file to a PDF in Pyogi notation:
```bash
make init
.venv/bin/python src/main.py score.mxl
```## Development
Set up dependencies:
```bash
make init
```Run tests:
```bash
make test
```If the rendering changes, tests can be quickly updated with:
```bash
UPDATE=1 make test
```