Getting started

Installation

Install Paeonia directly from its GitHub repository:

pip install git+https://github.com/orbitfold/paeonia.git

Basic model

Construct a bar, place it in a voice, and attach that voice to a score:

from paeonia import Bar, Score, Tonality, Voice

bar = Bar("C E G", tonality=Tonality("C", "major"))
voice = Voice([bar], name="Melody")

score = Score(title="First score")
score["melody"] = voice

Pitches retain their written spelling, so enharmonic pitches can sound alike without becoming structurally equal:

from paeonia import Pitch

d_sharp = Pitch.parse("D#4")
e_flat = Pitch.parse("Eb4")

assert d_sharp != e_flat
assert d_sharp.midi == e_flat.midi

Tonal transformations

paeonia.Bar.apply_tonality() reinterprets scale degrees in a target tonality. paeonia.Bar.quantize_to_tonality() instead moves pitches to nearby members of a pitch collection by chromatic distance.

source = Bar("C E F# G", tonality=Tonality("C", "major"))

transformed = source.apply_tonality(Tonality("D", "dorian"))
quantized = source.quantize_to_tonality(Tonality("D", "major"))

Rendering and playback

Model transformations and conversion to MIDI or LilyPond strings require no external executables. Engraved display with show() requires LilyPond; audio preview with play() requires FluidSynth.