(FILECREATED "11-Jul-84 14:29:01" {ERIS}<SPEECH>ROACH>PARCOE.FPKG;2 20930  

      changes to:  (FNS PVECTOR.GET PVECTOR.PUT PVECTOR.INDEX PARCOE.INIT PARCOE.INTERPOLATE 
			PARCOE.INTERPOLATE.PNAME PARCOE.PTC PARCOE.PTC.CORRECTIONS 
			PARCOE.PTC.ASPIRATION PARCOE.PTC.FRICATION PARCOE.PTC.FORMANTS 
			PARCOE.PTC.NASAL PARCOE.PTC.GLOTTAL PARCOE.PTC.VOICING PARCOE.DBCOR 
			PARCOE.GET.AMP LOG10 RANGECHECK PARCOE.SET.RES PARCOE.SET.ANTIRES))


(* Copyright (c)  by NIL. All rights reserved.)

(PRETTYCOMPRINT PARCOECOMS)

(RPAQQ PARCOECOMS ((CONSTANTS (DBSCA.A1 -58.0)
			      (DBSCA.A2 -65.0)
			      (DBSCA.A3 -73.0)
			      (DBSCA.A4 -78.0)
			      (DBSCA.A5 -79.0)
			      (DBSCA.A6 -80.0)
			      (DBSCA.ANP -58.0)
			      (DBSCA.AB -84.0)
			      (DBSCA.AV -72.0)
			      (DBSCA.AASPIR -102.0)
			      (DBSCA.AFRIC -72.0)
			      (DBSCA.ASV -44.0))
	(INITVARS (DEFAULT.SLICE NIL)
		  (OW.SLICE NIL))
	(RECORDS PVECTOR TVPOINT TVPOINT2 CORRECTIONS)
	(FNS PVECTOR.GET PVECTOR.PUT PVECTOR.INDEX PARCOE.INIT PARCOE.INTERPOLATE 
	     PARCOE.INTERPOLATE.PNAME PARCOE.PTC PARCOE.PTC.CORRECTIONS PARCOE.PTC.ASPIRATION 
	     PARCOE.PTC.FRICATION PARCOE.PTC.FORMANTS PARCOE.PTC.NASAL PARCOE.PTC.GLOTTAL 
	     PARCOE.PTC.VOICING PARCOE.DBCOR PARCOE.GET.AMP LOG10 RANGECHECK PARCOE.SET.RES 
	     PARCOE.SET.ANTIRES)
	(P (SETQ PVECTOR.FIELDNAMES (CAR (NTH (RECLOOK 'PVECTOR)
					      4)))
	   (SETQ PVECTOR.PNAMES (MEMB 'AV PVECTOR.FIELDNAMES)))))
(DECLARE: EVAL@COMPILE 

(RPAQQ DBSCA.A1 -58.0)

(RPAQQ DBSCA.A2 -65.0)

(RPAQQ DBSCA.A3 -73.0)

(RPAQQ DBSCA.A4 -78.0)

(RPAQQ DBSCA.A5 -79.0)

(RPAQQ DBSCA.A6 -80.0)

(RPAQQ DBSCA.ANP -58.0)

(RPAQQ DBSCA.AB -84.0)

(RPAQQ DBSCA.AV -72.0)

(RPAQQ DBSCA.AASPIR -102.0)

(RPAQQ DBSCA.AFRIC -72.0)

(RPAQQ DBSCA.ASV -44.0)

(CONSTANTS (DBSCA.A1 -58.0)
	   (DBSCA.A2 -65.0)
	   (DBSCA.A3 -73.0)
	   (DBSCA.A4 -78.0)
	   (DBSCA.A5 -79.0)
	   (DBSCA.A6 -80.0)
	   (DBSCA.ANP -58.0)
	   (DBSCA.AB -84.0)
	   (DBSCA.AV -72.0)
	   (DBSCA.AASPIR -102.0)
	   (DBSCA.AFRIC -72.0)
	   (DBSCA.ASV -44.0))
)

(RPAQ? DEFAULT.SLICE NIL)

(RPAQ? OW.SLICE NIL)
[DECLARE: EVAL@COMPILE 

(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 TVPOINT (TIME VALUE M B))

(RECORD TVPOINT2 (TIME VALUE))

(RECORD CORRECTIONS (A2COR A3COR N12COR N23COR N34COR))
]
(/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

(PVECTOR.GET
  (LAMBDA (PVECTOR FIELDNAME)                                (* kbr: "11-Jul-84 14:28")
    (PROG (DESCRIPTOR INDEX ANSWER)
          (SETQ DESCRIPTOR '(PVECTOR INDEX POINTER))
          (SETQ INDEX (PVECTOR.INDEX FIELDNAME))
          (RPLACA (CDR DESCRIPTOR)
		  INDEX)
          (SETQ ANSWER (FETCHFIELD DESCRIPTOR PVECTOR))
          (RETURN ANSWER))))

(PVECTOR.PUT
  (LAMBDA (PVECTOR FIELDNAME VALUE)                          (* kbr: "11-Jul-84 14:28")
    (PROG (DESCRIPTOR INDEX ANSWER)
          (SETQ DESCRIPTOR '(PVECTOR INDEX POINTER))
          (SETQ INDEX (PVECTOR.INDEX FIELDNAME))
          (RPLACA (CDR DESCRIPTOR)
		  INDEX)
          (SETQ ANSWER (REPLACEFIELD DESCRIPTOR PVECTOR VALUE))
          (RETURN ANSWER))))

(PVECTOR.INDEX
  (LAMBDA (FIELDNAME)                                        (* kbr: "11-Jul-84 14:28")
    (FOR I ← 0 BY (IPLUS I 2) AS F IN PVECTOR.FIELDNAMES WHEN (EQ F FIELDNAME) DO (RETURN I))))

(PARCOE.INIT
  (LAMBDA NIL                                                (* kbr: "11-Jul-84 14:28")
    (PROG NIL
          (SETQ DEFAULT.SLICE (CREATE PVECTOR
				      TYPE ← 'SLICE
				      SOUND ← 'DEFAULT
				      CV ← ""
				      COMMENT ← '            (* DEFAULT.SLICE *)
				      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))
          (SETQ OW.SLICE (CREATE PVECTOR
				 TYPE ← 'SLICE
				 SOUND ← 'DEFAULT
				 CV ← ""
				 COMMENT ← '                 (* OW.SLICE *)
				 DURATION ← NIL
				 AV ← 60.0
				 ASV ← 0.0
				 AASPIR ← 0.0
				 AFRIC ← 0.0
				 F0 ← 118.0
				 FGP ← 0.0
				 BGP ← 100.0
				 FGZ ← 1500.0
				 BGZ ← 6000.0
				 FNP ← 250.0
				 BNP ← 100.0
				 FNZ ← 250.0
				 BNZ ← 100.0
				 BGS ← 200.0
				 F1 ← 510.0
				 B1 ← 80.0
				 F2 ← 1033.333
				 B2 ← 70.0
				 F3 ← 2300.0
				 B3 ← 70.0
				 F4 ← 3300.0
				 B4 ← 250.0
				 F5 ← 3850.0
				 B5 ← 200.0
				 F6 ← 4900.0
				 B6 ← 1000.0
				 A1 ← 0.0
				 ANP ← 0.0
				 A2 ← 0.0
				 A3 ← 0.0
				 A4 ← 0.0
				 A5 ← 0.0
				 A6 ← 0.0
				 AB ← 0.0
				 SWITCH ← 'CASCADE
				 GAIN ← 36.0
				 NCF ← 5)))))

(PARCOE.INTERPOLATE
  (LAMBDA (TIME TRAJ OLDSLICE)                               (* kbr: "11-Jul-84 14:28")
    (COND
      ((NULL OLDSLICE)
	(SETQ OLDSLICE (CREATE PVECTOR))))
    (PROG NIL
          (FOR PNAME IN PVECTOR.PNAMES DO (PARCOE.INTERPOLATE.PNAME PNAME TIME TRAJ OLDSLICE))
          (RETURN OLDSLICE))))

(PARCOE.INTERPOLATE.PNAME
  (LAMBDA (PNAME TIME TRAJ PVECTOR)                          (* kbr: "11-Jul-84 14:28")
    (PROG (PATH LEFTPOINT RIGHTPOINT LTIME RTIME LVALUE RVALUE K VALUE)
          (SETQ PATH (PVECTOR.GET TRAJ PNAME))
          (FOR L IN PATH AS R IN (CDR PATH) WHEN (AND (ILEQ (fetch (TVPOINT TIME) of L)
							    TIME)
						      (IGREATERP (fetch (TVPOINT TIME) of R)
								 TIME))
	     DO (SETQ LEFTPOINT L)
		(SETQ RIGHTPOINT R)
		(RETURN))
          (SETQ LTIME (fetch (TVPOINT TIME) of LEFTPOINT))
          (SETQ RTIME (fetch (TVPOINT TIME) of RIGHTPOINT))
          (SETQ LVALUE (fetch (TVPOINT VALUE) of LEFTPOINT))
          (SETQ RVALUE (fetch (TVPOINT VALUE) of RIGHTPOINT))
          (COND
	    ((MEMB PNAME '(SWITCH NCF))
	      (SETQ VALUE LVALUE))
	    (T (SETQ K (FQUOTIENT (FDIFFERENCE TIME LTIME)
				  (FDIFFERENCE RTIME LTIME)))
	       (SETQ VALUE (FPLUS (FTIMES K RVALUE)
				  (FTIMES (FDIFFERENCE 1.0 K)
					  LVALUE)))))
          (PVECTOR.PUT PVECTOR PNAME VALUE))))

(PARCOE.PTC
  (LAMBDA (PVECTOR COEFF)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Calculate synthesizer COEFFicients from PVECTOReters.
							     *)
    (PROG (CORRECTIONS)
          (replace (COEFF AB) of COEFF with (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR AB) of PVECTOR)
								   DBSCA.AB)))
          (PARCOE.PTC.ASPIRATION PVECTOR COEFF)
          (PARCOE.PTC.FRICATION PVECTOR COEFF)
          (SETQ CORRECTIONS (PARCOE.PTC.CORRECTIONS PVECTOR))
          (PARCOE.PTC.FORMANTS PVECTOR COEFF CORRECTIONS)
          (PARCOE.PTC.GLOTTAL PVECTOR COEFF)
          (PARCOE.PTC.NASAL PVECTOR COEFF)
          (PARCOE.PTC.VOICING PVECTOR COEFF))))

(PARCOE.PTC.CORRECTIONS
  (LAMBDA (PVECTOR)                                          (* kbr: "11-Jul-84 14:28")
    (PROG (F1 F2 F3 F4 A2COR DELF2 A3COR N12COR N23COR N34COR F21 F32 F43 CORRECTIONS)
          (SETQ F1 (fetch (PVECTOR F1) of PVECTOR))
          (SETQ F2 (fetch (PVECTOR F2) of PVECTOR))
          (SETQ F3 (fetch (PVECTOR F3) of PVECTOR))
          (SETQ F4 (fetch (PVECTOR F4) of PVECTOR))          (* Compute amplitude corrections.
							     *)
          (SETQ A2COR (EXPT (FQUOTIENT (FLOAT F1)
				       500.0)
			    2.0))
          (SETQ DELF2 (FQUOTIENT (FLOAT F2)
				 1500.0))
          (SETQ A3COR (FTIMES A2COR (FTIMES DELF2 DELF2)))
          (SETQ A2COR (FQUOTIENT A2COR DELF2))               (* Compute amplitude corrections due to proximity of 2 
							     formants. *)
          (SETQ N12COR 0.0)
          (SETQ N23COR 0.0)
          (SETQ N34COR 0.0)
          (SETQ F21 (FDIFFERENCE F2 F1))
          (COND
	    ((FLESSP F21 50.0)
	      (GO EXIT))
	    ((FLESSP F21 550.0)
	      (SETQ N12COR (PARCOE.DBCOR F21))))
          (SETQ F32 (FPLUS F3 (FMINUS F2)
			   -50.0))
          (COND
	    ((FLESSP F32 50.0)
	      (GO EXIT))
	    ((FLESSP F32 550.0)
	      (SETQ N23COR (PARCOE.DBCOR F32))))
          (SETQ F43 (FPLUS F4 (FMINUS F3)
			   -50.0))
          (COND
	    ((FLESSP F43 50.0)
	      (GO EXIT))
	    ((FLESSP F43 550.0)
	      (SETQ N34COR (PARCOE.DBCOR F43))))
      EXIT(SETQ CORRECTIONS
	    (CREATE CORRECTIONS
		    A2COR ← A2COR
		    A3COR ← A3COR
		    N12COR ← N12COR
		    N23COR ← N23COR
		    N34COR ← N34COR))
          (RETURN CORRECTIONS))))

(PARCOE.PTC.ASPIRATION
  (LAMBDA (PVECTOR COEFF)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Get aspiration amplitude. *)
    (PROG NIL
          (replace (COEFF AASPIR) of COEFF with (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR GAIN)
									  of PVECTOR)
								       (fetch (PVECTOR AV)
									  of PVECTOR)
								       DBSCA.AASPIR))))))

(PARCOE.PTC.FRICATION
  (LAMBDA (PVECTOR COEFF)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Get frication amplitude. *)
    (PROG (AASPIR AFRIC GAIN SWITCH PLSTEP)
          (SETQ AASPIR (fetch (PVECTOR AASPIR) of PVECTOR))
          (SETQ AFRIC (fetch (PVECTOR AFRIC) of PVECTOR))
          (SETQ GAIN (fetch (PVECTOR GAIN) of PVECTOR))
          (SETQ SWITCH (fetch (PVECTOR SWITCH) of PVECTOR))
          (COND
	    ((AND (FGREATERP AASPIR AFRIC)
		  (EQ SWITCH 'PARALLEL))
	      (SETQ AFRIC AASPIR)))                          (* Add a step to waveform at a plosive relase.
							     *)
          (COND
	    ((FLESSP (FDIFFERENCE AFRIC (fetch (COEFF AFRIC1) of COEFF))
		     49)
	      (SETQ PLSTEP 0.0))
	    (T (SETQ PLSTEP (PARCOE.GET.AMP (FPLUS GAIN DBSCA.AFRIC 44)))))
          (replace (COEFF AFRIC) of COEFF with (PARCOE.GET.AMP (FPLUS GAIN AFRIC DBSCA.AFRIC)))
          (replace (COEFF AFRIC1) of COEFF with AFRIC)
          (replace (COEFF PLSTEP) of COEFF with PLSTEP))))

(PARCOE.PTC.FORMANTS
  (LAMBDA (PVECTOR COEFF CORRECTIONS)                        (* kbr: "11-Jul-84 14:28")
                                                             (* Set up resonators for formants F1-F6.
							     *)
    (PROG (A2COR A3COR N12COR N23COR N34COR)                 (* Unpack CORRECTIONS. *)
          (SETQ A2COR (fetch (CORRECTIONS A2COR) of CORRECTIONS))
          (SETQ A3COR (fetch (CORRECTIONS A3COR) of CORRECTIONS))
          (SETQ N12COR (fetch (CORRECTIONS N12COR) of CORRECTIONS))
          (SETQ N23COR (fetch (CORRECTIONS N23COR) of CORRECTIONS))
          (SETQ N34COR (fetch (CORRECTIONS N34COR) of CORRECTIONS))
                                                             (* Set up resonators. *)
          (PARCOE.SET.RES (fetch (COEFF RES1) of COEFF)
			  (fetch (PVECTOR F1) of PVECTOR)
			  (fetch (PVECTOR B1) of PVECTOR))
          (PARCOE.SET.RES (fetch (COEFF RES2) of COEFF)
			  (fetch (PVECTOR F2) of PVECTOR)
			  (fetch (PVECTOR B2) of PVECTOR))
          (PARCOE.SET.RES (fetch (COEFF RES3) of COEFF)
			  (fetch (PVECTOR F3) of PVECTOR)
			  (fetch (PVECTOR B3) of PVECTOR))
          (PARCOE.SET.RES (fetch (COEFF RES4) of COEFF)
			  (fetch (PVECTOR F4) of PVECTOR)
			  (fetch (PVECTOR B4) of PVECTOR))
          (PARCOE.SET.RES (fetch (COEFF RES5) of COEFF)
			  (fetch (PVECTOR F5) of PVECTOR)
			  (fetch (PVECTOR B5) of PVECTOR))
          (PARCOE.SET.RES (fetch (COEFF RES6) of COEFF)
			  (fetch (PVECTOR F6) of PVECTOR)
			  (fetch (PVECTOR B6) of PVECTOR))
          (replace (COEFF A1) of COEFF with (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR A1) of PVECTOR)
								   N12COR DBSCA.A1)))
          (replace (COEFF A2) of COEFF with (FTIMES A2COR (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR
											  A2)
										    of PVECTOR)
										 (FTIMES 2 N12COR)
										 N23COR DBSCA.A2))))
          (replace (COEFF A3) of COEFF with (FTIMES A3COR (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR
											  A3)
										    of PVECTOR)
										 (FTIMES 2 N23COR)
										 N34COR DBSCA.A3))))
          (replace (COEFF A4) of COEFF with (FTIMES A3COR (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR
											  A4)
										    of PVECTOR)
										 (FTIMES 2 N34COR)
										 DBSCA.A4))))
          (replace (COEFF A5) of COEFF with (FTIMES A3COR (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR
											  A5)
										    of PVECTOR)
										 DBSCA.A5))))
          (replace (COEFF A6) of COEFF with (FTIMES A3COR (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR
											  A6)
										    of PVECTOR)
										 DBSCA.A6)))))))

