Programmier- und Bedienungshandbuch – Auswählende Umstimmungsbünde

˙

12.2.  Auswählende Umstimmungsbünde

Ein Umstimmungsbund ist eine sequenzielle Auflistung von Umstimmungen1 , die nacheinander durchgeführt werden sollen. Wir wollen nun noch eine weitere Konstruktion eines Umstimmungsbundes einführen: den auswählenden Umstimmungsbund.

Ein auswählender Umstimmungsbund ist ein Umstimmungsbund, dem ein besonderer Parameter übergeben wird, der ein Auswahlkriterium dafür darstellt, welche der im Bund aufgelisteten Umstimmungen durchgeführt werden sollen. Dieser Parameter ist (wie gewöhnlich) eine ganze Zahl, die durch die aufrufende Logik entweder explizit angegeben oder in der Form des variablen ABSTAND-Parameter übergeben wird.

Innerhalb des auswählenden Umstimmungsbundes stehen dann Wenn-Dann-Zuweisungen, die angeben, welche Umstimmungen bei welchem Wert des Auswahlparameters durchgeführt werden sollen. Doch nun erst einmal ein Beispiel:

UMSTIMMUNG  
    Auswahl ( X ) = X { 1 -> Susi  
                        2 -> Otto  
                        3 -> Fritz  
                        7 -> Irene }

Wenn dieser Umstimmungsbund mit dem Übergabewert 3 aufgerufen wird, also Auswahl(3) , so wird die Umstimmung Fritz durchgeführt. Bei einem Übergabewert von 7 wir entsprechend Irene aktiviert. Jeder Wert, der nicht 1,2,3 oder 7 ist bewirkt keine Umstimmung.

Die Syntax dieser Konstruktion erinnert an eine Mischung aus Stimmungslogik und Umstimmungsbund. Und genau das stellt der auswählende Umstimmungsbund auch dar. Wieder haben wir eine Art „Auslöser“ und eine „Aktion“, nämlich den Vergleichswert und die angegebene Umstimmung. Vor der geschweiften Klammer wird der Name des Parameters angegeben, der mit den in den Klammern angegebenen Werten verglichen werden soll.

Diese Konstruktion können wir nun erweitern, denn es kann durchaus erwünscht sein, dass auch der auswählende Umstimmungsbund mehr als nur einen Parameter bekommt, und alle bis auf den auswählenden Parameter an die aufgelisteten Umstimmungen weiter gibt. Hier wird ganz analog den mehrparametrigen Umstimmungsbünden verfahren, und dabei bekommt die explizite Angabe des Namens des Auswahlparameters vor den geschweiften Klammern ihren Sinn:

UMSTIMMUNG  
   Transpo ( X , Wohin ) = X { 0 -> Transponiere_hoch(Wohin)  
                               1 -> Transponiere_runter(Wohin) }

Wird diese Umstimmung mit den Übergabewerten Transpo(1,6) aufgerufen, so wird die Umstimmung Transponiere_runter mit dem weitergereichten Übergabewert 6 durchgeführt.

Wie in einem Umstimmungsbund können Sie auch mehrere Umstimmungen auflisten, die beim Erkennen eines Vergleichswertes nacheinander ausgeführt werden sollen. Dies erspart die Programmierung eines zusätzlichen Umstimmungsbundes, falls mehrere Parameter verändert werden sollen:

UMSTIMMUNG  
    Auswahl(X) = X { 0 -> Halb1,Expandiere  
                     1 -> Reset  
                     2 -> Reset  
                     3 -> Reset }

Der auswählende Parameter muss nicht unbedingt als erster in der Parameterliste angegeben werden. Deshalb wird sein Name vor die geschweifte Klammer geschrieben. Außerdem können Sie in einem auswählenden Umstimmungsbund auch die ANSONSTEN–Option benutzen. Dies bedeutet, dass die der ANSONSTEN–Option zugeordneten Umstimmungen durchgeführt werden, wenn kein anderer Vergleich passt:

UMSTIMMUNG  
    Verschiebe(X) = X { 0         -> Halb1,Expandiere  
                        ANSONSTEN -> Transponiere }

Hier würden also im Falle von X=0 nacheinander die Umstimmungen Halb1 und Expandiere durchgeführt, und ansonsten immer die Umstimmung Transponiere.

Insbesondere im Zusammenhang mit dem ABSTAND–Parameter und der ANSONSTEN- Option bildet der auswählende Umstimmungsbund vielfältige Möglichkeiten. Man denke z.B. an eine mutierende Stimmung, die Septime des Dominantseptakkordes zu groß nehmen soll. Mit Hilfe des auswählenden Umstimmungsbundes ist dies kein Problem2 :
LOGIK  
     Septbetonung Taste S = Halb12 [ FORM Sept -> Betone(ABSTAND) ]  
 
HARMONIE  
     Sept = { 0,4,*7,10 }  
 
UMSTIMMUNG  
     Betone(dist) = dist { 7         -> GrosseSept  
                           ANSONSTEN -> Halb12 }  
 
     GrosseSept = [ @,@,@,@,@,@+Faktor ]  
 
INTERVALL  
     Faktor = 24 Wurzel 2  
 
UMSTIMMUNG  
     Halb12     = { Halb,Expandiere }  
     Expandiere = [ << 12 >> ]  
 
TON  
     a = 440  
 
TONSYSTEM  
     Halb = 69 [ a ] 2 Faktor

˙

Deutsch English
©2006
Letzte Veröffentlichung auf dem Server:
Mittwoch, 29. März 2006, 11.51 Uhr Weltzeit