(FILECREATED "21-Jun-84 21:18:44" {ERIS}<SPEECH>PHONTOPV.FPKG;7 21076  

      changes to:  (VARS DEBUGFLG)
		   (FNS FIND.ALLOPHONES)

      previous date: "13-Jun-84 17:54:16" {ERIS}<SPEECH>PHONTOPV.FPKG;3)


(* Copyright (c) 1984 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT PHONTOPVCOMS)

(RPAQQ PHONTOPVCOMS ((FNS CHECK SPEAK SPEECH.PLAY.ALL FINDONSET DECODE.FEATURES MAKE.PHONEME 
			  FIND.ALLOPHONES FIND.ALLOPHONES1 FIND.PHONEMES FIND.PHONEMES1 
			  FIND.PHONEMES2 FIND.V.FEATURES FINDCODA FINDNUCLEUS FIX.PHONEME OFFGLIDE 
			  FINDVOWEL TEST.GLUE TEST.SYNTH)
	(* PSVOWELS are the transcription symbols which on their own signify vowels; PSVOWELBEG are 
	   the transcription symbols which CAN initiate a vowel: PSVOWELEND are the transcriptoin 
	   symbols which CAN complete a vowel initiated by PSVOWELBEG)
	(VARS DEBUGFLG OFFGLIDES PHONETICSYMBOLS PSPHONEMELST PSVOWELS PSVOWELBEG PSVOWELEND 
	      PV.CONSONANTS PVECTOR SOUNDS NEWWORDS NSOUNDS TR VCOMMENTS WOFFGLIDES WORDS)))
