A Python library and framework for composing and playing music.
Project description
Pitchr
A python library and framework for composing music. Pitchr on PyPI
Targets most Linux environments.
Features
- Enables creation of music by composition of music objects (notes, chords, measures, and staffs)
- Unified interface for playing any music object (
note.play()
,staff.play()
) - Unified interface for showing any music object (
note.show()
,staff.show()
)
- Spawns an image of the music object
- Unified interface for exporting any music object (
note.save('note.pdf')
,staff.save('staff.pdf')
) - Flexible manipulation of music
- easily access notes by indexing a measure by beat:
note0 = measure[0]
- edit note attributes' pitch via methods
transpose
,octave_up
,augment
- Intelligently generates harmonies from your melodies
- Finalizes your composition as beautiful standard sheet music
- Enables interactive development in Jupyter Notebook
Installation
To install: pip3 install pitchr
.
Other dependencies that must be installed (available via your package manager):
- libasound2
- lilypond
Pitchr downloads models to ~/.pitchr/
. Set the PITCHR_PATH
environment variable to change this behavior.
Documentation
Documentation is hosted on Github Pages here
Getting Started
from pitchr import *
# Instantiate notes
n = Note(pitch='C4', duration=1.0)
# Play them
n.play()
# Write music
m = Measure([
Note('C', 1.0),
Note('D', 1.0),
Note('E', 1.0),
Note('D', 1.0),
])
# See what you've written
m.show()
# Export to PDF
m.save('MySong.pdf')
Helper UI
To access the helper UI, run from the command line: python3 -m pitchr.helper
More Detailed Notes
Note() class
Init:
pitch
("C#6"
)duration
in beatsdynamic
(piano, forte, crescendo)articulation
(staccato, accent, fermata)
Note()
from pitchr import *
note1 = Note("C4", 1, "forte")
note1.mingus_note # 'C-4'
note1.duration # 1
note1.dynamic # "forte"
note1.augment() or note1.diminish()
Chords
note2. = Note("E4", 1)
chord1 = Chord([note1, note2])
chord1.determine() # "Major third"
Measure is a collection of Notes
measure1 = Measure([note1, note2])
measure1.contains(note1) # True
measure1.append(note3)
Staff is a collection of Measures
Init:
measures
clef
voice
https://thedpws.github.io/pitcher/
staff1 = music.Staff(measure1, Clef.TREBLE, Voice.PIANO)
Part is a collection of Staffs
part1 = Part(staff1, tempo, time_signature, key_signature)
part1.add_staff(staff2)
part1.time_signature = 3/4
Score is a collection of Parts
score1 = Score("My Song", "Wonderful Subtitle", "Author Me", "me@email.com")
score1.get_author() # "Author Me"
score1.get_title() # "My Song"
score1.add_part(part1)
Harmony generation
from pitchr.harmony_maker import build_harmony
my_melody = Staff(my_measures)
my_harmony = build_harmony(my_melody)
my_harmony.play()
Running all Pitchr tests
./run_pitchr_tests.sh
Contributing
Setting up dependencies
- python3.8 is required for pitchr and python3 should link to python3.8 to run the tests
ln -s /usr/bin/python3.8 /usr/bin/python3
- To create the virtual environment,
cd
into the project directory andpython3 -m venv env
- To install dependencies to the virtual environment,
source env/bin/activate && pip3 install -r requirements.txt
- Install these dependencies using your local package manager (ex.
sudo apt install python3-dev python3-venv libasound2 libasound2-dev lilypond
):python3-dev
python3-venv
libasound2
libasound2-dev
lilypond
Working on the project
- Before working, activate the environment by
source env/bin/activate
- Deactivate by
deactivate
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
pitchr-1.1.0.tar.gz
(30.6 kB
view details)
Built Distribution
pitchr-1.1.0-py3-none-any.whl
(49.2 kB
view details)
File details
Details for the file pitchr-1.1.0.tar.gz
.
File metadata
- Download URL: pitchr-1.1.0.tar.gz
- Upload date:
- Size: 30.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa10faf1b2c26bd7cfd99d994365f393baf839150f7a713d6018d3a96e483c82 |
|
MD5 | bba71949a04c6241a30e3112132ef803 |
|
BLAKE2b-256 | f6cf27b4e827185260b6e9201c969259e472b35af18cdad7b8b15aaec9716821 |
File details
Details for the file pitchr-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: pitchr-1.1.0-py3-none-any.whl
- Upload date:
- Size: 49.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9aaa5be0c3c08260232d67b0bd5f64dff9c77159b5cc7c0349747d7074a5b91 |
|
MD5 | beda688b3afeb84baa0c61616ce5a358 |
|
BLAKE2b-256 | 25179d821e8b966da0188e2cc35012044f4fe190fa2f2a6cd51c73eb01563d26 |