Prof.Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 3: Vormleer

Hogeschool Gent : School of Arts


<Terug naar inhoudstafel kursus>

   

3112:

Symmetrische Harmonie 2

 

 

Het in het vorige voorbeeld beschreven algoritme heeft een aantal eigenschappen die de muzikale bruikbaarheid en overtuigingskracht ervan nogal beperken. Vooreerst kan de beperking tot niet meer dan twee samenklanken niet direkt aanleiding geven tot een grote harmonische variatie, en vooral, wordt bij het uitwerken van de harmonie geen rekening gehouden met het verloop van de opgegeven melodie. In die zin zou men kunnen stellen dat het programma eigenlijk eerder een soort eenvoudig kontrapunt (punctus contra punctus) beoefent.

Dat hieraan vrij makkelijk kan worden verholpen hebben we gepoogd te bewijzen via het hier volgende programma.

Omwille van de afwisseling zijn we hierbij uitgegaan van een alternatieve mogelijkheid tot het opzetten van een symmetrische harmonie. We beschouwen deze keer een toonsysteem opgebouwd rond Tc% alsvolgt:

 

Tc%-5 Tc%-3 Tc%-1 Tc% Tc%+1 Tc%+3 Tc%+5

 

In intervallen gezien vanuit Tc% is dit 1/2, 1, 1, 1, 1, 1, 1/2. De aldus gevormde toonladder (een overigens bestaande toonladder in heel wat oost- europese volksmuziek) bestaat uit zeven toontrappen en heeft zowel een vierde als een vijfde graad. Met de vijfde graad is nu echter wel iets heel bijzonders aan de hand: de kwintnoot vormt een tritonus met de grondnoot ervan. De 'dominant' in dit toonsysteem heeft dan ook eenzelfde funktie als het akkoord op de 2e en 7e graad.

 

De regels voor dit harmoniesysteem legden we vast alsvolgt:

Er worden zes mogelijke akkoorden bepaald:

1. Eerste graad: Tc , Tc + 3 , Tc + 7

Tonaliteitsbevestigend akkoord

2. Tweede/zevende graad: Tc + 1, Tc + 5, Tc + 11

Volledig Propulsief akkoord met dubbele leidtoon

3. Derde graad: Tc + 3 , Tc + 7, Tc + 11

Dit is een semi-propulsief akkoord, omdat het slechts 1 op te lossen leidtoon bevat.

4. Vierde graad: Tc+5, Tc+ 9 , Tc

Dit is een tonaliteitsbevestigend subdominant akkoord. Merk op dat het perceptorisch makkelijk als dusdanig kan worden gehoord omdat de eerste terts waaruit het is opgebouwd groot is. Het kontrasteert dan ook met het tonikaakkoord. Funktioneel gezien kan een een rol krijgen die overeenkomt met die van het dominant akkoord in klassieke westerse tonale muziek.

5. Vijfde graad: Tc + 7, Tc + 11, Tc +1

Volledig propulsief akkoord met dubbele leidtoon

6. Zesde graad: Tc + 3 , Tc + 9 , Tc

Dit akkoord -hoewel het een tritonus bevat, wordt als doorgangsakkoord zonder dwingende funktie gezien en behandeld.

 

Ook hier weer hebben we alles in het werk gesteld op onze harmoniekalkullus konsistent en volledig te maken voor het gehele kromatische systeem. Ook hier zullen laddervreemde noten aanleiding geven tot modulaties.

Merk overigens op dat de verzameling van noten die niet tot deze ladder behoren op zich een heletoonsreeks vormt waaruit 1 trap ontbreekt. (2,4,6,8,10).

Ook dit programma gaat uit van een op te geven binair partituurbestand waaruit de te harmonizeren stem kan worden geselekteerd.

 

REM $DYNAMIC

COMMON SHARED Tc%: ' tonal center

COMMON SHARED P%(): ' score array

COMMON SHARED Pv%: ' given voice (= 1,3,5,7...)

COMMON SHARED Px%: ' added voice 1

COMMON SHARED Py%: ' added voice 2 (= odd and <> Pv%, <> Px%)

COMMON SHARED Pxhigh%, Pxlow%: ' range for added voice 1

COMMON SHARED Pyhigh%, Pylow%: ' range for added voice 2

COMMON SHARED Dp% ' midi-port adress