(DEFINEQ

(CHECK
  [LAMBDA (C1 V C2)                                          (* pkh: " 6-Jun-84 13:12")
    (PRINT (fetch (PVECTOR SOUND) of C1))
    (PRINT (fetch (PVECTOR COMMENT) of C1))
    (PRINT (fetch (PVECTOR SOUND) of V))
    (PRINT (fetch (PVECTOR COMMENT) of V))
    (PRINT (fetch (PVECTOR SOUND) of C2))
    (PRINT (fetch (PVECTOR COMMENT) of C2])

(SPEAK
  [LAMBDA (TRANSCRIPTION)                                    (* pkh: " 6-Jun-84 14:09")
                                                             (* Top level function for the synthesizer)
    (PROG ((SOUNDLIST (UNPACK TRANSCRIPTION))
	   NUCLEUS ONSET CODA FEATURES (SYLLABLE (create SYLLABLE)))

          (* TBW (FOR (SYLLABIFY SOUNDLIST) SYLLABLE IN DO BODY) (* Split the transcription up into units that correspond to
	  phonemes; Example: aY is AY.PHONEME; r%, is ER.PHONEME))

                                                             (* Find the phonemes going from transcriptions;
							     this function does the replaces in the syllable fields 
							     itself)
          (SETQ NUCLEUS (FINDNUCLEUS SOUNDLIST))
          (SETQ ONSET (FINDONSET SOUNDLIST NUCLEUS))
          (SETQ CODA (FINDCODA SOUNDLIST ONSET NUCLEUS))
          (replace ONSET of SYLLABLE with ONSET)
          (replace NUCLEUS of SYLLABLE with NUCLEUS)
          (replace CODA of SYLLABLE with CODA)
          (FIND.PHONEMES SYLLABLE)                           (* Find the correct PVECTORS 
							     (allophones) starting with phonemes;
							     then stuff them into the correct fields in the syllable)
          (SETQ ONSET (FIND.ALLOPHONES (fetch ONSET of SYLLABLE)
				       'ONSET SYLLABLE))
          (SETQ CODA (FIND.ALLOPHONES (fetch CODA of SYLLABLE)
				      'CODA SYLLABLE))
          (SETQ NUCLEUS (FIND.ALLOPHONES (fetch NUCLEUS of SYLLABLE)
					 'NUCLEUS SYLLABLE))
          (replace ONSET of SYLLABLE with ONSET)
          (replace NUCLEUS of SYLLABLE with NUCLEUS)
          (replace CODA of SYLLABLE with CODA)

          (* For the time being we only have a single in the ONSET NUCLEUS and OFFSET which can be passed to SPEECH.GLUE 
	  (* Better version TBW))


          (COND
	    [DEBUGFLG (RETURN (CHECK (CAR ONSET)
				     (CAR NUCLEUS)
				     (CAR CODA]
	    (T (RETURN (SPEECH.GLUE (CAR ONSET)
				    (CAR NUCLEUS)
				    (CAR CODA])

(SPEECH.PLAY.ALL
  [LAMBDA (WORD)                                             (* pkh: "13-Jun-84 15:32")
    (PROG (STREAM)
          (SETQ STREAM (OPENSTREAM (PACKFILENAME 'HOST '{ERIS} 'DIRECTORY '<SPEECH>WAVE>
						 'NAME WORD 'EXTENSION 'WAVE)
				   'OUTPUT
				   'OLD/NEW))
          (for I from 1 to (ARRAYSIZE SPEECH.*WAVE*) do (BOUT STREAM (ELT SPEECH.*WAVE* I)))
          (CLOSEF STREAM])

(FINDONSET
  [LAMBDA (SOUNDLIST NUCLEUS SYLLABLE)                       (* pkh: " 6-Jun-84 12:09")

          (* Finds the phonetic symbols which preceed a vowel and considers them the onset; returns a list of lists with 
	  each sublist containing the elements of a phonetic symbol; phonetic symbols may be complex%, i.e. they may consist
	  of more than a single character; Example: l~ desingates a thick l; were it an onset it would come out as 
	  ((l ~)))

                                                             (* TBW Check for complex onset symbols)
    (for P (V ←(CAAR NUCLEUS)) in SOUNDLIST until (EQ P V) collect (LIST P) finally (RETURN $$VAL])

(DECODE.FEATURES
  [LAMBDA (FLST PREORPOSTV)                                  (* pkh: " 6-Jun-84 13:15")
    (SELECTQ PREORPOSTV
	     [ONSET (COND
		      ((MEMB '+front FLST)
			'PREVFRONT)
		      ((AND (MEMB '+back FLST)
			    (MEMB '+round FLST))
			'PREVBACKROUNDED)
		      ((AND (MEMB '+back FLST)
			    (MEMB '-round FLST))
			'PREVBACKUNROUNDED)
		      ((MEMB '+round FLST)
			'PREVBACKROUNDED)
		      ((MEMB '-round FLST)
			'PREVBACKUNROUNDED)
		      (T (SHOULDNT]
	     [CODA (COND
		     ((MEMB FLST WOFFGLIDES)
		       'POSTVWOFFGLIDE)
		     (T 'POSTVNOWOFFGLIDE]
	     (SHOULDNT])

(MAKE.PHONEME
  [LAMBDA (PVECTORNAME)                                      (* pkh: " 4-Jun-84 23:01")
    (PROG [PHONEME (PHONEMENAME (PACK* (SUBSTRING PVECTORNAME 1 2)
				       '.PHONEME))
		   (FEATURES (MKATOM (SUBSTRING PVECTORNAME 3]
          [SET PHONEMENAME (COND
		 ((NEQ (EVALV PHONEMENAME)
		       'NOBIND)                              (* PHONEMENAME is a PHONEME)
		   (FIX.PHONEME (EVALV PHONEMENAME)
				FEATURES
				(EVAL PVECTORNAME)))
		 (T                                          (* PHONEMENAME is not the name of a PHONEME yet)
		    (SETQ PHONEME (create PHONEME))
		    (FIX.PHONEME PHONEME FEATURES (EVAL PVECTORNAME]
          (RETURN PHONEMENAME])

(FIND.ALLOPHONES
  [LAMBDA (PHONEMELST ONSETORCODA SYLLABLE)                  (* pkh: "21-Jun-84 20:57")
                                                             (* Goes from syllable with phonetic transcription to 
							     allophones and PVECTORS)
                                                             (* (EVAL (CAR (fetch NUCLEUS of PHONEMELST))) is in 
							     order to get our hands on the nucleus phoneme)
    (COND
      ((NOT PHONEMELST)
	(LIST (fetch (PHONEME INVARIANT) of SI.PHONEME)))
      (T (SELECTQ ONSETORCODA
		  (ONSET (for X PVECTOR (ALLOPHONETYPE ←
						       (DECODE.FEATURES
							 [FIND.V.FEATURES (EVAL (CAR (fetch NUCLEUS
											of SYLLABLE]
							 'ONSET))
			    in PHONEMELST collect (COND
						    ((SETQ PVECTOR (SELECTQ
							  ALLOPHONETYPE
							  (PREVFRONT (fetch PREVFRONT
									of (EVAL X)))
							  (PREVBACKUNROUNDED (fetch PREVBACKUNROUNDED
										of (EVAL X)))
							  (PREVBACKROUNDED (fetch PREVBACKROUNDED
									      of (EVAL X)))
							  NIL))
                                                             (* If there is an allophone of ALLOPHONETYPE return it)
						      PVECTOR)
						    ([AND (STRPOS 'BACK ALLOPHONETYPE)
							  (SETQ PVECTOR
							    (SELECTQ ALLOPHONETYPE
								     (PREVBACKUNROUNDED
								       (fetch PREVBACKROUNDED
									  of (EVAL X)))
								     (fetch PREVBACKUNROUNDED
									of (EVAL X]

          (* If we didn%'t find a match on the allophonetype in the phoneme and the ALLOPHONETYPE has "back" in it then try 
	  PREVBACKROUNDED when the type is PERVBACKUNROUNDED and try PREVBACKUNROUNDED when the type is PREVBACKROUNDED)


						      PVECTOR)
						    ((SETQ PVECTOR (fetch INVARIANT
								      of (EVAL X)))
						      PVECTOR)
						    ((SETQ PVECTOR (fetch PREVFRONT
								      of (EVAL X)))
						      PVECTOR)
						    (T (SHOULDNT)))
			    finally (RETURN $$VAL)))
		  (CODA (for X PVECTOR
			     (ALLOPHONETYPE ←
					    (DECODE.FEATURES
					      [fetch (PVECTOR SOUND)
						 of (fetch (PHONEME INVARIANT)
						       of (EVAL (CAR (fetch NUCLEUS of SYLLABLE]
					      'CODA))
			   in PHONEMELST collect (COND
						   ((SETQ PVECTOR (SELECTQ
							 ALLOPHONETYPE
							 (POSTVWOFFGLIDE (fetch POSTVWOFFGLIDE
									    of (EVAL X)))
							 (POSTVNOWOFFGLIDE (fetch POSTVNOWOFFGLIDE
									      of (EVAL X)))
							 NIL))
						     PVECTOR)
						   ((SETQ PVECTOR (fetch INVARIANT
								     of (EVAL X)))
						     PVECTOR)
						   ((SETQ PVECTOR (fetch PREVFRONT
								     of (EVAL X)))
						     PVECTOR)
						   (T (SHOULDNT)))
			   finally (RETURN $$VAL)))
		  (NUCLEUS (for X in (fetch NUCLEUS of SYLLABLE) collect (fetch INVARIANT
									    of (EVAL X))
			      finally (RETURN $$VAL)))
		  (SHOULDNT])

(FIND.ALLOPHONES1
  [LAMBDA NIL                                                (* pkh: " 5-Jun-84 10:30")
    NIL])

(FIND.PHONEMES
  [LAMBDA (SYLLABLE)                                         (* pkh: " 5-Jun-84 10:11")
    (replace ONSET of SYLLABLE with (FIND.PHONEMES1 (fetch ONSET of SYLLABLE)))
    (replace NUCLEUS of SYLLABLE with (FIND.PHONEMES1 (fetch NUCLEUS of SYLLABLE)))
    (replace CODA of SYLLABLE with (FIND.PHONEMES1 (fetch CODA of SYLLABLE])

(FIND.PHONEMES1
  [LAMBDA (PSYMBOLLST)                                       (* pkh: " 6-Jun-84 12:40")

          (* Input: List of lists where each sublist has as elements the components of a transcription symbol;
	  Output: List of phonemes (i.e. AY.PHONEME etc.))



          (* (SETQ M (FIND.PHONEMES2 X)) (COND (M M) (T (COND ((MEMB (CADR PSYMBOLLST) (QUOTE (w y))) 
	  (SETQ PSYMBOLLST (CDR PSYMBOLLST)) (PACK* (U-CASE (MKATOM (PACK* X (CAR PSYMBOLLST)))) (QUOTE .PHONEME)))))))


    (for X M in PSYMBOLLST
       collect (SETQ M (PACK X))
	       (COND
		 ((SETQ M (ASSOC M PSPHONEMELST))
		   (CADR M))
		 (T (SHOULDNT)))
       finally (RETURN $$VAL])

(FIND.PHONEMES2
  [LAMBDA (PSYMBOL)                                          (* pkh: " 5-Jun-84 00:29")
    (PROG (M)
          (RETURN (COND
		    ((SETQ M (ASSOC PSYMBOL PHONSYMPHONEMEALIST))
		      (CADR M])

(FIND.V.FEATURES
  [LAMBDA (VPHONEME)                                         (* pkh: " 5-Jun-84 10:38")

          (* Finds the features of a vowel phoneme; Assumption: The features are the only list in the comment field of the 
	  invariant PVECTOR of a PHONEME)


    (for X in (fetch (PVECTOR COMMENT) of (fetch (PHONEME INVARIANT) of VPHONEME))
       when (LISTP X) do (RETURN X])

(FINDCODA
  [LAMBDA (SOUNDLIST ONSET NUCLEUS)                          (* pkh: " 6-Jun-84 12:28")
                                                             (* TWB CHECK FOR COMPLEX TRANSCRIPTIONSYMBOLS IN THE 
							     SYLLABLE (SAME PROBLEM IN FINDONSET))
    (for X in [NTH SOUNDLIST (ADD1 (IPLUS (for Y in ONSET sum (LENGTH Y))
					  (for Y in NUCLEUS sum (LENGTH Y]
       collect (LIST X) finally (RETURN $$VAL])

(FINDNUCLEUS
  [LAMBDA (TRANSCRIPTION SYLLABLE)                           (* pkh: " 6-Jun-84 19:21")

          (* Returns the phonetic symbol of the vowel nucleus in a list of lists; the format for input to FIND.PHONEMES is a
	  list of lists where each sublist is the sequence of characters which designate a KLATT phoneme: The nucleus of 
	  "saYt" will therefore come into FIND.PHONEMES as ((aY)); the onset of "traYt" will come in as 
	  ((t) (r)))


    (for P S V G in old TRANSCRIPTION when (OR (MEMB P PSVOWELS)
					       (MEMB P PSVOWELBEG))
       do                                                    (* Single symbol corresponding on its own to a vowel)
	  [COND
	    ([AND (MEMB P PSVOWELS)
		  [OR (NEQ P 'a)
		      (NOT (OFFGLIDE (CADR TRANSCRIPTION]
		  (OR (NEQ P 'c)
		      (NOT (OFFGLIDE (CADR TRANSCRIPTION]
	      (SETQ V (LIST P)))
	    [(AND (MEMB P PSVOWELBEG)
		  (NEQ P 'y))                                (* Two symbols corresponding to a vowel)
	      (COND
		((MEMBER (CADR TRANSCRIPTION)
			 PSVOWELEND)
		  (SETQ V (LIST P (CADR TRANSCRIPTION]
	    ((AND (MEMB P PSVOWELBEG)
		  (EQ P 'y)
		  (EQ 'u (CADR TRANSCRIPTION))
		  (EQ 'W (CADDR TRANSCRIPTION)))
	      (SETQ V (LIST P (CADR TRANSCRIPTION)
			    (CADDR TRANSCRIPTION]
       finally (RETURN (LIST V])

(FIX.PHONEME
  [LAMBDA (PHONEME FEATURES PVECTOR)                         (* pkh: " 4-Jun-84 22:59")
    (SELECTQ FEATURES
	     ((b r)
	       (replace PREVBACKROUNDED of PHONEME with PVECTOR))
	     (f (replace PREVFRONT of PHONEME with PVECTOR))
	     (bu (replace PREVBACKUNROUNDED of PHONEME with PVECTOR))
	     (nw (replace POSTVNOWOFFGLIDE of PHONEME with PVECTOR))
	     (w (replace POSTVWOFFGLIDE of PHONEME with PVECTOR))
	     (NIL (replace INVARIANT of PHONEME with PVECTOR))
	     (SHOULDNT))
    PHONEME])

(OFFGLIDE
  [LAMBDA (PS)                                               (* pkh: " 4-Jun-84 16:47")
                                                             (* Checks if a PhoneticSymbol is an offglide%, returns 
							     the PS if it is else NIL)
    (COND
      ((MEMB PS OFFGLIDES)
	PS])

(FINDVOWEL
  [LAMBDA (TRANSCRIPTION SYLLABLE)                           (* pkh: " 4-Jun-84 16:43")

          (* Takes a transcription symbol for a vowel%, finds the PVECTOR name and the PVECTOR (i.e. 
	  (EVAL P)) corresponding to it; extracts feature information from its comment)

                                                             (* Returns the phonetic symbol of the vowel nucleus)
    (for P S V G in old TRANSCRIPTION when (MEMB P PSVOWELS)
       do (SETQ V P)
	  [COND
	    ((SETQ G (OFFGLIDE (CADR TRANSCRIPTION)))
	      (SETQ V (PACK* V G]
       finally (RETURN V])

(TEST.GLUE
  [LAMBDA (WORDS)                                            (* pkh: " 6-Jun-84 18:23")
    (for X in WORDS collect (CONS X (LIST (SPEAK X])

(TEST.SYNTH
  [LAMBDA (WORDS)                                            (* pkh: " 6-Jun-84 19:53")
    (for X RESULT in WORDS
       collect (SETQ RESULT (SPEAK X))
	       (SETQ USER.TRAJS RESULT)
	       (SPEECH.TEST)
	       (SPEECH.PLAY.ALL X])
)



(* PSVOWELS are the transcription symbols which on their own signify vowels; PSVOWELBEG are the
 transcription symbols which CAN initiate a vowel: PSVOWELEND are the transcriptoin symbols 
which CAN complete a vowel initiated by PSVOWELBEG)


(RPAQQ DEBUGFLG NIL)

(RPAQQ OFFGLIDES (Y W y w))

(RPAQQ PHONETICSYMBOLS (P T K p t k b d g D 0 & f v s z S Z C J W Y m n G ~ y w l r R %, : H L M ? x 
			  "l~"
			  i I U u o c a - E @ e))

(RPAQQ PSPHONEMELST ((p PP.PHONEME)
		     (t TT.PHONEME)
		     (k KK.PHONEME)
		     (b BB.PHONEME)
		     (d DD.PHONEME)
		     (g GG.PHONEME)
		     (t TT.PHONEME)
		     (0 TH.PHONEME)
		     (& DH.PHONEME)
		     (f FF.PHONEME)
		     (v VV.PHONEME)
		     (s SS.PHONEME)
		     (z ZZ.PHONEME)
		     (S SH.PHONEME)
		     (I IH.PHONEME)
		     (C CH.PHONEME)
		     (J JH.PHONEME)
		     (@ AE.PHONEME)
		     (↑ AH.PHONEME)
		     (w WW.PHONEME)
		     (y YY.PHONEME)
		     (m MM.PHONEME)
		     (n NN.PHONEME)
		     (yuW YU.PHONEME)
		     (uW UW.PHONEME)
		     (l LL.PHONEME)
		     (r RR.PHONEME)
		     (oY OY.PHONEME)
		     (oW OW.PHONEME)
		     (aW AW.PHONEME)
		     (aY AY.PHONEME)
		     (h HH.PHONEME)
		     (eY EY.PHONEME)
		     (iY IY.PHONEME)
		     (r%, ER.PHONEME)
		     (↑ UH.PHONEME)
		     (U UH.PHONEME)
		     (c AO.PHONEME)
		     (E EH.PHONEME)
		     (a AA.PHONEME)
		     (Y NIL)
		     (W NIL)
		     (Z NIL)
		     (l~ NIL)
		     (x NIL)
		     (U NIL)
		     (? NIL)
		     (M NIL)
		     (L NIL)
		     (H NIL)
		     (: NIL)
		     (%, NIL)
		     (R NIL)
		     (N NIL)
		     (G NIL)))

(RPAQQ PSVOWELS (I U c a E @ ↑))

(RPAQQ PSVOWELBEG (i e a o u r y c))

(RPAQQ PSVOWELEND (Y W %, uW))

(RPAQQ PV.CONSONANTS (SPEECH.FFb SPEECH.VVf SPEECH.VVb SPEECH.THf SPEECH.THb SPEECH.DHf SPEECH.DHb 
				 SPEECH.SSf SPEECH.SSbu SPEECH.SSr SPEECH.ZZf SPEECH.ZZbu SPEECH.ZZb 
				 SPEECH.SHf SPEECH.SHbu SPEECH.CHbu SPEECH.SHr SPEECH.CHf SPEECH.CHr 
				 SPEECH.JHf SPEECH.JHbu SPEECH.JHr SPEECH.PPf SPEECH.PPb SPEECH.BBf 
				 SPEECH.BBb SPEECH.TTf SPEECH.TTbu SPEECH.TTr SPEECH.DDf SPEECH.DDbu 
				 SPEECH.DDr SPEECH.KKf SPEECH.KKbu SPEECH.KKr SPEECH.GGf SPEECH.GGbu 
				 SPEECH.GGr SPEECH.MMf SPEECH.MMb SPEECH.NNf SPEECH.NNbu SPEECH.NNr 
				 SPEECH.WW SPEECH.YY SPEECH.RR SPEECH.LL SPEECH.HH SPEECH.SI 
				 SPEECH.TTnw SPEECH.TTw))

(RPAQQ PVECTOR NIL)

(RPAQQ SOUNDS (SPEECH.IY SPEECH.IH SPEECH.EY SPEECH.EH SPEECH.AE SPEECH.AY SPEECH.AA SPEECH.AW 
			 SPEECH.AH SPEECH.AO SPEECH.OW SPEECH.OY SPEECH.UH SPEECH.UW SPEECH.ER 
			 SPEECH.YU SPEECH.FFf SPEECH.FFb SPEECH.VVf SPEECH.VVb SPEECH.THf SPEECH.THb 
			 SPEECH.DHf SPEECH.DHb SPEECH.SSf SPEECH.SSbu SPEECH.SSr SPEECH.ZZf 
			 SPEECH.ZZbu SPEECH.ZZb SPEECH.SHf SPEECH.SHbu SPEECH.CHbu SPEECH.SHr 
			 SPEECH.CHf SPEECH.CHr SPEECH.JHf SPEECH.JHbu SPEECH.JHr SPEECH.PPf 
			 SPEECH.PPb SPEECH.BBf SPEECH.BBb SPEECH.TTf SPEECH.TTbu SPEECH.TTr 
			 SPEECH.DDf SPEECH.DDbu SPEECH.DDr SPEECH.KKf SPEECH.KKbu SPEECH.KKr 
			 SPEECH.GGf SPEECH.GGbu SPEECH.GGr SPEECH.MMf SPEECH.MMb SPEECH.NNf 
			 SPEECH.NNbu SPEECH.NNr SPEECH.WW SPEECH.YY SPEECH.RR SPEECH.LL SPEECH.HH 
			 SPEECH.SI SPEECH.TTnw SPEECH.TTw))

(RPAQQ NEWWORDS (piYp pIm pEt peYn p@k p↑b pad paY pcz puWl pUg poWC diYd dIm dEt deYn d@k d↑b dad 
		      daY dcz duWl dUg koWC kiYk kIm gEt geYn g@g g↑b gag gaY gcz guWl gUg goWt siYs 
		      sIm sEt seYn s@g s↑b sag saY lcz kuWl lUg koWt riYl lIm lEt leYn l@k r↑b lad 
		      laY kcz ruWl lUg roWt CiYp CIm CEt JeYn J@k C↑b Cad JaYv Jcz JuWl JUg CoWt biYb 
		      bIm bEt beYn b@k b↑b bad baY bcz buWl bUg boWC fiYf fIm fEt feYn f@k f↑b fad 
		      faY fcz fuWl fUg foWC hiYp hIm hEt heYn h@k h↑b had haY hcz huWl hUg hoWC miYm 
		      mIm mEt meYn m@k m↑b mad maY mcz muWl mUg moWC niYn nIm nEt neYn n@k n↑b nad 
		      naY ncz nuWl nUg noWC tiYt tIm tEt teYn t@k t↑b tad taY tcz tuWl tUg toWC teYn 
		      viYp vIm vEt veYn v@t v↑f var vaYn vcn vuW vUg voWn pEm pIt poWn p↑k p@b pcd 
		      paz pUl puWg peY dEm dIt doWn d↑k d@b dcd diY daz dUl duWg keYC kEm gIt goWn 
		      g↑g g@b gcg giY gaz gUl guWg geYt sEm sIt soWn s↑g s@b scg siY laz kUl luWg 
		      keYt lEm lIt loWn l↑k r@b lcd liY kaz rUl luWg reYt CEm CIt JoWn J↑k C@b Ccd 
		      JiYv Jaz JUl JuWg CeYt bEm bIt boWn b↑k b@b bcd biY baz bUl buWg beYC fEm fIt 
		      foWn f↑k f@b fcd fiY faz fUl fuWg feYC hEm hIt hoWn h↑k h@b hcd hiY haz hUl 
		      huWg heYC mEm mIt moWn m↑k m@b mcd miY maz mUl muWg meYC nEm nIt noWn n↑k n@b 
		      ncd niY naz nUl nuWg neYC tEm tIt toWn t↑k t@b tcd tiY taz tUl tuWg teYC vEm 
		      vIt voWn v↑t v@f vcr viYn van vU vuWg veY))

(RPAQQ NSOUNDS (SPEECH.FFf SPEECH.FFb SPEECH.VVf SPEECH.VVb SPEECH.THf SPEECH.THb SPEECH.DHf 
			   SPEECH.DHb SPEECH.SSf SPEECH.SSbu SPEECH.SSr SPEECH.ZZf SPEECH.ZZbu 
			   SPEECH.ZZb SPEECH.SHf SPEECH.SHbu SPEECH.CHbu SPEECH.SHr SPEECH.CHf 
			   SPEECH.CHr SPEECH.JHf SPEECH.JHbu SPEECH.JHr SPEECH.PPf SPEECH.PPb 
			   SPEECH.BBf SPEECH.BBb SPEECH.TTf SPEECH.TTbu SPEECH.TTr SPEECH.DDf 
			   SPEECH.DDbu SPEECH.DDr SPEECH.KKf SPEECH.KKbu SPEECH.KKr SPEECH.GGf 
			   SPEECH.GGbu SPEECH.GGr SPEECH.MMf SPEECH.MMb SPEECH.NNf SPEECH.NNbu 
			   SPEECH.NNr SPEECH.WW SPEECH.YY SPEECH.RR SPEECH.LL SPEECH.HH SPEECH.SI 
			   SPEECH.TTnw SPEECH.TTw))

(RPAQQ TR {PVECTOR}#15%,121374)

(RPAQQ VCOMMENTS ((IY (* as in "beet" (+front)
			 *))
		  (IH (* as in "bit" (+front)
			 *))
		  (EY (* as in "bait" (+front)
			 *))
		  (EH (* as in "bet" (+front)
			 *))
		  (AE (* as in "bat" (+front)
			 *))
		  (AY (* as in "bite" (+back -round)
			 *))
		  (AA (* as in "Bob" (+back -round)
			 *))
		  (AW (* as in "bout" (+back -round)
			 *))
		  (AH (* as in "but" (+front -round)
			 *))
		  (AO (* as in "bought" (+round)
			 *))
		  (OW (* as in "boat" (+round)
			 *))
		  (OY (* as in "boy" (+round)
			 *))
		  (UH (* as in "book" (+round)
			 *))
		  (UW (* as in "boot" (+round)
			 *))
		  (ER (* as in "Bert" (+round)
			 *))
		  (YU (* as in "pew" (+front)
			 *))))

(RPAQQ WOFFGLIDES (OW UW AW YU))

(RPAQQ WORDS (saYt keYt fIt pIk bct boWt br%,t))
(PUTPROPS PHONTOPV.FPKG COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1018 14868 (CHECK 1028 . 1434) (SPEAK 1436 . 3591) (SPEECH.PLAY.ALL 3593 . 4018) (
FINDONSET 4020 . 4730) (DECODE.FEATURES 4732 . 5343) (MAKE.PHONEME 5345 . 6048) (FIND.ALLOPHONES 6050
 . 9098) (FIND.ALLOPHONES1 9100 . 9223) (FIND.PHONEMES 9225 . 9648) (FIND.PHONEMES1 9650 . 10353) (
FIND.PHONEMES2 10355 . 10574) (FIND.V.FEATURES 10576 . 11010) (FINDCODA 11012 . 11492) (FINDNUCLEUS 
11494 . 12856) (FIX.PHONEME 12858 . 13458) (OFFGLIDE 13460 . 13771) (FINDVOWEL 13773 . 14410) (
TEST.GLUE 14412 . 14587) (TEST.SYNTH 14589 . 14866)))))
STOP