Skip to main content

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

  1. Enables creation of music by composition of music objects (notes, chords, measures, and staffs)
  2. Unified interface for playing any music object (note.play(), staff.play())
  3. Unified interface for showing any music object (note.show(), staff.show())
  • Spawns an image of the music object
  1. Unified interface for exporting any music object (note.save('note.pdf'), staff.save('staff.pdf'))
  2. 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
  1. Intelligently generates harmonies from your melodies
  2. Finalizes your composition as beautiful standard sheet music
  3. 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

helper_ui

More Detailed Notes

flow

Note() class

Init:

  • pitch ("C#6")
  • duration in beats
  • dynamic (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:

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 and python3 -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


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)

Uploaded Source

Built Distribution

pitchr-1.1.0-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

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

Hashes for pitchr-1.1.0.tar.gz
Algorithm Hash digest
SHA256 fa10faf1b2c26bd7cfd99d994365f393baf839150f7a713d6018d3a96e483c82
MD5 bba71949a04c6241a30e3112132ef803
BLAKE2b-256 f6cf27b4e827185260b6e9201c969259e472b35af18cdad7b8b15aaec9716821

See more details on using hashes here.

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

Hashes for pitchr-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9aaa5be0c3c08260232d67b0bd5f64dff9c77159b5cc7c0349747d7074a5b91
MD5 beda688b3afeb84baa0c61616ce5a358
BLAKE2b-256 25179d821e8b966da0188e2cc35012044f4fe190fa2f2a6cd51c73eb01563d26

See more details on using hashes here.

Supported by

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