(PARCOE.PTC.NASAL
  (LAMBDA (PVECTOR COEFF)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Nasal resonator and antiresonator.
							     *)
    (PROG NIL
          (PARCOE.SET.RES (fetch (COEFF RESNP) of COEFF)
			  (fetch (PVECTOR FNP) of PVECTOR)
			  (fetch (PVECTOR BNP) of PVECTOR))
          (PARCOE.SET.ANTIRES (fetch (COEFF RESNZ) of COEFF)
			      (fetch (PVECTOR FNZ) of PVECTOR)
			      (fetch (PVECTOR BNZ) of PVECTOR))
          (replace (COEFF ANP) of COEFF with (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR ANP)
								       of PVECTOR)
								    DBSCA.ANP))))))

(PARCOE.PTC.GLOTTAL
  (LAMBDA (PVECTOR COEFF)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Glottal resonators and antiresonator.
							     *)
    (PROG (F0 AV PULSN)
          (SETQ F0 (fetch (PVECTOR F0) of PVECTOR))          (* Get voicing amplitude. *)
          (SETQ AV (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR GAIN) of PVECTOR)
					  (fetch (PVECTOR AV) of PVECTOR)
					  DBSCA.AV)))
          (COND
	    ((OR (NOT (FGREATERP F0 0.0))
		 (AND (NOT (FGREATERP (fetch (PVECTOR AV) of PVECTOR)
				      0.0))
		      (NOT (FGREATERP (fetch (PVECTOR ASV) of PVECTOR)
				      0.0))))                (* No pulse issued. *)
	      (SETQ PULSN 1))
	    (T                                               (* Waveform more sinusoidal at high fundamental 
							     frequency. *)
	       (PARCOE.SET.RES (fetch (COEFF RESGP) of COEFF)
			       (fetch (PVECTOR FGP) of PVECTOR)
			       (FQUOTIENT (FTIMES 100.0 (fetch (PVECTOR BGP) of PVECTOR))
					  F0))
	       (PARCOE.SET.RES (fetch (COEFF RESGS) of COEFF)
			       0.0
			       (fetch (PVECTOR BGS) of PVECTOR))
	       (PARCOE.SET.ANTIRES (fetch (COEFF RESGZ) of COEFF)
				   (fetch (PVECTOR FGZ) of PVECTOR)
				   (fetch (PVECTOR BGZ) of PVECTOR))
                                                             (* Set gain to constant in mid-frequency region for 
							     RESGP. *)
	       (replace (RES A) of (fetch (COEFF RESGP) of COEFF) with .007)
                                                             (* Do not let F0 drop below 40HZ.
							     *)
	       (SETQ F0 (RANGECHECK F0 40 MAX.FIXP))         (* Make AMP of AV increase with increasing F0.
							     *)
	       (SETQ AV (FTIMES AV F0))                      (* Number of samples before a new glottal pulse may be 
							     generated. *)
	       (SETQ PULSN (FQUOTIENT SR F0))))
          (replace (COEFF AV) of COEFF with AV)
          (replace (COEFF PULSN) of COEFF with PULSN))))