COMMON SHARED Ver$

COMMON SHARED i&: ' note-counter

 

DECLARE SUB Logo ()

DECLARE SUB Blank1024 ()

DECLARE SUB Getparam1 ()

DECLARE SUB Grade1chord ()

DECLARE SUB Grade2chord ()

DECLARE SUB Grade3chord ()

DECLARE SUB Grade4chord ()

DECLARE SUB Grade5chord ()

DECLARE SUB Grade6chord ()

DECLARE SUB Rbin ()

DECLARE SUB Uit (byte%)

DECLARE SUB Mpuuart ()

DECLARE SUB Mplay ()

DECLARE SUB Melodize ()

DECLARE SUB Binder ()

DECLARE SUB Writfil ()

 

DIM SHARED P%(0 TO 100, 0 TO 15)

Ver$ = "Music Composition Software by Dr.Godfried-Willem RAES 1993 [V1.0]"

Dp% = &H330

SolveTo% = 0

Mpuuart

 

CLS

Logo

Rbin

Getparam1

Blank1024

 

Vnp% = P%(0, Pv%)

 

i& = 0

DO

IF P%(i&, Pv%) > 0 AND P%(i&, Pv% + 1) > 0 THEN

' look for the next note:

ii& = i& + 1

DO

Nn% = P%(ii&, Pv%)

ii& = ii& + 1

LOOP UNTIL (Nn% > 0) OR (ii& > UBOUND(P%, 1))

Npv% = (Nn% - Tc%) MOD 12: ' tonale graad t.o.v. Tc%

 

IF SolveTo% THEN

' de variabele SolveTo% geeft de graad van het akkoord dat diende geschreven te worden op grond van het vorige akkoord.

SELECT CASE SolveTo%

CASE 1

Grade1chord

SolveTo% = 0

CASE 2

Grade2chord

SolveTo% = 1

CASE 3

Grade3chord

SolveTo% = 0

CASE 4

Grade4chord

SolveTo% = 0

CASE 5

Grade5chord

SolveTo% = 0

CASE 6

Grade6chord

SolveTo% = 0

END SELECT

ELSE

SELECT CASE (P%(i&, Pv%) - Tc%) MOD 12

CASE 0

SELECT CASE Npv%

CASE 0, 3, 7

Grade1chord

CASE 1, 5, 9, 11

Grade4chord

CASE 4, 6

Grade4chord

CASE 2, 8, 10

Grade6chord

END SELECT

CASE 1

SELECT CASE Npv%

CASE 0, 3, 7

Grade2chord

SolveTo% = 1

CASE 11, 5, 9

Grade5chord

SolveTo% = 4

CASE 1

Grade5chord

SolveTo% = 5

CASE 2

Tc% = (Tc% + 2) MOD 12

Grade2chord

SolveTo% = 1

CASE 4

Tc% = (Tc% + 4) MOD 12

Grade4chord

SolveTo% = 1

CASE 6

Tc% = (Tc% + 6) MOD 12

Grade5chord

SolveTo% = 1

CASE 10

Tc% = (Tc% + 10) MOD 12

Grade6chord

SolveTo% = 1

CASE 8

Tc% = (Tc% + 8) MOD 12

Grade4chord

SolveTo% = 1

END SELECT

CASE 2

SELECT CASE Npv%

CASE 3, 6, 10

Tc% = (Tc% + 3) MOD 12

Grade2chord

SolveTo% = 1

CASE 1, 4, 7

Tc% = (Tc% + 1) MOD 12

Grade2chord

SolveTo% = 1

CASE 2

Tc% = (Tc% + 7) MOD 12

Grade5chord

SolveTo% = 1

CASE 9, 0

Tc% = (Tc% + 9) MOD 12

Grade4chord

SolveTo% = 1

CASE 11

Tc% = (Tc% + 3) MOD 12

Grade3chord

SolveTo% = 1

CASE 8, 5

Tc% = (Tc% + 5) MOD 12

Grade6chord

SolveTo% = 1

END SELECT

CASE 3

SELECT CASE Npv%

CASE 0

Grade3chord

SolveTo% = 1

CASE 1, 5, 7, 9

Grade1chord

CASE 2

Tc% = (Tc% + 2) MOD 12

Grade2chord

SolveTo% = 1

CASE 3

Grade3chord

