Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>   Naar volgend programma-voorbeeld: 'Crossing' - Alvin Lucier

1091:

[890908]

Luc BREWAEYS: 'Due Cose belle ha il mondo : l'amore e la morte'

Toepassingsvoorbeeld

Ontwikkeling van een programma voor de realisatie van de vierstemmige elektronische partijen voor 'Due Cose belle ha il mondo : l'amore e la morte' van Luc Brewaeys, in het kader van de Week van de Nieuwe Muziek in 1989.

Hernomen en geaktualiseerd: december 1998, voor de CD opname in De Singel met Champs d'Action.

Probleemanalyse:

Uit aandachtige lezing van de partituur (voor piano,kamerorkest en live- electronics) blijkt dat de vierstemmige partij voor de sinustonen waarmee de ringmodulatoren worden gestuurd , een tessituur omvatten van meer dan zes oktaven. Bovendien worden er ononderbroken glissandi in voorgeschreven die eveneens over vele oktaven zijn uitgesmeerd...

De eenvoudigste ogenschijnlijke oplossingen voor een realisatie van deze partijen in real-time zijn :

De eerste eenvoudigste methode brengt het probleem dat , gezien sinusgeneratoren nu eenmaal geen muziekinstrumenten zijn, dat het ondoenlijk is daarmee snel en precies de gevraagde tonen in te stellen. Voorts , aangezien de bediening via een draaiknop gebeurt is het onmogelijk plots van de ene toon op de andere over te schakelen. Alle overgangen tussen gevraagde tonen zouden dan ook als eerder onregelmatige glissandi klinken. Een supplementair probleem is, dat er geen preciese sinusgeneratoren bestaan waarmee het gehele gevraagde tessituurbereik in een enkel regelbereik in te stellen is ! Sinusgeneratoren zijn bijna steeds per frekwentiedecade instelbaar : d.w.z van 20 Hz - 200Hz, dan van 200Hz tot 2000Hz en van 2000Hz tot 20.000Hz... De bezwaren aan toepassing van deze methode zijn zo groot, dat besloten moet worden dat ze artistiek gezien ontoelaatbaar is.

De tweede methode komt tegemoet aan het verlangen van de komponist, de diverse tonen afgescheiden en precies aan de ringmodulatoren toe te voeren. Alle voorgeschreven tonen komen immers overeen met gestemde getemperde muzikale noten, die op een klavier kunnen worden gespeeld. De problemen hier worden evenwel veroorzaakt door:

Op grond hiervan en de hieruit voortspruitende artistieke ingrepen op de kompositie, moet ook deze aanpak verworpen worden.

De laatste mogelijkheid die nog open blijft is dan, de integrale uitvoering met behulp van een daarvoor te schrijven komputerprogramma. Maar zelfs in dit geval blijft toch nog heel wat hardware noodzakelijk :

Te gebruiken apparatuur (versie 1989):

Eens we de nodige hardware op de juiste manier aangesloten hebben, dient uiteraard nog een geschikt interaktief programma voor de komputer geschreven te worden. Volgend programma werd dan ook ontwikkeld om de sinustoonpartituur speelbaar te maken . De hier gebruikte programmeertaal is Quickbasic (van MicroSoft) en werd gekompileerd. De gegevens met de juiste noten uit de partituur werden in data-statements aan het einde van het programma geplaatst. In principe is het een sekwencer programma, dat echter zowel vooruit als achteruit kan lopen , en waarbij de gehele ritmiek aan de speler wordt overgelaten. (zoniet zou er nooit met dirigent in repetitie een stuk , of een maat kunnen hernomen worden).

