Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 3: Vormleer

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>

   

3115:

Stemvoering

 

 

 

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