Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>

   

1139:

Timing-routines voor Atari 1040ST

Nota: dit hoofdstuk is anno 1996 niet meer aktueel. Het is alleen opgenomen terwille van eventuele bezitters van een Atari of Falcon komputer.

Zoals we weten uit het handboek van de Atari 1040ST , is de kleinste tijdsduur die we via de SOUND instruktie kunnen programmeren SOUND,1,0,0,0,1 = 1/50 sec. = 0.02 sec. Om iets precies 1 sec. te laten duren moeten we dus de instruktie

SOUND 1,0,0,0,50 geven.

(Op IBM kompatibele machines kan een tijdsduur van 1 sekonde worden bereikt door SOUND 20000,18 )

Als musici zijn we gewoon tempi uit te drukken in metronoomgetallen , waarbij M.M.=60 niets anders betekent dan dat de teleenheid 1 seconde bedraagt . Wanneer met Maelzel-metronoomgetal stijgt, verkort de duur van die teleenheid evenredig. M.M.=120 , immers betekent een halve sekonde per teleenheid. Het snelste tempo waarin de Atari met dit SOUND statement vermag te spelen is dus een tempo van 50 teleenheden per sekonde. Een eenvoudige regel van drie laat ons toe dit om te rekenen naar een metronoomgetal :

als 1 sec. per teleenheid = M.M.60 = SOUND 1,0,0,0,50

dan is 0.02 sec per teleenheid= M.M.60/0.02 = SOUND 1,0,0,0,1 = M.M. 3000

Erg bruikbaar is dit muzikaal niet omdat we in de muziek bijna steeds onze teleenheid verder onderverdelen. Laten we dan ook even veronderstellen dat M.M.=3000 het tempo zou zijn van twee-endertigste noten. In dit geval komt M.M.=3000 voor twee-endertigste noten overeen uit met een tempo van 3000/8= 375. ( Er gaan immers 8 twee-endertigsten in een vierde noot). Dit wordt dan ook een flink opgepept prestissimo.

8 twee-endertigsten of 1 vierde aan M.M.=375 moet dan aan de komputer aangeboden worden als :

SOUND 1,0,0,0,((3000/(375*8))*8)

= SOUND 1,0,0,0,8

Een achtste gepunt wordt dan :

SOUND 1,0,0,0,((3000/(375*8))*3)

= SOUND 1,0,0,0,3

Het aantal eenheden van de kleinste notenwaarde zit dus in het laatste cijfer van de formule verscholen. Om een en ander om te rekenen van muzikale eenheden naar Atari SOUND- instrukties kunnen we in het statement SOUND 1,0,0,0,T, T algemeen berekenen alsvolgt :

T=(3000/(MM*KT))*N

waarin de variabelen staan voor :

MM = metronoomgetal

KT = kleinste ritmische onderverdeling van de vierde noot waarbij :

8 = twee-endertigste noot

4 = zestiende noot

2 = achtste noot

1 = vierde noot

1/2= halve noot (verdubbeling)

1/4= hele noot ( * 4)

Neem dus voor KT steeds het aantal eenheden per vierde noot.

N = het aantal van de kleinste eenheid dat we nodig hebben om onze duur precies uit te voeren. Dus ,als KT=8 dan

1 = 1 twee-endertigste noot

2 = 1 zestiende noot

3 = 1 zestiende gepunt

4 = 1 achtste noot

6 = 1 achtste gepunt

8 = 1 vierde noot

12 = 1 vierde gepunt

16 = 1 halve noot

24 = 1 halve gepunt

36 = 1 hele noot

Laten we dit even narekenen voor het geval dat we 1 vierde noot willen laten spelen in een tempo van M.M.=60 , en dat we als kleinste ritmische eenheid de zestiende willen gebruiken :

T=(3000/(60*4))*4=50

50 * 0.02 sec = 1 sec.

Uiteraard mag deze formule bij het koderen in Basic vereenvoudigd worden waar mogelijk.

