Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent : School of Arts


<Terug naar inhoudstafel kursus> <Naar komputertalen> Archival

1021:

Praktijkvoorbeeld en demonstratie

Een elektronische slagwerkschakeling -een eigen fabrikaat- wordt op een komputer aangesloten via de parallel printer poort. Deze verbinding geschiedt met een FLATCABLE (Bandkabel). Elke elektrische geleider komt in zo'n kabel overeen met een welbepaalde bitpositie. Zo is het draadje dat aan pen 2 van de konnektor ligt, drager van het elektrisch signaal overeenkomend met bit 0. Pen 3 is bit 1, enz. tot met pen 9, bit 7 is bereikt, en we dus voldoende verbindingen hebben om een heel byte ineens via de kabel over te sturen. Pen 1, is een signaaldraad die ook met een enkel bit overeenkomt en die gebruikt wordt als 'strobe': wanneer het bit 0 is , zijn de elektrische bits op de kabel geldig ('valid') en mogen ze gelezen worden door het aangesloten apparaat.

Uit het elektronische schakelschema (zie klasdokumentatie) blijkt dat de diverse beschikbare slagwerkgeluiden onder volgende voorwaarde worden opgewekt :

als bit 0 logisch 1 is klinkt de bastrom

als bit 1 logisch 1 is klinkt de snaartrom

als bit 2 = 1 claves

als bit 3 = 1 tomtom

4 = 1 =>maracas

5 = 1 => high bongo

6 = 1 =>low bongo

7 = 1 => conga

Bovendien wordt de voorwaarde gesteld ( - dit is een algemene eis voor alle parallele interfaces - ) dat het STROBE signaal , nadat het gewenst bitpatroon op de lijnen werd geplaatst, even logisch 0 moet worden gemaakt. Deze STROBE-lijn is in rusttoestand steeds logisch 1 , wat voor het aangesloten toestel het invoeren van data blokkeert.

Om nu bvb. een slag op de tomtom op te wekken moeten we het volgende binair getal op het adres van de printerpoort van de komputer zetten :

0001 0000

dit is hexadecimaal : &H10 en decimaal : 16

Vervolgens moeten we op het adres waarop we het strobe-signaal kunnen weervinden het korresponderende bit laag maken. Meestal wordt hiervoor bit 0 gebruikt. Omdat we de overige bits (voorlopig) op dat adres nog niet zullen gebruiken, gaan we eerst lezen welk byte er zich op dit adres bevond. Vervolgens gaan we van dit byte 1 aftrekken ( welk getal er ook staat , we weten dat het noodzakelijkerwijze nu even zal moeten zijn ) . Dit byte sturen we nu naar het strobe adres . Tenslotte resetten we de strobe door het oorspronkelijke byte opnieuw naar het strobe adres te sturen. De gehele cyclus zal er , in de vorm van een uiterst elementair stukje software , dus uitzien alsvolgt :

OUT (printerdata-adres,16)

X= INP (Strobeadres)

Y= X-1 OUT (strobeadres,Y)

OUT (strobeadres,X)

Deze vijf instrukties kunnen echter in zowat alle hogere komputertalen worden ingekort tot :

OUT (printerdataadres,16)

OUT (strobeadres,INP(strobeadres-1))

OUT (strobeadres,INP(strobeadres+1))

Opgelet: in het Basic van machines met memory mapped I/O worden hiervoor de instrukties POKE ( i.p.v. OUT) en PEEK (i.p.v. INP) gebruikt.

De opbouw van de hogere talen waarmee wij in deze kursus toch in eerste plaats zullen te maken krijgen laat ons echter vaak toe alle hiervoor geschreven stappen tot een enkele stap te reduceren, omdat er speciale instrukties voor bestaan. Voor de machine blijven het echter ook dan vijf stappen.

Het zal duidelijk zijn dit bij het hierboven toegepaste elektronisch instrument, elk bit met slechts één instrument overeenkomt. Dit geeft ons de mogelijkheid de instrumenten in alle mogelijke kombinaties binnen een enkele cyclus gelijktijdig te laten spelen. In de praktijk wordt dit echter zelden of nooit op die wijze gedaan, omdat we vanzodra we een groot aantal klanken zouden willen voortbrengen we evenzoveel draden zouden moeten gebruiken in onze kabels...

Aangezien binnen een byte tot 255 (decimaal) kan worden geteld, is het mogelijk door toepassing van kombinaties van binaire enen en nullen, tot maximaal 255 verschillende klanken voort te laten brengen. Om daaruit wijs te raken, moet van het apparaat in kwestie steeds een logische waarheidstabel in de technische gegevens opgenomen zijn .

