(FILECREATED " 4-Aug-84 18:46:29" {ERIS}<SPEECH>SYNTH.FPKG;4 15693  

      changes to:  (RECORDS SYLLABLE)

      previous date: "21-Jun-84 20:55:11" {ERIS}<SPEECH>SYNTH.FPKG;3)


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

(PRETTYCOMPRINT SYNTHCOMS)

(RPAQQ SYNTHCOMS ((INITVARS (PVECTOR.PNAMES '(AV ASV FGP BGP FGZ BGZ BGS SWITCH AFRIC AASPIR NCF F0 
						 A1 B1 F1 A2 B2 F2 A3 B3 F3 A4 B4 F4 A5 B5 F5 A6 B6 
						 F6 FNZ BNZ ANP FNP BNP AB GAIN))
			    (PVECTOR.DEFAULT NIL))
	(RECORDS PHONEME PVECTOR POINT2 SLIST SYLLABLE)
	(FNS CREATE.SLICES CREATE.SLICES1 FIND.PVECTOR.NAME PVECTOR.DEFAULT.SPEC PVECTOR.GET 
	     PVECTOR.PUT SYNTH.TMIN SYNTH.TMAX SYNTH.INIT SYNTH.SLIST SYNTH.SLIST1)
	(FNS)
	(VARS NSOUNDS SOUNDS VCOMMENTS)
	(P (SYNTH.INIT))))

(RPAQ? PVECTOR.PNAMES '(AV ASV FGP BGP FGZ BGZ BGS SWITCH AFRIC AASPIR NCF F0 A1 B1 F1 A2 B2 F2 A3 B3 
			   F3 A4 B4 F4 A5 B5 F5 A6 B6 F6 FNZ BNZ ANP FNP BNP AB GAIN))