'Initialisatie : instelbaar door de speler - via schermbesturing
CLS : DEFINT A - Z
LOCATE 25, 1: PRINT " Godfried-Willem RAES - Experimental Music-Software 1988/89"
LOCATE 1, 10
PRINT "Programma voor Toshiba T1000 & Logos Midi-poort op &H378"
LOCATE 2, 10
PRINT " 'Due cose belle ha il mondo : l'amore e la morte...' "
LOCATE 3, 10
PRINT " komponist: Luc BREWAEYS "
DP = &H378: CP = DP + 1: SP = DP + 2: SH = INP(SP): 'T1000-prn adressen
LOCATE 10, 10: INPUT "Set output-level sine-waves (1-127) ?", VOLUME
GOSUB BLANK
LOCATE 10, 10: INPUT "Select Voice Bank (Bank 6 for Sine) ?", BANK
GOSUB BLANK
LOCATE 10, 10: INPUT "Select Voice Nr.( Nr.47 for Sinus ) ?", VOICE
GOSUB BLANK
LOCATE 10, 10: INPUT "Set Memory protect ON or OFF (0 or1)?", MEMPROT
GOSUB BLANK
LOCATE 10, 10: INPUT "Set Configuration to nr.0-16 ( 2 ! )?", CONFIG
GOSUB BLANK
LOCATE 10, 10: INPUT "Set Portamento-time 0-127 ? ", PORTIME
GOSUB BLANK
LOCATE 10, 10: INPUT "Set Pitch-bend range ( 1 !) ?", BEND: GOSUB BLANK
LOCATE 10, 10: INPUT "Glissando by bend (0) or by microtones (1)?", GLIDE
GOSUB BLANK
LOCATE 10, 10: INPUT "Steprate - glissando-speed (1-10) ?", GLSPD
GOSUB BLANK
'alle vragen werden aan de gebruiker gesteld en door hem beantwoord.
'*****************
 
'De volgende routines versturen de ingebrachte gegevens naar de aangesloten
'midi-apparatuur ( de FB01's). De sturing maakt gebruik van SYSTEM EXCLUSIVES
'de inhoud van de variabele PARAMETER is ontleend aan de manual bij de FB01
'de inhoud van de variabele GEGEVENS werd eerder door de gebruiker ingebracht
 
FOR I = 0 TO 3
PARAMETER = &H21: GEGEVENS = MEMPROT: GOSUB SYSEX
PARAMETER = &H22: GEGEVENS = CONFIG: GOSUB SYSEX
PARAMETER = &H4: GEGEVENS = BANK: GOSUB SYSEX
PARAMETER = &H5: GEGEVENS = VOICE: GOSUB SYSEX
PARAMETER = 0: GEGEVENS = 1: GOSUB SYSEX
PARAMETER = &HA: GEGEVENS = 0: GOSUB SYSEX
NEXT I
 
PARAMETER = &H9: 'panning
GEGEVENS = 0
I = 0: GOSUB SYSEX
I = 2: GOSUB SYSEX
GEGEVENS = 127
I = 1: GOSUB SYSEX
I = 3: GOSUB SYSEX
FOR I = 0 TO 3
PARAMETER = &HB: GEGEVENS = PORTIME: GOSUB SYSEX
PARAMETER = &HC: GEGEVENS = BEND: GOSUB SYSEX
NEXT I GOSUB MIDIINIT
 
'begin partituurdatainleesroutine : alle noten uit de partituur 'worden in een array ingelezen.
NOTTOT = 110
DIM S(6, NOTTOT + 10)
FOR J = 0 TO NOTTOT
FOR I = 0 TO 6
READ S(I, J)
NEXT I
NEXT J
'I=0 modulatiesignaal 1,I=1 id.2,I=2 id.3,I=3 id.4
'hier staan de midi-codes voor de te spelen noten
'I=4 maatnummer partituur
'I=5 kanaalnummer waar een glissando begint ( 1-4)
'I=6 richting van de glissando +1 ,0 , -1
 
LOCATE 10,10:PRINT"Data Array Filled - READY TO GO! Space=Next Note "
'hier wordt aan de speler gezegd welke toetsen hij dient te gebruiken
 
 
'********************* START SPEEL-ROUTINE **********************************
'spatiebalk is volgende stap- minteken is vorige stap- * is break
 