SolveTo% = 6

CASE 4

Tc% = (Tc% + 4) MOD 12

Grade2chord

SolveTo% = 1

CASE 6, 10

Tc% = (Tc% + 3) MOD 12

Grade4chord

SolveTo% = 1

CASE 8

Tc% = (Tc% + 8) MOD 12

Grade5chord

SolveTo% = 1

CASE 11

Grade3chord

SolveTo% = 5

END SELECT

CASE 4

SELECT CASE Npv%

CASE 3, 6, 10

Tc% = (Tc% + 3) MOD 12

Grade2chord

SolveTo% = 1

CASE 5, 9, 0

Tc% = (Tc% + 5) MOD 12

Grade2chord

SolveTo% = 1

CASE 4

Tc% = (Tc% + 9) MOD 12

Grade5chord

SolveTo% = 1

CASE 2, 11

Tc% = (Tc% + 11) MOD 12

Grade4chord

SolveTo% = 1

CASE 1, 8

Tc% = (Tc% + 1) MOD 12

Grade3chord

SolveTo% = 1

CASE 7

Tc% = (Tc% + 7) MOD 12

Grade4chord

SolveTo% = 1

END SELECT

CASE 5

SELECT CASE Npv%

CASE 0, 1, 3, 5, 7, 9, 11

Grade4chord

CASE 2

Tc% = (Tc% + 2) MOD 12

Grade3chord

SolveTo% = 1

CASE 4

Tc% = (Tc% + 4) MOD 12

Grade2chord

SolveTo% = 1

CASE 6

Tc% = (Tc% + 6) MOD 12

Grade2chord

SolveTo% = 1

CASE 8

Tc% = (Tc% + 8) MOD 12

Grade4chord

SolveTo% = 1

CASE 10

Tc% = (Tc% + 10) MOD 12

Grade5chord

SolveTo% = 1

END SELECT

CASE 6

SELECT CASE Npv%

CASE 7, 11, 1

P%(i&, Px%) = (Tc% + 8) MOD 12

P%(i&, Py%) = Tc%

Tc% = (Tc% + 7) MOD 12

SolveTo% = 1

CASE 5, 9, 0

P%(i&, Px%) = (Tc% + 4) MOD 12

P%(i&, Py%) = (Tc% + 11) MOD 12

Tc% = (Tc% + 5) MOD 12

SolveTo% = 1

CASE 6, 2

Tc% = (Tc% + 11) MOD 12

Grade5chord

SolveTo% = 1

CASE 4, 8

Tc% = (Tc% + 1) MOD 12

Grade4chord

SolveTo% = 1

CASE 3

Tc% = (Tc% + 3) MOD 12

Grade3chord

SolveTo% = 1

CASE 10

Tc% = (Tc% + 9) MOD 12

Grade2chord

SolveTo% = 1

END SELECT

CASE 7

SELECT CASE Npv%

CASE 1, 5, 9

Grade1chord

CASE 0, 3, 7

Grade5chord

SolveTo% = 1

CASE 11

Grade3chord

SolveTo% = 2

CASE 2

Tc% = (Tc% + 2) MOD 12

Grade2chord

SolveTo% = 1

CASE 4

Tc% = (Tc% + 4) MOD 12

Grade3chord

SolveTo% = 1

CASE 6

Tc% = (Tc% + 6) MOD 12

Grade2chord

SolveTo% = 1

CASE 8

Tc% = (Tc% + 8) MOD 12

Grade2chord

SolveTo% = 1

CASE 10

Tc% = (Tc% + 10) MOD 12

Grade6chord

SolveTo% = 1

END SELECT

CASE 8

SELECT CASE Npv%

CASE 9, 0, 4

P%(i&, Px%) = (Tc% + 10) MOD 12

P%(i&, Py%) = (Tc% + 2) MOD 12

Tc% = (Tc% + 9) MOD 12

SolveTo% = 1

CASE 7, 10, 2

P%(i&, Px%) = (Tc% + 6) MOD 12

P%(i&, Py%) = Tc% MOD 12

Tc% = (Tc% + 7) MOD 12

SolveTo% = 1

CASE 1, 8

Tc% = (Tc% + 1) MOD 12

Grade5chord

SolveTo% = 1

CASE 3, 5

Tc% = (Tc% + 3) MOD 12

