A few weeks ago I wrote a blog post about a Python program I was writing to generate chains of chords with parsimonious voice leading from the set of all natural harmonics up to the 9th partial in the string section of the European orchestra. That program has grown dramatically. It is now possible to specify that the program favor chords with a similar width and average pitch as compared to an input chord. The tool will also favor chords with specific Interval Vector characteristics (e.g. favoring a preponderance of certain Interval Classes). Furthermore, input parameters can now change over time allowing the algorithm to generate sequences that have specific, desirable, expressive qualities. Usability is also vastly improved with the addition of a small routine that outputs all possible orchestrations of a given chord.

Download Parsimony Tool 0.9.2 (Dropbox link)

Unfortunately, all this new functionality comes with a cost in terms of processing time. Generating twenty eight chords, each of which contains five notes results in a processing time of approximately eighteen hours on my Macbook Air! (Remember, the program has to check 82! / (5! (82 – 5)!)  or 27,285,336 subsets for the desired characteristics.) Smaller chords speedup the job considerably of course. However, in order to process very complex musical challenges with the Parsimony Tool, I will have to either improve efficiency or take advantage of iPython’s sophisticated parallel computing capabilities…

Output chords can currently be visualized by copying the ACToolbox-formatted output into Paul Berg’s program. A music21-based tool to write output directly into Lilypond is in the works however.

Here’s a flowchart that may help you visualize some of the most important structural elements of the Parsimony Tool.

parsimony tool

Leave a comment