Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel
1: Algoritmische Kompositie
Hogeschool Gent : Departement Muziek & Drama
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 :
- 1. het gebruik van 4 diskrete sinusgeneratoren
waarop alle gevraagde frekwenties worden ingesteld.
- 2. het gebruik van een programmeerbare MIDI-synthesizer
gespeeld vanaf een MIDI-keyboard.
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:
- - het feit dat er vier spelers, elk beschikkend
over een MIDI-klavier nodig zijn voor de uitvoering !
- - het feit dat er geen klavieren bestaan met
een voldoend uitgebreide tessituur, waardoor we dus oktaveringen zouden moeten
uitvoeren.
- - het feit dat, zelfs wanneer de pitchbend funktie
op maximum zou worden ingesteld, het bereik daarvan nog steeds geen glissandi
over pakweg 5 oktaven mogelijk maakt. Ook dit voorschrift van de komponist
zouden we dus genoopt zijn te negeren.
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):
- - IBM-XT of AT kompatibele komputer met CGA
(kies Toshiba Laptop T1000 omwille van de stille ,meer bepaald, ventilatorloze,
werking).
- - Logos Midi-interface via Centronics printerpoort
( i.p.v. deze twee hadden we uiteraard ook de Atari met ingebouwde midi-poort
kunnen gebruiken)
- - 2 stuks Yamaha FB01-midi FM synthesizers.
Hier kon uiteraard elke algoritmische FM-synthesizer worden toegepast ! We
hebben er twee van nodig , omdat we eigenlijk vier volstrekt gescheiden sinussignalen
dienen te gebruiken, en elke FB01 slechts stereofonisch is.
- - 4 ringmodulatoren. Over deze toestellen meer
in verdere lessen. Weze opgemerkt dat ze beslist niet behoren tot het arsenaal
van effectdozen die je klaargemaakt kan kopen in de muziekhandel. Ze dienen
m.a.w. speciaal hiervoor gemaakt te worden...
- - 1 omgebouwde Revox B77 bandopnemer voor de
2-3" echolus (bekijk zelf deze oplossing...)
- - 4 professionele audiomixers
- - 4 eindversterkers en luidsprekerboxen
- - 2 direct-boxes voor elektrische gitaren
- - 7 mikrofoons met girafstatieven
- - 1 Yamaha REX-50 programmeerbare effectmachine
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