Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel 3: Vormleer
Hogeschool Gent : Departement Muziek & Drama
3115:
Stemvoering in kontrapunt en harmonie
Een van de klassieke regels van de harmonieleer, maar dit geldt ook voor kontrapunt in het algemeen, stelt dat de stemvoering zo vloeiend mogelijk dient te verlopen. Deze eis wordt steeds verklaard vanuit de vereiste tot zingbaarheid en de moeilijkheden die koorstemmen ondervinden wanneer zij grotere intervallen juist dienen te treffen. Hoewel voor koren eigenlijk nog slechts weinig muziek wordt gekomponeerd -zeker in een modern of experimenteel idioom-, heeft men deze regel ook bij instrumentale schriftuur behouden. De verklaring uit hoofde van moeilijkheid in toontreffen kan hier niet worden volgehouden, tenzij dan voor werkelijk extreme intervalsprongen. Dat men er nietemin toch aan vasthoudt heeft een dieper liggende audioperceptorische verklaring. Het is immers zo, dat de luisteraar, wanneer een melodische lijn grote intervalsprongen waarneemt, hij deze melodische lijn niet meer als een enkele lijn gaat waarnemen. Het melodisch 'Gestalt' gaat verloren. Merk terloops overigens op dat vele komponisten van dit feit gebruik hebben gemaakt om ook op zuiver monofone instrumenten toch polyfone muziek te vertolken (cfr. Vioolpartitas van J.S.Bach...). Intervalsprongen kunnen dan ook niet in absolute zin worden veroordeeld, maar wel dienen we te weten wat er de estetische en audioperceptorische gevolgen van zullen zijn.
Voor harmonie en kontrapunt in algemene zin kunnen we stellen dat hoe kleiner de intervalsprongen binnen de stemmen zullen zijn, hoe beter aan deze voorwaarde kan worden voldaan. Dergelijke regel kan voor elke vorm van kontrapunt en harmonie op relatief eenvoudige wijze in een algoritme worden geimplementeerd.
De hier verder volgende procedure 'Melodize' gaat uit van vierstemmigheid, waarbij P%(i&,Pv%) de opgegeven stem omvat en de akkoordkeuze van de geschreven harmonie op een tijdsmoment i& geschreven staat in P%(i&,Px%), P%(i&,Py%), P%(i&,Pz%).
De voor elke stem aan deze noot voorafgaande noot wordt opgeslagen in de variabelen Vnx%, Vny% en Vnz%. De logische variabelen Melox%, Meloy% en Meloz% worden geset (niet-0), vanzodra voor de betreffende stem x,y of z een minimaal interval werd gevonden, na onderlinge verwisseling van noten tussen de stemmen.
SUB Melodize
' bereken de centrale noot van de tessituur voor elke stem, door het gemiddelde te berekenen van de bij het begin van het programma opgegeven tessituurgrenzen:
Pxmid% = (Pxlow% + Pxhigh%) / 2
Pymid% = (Pylow% + Pyhigh%) / 2
Pzmid% = (Pzlow% + Pzhigh%) / 2
' Zoek de plaats van de eerste noot in de partituur P%()
i& = 0
DO
Vnp% = P%(i&, Pv%)
i& = i& + 1
LOOP UNTIL Vnp% > 0
Vnx% = P%(i& - 1, Px%)
Vny% = P%(i& - 1, Py%)
Vnz% = P%(i& - 1, Pz%)
' leg nu de melodielijnen zo dat alle sprongen rond Pxmid% resp. Pymid% ,Pzmid% draaien
i& = 0
DO
IF P%(i&, Pv%) THEN
FOR j% = 1 TO UBOUND(P%, 2) STEP 2
IF j% = Px% THEN
IF P%(i&, Px%) - Pxmid% > 6 THEN
DO
P%(i&, Px%) = P%(i&, Px%) - 12
LOOP UNTIL P%(i&, Px%) - Pxmid% <= 6
END IF
IF P%(i&, Px%) - Pxmid% < -6 THEN
DO
P%(i&, Px%) = P%(i&, Px%) + 12
LOOP UNTIL P%(i&, Px%) - Pxmid% >= -6
END IF
END IF
IF j% = Py% THEN
IF P%(i&, Py%) - Pymid% > 6 THEN
DO
P%(i&, Py%) = P%(i&, Py%) - 12
LOOP UNTIL P%(i&, Py%) - Pymid% <= 6
END IF
IF P%(i&, Py%) - Pymid% < -6 THEN
DO
P%(i&, Py%) = P%(i&, Py%) + 12
LOOP UNTIL P%(i&, Py%) - Pymid% >= -6
END IF
END IF
IF j% = Pz% THEN
IF P%(i&, Pz%) - Pzmid% > 6 THEN
DO
P%(i&, Pz%) = P%(i&, Pz%) - 12
LOOP UNTIL P%(i&, Pz%) - Pzmid% <= 6
END IF
IF P%(i&, Pz%) - Pzmid% < -6 THEN
DO
P%(i&, Pz%) = P%(i&, Pz%) + 12
LOOP UNTIL P%(i&, Pz%) - Pzmid% >= -6
END IF
END IF
NEXT j%
Als een noot gelijk is aan haar voorganger binnen dezelfde stem, leg ze in hetzelfde oktaaf en set de logische variabele: aan deze stem mag niet meer geraakt worden in verdere melodizeringsprocedures.
IF Vnx% MOD 12 = P%(i&, Px%) MOD 12 THEN
IF Vnx% THEN P%(i&, Px%) = Vnx%
Melox% = -1
ELSE
Melox% = 0
END IF
IF Vny% MOD 12 = P%(i&, Py%) MOD 12 THEN
IF Vny% THEN P%(i&, Py%) = Vny%
Meloy% = -1
ELSE
Meloy% = 0
END IF
IF Vnz% MOD 12 = P%(i&, Pz%) MOD 12 THEN
IF Vnz% THEN P%(i&, Pz%) = Vnz%
Meloz% = -1
ELSE
Meloz% = 0
END IF
' ga nu na of door omwisseling van noten tussen de stemmen, x,y,z de intervallen niet kunnen worden geminimaliseerd. We onderzoeken eerst de prime, dan de sekonden, en verder grotere intervallen om zodoende een meer melodische stemvoering te verkrijgen. Deze for-next lus telt de intervallen af: Dit kan verbeterd worden, door een andere volgorde te bepalen. Zoals het algoritme hier loopt, krijgt een tritonus-sprong voorrang op een kwintsprong, iets wat klassieke gezien beslist niet wenselijk is.
FOR Interval% = 1 TO 12
IF Melox% = 0 THEN
IF Meloy% = 0 THEN
IF ABS((Vnx% MOD 12) - (P%(i&, Py%) MOD 12)) < Interval% THEN
SWAP P%(i&, Px%), P%(i&, Py%)
P%(i&, Px%) = ((Vnx% \ 12) * 12) + (P%(i&, Px%) MOD 12)
P%(i&, Py%) = ((Vny% \ 12) * 12) + (P%(i&, Py%) MOD 12)
Melox% = -1
END IF
END IF
IF Melox% + Meloz% = 0 THEN
IF ABS((Vnx% MOD 12) - (P%(i&, Pz%) MOD 12)) < Interval% THEN
SWAP P%(i&, Px%), P%(i&, Pz%)
P%(i&, Px%) = ((Vnx% \ 12) * 12) + (P%(i&, Px%) MOD 12)
P%(i&, Pz%) = ((Vnz% \ 12) * 12) + (P%(i&, Pz%) MOD 12)
Melox% = -1
END IF
END IF
END IF
IF Meloy% = 0 THEN
IF Melox% = 0 THEN
IF ABS((Vny% MOD 12) - (P%(i&, Px%) MOD 12)) < Interval% THEN
SWAP P%(i&, Py%), P%(i&, Px%)
P%(i&, Py%) = ((Vny% \ 12) * 12) + (P%(i&, Py%) MOD 12)
P%(i&, Px%) = ((Vnx% \ 12) * 12) + (P%(i&, Px%) MOD 12)
Meloy% = -1
END IF
END IF
IF Meloy% + Meloz% = 0 THEN
IF ABS((Vny% MOD 12) - (P%(i&, Pz%) MOD 12)) < Interval% THEN
SWAP P%(i&, Py%), P%(i&, Pz%)
P%(i&, Py%) = ((Vny% \ 12) * 12) + (P%(i&, Py%) MOD 12)
P%(i&, Pz%) = ((Vnz% \ 12) * 12) + (P%(i&, Pz%) MOD 12)
Meloy% = -1
END IF
END IF
END IF
IF Meloz% = 0 THEN
IF Melox% = 0 THEN
IF ABS((Vnz% MOD 12) - (P%(i&, Px%) MOD 12)) < Interval% THEN
SWAP P%(i&, Px%), P%(i&, Pz%)
P%(i&, Px%) = ((Vnx% \ 12) * 12) + (P%(i&, Px%) MOD 12)
P%(i&, Pz%) = ((Vnz% \ 12) * 12) + (P%(i&, Pz%) MOD 12)
Meloz% = -1
END IF
END IF
IF Meloz% + Meloy% = 0 THEN
IF ABS((Vnz% MOD 12) - (P%(i&, Py%) MOD 12)) < Interval% THEN
SWAP P%(i&, Py%), P%(i&, Pz%)
P%(i&, Py%) = ((Vny% \ 12) * 12) + (P%(i&, Py%) MOD 12)
P%(i&, Pz%) = ((Vnz% \ 12) * 12) + (P%(i&, Pz%) MOD 12)
Meloz% = -1
END IF
END IF
END IF
NEXT Interval%
' Onthoudt de vorige noot in elke stem:
Vnx% = P%(i&, Px%)
Vny% = P%(i&, Py%)
Vnz% = P%(i&, Pz%)
END IF
i& = i& + 1
LOOP UNTIL i& > UBOUND(P%, 1)
END SUB
Filedate: 920312 / 2001-04-23
Terug naar inhoudstafel kursus: <Index Kursus> |
Naar homepage dr.Godfried-Willem RAES |