Grade4chord

SolveTo% = 1

CASE 6

Tc% = (Tc% + 3) MOD 12

Grade2chord

SolveTo% = 1

CASE 11

Tc% = (Tc% + 11) MOD 12

Grade6chord

SolveTo% = 1

END SELECT

CASE 9

SELECT CASE Npv%

CASE 0, 5, 1, 3, 11, 7

Grade4chord

CASE 9

Grade6chord

CASE 2

Tc% = (Tc% + 2) MOD 12

Grade5chord

SolveTo% = 1

CASE 4

Tc% = (Tc% + 4) MOD 12

Grade4chord

SolveTo% = 1

CASE 6

Tc% = (Tc% + 6) MOD 12

Grade3chord

SolveTo% = 1

CASE 8

Tc% = (Tc% + 8) MOD 12

Grade2chord

SolveTo% = 1 CASE 10

Tc% = (Tc% + 10) MOD 12

Grade2chord

SolveTo% = 1

END SELECT

CASE 10

SELECT CASE Npv%

CASE 9, 0, 4

P%(i&, Px%) = (Tc% + 8) MOD 12

P%(i&, Py%) = (Tc% + 2) MOD 12

Tc% = (Tc% + 9) MOD 12

Solve% = -1

SolveTo% = 1

CASE 11, 2, 6

P%(i&, Px%) = Tc% MOD 12

P%(i&, Py%) = (Tc% + 4) MOD 12

Tc% = (Tc% + 11) MOD 12

Solve% = -1

SolveTo% = 1

CASE 3, 10

Tc% = (Tc% + 3) MOD 12

Grade5chord

SolveTo% = 1

CASE 5, 8

Tc% = (Tc% + 5) MOD 12

Grade4chord

SolveTo% = 1

CASE 1

Tc% = (Tc% + 1) MOD 12

Grade6chord

SolveTo% = 1

CASE 7

Tc% = (Tc% + 7) MOD 12

Grade3chord

SolveTo% = 1

END SELECT

CASE 11

SELECT CASE Npv%

CASE 0, 3, 7

Grade2chord

SolveTo% = 1

CASE 1, 11

Grade5chord :' not solved! chord remains!!!

CASE 5, 9

Grade5chord

SolveTo% = 4

CASE 2

Tc% = (Tc% + 2) MOD 12

Grade4chord

SolveTo% = 1

CASE 4

Tc% = (Tc% + 4) MOD 12

Grade5chord

SolveTo% = 1

CASE 6

Tc% = (Tc% + 6) MOD 12

Grade4chord

SolveTo% = 1

CASE 8

Tc% = (Tc% + 8) MOD 12

Grade3chord

SolveTo% = 1

CASE 10

Tc% = (Tc% + 10) MOD 12

Grade2chord

SolveTo% = 1

CASE ELSE

Grade2chord

END SELECT

END SELECT

END IF

P%(i&, 0) = Tc%

 

' leg nu de toegevoegde noten in de juiste tessituur:

DO

P%(i&, Px%) = P%(i&, Px%) + 12

LOOP UNTIL P%(i&, Px%) >= Pxlow%

DO

P%(i&, Py%) = P%(i&, Py%) + 12

LOOP UNTIL P%(i&, Py%) >= Pylow%

END IF

' schrijf de dynamiek zoals in de opgegeven stem:

P%(i&, Px% + 1) = P%(i&, Pv% + 1)

P%(i&, Py% + 1) = P%(i&, Pv% + 1)

i& = i& + 1

LOOP UNTIL i& > UBOUND(P%, 1)

 

Melodize

Binder

Mplay

Writfil

CLS

END

 

SUB Binder

Deze procedure is identisch aan de gelijknamige procedure in het vorige programmavoorbeeld. We hernemen de kode hier dus niet.

END SUB

 

SUB Blank1024

idem.

END SUB

 

SUB Getparam1

idem.

END SUB

 

De procedures waarmee de akkoorden worden gevormd zien eruit alsvolgt:

 

SUB Grade1chord

' This procedure writes a chord on the first grade of Tc% (DO-MIb-SOL)

IF P%(i&, Pv%) MOD 12 = Tc% THEN

P%(i&, Px%) = (Tc% + 7) MOD 12

P%(i&, Py%) = (Tc% + 3) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 3) MOD 12 THEN

