Skip to main content

Utilities to work with pitches, convert between midinotes, frequency and notenames

Project description

pitchtools provides a set of functions to work with musical pitches.

Features

  • convert between frequencies, midinotes and notenames

  • microtones are fully supported

  • split a pitch into its multiple components (pitch class, octave, microtonal deviation, etc.)

  • transpose a pitch taking its spelling into consideration

  • create custom pitch converters to work with custom reference frequencies, or modify the reference frequency globally

Documentation

https://pitchtools.readthedocs.io/en/latest/

Examples

Convert some note names to frequencies

>>> from pitchtools import *
>>> eflat_scale = "4Eb 4F 4G 4Ab 4Bb 5C 5D".split()
>>> for note in eflat_scale:
...     # convert notename to frequency using the default reference frequency (442 Hz)
...     freq = n2f(note)
...     # convert frequency to midi
...     midinote = f2m(freq)
...     print(f"{note} = {freq:.1f}Hz (midi = {midinote})")
4Eb = 312.5 Hz (midi = 63.0)
4F  = 350.8 Hz (midi = 65.0)
4G  = 393.7 Hz (midi = 67.0)
4Ab = 417.2 Hz (midi = 68.0)
4Bb = 468.3 Hz (midi = 70.0)
5C  = 525.6 Hz (midi = 72.0)
5D  = 590.0 Hz (midi = 74.0)

The same but with a different reference frequency

from pitchtools import *
ebscale = "4Eb 4F 4G 4Ab 4Bb 5C 5D".split()
cnv = PitchConverter(a4=435)
for note in ebscale:
    # Convert to frequency with default a4=442 Hz
    freq = cnv.n2f(note)
    midinote = cnv.[Of2m(freq)
    print(f"{note} = {freq} Hz (midinote = {midinote})")

Microtones

Microtones are fully supported, either as fractional midinotes or as notenames.

>>> from pitchtools import *
>>> n2m("4C+")
60.5
>>> n2m("4Db-10")
60.9
>>> m2n(61.2)
4C#+20

Microtonal notation

Midinote

Notename

60.25

4C+25 / 4C>

60.45

4C+45

60.5

4C

60.75

4Db-25

61.5

4D-

61.80

4D-20

63

4D#

63.5

4D#+

63.7

4E-30


Installation

pip install pitchtools

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

pitchtools-1.16.2.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

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

pitchtools-1.16.2-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file pitchtools-1.16.2.tar.gz.

File metadata

  • Download URL: pitchtools-1.16.2.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.22

File hashes

Hashes for pitchtools-1.16.2.tar.gz
Algorithm Hash digest
SHA256 62a5e78ab47ec457201ac004d59ef23f70167fc4c2306c573bf000b41a572090
MD5 3791e294b7a70a9d50690eb93e44a2fc
BLAKE2b-256 084265a5a27050a0b2ee673b13b92c47530ec981135c869673fa0ab9d25a6a16

See more details on using hashes here.

File details

Details for the file pitchtools-1.16.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pitchtools-1.16.2-py3-none-any.whl
Algorithm Hash digest
SHA256 06f041f3c224513ed39ccaa1744e9dcd742e5aee6a767c21bd1013d0425bf6b3
MD5 25be6c88e8507d9fc9557e263c219d5b
BLAKE2b-256 f45da178d5c50199575d9d81ce60526f619df2b0bd3e483f308ca3fee102c8ee

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