Pitch Class Sets for Python
Bruce H. McCosar
Welcome, and thank you for downloading pcsets. This is the third
official (non-beta) release. With this release, I start the pcsets
tutorial see "About this Package", below).
Learning about Pitch Class Sets is easy -- the four modules presented
here are, like many Python programs, self documenting. They work well
with pydoc <http: docs.python.org="" lib="" module-pydoc.html="">.
Learning how to use these for practical compositional purposes, on the
other hand ... well, that takes a lot of individual experimentation. I
have started a short tutorial, which will eventually demonstrate some
of the techniques I've learned. However, you are a much better judge
of what you want to know than I -- please, try the module out, and
most of all, have fun learning something new.
About Pitch Class Sets
Pitch Class Sets are a mathematical model for analyzing and composing
music. Each note 'C' through 'B' has an equivalent pitch class number
0 through 11. Sets of these numbers may be operated on by mathematical
functions such as transpose and invert.
The goal of this project is to, eventually, have:
* A Python library capable of fully implementing Pitch Class Sets
and their common operations, as well as several convenience
functions to bring these abstract concepts to the real world.
(Mapping pitch classes to note names, for instance).
* A tool for composition. Some applications are harmonization,
chord voicing generation, and melodic motif creation.
* More exotic goals -- creation of new chordal elements, musical
progressions, and harmonic relationships.
About this Package
The API will not change for any of the modules referred to as 'core'.
Bugs will be fixed and new modules will be added, but you won't wake
up one day and find that PcSets wants input in statcoulombs or Dutch
Guldens. In the version 2 series, the core will always behave like
the core. Occasionally new functionality will be introduced, but the
original functionality will never be 'broken' -- that's why I spent all
that time writing unit tests.
This is the core as of 2.0.0:
The base class, PcSet, includes methods that operate on single
sets, such as inversion and transposition.
Operations on two or more sets, such as subset_of(a,b).
Generates the entire catalog of 224 prime sets as a Python
object. Since this takes a while to generate, it saves the
catalog in a pickle file (catalog.pkl) for future use.
The 'universal translator' from PcSets to named notes and
Any *new* modules will enter as 'experimental', however, not core.
Experimental modules can change at any time.
With version 2.0.1, I introduced the first experimental module:
Implements the ToneRow class. Unlike PcSets, which are
unordered, a ToneRow consists of all 12 pitches in an
There is a lot of good information on this subject in the Straus book
referenced below. I've also put a lot of time into writing documentation
strings for the module; a run through it with pydoc will probably tell
you somewhere between too much and far too much ;-)
Another experimental module in development (and still in hiding,
until I settle on a usable, workable interface):
* Operations on the familiar chords and scales -- sort of a noteops
for the common language of chord-scale theory.
These modules won't make it to the core until at least version 2.1.
Finally, I've made a start on the tutorial. My hope is that working
through the documentation -- even for features that haven't been added
yet! -- will let me streamline the API and introduce more relevant
features in future releases.
Be sure to check back at the project website for updates. I seem to
have embraced Google Code's slogan, "Release early, release often."