(PARCOE.PTC.VOICING
  (LAMBDA (PVECTOR COEFF)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Get amplitude of quasi-sinusoidal voicing source.
							     *)
    (PROG NIL
          (replace (COEFF ASV) of COEFF with (FTIMES 10.0 (PARCOE.GET.AMP (FPLUS (fetch (PVECTOR
											  GAIN)
										    of PVECTOR)
										 (fetch (PVECTOR
											  ASV)
										    of PVECTOR)
										 DBSCA.ASV)))))))

(PARCOE.DBCOR
  (LAMBDA (DB)                                               (* kbr: "11-Jul-84 14:28")
                                                             (* Increment in DB to adjust formant AMPs of parallel 
							     branch. *)
    (FDIFFERENCE 11.0 (FQUOTIENT DB 50.0))))

(PARCOE.GET.AMP
  (LAMBDA (DB)                                               (* kbr: "11-Jul-84 14:28")
                                                             (* Convert DB attenuation to linear scale factor *)
    (EXPT 2.0 (FQUOTIENT (RANGECHECK DB -72.0 96.0)
			 6.0))))

(LOG10
  (LAMBDA (X)                                                (* kbr: "11-Jul-84 14:28")
    (FQUOTIENT (LOG X)
	       (CONSTANT (LOG 10.0)))))

