Skip to main content

musically meaningful pitch and interval types

Project description

pitchtypes

docs (development version)

build PyPI version

tests codecov

License: GPL v3

A library for handling musical pitches and intervals in a systematic way. For other (and mostly compatible) implementations see:

The main goals of this library are:

  • providing types and operations (such as arithmetics, printing and parsing) for common types of pitches and intervals, (in particular spelled pitches and intervals, which are often difficult to handle),
  • providing a generic interface for writing code that is agnostic to the specific pitch or interval types.

Installation

pip install pitchtypes

Minimal Example

import pitchtypes as pt

# write a generic function

def transposeby(pitches, interval):
    return [pitch + interval for pitch in pitches]

# use it with different pitch types

# spelled pitches correspond to written notes in Western notation
spelled_pitches = [pt.SpelledPitch(p)
                   for p in ["C4", "Eb4", "G#4"]]
print(transposeby(spelled_pitches, pt.SpelledInterval("m3:0"))

# spelled pitch classes work the same but they ignore octaves
spelled_pitch_classes = [pt.SpelledPitchClass(p)
                         for p in ["C", "Eb", "G#"]]
print(transposeby(spelled_pitches, pt.SpelledIntervalClass("m3"))

# enharmonic pitches correspond to keys on the piano
enharmonic_pitches = [pt.EnharmonicPitch(p)
                      for p in [60, 63, 68]]
print(transposeby(spelled_pitches, pt.EnharmonicInterval(3))

Output:

[Eb4, Gb4, B4]
[Eb, Gb, B]
[D#4, F#4, B4]

Old Example (delete/adapt?)

For instance, spelled pitch is handled correctly:

>>> from pitchtypes import SpelledPitchClass
>>> p1 = SpelledPitchClass("C#")
>>> p2 = SpelledPitchClass("Gb")
>>> i = p1 - p2
>>> type(i)
<class 'pitchtypes.datatypes.SpelledIntervalClass'>
>>> i
+AA4

Of course, you can also convert spelled pitches to their enharmonic equivalents:

>>> from pitchtypes import SpelledPitch, EnharmonicPitch
>>> spelled = SpelledPitch("C#4")
>>> enharmonic = spelled.convert_to(EnharmonicPitch)
>>> type(enharmonic)
<class 'pitchtypes.datatypes.EnharmonicPitch'>
>>> enharmonic.midi
61
>>> enharmonic.name('sharp')
C#4
>>> enharmonic.name('flat')
Db4

And used continuous log-frequency space (assuming twelve-tone equal temperament for enharmonic pitch):

>>> from pitchtypes import EnharmonicPitch, LogFreqPitch
>>> enharmonic = EnharmonicPitch("A4")
>>> logfreq = enharmonic.convert_to(LogFreqPitch)
>>> logfreq
440.Hz

For more examples, have a look at the Tutorial.ipynb!

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

pitchtypes-0.4.0.tar.gz (37.2 kB view details)

Uploaded Source

Built Distribution

pitchtypes-0.4.0-py3-none-any.whl (39.3 kB view details)

Uploaded Python 3

File details

Details for the file pitchtypes-0.4.0.tar.gz.

File metadata

  • Download URL: pitchtypes-0.4.0.tar.gz
  • Upload date:
  • Size: 37.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.0

File hashes

Hashes for pitchtypes-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a54223bebfbf8ef9a05bd60787aecf20a3d7c72f3e073362336ee89bab19bdab
MD5 d23e6d8050b20fb2ae3e7033a9595fb1
BLAKE2b-256 19063dc97f5b5a071b25c9a67c260caf7eed2c256d183f2921346bc1a322a406

See more details on using hashes here.

File details

Details for the file pitchtypes-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pitchtypes-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 39.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.0

File hashes

Hashes for pitchtypes-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a04e701245d6d810dc416dfa89fbbac2ad341829947ba0eab65473c2f3916a1d
MD5 064a62044f9f33374560f2c2983572a1
BLAKE2b-256 b5239f420fa06f1d66cbcde0dcd2021fc38fa925dc1951a2293bfbbcb9fa0a02

See more details on using hashes here.

Supported by

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