Zoiets ziet er dan . bvb. uit alsvolgt :

low nibble:

0 0 0 0 disconnect

0 0 0 1 basdrum

0 0 1 0 basdrum - accent

0 0 1 1 basdrum - soft

0 1 0 0 low conga

0 1 0 1 low conga -accent

0 1 1 0 low conga - soft

0 1 1 1 low conga - rimshot

1 0 0 0 high conga

1 0 0 1 ... ...

enz. tot 1 1 1 1

High Nibble:

0 0 0 0 disconnect

0 0 0 1 ride cimbal

0 0 1 0 hi-hat cimbal

0 0 1 1 edge sound

0 1 0 0 tam-tam

0 1 0 1 maraca

0 1 1 0 guiro

0 1 1 1 gong

In dit voorbeeld is het ene beschikbare byte verdeeld in twee nibbles . Het laagste nibble adresseert alle membraaninstrumenten (er zijn 16 mogelijkheden), het hoogste alle ruisklanken (eveneens 16 mogelijkheden ). Data uit laagste en hoogste nibble worden bij elkaar opgeteld (laagste nibble is LSB , hoogste MSB) en in een keer op het betreffende adres gezet. We kunnen dus maximaal twee klanken tegelijk uitsturen.

Nu lijkt dit wellicht een zware koncessie te zijn. Twee klanken, en bij toewijzing van 255 instrumenten in een byte , slechts een, lijkt muzikaal erg weinig. Maar, dankzij de zeer grote snelheid waarmee de komputer in staat is deze in en uitvoer te realiseren, maakt het in de praktijk niet zoveel uit of we nu de instrumenten echt gelijktijdig, dan wel de een na de andere uitsturen. De komputer doet het immers zo snel dat we het tijdsverschil toch niet kunnen waarnemen. Zulke kommunikatie (algemene term in komputerterminologie voor dataoverdracht tussen machines) noemt met bit- parallel en byte-serieel. De bytes worden na elkaar overgebracht, maar wel met 8 bits tegelijk.

Anders wordt onze beschouwing wanneer we overgaan naar een volledig serieel systeem, waarbij we werkelijk bit na bit moeten doorsturen, inklusief bovendien nog een start en een stopbit, opdat het aangesloten toestel de bitstroom zou kunnen analyseren en terug in paralelle bytes omzetten. Bit en byte seriele systemen, kompromiteren steeds de transmissiesnelheid met in het beste geval een faktor 10. Het verder besproken Midi-systeem, evenals het veel gebruikte RS232 systeem zijn zuiver seriele systemen. Zij genieten het voordeel van een ogenschijnlijke eenvoud: er zijn immers minimaal slechts twee tot drie draden voor nodig.

Tot de vele nadelen behoren onder meer het feit dat zowel het zendende als het ontvangende toestel op eenzelfde transmissiesnelheid moeten worden ingesteld (75 Baud tot 9200 Baud) en dat het aantal start- en stopbits , evenals eventueel gebruikte kontrolebits (parity-bit) heel precies dienen te worden ingesteld langs beide zijden. Tot overmaat van ramp blijkt de teoretische eenvoud van de kabelverbinding in schril kontrast te staan met de komplete anarchie die er heerst in verband met de aansluitvolgorde van de draden. Ik ben er in al mijn jaren ervaring met komputer hardware en beschikkend over een toch vrij uitgebreid labo met elektronische meetapparatuur, dan ook nog nooit in geslaagd een perfekte seriele verbinding te realiseren tussen twee mij onbekende machines in minder dan een halve dag tijd!  


Voorbeeldprogramma voor bit-besturing via een uitgangspoort

Hoewel we op de details van het programmeren pas later zullen ingaan, moge volgend programma toch reeds iets onthullen van het hoe en waarom van hiervoor beschreven besturingen in de praktijk.

Het programma is geschreven in Quick-Basic voor IBM-achtige machines.

Een tweede voorbeeld -voor dezelfde hardware schakeling- is het programma geschreven door Marc MAES in 1991 als onderdeel van de experimentele opera "IRMA" naar Tom Philips. Dit programma werd geschreven voor een Atari 1040ST in GFA-Basic. (cfr. Disks in de klas).

 Verdere praktische voorbeelden kunnen o.m. gevonden worden in de hard- en software voor vele van mijn klankautomaten en robots, bvb. <Wolkenrijder> uit 1997.


Filedate: 970930

Terug naar inhoudstafel kursus: <Index Kursus> Naar homepage dr.Godfried-Willem RAES Komputertalen