Programmatuur voor verstaanbaarheidsexperimenten voor het
IPO-difoonsynthese systeem
Citation for published version (APA):
Pijfers, J. A. R. (1985). Programmatuur voor verstaanbaarheidsexperimenten voor het IPO-difoonsynthese systeem. (IPO rapport; Vol. 519). Instituut voor Perceptie Onderzoek (IPO).
Document status and date: Gepubliceerd: 01/01/1985
Document Version:
Uitgevers PDF, ook bekend als Version of Record
Please check the document version of this publication:
• A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website.
• The final author version and the galley proof are versions of the publication after peer review.
• The final published version features the final layout of the paper including the volume, issue and page numbers.
Link to publication
General rights
Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain
• You may freely distribute the URL identifying the publication in the public portal.
If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:
www.tue.nl/taverne
Take down policy
If you believe that this document breaches copyright please contact us at:
openaccess@tue.nl
providing details and we will investigate your claim.
Instituut
voor Perceptie 0nderzoekPostbus
51J.
5600 MB EindhovenRapport no. 519
Proqrammatuur
voor
verstaanbaar-heidsexperimenten voor
het
IPO-difoonsvnthese svsteem
I
2 3 INHOT'DSOPCAVE INHOUDSOPGAVE SAMEN/ATTING vooRtíooRD INLE IDINGFORMULERING VAN DE OPDRACHT
AI.IALYSE VAN HET PROBLEN,Í
3.I
Inleiding
3.2 Inicialisacie
van een experiment3.3
Uitgifte
van spraak3.4 Verwerking van
de inpuc
vande
proefpersoon3.5 Opslag van
de
inpuE van de proefpersoonin
heÈ geheugen
3.6
Afronding van een sessieof
experimenE3.7
Blokschema van heE programa daÈ hetexperimenc
regelt
DE PROGRAI'íMATI'UR
4.L
Inleiding
4,2 De
sofEwarevoor
het
genereren van despraakfiles
4.3 De
sofEwarevoor
het
regelen van deexperimenÈen
4.3.I
devariabelen van
"PRoEFPERsooNrl4.3.2
procedureinitialise
4.3.3 procedure
makecom,r4.3.4
procedure spraakouË 4.3.5
procedure r'oordin4.3.6
procedure score4 .3
.7
function in!_randqn
4
.3.8
programma rrPRoEFPERsooN' KONKLUS IES BIJLAGES 1 11iii
I 3 5 5 5 6 6 7 7 8 9 9 A B c D E FLISTING VAN PROGRAM CO}IVWOORI)
VOORBEELD VAN EEN LIJST VAN NONSENSI^TOORDEN
LISTING VAN PROCEDT]RE INITIALISE (I,IOOUIN INITI)
LISTING VAN PROCEDI'RE MAKECONV (I'{ODULE MAKCO)
LISTING VAN PROCEDI'RE SPRAAKOIN (MODUI^E SPOUT)
LISTING VAN PROCEDI.]RE I.TOORDIN (}TODULE I.IRDIN)
LISTING VAN PROCEDI.]RE STORE (MODULE STORE)
LISTING VAN F'I'NCTION INT-MNDOM (MODULE MNDOM)
LISTING VAN PROGRAM PROEFPERSOON
10 l3 I3 t5 15 16 T7 I8 l8 l8 l9 2L 24 25 27 30 3I 33 34 35 G H
I
SAMENVATTING
Dit
verslag
beschrijfc
de
scagedie
RuudPij
fers in
november endecem-ber
1985heefr
uiEgevoerdbij
de groep 'Horen en spraak'
van heE Instituutvoor perceptie Onderzoek
in
Eindhoven. Destage
is
uiEgevoerd onderbege-leiding
vandr.
B.A.G. Elsendoorn endr. ir.
L.L.M.
VogEen. De stageis
on-derdeel van hec
studieprogrÉmmavoor heÈ ingenieursexamen
Elektrotechniek aan de Technische llogeschool Eindhoven.Het
verslag
behandelt achÈereenvolgens:l)
de probleemstelling van destage:
het schrijven
van een coÍtrputerprogrÍmma voor heÈ regelen vanversc.aanbaarheidsex-perimenten van een difoon spraaksynEhese sysEeem,
daf
bij
heÈ tPO
ontwikkeld
is
2)
de analyse vanhet
probleem3)
de oplossing van heË probleern: EÍtee cqtrPuterProgranma's, dieop een VAJ(/VMS coÍtrputer sysÈe€m gedraaid kunnen r.mrden.
D
dekonklusies:
het
probleemis in
principe opgelost, zíJ
heÈmeÈ enkele
bijeffekten.
VOORI{OORD
De
sÈagedie ik
heb gelopenbij
heC IPOis
leerzaan geweesÈ. VanuiErechnisch oogpung heb
ik
programmeerervaring opgedaan en hebik
kennis ge-maakÈ meÈ eenveel
gebruikt,
maar voormij
ÈoÈnu
toe
onbekend cquPuÈer syste€m de V4;1. Van de anderekant
hebik
ook eenkijkje
kunnen nemenin
dewerkwijze en
het
r.reÈenschappelijkenivo
van
een vooraansEaandonderzoeks-inscituut.
Ookde
sfeer
onder de medewerkers hebik
mee ktrnnen maken doorde steun
die ik
heb gekregenbij
de stage.Langs deze weg
wil ik
dan ook enkele mensen bedanken'In
de
eersgeplaacs
mijn
begeleiders,
Ben Elsendoornen
Leo VogEen' voor hun geduldbij al nijn
vragen en voor hr:ntips
en aanwijzingenbij het
oP-sEellen van
diE verslag.
In
de tweede plaats Rene Verhoeven voor de vele gesprekken en voorzijn
rnu-zikale
onlijsting.
In
de
derde plaaÈsalle
nedewerkers vande spraakgroeP
voor
hunhulpvaar-d ighe id .
En
Èenslotte FriEs
Niesenvoor de
flexibele
aanpassing vanzijn
progrmma's aanmijn eisen.
lll-INLEIDINC
Dit
rapport
beschrijfr
de
scagedie ik
heb uiÈgevoerd gedurendenovem-ber en
december l9S5bij
de groep
'lloren
en Spraak'
van heE InsEiÈuut voorpercepcie Onderzoek
in
Eindhoven. Voorde
spraakgroepis
een van debelang-rijke
onderzoeksËerreinen synËheEische spraak gegenereerd door de compuEer.Menselijke
spraak
bestaat
uif
een
aaneenschakelingvan
elemenÈaireklanken
( fonemen genaamd) Dezn fonemen vormenleEtergrepen,
die
oP hunbeurÈ weer rmorden
en
zinnen vormen. Eenvoor
de hand liggende en veelge-bruikte
meEhode qnde
compuEer spraak Ëe laÈen genererenis
afzonderlijke
spraakbouttsËenen,die in
de comPuterzijn
opgeslagen, achÈerelkaar
Ce zet-Een en vervolgensvia
eenluidspreker
hoorbear Ee maken. Analoog aan onzespraak kunnen
die
bouwsÈeneno.a. zijn:
zinnen, Ír,oorden, leEEergrepen
of fonemen.fu
willekeurige
spraak Èe kunnen genererenzijn
groce hoeveelhedenÍroorden en nog groÈere hoeveelheden zinnen
nodig
als
bouwscenen. Debenade-ring
van
woordenof
zinnenals
bouwsÈenenis
vooralsnog dan ookniet
ge-schikt. Er zijn ca.
30.000leEtergrep"r.rodig*)
qtrwillekeurige
spraak cekunnen genereren. Dus ook
de leEt.ergreeP
als
bouwsEeenis
nog
Cwijfelach-tig.
Heel anders
ligÈ
het
meÈ fonemen.Itet
aanÈal van 50 fonemenzal
vol-doende
zijn
voor spraaksynEhese, echÈer gesynËhetiseerde spraak
meÈ behulpvan
foneemconcagenagieis
nieÈ
erg
duidelijk. Niet
alleen de
klanken
zíjn
belangrijk
voor
de versEaanbaarheid, maar ook de overganBen tussen de klan-kenbeinvloedt
de duidelijkheid vande spraak.
Deze overwegingheeft
geleidËoE een nieuwe bouwsËeen: heÈ difoon.
I,lanneer
tnee
klanken
achÈer elkaar rrorden uicgesproken dan kande
zoonÈsEane spraak opgespliÈsE worden
in drie
segmenten:l)
overgang vansuilte
naar eersÈe klank2)
overgang van eersËenaar
Eweede klank3)
overgang van Eweede ktank naarsÈilte
Deze segmenÈen, overgangen Ëussen
lwee
klanken
(waarbij stilte'
ook
alsklank
beschouwd qnrdE), heÈendifonen.
Op de plaacsen Ítearde
spraakSiverËsen
(196I),
Segmencacion invenEoriesfor
speech synChesis,Language and Speech
4:
27'89.*)
opgespliÈsÈ erordr
is die
spraakredelijk stationair.
Dic
kangebruikc
\.or-den omverschillende difonen
te
koppelen ÈoE vloeiende enredelijk
nafutr-lijk
klinkende spraak.
Een ander voordeel venhet
gebruik van
difonen is
het betrekkelijk kleine
aaneal
(ca.2000)
bouwsÈenendac
in
de
comPutermoec worden opgeslegen oul
willekeurige
spraakte
kunnen genereren'Bij het
IPOis
een difoon spraaksysceemoncwikkeld.
Overde
verscaan-baarheid
van
difoon
gesynEhetiseerde Nederlandse spraakis
nog maar heelweinig bekend, reden nearqn
er
eenaantal
versEaanbaarheidsexperimenÈen meÈheE IpO difoon spraaksysteem uicgevoerd
zullen
worden. De compuÈerzal
dieexperimenten gaan regelen.
De opdrachC voor
de
sÈage wasqtr
een comPuEerProgrmma Ceschrijven,
daC de versEaanbaarheidsexperimenten
voor
heEdifoon
spraaksysÈeem kankon-Èroleren.
Deze sEage
is
uiEgevoerdonder begeleiding
ven dr.
B.A.G.Elsendoorn en
dr. ir.
L.L.M.
Vogten. De stege
is
verplichc
onderdeel vanhet
ingenieursexenen EtekErocechniek van de Technische llogeschoolFORMULERING VAN DE OPDMCHT
On difoonspraak Èe tesËen
op
versCaanbaarheidzíjn
luiscerexperirnenEennet
proefpersonennodig.
De proefpersonenkrijgen
een aanEal nonsenswoordente
horenvia
een koptelefoon en moeEen vervolgens aangevenIdat ze
denkengehoord Ee hebben.
De opdrachE kan
als
volgt
omschreven ldorden:Schriif
een conpucerprograÍyrmadat
de
luisterexperimenÈen metproef-personen
stuurt.
lleE experiment moet aan de volgende eisen voldoen:1)
Voor hec Èesten van de versCaanbaarheid r"orden nonsensr{trordengebruikt
m alle
difonen,
die in
de comPuterzijn
opgeslagenook werkelijk
te
Èesten.Er r.orden
3 soorben vporden
gebruiktom
alle
rnogelijke volgordes van difonen aan bod Èe latenko-men. De woordsoorÈen
die
voorkomenzijn:
-
vocaal-consonanÈ-vocaal(vccv),
-
vocaal-consonanÈ-consonant-vocaal (vclc2v)-
consonanc-vocaal-(vocaal- evÈ . )-consonanE (cvvc)D
Elk
experimenÈ besËaaÈuiE
een aanÈal sessies van 50 rcorden'met een pauze Eussen
de sessies.
De experi.menEen kunnenenke-le
uren gaanduren.
On de proefpersonen gemoÈiveerd Ee houdenkan na
afloop
vanelke sessie
(als
daar van
Ee voren otnge-vraagd
is
door
de
experirnenEaEor)de
score
van
die
sessie vetmeld worden aan de proefpersoon.3)
De proefpersoon kan na heE horen van eenloord
ophef
EoeE-senbord intypen wat
hij
of.zíj
denkt gehoord ce hebben.Hier-b
ij is het
toet senbord zodanig aangePasE, dat elke
toeEsovereenkomÈ meE
een
klank. Oir
om eenduidigvasc ce
kunnenstellen
wat de proefpersoon denkt gehoordte
hebben'4)
Voor heÈ begin van een experiment kan een tijdsinEenralgede-finieerd
worden waarbinnende
proefpersoon een'rcord
in
moeÈtikken,
nada!
de computer
spraakheeft
uiEgegeven. Deze eisis
gestetd
omer
voor
be
zorgendat
een proefpersoondirect
reageerc
en nieE gaaÈ nadenken over datgene
nat hij of
zíi
gehoord
heeft.
5) Alle
relevanEeinforsracie
beÈreffende een experirnent rordcopgeslagen
in
eendatafile,
zodanig daÈ verwerking van deIIet
progremma moeE gedraaid wordenop een
VAX/VI,íS compuÈer vanDigical
enA}TALYSE VAN ITET PROBLEEM
3.
I
Inleiding
De
rol
van de compuEerin
hec spraakexperimenEis
grofweg opte
split-senin
de volgende taken:- Initialisatie
van een experimenc.- Uitgifte
van spraak.-
Verwerking vande
inpuE vande
proefpersoon.-
Opslag vande
input
van de proefpersoonin
hec geheugen.-
Afronding ven een sessieof
experinenÈ.Deze aspekÈen
zullen
nu uiEvoeriger geanalyseerd tmrden.3.2 Initialisacie
van een experimentqtr een
experimenE Èe beginnen is heË allereersÈ noodzakelijk om eenfile
Ee openen waarinalle
relevanÈe informacie beÈreffende een experímenEkomE Èe
scaan. In de
kop van zo'r. file moecidentificatie
informacie
vanproefpersoon
en
experimentrprden
geschreven,zoals
naam vande
proefper-soon, daEr.rm, naem van de gebruikte spraakfiles, aantal sessies van 50
Í{ror-den,
maximaleresponsietijd en of al
dan niec een score rcordc vermeld aande proefpersoon. Deze gegevens
liggen niet
vasËbij
aanvang van een experi-mencen
rmrden danook interakcief
ingevoerdin de
compuÈer. Spraak t'ordE Íreergegevenvia
eenkanaal.
DiË kanaal moeÈ ookbij
de initialisatie Eoege-Írezen r.rorden.Er
zíjn 4
verschil lende kanalen beschikbaar (genummerdI
È/rn4), waarbij
kanaalI
eenvoor ieder ten alle tijde te
gebruiken kanaalis
en de kanalen2, 3
en4
gereserveerd kunnen worden door eengebruiker.
HeÈnurmer van heÈ
gebruikte
spraakkanaalvoor de
experimencenis bij default
I(Als
een ander kanaal gewensEis
moetdit voor
heE begin van hec progranma gekozen worden door de experimentator.). TensloËEe moeE voordaÈ eenexperi-menÈ kan beginnen nog een cabel gemaakt rmrden
voor de
olazeEÈing van de opheE Èoetsenbord ingeÈikÈe ASCII-waarde naar de naar heÈ beeldscherm Ee
proef-Persoon. )
3.3 Uitgifte
van spraakDe cunpuEer kan spraak uiÈgeven
indien geschikÈe
files
aan heÈspraak-sysEeem worden aangeboden.
Er
besÈaan Eltee soorÈen spraakfiles, deN-files
en de
Vp-fites.
Beide soorÈen bestaanuiË
Eweedelen,
Èe hreÈen eenidenEi-ficaÈie
record
(met gegevensover
de
file
ende kodering van de spraak)
endaÈa
(in
de vorm van paraeÈers) voor heÈ spraaksysEe€n.Bij N-files is
deinformaÈie
voor
heE spraaksysteen zodanig daC deerin
opgeslagen sPraakdi-rekc
uitgegven kan worden.Vp-f
ites
moeEeneerst
firgeze È wrordenin
N-files
cm spraak
uic te
geven. Omgekeerd moeEeneerst
A/P-files
aangemaakt rordenom
N-files
Èe
kunnen aanmaken (Voor meer informacieover N-files
enA/P-files zíe
lPO-handleiding67, LVS-speech
processing,
Progrémsfor
theIPO VAX IL/780 door L.L.M. Vogten).
Het maken van
N-files is
tijdrovend voor
de VA)(. Daaroois
heÈvoor
deexperimenten van belang
dat
de
files
van
Ee voren worden gegenereerd.Er is
reeds een
programma gemaakt, daEeen
lijsc
van
nonsenswoorden genereert. Deze woorden moecen nog difoon geconcateneerd worden. Onde
onzeCEingniet
meE de hand Ee hoeven doen
(dit is
namelijk voor
de vele honderden tmorden,die
bij
de experimenÈengebruikt
gaan worden haasÈondoenlijk)
is
een apert prograÍrma gewenst, daEdie
qnzeÈCingrealiseerÈ.
3.4
Verwerking van deinput
van de proefPersoonEen van de
eisen
waaraanhe!
experiment moeÈ voldoenis
dac elke toeEsvan heÈ EoeEsenbord overeen komË meÈ een
klank,
zodai foneLisch inEypen vanwoorden eenduidig en eenvoudig
is.
De Eoetsenkrijgen
dus een anderebece-kenis. Oit heeft als
konsekrrcnEie,dat de
ASCII-kodedie
van hettoeËsen-bord naar de
compuEer wordÈverstuurd
opgevangen moeÈ rrnrden voordaE heÈbeeldscherm aangestuurd gaaË norden. De opgevengen ASCIl-waarde moeE eerst
omgezeE worden
in een aantal
ASCII-waarden,die dan
s€tmeneen
bepaalde kl ankvoorstellen. Ilieruoor is
een omzeccabelnodig.
Nadac een Eoetsis
in-gedrukg wordE de
bij die
Eoets horendestring (tlant)
vanuiËde
omzeEtabel naar heÈ beeldscherm doorgegeven.En andere
eis
voor
heÈ experimencis dat er
een
vooraf
insEelbaar,r
ij
dsintenral
moeE zí jn,
waarbinnende
proef persooneen
toord
ingetypt
dient te
hebben.nit is
elegant op
te
lossen meE behulp van een inEerruPEmogelijkheid. Het
progremma kan de versÈrekenÈijd
bijhoudenen
af
en
Eoecontroleren
of er
eeninterrupt is
gegenereerdvanuit
heE Eoetsenbord.3.5
Opslag van deinPut
van de ProefPersoonin
heE geheugenDe
strings die
op
het
beeldschetmverschijnen
moeEennaar
de
bij
hetexperimenE horende
datafile
rrcrdengeschrwen.
Als
daarnaasE deoorspronke-lijke
woorden wordengezeir.wordt
het vergelijken
van stimulus meE resPonseenvoudig. De
oorspronkelijke
Í,oorden moetendus ook nog
ergens bekendzijn.
3.6
Afronding van een sessieof
experimenÈNa
afloop van elke sessie
van50
woorden moeËer
even gewachE snrden zodaÈde
proefpersoon evenuit
kanblazen.
Omde
proefpersoonextra
Lemo-Èiveren moeÈ evenlueel eeÍr score op
het
beeldschermverschijnen.
Aangeziende
cornpuEerniet zelf de
gegvensverríerkt, is
de exakEe score(d.w.z.
heEaantal juist
ingeÈypte woorden)direkt na
een sessie nognieÈ bekend.
Welkunnen
zich
een EweeËal gevallen voordoendie
zeker leiden EoE eenfout,
Ëe Íre Een :1)
Deinput is niec of
ce laat volÈooid binnen heÈ daarvoor beschikbare tij dsinterval
.2) IIet
aanÈal aangeslagen toetsenbij
een woordis te klein.
fu
coch een score te kunnen geven moet eentruuk
EoegepasE rrcrden.Er
rprdÈ eenwillekeurig getal
gegenereerd Eussen 35 en 45. Dit gecal nordcvermin-derd met heÈ
aantal
nieEvolcooide of
Eekorte
woordenin
een sessie. Ileczo
onEsEanegeCal
wordÈgebruikt als
aanËal korrekEe anËwoordenvan
deNadar een experimenÈ
is
afgerond moeE dan nog dedatafile,
waarinalle
gegevens van heE experimenEstaen,
r.rcrden gesloEen.3.7
Blokschema vanhet
progranunadat het
exPerimentregelt
Na deze analyse kan een eenvoudig blokschema opgesteld
rcrden van
het programmedat
hec experimenE regelE:ÉirtDt erprrimPr ?
Itat
louooio Scoeí IAP LAAr ftLOe,,9e trrtD.ÀD XOq€l,rrtlurtlr. ilput
ilu
agoeÍ?LBffi.rl )LA irrroaxATre Op lN oêHe1[63rtDE PROGRAMMATUUR
4.1
Inleiding
Uit de
analyse
is al
gebleken daÈer
een Eweetal aspekcente
onder-scheiden
zijn
aan de opdrachÈ'te
h,eEen:l)
Aanmaken van votdoendespraakfiles
meÈ nonsenssoorden.2)
Regelen ven de experimenten met proefPersonen.Deze
leiden
Èot
EÍ.reeverschillende,
onafhankelijke
comPuEerProgramma's. Indit
hoofdstuk
zullen de
Èwee programma's,die
ontwikkeld
zijn
uiWoerig worden besproken.De
progranma's makengebruik van
Erteeobject libraries
nanelij kUSERDISK: IVOGTEN.LVSSUB]LVS.OLB en USERDISK: IAKOFON]VTSCREEN.OLB. DCZE
MOE-ten
bij
heÈ linken dan ook meegenomen wordenvia
de
synbolen'lv'
en'vtp'
.Deze synbolen r,aorden
bij
heÈinloggen
in
de
compucergedefinieerd.
(Vooruitvoeriger
documenEaciezíe
IPO-handleiding65,
proceduresto conlrol
Ehescreen
of
W-Èerminals doorJ.R.
dePijper
en lPo-handleiding 68,LVS-rouEines
available for
PASCALand
FORTRAI,Iprogras for the
IPO VAX1f/780 door L.L.M. VogÈen). Boven
elk
afzonderlijk
progrenma onderdeel moeÈheE aËÈribuut
I
inherit
('userdisk:
Iakofon.lvs]lvs.env'
,' userdisk: I akofon] vtpas. env' ) l
worden zodaE
de
uif die libraries
gebruikte
proceduresnief
af-meegegeven zonderl
ij
kBij
dedie later
expl ic iet
gedeclareerd hoerren Èe rrcrden
eerstgenoemde
object library
horenCerug komen.
Die
EyPes rmrden daaromvermetd. tyPe
intl
=[byte]
-128..I27;
inc2
=[word]
'32768..32767;idrnbuf
=array
tl.
.l28l of
inceger;filenasre =packed
atrey
tl..64l of
char;een
".rrt"t
typedefeniEies,4,2
De sofEwarevoor
het
genererenZoals
al
eerder opgemerkE werd(in 3.3) is er
een progranma bekendon-der de
naam "I,IOORD", geschreven door Rene Verhoerren, daE eenlijsÈ
ruet non-senswoordenleverE.
DeIijsË is
zodanig gemaakË,dat alle
kmrbinacies van Ènee klanken en dus ookalle
difonen
voorkomen. Delijst
besEaaÈuit
drie
soorËen qroorden; elke soort sEeaÈ
in
eenaparte
tabel.
Despelling
van dewoorden
is
zodanig,
daE verwerkingervan
in
volgendeprograma's
zonderueer mogelijk
is. In bijlage B staat
een
(ingekort)
voorbeeld
van zo'n
woordlij
st .Er is
nog een voor heE aanmakenvan
spraakfiles
inreressanÈ progranma(nl.
I'Crr) aanwezigin
de
VAXdat
woorden omzetin
geconcaÈeneerdedifoon-files
(de
zogenaamdeVp-files).
Dezefiles
bestaanuic
een aancalparÉme-Eers.
Die
parÍrmecers bevaEtenalle
informatie,
die het
spraaksysteam nodigheeft
on bepaalde spraakten
gehore Le brengen. (Voor meer infornarie over rrCt'zie
ook de eerder vermelde IPO-handleiding 67).Een
grool nadeel van
heÈ progrdma"C"
is
dar
elk
uoordafzondertijk
eninÈeraktief
verwerkt moeÈ.r^rorden. DiEkost een hoop
rijd.
De VAXheeft
ech-Èer de rnogelijkheid on
meE commandofileste
$erken.
Een commandofile be-staaËuic
een
stuk
progranmateksc, evenÈueel gevolgddoor
input
voor dat
programma. On"c" in
eendergelijke
konsErukEie Ee gebruikenis
eenenigs-zins
gewijzígde
versie, n1.
ttcBATcH",beschikbaar. Een voordeel
van"CBATCII"
is
nogdat
heË rrrord, Íraar deVP-file
van wordE gemaakt,in
heÈidentificatie
record vandie A/P-file
wordÈ opgeslagen.Dic
maakEEerugwin-nen van
het
oorspronkelijke rcord
bijzonder
eenvoudig.De
woordlijsc
bestaaEuit 3
cabellen
cvvc-rcv1v2c-
en
vccv-rmorden(c=consonanE,
v=vocaal).
In
een experimenE
krijgË
een
proefpersoon eensoort woorden.
Duser
zullen
3
series
l/p-files'en
dus ook3
commendofiles gemaakE moeÈen rrcrden. Omze Ee kunnen onderscheiden
rordL
door
heLpro-graÍma een nunmer achÈer de cosrmandofilenaau gezet.
De commandofiles
voor heÈ
omzeEÈenvan
woordenin VP-files
moeEen erals
volgt uit
komen Ee zien:$ASSTGN/USER-MODE SYS$INPUT SYS$COMMAND $RUN CBATCH.EXE ero ord I S
A/P-filenasnl
Y woord2 S A/P-f ilenae2 Y : woordN s A/P- filenaamN Y a $EXITwaarbij N een inEeger is en S, Y en a zijn
cqnmando's voor''CBATCH''
Oe
A/P-filenaa
besËaaEuit
de door de gebruiker van te voren opgegeven naémgevolgd door een code, die
aangeefÈvan welk
soorEqpord het
eenA/P-file is (cvvc, cvlv2c of vccv). Achter die
na€mrprdt
een volgnummer gezeE.om een commandofile
uiE
Ee voeren moeÈ heË cqomando tt@cqrmandofilenaatrtt gegeven worden. Na hec uiEvoeren van de commandofileszijn
eengroot
aantalA/P-files
gevormd. Deze moecen nogrnl
omgezeE wordenin N-files,
omdac heËprograrma
dac de
experimenEenregelÈ van N-files uic
gaaÈ.De staP
vanA/P-files
naarN-files
moeÈ de gebruiket zelf doen. Er is echLer eenkrach-tig
corunando beschikbaarvoor
dezemzetting
("SYN', zíe
wederomIPO-hand-leiding.6T).
IleÈoorspronkelijke
rrcorddat in
hec identificatierecord
van eenA/P-file
sÈaatverschijnc
ook in het identificatie record van debijbe-horende
N-file
door deze omzecEing.Hef
onzeEEenvan de woordlijsc in
conrmandofilesen hec ten uiwoer
brengen van de cornmandofiles
rrprdt gerealiseerd door
heE progratrma"CONVI.IOORD". Voor de
volledige listing
vanhet
programma:zíe bijlage
A.De
in
''COIWIIOORD"gebruikte variabelen
hebben de volgende betekenis:AP_dum en
AP_dumny
:hulpvariabelen, gebruikt
on karakEers engecallen
eenvoudigte
kunnen koppelen aanVP_nm.
AP_dummy bevatde sta
(hec gerneenschappelijke
deel
vanalle
A"/P-filenanenl invoervia
het Eoetsenbord) en
AP_dum bevatde
sta
plus
de woordsoorEcode(cvvc, cvlv2c,
of
vccv).AP_narn
:naámvoor de
Ëe genererenVP-file,
dus sEamplus
code vande r.roordsoorÈ
plus
rangnummer.f
innae
:naem vande
file
waarin de woordlijst
staaE geschrwen,invoer
via
hec Eoecsenbord. Aangezien er meerdere versies van dercordlijst
onder dezelfde naan kunnen bestaan moeEsumen meÈ deze naan ook
het
fileEype
(.dat)
en evenEtreelhet
filenummer ingevoerd r"orden.fcname
:naam van de commandofiles,invoer
via
hec EoeEsenbord.k,1
:hulpvariabelen,
gebruikt
als tellers.
i
:teller, die
aangeeft welke van de3
cabellen van dewoordlij sÈ verwerk wrordc.
nr
:volgnummer van deA/p-file. Dit
nurnmer rrcrdEuit
de
file
waarin de r"pordlij
sten
sEaan gelezen.p
:rangnunmer van de eerste spaEiein
heEarray
van deA/P-filenaam.
Dit
nummeris
nodig onr karakEers Eoe Eevoegen aan de VP-filenaasr.
q
:rangnunmer van deeerste
spaEiein
heEerray
van de commandofilenaam.Dit
nummeris
nodig qn karakcers ÈoeÈe voegen aan de conmandofilenaaur.
kar
:hulpvariabel,
gebruikc om karakÈersuiÈ de
r*oordlijst
in
Ee lezen.daËain
:inpucfile, die
als
naam finname heeft.confile
:commandofile,die
als
naÉrm fcnaue heeft.ea
:teller,
die het
rangnummer van hec volgende Ee verwerkenwoord
uit
derrcordlij
sË aangeeft.
aantal
:aanÈal qnorden vande
Ee verlrerkenwoordlijst.
DiË geÈalwordc uic dacain gehaald.
Na
afloop
van heE progrtmma 'TCONVI^IOORD"zijn er
uigaandeven een
be-staande
file
rnet3 soorten
rrcorden3
conmandofiles
gegenereerd,voor
elksoort
woorden(cwc, cvlv2c
envccv) een. lÍec
deze commandofileszijn via
aanroepen van heE progrirmma 'fCBATCHTT vervolgens 3 series A/P-fil es
gegene-reerd, die
nogdoor de gebruiker
omgezeE moeÈen r"prdenin N-files,
door aanroepen vanhet
progrimma rrSYN'r.In principe zijn
de commandofiles
naaf-loop
vanhet
progr'Ínmaniet
meer nodig.4.3
De softwarevoor
het
regelen van de experimentenDe in de analyse van het probleeur
(hoofdstuk 2)
gescheEsEe modulaire opbouw van heÈ progrmma, daEde
experimenEen moeLregelen is gebruikt
als uicgangspunÈvoor dat
progranrma.Er is
een hoo fdprogrérmme, t'PROEFPERSOONTIgenaand, daÈ gebruik maakt van de volgende procedures:
I) inicialise
(nodule"INrTr")
2)
makeconv
(nodule 'rMAKcor')3)
spraakouÈ (module "SPOU[")4)
woordinpuc (module "Í,ÍRDIN")5
) store
(urodule "sroRE'r)en van
de
funcEion inË_randon (module "RANDOMTT). Aangeziende function
enprocedures
zijn
gerealiseerd
als
afzonderlijk
geccmpileerde programeon-derdelen sEaaE de naam van de bijbehorende module achEer elke naam.
HeÈ EoÈale progr:mma
is vrij
uitgebreid en ook de
modulaire
opbouwmaakt een- recht-Eoe-recht-aan-behandeling
moeilijk.
Voordat
de
programmaonderdelen behandeld gaan worden,
zullen daarqn de
gebruikte globale
varia-belen genoemd en
verklaard
worden enzullen de vermelde rouËines nader
uiÈ-gelegd worden.
4.3.I
devariabelen
van "PRoEFPERSooNTIIn
de heading van het. hoofdprogrÍutrmazijn
de volgende Eypen envariabe-len gedefinieerd:
(zíe
ookbijlage
I)
EYPe
asciiarray =atray t0..641
of incl;
dat
=packedarray
[1..tI) of
char;icen
=recordrij
:array
t1..41
of incl;
ntlchr: int2;
end;
tabel
=array
LL..L27)of
item;var
conv
: tabel;
corwersieEabel .ichan
:int2;
Eerminalnummer, nodigvoor speciale
oPeraties.
ichn
:intl;
numner van heÈ spraakkanaal.indexperimenE
:inE2;
rangnummer van heE momenEane woordin
een experirnenE.filenumrner :int2;
nummer van deN-file.
aanEalsessies
:inÈeger;
aanÈal sessiesin
een experiment.woordlengte
:int2;
aanEal karakcars vaningetikte
roord.woord
:asciiarray;
karakcers vaningecikte
rroord.dat.aouÈ
:text;
datafile
voor
de resultaÈen vanheÈ experiment.
fnae
: filenae;
naam van daÈaouÈ.ppnaÉD
: filenme;
na:rm van proef persoon.nfile
:filenane;
naao van N-files.ndum
:filename;
hulpvariabele voor
heE koppelen van eennunmer aan de
N-files.
actword
:filename;
bevaÈ heÈoorspronkelijke,
als
spraakuiEgegeven
lpord.
datr:n
:dac;
datr-m.ses
:inÈeger;
numner van momenEane sessie.delay
:inEeger;
maximale aanEal intervals van 4 msec datgewachE moeE worden
op
inpuL.fout
:inceger;
aanÈalornrolledig
ingecypte woordenin
een sessie.
score
:inEeger;
score van een sessie.displayscore :boolean;
geefE aanof
de score vermeld moet worden.exisc
:boolean;
geeft
aanof
een aangeroepenN-file
besÈaaÈ.
Bij
hecdefinieren
en
aanroepen vande
verschillende
procedures rrcrden debovenstaande né[ren ook
gebruikt. Dit
vergrooc
de
leesbaarheid vande
pro-granma' s.
4.3.2
procedureinitialise
Deze procedure
initialiseert
een experimenE. Devolledige
listing
sEaaÈin
b i.i l age C.AchÈereenvolgens vraagÈ heÈ progrémma de gebruiker de naém ven de
daÈa-file
voor de informatie
van heÈ experimenE, de naam vande proefpersoon'
dena€lm
van
de
Ee gebruikenN-files, het
aantal
sessiesvan
50
woorden, demaximale
tijd
waarbinnen een proefpersoon een woordin
moeÈ Èypen enof
al
dan
niec
een score vermeld
ooeE rorden.Al
dezeinformatie rmrdr
in
dedatafile
geschreven. TensloÈte wordennog terminalnunmer
en
spraakkanaalEoegeÍre zen .
t+.3
.3
procedure makeconvDeze procedure maakE
de conversietabel
die
nodig
is
voor heE
omzeÈEenvan
een ASCll-waarde naar eenrij
ven meerdere ASCII-waarden. Delisting
staat
in bijlage
D.llieronder
sÈeat heÈ Ëoecsenbordafgebeeld, met de
karakÈerkoubinaEiesop
op
EoeÈsen rrrear zeaen
gekoppeld behorenEe
zíjn.
DenieÈ
ingevulde Eoersen behouden huoorspronkelijke karakler.
Merk op dat de langsÈe karakÈercoobinatie
uit
4 karakers
besËaec.De
tabel is
nuals
volgE opgebouwd:de
cabelbestaat uiÈ
eenarray
vanI27 plaatsen.
De plaacsenzijn
gekoppeld aande
toeEsen van heE toetsenbordvia
hun ASCII-waarden. De ASCII-waarde,die
na
het
indrukken van een ËoeEsI AA 2 AAI 5 ÉE v Éu
t
AU 6ol
luu
8.
ul
t
oo
oOE IE !n
r.g DÊ1. eite
Y E RÍ
I
EI u I a Pt
7J
I
DJ arlL0
t
, D I o ll 7 X À , Auv rrurvlLar SndrÍ AII
^.
Z,J É -J v E p Dt ,r@t
oEt I uh/tulfr
(o..1 DoÉt cxal.
I
naar de cornpuÈer $rordÈ gesÈuurd wordE
nanelijk
gebruikc
als
de
index voorde conversietabet. Elke plaaÈs
in
de
tabel
bestaaÈ weeruiË
eenarray
van 4plaatsen
(de
langste karakterkombinatie),
waarin debij
een
ÈoeÈs horendekaraktersÈring
sEaatin
de vorm van ASCIl-waarden aangevuld EoE4
karakËers mecspaties
en een inÈeger,
dat het
aanÈalniet-spaties
aangeefC. Voor demeeste toeÈsen
geldc,
daE de ASCII-waardevan
het
toeÈsenborddirekc
naarhet
schentrkan. In de
cabel
becekentdic, dat de
inhoudop
een bepaaldeplaacs
gelijk is
aande
daarbij
horendeindex
plus
3
spaties. In
principe wordÈde
Èabel ook zo opgebouwd. De uiczonderingen wordenlaLer
aPert
inge-vuld.
(Overigens r,rordende
spaÈiesniec
naar hec beeldscherm gestuurd.)4.3.4
procedure spraakouÈDeze procedure bepaal
c of
de
N-file
Íraernrande
naÉmlprdE
meegegevenbij de
eanroepvan
spraakoutook
werkelijk
besEaat.
Als diÈ m is,
danwordÈ
de
in die
N-file
opgeslagen spraak uiEgegeven. Tevens r.tordtuit
heÈidentificatie
record
van deN-file
hecoorspronkelijke
ucord
Eeruggel,on-nen'. A1s
de
N-file
niec bestaat,
dan r.nrdLdit
gerneld door de variabeleexist
false
Ee maken. DelisÈing van deze procedure sÈaat
in bíjlage
E.De
lijst
vanlokale
variabelen
en de gebruikte procedures van spraakouÈvragen misschien een
kleine
excra
toelichting.
Dêvariabelenlijst
zíeE erals
volgt
uic:
var
ib4
:idrnbuf;
Ifi1
: inc2;kar
:inrl;
sanplefr:real;
k,1,i4
:inEeger;De
function
ifxst(nfile)
bepaalt de
lengcevan
nfile.
Als
nfile niet
be-staaË dan geeftifxst
de waarde0.
De lengte vande
file
t.ordE door deva-riabele lfil
bewaard.In
ib4 wordc
het
identificatie
recordvan
eenN-file
gecopieerd door de procedure
flidrn.
Voor deuicgifte
van spraekvia
Proce-dure
fspr
EoeEenfilelengte en
saurplefrekr,pncie
bekend zíjn.
De sanplefrekwentie
sÈaatin het
identificaEie
record op
piaats 62.
HeÈoorspronke-lijke
r,mord ÈenslotÈe scaat op de plaatsen28
EoE43.
Elke
plaaEsbeslaat
4bytes. Elk karakter
van heE woord wordE gerepresenEeerddoor
eenbyte.
Opelke plaats
sraan dus4
karakEers, geschrevenMeE
de
operacoren rnod256
en div
256
wordtASCII-waarden.
een
integer
van4
byÈes.integer
onErafeld
toÈ
4als een
4.3.5
procedure woordinPutDe procedure woordinpur
zorgt voor
de
proefpersoon ingevoerdeinfornatie.
in bijlage
F.een korrekce verwerking van de door
De
listing
vanhet
progranme sEaaEDe procedure
begint
meEheE
in
orde maken
van
de tay-out voor
heEbeeldscheru
d.w.z.
midden onder op heÈ beeldschemverschijnt
de boodschap'type
woord (nusrmer)'Venrolgens wordE
een
inEerrupt
proceduregescart (openkbint).
DezeProce-dure
vangt
de
eerstvolgendeinput
van heÈ ÈoeÈsenbord oPterwijl
hec
Pro-gramma
door loopÈ.
Daarna wordE een aanEal(delay)
keer 4
msec gewachE. Naiedere 4
msec wordË gekekenof er
eeninput
vanuiÈhet
Èoetsenbordis
ge-weesc. Een evenÈuele
input
(eSCtt-waarde) wordÈvia
de conversieEabel naarhet
beeldscheru gestuurd. De mgezeEÈestring
nordEook
onEhoudenin
heCettay woord.
Eencarriage
reÈurn rrcrdÈ beschourdals
einde vande
input.
Iser
gedurende4
msec geen inpuE geweesE, dan wordt eenEeller
(elaps)
oPge-hoogd.
Overschrijdf
deze Èeller de van Ee voren berekende waardedelay,
nogvoordaE
er
een carriage reÈurnis
geweesE, dan wordtde
input
afgebroken.HeC
array rmord
tprdE aangevuld
meEdrie
maal'*' ,
Cen Èeken dacde
inpuEniec
voltooid is
binnen de daarvoor beschikbareEijd.
Het
aanÈalkeer
dac4 msec wordt gewachE wordt bepaalÈ
uit
eenbij
de
inicialisacie
ingevoerdewaarde. Deze waarde (aanÈal msec daÈ beschikbaar
is
voor heC
invoeren vaneen vroord door
de
proefpersoon) wordÈ gedeeld door5.
DiÈis
dus eigenlijk heÈ aanEalkeer
dat
5
msec gewacht moeE worden. Aangezienhet
Progratrmawordg gedraaid
op
een computer lraar meerderegebruikers
mee werken, trcrdEheg Cijdsinterval
dar de
proefgersoon Eer beschikking sEaat oln een woordin
Èe
cypen ongehrensÈlanger.
0mdit
Ee ondenrangenwordl
4 in
plaacs
ven 5 msec gewachE.A1
s de
tabulatieEoeEswordt
ingedrukc
(ASCIl-r.raarde9)
dan
r.aordt delaaÈsEe
naer
het
beeldscherm geschreven karakcerkcrmbinatiegewist
van
heEschern en
uiE heÈ array
'rpord gehaald. hienneeis
eendelecefurktie
gerea-I i seerd
De tel
ler
fouE houdcbij
hoe vaak een inpuE afgebroken r.ordÈof
hoevaak een
woordte
weinig
karakters
bevaËtijdens
een
sessie.
Dit
qtr
eenietwaÈ
realistischer
score Ee kunnen geven.4.3,6
procedure sËoreDe procedure score slaaÈ heE aan
de
proefpersoon aangebodentoord
enheÈ door de proefpersoon ingetypce woord op in de
datafile.
De trcorden rrcr-den vooraf gegaendoor een index.
Delisting van dze procedure
sEeaÈin
bijlage
G.4.3.7
funcEionint
randomDe fr:nccion
inc_randqngenereer!
een randcminteger
Eussende
bij
deaanroep gespecificeerde grenzen. De
listing
scaat
in bijlage
ll.
4.3.8
programma "PROEFPERSOON""pROEFPERSOON"
is
hec hoofdprogr:rrnavoor
her
regelen van deexPerimen-ten. Dit
programma maakcgebruik
van'de
hierboven verrnelde procedures enfuncÈion.
In
het kort voert het
de volgende stappenuít:
I initialisacie
van een experirnenc(initialise
en makeconv).2
aan hec begin vanelke
sessie wachEen opcarriage return.
3 ten gehore brengen
van een woord (spraakouc).4 verwerken van
de
inpuË van de proefpersoon(qpordin).
5 opslaan
vaninforrnatie
in
geheugen(store).
6
sËap3,4
en5 herhalen
zich
Eot een sessievoorbij
is.
7 na een
sessie wordÈ evenEueelde score
aangegeven.' 8
stap
2
t/n
7
herhalenzich
toEalle
sessies gedaanzijn.
9
afronding van heÈ experimenE.Tijdens
de experimenten
wordt de
cursor alleen
zichcbaartijdens
de input
door de proefpersoon.
Devolledige
listing
vandic
progratrma sEaacin
bij-lage
I.
Belangrijk
is
nog
Ee vermeldendaE,
bij
hec
linken
van
heÈhoofdpro-grarma
( "PROEFPERSOON")de
uodules
"INITI",
"MAKCO", 'rSPOUT", 'rlíRDINT',ttSTOREtt enttRANDOMt'meegenomen moeten norden naasc
de
beide
in
paragraaf4.1 vermelde object
libraries.
KONKLUSIES
De
in
hoofdstuk4 beschreven programma's
zijn
op de VAX ingevoerd.het
runnen ervan werden de volgende zaken opgemerkÈ:"COtiNlIOoRDrr
voldoet aan
de gesteldeeis
d.w.2.
"ColwI,toORD" genereertspraakfiles,
uiEgaandevan
woordlijsten.
Itierbij dient het
volgende vermeldte
rrorden. HeE kanbij
hecuiwoeren
van heÈ door riCON/IIOORD"aangeroepen progrëilma "CBATCH" gebeuren
dat
"CBATCII" eendifoon
nieE kenÈ.Iiet
programma trcrdÈ dan afgebroken. Deoverige
N-files
rordennieÈ meer gemaakt.
Het
is
dusbelangrijk, dat in
de gebruikte
spord-lijsten
alleen
r*oorden meÈvoor
"CBATCHI bekendedifonen
voorkomen.DiE
houdÈ Èevensin dat de in
"CBATCH" bekendedifonen
regelmatigmoeÈen Horden
bijgewerkt.
"PROEFPERSOON"
regelt
de experinent.en
meË proefpersonen zodanig dataan
de eisen,
zoals
die
gefotmuleerd
werdenin de
opdrachf
( ziehoofdstuk
2) is
voldaan.
Er
tredenrrel
enkele ongeÍrensEe ef fekÈen op.Indien
tijdens
heE uiÈvoeren van epordinpucde
ÈoeÈsen zeel. snelachter elkaar
rorden ingèdrukt
kan heÈ gebeurendat er
eeninput
ge-mist
wordEdoor
het
progri[ma.
DiE
rgordEwaarschijnfijk
veroorzaaktdoor
heEfeit
daf de inpuÈs
vanuit
het
EoeEsenbord worden opgevangendoor
de
procedureopenkbint.
OpenkbinÈ kan maar een karakEertegelijk
verwerken.
Als
na een inpuchet
bij
openkbinc horendebuffer
niec
opEijd
wordt
leeg gehaald
en
er
kornÈ een nieur.e inpuE, dan',prdt
dienieuwe inpuË nieE verwerkE. DiÈ
zal
optredenals
heÈ cqnputersystesndruk
bezet
is.
Dan moeger
Ce lang gewachElorden voorda3
het
Pro-grÍmma hecbuffer van
openkbint kan lezen.I{ec kan gebeuren
dat er bij het
makenvan
de
lay-ouc,
bij
hetschrijven
van karakÈers naar hec beeldschem en
bij
wissen van eeneerder geschreven
sÈring
(delele)
somsría!
verEragingen opÈreden. Ookkan heÈ gebeuren
dat
er
een korÈe verËragingzít
Èussen indrukken van een coeÈs enverschijnen
vankaraklers
ophet
beeldscherm. Beideef-fekcen
zíjn
waarschijnlijk
ce wijËen aan heEfeic
dat
indien
meerdere gebruikers me! de VA)( werken, processenEijdelijk
onderbroken kunnenworden.
Een vierde ongemak
van tmordinput
is
hec
feit dat
de
lengÈe vanhec
Cijdsinterval
waarbinnen een proefpersooneeo
toord
kan
inCypenl)
2)
sterk
afhangE vanhet
aant,al gebruikersriment.
Oit
effekt
r.rordcwaarschijnlij
kdac hec
programma wordEgedraaid
opsvsceem.
van de vA)( Ëijdens
het
exPe-ook veroorzaakE door
her
feit
een
inceraktief multi
userEr was niec voldoende
cijd
beschikbaar om Ee onderzoekenof
dehierbo-ven gescheEsEe
bijverschijnselen
op eenof
andere maniergeelinineerd
kun-nen worden. Vooral heE missen van een inpuÈ kan voorde
proefpersoonver:\re-lend zijn.
Indien
de
proefpersoneneen
goedetoelichÈing
krijgc zijn
deprogrmma's echEer goed
bruikbaar
voor
hec
uiEvoeren van de versEaanbaar-heidsexperimenÈen meE heE IPOdifoon
spraaksysteem.A
LISTING VAN PROGRAM COI{VIIOORDI
inheric
('userdisk:
I akofon.lvs]lvs.env'
,' userdisk: I ako fon] vtpas. env' ) l
PROGRAI,Í COIWWOORD ( inpuc
,
ouEpuÈ,
datain,
ccmfile)
;PROCEDURE
libgdo
ccmmand(x:varying
Ilenl of
char);
excernel; var AP_nam : fil
ename ; APdr:m
: fil
enane ; AP-duuny: f ilename;finnae
:filenane;
fcneme
:filenene;
k
: inceger;1
:integer;
i
:integer;
p
:inceger;q
:integer;
nr
:inr2;
kar
:char;dafain
:texË;cqnfile
:texE;ae
: inËeger IaanÈal
:inceger; BEGTN erase_sc reen;writeln('cyp.
naan vande
Èe verwerken nonsens-woorden-file');write('meE
type-aanduiding(.dac)
enevt. nummer z')i
read ln( f innme) ;open(datain,
file
nane:=finflft€,
history:=old)
;ràset(datain);
write('typ"
nam van de Èe genererencommandofiles z');
readln(
fcnme);
write('Eyp"
naam vande
Ee genererenVp-tites
:');
readln(AP_dumy);P:-l;
1 : -ord( rut_dunmyl pl ) ;
while
1<>32do
{
bepaal de eersËeplaats
in
AP-dunmyIdaar...
}begin
(
...een
sPatie
staaE )P:=P+1 ;
1:=ord(aP_dumnyIp]
);
end;q:=l;
1:=ord( fcnamet ql ) ;
while l<>32
do
{
bepaal de eerst plaatsin
fcnane waar... }begin
(
...een
sPaÈie staat )q:=q+I; I :=ord( fcnamet ql ) ; end; Eor
i:=l to
3
do begin
AP_dr.rm:=AP_duruny;i
f i=l
then{ i=l:
cvvc-woorden }begin
fcnae I ql : ='
l'
Iopen(
comfile,
file_nae :=fcnane+'
AP_dr-m : -AP_dr-unmy; AP_dun[ p7 zo'
c'
i AP_drsrI p+I ]:='v'
; AP-dunI P+21 :-'v'
i AP_durn I p+3 I : =' c' ; end;if
i=2 then
begin. ccf,o'
,
his cory : =new) ;(
í=2: cvlv2c-woorden )
SYS$ INPUT SYS$COMMAND, ) ;
(
irrelevanEe...
)( ...regels...
)( ...in de...
){
. . .woordfijsr
} fcnaneÍq7 z='2' ;open(
cqnfile,
file-narne :=fcnme+' .co!'
,
history:=new) ;AP_dumI p]
:='c'
; AP_dnn[ p+l1 :o'v'
i AP_dr-urI p+2):='L' ; AP-dnmI Pr3 ] :='v'
i AP_dun[ p+4 ] :='2'
i AP dnsrl p+5 ] :-'
c'
i end; if
i=3 then
begin end; AP_nam :=AP_dum;rewrite(comfile);
wr iceln(
coofile,'
$ASSIGN/uSnn lfOOuwriteln( comfile,'
$RUN CBATCH.EXE' ) ;for k:=l to
4
doreadln(datain);
if i<>l
chen begin read ln( datain) ; readln(dacain); end; read(dacain,aanÈal) I readln(dacain);readln(datain);
for
aa:=l
to
aanEal do beginwr
iteln(
comfil
e ) ;{
i=3: vccv-noorden
}fcnmetql:='3';
open(cqnfile,
file
name:=fcnae+' .ccrn',
hisEory:=new) ;AP_dusrI p]
:='v'
;AP_dr.rn[ prl J : ='
c'
iAP_dnurI p+21z='
c'
iAP dtrnl p+3 J :
-'v'
i(
aantal
woordenin
delijst
)reed(datain,nr);
{
lees
nummer }read(dacain,kar);
{
lees
spacie }for k:=l
Eo4
dobegin
read(datain,kar);
( lees'('
)t";"::=l to
2
do
{
lees
twee karakcers }read(
datain,kar)
;if
kar<>'
'
thenr*riÈe(cqnfile,kar);
end;read(datain,kar);
{
lees
'>'
}end;
for k:=l
Ëo5 do
read(daCain,kar);
{
lees
5 spaties }
writeln(comfile);
writeln(
cqnfile,'S')
;namnr( nr ,AP_na) ;
writeln(
comfile
rAP_narn) ;AP nm:=AP dtml
wrTteln(
"fr-tit
",'\'
) ; end;wr
iteln(
cqnfile
,'Q'
) iwr
iteln(
comfile
,'$EXIT' ) ;close(cmfile);
I ib$do-cqnrnand(' G' + fcnae ) ; end;close(darain);
erase. screen; cursor_down( 10);writeln('Er zijn
nudrie
secs vena/p-tites
gevormd');write('
L) ');
for k:=I ro (p-t)
do nrire(AP_dr-umylkl);
wr iceln(
'cwc*
voor cvvc-woorden.'
) ;wrice('
2) ');
for k:=l
Eo(p-l)
do nrire(Ap_dusrmytkl);
wr
iteln( 'cvlv2c*
voor
cvlv2c-woorden.' ) ;write('
3) ');
for k:=l ro
(p-1)
dowrite($_drmrnylkl);
wr iceln(
'vccv*
voor vccv-woorden.' ) ;cursor_down(2);
wr
iteln(' ********************************Jí*********'
) ;wriceln('deze
moeËen nog oogezec wordenin N-files!');
END. ( *ëonvwoord* )
B
VOORBEELD VAN EEN LIJST VAN NONSENSI.IOORDENll94
VCCV woorden.I
<ii><h
><i
>< >
2
<y',t><h ><a>< >
3
<ui><l
><aj><1l92<ei><h><ei><>ll93<oi><v><ui><>1l94<oo><zj><oi><>
C
LISTING VAN PROCEDURE INITIALISE (UODULEINITI)
I
inheric
('userdisk:
I akofon.lvs]lvs.env'
,'userdisk:
I akofonlvtpas.env') ]MODULE
INITI
( inpuc,ouÈpuÈ,daEaouE) ;t yPe
dac
=packedarray t1..111
of
char; vardaÈaouË
:text;
Igloball
procedureinicialise(var
ichan:inc2;
ver ichn:intl;
var nfile:filenae; var fnane:filenae;
ver
ppnaa:filenane;
var
datr-un:daE;var
aanEalsessies: inÈeger;var
dat,aouE:Èext;var
delay:inÈeger;
var displayscore:boolean)
;ver
charin : char;
beg
in
erase_sc reen;
cursor
posicion(8,1);
write(7type een
naam vande
file
voor de
resulËateni
');
read ln( fnme) ;
open(daÈaouÈ,
file
nerne :=fn*'re rhisEory :=new) ;rewrite(daÈaout) ;
writeln(dacaout
r'
filenaa :'
rfname) ;write('typ"
de naarn van deproefpersoon:
');
read ln( ppnaam) ;
writeln(dataout
r'nar.
proefpersoon:'
rppnaam) ;d ate( datuÍn) ;
writeln(daEaouE r' daÈuuu :',datum) ;
write('geef
de naan van deN-files,
voor
dic experimenc2
');
read ln(
nfíle)
;writeln(dataour.r'N-files
N:'rnfile)
;n
file :='n:'+nfile;
wrire('hoeveel
sessies van 50 woorden beslaaË hetexperimenc?
');
read In( aanÈal se ss ie s) ;wriceln(daÈaout
r'aenÈal
sessies van 50 woorden=' ,aanÈalsessies:3) ;write('hoeveel
mseckrijgc
een proefpersoonm
een rrcordin
ue tikken?');
readln(detay);
writeln(dataouE,'maximale responscijd
:',deLay:6,'
msec' ) ;delay:=delay
div
5;write('score vermelden?
(y/n)
');
readln(charin);
if
charin='y'
È hen
beg
in
d i spl aysc ore : =crue ;
wriceln(dataout,'
experinenc met score-aanduiding' ) ; endelse
beg
in
d i s pl aysc ore : = fel se ;
writeln(dataouE r' experimenE zonder score-aanduiding' ) ;
end;
writeln(dataour)
;writeln(daÈaouE
r' nr oorspr. woord
waargenqnen woord') ;wr
iteln(
daEaouL,'
');
ichan:=Ètnumber;
{
cerminal nummer }ichn:=getchannel;
(
nummer van spraakkanaal )wr
itel n;
writeln('druk
op return omverder
Ee gaan');read
ln;
end;
(*procedureinitialise*)
END.
D
LISTING VAN PROCEDUFJ MAKECONV (I,ÍODULE MAKCO)I
inheric (' userdisk:
Iakofon.lvs]
lvs.env')l
MODULE MAKCO ( ínpuc,outpuË);
c yPe b i17 i teur t abel c ornr [ 3 9 ] . n
tl
chr :=4; conv[39].rij
Il]
:=101 ; conv[39].rij
[2]:=l0l;
conv[ 391.rij
[3] :=l l7;conv[39)
.rij
[4]:-Il9
;conv[441
.ntlchr:=3;
c orw [ 44 ] . r ij
t I I : =l I I ; conv[44].rij
t2l
:=lll;
conv[44].rij
t3] :=105; conv[45].ntlchr:=2;
conv[45].rij
tll
:=105; conv[45].rij
[2] :=101 ; conv[46] .nElchr:=3; conv[46].rij tll ;=ll1;
conv[46J.rij
[2] :=I01 ;conv[46J
.rij
[3] :=I05 ;-L . .L27; -record
rij:array tl..4l of incl;
nÈlchr: inc2; end;-arrey
tl.
.1271of
item;( ' is
eeuwzet
hoofdletEers om ...kleine
leEters
)Igloball
procedure makecorw(var conv:tabel)
;var
.
k:integer;
m:bic7; begin
for
m:=1to
127 do begincorw[m].rijtll:=n;
corw In].ntlchr.:=l;
for
k:=2
to
4
do conv[nl.rij
Ik]
:=32; end;for
m:=65 Eo 90 doconvlm].rijtll:=m+32;
{ {( ,
is
ooi
)( - is ie
)=oei)
27convt4Tl.ntlchr:=2;
{ / is
uw } conv[47].rij
t I I :=l l7; conv [47].rij
t2l :=ll9
;conv[48l.ntlchr:=2;
{
0
is
oe ) conv[48].rij
I I ]:=lll
; conv[48].rij tll
;=l0l
; conv[49].ntlchr:=2;
{ I is
aa }conv[49].rijll]:=97;
conv[49].rij
t 27 z=97;conv[50].nclchr:=3;
(
2
is aai
]
c orw [ 50 J . r ij
I I I : =9 7 ; corw[50].rij
Í21:=97; conv[50J.rij
[3] :-105;conv[Sll.ntlchtiaz;
{
3
is
ee } corw[5f J.rij
II]
:=l0l
; conv[5f I.rij
[2]:=l0l
; conv[52] .nclchrz=21
{
4
is
eu } conv[52].rij
Ill
:=l0l
;corw[52]
.rij
[2] :=1I7;conv[53].nclchti=2;
(
5
is
au]
conv[53].rijtll:=97;
conv[53J
.rij
[2];=ll7;
conv[54]
.ntlchr:=Z;
{
6
is oi
}conv[54]
.rij
Il] :=lIl
;conv[54]
.rij
[2] :=105;conv[55].ntlchr:=Z;
{
7
is
uu }conv[55J
.rij
[ 1];=ll7;
conv[55]
.rij
[2]:=Il7;
conv[56].nclchr:=2;
{
8
is ui
} convt56l.rij
[ 1] :=117; corw[56J.rij
[2] :=105;conv[57].ntlchrz=2;
{
9
is
oo } comrt57l.rij
Il] :=lll
; conv [57].rij
[2] :=l I I ;convt5gl.ntlchr:=3;
{ ; is
au }comr[59l.rijll]:=97;
c onv [ 59 J .rij
l,2l :=L17 ; conv[59J.rij
[3]:=ll9;
conv[60].nrlchr:=2;
(
<
is ai
]
28conv[60].rijtll
conv[60].rij
t2l
convt6l ] .nÈlchrconv[6f].rijtll
conv[61].rijt2l
cornr[91].ntlchr:=21 c onv [ 9 f ] . rij
I I ] : =l I 2 ; conv [91 I.rij
[2] :=106;{
= is
Èj)
(tispj)
(\isieuw)
{ I is dj
}(cissj)
(
q
is
ng )(xis
zj)
{yisei}
:=97 ; : =I05; .=J.:=ll6;
:=106; corw[92] corrv [ 92 ] conv[92] conv[92] conv[92] .'ntlchr :=4;.rijtll:=105;
.rijt2l:-101;
.rij
t3l
:=ll7;
.rij
t4l
:-ll9;
corwt93l .ntlchr z=2; conv[93J.rij
Il]
;=100; conv[93].rij
[2] :=106; conv[99].nclchrconv[99l.rijtl1
corw[99].rij
t21convIll3].ntlchr:o2;
c onv I f f 3 ] . rij
t I I : =l I 0 ; convIIf
3].rij
t2l
:'103; convI I20].ntlchr:=2;
conv[ 120].rij
t fl:=I22;
conv[ 120] .
rij
t 2l :=106;c orw I
l2l
] .ntl
chrc onv I f 2 I ] . r
ij
I I ]convIl2l].rijt2l
end;
(*procedure makeconv*)END. .=7.
:-ll5;
:=106; .=) . : =101 ; :=I05; 29E
LISTING VAN PROCEDURE SPMAKOUT (MODULE SPOUT)I
inherit
('userdisk:
I akofon.lvsl lvs.env')]
MODULE SPOIIT;
IglobalJ
procedure spraakout(nfile:filenane;ichn:intl;
ver
acEword:filenaue;var
exisE:boolean); varib4
:idrnbuf:
1fil
:int2;
kar
:inrl;
smplefr:real;
k
:integer;
I
:integer;
í4
:integerl
begin
exisÈ:=Ërue;lf il
:=ifxst(
nfile)-l ;
(
bepaal lengte N-file
)if
1fi1<=0 thenexisc:=false;
if exist
thenbeg
in
ifiarn(nfile,iU4[l]);
(
copieer
idencificatie
record
in ib4
]
s anpl e
fr
: = ib4 [ 6 2 ] ;f
spr(nfilerlrlfil
,samplefr,3,ichn,kar);
{
geef
spraakuit
}for
k:-28
co 43do
(
bepaaloorspronkelijke
woord) begini4:=ib4[k];
for 1:ol to
3
do begin acÈword[4*(k-2S)+t] :=chr(i4
mod 256);í42-í4
div
256; end; acÈerord[4*( k-28)+{] :=chr(i4
mod 256) ; end; end;end
I
(*nodule
spouc*)END.
F
LrsrrNc vAN PRocEDURE Í.tooRDrN (ltoouln morn)I inher
it
( ' userdi sk: I ako fon . lvs ] lvs . env' ,' userdisk: I ako fon]vtPas. env' ) I
MODULE ttRDIN ( inpuc,outPuE) I
c yPe
asciiarray
=arrey
t0..641
of incl;
icem
orecordrij
:array
t I . .41of
incl
;ntlchr:
inE2; end;tabel
-array
lI..IZ7J of
iterrn;Igloball
procedure rrcordinpuc(ichan:inC2;coÍw:tabel;
indexperiment:int2;var roordlengte:int2; ver
woord:asciiarray;
delay: inreger;var
fouE:integer);
varn
:int2;
k
: inceger Iasc
:intl
; elaps: inËeger;procedure prepere-screen( indexperimenE :
integerl
ichan:int2)
;var
m: inEeger;
begin
cursor_position( 17,20) ;
writelí('
Eype r€ord',indexperiment :4) ;c ur sor_pos
it
ion( 20,20) ;for
m:=l
to
30 donrite(' ')i
writeln(' ')
ifor
m:=I
ro
19 dodwrite(ichan,32,l);
end;
(:tprocedure prepere screen*)begin
pr epere_sc reen( indexpe r iment, ichan) ;
n:=0; asc:=0; elaps:=0 I
openkbinc(asc);
(
maak keyboard inÈerruPËsmogelijk
)while
noc(asc=13)do (
l3=carriage
reÈurn:einde
inpuÈ )beg
in
delms( 4) ;
elaps:=e1aps+l;