CMN: Common Music Notation

An introduction to the CMN format is in Beyond MIDI chapter 16. You can download the manual and the program from the CMN page .

The CMN format looks LISPy as you would expect from a program that is written in LISP. But I don't see a big problem to read and write CMN files with other languages (I've written LISP programs in an earlier life and now usually use Java . I don't regret this step in general but there are really nice LISP properties I miss).

This is how you can read CMN files: build your object tree with the first element of a list as parent node. While XML nodes contain two axes (attributes and children), LISP has one.
Example: (chord (notes b3 g4) q). From a LISP view, notes is a function and b3 and g4 are parameters. The function chord has two parameters (see them?). If you build an object tree in Java , just create a chord object that contains two fields: one contains a reference to an Object with notes and one that it contains has the length of a quarter note.

So you (and your program) don't have to understand LISP. It is possible to extend the CMN format, but you can extend NIFF, too. CMN is extended with functions while NIFF is extended with chunks, but for a program it's the same: Ignore what you don't know. (Ok, one thing is harder in CMN: it ignores what evaluates to nil and you don't know how to evaluate outside LISP but I don't think this is a problem in usual cases.)

Programs exporting CMN: Common Music Notation:

CMN: Common Music Notation

CLISP

CMN: Common Music Notation imports CMN

Programs importing CMN: Common Music Notation:

CMN: Common Music Notation

CLISP

CMN: Common Music Notation exports CMN

Feedback (questions, suggestions, broken links): CMN: Common Music Notation

My new eBook (in German)

Professionell Ankern - vom NLP-Practitioner bis zum Coaching and its Website