Skip to main content

A Python library for symbolic music analysis, focusing on chord voicings and tensions.

Project description

PyVoicing

A Python library for symbolic music analysis, focusing on chord voicings and tensions, providing intuitive Python classes for working with pitches, chromas, intervals, and voicings.

  • Pythonic syntax
  • Lightweight, no dependency

PyVoicing is currently in Alpha stage. API and type hints are subject to change.

Installation

pip install pyvoicing

Usage

from pyvoicing import Pitch, Chroma, Interval, Voicing
# shorthands
from pyvoicing import P, C, I, V
# or simply
from pyvoicing import *

# Pitch
middle_c = Pitch('C', 4)
middle_c.value  # 60
~middle_c       # 60, shorthand
middle_c.octave # 4
middle_c.offset # 0
middle_c.name   # 'C'
middle_c.chroma # Chroma("C")

g = Pitch('G')  # default octave=4
b = P('B')      # shorthand P for Pitch
e = P('E5')     # octave as part of the string

a = e >> 'P4'   # transpose up a perfect 4th
a <<= 12        # transpose down an octave

# Voicing
Cmaj7 = Voicing([middle_c, g, b, e], root='C')
Cmaj7       # Voicing('C4 G4 B4 E5', 'C')
~Cmaj7      # ['1', '5', 'maj7', 'maj5']

C69 = Cmaj7 + a - 'B4' + 'D5'
~C69        # ['1', '5', '6', '9', 'maj3']
C69 >> 3    # Voicing('Eb4 Bb4 C5 F5 G5', 'Eb')

Bm7b5 = V('B D5 F5 A5', 'B')  # shorthand
~Bm7b5      # ['1', 'min3', 'b5', 'min7']
Bm7b5.root = 'G'
~Bm7b5      # ['maj3', '5', 'dom7', '9']
G9 = V(Bm7b5)

C9 = G9 // 'C'
C9          # Voicing('E4 G4 Bb4 D5', 'C')
C913 = V(C9)
C913[1] >>= 'M2'
C913        # Voicing('E4 A4 Bb4 D5', 'C')
~C913       # ['maj3', '13', 'dom7', '9']
C913.drop2  # Voicing('Bb3 E4 A4 D5', 'C')
~C913.drop2 # ['dom7', 'maj3', '13', '9']

License

PyVoicing is licensed under the MIT License.

Contributing

Feature suggestions and bug reports are welcome!

Changelog

See CHANGELOG.md for version history and release notes.

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

pyvoicing-0.1.2.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

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

pyvoicing-0.1.2-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file pyvoicing-0.1.2.tar.gz.

File metadata

  • Download URL: pyvoicing-0.1.2.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyvoicing-0.1.2.tar.gz
Algorithm Hash digest
SHA256 78f8981bccbe58e8f2eeb34e5df79f4e4bd984bea11996d83cbc7adf98006062
MD5 572d8883c3a74c2a5c71a3b3cfa9225b
BLAKE2b-256 68fe9d0e4bd9d0bdab9a7e88e51f977f60862f21bc63d846e40c9299d314d92c

See more details on using hashes here.

File details

Details for the file pyvoicing-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pyvoicing-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyvoicing-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7507105de6862de4c623a54096e964e1d47d88c5f20db0b233b631651e718ec7
MD5 e9e906e24bf76b041adb27c39ec04204
BLAKE2b-256 8a0e7099bf1c4f12bbaf711ec524cbb41db52ea44ead0e578fc55d67ca51e19e

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