Common Style Constraints Feedback

• Mar 17, 2017 - 15:31

I would like to share an addition that I have in mind which I would like to implement during the Google Summer of Code internship.

User Story

As a composer I want to get feedback if my piece has not met the historical rules, like counterpoint,
So that I learn more about the historical rules and so that I can write a piece that perfectly meets the standards that I intended to produce, e.g. Baroque style.

Solution

Please use the following topics for discussion.

Giving Feedback

The most effective way I can think of is coloring the conflicting notes red or yellow when historical rules are not met. When hovering over the note it will show a tooltip with the rule that is broken and some history background.

Selecting History Rules

I think that the most straight forward way is to select a musical period, e.g. Renaissance. I can image that some people would like to customize their own profile, then the musical period would be a perfect filter to find existing rules that you would like to use.

How to define constraints

Initially I think it is best to create a scripting language where you can detect your constraint using certain code contracts. For example, you want to detect if there is a parallel fifth in the score:

function parallel_fifth_constraint(noteA, noteB, nextNoteA, nextNoteB) {
  // check if the interval is a fifth
  if (intervalBetween(noteA, noteB) == interval.quinto) {
    // check if notes changed
    if (noteA != nextNoteA && noteB != nextNoteB) {
      // check if the next interval is also a fifth
      if (intervalBetween(nextNoteA, nextNoteB) == interval.quinto) {
        return true;
      }
    }
  return false;
}

Comments

In reply to by Isaac Weiss

The given feature is indeed partially implemented. Coloring notes works perfect and the intervals are correctly analysed. Yet something is bothering me. The feature should work as a validator. Would a validator plugin type be an interresting addition? I would imagine that a validator plugin will be triggered when notes are inserted in te score. That way you would get realtime feedback. I also think its best to provide a score interval iterator for scripters, so that such features need less effort.

Do you still have an unanswered question? Please log in first to post your question.