Wie sollte man ein Programm nicht schreiben

Es währe schön, wenn Notationsprogramme keinen Babysitter bräuchten, der ihnen einen guten Satz beibringt. Unser Ziel mit LilyPond war es, genau so ein System zu schreiben: ein Programm, das schöne Musik („Notenstich“) automatisch produziert.

Auf den ersten Blick scheint es, dass Notation einer direkten Hierarchie folgt. So etwa in dem Beispiel unten, mit zwei System, die Takte beinhalten.

Ist nicht auch Programmieren die Kunst, Hierarchien zu finden und die wirkliche Welt als einen verzweigten Baum darzustellen? Ein naiver Programmierer könnte das obige Beispiel schnell mit einigen geschachtelten Kästen abstrahieren.

Es ist einfach, mit diesem Modell zu programmieren. Es ist klar, wie die Information im Speicher gelagert wird, und Schreibvorgänge können einfach gespiegelt werden. In einer XML-Datei würde es etwa wie folgt aussehen:
  <score>
    <staff>
      <measure id="1">
         <chord length="1/2">
	   <pitch name="c">
         </chord>
         <chord>
	 
	 ....
      </measure>
    </staff>
  </score>

Das ist klar, einfach und sauber. Nach diesem Format werden viele Programme geschrieben. Leider ist es aber auch falsch. Die hierarchische Präsentation funktioniert mit einem Großteil einfacher Musik, zeigt sich aber überfordert mit komplizierterer Notation. Zum Beispiel:

Hier sind einige Annahmen des ersten Beispiels verletzt. Systeme beginnen und enden plötzlich, Stimmen springen zwischen den Systemen hin und her und erstrecken sich über zwei Systeme.

Notation unterscheidet sich von der eigentlichen Musik. Notation ist eine komplizierte Diagrammsprache, die eine oft sehr viel einfachere Musik symbolisiert. Notationsprogramme müssen daher diese Unterscheidung beherrschen.

Weiter: Divide et impera, Ein Entwurf zur automatisierten Notation


Startseite > Über LilyPond > Aufsatz

Andere Sprachen: English, EspaƱol, Français, Japanese.
Über die automatische Sprachauswahl.