(RANGECHECK
  (LAMBDA (VALUE MIN MAX)                                    (* kbr: "11-Jul-84 14:28")
                                                             (* Coerce VALUE to lie in interval 
							     (MIN%,MAX) *)
    (COND
      ((FLESSP VALUE MIN)
	MIN)
      ((FGREATERP VALUE MAX)
	MAX)
      (T VALUE))))

(PARCOE.SET.RES
  (LAMBDA (RES FREQUENCY BANDWIDTH)                          (* kbr: "11-Jul-84 14:28")
                                                             (* Set up RES coefficients. *)
    (PROG (A B C R)                                          (* Calc difference equation coefficients A%, B%, C.
							     *)
          (SETQ R (ANTILOG (FMINUS (FTIMES PIT BANDWIDTH))))
          (SETQ C (FMINUS (FTIMES R R)))
          (SETQ B (FTIMES 2.0 R (COS (FTIMES TWOPIT FREQUENCY)
				     T)))
          (SETQ A (FPLUS 1.0 (FMINUS B)
			 (FMINUS C)))                        (* Update RES. *)
          (replace (RES A) of RES with A)
          (replace (RES B) of RES with B)
          (replace (RES C) of RES with C)
          (RETURN RES))))

(PARCOE.SET.ANTIRES
  (LAMBDA (ANTIRES FREQUENCY BANDWIDTH)                      (* kbr: "11-Jul-84 14:28")
                                                             (* Set up ANTIRES coefficients.
							     *)
    (PROG (A B C R)                                          (* Calc difference equation coefficients A%, B%, C.
							     *)
          (SETQ R (ANTILOG (FMINUS (FTIMES PIT BANDWIDTH))))
          (SETQ C (FMINUS (FTIMES R R)))
          (SETQ B (FTIMES 2.0 R (COS (FMINUS (FTIMES TWOPIT FREQUENCY))
				     T)))
          (SETQ A (FPLUS 1.0 (FMINUS B)
			 (FMINUS C)))
          (SETQ A (FQUOTIENT 1.0 A))
          (SETQ B (FMINUS (FTIMES A B)))
          (SETQ C (FMINUS (FTIMES A C)))                     (* Update ANTIRES. *)
          (replace (RES A) of ANTIRES with A)
          (replace (RES B) of ANTIRES with B)
          (replace (RES C) of ANTIRES with C)
          (RETURN ANTIRES))))
)
(SETQ PVECTOR.FIELDNAMES (CAR (NTH (RECLOOK 'PVECTOR)
				   4)))
(SETQ PVECTOR.PNAMES (MEMB 'AV PVECTOR.FIELDNAMES))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (3002 20790 (PVECTOR.GET 3012 . 3393) (PVECTOR.PUT 3395 . 3784) (PVECTOR.INDEX 3786 . 
4016) (PARCOE.INIT 4018 . 5822) (PARCOE.INTERPOLATE 5824 . 6168) (PARCOE.INTERPOLATE.PNAME 6170 . 7274
) (PARCOE.PTC 7276 . 8073) (PARCOE.PTC.CORRECTIONS 8075 . 9758) (PARCOE.PTC.ASPIRATION 9760 . 10229) (
PARCOE.PTC.FRICATION 10231 . 11407) (PARCOE.PTC.FORMANTS 11409 . 14358) (PARCOE.PTC.NASAL 14360 . 
15113) (PARCOE.PTC.GLOTTAL 15115 . 17353) (PARCOE.PTC.VOICING 17355 . 17894) (PARCOE.DBCOR 17896 . 
18197) (PARCOE.GET.AMP 18199 . 18495) (LOG10 18497 . 18655) (RANGECHECK 18657 . 18991) (PARCOE.SET.RES
 18993 . 19805) (PARCOE.SET.ANTIRES 19807 . 20788)))))
STOP