Platonic Music Engine logo

Xenophanes release

I’m very proud to announce the next official release of the Platonic Music Engine: Xenophanes

It has been ten months since the previous release. And even though I didn’t get to all the things I wanted to, there are still some significant changes under the hood.

Tuning

The tuning section of the code received the most attention in this release and there’s still much more to do.

The biggest change was that we now generate our audio frequencies starting from the lowest number and going up. Before we generated one octave of frequencies around the 440 Hz area and then generated all the octaves above in one loop and all the octaves below in another loop. This new method is cleaner, results in less code, and, most importantly, is about twice as fast.

I added the ability to indicate the interval to be divided in terms of cents instead of just the standard interval names. So instead of just “c-12/ED:P8” we can also write “c-12/1200” or any other value of cents. This adds some nice flexibility. Eventually we'll add more interval names as well.

Created a function that analyzes your tuning and produces an octave table. Thus something like “c4” will point to pitch value 61 in standard tuning or maybe 84 in some other tuning. These values are calculated for all the standard pitches in all octaves. One big benefit to this is that in our instrument definitions we no longer use frequency values but instead this pitch notation and the PME calculates everything for us.

At the same time as above I finally got the octave ranges to be based on C instead of A.

The PME now also analyzes your tuning comparing it to our Platonic 5-limit Just Intonation reference. Lots of interesting statistics. This can only be seen in the log.

In a move that gets us closer to Scala compatibility, I have moved all the built in tunings and scales into their own files in separate directories. The format is very simple and somewhat similar to Scala’s.

Misc

I expanded the command line options to include just about everything that one could reasonably use.

Improved the logging function by allowing for varargs. This is a Lua thing but basically allows us to pass more information to our log.

Conclusion

Plus lots of bug fixes and smaller features that were added/improved upon that do not warrant mention here. It might not seem like a huge improvement over the previous release but the changes are significant and result in code that is faster and easier to read and manipulate.

Copyright 2015 David Bellows

Colophon