mirror of
https://github.com/kennethreitz/kennethreitz.org.git
synced 2026-06-05 22:50:17 +00:00
48 lines
2.5 KiB
Markdown
48 lines
2.5 KiB
Markdown
# PyTheory: Music Theory for Humans
|
|
|
|
[`pytheory`](https://github.com/kennethreitz/pytheory) is a Python library that simplifies working with music theory concepts. It provides a simple and intuitive interface for representing musical elements such as notes, scales, chords, and intervals, making it easier to work with music theory in Python.
|
|
|
|
<span class="sidenote">PyTheory represents the intersection of Kenneth's programming expertise and his passion for music composition. By bringing computational thinking to music theory, it enables algorithmic exploration of harmonic relationships that traditional notation makes cumbersome.</span>
|
|
|
|
## Features
|
|
|
|
- **Note Representation**: PyTheory allows you to represent musical notes using the standard Western notation (`A`, `Bb`, `C#`, etc.), enabling you to work with notes in different formats.
|
|
- **Scale Generation**: The library provides functions for generating scales based on different modes, such as major, minor, pentatonic, and blues scales, allowing you to explore different musical scales.
|
|
- **Chord Construction**: PyTheory supports constructing chords from notes, intervals, or scale degrees, making it easy to create and analyze chords in different keys.
|
|
- **Interval Calculation**: The library allows you to calculate intervals between notes, enabling you to determine the distance between two pitches in a musical context.
|
|
|
|
This project is highly experimental, and is more of a thought exercise than a practical library. It aims to explore how music theory concepts can be represented and manipulated using Python, and to provide a foundation for further research and development in this area.
|
|
|
|
## Installation
|
|
|
|
You can install `pytheory` using pip:
|
|
|
|
```bash
|
|
$ pip install pytheory
|
|
```
|
|
|
|
## Usage
|
|
|
|
Create a `Note` object:
|
|
|
|
```pycon
|
|
>>> import pytheory
|
|
|
|
>>> 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
|
|
```
|
|
|
|
I'm not sure if this is useful, but it's fun to play with, and it has enhanced my understanding of music theory— especially the `symbolic` parameter.
|
|
|
|
<span class="sidenote">The symbolic parameter demonstrates PyTheory's unique approach to music computation—rather than just calculating numeric frequencies, it can express pitch relationships as mathematical expressions, revealing the underlying mathematical beauty of musical harmony.</span>
|