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):

  • python3-dev
  • libasound2
  • lilypond

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 helper.py

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.0.1.tar.gz (29.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pitchr-1.0.1-py3-none-any.whl (47.8 kB view details)

Uploaded Python 3

File details

Details for the file pitchr-1.0.1.tar.gz.

File metadata

  • Download URL: pitchr-1.0.1.tar.gz
  • Upload date:
  • Size: 29.1 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.0.1.tar.gz
Algorithm Hash digest
SHA256 a0f2af3b4586fdcc52cde10df4387f77003a8efb935c11fe3fafe6489b680bbc
MD5 1c74290d922e87fabeb38e2f8c82b47c
BLAKE2b-256 9760233f735d895043e093bdd30e7498bd98b3c39175a70f1e0d2d7479a0ee37

See more details on using hashes here.

File details

Details for the file pitchr-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: pitchr-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 47.8 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.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 de005423edaf819cba682a2bc06ecf8d9bd16293c4dfd02962ecd0d1c7aa02b6
MD5 74311aa3cfb621f89d2077263fed56bc
BLAKE2b-256 1e6e224cc44e7a808e8df26552680b0401e625610cc452931a4038468e464fc3

See more details on using hashes here.

Supported by

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