mirror of
https://github.com/kennethreitz/pytheory.git
synced 2026-06-05 23:00:20 +00:00
e1c2ef03d7867ae4d31f3911ebbe0309742b7891
Every guide page rewritten with deep music theory content: - Tones: scientific pitch notation, frequency/pitch relationship, temperament history (equal/Pythagorean/meantone), interval table with song examples, circle of fifths - Scales: interval pattern construction, major/minor/harmonic minor theory, all 7 modes with character descriptions and song references, scale degree names and functions, diatonic harmony and common chord progressions (I-IV-V, I-V-vi-IV, ii-V-I) - Chords: triad and seventh chord construction tables, all 12 chord qualities with interval formulas, consonance/dissonance theory (Pythagoras to Plomp-Levelt), beat frequency perceptual ranges - Fretboard: how frets work, string interval explanation, reading fingering notation, 8 alternate tunings with musical context, custom instrument examples (banjo, mandolin) - Playback: waveform physics (harmonics, Fourier), temperament listening guide - Quickstart: updated feature list (6 systems, 40+ scales, 144 chords) - Fix duplicate logo/title in sidebar Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PyTheory: Music Theory for Humans
This (work in progress) library attempts to make exploring music theory approachable to humans.
True Scale -> Pitch Evaluation
>>> from pytheory import TonedScale
>>> c_minor = TonedScale(tonic='C4')['minor']
>>> c_minor
<Scale I=C4 II=D4 III=Eb4 IV=F4 V=G4 VI=Ab4 VII=Bb5 VIII=C5>
>>> c_minor[0].pitch()
523.251130601197
>>> c_minor["I"].pitch(symbolic=True)
440*2**(1/4)
>>> c_minor["tonic"].pitch(temperament='pythagorean', symbolic=True)
14080/27
Audibly play a note (or chord)
>>> from pytheory import play
play(c_minor[0], t=1_000)
Chord Fingerings for Custom Tunings
>>> from pytheory import Tone, Fretboard, CHARTS
>>> tones = (
... Tone.from_string("F2"),
... Tone.from_string("C3"),
... Tone.from_string("G3"),
... Tone.from_string("D4"),
... Tone.from_string("A5"),
... Tone.from_string("E5")
... )
>>> fretboard = Fretboard(tones=tones)
>>>
>>> c_chord = CHARTS['western']["C"]
>>> print(c_chord.fingering(fretboard=fretboard))
(0, 0, 0, 3, 3, 3)
It can also generate charts for all known chords for any instrument (accuracy to be determined!).
✨🍰✨
Description
Languages
Python
100%