Veronderstellen we even dat we een muziekstuk in een DATA-statement willen inbrengen, dan kunnen we omwille van de intuitieve leesbaarheid van ons programma best aansluiten bij de eenheden die ons als musici vertrouwd in de oren zullen klinken. Om dit te bereiken dienen we uit te gaan van de voor het gegeven stuk kleinst nodige ritmische waarde. In ons DATA-statement kunnen we dan eenvoudigweg volstaan met het opgeven van het aantal eenheden dat we nodig hebben om de gewenste duur te realiseren. Voor de verwerking van deze DATA gebruiken we natuurlijk bovenstaande formule hetzij in een subroutine, hetzij als deel van het algoritme , hetzij in de uitvoerroutine rechtstreeks. Veronderstel even dat we als kleinste eenheid de zestiende noot zouden kiezen. In dit geval zou onze omzettingstabel voor de ritmische waarden en rusten eruit moeten zien alsvolgt:

zestiende noot = 1

achtste noot = 2

achtste gepunt = 3

vierde noot = 4

vierde gepunt = 6

halve noot = 8

halve gepunt = 12

hele noot = 16

De DATA voor een ARRAY met metrische notenwaarden voor de eerste melodische zin van Au Clair de la Lusne bvb. kan er uitzien alsvolgt :

DATA 65,4,65,4,65,4,67,4

DATA 69,8,67,8

DATA 65,4,69,4,67,4,67,4

DATA 65,16

Een programma dat dit ook zo speelt is bvb:

INITIALIZE:

KT=4 : ' kies zestiende noot als kleinste eenheid

DIM N(1,21)

INVOER:

INPUT " Welk tempo wil je hebben ? ", MM

IF MM>375 OR MM<1 THEN GOTO INITIALIZE:

FOR I=0 TO 21

READ N(1,I) : READ N(0,I)

NEXT I

I=0 :' reset teller

ALGORITME:

FOR I=0 TO 10

GOSUB REKEN:

GOSUB UITVOER:

NEXT I

FOR I=11 TO 21

GOSUB REKEN:

GOSUB UITVOER:

FOR I=1 TO 11

GOSUB REKEN:

GOSUB UITVOER:

NEXT I

END

REKEN:

T=(3000/(MM*KT))*N(0,I)

N=N(1,I) : V=64

UITVOER:

OUT 3,144 :OUT 3,N : OUT 3,V

SOUND 1,0,0,0,T

OUT 3,144 :OUT 3,N : OUT 3,V

SOUND 1,0,0,0,1

RETURN

GEGEVENS:

DATA 65,4,65,4,65,4,67,4 :'maat 1

DATA 69,8,67,8 :'maat 2

DATA 65,4,69,4,67,4,67,4 :'maat 3

DATA 65,16 :'maat 4

'tweede zin

DATA 67,4,67,4,67,4,67,4 :'maat 5

DATA 62,8,62,8 :'maat 6

DATA 67,4,65,4,64,4,62,4 :'maat 7

DATA 60,16 :'maat 8

In de praktijk is het steeds aan te bevelen tijdsduren uit te drukken als veelvouden van een kleinste in het muziekstuk voorkomende eenheid. Hierdoor worden de in te typen DATA beknopter, en kan achteraf eenvoudig een programmasubroutine worden geschreven waarin het afspeeltempo kan worden bepaald en omgerekend. Hierdoor gaat echter wel een deel van de inzichtelijkheid van het tempo verloren.

Bovenbeschreven timing-routines voor Atari kunnen nog veel verfijnder worden doorgevoerd door rechtstreeks de klok-pulsteller (de inwendige klok) van de komputer te gebruiken. Nadeel van deze aanpak is echter, dat het van machine tot machine telkens weer verschilt. Gezien de tanende populariteit van het Atari-platform gaan we er hier niet verder op in.


Filedate: 861020

Terug naar inhoudstafel kursus: <Index Kursus>

Naar homepage dr.Godfried-Willem RAES