Transponieren mit dem Computer

Das Notensystem mit den Noten von C bis H bzw. B ist nicht gerade zum Rechnen gemacht worden. Ich habe mich mit dem Problem beschäftigt, mit einem Programm Noten zu transponieren.

Wozu das gut sein soll? Ich habe ein Notenschreibprogramm (CAPELLA), mit dem ich eigentlich sehr zufrieden bin. Aber manchmal habe ich Übungen, von denen nur 1 oder 2 Takte notiert sind und dann der nette Hinweis man möge diese Übung doch in alle Tonarten transponieren. Am besten macht man das Transponieren im Kopf (weil das übt). Aber die Noten als Gedächtnisstütze sind auch nicht zu verachten.

Wie bringt man dem Computer das Transponieren bei? Wie weiß er, dass er auf einem Gb gelandet ist und nicht auf einem F#.

Hilfreich dabei ist die sogenannte «line of fifths» [LoF]. Sie ist aus dem Quintenzirkel abgeleitet, aber eine unendliche Linie. Der mittlere Teil sieht folgendermassen aus:

F##B#E#A#D#G#C#F#BEADGCFBbEbAbDbGbCbFbBbb

Als erstes bestimmt man den Abstand zwischen der Ausgangs- und der Zieltonart. Beispiel: wir wollen von Eb nach G transponieren. Dazu müssen wir in der LOF um 4 Positionen nach links gehen.

Jetzt wenden wir dies auf jeden Ton an. Beispiel: aus Db wird F, aus A wird C#.

Computer brauchen aber Zahlen, also ordnen wir jeder Note in der LoF in Zahl zu, welche ist egal, aber ich habe aus einer Quelle übernommen, dass F eine Null bekommt und dass die positiven Zahlen links, die negativen Zahlen nach rechts laufen. Das sieht dann so aus:

F##B#E#A#D#G#C#F#BEADGCFBbEbAbDbGbCbFbBbb
14131211109876543210-1-2-3-4-5-6-7-8

Bei Instrumenten ist gewöhnlich angegeben, um wieviel sie transponieren. Wenn ein Instrument x Halbtonschritte transponiert, dann ergeben sich die Schritte in der LoF aus dieser Formel:

(x * 7) modulo 12. Beispiel: Ein Instrument transponiert um eine große Sexte nach oben, X ist also 9.

9 * 7 = 63. Davon solange 12 abgezogen, bis ein Rest bleibt: 63 – 5 * 12 = 3. Wir müssen also in der LoF 3 Schritte nach rechts gehen.

Die modulo-Funktion ist nicht immer gleich definiert. Die Funktion in Python liefert für uns den richtigen Wert, in C# liefert sie ein für uns falsches Ergebnis.

Das Altsaxophon, dass 9 Halbtöne nach unten transponiert, muss man rechnen: -9 * 7 = -63. Dann wird solange 12 addiert, bis ein Rest bleibt. In diesem Fall -3. Wir müssen also in der LoF 3 Schritte nach links gehen.

Jetzt kommt noch eine zusätzliche Komplikation, dass wir in der Regel nicht mehr als 6 Vorzeichen wollen. Bei mehr Vorzeichen wählen wir eine enharmonische Verwechslung. Man kann sich die ganzen Überlegungen sparen, in dem man sich einmal eine Tabelle macht:

Transposition123456789101112
LoF-Schritte523416143250

Jetzt kommen wir zum Transponieren der einzelnen Noten. In meinem Fall lagen die Noten als Buchstaben vor, also als C,D,E,etc.

Zuerst brauchen wir für jede Note eine Zahl. Die Zahl holen uns aus einer Tabelle, die der LoF entspricht: F =0, C =1, G = 2, etc.

Ausserdem müssen wir noch die Vorzeichen einer Zahl zu ordnen. Ein Kreuz entspricht 1, zweite Kreuze 2, ein B -1, zwei Bs -2, etc.

Mit folgender Formel können wir dann jeder Note eine Position (= eine Zahl) zuordnen:

Position = Notenzahl + 7 * Vorzeichenzahl (siehe LoF-Tabelle)

Um die transponierte Position zu erhalten, addieren wir einfach die LoF-Schritte.

NeuePosition = Position + LoF-Schritte.

Die neue Note erhält man durch: NeuePosition modulo 7.

Die Anzahl der Vorzeichen durch (NeuePosition + 7) / 7 – 1 (Ganzzahl-Division)

Jetzt fehlt nur noch die Bestimmung der richtigen Oktave. Dazu ein andermal.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.