(RPAQ? PVECTOR.DEFAULT NIL)
[DECLARE: EVAL@COMPILE 

(RECORD PHONEME (PSYMBOL CVTYPE INVARIANT PREVFRONT PREVBACKUNROUNDED PREVBACKROUNDED POSTVWOFFGLIDE 
			 POSTVNOWOFFGLIDE))

(DATATYPE PVECTOR                                            (* Parameter Vector *)
	  (TYPE SOUND CV COMMENT DURATION AV ASV FGP BGP FGZ BGZ BGS SWITCH AFRIC AASPIR NCF F0 A1 B1 
		F1 A2 B2 F2 A3 B3 F3 A4 B4 F4 A5 B5 F5 A6 B6 F6 FNZ BNZ ANP FNP BNP AB GAIN))

(RECORD POINT2 (TIME VALUE))

(RECORD SLIST (SOUND CV COMMENT . ALIST)
	      [ACCESSFNS ((TMIN (SYNTH.TMIN DATUM))
			  (TMAX (SYNTH.TMAX DATUM])

(TYPERECORD SYLLABLE (SYLLABLE STRESS))
]
(/DECLAREDATATYPE 'PVECTOR
		  '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
			    POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
			    POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
			    POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
			    POINTER POINTER POINTER POINTER POINTER))
(DEFINEQ

(CREATE.SLICES
  [LAMBDA (SLISTLIST)                                        (* pkh: " 1-Jun-84 16:19")

          (* * comment)


    (for X in SLISTLIST collect (CREATE.SLICES1 X])

(CREATE.SLICES1
  [LAMBDA (SLISTNAME)                                        (* pkh: " 1-Jun-84 16:23")

          (* * comment)


    (PROG [(NAME (MKATOM (SUBSTRING SLISTNAME (ADD1 (STRPOS '%. SLISTNAME]
          (SET NAME (SYNTH.SLIST (EVAL SLISTNAME)))
          (PRIN1 NAME)
          (RETURN NAME])

(FIND.PVECTOR.NAME
  [LAMBDA (P)                                                (* pkh: " 4-Jun-84 16:35")
                                                             (* Matches a phonetic symbol to a PVECTOR for a vowel)

          (* * comment)


    (MKATOM (PACK* P '.PHONEME])

(PVECTOR.DEFAULT.SPEC
  (LAMBDA NIL                                                (* pkh: "28-May-84 15:17")
    (PROG ((TMIN 0)
	   (TMAX 700)
	   DEFAULT
	   (DEFAULT.PARAM.BUFFER (create PVECTOR
					 TYPE ← 'DEFAULT.BUFFER
					 CV ← 'NEITHER
					 COMMENT ← '         (* Default parameter buffer which SLICE specs will be 
							     overlaid onto)))
	   TRAJ)
          (for PNAME in PVECTOR.PNAMES
	     do (SETQ DEFAULT (PVECTOR.GET PVECTOR.DEFAULT PNAME)) 
                                                             (* Fill in defaults if there are no specs for this PNAME
							     or if the specs starts at a point later then TMIN)
		(SETQ TRAJ (LIST (create POINT2
					 TIME ← TMIN
					 VALUE ← DEFAULT)))
                                                             (* Default for the tail end of the sound)
		(SETQ TRAJ (APPEND TRAJ (LIST (create POINT2
						      TIME ← TMAX
						      VALUE ← DEFAULT))))
		(PVECTOR.PUT DEFAULT.PARAM.BUFFER PNAME TRAJ))
          (RETURN DEFAULT.PARAM.BUFFER))))

(PVECTOR.GET
  [LAMBDA (PVECTOR PNAME)                                    (* pkh: "21-Jun-84 20:53")
    (SELECTQ PNAME
	     (GAIN (fetch (PVECTOR GAIN) of PVECTOR))
	     (AB (fetch (PVECTOR AB) of PVECTOR))
	     (BNP (fetch (PVECTOR BNP) of PVECTOR))
	     (FNP (fetch (PVECTOR FNP) of PVECTOR))
	     (ANP (fetch (PVECTOR ANP) of PVECTOR))
	     (BNZ (fetch (PVECTOR BNZ) of PVECTOR))
	     (FNZ (fetch (PVECTOR FNZ) of PVECTOR))
	     (F6 (fetch (PVECTOR F6) of PVECTOR))
	     (B6 (fetch (PVECTOR B6) of PVECTOR))
	     (A6 (fetch (PVECTOR A6) of PVECTOR))
	     (F5 (fetch (PVECTOR F5) of PVECTOR))
	     (B5 (fetch (PVECTOR B5) of PVECTOR))
	     (A5 (fetch (PVECTOR A5) of PVECTOR))
	     (F4 (fetch (PVECTOR F4) of PVECTOR))
	     (B4 (fetch (PVECTOR B4) of PVECTOR))
	     (A4 (fetch (PVECTOR A4) of PVECTOR))
	     (F3 (fetch (PVECTOR F3) of PVECTOR))
	     (B3 (fetch (PVECTOR B3) of PVECTOR))
	     (A3 (fetch (PVECTOR A3) of PVECTOR))
	     (F2 (fetch (PVECTOR F2) of PVECTOR))
	     (B2 (fetch (PVECTOR B2) of PVECTOR))
	     (A2 (fetch (PVECTOR A2) of PVECTOR))
	     (F1 (fetch (PVECTOR F1) of PVECTOR))
	     (AV (fetch (PVECTOR AV) of PVECTOR))
	     (ASV (fetch (PVECTOR ASV) of PVECTOR))
	     (FGP (fetch (PVECTOR FGP) of PVECTOR))
	     (BGP (fetch (PVECTOR BGP) of PVECTOR))
	     (FGZ (fetch (PVECTOR FGZ) of PVECTOR))
	     (BGZ (fetch (PVECTOR BGZ) of PVECTOR))
	     (BGS (fetch (PVECTOR BGS) of PVECTOR))
	     (SWITCH (fetch (PVECTOR SWITCH) of PVECTOR))
	     (AFRIC (fetch (PVECTOR AFRIC) of PVECTOR))
	     (AASPIR (fetch (PVECTOR AASPIR) of PVECTOR))
	     (NCF (fetch (PVECTOR NCF) of PVECTOR))
	     (F0 (fetch (PVECTOR F0) of PVECTOR))
	     (A1 (fetch (PVECTOR A1) of PVECTOR))
	     (B1 (fetch (PVECTOR B1) of PVECTOR))
	     (SHOULDNT])

(PVECTOR.PUT
  [LAMBDA (PVECTOR PNAME VALUE)                              (* pkh: "21-Jun-84 20:52")
                                                             (* pkh: "21-Jun-84 14:52")
    (SELECTQ PNAME
	     (GAIN (replace (PVECTOR GAIN) of PVECTOR with VALUE))
	     (AB (replace (PVECTOR AB) of PVECTOR with VALUE))
	     (B2 (replace (PVECTOR B2) of PVECTOR with VALUE))
	     (BNP (replace (PVECTOR BNP) of PVECTOR with VALUE))
	     (FNP (replace (PVECTOR FNP) of PVECTOR with VALUE))
	     (ANP (replace (PVECTOR ANP) of PVECTOR with VALUE))
	     (BNZ (replace (PVECTOR BNZ) of PVECTOR with VALUE))
	     (FNZ (replace (PVECTOR FNZ) of PVECTOR with VALUE))
	     (F6 (replace (PVECTOR F6) of PVECTOR with VALUE))
	     (B6 (replace (PVECTOR B6) of PVECTOR with VALUE))
	     (A6 (replace (PVECTOR A6) of PVECTOR with VALUE))
	     (F5 (replace (PVECTOR F5) of PVECTOR with VALUE))
	     (B5 (replace (PVECTOR B5) of PVECTOR with VALUE))
	     (A5 (replace (PVECTOR A5) of PVECTOR with VALUE))
	     (F4 (replace (PVECTOR F4) of PVECTOR with VALUE))
	     (B4 (replace (PVECTOR B4) of PVECTOR with VALUE))
	     (A4 (replace (PVECTOR A4) of PVECTOR with VALUE))
	     (F3 (replace (PVECTOR F3) of PVECTOR with VALUE))
	     (B3 (replace (PVECTOR B3) of PVECTOR with VALUE))
	     (A3 (replace (PVECTOR A3) of PVECTOR with VALUE))
	     (F2 (replace (PVECTOR F2) of PVECTOR with VALUE))
	     (A2 (replace (PVECTOR A2) of PVECTOR with VALUE))
	     (F1 (replace (PVECTOR F1) of PVECTOR with VALUE))
	     (AV (replace (PVECTOR AV) of PVECTOR with VALUE))
	     (ASV (replace (PVECTOR ASV) of PVECTOR with VALUE))
	     (FGP (replace (PVECTOR FGP) of PVECTOR with VALUE))
	     (BGP (replace (PVECTOR BGP) of PVECTOR with VALUE))
	     (FGZ (replace (PVECTOR FGZ) of PVECTOR with VALUE))
	     (BGZ (replace (PVECTOR BGZ) of PVECTOR with VALUE))
	     (BGS (replace (PVECTOR BGS) of PVECTOR with VALUE))
	     (SWITCH (replace (PVECTOR SWITCH) of PVECTOR with VALUE))
	     (AFRIC (replace (PVECTOR AFRIC) of PVECTOR with VALUE))
	     (AASPIR (replace (PVECTOR AASPIR) of PVECTOR with VALUE))
	     (NCF (replace (PVECTOR NCF) of PVECTOR with VALUE))
	     (F0 (replace (PVECTOR F0) of PVECTOR with VALUE))
	     (A1 (replace (PVECTOR A1) of PVECTOR with VALUE))
	     (B1 (replace (PVECTOR B1) of PVECTOR with VALUE))
	     (SHOULDNT])

(SYNTH.TMIN
  (LAMBDA (SLIST)                                            (* pkh: "28-May-84 13:16")

          (* Sets different logical beginnings for different types of sounds; NOTE! I changed the logical beginning of 
	  postvocalic elements to 400 as per Klatt chap. 3; pkh 5/28)


    (SELECTQ (fetch (SLIST CV) of SLIST)
	     (PREVOCALIC 0)
	     (VOWEL 200)
	     (POSTVOCALIC 400)
	     (SHOULDNT))))

(SYNTH.TMAX
  (LAMBDA (SLIST)                                            (* pkh: "28-May-84 13:13" Logical end of vowel is when 
							     amplitude of voicing (AV) is turned off)
    (SELECTQ (fetch (SLIST CV) of SLIST)
	     (PREVOCALIC 200)
	     (VOWEL (fetch (SP.POINT TIME) of (CAR (LAST (CDR (ASSOC 'AV (fetch (SLIST ALIST)
									    of SLIST)))))))
	     (POSTVOCALIC 700)
	     (SHOULDNT))))

(SYNTH.INIT
  (LAMBDA NIL                                                (* pkh: "24-May-84 19:22")
    (PROG NIL
          (SETQ PVECTOR.DEFAULT (create PVECTOR
					SOUND ← 'DEFAULT
					CV ← 'SLICE
					COMMENT ← '          (* PVECTOR.DEFAULT *)
					DURATION ← 0
					AV ← 0
					ASV ← 0
					AASPIR ← 0
					AFRIC ← 0
					F0 ← 0
					FGP ← 0
					BGP ← 100
					FGZ ← 1500
					BGZ ← 6000
					FNP ← 250
					BNP ← 100
					FNZ ← 250
					BNZ ← 100
					BGS ← 200
					F1 ← 450
					B1 ← 50
					F2 ← 1450
					B2 ← 70
					F3 ← 2450
					B3 ← 110
					F4 ← 3300
					B4 ← 250
					F5 ← 3850
					B5 ← 200
					F6 ← 4900
					B6 ← 1000
					A1 ← 0
					ANP ← 0
					A2 ← 0
					A3 ← 0
					A4 ← 0
					A5 ← 0
					A6 ← 0
					AB ← 0
					SWITCH ← 'CASCADE
					GAIN ← 36
					NCF ← 5)))))

(SYNTH.SLIST
  (LAMBDA (SLIST)                                            (* pkh: "29-May-84 13:59")
                                                             (* Return SEGMENT *)
    (PROG (SEGMENT TMIN TMAX PNAME)
          (SETQ TMIN (fetch (SLIST TMIN) of SLIST))          (* Always: (PREVOCALIC 0) (VOWEL 200) 
							     (POSTVOCALIC 400))
          (SETQ TMAX (fetch (SLIST TMAX) of SLIST))          (* Always: (PREVOCALIC 200) (POSTVOCALIC 700); but 
							     variable for the VOWEL)
          (SETQ DURATION (IDIFFERENCE TMAX TMIN))

          (* DURATION will vary for VOWELS since their TMAX differs; It will always be 200 for PREVOCALIC consonants and 300
	  for postvocalic consonants; NOTE! Computation of actual duration of PREVOCALIC and POSTVOCALIC elements to be 
	  written)

                                                             (* Creating a new default buffer)
          (SETQ SEGMENT (create PVECTOR
				TYPE ← 'SEGMENT
				SOUND ←(fetch (SLIST SOUND) of SLIST)
				CV ←(fetch (SLIST CV) of SLIST)
				COMMENT ←(fetch (SLIST COMMENT) of SLIST)))
                                                             (* Tailoring the buffer to accomodate our SLIST 
							     (i.e. segment))
                                                             (* Filling the buffer with default values)
          (for PNAME in PVECTOR.PNAMES do (SYNTH.SLIST1 SEGMENT PNAME
							(CDR (ASSOC PNAME (fetch (SLIST ALIST)
									     of SLIST)))
							TMIN TMAX))
          (RETURN SEGMENT))))

(SYNTH.SLIST1
  (LAMBDA (SEGMENT PNAME TRAJ TMIN TMAX)                     (* pkh: "29-May-84 14:07")
                                                             (* Insert TRAJ into SEGMENT. *)
    (PROG (POINT DEFAULT)
          (SETQ POINT (CAR TRAJ))
          (SETQ DEFAULT (PVECTOR.GET PVECTOR.DEFAULT PNAME))
          (COND
	    ((OR (NULL POINT)
		 (IGREATERP (fetch (SP.POINT TIME) of POINT)
			    TMIN))
	      (push TRAJ (create POINT2
				 TIME ←(COND
				   (POINT (SUB1 (fetch (SP.POINT TIME) of POINT)))
				   (T TMAX))
				 VALUE ← DEFAULT))
	      (push TRAJ (create POINT2
				 TIME ← TMIN
				 VALUE ← DEFAULT))))
          (SETQ POINT (CAR (LAST TRAJ)))
          (COND
	    ((OR (NULL POINT)
		 (ILESSP (fetch (SP.POINT TIME) of POINT)
			 TMAX))
	      (SETQ TRAJ (APPEND TRAJ (LIST (create POINT2
						    TIME ←(COND
						      (POINT (ADD1 (fetch (SP.POINT TIME)
								      of POINT)))
						      (T TMIN))
						    VALUE ← DEFAULT)
					    (create POINT2
						    TIME ← TMAX
						    VALUE ← DEFAULT))))))
                                                             (* Start trajectory at T=0. *)
          (PVECTOR.PUT SEGMENT PNAME TRAJ))))
)

(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 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 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)
			 *))))
(SYNTH.INIT)
(PUTPROPS SYNTH.FPKG COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2023 13437 (CREATE.SLICES 2033 . 2242) (CREATE.SLICES1 2244 . 2565) (FIND.PVECTOR.NAME 
2567 . 2865) (PVECTOR.DEFAULT.SPEC 2867 . 3950) (PVECTOR.GET 3952 . 6034) (PVECTOR.PUT 6036 . 8839) (
SYNTH.TMIN 8841 . 9274) (SYNTH.TMAX 9276 . 9717) (SYNTH.INIT 9719 . 10529) (SYNTH.SLIST 10531 . 12170)
 (SYNTH.SLIST1 12172 . 13435)))))
STOP