P%(i&, Px%) = (Tc% + 7) MOD 12

P%(i&, Py%) = Tc%

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 7) MOD 12 THEN

P%(i&, Px%) = (Tc% + 3) MOD 12

P%(i&, Py%) = Tc%

END IF

END SUB

 

SUB Grade2chord

' This procedure writes a chord on the second grade of Tc%(REb-FA-SI)

IF P%(i&, Pv%) MOD 12 = (Tc% + 1) MOD 12 THEN

P%(i&, Px%) = (Tc% + 5) MOD 12

P%(i&, Py%) = (Tc% + 11) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 11) MOD 12 THEN

P%(i&, Px%) = (Tc% + 1) MOD 12

P%(i&, Py%) = (Tc% + 5) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 5) MOD 12 THEN

P%(i&, Px%) = (Tc% + 11) MOD 12

P%(i&, Py%) = (Tc% + 1) MOD 12

END IF

END SUB

 

SUB Grade3chord

' This procedure writes a chord on the third grade of Tc% (MIb-SOL-SI)

IF P%(i&, Pv%) MOD 12 = (Tc% + 3) MOD 12 THEN

P%(i&, Px%) = (Tc% + 11) MOD 12

P%(i&, Py%) = (Tc% + 7) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 7) MOD 12 THEN

P%(i&, Px%) = (Tc% + 11) MOD 12

P%(i&, Py%) = (Tc% + 3) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 11) MOD 12 THEN

P%(i&, Px%) = (Tc% + 7) MOD 12

P%(i&, Py%) = (Tc% + 3) MOD 12

END IF

END SUB

 

SUB Grade4chord

' This procedure writes a chord on the fourth grade of Tc% (FA-LA-DO)

IF P%(i&, Pv%) MOD 12 = (Tc% + 5) MOD 12 THEN

P%(i&, Px%) = (Tc% + 9) MOD 12

P%(i&, Py%) = Tc%

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 9) MOD 12 THEN

P%(i&, Px%) = (Tc% + 5) MOD 12

P%(i&, Py%) = Tc%

END IF IF P%(i&, Pv%) MOD 12 = Tc% THEN

P%(i&, Px%) = (Tc% + 5) MOD 12

P%(i&, Py%) = (Tc% + 9) MOD 12

END IF

END SUB

 

SUB Grade5chord

' This procedure writes a chord on the fifth grade of Tc% ( SOL-SI-REb)

IF P%(i&, Pv%) MOD 12 = (Tc% + 7) MOD 12 THEN

P%(i&, Px%) = (Tc% + 11) MOD 12

P%(i&, Py%) = (Tc% + 1) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 11) MOD 12 THEN

P%(i&, Px%) = (Tc% + 7) MOD 12

P%(i&, Py%) = (Tc% + 1) MOD 12

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 1) MOD 12 THEN

P%(i&, Px%) = (Tc% + 11) MOD 12

P%(i&, Py%) = (Tc% + 7) MOD 12

END IF

END SUB

 

SUB Grade6chord

' This procedure writes a chord on the sixth grade of Tc% (LA-DO-MIb)

IF P%(i&, Pv%) MOD 12 = (Tc% + 9) MOD 12 THEN

P%(i&, Px%) = (Tc% + 3) MOD 12

P%(i&, Py%) = Tc%

END IF

IF P%(i&, Pv%) MOD 12 = (Tc% + 3) MOD 12 THEN

P%(i&, Px%) = (Tc% + 9) MOD 12

P%(i&, Py%) = Tc%

END IF

IF P%(i&, Pv%) MOD 12 = Tc% THEN

P%(i&, Px%) = (Tc% + 9) MOD 12

P%(i&, Py%) = (Tc% + 3) MOD 12

END IF

END SUB

SUB Logo

' analoog als in vorig programma.

END SUB

 

SUB Melodize

' idem. zoals in vorig programma

END SUB

 

SUB Mplay

' idem.

END SUB

 

SUB Mpuuart

' idem.

END SUB

 

SUB Rbin

' idem.

END SUB

 

SUB Uit (byte%)

' idem

END SUB

 

SUB Writfil

' idem

END SUB


Filedate: 930429 / 2012-11-26

Terug naar inhoudstafel kursus: <Index Kursus>

Naar homepage dr.Godfried-Willem RAES