Skip navigation

Ramo

For my last year thesis I’ve been working on this program in Java called Ramo. It’s main use is to help people learn the rules of musical harmony.

The user interface consists of a score, and room underneath it to fill in the correct scale, and the analysis of the chords. The teacher will create a score which is not fully complete, the student can then complete it and let the program check if he did it by the rules.

Two people wrote a first version last year, and I’m continuing their work. Especially the rulesystem needed cleaning up. Eventually I ended up rewriting it from scratch, using a different approach. In the original version, each rule was hard-coded as a java class. In the new version, rules are stored in XML, and a distinction is made between a rule description (the code together with some parameters), and rule instances, being a rule with certain values for the parameters.

For instance, a rule description might be : every note in voice V must be between note N and note M. A specific instance would then be, every note in the Tenor voice must be between C3 and C5.

The code for loading, saving and evaluating rules has been written. The next step is to build an editor to edit the descriptions and instances. That way it will be far easier to experiment with different approaches to writing the rules.

Every rule is of a certain type. The rule mentioned above would be a ‘voice’ rule. The type of a rule determines what kind of ‘domain element’ the rule can act upon. For instance, a voice rule can act upon the individual notes of a specific voice.