Prof.Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel 3: Vormleer
Hogeschool Gent : School of Arts
3112:
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 |