TSTKEY:
K$ = INKEY$
IF K$ = " " THEN TEL = TEL + 1
IF K$ = "-" THEN TEL = TEL - 1: IF TEL < 0 THEN TEL = 0
IF K$ = "*" THEN K$ = "": GOSUB ALLOFF: LOCATE 10, 10: PRINT " B REAK"
IF K$ = "" THEN GOTO TSTKEY
LOCATE 12, 10: PRINT TEL; " MAAT NUMMER="; S(4, TEL), "gliss on RM";
S(5,TEL);" "; S(6, TEL)
FOR I = 0 TO 3
LOCATE 13 + I, 20: PRINT S(I, TEL); " = Noot Modulator "; I + 1
NEXT I
GOSUB MISEND
IF S(4, TEL) = 190 THEN GOSUB EINDE
GOTO TSTKEY:
'einde van de eigenlijke partituurvertolkingsroutine
'---------------------------------------------------------------------------
EINDE:
GOSUB BLANK
LOCATE 23, 10: PRINT " E I N D E "
END
 
'***************************************************************************
'MIDI -stuurroutines
MISEND:
FOR I = 0 TO 3
IF S(I, TEL) = 0 THEN GOSUB NOTEOFF
IF S(I, TEL) > 0 AND S(5, TEL) = I + 1 THEN GOSUB GLISSANDO
IF S(I, TEL) > 0 AND S(5, TEL) <> (I + 1) THEN GOSUB NOTEON
NEXT I
RETURN
 
NOTEON:
B = 144 + I: GOSUB SND
B = S(I, TEL): GOSUB SND B = 127: GOSUB SND
RETURN
 
GLISSANDO:
IF GLIDE = 0 THEN GOTO GLISBEND ELSE GOTO MICROGLIS
GLISBEND:
'glissando via pitch bend
BEGINNOT = S(I, TEL): EINDNOT = S(I, TEL + 1) - S(6, TEL)
FOR NT = BEGINNOT TO EINDNOT STEP S(6, TEL)
B = 144 + I: GOSUB SND
B = NT: GOSUB SND
B = 127: GOSUB SND
'en nu glissando via pitch-bend
IF S(6, TEL) > 0 THEN
FOR MSB = 64 TO 127 STEP GLSPD
B = 224 + I: GOSUB SND
B = 0: GOSUB SND
B = MSB: GOSUB SND
NEXT MSB
ELSE
FOR MSB = 64 TO 0 STEP -(GLSPD)
B = 224 + I: GOSUB SND
B = 0: GOSUB SND
B = MSB: GOSUB SND
NEXT MSB
END IF
NEXT NT
RETURN
 
'glissando via system exclusive for note fractions
MICROGLIS:
BEGINNOT = S(I, TEL): EINDNOT = S(I, TEL + 1) - S(6, TEL)
IF S(6, TEL) > 0 THEN GOSUB STIJGGLIS
IF S(6, TEL) < 0 THEN GOSUB DAALGLIS
RETURN
 
STIJGGLIS:
B = &HF0: GOSUB SND
B = &H43: GOSUB SND
B = &H75: GOSUB SND
B = &H70: GOSUB SND
FOR NT = BEGINNOT TO EINDNOT
FOR GL = 0 TO 100 STEP GLSPD * 2
B = 16 + I: GOSUB SND
B = NT: GOSUB SND
B = GL: GOSUB SND
V = 127: B = V: GOSUB SND
NEXT GL
NEXT NT
RETURN
 
DAALGLIS:
B = &HF0: GOSUB SND
B = &H43: GOSUB SND
B = &H75: GOSUB SND
B = &H70: GOSUB SND
FOR NT = BEGINNOT - 1 TO EINDNOT STEP S(6, TEL) FOR GL = 100 TO 0 STEP -2 * GLSPD
B = 16 + I: GOSUB SND
B = NT: GOSUB SND
B = GL: GOSUB SND
V = 127
B = V: GOSUB SND
NEXT GL
NEXT NT
RETURN
 
NOTEOFF:
B = 176 + I: GOSUB SND
B = &H7B: GOSUB SND
B = 0: GOSUB SND
RETURN
 
ALLOFF:
FOR J = 0 TO 3
B = 176 + I: GOSUB SND
B = &H7B: GOSUB SND
B = 0: GOSUB SND
NEXT J
RETURN
 
'routine voor system-exclusives on FB01
SYSEX:
B = &HF0: GOSUB SND
B = &H43: GOSUB SND
B = 16 + I: GOSUB SND
B = &H15: GOSUB SND
B = PARAMETER: GOSUB SND
B = GEGEVENS: GOSUB SND
B = &HF7
RETURN
 
MIDIINIT:
'set volume to menu-waarde
FOR K = 0 TO 3
B = 176 + K: GOSUB SND
B = &H7: GOSUB SND
B = VOLUME: GOSUB SND
NEXT K
RETURN
'einde midi initialisatieroutine
 
SND:
OUT DP, B: OUT SP, (SH OR 1): OUT SP, SH
CHKBUSY:
IF INP(CP) AND 128 THEN RETURN ELSE GOTO CHKBUSY
 
BLANK:
LOCATE 10, 10 :FOR I = 0 TO 69: PRINT " ";: NEXT I
RETURN
 
'***************************************************************************
'partituurgegevens in DATA-statement
DATA 0,0,0,0,0,0,0
DATA 76,0,0,0,1,0,0
DATA 58,0,0,0,8,0,0
DATA 31,0,0,0,16,0,0
DATA 31,0,63,0,17,0,0
DATA 69,0,63,0,20,0,0
DATA 69,0,69,0,24,0,0
DATA 40,0,69,0,26,0,0
DATA 40,0,84,0,31,0,0
DATA 48,0,84,0,33,0,0
DATA 58,0,66,0,38,0,0
'Section 1 - p.3
DATA 0,0,0,0,42,0,0
DATA 86,0,19,0,51,0,0
DATA 86,0,54,0,60,0,0
DATA 56,0,54,0,61,0,0
DATA 56,0,67,0,66,0,0
DATA 90,0,67,0,70,0,0
DATA 90,0,66,0,72,3,-1 : 'gliss van 66 tot 61 op ringmodulator 3
DATA 90,0,61,0,73,0,0 : 'einde gliss
DATA 59,0,61,0,75,0,0
DATA 59,0,50,0,79,0,0
DATA 72,0,50,0,80,0,0
DATA 72,0,73,0,85,0,0
DATA 53,0,73,0,86,0,0
DATA 53,0,63,0,91,1,1 : 'gliss van 53 tot 60 op kanaal 1
DATA 60,0,63,0,92,0,0 : 'einde gliss kanaal 1
DATA 60,69,63,0,92,0,0
DATA 60,86,63,0,93,0,0
DATA 60,78,63,0,94,0,0
DATA 60,78,24,0,95,0,0
DATA 60,60,24,0,95,0,0
DATA 60,44,24,0,97,0,0
*DATA 75,44,24,0,97,0,0
DATA 75,44,83,0,97,0,0
DATA 75,59,83,0,98,0,0
DATA 75,42,83,0,99,0,0
DATA 75,42,69,0,99,0,0
DATA 75,57,69,0,100,0,0
DATA 75,72,69,0,101,0,0
DATA 40,72,69,0,101,1,1 : ' begin gliss op kanaal 1 vanaf 40...
DATA 42,72,69,0,102,1,1 : 'gliss kan 1 tot 42...
DATA 46,94,101,0,103,1,1 : ' gliss kan 1 ... 46 ...
DATA 48,94,101,0,104,1,1 : ' gliss kan 1 ... 48 ...
DATA 52,38,25,0,104,1,1 : 'gliss kan 1 ...52 ...
DATA 55,38,25,0,105,0,0 : 'einde gliss kan 1 ...55
DATA 55,38,25,0,105,2,1 : 'begin gliss kan 2 38...
DATA 55,43,25,0,106,2,1 : 'gliss kan 2 ... 43 ...
DATA 55,50,25,0,107,2,1 : ' gliss kan 2 ... 55 ...
DATA 55,76,25,0,107,0,0 : ' einde gliss kanaal 2 ... 76
DATA 55,76,0,0,110,0,0
DATA 58,76,0,0,112,0,0
DATA 58,0,0,0,113,0,0
DATA 59,0,0,0,113,0,0
'Cadenza
DATA 59,0,60,24,114,0,0 DATA 59,0,42,24,116,0,0
DATA 59,0,76,46,118,0,0
DATA 59,0,62,70,121,0,0
DATA 59,0,92,70,123,0,0
DATA 59,0,49,58,125,0,0
DATA 59,0,84,45,128,0,0
'Section 3
DATA 40,0,84,0,131,0,0
DATA 0,0,84,0,139,3,1 : 'begin glissando kanaal 3
DATA 0,0,89,0,140,3,1
DATA 0,0,94,0,141,3,1
DATA 0,0,100,0,142,0,0 : 'einde glissando kanaal 3
DATA 62,0,100,0,145,0,0
DATA 49,0,100,0,147,0,0
DATA 49,0,65,0,149,0,0
DATA 44,0,65,0,149,0,0
DATA 44,0,24,0,153,0,0
DATA 60,0,24,0,155,0,0
'Hoehepunkt
DATA 60,0,24,108,159,0,0
DATA 78,0,24,108,161,0,0
DATA 71,0,24,108,163,0,0
DATA 85,0,24,108,165,1,-1 : 'gliss kanaal 1 van 85 naar 60
DATA 60,0,24,108,166,1,-1 : 'glis kanaal 1 van 60 naar 48
DATA 53,0,24,108,167,1,-1 : 'gliss kanaal 1 van 48 naar 43
DATA 43,0,24,108,168,0,0 : 'eindpunt gliss kanaal 1
DATA 43,0,24,105,169,4,-1 : 'gliss modulator 4 van 105 tot 74
DATA 43,0,66,74,170,4,-1 : 'gliss modulator 4 van 74 tot 62
DATA 58,0,66,62,171,4,-1 : 'gliss modulator 4 van 62 tot 24
DATA 58,0,66,24,173,0,0
'conclusion
DATA 58,0,66,0,174,0,0
DATA 58,0,62,0,175,0,0
DATA 67,0,62,0,175,0,0
DATA 67,44,62,0,176,0,0
DATA 67,51,62,0,177,0,0
DATA 67,54,62,0,178,0,0
DATA 67,62,62,0,180,0,0
DATA 67,70,62,0,180,0,0
DATA 58,70,62,0,181,0,0
DATA 58,72,62,0,181,0,0
DATA 58,76,62,0,182,0,0
DATA 58,78,62,0,182,0,0
DATA 58,66,62,0,183,0,0
DATA 58,57,62,0,184,0,0
DATA 58,38,62,0,184,0,0
DATA 58,24,62,0,186,0,0
DATA 0,0,0,0,188,0,0
' Einde data ringmodulatiesignalen
DATA 0,0,0,0,189,0,0
DATA 0,0,0,0,190,0,0
DATA 0,0,0,0,191,0,0
DATA 0,0,0,0,192,0,0
DATA 0,0,0,0,193,0,0
DATA 0,0,0,0,194,0,0
DATA 0,0,0,0,195,0,0
DATA 0,0,0,0,196,0,0
DATA 0,0,0,0,197,0,0
DATA 0,0,0,0,198,0,0
DATA 0,0,0,0,199,0,0
DATA 0,0,0,0,200,0,0

Filedate: Last Update:98-12-10 - original: 26 01 1989/11:15- gwr Filename :DUECOSE.TXT / 1091.html

Terug naar inhoudstafel kursus: <Index Kursus> Naar homepage dr.Godfried-Willem RAES Naar volgend programma-voorbeeld: 'Crossing' - Alvin Lucier