festdoc-1.4.2/0040755001741100001440000000000007332366601011650 5ustar awbusersfestdoc-1.4.2/festival/0040755001741100001440000000000007332366723013472 5ustar awbusersfestdoc-1.4.2/festival/festival.ps0100644001741100001440000370302107332366664015662 0ustar awbusers%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: festival.dvi %%Pages: 222 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -f festival.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2001.07.25:0806 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet TeXDict begin 39158280 55380996 1000 600 600 (festival.dvi) @start %DVIPSBitmapFont: Fa cmbxti10 14.4 1 /Fa 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A EA0FE0121271912B>46 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmti9 9 1 /Fb 1 47 df<121C127F12FFA412FE12380808778718>46 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmtt9 9 39 /Fc 39 123 df43 D<007FB512F8B612FCA46C14F81E067C9927>45 D<121EEA7F80A2EAFFC0A4EA7F 80A2EA1E000A0A728927>I<1538157C15FCA2140115F8140315F0140715E0140F15C014 1F1580143F1500A25C147E14FE5C13015C13035C13075C130F5CA2131F5C133F91C7FC5B 137E13FE5B12015B12035BA212075B120F5B121F5B123F90C8FC5A127E12FE5AA25A1278 1E3A7CB327>II50 D<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390B5FCA5EBE0 0FA36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>70 D<007FB512E0B612F0A36C14 E039001F8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>73 D<007FB5FCB612E081816C803907E003FEEC00FF81ED3F80151F16C0150FA6151F168015 3FED7F005DEC03FE90B55A5D5D5D92C7FC01E0C8FCADEA7FFEB5FCA36C5A222E7FAD27> 80 D<90387FC0E03901FFF1F0000713FF5A5AEA3FE0EB801F387F000F007E130712FE5A 1403A3EC01E06C90C7FC127E127FEA3FC013F86CB47E6C13F86C13FE6CEBFF80C614C001 0F13E0010013F0140FEC07F81403140115FC1400127812FCA46CEB01F8A26C1303903880 07F09038F01FE090B5FC15C0150000F85B38701FF81E307CAE27>83 D<007FB61280B712C0A439FC03F00FA60078EC0780000091C7FCB3AB90B512C04880A36C 5C222E7EAD27>I<3A7FFE01FFF8B54813FCA36C486C13F83A07E0001F80B3AB6D133F00 031500A26D5B0001147E6D13FE6C6C485A90387F87F814FF6D5B010F13C06D5BD901FEC7 FC262F80AD27>I87 D<007FB512F8B612FCA46C14F81E067C7E27>95 D<3803FFC0000F13F04813FC4813FF81 1380EC1FC0381F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07EA7FC013 0012FE5AA46C130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F8022207C 9F27>97 DIIIII<153F90391FC0FF80D97FF313C048B612E05A4814 EF390FF07F873A1FC01FC3C0EDC000EB800F48486C7EA66C6C485AEBC01FA2390FF07F80 90B5C7FC5C485BEB7FF0EB1FC090C9FCA27F6CB5FC15E015F84814FE4880EB8001007EC7 EA3F80007C140F00FC15C0481407A46C140F007C1580007F143F6C6CEB7F009038F807FF 6CB55A000714F86C5CC614C0D90FFCC7FC23337EA027>II<130F497E497EA46D5A6DC7FC90C8FCA7383FFF8048 7FA37EEA000FB3A4007FB512F0B6FC15F815F07E1D2F7BAE27>I107 D<387FFF80B57EA37EEA000FB3 B2007FB512F8B612FCA36C14F81E2E7CAD27>I<397F07C01F3AFF9FF07FC09039FFF9FF E091B57E7E3A0FFC7FF1F89038F03FC001E0138001C01300A3EB803EB03A7FF0FFC3FF48 6C01E3138001F913E701F813E36C4801C313002920819F27>I<387FE07F39FFF1FFC001 F713F090B5FC6C80000313C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C 018313E024207F9F27>II< 387FE0FFD8FFF313C090B512F0816C800003EB81FE49C67E49EB3F8049131F16C049130F A216E01507A6150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D5D01F313 C0D9F0FEC7FC91C8FCAC387FFF80B57EA36C5B23317F9F27>I<90380FF03C90383FFE7E 90B5FC000314FE5A380FFC1F381FE007EBC003383F800148C7FC127EA200FE147E5AA67E 007E14FEA2007F1301EA3F80EBC003381FE007380FF81F6CB5FC7E6C147E38007FFCEB0F F090C7FCAC91381FFFF8A24A13FC6E13F8A226317E9F27>I<397FFC03FC39FFFE0FFF02 3F13804A13C0007F90B5FC39007FFE1F14F89138F00F809138E002004AC7FC5CA291C8FC A2137EAD007FB57EB67EA36C5C22207E9F27>I<9038FFF3800007EBFFC0121F5A5AEB80 3F38FC000F5AA2EC07806C90C7FCEA7F8013FC383FFFF06C13FC000713FF00011480D800 0F13C09038003FE014070078EB03F000FC1301A27E14036CEB07E0EBE01F90B512C01580 150000FB13FC38707FF01C207B9F27>I<133C137EA8007FB512F0B612F8A36C14F0D800 7EC7FCAE1518157EA415FE6D13FC1483ECFFF86D13F06D13E0010313C0010013001F297E A827>I<397FE01FF8486C487EA3007F131F00031300B21401A21403EBFC0F6CB612E016 F07EEB3FFE90390FF87FE024207F9F27>I<3A7FFC0FFF80486C4813C0A36C486C13803A 07C000F800EBE00100035CA2EBF00300015CA2EBF80700005CA390387C0F80A36D48C7FC A3EB3F3FEB1F3EA214FE6D5AA36D5AA26D5A22207E9F27>I<3A7FFE07FFE000FF15F06D 5A497E007F15E03A0F80001F00A36D5B0007143EA414F0EBC1F83903E3FC7CA4EBE79EA2 00011478A301F713F8A2EBFF0F6C5CA3EBFE0790387C03E024207F9F27>I<393FFC1FFF 486C5A168016006C487E3901F807E06C6C485A4A5A017E90C7FC6D5AEB1F7E5C6D5A1307 6D5A5C80497E130F497E143EEB3E3FEB7E1F90387C0F8001F87F00016D7E3803F0033A7F FE1FFF80A2B54813C06C486C1380A222207E9F27>I<3A7FFC0FFF80486C4813C0A36C48 6C13803A07E000F800000313015D13F00001130301F85B1200A26D485A137CA290387E0F 80133EA2011F90C7FC5CA2130F149E14BE130714FC1303A25C1301A25CA213035CA21307 5C1208EA3E0F007F5B131FD87E7FC8FCEA7FFE6C5A5B6C5AEA07C022317E9F27>I<001F B512FE4814FFA490380001FEEC03FCEC07F8EC0FF0001EEB1FE0C7EA3FC0EC7F80ECFF00 495A495A495AEB1FE0495A495A49C7FC485A4848131E4848133F485A485A485A485AB7FC A46C14FE20207E9F27>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd cmr9 9 69 /Fd 69 123 df<91393FE00FE0903A01FFF83FF8903A07E01EF83C903A1F800FF07E903A 3F001FE0FE017E133F4914C0485A1738484890381F8000ACB812C0A33B03F0001F8000B3 A7486C497EB50083B5FCA32F357FB42D>11 DI15 D<123C127EB4FCA21380A2127F123D1201A412031300A25A1206120E120C121C5A5A 126009177AB315>39 D<123C127EB4FCA21380A2127F123D1201A412031300A25A120612 0E120C121C5A5A126009177A8715>44 DI<123C127E12FFA412 7E123C08087A8715>I<1530157815F8A215F01401A215E01403A215C01407A21580140F A215005CA2143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A2495AA291C7FC 5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A2485AA25B120FA290C8FC5A A2121E123EA2123C127CA2127812F8A25A12601D4B7CB726>II<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3 A2497E007FB51280A319327AB126>II II<000C14C0380FC00F90B512801500 5C5C14F014C0D80C18C7FC90C8FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80EC0FC0 120E000CEB07E0A2C713F01403A215F8A41218127E12FEA315F0140712F8006014E01270 EC0FC06C131F003C14806CEB7F00380F80FE3807FFF8000113E038003F801D347CB126> I<14FE903807FF80011F13E090383F00F0017C13703901F801F8EBF003EA03E01207EA0F C0EC01F04848C7FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F809038E007C0 39FFC003E0018013F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA26C130101 8013F8000F14F0EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFCEB0FE01F 347DB126>I<1230123C003FB6FCA34814FEA215FC0070C7123800601430157015E04814 C01401EC0380C7EA07001406140E5C141814385CA25CA2495A1303A3495AA2130FA3131F 91C7FCA25BA55BA9131C20347CB126>III<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC 187FA34A6C7EA202707FEC601FA202E07FECC00FA2D901807F1507A249486C7EA301066D 7EA2010E80010FB5FCA249800118C77EA24981163FA2496E7EA3496E7EA2000182160748 7ED81FF04A7ED8FFFE49B512E0A333367DB53A>65 DIIIIIIII<017FB5FCA39038003FE0EC1FC0B3B1127EB4FCA4EC3F805A 0060140000705B6C13FE6C485A380F03F03803FFC0C690C7FC20357DB227>IIIIIII82 D<90381FE00390387FFC0748B5FC3907F01FCF390F8003FF48C7FC003E80814880A20078 8000F880A46C80A27E92C7FC127F13C0EA3FF013FF6C13F06C13FF6C14C06C14F0C68001 3F7F01037F9038003FFF140302001380157F153FED1FC0150F12C0A21507A37EA26CEC0F 80A26C15006C5C6C143E6C147E01C05B39F1FC03F800E0B512E0011F138026C003FEC7FC 22377CB42B>I<007FB712FEA390398007F001D87C00EC003E0078161E0070160EA20060 160600E01607A3481603A6C71500B3AB4A7E011FB512FCA330337DB237>IIII<267FFFFC90B512C0A3000101E090381FF80026007F80EB 0FC0013F6E5A6E91C7FC6D6C130E010F140C6E5B6D6C133801035C6E13606D6C13E06D6C 485A5EDA7F83C8FCEC3FC715C6EC1FECEC0FFC5D14076E7EA26E7E815C6F7E9138063FC0 140E4A6C7E9138180FF0EC380702707F91386003FCECC0010101804A6C7E49C77E498101 0E6E7E010C6E7E131C496E7E01786E7E13FCD807FEEC1FFEB56C90B512F8A335337EB23A >II<12035A120E5A12181238123012701260A212E05AA412DEB4FC1380A2 127FA2EA3F00121E09177BB315>96 DIII<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEB FC0F3901F003BF3907E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C 6C5BA26C6C5B6C6C4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B> III<151F90391FC07F809039FFF8E3C03901F07FC73907E0 3F033A0FC01F83809039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C 48C7FCEBF07C380EFFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14 FC4880381F0001003EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC0 01F83903F007E0C6B51280D91FFCC7FC22337EA126>IIIIII<2703F01FE013FF00FF90267FF80313C0 903BF1E07C0F03E0903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495C A2495CB3486C496C487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF0 9038F1E0FC9038F3807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA3 26217EA02B>II<3903F03F 8000FFEBFFE09038F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0 A3ED03F8A9150716F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038 F1FFE0D9F07FC7FC91C8FCAA487EB512C0A325307EA02B>I<903807F00390383FFC07EB FC0F3901F8038F3807E001000F14DF48486CB4FC497F123F90C77E5AA25A5AA9127FA36C 6C5B121F6D5B000F5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE090C7FCAAED7F80 91380FFFFCA326307DA029>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07EEEA03 ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>II<1330A51370A313F0A21201A212031207381FFFFEB5FC A23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD1E>I< D803F0133F00FFEB0FFFA30007EB007F000380B35DA35D12016D4813800000903803BFFC 90387E073FEB1FFED907F8130026227EA02B>IIII<3A7FFF807FF8A33A07F8001FC00003EC0F800001EC070015066C 6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E0010F5BA2903807E180A214F3 010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05CA2495A1278D8FC03C8FCA2 1306130EEA701CEA7838EA1FF0EA0FC025307F9F29>I<003FB512F0A2EB000F003C14E0 0038EB1FC00030EB3F800070137F1500006013FE495A13035CC6485A495AA2495A495A49 C7FC153013FE485A12035B48481370485A001F14604913E0485A387F000348130F90B5FC A21C207E9F22>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmtt12 14.4 1 /Fe 1 44 df<157815FC4A7EB3A2003FB812E04817F0B912F8A46C17F06C17E0C7D801FE C8FCB3A26E5A157835347CBE3E>43 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff cmbx12 13.14 52 /Ff 52 122 df<922607FFE0ECFFF892B500FC013F13FF02076E48B612C0021FDAFF8781 027F010001DF9038C01FF0DAFFF0903B1FFFFC0003F8010301C003F0804990C74801C0EB 0FFE49484A49131F4A91B5C77F49484B5C49485D5E137F4A6D5BA2755A057F6F5A053F6F 5A051FED01E098C8FCA851B4FCBEFCA526007FF0C7D81FFCC7120F87B3B3003FB5D8E00F B5D8F803B512FEA55F4D7ECC66>14 D46 D<177817F8EE01FCA21603A2EE07F8A217F0160F A217E0161FA2EE3FC0A21780167FA217005EA24B5AA25E1503A24B5AA25E150FA25E151F A24B5AA25E157FA24BC7FCA25D1401A25D1403A24A5AA25D140FA24A5AA25D143FA25D14 7FA24AC8FCA25C1301A25C1303A2495AA25C130FA2495AA25C133FA25C137FA249C9FCA2 5B1201A2485AA25B1207A25B120FA2485AA25B123FA25B127FA248CAFCA25AA2127CA22E 6D79D13D>II<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B200 7FB712E0A52B4777C63D>IIIIII<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F485E90C8 EA07E0007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA24BC8FC15 7EA25D1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55BAA6D5BA2 6D90C9FCEB007C334B79C93D>IIII66 D<93261FFF80EB01C00307 B500F81303033F02FE13074AB7EA800F0207EEE01F021F903AFE007FF83F027F01E09038 07FC7F91B5C73801FEFF010301FCEC007F4901F0814901C0150F4949814990C97E494882 495A48498248197F5C48193F5C48191F5C48190FA2485BA21A075AA391CDFCA2B5FCAD7E A280F207C0A27EA36C7F1A0F6C1A80806C191F6E18006C61806C197E6C6D177C6D6C17FC 6D6C4C5A6D6D4B5A6D6D4B5A6D01F0ED1FC06D01FC4B5A010001FF03FFC7FC6E01E0EB07 FE021F01FEEB3FFC020790B612F0020116C0DA003F92C8FC030714F8DB001F13804A4D79 CB59>III<93261FFF80EB01C00307B500F81303033F02FE13074AB7EA800F0207EEE01F021F 903AFE007FF83F027F01E0903807FC7F91B5C73801FEFF010301FCEC007F4901F0814901 C0150F4949814990C97E494882495A48498248197F5C48193F5C48191F5C48190FA2485B A21A075AA391CEFCA2B5FCAD7E050FB712C080A37E94C7001FEBC000807EA27E807E807E 806C7F7E6D7E6D7E6D7F6D01E05D6D6D5D6D13FC010001FF4AB5FC6E01E0EB07F9021F01 FFEB3FF0020791B5EAE07F0201EEC01FDA003FED0007030702F81301DB001F018090C8FC 524D79CB60>71 D73 D76 D80 D82 DI<003FBB12C0A5DA80019038FC001FD9FC001601D87FF09438007FE001 C0183F49181F90C7170FA2007E1907A3007C1903A500FC1AF0481901A5C894C7FCB3B3A7 49B812FCA54C4A7CC955>IIII97 DI<91380FFF8091B512F80103 14FF010F158090263FFE0013C0D97FF8EB1FE0D9FFE0EB3FF04849EB7FF8484913FF4890 C7FC5A5B121F5B003FED7FF0EE3FE0007FED1FC093C7FC5BA212FFAC127F7FA2123FA26D 153E121F6D157E6C167C6C6D14FC6C16F86C6D13036C01F0EB07F0D97FFCEB1FE06DB4EB FFC0010F90B5120001035C010014F0020F13802F337CB137>IIIIII<13 FCEA03FF487F487FA2487FA66C5BA26C5B6C90C7FCEA00FC90C8FCACEB7FC0B5FCA51203 7EB3B3B61280A5194D7BCC22>IIII<90287FC001FFE0EC7FF8B5010F01FC0103B5FC033F6D010F804B6D6C48 14E0DBFE079026C03F817F9126C3F0019138FC007F0003D9C7E0DAE1F8806CDA8000D9F1 E06D7E02CFC7EBF3C002DE91267FF780131F02FC03FFC77FA24A5DA24A5DA34A5DB3A9B6 D8C03FB5D8F00FB512FCA55E317BB067>I<903A7FC001FFC0B5010F13F8033F13FE4B7F 9126C1FE077F9126C3F0037F00039038C7C0016CD9CF8080150002DE7F02FC81A25CA25C A35CB3A9B6D8C07FEBFFE0A53B317BB044>I<913807FF80027F13F80103B6FC010F15C0 90261FFE017F903A7FF0003FF8D9FFC0EB0FFC48496D7E4890C76C7E4817804980000F17 C048486E13E0A2003F17F049157FA2007F17F8A400FF17FCAB007F17F8A36C6CEDFFF0A3 001F17E06D5C000F17C06C6C4A13806C17006C6D495A6C01E0EB1FFC6D6C495A903A3FFE 01FFF0010FB612C0010392C7FCD9007F13F80207138036337DB13D>I<90397FC00FFFB5 017F13F002C1B512FC02C714FF9126CFF80F7F9126FFC00313E0000391C77F6C01FC6E7E 4A6E7E5C4A6E7E848319808319C0A47113E0AC4D13C0A319805FA219004D5A804D5A6E4A 5A6E4A5A02FF495BDB80075B9126EFF01F5B02E7B548C7FC02E314F802E014E0DB0FFEC8 FC92CAFCAFB612C0A53B467CB044>I<9039FF803FE0B5EBFFF8028113FE02837FDA87E1 1380EC8F830003D99F0713C06C139E14BCA214F8A24A6C13806F13004A6C5A93C7FCA45C B3A7B612E0A52A317CB032>114 D<90390FFF8070017FEBF1F048B6FC1207380FFC0139 1FE0003F4848130F491307127F90C712035A1501A27FA213E06D90C7FC13FE387FFFF0EC FFC015F06C14FC6C14FF6C15806C15C06C15E0C615F0013F14F8010714FCEB007F140191 38003FFE150F0078140700F81403A26C1401A37E16FC6C14036D14F87F6DEB07F001F8EB 1FE001FFEBFFC091B51280D8FC7F1400D8F81F13FCD8E00313C027337CB130>I<14F8A6 1301A41303A21307A2130FA2131F133F137F13FF1203000F90B512F0B7FCA426007FF8C7 FCB3A6167CAA013F14F880A290391FFE01F0010F1303903907FF87E06DEBFFC06D14806D 6C1300EC0FFC26467EC430>IIIII<007FB500C090 387FFFE0A5C601F0C73803F8006E5D017F5E6E1407013F5E6E140F011F5E6E141FA26D6D 91C7FC5F6D153E6F137E6D157C6F13FC6D5DEDF0016D5DEDF803027F5C15FC1607DA3FFE 5B160F021F5CEDFF1F6E91C8FC16BF6E13BE16FE6E5BA36E5BA26E5BA26F5AA26F5AA26F 5AA393C9FC5D153E157E157CD81F8013FC486C5B387FE001D8FFF05B14035D14074A5A49 485A007F49CAFCEBC07E383F81FC6CB45A6C5B6C13C0C648CBFC3B467EAF41>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmr8 8 10 /Fg 10 116 df45 D<4A7E4A7EA34A7EA24A7EA3EC1BF81419A2 EC30FCA2EC70FEEC607EA24A7EA349486C7EA2010380EC000FA201066D7EA3496D7EA201 1FB57EA29038180001496D7EA349147EA201E0147F4980A20001ED1F801203000716C0D8 0FF0EC3FE0D8FFFC0103B5FCA2302F7EAE35>65 DI<007FB712F8A29039000FC003007C150000701638A2006016 18A200E0161CA248160CA5C71500B3A94A7E011FB512E0A22E2D7EAC33>84 D99 D<15F8141FA214011400ACEB0FE0EB7FF83801F81E3803E007 3807C003380F8001EA1F00481300123E127EA25AA9127C127EA2003E13017EEB8003000F 13073903E00EFC3A01F03CFFC038007FF090391FC0F800222F7EAD27>I104 D<2607C07FEB07F03BFFC3FFC03FFC903AC783F078 3F3C0FCE01F8E01F803B07DC00F9C00F01F8D9FF8013C04990387F000749137EA249137C B2486C01FEEB0FE03CFFFE0FFFE0FFFEA2371E7E9D3C>109 D<3807C0FE39FFC7FF8090 38CF03E0390FDC01F03907F800FC49137E49133E49133FED1F80A3ED0FC0A8151F1680A2 ED3F00A26D137E6D137C5D9038FC01F09038CE07E09038C7FF80D9C1FCC7FC01C0C8FCA9 487EEAFFFEA2222B7E9D27>112 D<3801FE183807FFB8381E01F8EA3C00481378481338 A21418A27E7EB41300EA7FF06CB4FC6C13C06C13F0000113F838001FFC130138C0007E14 3EA26C131EA27EA26C133CA26C137838FF01F038E3FFC000C0130017207E9E1C>115 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmsy9 9 2 /Fh 2 106 df104 D<126012F07EA21278127CA27EA2 121E121FA26C7EA212077FA26C7EA212017FA26C7EA21378137CA27FA2131E131FA2EB0F 80A2130714C0A41480130FA2EB1F00A2131E133EA25BA2137813F8A2485AA25B1203A248 5AA25B120FA248C7FCA2121E123EA25AA2127812F8A25A1260124A7CB71E>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi cmti10 10.95 62 /Fi 62 123 df11 D<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C137F031F14FF 4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218E0903A0003F0 00070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA2143F92C712FE5F A34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A010113F018E09338 00F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA249CAFC12FEEA F81EEA703CEA7878EA1FF0EA07C0385383BF33>I40 D<14031580A2EC01C0EC00E0A21570A215781538153CA3151EA4151FA2150FA7151FA915 3FA2153EA3157EA2157CA215FCA215F8A21401A215F0A2140315E0A2140715C0A2EC0F80 A2141F15005C143EA25CA25CA2495A5C1303495A5C130F49C7FC131E5B137C5B5B485A48 5A485A48C8FC121E5A12705A5A205A7FC325>I44 D<387FFFFCA3B5FCA21605799521>I<120FEA3FC0127FA212FFA31380 EA7F00123C0A0A77891C>I<15FE913807FF8091381F07C091387C01F0ECF000494813F8 494813780107147C495A49C7FC167E133E137EA25BA2485AA2000315FEA25B000715FCA2 491301120FA34848EB03F8A44848EB07F0A448C7EA0FE0A316C0007E141F12FE1680153F A2481500A2157EA25DA25D4813015D6C495A127C4A5A4A5A6C49C7FC143E6C5B380FC1F0 3803FFC0C648C8FC273F76BC2E>48 D<15031507150F151F151E153E157EEC01FEEC03FC 1407141FEB01FF90380FFBF8EB1FC3EB0E07130015F0A2140FA215E0A2141FA215C0A214 3FA21580A2147FA21500A25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CA213 1FA25CEB7FE0B612F0A215E0203D77BC2E>I<15FE913803FFC091380F01F091383C00F8 4A137C4A7F4948133F49487F4A148049C7FC5BEB0E0C011E15C0EB1C0EEB3C0613381378 1370020E133FD9F00C148013E0141C0218137F00011600EBC0384A13FEEC600102E05B3A 00E3C003F89039FF0007F0013C495A90C7485A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC 147E14F8EB03E0495A011FC9FC133E49141801F0143C48481438485A1678485A48C85A12 0E001E4A5AD83FE0130301FF495A397C3FF01FD8780FB55AD8700391C7FCD8F0015B486C 6C5A6E5AEC07C02A3F79BC2E>I<1638167E16FE16FCA3150116F8A3150316F0A2150716 E0A2ED0FC0A3ED1F80A216005DA2157EA2157C15FC5D14015D14035D4A5AA24A5AA24AC7 FC143EED038091387C0FC014F8ECF01F01011480EB03E014C0903807803F010F1400EB1F 00133E495B49137E485A485A484813FE48B46C5A4813F04813FE267C00FF130800F09038 0FFFFC00601301C714E0913803F8005DA314075DA3140F5DA3141F5DA3020EC7FC274F7D BC2E>52 D<02C0EB018002F0130FD901FEEB7F0091B512FE5E5E4914E016804BC7FCECBF F8D90780C8FC91C9FCA35B130EA3131E131CA3133C9038381FC0ECFFF090383BE07C9038 7F003E017E133F017C7F0178805B498090C7FCA6153FA4001F147F486C5C487EA24913FF 00FF92C7FC90C7FC48495A12E04A5A5D6C495A140F00705C0078495A6C495A003E01FEC8 FC381F03FC380FFFF0000313C0C648C9FC293F77BC2E>III<157F913801FFE0913807C0F0 91381F007C023C133C4A133E4A131F1301495A5C1307A2495AA2163F011F143EA2167E6E 137C16F8ECE00102F013F09138F803E09138FC07C090390FFE0F00ECFFBE6D13F86D5B7F 6D7F8101037F90380F9FFFD91F0F1380D97C0713C0497E48486C13E03903E0007F484813 3F4848131F001F140F90C7FC003E1407A2127E127CA200FC15C05AA2ED0F80A2ED1F0015 3E007C143C157C007E5C6CEB03F0391F8007C0390FE03F802607FFFEC7FC000113F83800 3FC0283F78BC2E>I<15FF020713C091381F81E091383E00F002FC13F84948137C495A49 48137E010F143E495A133F4A133F017F147F91C7FC5BA2485AA216FF12035B16FE150112 075B1503A216FC491307A20003140F16F8151F12016D133F0000EC7FF015EF90387C01CF 90393E079FE090380FFE1FD903F813C090C7123FA21680157F160015FEA24A5A001C5C00 7F1303485C4A5A4A5A4A5A4849C7FC00F8137E00E05B6C485A387C07E0383FFFC06C90C8 FCEA03F8283F77BC2E>I<131EEB3F80137FEBFFC05AA214806C13005B133C90C7FCB312 0FEA3FC0127FA212FFA35B6CC7FC123C122777A61C>I<171C173C177CA217FCA2160116 03A21607A24C7EA2161DA216391679167116E1A2ED01C1A2ED038115071601150EA2031C 7FA24B7EA25D15F05D4A5AA24A5AA24AC7FC5C140E5C021FB6FC4A81A20270C7127FA25C 13015C495AA249C8FCA2130E131E131C133C5B01F882487ED807FEEC01FFB500E0017FEB FF80A25C39417BC044>65 D<9339FF8001C0030F13E0033F9038F803809239FF807E0791 3A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F86E5A495A 130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2485A95C7 FC485AA3127F5BA312FF5BA490CCFCA2170FA2170EA2171E171C173C173817786C16706D 15F04C5A003F5E6D1403001F4B5A6D4AC8FC000F151E6C6C5C6C6C14F86C6C495A6C6CEB 07C090397FC03F8090261FFFFEC9FC010713F0010013803A4272BF41>67 D<49B712C018F818FE903B0003FE0003FF9438007F804BEC1FC0F00FE0F007F014074BEC 03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3027F5D5DA219FE14FF92C81203 A34917FC4A1507A219F813034A150F19F0A20107EE1FE05CF03FC0A2010FEE7F804A1600 6060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC017F15FEEE03FC4AEB0FF001FF EC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F8A390260003FEC7121F18074B14 031801F000F014075DA3140F5D19E0A2141F4B1338A2EF7801023F027013C04B91C7FCA2 17F0027F5CED80011603160F91B65AA3ED001F49EC07805CA3010392C8FC5CF003804C13 070107020E14005C93C75A180E010F161E4A151C183CA2011F5E5C60A2013F15014A4A5A 1707017F150F4D5A4A147F01FF913807FF80B9FCA295C7FC3D3E7BBD3E>I<49B812F0A3 90260003FEC7123F180F4B1403A2F001E014075DA3140F5D19C0A2141F5D1770EFF00302 3F02E013804B91C7FCA21601027F5CED8003A2160702FFEB1F8092B5FCA349D9003FC8FC 4A7F82A20103140E5CA2161E0107141C5CA293C9FC130F5CA3131F5CA3133F5CA2137FA2 5C497EB612E0A33C3E7BBD3B>I<9339FF8001C0030F13E0033F9038F803809239FF807E 07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F86E5A 495A130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2485A 95C7FC485AA3127F5BA312FF5BA30303B512FC90C7FCA2DB000190C7FCA25FA216035FA3 16076C5E7FA2003F150F6D5D121F6D141F000F153F6C6C4A5A6C6C14F76C6CEB01E36CB4 EB07C1903A7FC03F81C090391FFFFE00010701F890C8FC010013803A4272BF46>I<49B6 FC5BA2D9000313005D5DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C7FC A35B5CA313035CA313075CA3130F5CA3131F5CA3133F5CA2137FA25C497EB67EA3283E7B BD23>73 D<4AB61280A2180091C713C0167F5FA216FF94C7FCA35D5EA315035EA315075E A3150F5EA3151F5EA3153F5EA3157FA25EA215FFA293C8FCA25CA25DA2380F8003EA3FC0 D87FE05BA21407D8FFC05B140F01805B49485A12FC0070495A4A5A6C01FEC9FC383C01FC 380F07F03807FFC0C648CAFC314079BD30>I<49B612C0A25FD9000390C8FC5D5DA31407 5DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C9FCA35B5CA313035C18C0EF01E001 0716C05C17031880130F4A140718005F131F4A141EA2173E013F5D4A14FC1601017F4A5A 16074A131F01FFECFFF0B8FCA25F333E7BBD39>76 D<49B5933807FFFC496062D90003F0 FC00505ADBBF805E1A771AEF1407033F923801CFE0A2F1039F020FEE071F020E606F6C14 0E1A3F021E161C021C04385BA2F1707F143C023804E090C7FCF001C0629126780FE0495A 02705FF00700F00E0114F002E0031C5BA2F03803010116704A6C6C5D18E019070103ED01 C00280DA03805BA2943807000F13070200020E5C5FDB03F8141F495D010E4B5CA24D133F 131E011CDAF9C05CEEFB80197F013C6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD8 07FE4C7EB500F04948B512FE16E01500563E7BBD52>I<902601FFFE020FB5FC496D5CA2 D900016D010013C04AEE3F00193E70141C193CEC07BFDB3FE01438151F1978020F7FDA0E 0F15708219F0EC1E07021C6D5CA203031401023C7FDA38015DA2701303EC780002700280 5BA2047F130702F014C04A013F91C7FCA2715A0101141F4AECF00EA2040F131E010315F8 4A151C1607EFFC3C0107140391C7143817FE040113784915FF010E16708218F0131E011C 6F5AA2173F133C01385E171F137813F8486C6F5AEA07FEB500F01407A295C8FC483E7BBD 44>II<49B77E18F018FC903B0003FE0003FEEF00FF4BEC7F80F03FC00207151F19 E05DA2020F16F0A25DA2141FF03FE05DA2023F16C0187F4B1580A2027FEDFF00604B495A 4D5A02FF4A5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04ACAFCA21303A25CA21307A2 5CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67EA33C3E7BBD3E>I<49B612 FCEFFF8018F0903B0003FE000FF8EF03FE4BEB00FF8419800207ED3FC05DA219E0140F5D A3021FED7FC05DA2F0FF80143F4B15004D5A60027F4A5A4B495A4D5AEF3F8002FF02FEC7 FC92380007F892B512E01780499038000FE04A6D7E707E707E0103814A130083A213075C A25E130F5C5F1603131F5CA3013F020714404A16E05F017F160119C04A01031303496C16 80B6D8800113079438FE0F009338007E1ECAEA3FFCEF07F03B407BBD42>82 D<92391FE00380ED7FFC913A01FFFE0700913907F01F8F91390FC007DF4AC66CB4FC023E 6D5A4A130014FC495A4948147CA2495AA2010F15785CA3011F1570A46E91C7FCA2808014 FE90380FFFE015FC6DEBFF8016E06D806D806D6C7F141F02037FEC003FED07FF1501A281 A282A212075A167E120EA2001E15FE5EA25E003E14015E003F14034B5A486C5C150F6D49 5A6D49C8FCD8F9F0137C39F8FE01F839F03FFFF0D8E00F13C026C001FEC9FC314279BF33 >I<48B9FCA25A903AFE001FF00101F89138E0007FD807E0163E49013F141E5B48C75BA2 001E147FA2001C4B131C123C003814FFA2007892C7FC12704A153C00F01738485CC71600 1403A25DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147FA25DA214FFA292C9FC A25BA25CA21303A25CEB0FFE003FB67E5AA2383D71BC41>I<001FB500F090B512F0485D A226003FF0C7380FFC004AEC03F04A5D715A017F1503A24A5DA201FF150795C7FC91C8FC A2485E170E5BA20003161E171C5BA20007163C17385BA2000F167817705BA2001F16F05F 5BA2003F1501A2495DA2007F1503A2495DA2160794C8FC48C8FC5E160E161E6C151C163C 5E5E5E6C6C13014B5A001F4A5A6C6C011FC9FC6D133E6C6C13F83903FC07F0C6B512C001 3F90CAFCEB07F83C406FBD44>II<277FFFFE01B500FC90B512E0B5FCA20003902680000790C7380FFC006C90C701 FCEC07F049725A04035EA26350C7FCA20407150EA2040F5D1A3C041F153862163B621673 4F5A6D14E303014B5A6C15C303034BC8FC1683DB0703140E191E030E151C61031C7F61ED 380161157003F04A5A15E002014B5A15C0DA03804AC9FC60DA0700140E60140E605C029C 5D14B8D97FF85D5C715A5C4A5DA24A92CAFC5F91C7FC705A137E5F137C5F137801705D53 406EBD5B>I<91B690383FFFFC605E020101E0010F13006E49EB07F84C6D5A19C06F6C49 5A96C7FC033F140E705B183C031F5C705B4D5A030F5C70485A4DC8FC0307130EEEFC1E5F 03035BEEFE705F6F6C5A5FA26F90C9FC83A2707EA216FF4B7F5DED079FEE1FF0150EED1C 0F03387F1578EDF007DA01E07F15C09138038003DA07007F140E021E13014A805C02707F 4A81495A4948147F01078249C8FC013F6F7E496C147F2603FFC049487EB500F8011FEBFF E0A261463E7CBD44>I<147E49B47E903907C1C38090391F80EFC090383F00FF017E137F 4914804848133F485AA248481400120F5B001F5C157E485AA215FE007F5C90C7FCA21401 485C5AA21403EDF0385AA21407EDE078020F1370127C021F13F0007E013F13E0003E137F ECF3E1261F01E313C03A0F8781E3803A03FF00FF00D800FC133E252977A72E>97 DIIII<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157EA21780EE0E004B C7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5141F5DA4143F92 C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12FF49C9FCA2EAFE 1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>III<1478EB01FCA21303A314F8EB00E01400AD137C48 B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F1400 12005B137E13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80E0A2 EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<1507ED1FC0A2153FA31680ED 0E0092C7FCADEC07C0EC3FF0EC78F8ECE07CEB01C01303EC807EEB0700A2010E13FE5D13 1E131CEB3C01A201005BA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA292C7 FCA25CA2147EA214FEA25CA213015CA2121C387F03F012FF495A5C495A4848C8FCEAF83E EA707CEA3FF0EA0FC0225083BC1C>IIIIII<903903E001F890390FF807FE90 3A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED8001 9038F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17E05C A20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA 9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FC A22D3A80A72E>I 114 DII<137C48B4141C26 038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F0 3F1303140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2 153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C 90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F038038F80EA0707 000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712 E012005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA25DA25D1578 000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<017C167048 B491387001FC3A038F8001F8EA0707000E01C015FE001E1403001CEDF000EA3C0F003817 7C1507D8781F4A133C00701380A2D8F03F130F020049133812005B017E011F14784C1370 13FE5B033F14F0000192C712E05BA2170100034A14C049137E17031880A2EF070015FE17 0E00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E0F07C1E0903A1FFC03FF C0902703F0007FC7FC372979A73C>I<903903F001F890390FFC07FE90393C1E0E0F9026 780F1C138001F0EBB83FD801E013F89039C007F07FEA0380000714E0D9000F140048151C 000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA30101143C001E 1538003F491378D87F811470018314F000FF5D9039077801C039FE0F7C033A7C0E3C0780 27783C1E1EC7FC391FF80FFC3907E003F029297CA72A>I<137C48B4143826038F8013FC EA0707000E7F001E1401001C15F8EA3C0F12381503D8781F14F000701380A2D8F03F1307 020013E012005B017E130F16C013FE5B151F1201491480A2153F000315005BA25D157EA3 15FE5D00011301EBF8030000130790387C1FF8EB3FF9EB07E1EB00035DA21407000E5CEA 3F80007F495AA24A5AD8FF0090C7FC143E007C137E00705B387801F0383803E0381E0FC0 6CB4C8FCEA03F8263B79A72C>II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmsl10 10.95 52 /Fj 52 122 df<007FB5FCA2B512FEA418067C961E>45 D<121EEA3F80EA7FC012FFA413 80EA7F00123C0A0A788919>I48 D<157015F014011407143F903803FFE0137FEB FFCFEBF80F1300141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075C A5130F5CA3131F497EB612F8A31D3D78BC2D>II<161C16 3C167CA216FCED01F815031507150FA2151DED3BF0157315E315C31401EC038391380707 E0140E141CA2143814709138E00FC0EB01C014801303EB0700130E49EB1F805B13301370 5B485A4848EB3F0090C7FC5A120E5A5A48147E1260B8FCA3C73801FE00A25DA41403A25D A314074A7E0107B512F8A3283E7BBD2D>52 D<01061403D90780131F90390FF801FE91B5 12FC16F816F016E0168049EBFE0015F890381C7FC091C8FCA3133C1338A513781370A2EC 1FE0ECFFF8903873E03E9038FF001F01FCEB0F804914C049EB07E04914F049130390C7FC 16F8A61507A21206EA3F80487EA2150F00FF15F0A24914E090C7121F00FC15C000F0143F 00701580ED7F0012786C14FE4A5A6C495A390F800FE03907E03FC06CB5C7FCC613FCEB1F E0283F7ABC2D>IIIII<17E016011603831607A2 160FA2161F83163FA2167F167716F7EEE7FCED01E316C3150316831507EE03FEED0F0115 0E151E151C153C03387FED7800157015F05D4A4880177F4A5AA24AC7FCA2020E81173F5C 021FB6FC5CA20270C7EA3FE0171F5CA2495AA2494881170F49C8FCA2130EA24982013C15 07A2137CD801FE4B7E2607FF80EC3FFEB500F00107B512FC19F85E3E417DC044>65 D67 D<013FB7FC18E018F8903B007F F0000FFE6E48EB01FF9438007FC04B6E7E180F85727E727E147F4B6E7EA2727EA302FF17 8092C9FCA54918C05CA41A8013034A5DA41A0013074A5DA261A24E5A130F4A5E180F6118 1F61011F4C5A5C4E5A4EC7FC4D5A4D5A013F4B5A4A4A5AEF3FE0EF7F80017F4A48C8FC01 FFEC1FFCB812F0178004FCC9FC423E7DBD45>I<013FB812F8A39026007FF0C7127F6E48 140F18034B14011800A31978147F4B1570A502FF147092C7FCA3190017F0495D4A1301A2 1607161F91B6FC495DA29138FC003F160F1607160301075D5CA219E0180119C0010FEC07 004A90C712031980A218071900011F5E5C181EA2183E183C013F167C4A15FC4D5A170701 7F151F01FF4AB45AB9FCA2603D3E7DBD3E>I<013FB812E0A3903A007FF000016E48EB00 3F180F4B14071803A31801147F4B15C0A514FF92C71270A395C7FC17F0495D5C16011603 1607161F49B65AA39138FC003F160F160701075D4A1303A5010F4AC8FC5C93C9FCA4131F 5CA5133F5CA3137FEBFFF0B612F8A33B3E7DBD3B>I<4BB46C1370031F01F013F0037F90 38FC01E0913A03FF807E03913A0FF8000F83DA1FE0EB07C7DA7F80EB01EF4AC812FFD903 FE16C04948157F4948153F495A4948151F495A4948168091C9120F5A485AA2485A000F18 004982121FA248485EA295C7FC485AA412FF5BA6043FB512E05BA29339001FFC00715AA2 607F127FA2171F123F6D5EA2121F7F000F163F6C7E6C6C4B5A7F6C6C15FF6C6DEB01EFD9 3FC0EB07C7D91FF0EB1F87D907FE9038FE03800101B5EAF8016D6C01E0C8FCDA07FEC9FC 3C4276BF47>I<013FB5D8F807B6FC04F015FEA29026007FF0C7380FFE006E486E5AA24B 5DA4180F147F4B5DA4181F14FF92C85BA4183F5B4A5EA491B8FC5B6102FCC8127FA318FF 13074A93C7FCA45F130F4A5DA41703131F4A5DA41707133F4A5DA3017F150F496C4A7EB6 D8E01FB512FC6115C0483E7DBD44>I<011FB512FC5BA29039003FF8006E5AA25DA5143F 5DA5147F5DA514FF92C7FCA55B5CA513035CA513075CA5130F5CA5131F5CA3133F497E00 7FB512F0A2B6FC263E7EBD21>I<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F 5DA514FF92C9FCA55B5CA513035CA513075CA21838A21870130F5CA218E0A3011F15014A 15C01703A21707EF0F80013F151F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E 7DBD39>76 D<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B93 3801DFC0A2DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DA E07F94C7FC19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C02 8003385BA218706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E 902603F80E5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D01386001 3C92C7FC017C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A133855 3E7CBD53>I<90263FFFE0023FB5FC6F16FEA29026003FF8020313C0021F030013004A6C 157C023B163C6F15381439810238167802787FDA707F157082153F82031F15F002F07FDA E00F5D8215078203031401010180DAC0015D82811780047F1303010315C04A013F5C17E0 161F17F0040F1307010715F891C7000791C7FC17FC160317FE04015B4915FF010E6E130E 188E177F18CEEF3FDE011E16FE011C6F5AA2170FA21707133C01386F5A133C017C150113 FE2607FF801400B512FC18705C483E7DBD44>I<923803FF80031F13F09238FE01FE9139 03F0003FDA0FC0EB1FC0DA3F80EB07E0027EC76C7E49486E7E49488149486E7E4948157F 495A013F17804948ED3FC049C9FCA24848EE1FE012035B000718F05B120FA2485A19F812 3F5BA2127FA219F04848163FA5F07FE0A35BF0FFC0A219805F19007F4D5A127F4D5A6000 3F160F6D5E001F4C5A4D5A6C6C4B5A95C7FC6C6C15FE00034B5A6C6C4A5A6C6C4A5A017F EC1FC06D6C495AD90FE001FEC8FC903903F807F80100B512C0DA0FFCC9FC3D4276BF47> I<013FB612FEEFFFE018F8903B007FF0000FFC6E48EB01FF7113804BEC7FC0183F19E0F0 1FF0A2147F5D19F8A402FFED3FF092C8FCA219E0A2F07FC05B4AEDFF8019004D5A4D5AEF 0FF80103ED3FE04A903801FF8091B648C7FC17F002FCCAFCA213075CA5130F5CA5131F5C A5133F5CA3137F497EB612E0A25D3D3E7DBD3E>I<013FB612F017FF18E0903B007FF000 3FF86E48EB07FCEF01FE4B6D7EF07F8019C0183F19E0147F4B15F0A502FFED7FE092C8FC A219C0F0FF80A2494B13004A5D4D5AEF0FF04D5AEF7F800103DA07FEC7FC91B612F01780 9139FC0007E0EE03F8EE00FC0107814A147F717EA284A2130F5CA484011F157F5CA41902 013F17075CA2F0F00F017F170E496C143FB600E0011F131C94380FF83C4B01071378CA38 01FFE09438003F8040407DBD43>82 D<9238FF80070207EBE00F021FEBF81E91387F00FE 02FCEB1F3ED903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E177C49 1578A57F1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC0103800100 80143F02031480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F003C16 C0A31780003E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFCEB0FC0 3AF87F803F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>I<0007B912F0A3 3C0FFE000FF8003F01F0160F01C04A13034848160190C7FC121EF000E048141F5E1238A2 12781270153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA514075DA5140F5D A3141FEC7FFC0003B7FCA33C3D76BC42>II87 D<010FB500F090B512F85B5FD9003F902680003F1300DA0FFE C7EA1FF84BEC0FE00207168096C7FC6E6C141E181C6E6C143C606E6D5B4D5ADB7FC05B4D 5A92383FE0074DC8FC92381FF01E171C6F6C5A5F923807FCF0EEFDE06FB45A5F6F90C9FC A26F7FA2707EA216FF4B7FED03DF9238079FF0ED0F1F92380E0FF8151C92383C07FC1578 4B6C7EEC01E04B6C7EEC038002076D7F4AC7FC021E6E7E5C02386E7E5C02F06E7E495A49 486E7E130749486E7E497E017F4B7E2603FFF091383FFF80007F01FC49B512FEB55CA245 3E7EBD44>I97 DIIII<177C913907F803FE91393FFE0F8F9139FC 0F9C3F903901F007F8903907E003E0D90FC013F0011F903801F80C02801400133FD97F00 7FA315035B495CA3017E495A5E150F6D5C6D495A90263F803EC7FCECC0FC903871FFF090 38E07F8091C9FC485AA47FA27F90B512F8EDFF806C15E016F86D8048B6FC3A07E0000FFE D80F801300003FC8127F003E815A00FC815AA25E163EA25E6C15FC007C4A5A6C4A5A6CEC 0FC0D80FC0013FC7FC3903F801FCC6B512F0010F90C8FC303D7FA82D>103 D<147FEB3FFFA313017FA25CA513015CA513035CA4ED07F80107EB1FFF9139F0781FC091 38F1E00F9139F38007E0ECF70002FE14F0495A5CA25CA24A130F131F4A14E0A4161F133F 4A14C0A4163F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E 3F7DBE33>I<1478EB01FE130314FFA25B14FE130314FCEB00F01400ACEB03F8EA01FF14 F0A2EA001F130FA314E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F13F0 A2B5FC183E7DBD1A>II<147FEB3FFFA313017FA25CA513015CA513035CA5 01070103B5FC02F014FEA26F13F06F1380EEFE00010F14F84A485AED03C04B5A031FC7FC 153E011F13784A5AECC3E0ECC7F0ECCFF814FF497F14F9ECE1FE14C04A7E4A7E4980017E 133F82151F82150F01FE8049130782A2000181486C49B4FCB5D8F03F13F04B13E0A2303F 7EBE30>I<143FEB1FFF5BA213017FA214FEA5130114FCA5130314F8A5130714F0A5130F 14E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F13F8A2B5FC183F7DBE1A >I<902707F007F8EB03FCD803FFD91FFF90380FFF80913CE0781FC03C0FE09126E1E00F EBF0073E001FE38007E1C003F090260FE700EBE38002EEDAF70013F802FC14FE02D85C14 F84A5CA24A5C011F020F14074A4A14F0A5013F021F140F4A4A14E0A5017F023F141F91C7 4914C0A549027F143F4992C71380A300014B147F486C496DEBFFC0B5D8F87FD9FC3F13FE A347287DA74C>I<903907F007F8D803FFEB1FFF9139E0781FC09138E1E00F3B001FE380 07E090380FE70002EE14F014FC14D814F85CA24A130F131F4A14E0A4161F133F4A14C0A4 163F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E287DA733 >II<91387F01FE903A7FFF0FFFC09139FE3E03F09238F801F8 903A03FFE000FE6D49137F4B7F92C713804A15C04A141FA218E0A20103150F5C18F0A317 1F010716E05CA3173F18C0130F4A147F1880A2EFFF004C5A011F5D16034C5A6E495AEE1F C06E495AD93FDC017EC7FC91388F01F8913883FFE0028090C8FC92C9FC137FA291CAFCA4 5BA25BA31201487EB512F8A3343A81A733>I<903907F01F80D803FFEB7FE09138E1E1F0 9138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801804AC7FCA25C131FA2 5CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA724>114 D<9138FF81C0010713E390381F807F90397C003F8049131F4848130F5B00031407A24848 1400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F13079038007FFE 1403140100381300157EA2123C153E157E007C147CA2007E147815F8007F495A4A5A486C 485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>II<01FE147F00FFEC7FFF4914FEA20007140300031401A34914FCA4 150312074914F8A41507120F4914F0A4150F121F4914E0A2151FA3153F4914C0157F15FF EC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003FE01380282977A733>III<90B539E007FFF05E18E0902707FE000313006D48EB01FC 705A5F01014A5A5F16036E5C0100140794C7FC160E805E805E1678ED8070023F13F05EED 81C015C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC 5C140E141E141C5C121C003F5B5A485B495A130300FE5B4848CAFCEA701EEA783CEA3FF0 EA0FC0343A80A630>121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fk cmtt10 10.95 94 /Fk 94 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14 00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2 02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F 90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2 29387DB730>I<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3 6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01 1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C 5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>II II<141E147F14FF5BEB03 FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F 5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7E EB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>I<127812 FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB 03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14 E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A12781847 78BE30>I<14E0497E497EA60038EC0380007EEC0FC0D8FF83EB3FE001C3137F9038F3F9 FF267FFBFB13C06CB61280000FECFE00000314F86C5C6C6C13C0011F90C7FC017F13C048 B512F04880000F14FE003FECFF80267FFBFB13C026FFF3F913E09038C3F87F0183133FD8 7E03EB0FC00038EC0380000091C7FCA66D5A6D5A23277AAE30>I<143EA2147FAF007FB7 FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF30>II<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120F EA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A2 1507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA2 4A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249 C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA22547 7BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049137F48 48EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FCA400FE EC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A2 6C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FE C7FC273A7CB830>IIIII<000FB6128048 15C05AA316800180C8FCAEEB83FF019F13C090B512F015FC8181D9FE0313809039F0007F C049133F0180EB1FE06CC7120F000E15F0C81207A216F81503A31218127EA2B4FC150716 F048140F6C15E06C141F6DEB3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C 6C14E06C6C1380D90FFCC7FC25397BB730>II<127CB712FC16FEA416FC48C7EA 0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5A A24AC7FCA25C5C13015CA213035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830 >I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF8003FF049 131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6C EB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512FE4880 2607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712014815 FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE0 6C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13 E0013F13F890B57E4880488048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0F F048481307A290C7EA03F85A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D 133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8 A2150716F0150F000F15E0486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC 90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0 A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F 000C276EA630>II<16F01503ED07F8151F157FEDFFF0 14034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0 485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F3800 7FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7F F8151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003F B612FE4881B81280A36C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA1F FF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF80 6E13C0020113F080ED3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A903801 FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE0 5B90C9FC127E1278252F7BB230>III<147F4A7EA2497FA4497F14F7A401077F14E3A301 0F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881A39038 FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C13002939 7DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA615 015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E 1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7 FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE0 7F48EB801F3903FE000F484813075B48481303A2484813015B123F491300A2127F90C8FC 167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D13 076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D1400010713FC6D13F09038 007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C813A03F8007FF0ED1FF815 0F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780A216 7F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B38 7FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FC A6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<00 3FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E157FA490B6FCA690 38FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F00103 EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F485A 491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C 6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137F ECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>I<3B3FFF80 0FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EAFE00B290B6FCA6 01F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E02D38 7FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500 213879B730>I<49B512F04914F85BA27F6D14F090C7EAFE00B3B3123C127EB4FCA24A5A 1403EB8007397FF01FF86CB55A5D6C5C00075C000149C7FC38003FF025397AB730>II<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8 FCA27E6C16802A387EB730>III<90383FFFE048B512FC000714FF4815804815C04815 E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F8481403B3A96C1407A26C15F0A3 6D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C1500000114FCD8003F13 E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F8003FED0FFCED03FE1501 6F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15 F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<90383FFFE048B512FC000714FF48 15804815C04815E0EBF80001E0133F4848EB1FF049130F90C71207A44815F8481403B3A8 147E14FE6CEBFF076C15F0EC7F87A2EC3FC7018013CF9038C01FFFD83FE014E0EBF80F90 B6FC6C15C06C15806C1500000114FCD8003F7FEB00016E7EA21680157F16C0153F16E015 1F16F0150FED07E025467BB830>I<003FB57E4814F0B612FC15FF6C816C812603F8017F 9138003FF0151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A90B65A5E93 C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EB FFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>I<90390FF803C0D97F FF13E048B512C74814F74814FF5A381FF80F383FE001497E4848137F90C7123F5A48141F A2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C8001 1F13FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07F8A2007C140312FEA5 6C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8 D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA43AFE003F800FA8007C ED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C 4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C6C14FE6D13016D5CEC 800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980 B730>III<3A3FFF01FF F84801837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81 FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2 815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F49800003141F498000 07140FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730>II<001FB612 FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153FED7F80003E1500C85A4A5A 5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C1303495A5C130F495A5C133F495A 91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A90B6FCB7FCA46C15FC2738 7CB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC1580A46C140019476DBE30>I< 127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C7EA212017FA26C7EA26D7EA2 6D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7EA26E7EA26E7EA26E7EA26E7E A26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED0FF0A2ED07F8A21503A2ED01 F0150025477BBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5007FB5FCB6FCA46C1400 19477DBE30>I<1307EB1FC0EB7FF0497E000313FE000FEBFF80003F14E0D87FFD13F039 FFF07FF8EBC01FEB800F38FE0003007CEB01F00010EB00401D0E77B730>I<007FB612F0 A2B712F8A36C15F0A225077B7D30>I<1338137CEA01FE12031207EA0FFC13F0EA1FE013 C0EA3F8013005A127EA212FE5AA5EAFFC013E013F0127FA2123FA2EA1FE0EA07C00F1D70 BE30>IIII<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A 5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140F A27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F7 6D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F 7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307 127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D 1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013 C0252A7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFF F8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>III<387FFFF8B57EA47EEA0001B3B3A8007F B612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B5 00CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201F013F8A3 01E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A730>II<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014 013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A3 00FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE0 6D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA8 30>II<49B413F8010FEBC1 FC013F13F14913FD48B6FC5A481381390FFC007F49131F4848130F491307485A49130312 7F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C133F01FC137F3907FF 01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7FCAD92B512F84A14FC A46E14F82E3C7DA730>II<90381FFC1E48B5129F000714FF5A5A5A387FF0 07EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E00001 14F86C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB 3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830 >III<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C1380 3B01F80003F000A26D130700005DA26D130F017E5CA2017F131F6D5CA2EC803F011F91C7 FCA26E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E 5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F06C496C13E0D807E0C7 EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147D A2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA2011F5C90390F800F802D 277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648C66CC7FC137FEC80FE 90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C497F8190 3803F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE90387F007E017E137F01FE 6D7E48486D7E267FFF80B5FCB500C1148014E3A214C16C0180140029277DA630>I<3B3F FFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003F000A2000014076D5C 137E150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107137EA2EB03F0157C15 FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C147EA200 0F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA6 30>I<001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E4913 00C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A495A495A495A4948133E 4890C7127F485A485A485A485A485A48B7FCB8FCA46C15FE28277DA630>II<127CA212FEB3B3B3AD127CA207476CBE30>II<017C133848B4137C48EB80FE4813C14813C348EBEFFC397FEFFF F0D8FF8713E0010713C0486C1380D87C0113003838007C1F0C78B730>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fl cmbx12 17.28 56 /Fl 56 123 df45 D<19F0F001F8F003FCA3180719F8180FA219 F0181F19E0183FA219C0187F198018FFA219005F601703A260170760170FA260171F6017 3FA260177F6017FFA295C7FC5E5F1603A25F16075F160FA25F161F5F163FA25F167F5F16 FFA294C8FC5D5E1503A25E15075E150FA25E151F5EA2153F5E157FA25E15FF93C9FC5CA2 5D14035D1407A25D140F5D141FA25D143F5D147FA25D14FF92CAFC5BA25C13035C1307A2 5C130F5C131FA25C133F5C137FA25C13FF91CBFC5AA25B12035B1207A25B120F5B121FA2 5B123F5B127FA25B12FF90CCFCA3127E123C3E9077EB51>47 DI<16F04B7E15 07151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007C7FCB3B3B3B3007FB91280A6 395E74DD51>I<913801FFF8021FEBFFC091B612F8010315FF010F16C0013F8290267FFC 0114F89027FFE0003F7F4890C7000F7F48486E7FD807F86E148048486E14C048486E14E0 48486F13F001FC17F8486C816D17FC6E80B56C16FE8380A219FFA283A36C5BA26C5B6C90 C8FCD807FC5DEA01F0CA14FEA34D13FCA219F85F19F04D13E0A294B512C019804C14004C 5B604C5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B13804B90C8FC4B5AED1FF84B5A 4B5A4B48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F8092C9FC02FE16FE495A495A 4948ED01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A5A5A5A5ABAFCA219F0A4405E78 DD51>I<92B5FC020F14F8023F14FF49B712C04916F0010FD9C01F13FC90271FFC00077F D93FE001017F49486D8049C86C7F484883486C6F7F14C0486D826E806E82487FA4805CA3 6C5E4A5E6C5B6C5B6C495E011FC85A90C95CA294B55A614C91C7FC604C5B4C5B4C5B4C5B 047F138092260FFFFEC8FC020FB512F817E094C9FC17F817FF91C7003F13E0040713F804 0113FE707F717F7113E085717FA2717F85A285831A80A31AC0EA03FCEA0FFF487F487F48 7FA2B57EA31A80A34D14005C7E4A5E5F6C495E49C8485BD81FF85F000F5ED807FE92B55A 6C6C6C4914806C01F0010791C7FC6C9026FF803F5B6D90B65A011F16F0010716C001014B C8FCD9001F14F0020149C9FC426079DD51>II<01C0EE01C0D801F8160F01FF167F02F0EC07FFDAFF80 90B5FC92B7128019006060606060606095C7FC17FC5F17E0178004FCC8FC16E09026FC3F FCC9FC91CBFCADED3FFE0203B512F0020F14FE023F6E7E91B712E001FDD9E00F7F9027FF FE00037F02F801007F02E06EB4FC02806E138091C8FC496F13C04917E07113F0EA00F090 C914F8A219FC83A219FEA419FFA3EA03F0EA0FFC487E487E487FA2B57EA319FEA35C4D13 FC6C90C8FC5B4917F8EA3FF001804B13F06D17E0001F5E6C6C17C06D4B1380D807FC92B5 12006C6C4A5B6C6C6C01075B6C01E0011F5BD97FFE90B55A6DB712C0010F93C7FC6D15FC 010115F0D9003F1480020301F0C8FC406078DD51>III<92383FFF800203B512FC02 1FECFF80027F15E049B712F849D9F0077F010F90C76C7ED91FFCEC1FFFD93FF06E7F4948 02037F494882717F484980854890C9127FA24884183FA25A80A380806E157F6E5E14FE6E 7E6F4A5A6C14F003FC495B03FF495B6C1580DCE0075B6CDBF80F90C7FC9338FE1FFE6C92 38FF7FF84D5A6D16C06D5E6D4BC8FC6D6F7E6D16E00101826D16FC023F814A8149B87E01 0783498390263FFE3F8190267FFC0F819026FFF003814849C6FC48496D804849131F4890 C7000780160148486E1580003F163F49150F007F7014C0491501717E8400FF835B8484A3 84A21A80A27F007F1900607F003F606D160F001F606D4C5A6C6D153F6C6D4B5A6C01F04B 5A6C01FC02035B6C01FF021F5B6D9027F001FFFEC7FC6D90B65A010F16F001035E010093 C8FC020F14F8DA007F90C9FC426079DD51>II65 DI<4DB5ED03C0057F02F014070407B600FE140F047FDBFF C0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807FF814A02F002 0113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291B54882490280 824991CB7E49498449498449498449865D49498490B5FC484A84A2484A84A24891CD127F A25A4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07EA380A27EA2F50FC0A26C7FA37E 6E1A1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D7F6F4E5A7F6D6D4E5A6D6D4E5A 6D6D4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90C7FC020F01FFEE07FE6E02C0ED 1FF8020102F8ED7FF06E02FF913803FFE0033F02F8013F1380030F91B648C8FC030117F8 6F6C16E004071680DC007F02F8C9FC050191CAFC626677E375>IIII<4DB5ED03C0057F02F014070407B600FE 140F047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807 FF814A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291 B54882490280824991CB7E49498449498449498449865D49498490B5FC484A84A2484A84 A24891CD127FA25A4A1A3F5AA348491A1FA44899C8FCA25CA3B5FCB07E071FB812F880A3 7EA296C70001ECC000A26C7FA37E807EA26C80A26C80A26C807F6D7F816D7F7F6D7F6D6D 5F6D14C06D6E5E6E7F6E01FC5E020F01FF5E6E02C0ED7FEF020102F8EDFFC76E02FF0207 1383033F02FC013F1301030F91B638FC007F03014D131F6F6C04E01307040704801301DC 007F02F8CAFC050191CBFC6D6677E37F>I73 D76 DI<94381FFFE00407B67E 043F15F04BB712FE030FEEFFC0033FD9FC0014F092B500C0010F13FC020349C7000113FF 4A01F86E6C7F021F496F13E04A01C0030F7F4A496F7F91B5C96C7F0103497013FF494970 804B834949717F49874949717F49874B8390B586484A717FA24891CB6C7FA2481D804A84 481DC0A348497214E0A3481DF0A34A85481DF8A5B51CFCB06C1DF8A36E96B5FCA36C1DF0 A46C6D4E14E0A36C1DC06E606C1D80A26C6E4D1400A26C6E4D5BA26C6E4D5BA26D6D4D5B 6D636D6D4D5B6F94B5FC6D636D6D4C5C6D6D4C91C7FC6D6E4B5B6D02E0031F5B023F6D4B 13F06E01FC92B55A6E01FF02035C020302C0010F91C8FC020002FC90B512FC033F90B712 F0030F17C0030394C9FCDB007F15F804071580DC001F01E0CAFC666677E379>79 DI<94381FFFE00407B67E043F15F04BB712FE030FEEFF C0033FD9FC0014F092B500C0010F13FC020349C7000113FF4A01F86E6C7F021F496F13E0 4A01C0030F7F4A496F7F91B5C96C7F0103497013FF494970804B834949717F4987494971 7F4949717FA290B548717F488892CB7E48884A84481D80A2481DC04A84A2481DE0A24A85 481DF0A4481DF84A85A4B51CFCB06C1DF8A46E61A26C1DF0A46C1DE06E96B5FCA26C1DC0 A26C6D4E1480A26C1D006E606CDC01FE5E6F90260FFFC05B6C043F6D5D6F4901F85B6D92 B56C5D6D6D48D903FE495B6D912703F8007F5D03F0496D6C5A6D6D48486D6C485B6D01FC 6F6CB55A6D01FE4902E191C7FC6D01FFDB07F35B6D02876EB55A023F01C717F06ED9E7E0 5E6E01FF6E5C02036E93C8FC02006E010F13FC033F01FF90B512F0030F91B612C003031A 0CDB007F191E040782DC001F9038E07FF094C86D143E75147E746C14FE751301F4C01F99 B5FC7415FCA4861EF8A2861EF0A27415E0A27415C07415801E00755B755B090F5B7513E0 09001380678077E379>III<001FBEFCA64849C79126E0000F148002E0180091C8171F498601F8 1A0349864986A2491B7FA2491B3F007F1DC090C9181FA4007E1C0FA600FE1DE0481C07A5 CA95C7FCB3B3B3A3021FBAFCA663617AE070>IIII<003FB86C011F B712C0A6C702FCC9003F01FCC8FC6E6D040113806E6D95C9FC6E4E5A715E6E6E15076E4E 5A714B5A6E6E5E6E6E153F6E4E5A714B5A6F6D93CAFC6F5E714A5A6F6E495A6F6E5C6F16 0F72495A6F6E495A6F5F72137F6F6E495A706D4890CBFC705DF0FF0370EC87FC70EC8FF8 F1CFF07014FF705D705D62827191CCFC61717F7180838671808386718071805F4D804D80 A24D814D81DD3FE78018C3057F81DDFF81804C13004D8104036E7F4C486D7F4C487F4D82 041F6E804C487F4C48824D6D8004FF6E804B90C8FC4B48834C6F7F0307824B48834C6F80 4B486F80033F824B48844C6F8003FF824A90C9814A4870804B717F0207844A48854A4871 804B83027F870107B57180B8033FB81280A671627CE17A>I<913803FFFE027FEBFFF001 03B612FE010F6F7E4916E090273FFE001F7FD97FE001077FD9FFF801017F486D6D7F717E 486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090C9FCA74BB6FC157F0207B7FC 147F49B61207010F14C0013FEBFE004913F048B512C04891C7FC485B4813F85A5C485B5A 5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903F1EBFF806C01FED90FE114FF 6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC130F010302F001011400D9001F 90CBFC49437CC14E>97 D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF80047F14 F00381B612FC038715FF038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02007F 03F8824B6F7E4B6F13804B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA44F13 F8A31BF0A24F13E0A24F13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C495B91 26F83FE0013F13C09127F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C7001F91 C8FC90C8000313E04F657BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E0103 9039FE001FFF4901F8010113804901E0010713C04901804913E0017F90C7FC49484A13F0 A2485B485B5A5C5A7113E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE7EA2 80A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC1FC0 6D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D020F 1580020102FCC7FCDA000F13C03E437BC148>II<92380FFFC04AB512FC020FECFF80023F15 E091B712F80103D9FE037F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F4948 6E7F48498048844A804884485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA41A00 02C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C17016D 6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D6C90 B55A021F15F8020715E0020092C8FC030713F041437CC14A>III< 903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94B512F0040714FC041F14FF4C8193267FE07F 7F922781FE001F7FDB83F86D7FDB87F07FDB8FC0814C7F039FC78015BE03BC8003FC825D A25DA25DA45DB3B2B7D8F007B71280A651647BE35A>II<903807FF80B6FCA6C6FC7F7FB3A90503B612 80A6DD003FEB8000DE0FFCC7FCF01FF04E5AF0FFC04D5B4D90C8FCEF07FC4D5AEF3FF04D 5A4D5A4C90C9FC4C5AEE0FFC4C5A4C5AEE7FC04C7E03837F03877F158F039F7F03BF7F92 B5FC838403FC804B7E03F0804B6C7F4B6C7F1580707F707F707FA270807080717FA2717F 717F717FA2717F717F83867180727F95B57EB7D8E00FECFFF0A64C647BE355>107 D<903807FF80B6FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>I<902607FF80D91F FFEEFFF8B691B500F00207EBFF80040702FC023F14E0041F02FF91B612F84C6F48819326 7FE07F6D4801037F922781FE001F9027E00FF0007FC6DA83F86D9026F01FC06D7F6DD987 F06D4A487F6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFDF003BC6E4A8003 FC04FF834B5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612FCA67E417BC087 >I<902607FF80EB1FFFB691B512F0040714FC041F14FF4C8193267FE07F7F922781FE00 1F7FC6DA83F86D7F6DD987F07F6DD98FC0814C7F039FC78015BE03BC8003FC825DA25DA2 5DA45DB3B2B7D8F007B71280A651417BC05A>I<923807FFE092B6FC020715E0021F15F8 027F15FE494848C66C6C7E010701F0010F13E04901C001037F49496D7F4990C87F49486F 7E49486F7E48496F13804819C04A814819E048496F13F0A24819F8A348496F13FCA34819 FEA4B518FFAD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C 6D4B13806C6D4B13006D6C4B5A6D6D495B6D6D495B010701F0010F13E06D01FE017F5B01 0090B7C7FC023F15FC020715E0020092C8FC030713E048437CC151>I<902607FF80EBFF F8B6010FEBFF80047F14F00381B612FC038715FF038F010114C09227BFF0003F7FC6DAFF C0010F7F6D91C76C7F6D496E7F03F86E7F4B6E7F4B17804B6F13C0A27313E0A27313F0A2 1BF885A21BFCA3851BFEAE4F13FCA41BF861A21BF0611BE0611BC06F92B512801B006F5C 6F4A5B6F4A5B03FF4A5B70495B04E0017F13C09226CFFC03B55A03C7B648C7FC03C115F8 03C015E0041F91C8FC040313E093CBFCB3A3B712F0A64F5D7BC05A>I114 D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48 B8FC48EBE0014890C7121FD80FFC1407D81FF0801600485A007F167F49153FA212FF171F A27F7F7F6D92C7FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C 826C82013F1680010F16C01303D9007F15E0020315F0EC001F1500041F13F81607007C15 0100FC81177F6C163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D 0203130002C0EB0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F 13E035437BC140>II<902607FFC0ED3FFEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60 183E6D6D147E4E7F6D6D4948806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F 5C020314F8DA003F018002F0C7FC51427BC05A>III< 007FB600C0017FB512F8A6D8001F01F8C70007EBF0006D040190C7FC6D6D5D6D6D4A5A6D 6D4A5A70495A6D4C5A6E7F6E6D495A6E6D495A7049C8FC6E4A5A6E6D485A6E6D485A6E13 FFEF8FF06EEC9FE06FEBFFC06F5C6F91C9FC5F6F5B816F7F6F7F8481707F8493B57E4B80 5D4B80DB0FF37FDB1FE17F04C080153F4B486C7F4B486C7F4A486D7F4A486D7F4A5A4B6D 7F020F6E7F4A486D7F4A486D804A5A4AC86C7F49486F7F4A6F7F0107707FEB3FFFB600F0 49B7FCA650407EBF55>II<0007B912E019F0A402FCC714E04801C04914 C091C7FC494A1480494A1400494A5B5B4C5B494A5B4C5B5B93B55A4B5C5D001F5F494991 C7FC4B5BA24B5B4B5BC8485BA292B55A4A5C4A5CA24A91C8FC4A5B4A5BA24A5B4A49EB03 F091B55AA2495C495C4991C7FC1807494915E0495B5B5D4949140F90B55AA2484A141F48 5C4891C8123F187F484915FF48495C48491407051F13C0484949B5FCBAFCA47E3C407CBF 48>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fm cmsy10 10.95 2 /Fm 2 16 df13 D15 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fn cmbx12 14.4 65 /Fn 65 123 df12 D44 DIII<913803FFC0023F13 FC91B6FC010315C0010F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D 138048496D13C0A24817E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17 FFB3A5007F17FEA6003F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C0 6C17806E5B6C6D4913006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9 003F01FCC7FC020313C0384F7BCD43>I<157815FC14031407141F14FF130F0007B5FCB6 FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>II<91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF8001 13FC4848C76C7ED803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C 5B6C90C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512 F816E016FCEEFF80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A2 18F8A27013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17 F0495C6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612 F06D5D011F1580010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607 160FA2161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03 E01407EC0FC01580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC 485A5B485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A 4F7CCE43>III<121F7F7FEBFF8091B81280A45A19 00606060A2606060485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A 4C5A94C8FC16FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D14 07A2140FA25D141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I< 913807FFC0027F13FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0F FE49C76C7E48488048486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02 E015C014F802FE4913806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBF F06CEDFFE017806C4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFF E748018115C048D9007F14E04848011F14F048487F48481303030014F8484880161F4848 020713FC1601824848157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3F E0001F17C06D157F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612 F06D5D010F1580010102FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F80103 14FE010F6E7E4901037F90267FF8007F4948EB3FF048496D7E484980486F7E4849808248 17805A91C714C05A7013E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D 6C7F6C6D137B6C6D13F390387FF803011FB512E36D14C30103028313F89039007FFE03EC 00401500A218F05EA3D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7 FC6C484A5A494A5A49495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14 F06D14C0010F49C8FC010013F0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA3 4C7FA34C7FA24C7FA34C8083047F80167E8304FE804C7E03018116F8830303814C7E0307 8116E083030F814C7E031F81168083033F8293C77E4B82157E8403FE824B800201835D84 0203834B800207835D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82 010185A24A820103854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0 A55B547BD366>65 DI<9326 01FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003 EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F88249 49824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181F A3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C 1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC 4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0 020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>IIII<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8 EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC4948 48C9FC4901F8824949824949824949824949824990CA7E494883A2484983485B1B7F485B 481A3FA24849181FA3485B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7 003FEBC000A36C7FA36C7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93 B5FC6D13FF6D6C6D5C6E01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EA C07F033FEE001F030703FC1307DB007F02E01301040149CAFC5B5479D26A>III<027FB71280A5 91C76C90C7FCB3B3B3EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B7E49495BD83FF8 495BD81FE05DD80FFC011F5B2707FF807F90C8FC000190B512FC6C6C14F0011F14C00101 01F8C9FC39537DD145>IIIII<93 380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90C700 0313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F4985 4948707F4948707FA24849717E48864A83481B804A83481BC0A2481BE04A83A2481BF0A3 48497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D4D13 80A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B 90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8FC02 0016FC031F15E0030392C9FCDB001F13E0565479D265>II<93380FFFC00303B6FC031F15E092 B712FC0203D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F902601FF F0ED3FFE49496F7E49496F7F49496F7F4990C96C7F4948707F4948707F01FF854A177F48 864849717EA24849711380A2481BC04A83481BE0A24A83481BF0A3481BF8A291CB7EA3B5 1AFCAF6C1BF8A26E5FA36C1BF0A36C6D4D13E0A36C1BC06E5F6C1B806E5F6CDB01FE1600 6C6D902607FF80495A4C13E06C6D013F6D495A017F91267F03F85C6D6C90277C00FC015B 6D6C49D97E035B6D01806E485B6D6D48D91F8F5B6D01E0039F90C7FC6D01F06EB45A6DD9 FCF85DDA3FFF6E13F0020F6D4913C0020301FF90B5C8FC020091B512FC031F180C030318 1EDB001FEBE3FE93C7EA01FF74133E74137E7413FEF2F8077290B5FC1CFCA285A21CF8A2 851CF07314E0A27314C0731480731400735B9638007FF8F21FE0576A79D265>II<91260FFF80130791B500F85B0107 02FF5B011FEDC03F49EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E 48488149150F001F824981123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14 C06C13F014FF15F86CECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D 82010F821303010082021F16801400030F15C0ED007F040714E01600173F050F13F08383 A200788200F882A3187FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A 01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14 FC48010F14F048D9007F90C8FC3C5479D24B>I<003FBC1280A59126C0003F9038C0007F 49C71607D87FF8060113C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500 FC1BE0481A03A6C994C7FCB3B3AC91B912F0A553517BD05E>II< B700FE031FB512FEA5D8001F01F0CA383FFE00F307F06D626F170F6D62811B1F6D6D601B 3F6D97C7FC6F5F6D197E821BFE6E6D5E1A016E6D5E1A036E60701507A26E6D5E1A0F6E6D 5E1A1F6E6070153FA26E6D93C8FC626E6E147E1AFE6F5E711301A26F6D5C19036F6D5C19 076F5E71130FA26F6D5C191F6F6D5C193F6F93C9FC715BA26FEC807E19FE706D5A18C170 5C18E3705C18F318F770EBFFE0A2705CA2705CA37091CAFCA2705BA2715AA3715AA2715A A2715A715A5F537DD166>II<003FB7D88003B7FCA5D8000749C8000701F8C7FC6D6D9238007F806D6E93C8FC70 15FE6D17016E6D5D704A5A6E16076E6D4A5A6E6D5D4F5A6E6D143F6E6D4A5A7191C9FC6E 16FE6EECC00171485A6F5D6F6D485A6FEBF80F71485A6F5D6F6D485AEFFF7F6F4ACAFC6F 5C6F5CA2705B705B8482707F707FA2707F7080855E4C80855E4C80DC3FCF7F058F7FEE7F 074C6C7FDB01FE814C7E4B486C8003076E7F4B48814C7F4B486D7F033F824C7F4BC76C7F 4B6E7F4A5A4B6E804A486E800207844A48814B6F7F4A4883023F824A486F7F92C96C7F02 FE840101830103718090263FFFC084B76C0103B712F8A55D527CD166>II97 DI<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001 FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48 92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC 3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC 020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91 B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980 485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C 6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9 003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901 817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191 C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01 F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE 903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F497E 000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3 A6B612E0A51B547BD325>I 107 DIII<913801FFE0021F13FE91B612C0010315F0010F9038 807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8 6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2 6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80 7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F 13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F 92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61 6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14 80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<912601FFE0EB0780021F 01F8130F91B500FE131F0103ECFF80010F9039F03FC03F499039800FE07F903A7FFE0003 F04948903801F8FF4849EB00FD4849147F4A805A4849805A4A805AA291C87E5AA35B12FF AC6C7EA37EA2806C5EA26C6D5CA26C6D5C6C6D5C6C93B5FC6C6D5B6D6C5B6DB4EB0FEF01 0F9038C07FCF6D90B5120F010114FED9003F13F80203138091C8FCB1040FB61280A5414D 7CB547>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC00 03D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA5 5CB3AAB612FCA52F367CB537>I<903903FFF00F013FEBFE1F90B7FC120348EB003FD80F F81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C 13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC00 3F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F80 01F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C 387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90B6 FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0 FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>II< B600F00107B5FCA5000101F8C8EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC 6D5E6F13016D5E8117036D5E6F13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E17 7E023F147C6F13FC6E5C16816E5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F 5AA36F5AA26F5AA26F5AA26F5A6F5A40367DB447>II<007FB500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D 5C6D6D495A6D4B5A6F495A6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB 8FE06EEBCFC06EEBFF806E91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01 FD7F03F87F4A486C7E4A486C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F49 5A49486D7F01076F7E49486E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>II<001FB8FC1880A3912680007F130001FCC7B5FC01F0495B495D 49495B495B4B5B48C75C5D4B5B5F003E4A90C7FC92B5FC4A5B5E4A5B5CC7485B5E4A5B5C 4A5B93C8FC91B5FC495B5D4949EB0F805B495B5D495B49151F4949140092C7FC495A485E 485B5C485E485B4A5C48495B4815074849495A91C712FFB8FCA37E31357CB43C>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fo cmr10 10.95 89 /Fo 89 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 DIII<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC 121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33 D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013 00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E 0018130C0038131C003013181C1C7DBE2D>I<14E0A4EB07FC90383FFF8090B512E03901 F8E3F03903E0E0FCD807C0133CD80F807FD81F007F003E80003C1580007C140316C00078 141F00F8143F157FA47EED3F806CEC0E0092C7FC127F138013C0EA3FF013FEEA1FFF6C13 FC6C13FF6C14C06C806C6C13F8011F7F130301007FECE7FF14E102E01380157F153FED1F C0A2003E140F127FD8FF801307A5130000FC158000F0140F1270007815005D6C141E153E 6C5C6C5C3907C0E1F03903F8EFE0C6B51280D93FFEC7FCEB0FF8EB00E0A422497BC32D> 36 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E4848 6C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C0200 EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B4C5A 007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A01E0 E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C07003 1F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C4A5A 020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C494814 7E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A49923801E0 E0496FB45A0160043FC7FC41497BC34C>II<121EEA7F8012FF 13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A1218123812 300B1C79BE19>I<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12 015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA612 3E123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303 EB01C0EB00E014701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F12 007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A6 14C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC12 1E121C5A5A5A5A145A7BC323>II<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413 E013C0A312011380120313005A120E5A1218123812300B1C798919>44 DI<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>IIIIII<150E151E153EA2157EA215FE1401A21403EC077E140614 0E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90 C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<0006 1403D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE9038 0FFF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E015 0FA316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC 7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D> II<1238123C123F90B612FCA316F8 5A16F016E00078C712010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A 5D14034A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131F A6133FAA6D5A0107C8FC26407BBD2D>III<121EEA7F80A2 EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619 >I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F12 1E1200A412011380A3120313005A1206120E120C121C5A1230A20A3979A619>I<007FB9 12E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D63 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381 FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA249 819138800001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA20178 82170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 DII IIIIII<011FB512FCA3D9000713006E5A1401B3B3A6123FEA7F 80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7FC 3800FFF8EB3FC026407CBD2F>IIIIIIIIII<003FB91280A3903AF0007FE001018090393FC0003F48 C7ED1FC0007E1707127C00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107 B612FEA33B3D7DBC42>IIII<007FB5D8C003B512E0A3C649C7EBFC 00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D6C143C5F6D6C14706D6D13F0 4C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF81E913807FC1C163C6E6C5A91 3801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED71FF15F103E07F913801C07F 0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D7E14784A6D7E4A6D7F130149 486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E00076DEC7FFFB500FC0103B512FE A33F3E7EBD44>II<003FB712F8A3 91C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EEDFF80A2003C4A1300007C4A5A12 784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FCA24A5A4A5AA24A5AA24A5A4A5A A24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA2495A495A173C495AA24890C8FC 485A1778485A484815F8A24848140116034848140F4848143FED01FFB8FCA32E3E7BBD38 >II<486C13C00003130101001380 481303000EEB070048130E0018130C0038131C003013180070133800601330A300E01370 481360A400CFEB678039FFC07FE001E013F0A3007F133FA2003F131F01C013E0390F0007 801C1C73BE2D>II96 DII<49B4FC010F13E090383F00F8017C131E4848131F4848137F0007EC FF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F00 1F140316806C6C13076C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D9 01FEC7FC222A7DA828>IIII<167C903903F801FF903A1FFF078F 8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147F A8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F800 06CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7 EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803 F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>III<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313017F147FB3B3A5 123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07C0380FFF803801FC0018 5185BD1C>III<2701F801FE14 FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007903BE001F87000 FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3A6486C 496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FFC09138 1E07E091387803F000079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25B B3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F81F890387E007E 01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C8 12FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0F C06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901 FC03FC00FF90381FFF8091387C0FE09039FDE003F03A07FFC001FC6C496C7E6C90C7127F 49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580EE7F00 7F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD487EB5 12F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090397F00387C01FC131CD803 F8130E4848EB0FFC150748481303121F485A1501485AA448C7FCAA6C7EA36C7EA2001F14 036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F190380FFFC1903801FE0190 C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787CECE1FE3807F9 C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA31F287EA724> I<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C0078130112F814 00A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8003F13E00103 13F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06CEB03C090388007 8039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA213FCA2120112 031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB7F03013F1380 90381F8700EB07FEEB01F81B397EB723>IIIIII<001FB61280A2EBE0000180140049485A001E495A121C4A5A003C495A141F00385C 4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC00380A2EB7F80EBFF005A5B 484813071207491400485A48485BA248485B4848137F00FF495A90B6FCA221277EA628> III E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fp cmbx12 20.736 16 /Fp 16 122 df70 D<922603FFF8150E037FD9FFC0143F0203B600 FC5C021F03FF5C027FEEC00149B8EAF00349EFFC07010FDA000F13FE4901F09039007FFF 8F4901C0020F13DF4990C8000390B5FC494815004801F8163F48844A8248498248844A82 48844A834885A291CB7E5A86A286B5FC8680A28680A280A26E8380806E187E6E95C7FC6C 8015E015FCEDFFC06C15FCEEFFE06C16FF18F06CEFFF8019F06C18FE737E6C856C19F06C 19FC6D846D846D856D856D850101856D85023F846E841407020084031F18801500040F17 C0EE007F050716E0EF003F1803DE007F14F0191F8585070114F8A28586007E85B4FC86A2 86A37F86A36D1AF0A37F1CE06D60A26D1AC06D607F6D1A806E5F6E4D13006E606E17FF02 FC4C5B02FF4C5B03E04B5B03FC031F5B01FBD9FF80027F5B01F102FE0107B55AD9E07F90 B8C7FC6E17FCD9C00F5FD9800317E090C76C168048020F4BC8FC48020015F00070030349 C9FC557A75F76C>83 D<001FC012F8A7481FFC03F0C76C91C7120F92C8EF007F02F81B1F 02E01B0702801B0191C984491D7F491D3F491D1FA2491D0FA2491D07007F1FFEA2491D03 A4491D01A700FF1FFF90CA85A6CB1A00B3B3B3AD4ABC12C0A8787479F387>I<92383FFF F80207B612E0027F15FC49B87E010717E0011F83499026F0007F13FC4948C7000F7F90B5 02036D7E486E6D806F6D80727F486E6E7F8486727FA28684A26C5C72806C5C6D90C8FC6D 5AEB0FF8EB03E090CAFCA70507B6FC041FB7FC0303B8FC157F0203B9FC021FECFE0391B6 12800103ECF800010F14C04991C7FC017F13FC90B512F04814C0485C4891C8FC485B5A48 5B5C5A5CA2B5FC5CA360A36E5DA26C5F6E5D187E6C6D846E4A48806C6D4A4814FC6C6ED9 0FF0ECFFFC6C02E090263FE07F14FE00019139FC03FFC06C91B6487E013F4B487E010F4B 1307010303F01301D9003F0280D9003F13FC020101F8CBFC57507ACE5E>97 D<93383FFFF00307B612C0033F15F84AB712FE0207707E021F17E0027F8391B526FC001F 7F010302C001037F4991C7487F49495C495B4901F04A7F5B90B55A485CA2485C4891C8FC A248715B5C48715B725B4A6F5B489438007FC0071FC7FC96C8FC5AA25CA3B5FCAF7E80A4 7E80A27E806CF11F80F23FC06C6E167FA26C6EEEFF80816C606C6E17006D6D4B5A6D6D15 076D6D4B5A6D6D6C4A5A6D02E0EC7FF06D02F849485A01009126FF801F5B6E91B6C7FC02 1F5E020716F8020116E06E6C1580030702FCC8FCDB003F13804A507ACE56>99 D<93387FFF80030FB512FC037FECFF804AB712E0020716F8021F16FE027FD9F8077F49B5 D8C000804991C7003F13E04901FC020F7F49496E7F49498049496E7F49496E7F90B55A48 727E92C914804884485B1BC048841BE0485BA27313F05AA25C5AA21BF885A2B5FCA391BA FCA41BF002F8CCFCA67EA3807EA47E806CF103F0F207F86C7F1A0F6C6E17F06C191F6F17 E06C6E163F6D6DEE7FC06D6D16FF6D6D4B13806D6D4B13006D6D6CEC0FFE6D02E0EC3FFC 6D02F8ECFFF86D9126FFC00F5B023F91B65A020F178002034CC7FC020016F8031F15E003 0392C8FCDB000F13E04D507BCE58>101 D<903801FFFCB6FCA8C67E131F7FB3AD95380F FFE095B512FE05036E7E050F15E0053F15F84D81932701FFF01F7F4CD900077FDC07FC6D 80DC0FF06D80DC1FC07F4C48824CC8FC047E6F7F5EEDFDF85E03FF707F5EA25EA25EA293 C9FCA45DB3B3A6B8D8E003B81280A8617879F76C>104 DI<903801FFFCB6 FCA8C67E131F7FB3B3B3B3B3ABB812C0A82A7879F735>108 D<902601FFF891260FFFE0 93383FFF80B692B500FE0303B512F805036E6C020F14FE050F03E0023F6E7E053F03F891 B712E04D6F4982932701FFF01F6D0107D9C07F7F4CD900076D90270FFC001F7FDC07FC6D 9126801FF06D7FC66CDA0FF06D9126C03FC06D7F011FDA1FC06D4BC77E6D4A48DCE0FE83 4CC8ECE1FC047E6FD9F1F86E804CEFF3F0DBF9F8EFF7E04C6003FB7001FF6F804C6015FF 4C95C9FCA24C5FA293C95CA44B60B3B3A6B8D8E003B8D8800FB712FEA8974E79CDA2>I< 902601FFF891380FFFE0B692B512FE05036E7E050F15E0053F15F84D81932701FFF01F7F 4CD900077FDC07FC6D80C66CDA0FF06D80011FDA1FC07F6D4A48824CC8FC047E6F7F5EED F9F85E03FB707F5E15FF5EA25EA293C9FCA45DB3B3A6B8D8E003B81280A8614E79CD6C> I<902601FFFCEC7FFEB6020FB512F0057F14FE4CB712C0040716F0041F82047F16FE93B5 C66C7F92B500F0010F14C0C66C0380010380011F4AC76C806D4A6E8004F06F7F4C6F7F4C 6F7F4C8193C915804B7014C0861DE0A27414F0A27414F8A47513FCA57513FEAF5113FCA5 98B512F8A31DF0621DE0621DC0621D806F5E701800704B5B505B704B5B7092B55A04FC4A 5C704A5C706C010F5C05E0013F49C7FC9227FE7FFC01B55A70B712F0040F16C0040393C8 FC040015F8053F14C0050301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C>112 D<912603FFFCEB0780027F9039FFE00FC00103B6EAF83F010FEDFEFF013F92B5FC49EB00 0F2601FFF01300480180143F4890C8120F4848814848814981123F83485A187FA212FF6D 163FA37F7F6DEE1F8002C092C7FC14F014FEECFFF06CECFF8016FEEEFFE06C16FC6C16FF 18C06C836C17F86C836C836C83013F17806D17C0010717E0010117F0EB003F020716F8EC 001F030015FC1607EE007F051F13FE1707007E82B482836D167FA2183F7F181FA27F19FC 7FA26D163F6D17F86D167F19F06D16FF6E4A13E002E04A13C06E4A138002FE023F130091 3AFFC003FFFE01E790B65A01C316F0018016C026FE003F92C7FC48010714F80070D9007F 90C8FC3F507ACE4C>115 D<15FFA75CA55CA45CA25CA25CA25CA25C91B5FCA25B5B5B13 1F5B90B9FC120FBAFCA6D8000791C9FCB3B3A3F01FE0AE183F7014C07F187F7014806D16 FF826D4B13006E6D485AEEFE0F6E90B55A020F5D6E5D020115C06E6C5C031F49C7FC0301 13F03B6E7CEC4B>I 118 D121 D E %EndDVIPSBitmapFont end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: A4 %%EndSetup %%Page: 1 1 1 0 bop 150 1318 a Fp(The)64 b(F)-16 b(estiv)-11 b(al)68 b(Sp)5 b(eec)-5 b(h)64 b(Syn)-5 b(thesis)65 b(System)p 150 1418 3600 34 v 2843 1515 a Fo(System)30 b(do)s(cumen)m(tation)2271 1623 y(Edition)f(1.4,)i(for)g(F)-8 b(estiv)j(al)30 b(V)-8 b(ersion)30 b(1.4.2)3160 1731 y(25th)h(July)e(2001)150 5068 y Fn(b)l(y)45 b(Alan)g(W)f(Blac)l(k,)i(P)l(aul)f(T)-11 b(a)l(ylor)46 b(and)e(Ric)l(hard)i(Caley)-11 b(.)p 150 5141 3600 17 v eop %%Page: 2 2 2 1 bop 150 4371 a Fo(Cop)m(yrigh)m(t)602 4368 y(c)577 4371 y Fm(\015)30 b Fo(1996-2001)k(Univ)m(ersit)m(y)c(of)h(Edin)m (burgh,)c(all)j(righ)m(ts)f(reserv)m(ed.)150 4505 y(P)m(ermission)h(is) i(gran)m(ted)h(to)f(mak)m(e)i(and)d(distribute)f(v)m(erbatim)i(copies)g (of)g(this)f(man)m(ual)h(pro)m(vided)f(the)150 4615 y(cop)m(yrigh)m(t)g (notice)f(and)g(this)f(p)s(ermission)f(notice)i(are)h(preserv)m(ed)f (on)h(all)e(copies.)150 4749 y(P)m(ermission)22 b(is)g(gran)m(ted)j(to) f(cop)m(y)g(and)f(distribute)e(mo)s(di\014ed)h(v)m(ersions)h(of)g(this) g(man)m(ual)g(under)f(the)h(con-)150 4859 y(ditions)28 b(for)i(v)m(erbatim)f(cop)m(ying,)i(pro)m(vided)d(that)j(the)f(en)m (tire)g(resulting)e(deriv)m(ed)h(w)m(ork)h(is)f(distributed)150 4969 y(under)g(the)h(terms)h(of)f(a)h(p)s(ermission)c(notice)k(iden)m (tical)e(to)i(this)e(one.)150 5103 y(P)m(ermission)i(is)i(gran)m(ted)g (to)h(cop)m(y)g(and)f(distribute)d(translations)i(of)i(this)e(man)m (ual)g(in)m(to)h(another)g(lan-)150 5213 y(guage,)d(under)e(the)g(ab)s (o)m(v)m(e)i(conditions)d(for)i(mo)s(di\014ed)d(v)m(ersions,)j(except)g (that)h(this)d(p)s(ermission)f(notice)150 5322 y(ma)m(y)31 b(b)s(e)f(stated)h(in)e(a)i(translation)e(appro)m(v)m(ed)i(b)m(y)f(the) h(Univ)m(ersit)m(y)e(of)i(Edin)m(burgh)p eop %%Page: 1 3 1 2 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Abstract)2744 b(1)150 299 y Fl(1)80 b(Abstract)275 533 y Fo(This)24 b(do)s(cumen)m(t)i(pro)m(vides)f(a)h(user)f(man)m(ual)h(for)g(the)g(F) -8 b(estiv)j(al)26 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System,)h(v)m (ersion)150 643 y(1.4.2.)275 777 y(F)-8 b(estiv)j(al)34 b(o\013ers)g(a)h(general)f(framew)m(ork)g(for)g(building)c(sp)s(eec)m (h)k(syn)m(thesis)f(systems)h(as)h(w)m(ell)e(as)h(in-)150 887 y(cluding)j(examples)h(of)i(v)-5 b(arious)38 b(mo)s(dules.)64 b(As)39 b(a)h(whole)e(it)g(o\013ers)i(full)c(text)k(to)g(sp)s(eec)m(h)f (through)g(a)150 996 y(n)m(um)m(b)s(er)c(APIs:)52 b(from)36 b(shell)f(lev)m(el,)i(though)f(a)h(Sc)m(heme)g(command)f(in)m (terpreter,)h(as)g(a)f(C)p Fk(++)g Fo(library)-8 b(,)150 1106 y(and)33 b(an)g(Emacs)g(in)m(terface.)50 b(F)-8 b(estiv)j(al)33 b(is)f(m)m(ulti-lingual,)f(w)m(e)i(ha)m(v)m(e)i(dev)m (eleop)s(ed)e(v)m(oices)g(in)f(man)m(y)h(lan-)150 1215 y(guages)40 b(including)c(English)g(\(UK)j(and)g(US\),)g(Spanish)d(and) j(W)-8 b(elsh,)41 b(though)e(English)d(is)i(the)i(most)150 1325 y(adv)-5 b(anced.)275 1460 y(The)23 b(system)i(is)e(written)g(in)g (C)p Fk(++)g Fo(and)h(uses)g(the)g(Edin)m(burgh)d(Sp)s(eec)m(h)j(T)-8 b(o)s(ols)24 b(for)g(lo)m(w)g(lev)m(el)g(arc)m(hitec-)150 1569 y(ture)33 b(and)g(has)g(a)h(Sc)m(heme)f(\(SIOD\))h(based)f (command)g(in)m(terpreter)g(for)g(con)m(trol.)50 b(Do)s(cumen)m(tation) 34 b(is)150 1679 y(giv)m(en)26 b(in)f(the)h(FSF)g(texinfo)g(format)g (whic)m(h)f(can)h(generate)i(a)e(prin)m(ted)f(man)m(ual,)h(info)f (\014les)g(and)h(HTML.)275 1813 y(The)c(latest)i(details)e(and)h(a)g (full)e(soft)m(w)m(are)k(distribution)19 b(of)24 b(the)f(F)-8 b(estiv)j(al)23 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 1923 y(are)31 b(a)m(v)-5 b(ailable)30 b(through)f(its)h(home)g(page)i (whic)m(h)d(ma)m(y)i(b)s(e)e(found)g(at)390 2051 y Fk (http://www.cstr.ed.ac.uk)o(/pro)o(ject)o(s/f)o(esti)o(val.)o(htm)o(l)p eop %%Page: 2 4 2 3 bop 150 -116 a Fo(2)2234 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g (Syn)m(thesis)f(System)p eop %%Page: 3 5 3 4 bop 150 -116 a Fo(Chapter)30 b(2:)41 b(Cop)m(ying)2761 b(3)150 299 y Fl(2)80 b(Cop)l(ying)275 537 y Fo(As)33 b(w)m(e)g(feeel)g(the)h(core)g(system)f(has)g(reac)m(hed)g(an)g (acceptable)h(lev)m(el)f(of)h(maturit)m(y)e(from)h(1.4.0)i(the)150 647 y(basic)25 b(system)h(is)f(released)h(under)e(a)j(free)f(lience,)g (without)f(the)h(commercial)g(restrictions)e(w)m(e)j(imp)s(osed)150 757 y(on)35 b(early)g(v)m(ersions.)54 b(The)35 b(basic)f(system)h(has)g (b)s(een)g(placed)f(under)g(an)h(X11)h(t)m(yp)s(e)f(licence)g(whic)m(h) f(as)150 866 y(free)42 b(licences)g(go)h(is)e(prett)m(y)i(free.)76 b(No)42 b(GPL)g(co)s(de)h(is)e(included)e(in)i(festiv)-5 b(al)42 b(or)g(the)g(sp)s(eec)m(h)g(to)s(ols)150 976 y(themselv)m(es)32 b(\(though)g(some)h(auxiliary)c(\014les)i(are)i (GPL'd)e(e.g.)47 b(the)32 b(Emacs)g(mo)s(de)g(for)g(F)-8 b(estiv)j(al\).)46 b(W)-8 b(e)150 1085 y(ha)m(v)m(e)26 b(delib)s(erately)d(c)m(ho)s(osen)j(a)f(licence)g(that)g(should)e(b)s (e)i(compatible)f(with)g(our)g(commercial)h(partners)150 1195 y(and)30 b(our)g(free)g(soft)m(w)m(are)i(users.)275 1331 y(Ho)m(w)m(ev)m(er)g(although)d(the)i(co)s(de)f(is)g(free,)g(w)m (e)h(still)d(o\013er)j(no)f(w)m(arran)m(ties)g(and)g(no)g(main)m (tenance.)41 b(W)-8 b(e)150 1440 y(will)23 b(con)m(tin)m(ue)k(to)g (endea)m(v)m(or)g(to)g(\014x)e(bugs)g(and)h(answ)m(er)g(queries)f(when) g(can,)i(but)f(are)g(not)h(in)d(a)j(p)s(osition)150 1550 y(to)32 b(guaran)m(tee)h(it.)43 b(W)-8 b(e)32 b(will)d(consider)h(main) m(tenance)i(con)m(tracts)h(and)e(consultancy)g(if)f(desired,)g(please) 150 1660 y(con)m(tacts)j(us)c(for)h(details.)275 1796 y(Also)i(note)i(that)g(not)g(all)e(the)h(v)m(oices)h(and)f(lexicons)f (w)m(e)i(distribute)d(with)h(festiv)-5 b(al)32 b(are)i(free.)49 b(P)m(ar-)150 1905 y(ticularly)35 b(the)j(British)e(English)f(lexicon)i (deriv)m(ed)f(from)h(Oxford)g(Adv)-5 b(anced)37 b(Learners')g (Dictionary)150 2015 y(is)30 b(free)i(only)e(for)h(non-commercial)g (use)g(\(w)m(e)h(will)d(release)i(an)h(alternativ)m(e)f(so)s(on\).)44 b(Also)31 b(the)g(Spanish)150 2124 y(diphone)d(v)m(oice)k(w)m(e)f (relase)f(is)f(only)h(free)g(for)g(non-commercial)g(use.)275 2260 y(If)d(y)m(ou)i(are)f(using)f(F)-8 b(estiv)j(al)28 b(or)g(the)g(sp)s(eec)m(h)h(to)s(ols)e(in)g(commercial)h(en)m(vironmen) m(t,)g(ev)m(en)h(though)f(no)150 2370 y(licence)33 b(is)f(required,)h (w)m(e)h(w)m(ould)e(b)s(e)h(grateful)g(if)f(y)m(ou)i(let)g(us)e(kno)m (w)i(as)f(it)g(helps)f(justify)g(ourselv)m(es)h(to)150 2479 y(our)d(v)-5 b(arious)29 b(sp)s(onsors.)275 2615 y(The)g(curren)m(t)i(cop)m(yrigh)m(t)f(on)h(the)f(core)h(system)g(is) 867 2746 y Fk(The)47 b(Festival)f(Speech)g(Synthesis)f(System:)h (version)g(1.4.2)1154 2849 y(Centre)g(for)h(Speech)f(Technology)f (Research)1392 2953 y(University)g(of)i(Edinburgh,)e(UK)1440 3057 y(Copyright)g(\(c\))i(1996-2001)1535 3161 y(All)g(Rights)f (Reserved.)485 3368 y(Permission)f(is)j(hereby)e(granted,)f(free)i(of)g (charge,)f(to)h(use)g(and)g(distribute)485 3472 y(this)g(software)f (and)h(its)f(documentation)f(without)g(restriction,)g(including)485 3576 y(without)h(limitation)f(the)i(rights)f(to)h(use,)g(copy,)f (modify,)g(merge,)g(publish,)485 3680 y(distribute,)f(sublicense,)g (and/or)h(sell)h(copies)f(of)h(this)g(work,)f(and)h(to)485 3783 y(permit)g(persons)e(to)j(whom)e(this)h(work)f(is)i(furnished)d (to)i(do)g(so,)g(subject)f(to)485 3887 y(the)h(following)f(conditions:) 533 3991 y(1.)h(The)g(code)g(must)g(retain)f(the)h(above)f(copyright)f (notice,)h(this)h(list)f(of)676 4095 y(conditions)f(and)i(the)g (following)e(disclaimer.)533 4198 y(2.)i(Any)g(modifications)d(must)j (be)g(clearly)f(marked)g(as)h(such.)533 4302 y(3.)g(Original)f (authors')f(names)i(are)g(not)g(deleted.)533 4406 y(4.)g(The)g (authors')f(names)g(are)h(not)g(used)g(to)g(endorse)f(or)h(promote)f (products)676 4510 y(derived)g(from)h(this)f(software)g(without)g (specific)f(prior)i(written)676 4614 y(permission.)485 4821 y(THE)g(UNIVERSITY)e(OF)j(EDINBURGH)d(AND)i(THE)g(CONTRIBUTORS)d (TO)j(THIS)g(WORK)485 4925 y(DISCLAIM)f(ALL)h(WARRANTIES)e(WITH)i (REGARD)f(TO)h(THIS)f(SOFTWARE,)g(INCLUDING)485 5029 y(ALL)h(IMPLIED)f(WARRANTIES)f(OF)i(MERCHANTABILITY)d(AND)j(FITNESS,)e (IN)j(NO)f(EVENT)485 5132 y(SHALL)g(THE)g(UNIVERSITY)e(OF)i(EDINBURGH)e (NOR)i(THE)g(CONTRIBUTORS)d(BE)k(LIABLE)485 5236 y(FOR)f(ANY)g (SPECIAL,)f(INDIRECT)f(OR)j(CONSEQUENTIAL)c(DAMAGES)i(OR)h(ANY)g (DAMAGES)485 5340 y(WHATSOEVER)e(RESULTING)h(FROM)g(LOSS)h(OF)g(USE,)g (DATA)f(OR)i(PROFITS,)d(WHETHER)h(IN)p eop %%Page: 4 6 4 5 bop 150 -116 a Fo(4)2234 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g (Syn)m(thesis)f(System)485 299 y Fk(AN)48 b(ACTION)e(OF)h(CONTRACT,)e (NEGLIGENCE)g(OR)i(OTHER)g(TORTIOUS)e(ACTION,)485 403 y(ARISING)h(OUT)h(OF)g(OR)h(IN)f(CONNECTION)e(WITH)h(THE)h(USE)g(OR)g (PERFORMANCE)e(OF)485 506 y(THIS)i(SOFTWARE.)p eop %%Page: 5 7 5 6 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(Ac)m(kno)m(wledgemen)m(ts) 2341 b(5)150 299 y Fl(3)80 b(Ac)l(kno)l(wledgemen)l(ts)275 581 y Fo(The)21 b(co)s(de)h(in)e(this)h(system)h(w)m(as)g(primarily)c (written)j(b)m(y)h(Alan)f(W)h(Blac)m(k,)j(P)m(aul)c(T)-8 b(a)m(ylor)22 b(and)f(Ric)m(hard)150 691 y(Caley)-8 b(.)62 b(F)-8 b(estiv)j(al)38 b(sits)e(on)i(top)g(of)f(the)h(Edin)m(burgh)c (Sp)s(eec)m(h)j(T)-8 b(o)s(ols)37 b(Library)-8 b(,)39 b(and)d(uses)h(m)m(uc)m(h)h(of)g(its)150 800 y(functionalit)m(y)-8 b(.)275 951 y(Am)m(y)33 b(Isard)g(wrote)h(a)f(syn)m(thesizer)g(for)g (her)g(MSc)h(pro)5 b(ject)34 b(in)e(1995,)k(whic)m(h)c(\014rst)g(used)h (the)h(Edin-)150 1060 y(burgh)27 b(Sp)s(eec)m(h)h(T)-8 b(o)s(ols)27 b(Library)-8 b(.)39 b(Although)27 b(F)-8 b(estiv)j(al)29 b(do)s(esn't)f(con)m(tain)g(an)m(y)h(co)s(de)f(from)g (that)h(system,)150 1170 y(her)h(system)g(w)m(as)h(used)f(as)g(a)h (basic)f(mo)s(del.)275 1320 y(Muc)m(h)38 b(of)g(the)h(design)e(and)h (philosoph)m(y)e(of)i(F)-8 b(estiv)j(al)39 b(has)f(b)s(een)f(built)f (on)j(the)f(exp)s(erience)g(b)s(oth)150 1430 y(P)m(aul)32 b(and)g(Alan)f(gained)h(from)g(the)h(dev)m(elopmen)m(t)f(of)h(v)-5 b(arious)31 b(previous)g(syn)m(thesizers)h(and)f(soft)m(w)m(are)150 1540 y(systems,)49 b(esp)s(ecially)44 b(CSTR's)g(Osprey)g(and)h(P)m (olyglot)h(systems)f Fj(ta)m(ylor91)54 b Fo(and)44 b(A)-8 b(TR's)46 b(CHA)-8 b(TR)150 1649 y(system)31 b Fj(blac)m(k94)p Fo(.)275 1800 y(Ho)m(w)m(ev)m(er,)48 b(it)42 b(should)f(b)s(e)h(stated) i(that)f(F)-8 b(estiv)j(al)43 b(is)f(fully)e(dev)m(elop)s(ed)j(at)g (CSTR)f(and)g(con)m(tains)150 1909 y(neither)29 b(proprietary)g(co)s (de)i(or)f(ideas.)275 2060 y(F)-8 b(estiv)j(al)26 b(con)m(tains)g(a)g (n)m(um)m(b)s(er)f(of)h(subsystems)e(in)m(tegrated)j(from)e(other)h (sources)g(and)g(w)m(e)g(ac)m(kno)m(wl-)150 2169 y(edge)31 b(those)g(systems)f(here.)150 2467 y Fn(3.1)68 b(SIOD)275 2676 y Fo(The)26 b(Sc)m(heme)i(in)m(terpreter)f(\(SIOD)g({)h(Sc)m(heme) f(In)g(One)g(Defun)g(3.0\))i(w)m(as)e(written)g(b)m(y)g(George)i(Car-) 150 2785 y(rett)d(\(g)s(jc)p Fk(@)p Fo(mitec)m(h.com,)i(g)s(jc)p Fk(@)p Fo(paradigm.com\))d(and)f(o\013ers)i(a)f(basic)g(small)f(Sc)m (heme)h(\(Lisp\))g(in)m(terpreter)150 2895 y(suitable)e(for)h(em)m(b)s (edding)f(in)h(applications)e(suc)m(h)j(as)f(F)-8 b(estiv)j(al)25 b(as)g(a)g(scripting)e(language.)39 b(A)25 b(n)m(um)m(b)s(er)e(of)150 3004 y(c)m(hanges)j(and)e(impro)m(v)m(emen)m(ts)h(ha)m(v)m(e)h(b)s(een) e(added)g(in)f(our)h(dev)m(elopmen)m(t)h(but)f(it)g(still)f(remains)g (that)j(ba-)150 3114 y(sic)i(system.)41 b(W)-8 b(e)30 b(are)f(grateful)f(to)i(George)g(and)e(P)m(aradigm)h(Asso)s(ciates)g (Incorp)s(orated)f(for)h(pro)m(viding)150 3223 y(suc)m(h)h(a)h(useful)d (and)i(w)m(ell-written)f(sub-system.)1488 3368 y Fk(Scheme)46 b(In)h(One)g(Defun)f(\(SIOD\))1488 3472 y(COPYRIGHT)f(\(c\))i (1988-1994)e(BY)772 3576 y(PARADIGM)g(ASSOCIATES)g(INCORPORATED,)g (CAMBRIDGE,)g(MASSACHUSETTS.)1679 3680 y(ALL)i(RIGHTS)f(RESERVED)390 3887 y(Permission)f(to)i(use,)g(copy,)f(modify,)g(distribute)f(and)i (sell)g(this)f(software)390 3991 y(and)h(its)g(documentation)d(for)j (any)g(purpose)f(and)h(without)e(fee)i(is)g(hereby)390 4095 y(granted,)f(provided)f(that)i(the)g(above)f(copyright)f(notice)h (appear)g(in)i(all)f(copies)390 4198 y(and)g(that)g(both)f(that)h (copyright)e(notice)h(and)h(this)g(permission)e(notice)h(appear)390 4302 y(in)h(supporting)e(documentation,)f(and)j(that)g(the)g(name)f(of) h(Paradigm)f(Associates)390 4406 y(Inc)h(not)g(be)g(used)g(in)g (advertising)e(or)i(publicity)e(pertaining)g(to)i(distribution)390 4510 y(of)g(the)g(software)f(without)f(specific,)h(written)g(prior)g (permission.)390 4717 y(PARADIGM)g(DISCLAIMS)f(ALL)i(WARRANTIES)e(WITH) h(REGARD)g(TO)i(THIS)e(SOFTWARE,)g(INCLUDING)390 4821 y(ALL)h(IMPLIED)f(WARRANTIES)f(OF)i(MERCHANTABILITY)d(AND)i(FITNESS,)g (IN)h(NO)g(EVENT)g(SHALL)390 4925 y(PARADIGM)f(BE)h(LIABLE)f(FOR)h(ANY) g(SPECIAL,)e(INDIRECT)h(OR)h(CONSEQUENTIAL)d(DAMAGES)i(OR)390 5029 y(ANY)h(DAMAGES)f(WHATSOEVER)f(RESULTING)g(FROM)i(LOSS)f(OF)h (USE,)g(DATA)g(OR)g(PROFITS,)390 5132 y(WHETHER)f(IN)h(AN)g(ACTION)f (OF)h(CONTRACT,)f(NEGLIGENCE)f(OR)i(OTHER)f(TORTIOUS)g(ACTION,)390 5236 y(ARISING)g(OUT)h(OF)g(OR)g(IN)g(CONNECTION)e(WITH)i(THE)g(USE)g (OR)g(PERFORMANCE)e(OF)i(THIS)390 5340 y(SOFTWARE.)p eop %%Page: 6 8 6 7 bop 150 -116 a Fo(6)2234 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g (Syn)m(thesis)f(System)150 299 y Fn(3.2)68 b(editline)275 491 y Fo(Because)45 b(of)f(con\015icts)f(b)s(et)m(w)m(een)i(the)f(cop)m (yrigh)m(t)g(for)g(GNU)h(readline,)h(for)d(whic)m(h)g(an)h(optional)150 601 y(in)m(terface)c(w)m(as)h(included)c(in)h(earlier)h(v)m(ersions,)i (w)m(e)g(ha)m(v)m(e)g(replace)e(the)h(in)m(terface)h(with)d(a)i (complete)150 710 y(command)27 b(line)e(editing)g(system)i(based)g(on)g (`)p Fk(editline)p Fo('.)37 b(`)p Fk(Editline)p Fo(')25 b(w)m(as)j(p)s(osted)e(to)i(the)f(USENET)150 820 y(newsgroup)34 b(`)p Fk(comp.sources.misc)p Fo(')d(in)j(1992.)58 b(A)35 b(n)m(um)m(b)s(er)f(of)i(mo)s(di\014cations)e(ha)m(v)m(e)i(b)s(een)f (made)g(to)150 929 y(mak)m(e)28 b(it)f(more)g(useful)e(to)j(us)e(but)h (the)g(original)e(co)s(de)i(\(con)m(tained)h(within)d(the)i(standard)f (sp)s(eec)m(h)h(to)s(ols)150 1039 y(distribution\))g(and)j(our)g(mo)s (di\014cations)e(fall)h(under)g(the)i(follo)m(wing)e(licence.)390 1167 y Fk(Copyright)45 b(1992)i(Simmule)f(Turner)g(and)h(Rich)f(Salz.) 94 b(All)47 b(rights)f(reserved.)390 1375 y(This)h(software)e(is)i(not) g(subject)f(to)h(any)g(license)f(of)h(the)g(American)f(Telephone)390 1479 y(and)h(Telegraph)e(Company)h(or)h(of)g(the)g(Regents)f(of)h(the)g (University)e(of)i(California.)390 1686 y(Permission)e(is)i(granted)f (to)h(anyone)f(to)h(use)g(this)g(software)f(for)g(any)h(purpose)f(on) 390 1790 y(any)h(computer)e(system,)h(and)h(to)g(alter)g(it)g(and)g (redistribute)d(it)j(freely,)f(subject)390 1894 y(to)h(the)g(following) e(restrictions:)390 1998 y(1.)i(The)g(authors)f(are)h(not)g (responsible)d(for)j(the)g(consequences)e(of)i(use)g(of)g(this)533 2101 y(software,)e(no)j(matter)e(how)h(awful,)f(even)g(if)i(they)e (arise)h(from)f(flaws)h(in)g(it.)390 2205 y(2.)g(The)g(origin)f(of)h (this)g(software)f(must)g(not)h(be)g(misrepresented,)d(either)i(by)533 2309 y(explicit)g(claim)g(or)h(by)g(omission.)93 b(Since)47 b(few)g(users)f(ever)h(read)f(sources,)533 2413 y(credits)g(must)h (appear)f(in)h(the)g(documentation.)390 2516 y(3.)g(Altered)f(versions) g(must)g(be)h(plainly)f(marked)g(as)h(such,)g(and)g(must)f(not)h(be)533 2620 y(misrepresented)d(as)j(being)g(the)g(original)e(software.)93 b(Since)46 b(few)h(users)533 2724 y(ever)g(read)f(sources,)g(credits)g (must)g(appear)h(in)g(the)g(documentation.)390 2828 y(4.)g(This)g (notice)f(may)h(not)g(be)g(removed)f(or)h(altered.)150 3084 y Fn(3.3)68 b(Edin)l(burgh)45 b(Sp)t(eec)l(h)f(T)-11 b(o)t(ols)45 b(Library)275 3276 y Fo(The)26 b(Edin)m(burgh)e(Sp)s(eec)m (h)j(T)-8 b(o)s(ols)27 b(lies)e(at)j(the)f(core)h(of)g(F)-8 b(estiv)j(al.)39 b(Although)27 b(dev)m(elop)s(ed)f(separately)-8 b(,)150 3386 y(m)m(uc)m(h)29 b(of)g(the)g(dev)m(elopmen)m(t)h(of)f (certain)g(parts)f(of)h(the)g(Edin)m(burgh)e(Sp)s(eec)m(h)h(T)-8 b(o)s(ols)29 b(has)f(b)s(een)h(directed)150 3496 y(b)m(y)h(F)-8 b(estiv)j(al's)31 b(needs.)40 b(In)30 b(turn)f(those)i(who)f(ha)m(v)m (e)i(con)m(tributed)e(to)h(the)f(Sp)s(eec)m(h)g(T)-8 b(o)s(ols)30 b(mak)m(e)i(F)-8 b(estiv)j(al)150 3605 y(a)31 b(more)f(usable)g(system.)275 3739 y(See)g(section)h(\\Ac)m(kno)m (wledgemen)m(ts")h(in)d Fj(Edin)m(burgh)f(Sp)s(eec)m(h)i(T)-8 b(o)s(ols)30 b(Library)e(Man)m(ual)t Fo(.)275 3873 y(Online)f (information)i(ab)s(out)h(the)h(Edin)m(burgh)c(Sp)s(eec)m(h)j(T)-8 b(o)s(ols)30 b(library)e(is)i(a)m(v)-5 b(ailable)29 b(through)390 4002 y Fk(http://www.cstr.ed.ac.uk)o(/pro)o(ject)o(s/s)o(peec)o(h_to)o (ols)o(.htm)o(l)150 4258 y Fn(3.4)68 b(Others)275 4450 y Fo(Man)m(y)27 b(others)g(ha)m(v)m(e)i(pro)m(vided)c(actual)i(co)s(de) h(and)e(supp)s(ort)f(for)i(F)-8 b(estiv)j(al,)28 b(for)f(whic)m(h)f(w)m (e)h(are)g(grate-)150 4560 y(ful.)39 b(Sp)s(eci\014cally)-8 b(,)225 4694 y Fm(\017)60 b Fo(Alistair)23 b(Conkie:)37 b(v)-5 b(arious)24 b(lo)m(w)h(lev)m(el)f(co)s(de)h(p)s(oin)m(ts)f(and)g (some)h(design)f(w)m(ork,)i(Spanish)d(syn)m(thesis,)330 4803 y(the)31 b(old)e(diphone)g(syn)m(thesis)g(co)s(de.)225 4938 y Fm(\017)60 b Fo(Stev)m(e)31 b(Isard:)40 b(directorship)28 b(and)i(LPC)g(diphone)e(co)s(de,)j(design)e(of)i(diphone)d(sc)m(hema.) 225 5072 y Fm(\017)60 b Fo(EPSR)m(C:)30 b(who)g(fund)e(Alan)i(Blac)m(k) h(and)f(P)m(aul)g(T)-8 b(a)m(ylor.)225 5206 y Fm(\017)60 b Fo(Sun)29 b(Microsystems)h(Lab)s(oratories:)41 b(for)30 b(supp)s(orting)e(the)i(pro)5 b(ject)31 b(and)f(funding)e(Ric)m(hard.) 225 5340 y Fm(\017)60 b Fo(A)-8 b(T&T)30 b(Labs)g(-)g(Researc)m(h:)42 b(for)30 b(supp)s(orting)e(the)j(pro)5 b(ject.)p eop %%Page: 7 9 7 8 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(Ac)m(kno)m(wledgemen)m(ts) 2341 b(7)225 299 y Fm(\017)60 b Fo(P)m(aradigm)30 b(Asso)s(ciates)h (and)f(George)i(Carrett:)41 b(for)30 b(Sc)m(heme)h(in)e(one)h(defun.) 225 431 y Fm(\017)60 b Fo(Mik)m(e)31 b(Macon:)42 b(Impro)m(ving)29 b(the)h(qualit)m(y)g(of)g(the)h(diphone)d(syn)m(thesizer)i(and)g(LPC)g (analysis.)225 564 y Fm(\017)60 b Fo(Kurt)29 b(Dusterho\013:)41 b(Tilt)29 b(in)m(tonation)h(training)f(and)g(mo)s(delling.)225 696 y Fm(\017)60 b Fo(Am)m(y)31 b(Isard:)40 b(for)30 b(her)g(SSML)f(pro)5 b(ject)31 b(and)f(related)g(syn)m(thesizer.)225 829 y Fm(\017)60 b Fo(Ric)m(hard)39 b(T)-8 b(obin:)59 b(for)40 b(answ)m(ering)g(all)f(those)h(di\016cult)f(questions,)j(the)e (so)s(c)m(k)m(et)i(co)s(de,)h(and)d(the)330 938 y(XML)31 b(parser.)225 1071 y Fm(\017)60 b Fo(Simm)m(ule)28 b(T)-8 b(urner)29 b(and)h(Ric)m(h)g(Salz:)40 b(command)30 b(line)f(editor)h (\(editline\))225 1203 y Fm(\017)60 b Fo(Borja)31 b(Etxebarria:)40 b(Help)30 b(with)f(the)h(Spanish)e(synsthesis)225 1335 y Fm(\017)60 b Fo(Brion)m(y)30 b(Williams:)38 b(W)-8 b(elsh)30 b(syn)m(thesis)225 1468 y Fm(\017)60 b Fo(Jacques)35 b(H.)g(de)f(Villiers:)46 b(`)p Fk(jacques@cse.ogi.edu)p Fo(')30 b(from)k(CSLU)g(at)h(OGI,)g(for)f(the)h(TCL)f(in-)330 1577 y(terface,)e(and)e(other)g(usabilit)m(y)f(issues)225 1710 y Fm(\017)60 b Fo(Kevin)29 b(Lenzo:)41 b(`)p Fk(lenzo@cs.cmu.edu)p Fo(')27 b(from)j(CMU)g(for)g(the)h(PERL)f(in)m(terface.)225 1842 y Fm(\017)60 b Fo(Rob)30 b(Clark)m(e:)41 b(for)30 b(supp)s(ort)e(under)h(Lin)m(ux.)225 1975 y Fm(\017)60 b Fo(Sam)m(uel)30 b(Audet)g(`)p Fk(guardia@cam.org)p Fo(':)37 b(OS/2)30 b(supp)s(ort)225 2107 y Fm(\017)60 b Fo(Mari)35 b(Ostendorf:)51 b(F)-8 b(or)37 b(pro)m(viding)d(access)j (to)g(the)f(BU)g(FM)h(Radio)e(corpus)g(from)h(whic)m(h)f(some)330 2217 y(mo)s(dules)29 b(w)m(ere)h(trained.)225 2349 y Fm(\017)60 b Fo(Melvin)29 b(Hun)m(t:)41 b(from)30 b(whose)g(w)m(ork)g (w)m(e)h(based)f(our)g(residual)e(LPC)i(syn)m(thesis)f(mo)s(del)g(on) 225 2482 y Fm(\017)60 b Fo(Oxford)35 b(T)-8 b(ext)38 b(Arc)m(hiv)m(e:)52 b(F)-8 b(or)38 b(the)e(computer)h(users)e(v)m (ersion)h(of)h(Oxford)e(Adv)-5 b(anced)36 b(Learners')330 2591 y(Dictionary)30 b(\(redistributed)e(with)h(p)s(ermission\).)225 2724 y Fm(\017)60 b Fo(Reading)35 b(Univ)m(ersit)m(y:)49 b(for)35 b(access)h(to)g(MARSEC)f(from)f(whic)m(h)g(the)h(phrase)g (break)g(mo)s(del)f(w)m(as)330 2833 y(trained.)225 2966 y Fm(\017)60 b Fo(LDC)26 b(&)h(P)m(enn)f(T)-8 b(ree)27 b(Bank:)39 b(from)26 b(whic)m(h)f(the)i(POS)e(tagger)k(w)m(as)e (trained,)f(redistribution)d(of)k(the)330 3075 y(mo)s(dels)i(is)g(with) h(p)s(ermission)d(from)j(the)g(LDC.)225 3208 y Fm(\017)60 b Fo(Roger)31 b(Burroughes)f(and)g(Kurt)f(Dusterho\013:)41 b(F)-8 b(or)31 b(letting)f(us)f(capture)i(their)e(v)m(oices.)225 3340 y Fm(\017)60 b Fo(A)-8 b(TR)30 b(and)e(Nic)m(k)i(Campb)s(ell:)38 b(for)29 b(\014rst)f(getting)j(P)m(aul)d(and)h(Alan)g(to)h(w)m(ork)g (together)h(and)e(for)g(the)330 3450 y(exp)s(erience)h(w)m(e)h(gained.) 225 3582 y Fm(\017)60 b Fo(FSF:)31 b(for)f(G)p Fk(++)p Fo(,)g(mak)m(e,)i(....)225 3714 y Fm(\017)60 b Fo(Cen)m(ter)27 b(for)f(Sp)s(ok)m(en)f(Language)i(Understanding:)37 b(CSLU)25 b(at)i(OGI,)g(particularly)d(Ron)i(Cole)g(and)330 3824 y(Mik)m(e)32 b(Macon,)g(ha)m(v)m(e)h(acted)f(as)f(signi\014can)m(t)f (users)h(for)f(the)i(system)f(giving)f(signi\014can)m(t)g(feedbac)m(k) 330 3934 y(and)g(allo)m(wing)f(us)g(to)j(teac)m(h)g(courses)e(on)g(F)-8 b(estiv)j(al)31 b(o\013ering)f(v)-5 b(aluable)29 b(real-use)h(feedbac)m (k.)225 4066 y Fm(\017)60 b Fo(Our)33 b(b)s(eta)i(testers:)49 b(Thanks)34 b(to)h(all)e(the)i(p)s(eople)e(who)h(put)g(up)f(with)g (previous)g(v)m(ersions)h(of)h(the)330 4176 y(system)28 b(and)f(rep)s(orted)g(bugs,)h(b)s(oth)f(big)g(and)g(small.)39 b(These)27 b(commen)m(ts)i(are)f(v)m(ery)g(imp)s(ortan)m(t)f(to)330 4285 y(the)32 b(constan)m(t)i(impro)m(v)m(emen)m(ts)e(in)f(the)h (system.)46 b(And)31 b(thanks)h(for)f(y)m(our)h(quic)m(k)g(resp)s (onses)f(when)330 4395 y(I)f(had)g(sp)s(eci\014c)f(requests.)225 4527 y Fm(\017)60 b Fo(And)31 b(our)g(users)g(...)45 b(Man)m(y)32 b(p)s(eople)f(ha)m(v)m(e)i(do)m(wnloaded)d(earlier)h(v)m (ersions)g(of)h(the)g(system.)44 b(Man)m(y)330 4637 y(ha)m(v)m(e)39 b(found)d(problems)g(with)g(installation)f(and)i(use)g(and)g(ha)m(v)m (e)i(rep)s(orted)e(it)g(to)h(us.)62 b(Man)m(y)38 b(of)330 4746 y(y)m(ou)28 b(ha)m(v)m(e)h(put)d(up)h(with)f(m)m(ultiple)f (compilations)h(trying)h(to)h(\014x)f(bugs)f(remotely)-8 b(.)41 b(W)-8 b(e)28 b(thank)g(y)m(ou)330 4856 y(for)34 b(putting)f(up)g(with)f(us)i(and)f(are)i(pleased)e(y)m(ou'v)m(e)j(tak)m (en)f(the)f(time)g(to)h(help)d(us)i(impro)m(v)m(e)f(our)330 4966 y(system.)54 b(Man)m(y)36 b(of)f(y)m(ou)g(ha)m(v)m(e)h(come)f(up)f (with)g(uses)g(w)m(e)h(hadn't)f(though)m(t)i(of,)g(whic)m(h)e(is)f(alw) m(a)m(ys)330 5075 y(rew)m(arding.)330 5208 y(Ev)m(en)f(if)f(y)m(ou)h (ha)m(v)m(en't)h(activ)m(ely)f(resp)s(onded,)f(the)h(fact)h(that)f(y)m (ou)g(use)g(the)g(system)g(at)g(all)f(mak)m(es)330 5317 y(it)f(w)m(orth)m(while.)p eop %%Page: 8 10 8 9 bop 150 -116 a Fo(8)2234 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g (Syn)m(thesis)f(System)p eop %%Page: 9 11 9 10 bop 150 -116 a Fo(Chapter)30 b(4:)41 b(What)31 b(is)e(new)2587 b(9)150 299 y Fl(4)80 b(What)54 b(is)g(new)275 533 y Fo(Compared)32 b(to)h(the)g(the)g(previous)e(ma)5 b(jor)33 b(release)g(\(1.3.0)i(release)e(Aug)f(1998\))j(1.4.0)g(is)d(not)h (func-)150 643 y(tionally)38 b(so)i(di\013eren)m(t)f(from)g(its)g (previous)f(v)m(ersions.)68 b(This)38 b(release)h(is)g(primarily)d(a)k (consolidation)150 752 y(release)33 b(\014xing)f(and)g(tidying)f(up)h (some)h(of)g(the)h(lo)m(w)m(er)f(lev)m(el)f(asp)s(ects)i(of)f(the)g (system)g(to)g(allo)m(w)g(b)s(etter)150 862 y(mo)s(dularit)m(y)28 b(for)j(some)f(of)h(our)f(future)f(planned)g(mo)s(dules.)225 996 y Fm(\017)60 b Fo(Cop)m(yrigh)m(t)23 b(c)m(hange:)38 b(The)22 b(system)h(is)f(no)m(w)h(free)g(and)f(has)h(no)f(commercial)h (restriction.)37 b(Note)24 b(that)330 1106 y(curren)m(tly)33 b(on)h(the)h(US)f(v)m(oices)h(\(k)m(ed)g(and)e(k)-5 b(al\))34 b(are)h(also)f(no)m(w)g(unrestricted.)52 b(The)33 b(UK)h(English)330 1215 y(v)m(oices)c(dep)s(end)d(on)i(the)g(Oxford)f(Adv)-5 b(anced)28 b(Learners')h(Dictionary)g(of)g(Curren)m(t)f(English)e(whic) m(h)330 1325 y(cannot)31 b(b)s(e)f(used)f(for)h(commercial)g(use)h (without)e(p)s(ermission)e(from)j(Oxford)f(Univ)m(ersit)m(y)h(Press.) 225 1460 y Fm(\017)60 b Fo(Arc)m(hitecture)33 b(tidy)f(up:)44 b(the)33 b(in)m(terfaces)g(to)h(lo)m(w)m(er)f(lev)m(el)f(part)h(parts)f (of)h(the)g(system)g(ha)m(v)m(e)h(b)s(een)330 1569 y(tidied)25 b(up)h(deleting)g(some)h(of)g(the)g(older)f(co)s(de)h(that)h(w)m(as)f (supp)s(orted)e(for)i(compatibilit)m(y)e(reasons.)330 1679 y(This)34 b(is)h(a)h(m)m(uc)m(h)f(higher)g(dep)s(endence)f(of)i (features)g(and)f(easier)h(\(and)f(safer\))h(w)m(a)m(ys)h(to)f (register)330 1788 y(new)28 b(ob)5 b(jects)29 b(as)g(feature)f(v)-5 b(alues)28 b(and)g(Sc)m(heme)g(ob)5 b(jects.)41 b(Sc)m(heme)29 b(has)f(b)s(een)g(tidied)e(up.)39 b(It)29 b(is)e(no)330 1898 y(longer)j Fk(")p Fo(in)f(one)h(defun)p Fk(")f Fo(but)h Fk(")p Fo(in)f(one)h(directory)p Fk(")p Fo(.)225 2032 y Fm(\017)60 b Fo(New)41 b(do)s(cumen)m(tation)g(system)g(for)g(sp)s (eec)m(h)g(to)s(ols:)62 b(A)41 b(new)f(do)s(cb)s(o)s(ok)g(based)h(do)s (cumen)m(tation)330 2142 y(system)d(has)f(b)s(een)g(added)f(to)j(the)e (sp)s(eec)m(h)h(to)s(ols.)62 b(F)-8 b(estiv)j(al's)37 b(do)s(cumen)m(tation)h(will)d(will)f(mo)m(v)m(e)330 2252 y(o)m(v)m(er)e(to)f(this)e(sometime)i(so)s(on)f(to)s(o.)225 2386 y Fm(\017)60 b Fo(initial)30 b(JSAPI)i(supp)s(ort:)43 b(b)s(oth)32 b(JSAPI)f(and)h(JSML)g(\(somewhat)i(similar)c(to)j (Sable\))f(no)m(w)h(ha)m(v)m(e)330 2496 y(initial)25 b(imp)s(elemen)m(tations.)38 b(They)27 b(of)h(course)g(dep)s(end)e(on)h (Ja)m(v)-5 b(a)29 b(supp)s(ort)d(whic)m(h)g(so)i(far)g(w)m(e)g(ha)m(v)m (e)330 2605 y(only)h(\(successfully\))h(in)m(v)m(estgated)h(under)e (Solaris)g(and)h(Lin)m(ux.)225 2740 y Fm(\017)60 b Fo(Generalization)35 b(of)h(statistical)g(mo)s(dels:)50 b(CAR)-8 b(T,)36 b(ngrams,)h(and)f (WFSTs)f(are)h(no)m(w)g(fully)e(sup-)330 2849 y(p)s(orted)40 b(from)g(Lisp)f(and)i(can)g(b)s(e)f(used)g(with)f(a)i(generalized)g (viterbi)e(function.)70 b(This)39 b(mak)m(es)330 2959 y(adding)29 b(quite)h(complex)g(statistical)g(mo)s(dels)f(easy)i (without)e(adding)g(new)h(C)p Fk(++)p Fo(.)225 3093 y Fm(\017)60 b Fo(Tilt)23 b(In)m(tonation)i(mo)s(delling:)36 b(F)-8 b(ull)23 b(supp)s(ort)g(is)h(no)m(w)h(included)d(for)j(the)g (Tilt)e(in)m(tomation)i(mo)s(dels,)330 3203 y(b)s(oth)30 b(training)e(and)i(use.)225 3337 y Fm(\017)60 b Fo(Do)s(cumen)m(tation) 41 b(on)f(Bulding)e(New)i(V)-8 b(oices)41 b(in)e(F)-8 b(estiv)j(al:)60 b(do)s(cumen)m(tation,)42 b(scripts)d(etc.)71 b(for)330 3447 y(building)27 b(new)i(v)m(oices)j(and)d(languages)i(in)e (the)i(system,)f(see)570 3576 y Fk(http://www.cstr.ed.ac.uk)o(/pro)o (ject)o(s/f)o(esti)o(val/)o(doc)o(s/fe)o(stvo)o(x/)p eop %%Page: 10 12 10 11 bop 150 -116 a Fo(10)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 11 13 11 12 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Ov)m(erview)2672 b(11)150 299 y Fl(5)80 b(Ov)l(erview)275 511 y Fo(F)-8 b(estiv)j(al)32 b(is)f(designed)h(as)g(a)h(sp)s(eec)m(h)f(syn)m(thesis) f(system)i(for)f(at)h(least)g(three)f(lev)m(els)g(of)g(user.)46 b(First,)150 620 y(those)28 b(who)f(simply)e(w)m(an)m(t)k(high)d (qualit)m(y)h(sp)s(eec)m(h)g(from)g(arbitrary)g(text)h(with)f(the)g (minim)m(um)e(of)j(e\013ort.)150 730 y(Second,)34 b(those)f(who)g(are)g (dev)m(eloping)f(language)i(systems)f(and)f(wish)f(to)j(include)d(syn)m (thesis)h(output.)150 840 y(In)f(this)g(case,)i(a)g(certain)e(amoun)m (t)i(of)f(customization)f(is)g(desired,)g(suc)m(h)h(as)g(di\013eren)m (t)f(v)m(oices,)i(sp)s(eci\014c)150 949 y(phrasing,)48 b(dialog)c(t)m(yp)s(es)i(etc.)87 b(The)45 b(third)e(lev)m(el)i(is)g(in) f(dev)m(eloping)h(and)f(testing)i(new)f(syn)m(thesis)150 1059 y(metho)s(ds.)275 1189 y(This)37 b(man)m(ual)h(is)f(not)j (designed)d(as)i(a)g(tutorial)f(on)h(con)m(v)m(erting)h(text)f(to)h(sp) s(eec)m(h)f(but)f(for)g(do)s(cu-)150 1298 y(men)m(ting)e(the)g(pro)s (cesses)g(and)g(use)g(of)g(our)g(system.)59 b(W)-8 b(e)37 b(do)f(not)h(discuss)d(the)j(detailed)e(algorithms)150 1408 y(in)m(v)m(olv)m(ed)28 b(in)f(con)m(v)m(erting)j(text)f(to)g(sp)s (eec)m(h)g(or)f(the)h(relativ)m(e)f(merits)g(of)h(m)m(ultiple)d(metho)s (ds,)i(though)g(w)m(e)150 1518 y(will)g(often)j(giv)m(e)f(references)h (to)g(relev)-5 b(an)m(t)31 b(pap)s(ers)e(when)g(describing)f(the)j(use) f(of)h(eac)m(h)g(mo)s(dule.)275 1648 y(F)-8 b(or)61 b(more)h(general)f (information)e(ab)s(out)i(text)h(to)g(sp)s(eec)m(h)f(w)m(e)g(recommend) g(Dutoit's)g(`)p Fk(An)150 1757 y(introduction)27 b(to)j (Text-to-Speech)c(Synthesis)p Fo(')62 b Fj(dutoit97)p Fo(.)140 b(F)-8 b(or)65 b(more)f(detailed)e(researc)m(h)150 1867 y(issues)29 b(in)g(TTS)g(see)i Fj(sproat98)39 b Fo(or)30 b Fj(v)-5 b(ansan)m(ten96)p Fo(.)150 2111 y Fn(5.1)68 b(Philosoph)l(y)275 2299 y Fo(One)38 b(of)h(the)h(biggest)f (problems)e(in)h(the)h(dev)m(elopmen)m(t)h(of)f(sp)s(eec)m(h)g(syn)m (thesis,)h(and)f(other)g(areas)150 2409 y(of)h(sp)s(eec)m(h)g(and)g (language)g(pro)s(cessing)f(systems,)k(is)c(that)i(there)f(are)g(a)h (lot)f(of)g(simple)e(w)m(ell-kno)m(wn)150 2518 y(tec)m(hniques)i(lying) f(around)g(whic)m(h)h(can)g(help)f(y)m(ou)i(realise)f(y)m(our)g(goal.) 72 b(But)41 b(in)e(order)h(to)h(impro)m(v)m(e)150 2628 y(some)e(part)g(of)f(the)h(whole)f(system)h(it)f(is)g(necessary)h(to)g (ha)m(v)m(e)h(a)f(whole)f(system)h(in)e(whic)m(h)h(y)m(ou)h(can)150 2738 y(test)e(and)e(impro)m(v)m(e)h(y)m(our)f(part.)57 b(F)-8 b(estiv)j(al)36 b(is)f(in)m(tended)g(as)h(that)g(whole)f(system) h(in)f(whic)m(h)f(y)m(ou)i(ma)m(y)150 2847 y(simply)21 b(w)m(ork)i(on)h(y)m(our)f(small)f(part)h(to)h(impro)m(v)m(e)f(the)h (whole.)37 b(Without)23 b(a)h(system)f(lik)m(e)g(F)-8 b(estiv)j(al,)25 b(b)s(efore)150 2957 y(y)m(ou)37 b(could)f(ev)m(en)h (start)g(to)h(test)f(y)m(our)g(new)f(mo)s(dule)f(y)m(ou)i(w)m(ould)f (need)g(to)i(sp)s(end)d(signi\014can)m(t)g(e\013ort)150 3066 y(to)f(build)c(a)k(whole)e(system,)i(or)g(adapt)f(an)g(existing)f (one)i(b)s(efore)f(y)m(ou)g(could)g(start)g(w)m(orking)g(on)g(y)m(our) 150 3176 y(impro)m(v)m(emen)m(ts.)275 3306 y(F)-8 b(estiv)j(al)39 b(is)f(sp)s(eci\014cally)f(designed)h(to)h(allo)m(w)g(the)g(addition)e (of)j(new)e(mo)s(dules,)i(easily)e(and)h(e\016-)150 3416 y(cien)m(tly)-8 b(,)31 b(so)f(that)h(dev)m(elopmen)m(t)g(need)f(not)h (get)g(b)s(ogged)g(do)m(wn)f(in)f(re-implemen)m(ting)f(the)j(wheel.)275 3546 y(But)45 b(there)h(is)e(another)h(asp)s(ect)h(of)g(F)-8 b(estiv)j(al)45 b(whic)m(h)f(mak)m(es)i(it)f(more)h(useful)d(than)i (simply)e(an)150 3655 y(en)m(vironmen)m(t)g(for)f(researc)m(hing)h(in)m (to)g(new)g(syn)m(thesis)e(tec)m(hniques.)79 b(It)43 b(is)f(a)h(fully)e(usable)g(text-to-)150 3765 y(sp)s(eec)m(h)d(system)f (suitable)f(for)i(em)m(b)s(edding)e(in)g(other)i(pro)5 b(jects)38 b(that)g(require)e(sp)s(eec)m(h)i(output.)61 b(The)150 3874 y(pro)m(vision)41 b(of)i(a)f(fully)f(w)m(orking)h (easy-to-use)i(sp)s(eec)m(h)f(syn)m(thesizer)f(in)f(addition)g(to)i (just)f(a)h(testing)150 3984 y(en)m(vironmen)m(t)33 b(is)f(go)s(o)s(d)g (for)h(t)m(w)m(o)h(sp)s(eci\014c)e(reasons.)49 b(First,)33 b(it)f(o\013ers)h(a)h(conduit)e(for)g(our)h(researc)m(h,)h(in)150 4094 y(that)h(our)f(exp)s(erimen)m(ts)f(can)i(quic)m(kly)e(and)g (directly)g(b)s(ene\014t)h(users)f(of)i(our)f(syn)m(thesis)f(system.)53 b(And)150 4203 y(secondly)-8 b(,)33 b(in)f(ensuring)e(w)m(e)k(ha)m(v)m (e)g(a)f(fully)d(w)m(orking)i(usable)g(system)h(w)m(e)g(can)g (immediately)e(see)i(what)150 4313 y(problems)28 b(exist)h(and)h(where) f(our)g(researc)m(h)h(should)e(b)s(e)h(directed)g(rather)h(where)f(our) g(whims)f(tak)m(e)j(us.)275 4443 y(These)40 b(concepts)i(are)f(not)h (unique)d(to)i(F)-8 b(estiv)j(al.)73 b(A)-8 b(TR's)41 b(CHA)-8 b(TR)41 b(system)g(\()p Fj(blac)m(k94)7 b Fo(\))43 b(follo)m(ws)150 4552 y(v)m(ery)38 b(m)m(uc)m(h)h(the)f(same)g (philosoph)m(y)e(and)i(F)-8 b(estiv)j(al)38 b(b)s(ene\014ts)f(from)h (the)g(exp)s(eriences)f(gained)h(in)f(the)150 4662 y(dev)m(elopmen)m(t) 28 b(of)f(that)h(system.)40 b(F)-8 b(estiv)j(al)28 b(b)s(ene\014ts)e (from)h(v)-5 b(arious)26 b(pieces)h(of)h(previous)e(w)m(ork.)40 b(As)27 b(w)m(ell)150 4772 y(as)43 b(CHA)-8 b(TR,)43 b(CSTR's)e(previous)h(syn)m(thesizers,)j(Osprey)d(and)g(the)h(P)m (olyglot)g(pro)5 b(jects)43 b(in\015uenced)150 4881 y(man)m(y)c(design) f(decisions.)65 b(Also)39 b(w)m(e)g(are)h(in\015uenced)c(b)m(y)j(more)g (general)g(programs)g(in)f(considering)150 4991 y(soft)m(w)m(are)g (engineering)c(issues,)j(esp)s(ecially)d(GNU)j(Octa)m(v)m(e)h(and)e (Emacs)g(on)g(whic)m(h)f(the)h(basic)g(script)150 5100 y(mo)s(del)29 b(w)m(as)i(based.)275 5230 y(Unlik)m(e)k(in)g(some)i (other)g(sp)s(eec)m(h)f(and)g(language)h(systems,)h(soft)m(w)m(are)g (engineering)e(is)f(considered)150 5340 y(v)m(ery)22 b(imp)s(ortan)m(t)g(to)g(the)h(dev)m(elopmen)m(t)f(of)g(F)-8 b(estiv)j(al.)38 b(T)-8 b(o)s(o)23 b(often)f(researc)m(h)h(systems)f (consist)g(of)g(random)p eop %%Page: 12 14 12 13 bop 150 -116 a Fo(12)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(collections)40 b(of)h(hac)m(ky)h(little)e(scripts)f(and)i(co)s(de.)72 b(No)41 b(one)h(p)s(erson)d(can)i(con\014den)m(tly)f(describ)s(e)g(the) 150 408 y(algorithms)i(it)h(p)s(erforms,)i(as)e(parameters)h(are)f (scattered)h(throughout)f(the)h(system,)i(with)c(tric)m(ks)150 518 y(and)33 b(hac)m(ks)h(making)f(it)h(imp)s(ossible)c(to)k(really)f (ev)-5 b(aluate)34 b(wh)m(y)f(the)h(system)g(is)f(go)s(o)s(d)g(\(or)h (bad\).)51 b(Suc)m(h)150 628 y(systems)43 b(do)f(not)h(help)e(the)i (adv)-5 b(ancemen)m(t)44 b(of)f(sp)s(eec)m(h)f(tec)m(hnology)-8 b(,)48 b(except)43 b(p)s(erhaps)e(in)h(p)s(oin)m(ting)150 737 y(at)c(ideas)e(that)h(should)e(b)s(e)h(further)g(in)m(v)m (estigated.)60 b(If)37 b(the)g(algorithms)f(and)g(tec)m(hniques)g (cannot)i(b)s(e)150 847 y(describ)s(ed)31 b(externally)h(from)g(the)i (program)e Fi(such)j(that)43 b Fo(they)33 b(can)h(reimplemen)m(ted)d(b) m(y)i(others,)h(what)150 956 y(is)29 b(the)i(p)s(oin)m(t)e(of)i(doing)e (the)i(w)m(ork?)275 1091 y(F)-8 b(estiv)j(al)42 b(o\013ers)h(a)g (common)g(framew)m(ork)g(where)f(m)m(ultiple)f(tec)m(hniques)h(ma)m(y)h (b)s(e)f(implemen)m(ted)150 1200 y(\(b)m(y)34 b(the)g(same)h(or)f (di\013eren)m(t)f(researc)m(hers\))i(so)f(that)h(they)f(ma)m(y)g(b)s(e) g(tested)g(more)h(fairly)d(in)g(the)j(same)150 1310 y(en)m(vironmen)m (t.)275 1445 y(As)g(a)h(\014nal)f(w)m(ord,)h(w)m(e'd)g(lik)m(e)f(to)i (mak)m(e)f(t)m(w)m(o)i(short)d(statemen)m(ts)i(whic)m(h)e(b)s(oth)g(ac) m(hiev)m(e)i(the)f(same)150 1554 y(end)30 b(but)f(unfortunately)g(p)s (erhaps)g(not)i(for)f(the)g(same)h(reasons:)390 1683 y(Go)s(o)s(d)f(soft)m(w)m(are)i(engineering)d(mak)m(es)i(go)s(o)s(d)f (researc)m(h)h(easier)275 1817 y(But)f(the)h(follo)m(wing)d(seems)j(to) g(b)s(e)f(true)g(also)390 1946 y(If)h(y)m(ou)g(sp)s(end)f(enough)g (e\013ort)i(on)f(something)g(it)g(can)g(b)s(e)g(sho)m(wn)f(to)i(b)s(e)e (b)s(etter)i(than)f(its)390 2050 y(comp)s(etitors.)150 2307 y Fn(5.2)68 b(F)-11 b(uture)275 2500 y Fo(F)j(estiv)j(al)32 b(is)f(still)g(v)m(ery)h(m)m(uc)m(h)h(in)e(dev)m(elopmen)m(t.)47 b(Hop)s(efully)30 b(this)h(state)j(will)c(con)m(tin)m(ue)i(for)h(a)f (long)150 2609 y(time.)40 b(It)31 b(is)e(nev)m(er)i(p)s(ossible)d(to)j (complete)g(soft)m(w)m(are,)h(there)f(are)f(alw)m(a)m(ys)h(new)f (things)f(that)i(can)g(mak)m(e)150 2719 y(it)37 b(b)s(etter.)60 b(Ho)m(w)m(ev)m(er)40 b(as)d(time)g(go)s(es)g(on)g(F)-8 b(estiv)j(al's)38 b(core)f(arc)m(hitecture)h(will)c(stabilise)i(and)g (little)g(or)150 2829 y(no)e(c)m(hanges)i(will)31 b(b)s(e)j(made.)53 b(Other)34 b(asp)s(ects)g(of)h(the)f(system)h(will)d(gain)i(greater)h (atten)m(tion)h(suc)m(h)e(as)150 2938 y(w)m(a)m(v)m(eform)e(syn)m (thesis)d(mo)s(dules,)g(in)m(tonation)h(tec)m(hniques,)g(text)h(t)m(yp) s(e)g(dep)s(enden)m(t)e(analysers)h(etc.)275 3073 y(F)-8 b(estiv)j(al)30 b(will)e(impro)m(v)m(e,)i(so)h(don't)f(exp)s(ected)h (it)f(to)h(b)s(e)f(the)g(same)h(six)f(mon)m(ths)g(from)g(no)m(w.)275 3207 y(A)d(n)m(um)m(b)s(er)e(of)i(new)g(mo)s(dules)e(and)h(enhancemen)m (ts)i(are)f(already)g(under)e(consideration)h(at)i(v)-5 b(arious)150 3317 y(stages)35 b(of)f(implemen)m(tation.)50 b(The)33 b(follo)m(wing)f(is)h(a)h(non-exhaustiv)m(e)g(list)e(of)i (what)g(w)m(e)g(ma)m(y)g(\(or)g(ma)m(y)150 3426 y(not\))d(add)f(to)h(F) -8 b(estiv)j(al)30 b(o)m(v)m(er)i(the)f(next)f(six)g(mon)m(ths)g(or)g (so.)225 3561 y Fm(\017)60 b Fo(Selection-based)32 b(syn)m(thesis:)43 b(Mo)m(ving)33 b(a)m(w)m(a)m(y)h(from)d(diphone)g(tec)m(hnology)i(to)g (more)f(generalized)330 3670 y(selection)e(of)h(units)e(for)h(sp)s(eec) m(h)g(database.)225 3805 y Fm(\017)60 b Fo(New)51 b(structure)f(for)h (linguistic)c(con)m(ten)m(t)53 b(of)e(utterances:)82 b(Using)50 b(tec)m(hniques)g(for)h(Metrical)330 3914 y(Phonology)f(w)m(e)g(are)h(building)46 b(more)k(structure)g(represen)m (tations)g(of)g(utterances)h(re\015ecting)330 4024 y(there)33 b(linguistic)c(signi\014cance)j(b)s(etter.)47 b(This)31 b(will)e(allo)m(w)j(impro)m(v)m(emen)m(ts)h(in)e(proso)s(dy)g(and)h (unit)330 4134 y(selection.)225 4268 y Fm(\017)60 b Fo(Non-proso)s(dic) 44 b(proso)s(dic)f(con)m(trol:)71 b(F)-8 b(or)45 b(language)h (generation)f(systems)g(and)f(custom)h(tasks)330 4378 y(where)34 b(the)h(sp)s(eec)m(h)g(to)h(b)s(e)e(syn)m(thesized)h(is)f(b) s(eing)f(generated)j(b)m(y)f(some)g(program,)h(more)f(infor-)330 4487 y(mation)c(ab)s(out)g(text)i(structure)e(will)e(probably)g(exist,) j(suc)m(h)f(as)h(phrasing,)e(con)m(trast,)j(k)m(ey)f(items)330 4597 y(etc.)66 b(W)-8 b(e)39 b(are)g(in)m(v)m(estigating)f(the)h (relationship)d(of)i(high-lev)m(el)f(tags)j(to)f(proso)s(dic)e (information)330 4707 y(through)30 b(the)g(Sole)g(pro)5 b(ject)31 b Fk(http://www.cstr.ed.ac.uk)o(/pro)o(ject)o(s/s)o(ole.)o (html)225 4841 y Fm(\017)60 b Fo(Dialect)26 b(indep)s(enden)m(t)c (lexicons:)38 b(Curren)m(tly)23 b(for)i(eac)m(h)h(new)f(dialect)f(w)m (e)i(need)f(a)g(new)g(lexicon,)g(w)m(e)330 4951 y(are)d(curren)m(tly)e (in)m(v)m(estigating)h(a)g(form)g(of)h(lexical)e(sp)s(eci\014cation)g (that)h(is)g(dialect)f(indep)s(enden)m(t)f(that)330 5060 y(allo)m(ws)28 b(the)i(core)g(form)e(to)i(b)s(e)f(mapp)s(ed)e(to)j (di\013eren)m(t)f(dialects.)39 b(This)28 b(will)e(mak)m(e)k(the)g (generation)330 5170 y(of)h(v)m(oices)g(in)e(di\013eren)m(t)h(dialects) f(m)m(uc)m(h)i(easier.)p eop %%Page: 13 15 13 14 bop 150 -116 a Fo(Chapter)30 b(6:)41 b(Installation)2590 b(13)150 299 y Fl(6)80 b(Installation)275 531 y Fo(This)21 b(section)i(describ)s(es)e(ho)m(w)i(to)h(install)d(F)-8 b(estiv)j(al)23 b(from)f(source)h(in)f(a)h(new)g(lo)s(cation)f(and)h (customize)150 640 y(that)31 b(installation.)150 896 y Fn(6.1)68 b(Requiremen)l(ts)275 1089 y Fo(In)29 b(order)h(to)h (compile)e(F)-8 b(estiv)j(al)31 b(y)m(ou)g(\014rst)e(need)i(the)f (follo)m(wing)f(source)h(pac)m(k)-5 b(ages)150 1247 y Fk(festival-1.4.2.tar.gz)630 1357 y Fo(F)d(estiv)j(al)31 b(Sp)s(eec)m(h)f(Syn)m(thesis)f(System)h(source)150 1515 y Fk(speech_tools-1.2.2.tar.g)o(z)630 1625 y Fo(The)g(Edin)m(burgh)d (Sp)s(eec)m(h)j(T)-8 b(o)s(ols)30 b(Library)150 1783 y Fk(festlex_NAME.tar.gz)630 1893 y Fo(The)21 b(lexicon)g (distribution,)f(where)h(p)s(ossible,)h(includes)d(the)j(lexicon)f (input)e(\014le)i(as)h(w)m(ell)f(as)630 2002 y(the)i(compiled)f(form,)i (for)f(y)m(our)g(con)m(v)m(enience.)39 b(The)23 b(lexicons)f(ha)m(v)m (e)i(v)-5 b(arying)23 b(distribution)630 2112 y(p)s(olicies,)35 b(but)f(are)i(all)e(free)h(except)h(O)m(ALD,)g(whic)m(h)e(is)h(only)f (free)h(for)g(non-commercial)630 2222 y(use)i(\(w)m(e)g(are)h(w)m (orking)e(on)h(a)g(free)g(replacemen)m(t\).)61 b(In)36 b(some)h(cases)h(only)e(a)h(p)s(oin)m(ter)f(to)630 2331 y(an)41 b(ftp'able)g(\014le)f(plus)f(a)j(program)f(to)h(con)m(v)m(ert)h (that)e(\014le)g(to)h(the)f(F)-8 b(estiv)j(al)41 b(format)h(is)630 2441 y(included.)150 2599 y Fk(festvox_NAME.tar.gz)630 2709 y Fo(Y)-8 b(ou'll)38 b(need)g(a)h(sp)s(eec)m(h)g(database.)66 b(A)39 b(n)m(um)m(b)s(er)e(are)i(a)m(v)-5 b(ailable)38 b(\(with)g(v)-5 b(arying)38 b(distri-)630 2818 y(bution)h(p)s (olicies\).)69 b(Eac)m(h)41 b(v)m(oice)h(ma)m(y)f(ha)m(v)m(e)g(other)g (dep)s(endencies)e(suc)m(h)h(as)g(requiring)630 2928 y(particular)29 b(lexicons)150 3087 y Fk(festdoc_1.4.2.tar.gz)630 3196 y Fo(F)-8 b(ull)25 b(p)s(ostscript,)g(info)g(and)g(h)m(tml)g(do)s (cumen)m(tation)h(for)f(F)-8 b(estiv)j(al)26 b(and)g(the)g(Sp)s(eec)m (h)f(T)-8 b(o)s(ols.)630 3306 y(The)30 b(source)g(of)g(the)h(do)s (cumen)m(tation)f(is)f(a)m(v)-5 b(ailable)30 b(in)e(the)j(standard)e (distributions)e(but)630 3415 y(for)j(y)m(our)g(con)m(v)m(eniences)i (it)e(has)g(b)s(een)f(pre-generated.)275 3574 y(In)g(addition)g(to)i(F) -8 b(estiv)j(al)30 b(sp)s(eci\014c)g(sources)g(y)m(ou)h(will)c(also)k (need)150 3732 y Fi(A)h(UNIX)f(machine)630 3842 y Fo(Curren)m(tly)h(w)m (e)h(ha)m(v)m(e)i(compiled)d(and)h(tested)h(the)f(system)h(under)e (Solaris)f(\(2.5\(.1\),)38 b(2.6,)630 3952 y(2.7)31 b(and)f(2.8\),)i (SunOS)27 b(\(4.1.3\),)33 b(F)-8 b(reeBSD)32 b(3.x,)f(4.x)g(Lin)m(ux)d (\(Redhat)j(4.1,)h(5.0,)f(5.1,)h(5.2,)630 4061 y(6.[012],)42 b(7.[01])e(and)d(other)g(Lin)m(ux)f(distributions\),)g(and)h(it)g (should)f(w)m(ork)h(under)f(OSF)630 4171 y(\(Dec)23 b(Alphas\))e(SGI)h (\(Irix\),)h(HPs)e(\(HPUX\).)i(But)f(an)m(y)g(standard)f(UNIX)h(mac)m (hine)g(should)630 4280 y(b)s(e)34 b(acceptable.)56 b(W)-8 b(e)36 b(ha)m(v)m(e)g(no)m(w)f(successfully)d(p)s(orted)j(this)e(v)m (ersion)i(to)g(Windo)m(ws)f(NT)630 4390 y(nad)g(Windo)m(ws)g(95)h (\(using)e(the)i(Cygn)m(us)f(GNU)h(win32)f(en)m(vironmen)m(t\).)53 b(This)33 b(is)g(still)g(a)630 4499 y(y)m(oung)e(p)s(ort)e(but)h(seems) h(to)g(w)m(ork.)150 4658 y Fi(A)h(C)p Fk(++)g Fi(c)-5 b(ompiler)630 4768 y Fo(Note)30 b(that)g(C)p Fk(++)e Fo(is)h(not)g(v)m(ery)h(p)s(ortable)e(ev)m(en)i(b)s(et)m(w)m(een)f (di\013eren)m(t)g(v)m(ersions)f(of)i(the)f(com-)630 4877 y(piler)22 b(from)i(the)h(same)g(v)m(endor.)39 b(Although)23 b(w)m(e'v)m(e)j(tried)e(v)m(ery)h(hard)e(to)j(mak)m(e)f(the)g(system) 630 4987 y(p)s(ortable,)39 b(w)m(e)g(kno)m(w)f(it)f(is)g(v)m(ery)i (unlik)m(ely)c(to)k(compile)e(without)g(c)m(hange)i(except)g(with)630 5096 y(compilers)29 b(that)i(ha)m(v)m(e)g(already)f(b)s(een)g(tested.) 42 b(The)29 b(curren)m(tly)h(tested)h(systems)f(are)705 5230 y Fm(\017)60 b Fo(Sun)38 b(Sparc)h(Solaris)f(2.5,)43 b(2.5.1,)g(2.6,)g(2.7:)60 b(GCC)39 b(2.7.2,)44 b(egcs)d(1.1.1,)i(egcs)e (1.1.2,)810 5340 y(GCC)30 b(2.95.1)p eop %%Page: 14 16 14 15 bop 150 -116 a Fo(14)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)705 299 y Fm(\017)60 b Fo(Sun)29 b(Sparc)h(SunOS)e(4.1.3:)42 b(GCC)30 b(2.7.2)705 434 y Fm(\017)60 b Fo(F)-8 b(reeBSD)32 b(for)e(In)m(tel)g(3.x)h(and)f (4.x)h(GCC)f(2.95.1,)j(GCC)d(3.0)705 570 y Fm(\017)60 b Fo(Lin)m(ux)23 b(for)i(In)m(tel)g(\(RedHat)h(4.1/5.0/5.1/5.2/)q(6.0)q (\):)44 b(GCC)25 b(2.7.2,)j(GCC)c(2.7.2/egcs-)810 679 y(1.0.2,)32 b(egcs)g(1.1.1,)g(egcs-1.1.2,)i(GCC)c(2.95.[123],)k(GCC)c Fk(")p Fo(2.96)p Fk(")p Fo(,)i(GCC)e(3.0)705 814 y Fm(\017)60 b Fo(Windo)m(ws)37 b(NT)g(4.0:)57 b(GCC)37 b(2.7.2)j(plus)35 b(egcs)k(\(from)f(Cygn)m(us)f(GNU)h(win32)f(b19\),)810 924 y(Visual)29 b(C)p Fk(++)g Fo(PR)m(O)h(v5.0,)i(Visual)d(C)p Fk(++)g Fo(v6.0)630 1085 y(Note)j(if)d(GCC)h(w)m(orks)g(on)h(one)f(v)m (ersion)g(of)h(Unix)e(it)h(usually)e(w)m(orks)i(on)g(others.)630 1220 y(W)-8 b(e)36 b(ha)m(v)m(e)f(compiled)e(b)s(oth)h(the)g(sp)s(eec)m (h)h(to)s(ols)f(and)g(F)-8 b(estiv)j(al)34 b(under)f(Windo)m(ws)h(NT)g (4.0)630 1330 y(and)c(Windo)m(ws)f(95)i(using)e(the)i(GNU)g(to)s(ols)f (a)m(v)-5 b(ailable)30 b(from)g(Cygn)m(us.)870 1460 y Fk(ftp://ftp.cygnus.com/pub)o(/gnu)o(-win)o(32/)o(.)150 1621 y Fi(GNU)i(make)630 1730 y Fo(Due)d(to)g(there)g(b)s(eing)f(to)s (o)h(man)m(y)g(di\013eren)m(t)f Fk(make)g Fo(programs)g(out)h(there)g (w)m(e)g(ha)m(v)m(e)h(tested)630 1840 y(the)j(system)h(using)d(GNU)j (mak)m(e)g(on)f(all)f(systems)h(w)m(e)h(use.)49 b(Others)32 b(ma)m(y)i(w)m(ork)f(but)f(w)m(e)630 1949 y(kno)m(w)e(GNU)h(mak)m(e)h (do)s(es.)150 2110 y Fi(A)n(udio)g(har)-5 b(dwar)g(e)630 2220 y Fo(Y)d(ou)48 b(can)g(use)f(F)-8 b(estiv)j(al)48 b(without)f(audio)f(output)i(hardw)m(are)f(but)g(it)g(do)s(esn't)g (sound)630 2330 y(v)m(ery)58 b(go)s(o)s(d)g(\(though)g(admittedly)f(y)m (ou)h(can)g(hear)g(less)f(problems)f(with)h(it\).)123 b(A)630 2439 y(n)m(um)m(b)s(er)47 b(of)i(audio)f(systems)g(are)h(supp)s (orted)e(\(directly)h(inherited)e(from)i(the)h(audio)630 2549 y(supp)s(ort)k(in)h(the)h(Edin)m(burgh)e(Sp)s(eec)m(h)h(T)-8 b(o)s(ols)55 b(Library\):)89 b(NCD's)55 b(NAS)g(\(formerly)630 2658 y(called)48 b(netaudio\))g(a)h(net)m(w)m(ork)h(transparen)m(t)f (audio)f(system)g(\(whic)m(h)g(can)h(b)s(e)f(found)630 2768 y(at)f Fk(ftp://ftp.x.org/contrib/au)o(dio)o(/nas)o(/)p Fo(\);)i(`)p Fk(/dev/audio)p Fo(')c(\(at)j(8k)f(ula)m(w)f(and)630 2878 y(8/16bit)37 b(linear\),)g(found)f(on)g(Suns,)h(Lin)m(ux)e(mac)m (hines)h(and)f(F)-8 b(reeBSD;)39 b(and)d(a)g(metho)s(d)630 2987 y(allo)m(wing)26 b(arbitrary)g(UNIX)h(commands.)39 b(See)27 b(Chapter)g(23)h([Audio)e(output],)i(page)f(103.)275 3175 y(Earlier)38 b(v)m(ersions)g(of)i(F)-8 b(estiv)j(al)40 b(mistak)m(enly)f(o\013ered)h(a)g(command)f(line)f(editor)h(in)m (terface)h(to)h(the)150 3284 y(GNU)e(pac)m(k)-5 b(age)40 b(readline,)e(but)f(due)h(to)g(con\015icts)g(with)f(the)h(GNU)g(Public) e(Licence)i(and)g(F)-8 b(estiv)j(al's)150 3394 y(licence)33 b(this)f(in)m(terface)i(w)m(as)g(remo)m(v)m(ed)h(in)d(v)m(ersion)h (1.3.1.)51 b(Ev)m(en)34 b(F)-8 b(estiv)j(al's)34 b(new)f(free)g (licence)g(w)m(ould)150 3504 y(cause)k(problems)f(as)h(readline)e(supp) s(ort)g(w)m(ould)h(restrict)h(F)-8 b(estiv)j(al)37 b(linking)d(with)h (non-free)i(co)s(de.)61 b(A)150 3613 y(new)26 b(command)g(line)e(in)m (terface)j(based)f(on)g(editline)e(w)m(as)j(pro)m(vided)e(that)i (o\013ers)f(similar)e(functionalit)m(y)-8 b(.)150 3723 y(Editline)25 b(remains)h(a)i(compilation)e(option)h(as)h(it)f(is)f (probably)g(not)i(y)m(et)g(as)g(p)s(ortable)f(as)g(w)m(e)h(w)m(ould)f (lik)m(e)150 3832 y(it)j(to)h(b)s(e.)275 3968 y(In)38 b(addition)g(to)i(the)g(ab)s(o)m(v)m(e,)j(in)38 b(order)h(to)h(pro)s (cess)f(the)g(do)s(cumen)m(tation)g(y)m(ou)h(will)d(need)i(`)p Fk(TeX)p Fo(',)150 4078 y(`)p Fk(dvips)p Fo(')23 b(\(or)i(similar\),)e (GNU's)i(`)p Fk(makeinfo)p Fo(')d(\(part)j(of)f(the)g(texinfo)g(pac)m (k)-5 b(age\))27 b(and)c(`)p Fk(texi2html)p Fo(')f(whic)m(h)150 4188 y(is)29 b(a)m(v)-5 b(ailable)30 b(from)g Fk (http://wwwcn.cern.ch/dci)o(/tex)o(i2ht)o(ml/)o Fo(.)275 4324 y(Ho)m(w)m(ev)m(er)36 b(the)f(do)s(cumen)m(t)f(\014les)g(are)h (also)f(a)m(v)-5 b(ailable)34 b(pre-pro)s(cessed)g(in)m(to,)i(p)s (ostscript,)e(D)m(VI,)i(info)150 4433 y(and)30 b(h)m(tml)f(as)i(part)f (of)h(the)f(distribution)d(in)i(`)p Fk(festdoc-1.4.X.tar.gz)p Fo('.)275 4570 y(Ensure)c(y)m(ou)i(ha)m(v)m(e)h(a)f(fully)d(installed)g (and)i(w)m(orking)g(v)m(ersion)g(of)h(y)m(our)g(C)p Fk(++)e Fo(compiler.)38 b(Most)28 b(of)f(the)150 4679 y(problems)22 b(p)s(eople)h(ha)m(v)m(e)j(had)d(in)g(installing)e(F)-8 b(estiv)j(al)25 b(ha)m(v)m(e)g(b)s(een)e(due)h(to)g(incomplete)g(or)g (bad)f(compiler)150 4789 y(installation.)45 b(It)33 b(migh)m(t)f(b)s(e) g(w)m(orth)h(c)m(hec)m(king)g(if)e(the)i(follo)m(wing)e(program)h(w)m (orks)h(if)e(y)m(ou)i(don't)g(kno)m(w)150 4898 y(if)c(an)m(y)m(one)j (has)e(used)g(y)m(our)g(C)p Fk(++)f Fo(installation)g(b)s(efore.)390 5029 y Fk(#include)46 b()390 5132 y(int)h(main)g(\(int)f (argc,)h(char)f(**argv\))390 5236 y({)533 5340 y(cout)h(<<)g("Hello)f (world\\n";)p eop %%Page: 15 17 15 16 bop 150 -116 a Fo(Chapter)30 b(6:)41 b(Installation)2590 b(15)390 299 y Fk(})275 432 y Fo(Unpac)m(k)43 b(all)f(the)h(source)g (\014les)f(in)g(a)i(new)e(directory)-8 b(.)79 b(The)42 b(directory)h(will)d(then)j(con)m(tain)h(t)m(w)m(o)150 542 y(sub)s(directories)390 669 y Fk(speech_tools/)390 773 y(festival/)150 1027 y Fn(6.2)68 b(Con\014guration)275 1218 y Fo(First)35 b(ensure)f(y)m(ou)i(ha)m(v)m(e)h(a)f(compiled)e(v)m (ersion)i(of)f(the)h(Edin)m(burgh)d(Sp)s(eec)m(h)i(T)-8 b(o)s(ols)36 b(Library)-8 b(.)55 b(See)150 1328 y(`)p Fk(speech_tools/INSTALL)p Fo(')25 b(for)30 b(instructions.)275 1461 y(The)j(system)h(no)m(w)h(supp)s(orts)d(the)i(standard)f(GNU)i(`)p Fk(configure)p Fo(')d(metho)s(d)i(for)g(set)g(up.)51 b(In)34 b(most)150 1571 y(cases)27 b(this)d(will)f(automatically)j (con\014gure)f(festiv)-5 b(al)25 b(for)h(y)m(our)g(particular)e (system.)39 b(In)25 b(most)h(cases)h(y)m(ou)150 1680 y(need)j(only)g(t)m(yp)s(e)390 1808 y Fk(gmake)275 1941 y Fo(and)36 b(the)i(system)f(will)d(con\014gure)j(itself)f(and)h (conpile,)h(\(note)g(y)m(ou)g(need)f(to)h(ha)m(v)m(e)g(compiled)e(the) 150 2051 y(Edin)m(burgh)27 b(Sp)s(eec)m(h)k(T)-8 b(o)s(ols)29 b(`)p Fk(speech_tools-1.2.2)p Fo(')d(\014rst.)275 2184 y(In)34 b(some)i(case)h(hand)d(con\014gure)h(is)f(require.)55 b(All)34 b(of)i(the)f(con\014guration)g(c)m(hoise)h(are)g(held)e(in)g (the)150 2294 y(\014le)29 b(`)p Fk(config/config)p Fo(')275 2427 y(F)-8 b(or)43 b(the)g(most)g(part)g(F)-8 b(estiv)j(al)42 b(con\014guration)h(inherits)d(the)j(con\014guration)f(from)g(y)m(our)h (sp)s(eec)m(h)150 2537 y(to)s(ols)38 b(con\014g)h(\014le)e(\(`)p Fk(../speech_tools/config/con)o(fig)p Fo('\).)59 b(Additional)35 b(optional)j(mo)s(dules)e(ma)m(y)150 2646 y(b)s(e)30 b(added)f(b)m(y)i(adding)e(them)h(to)h(the)g(end)e(of)i(y)m(our)f (con\014g)h(\014le)e(e.g.)390 2774 y Fk(ALSO_INCLUDE)44 b(+=)k(clunits)275 2907 y Fo(Adding)26 b(and)h(new)h(mo)s(dule)e(here)i (will)d(treat)k(is)e(as)h(a)h(new)e(directory)h(in)e(the)i(`)p Fk(src/modules/)p Fo(')e(and)150 3017 y(compile)34 b(it)g(in)m(to)h (the)g(system)h(in)d(the)i(same)h(w)m(a)m(y)g(the)f Fk(OTHER_DIRS)d Fo(feature)j(w)m(as)h(used)e(in)f(previous)150 3126 y(v)m(ersions.)275 3259 y(If)g(the)h(compilation)e(directory)h(b)s(eing)g(accessed)i(b)m (y)e(NFS)h(or)g(if)f(y)m(ou)h(use)f(an)h(automoun)m(ter)g(\(e.g.)150 3369 y(amd\))39 b(it)g(is)f(recommend)h(to)h(explicitly)d(set)j(the)f (v)-5 b(ariable)38 b Fk(FESTIVAL_HOME)e Fo(in)i(`)p Fk(config/config)p Fo('.)150 3479 y(The)30 b(command)g Fk(pwd)f Fo(is)h(not)h(reliable)d (when)h(a)i(directory)f(ma)m(y)h(ha)m(v)m(e)h(m)m(ultiple)c(names.)275 3612 y(There)g(is)h(a)h(simple)d(test)j(suite)f(with)f(F)-8 b(estiv)j(al)30 b(but)e(it)h(requires)f(the)i(three)f(basic)g(v)m (oices)h(and)f(their)150 3722 y(resp)s(ectiv)m(e)h(lexicons)g(install)e (b)s(efore)i(it)g(will)e(w)m(ork.)41 b(Th)m(us)29 b(y)m(ou)i(need)f(to) h(install)390 3849 y Fk(festlex_CMU.tar.gz)390 3953 y (festlex_OALD.tar.gz)390 4057 y(festlex_POSLEX.tar.gz)390 4160 y(festvox_don.tar.gz)390 4264 y(festvox_kedlpc16k.tar.gz)390 4368 y(festvox_rablpc16k.tar.gz)275 4501 y Fo(If)e(these)i(are)g (installed)d(y)m(ou)j(can)g(test)g(the)f(installation)f(with)390 4629 y Fk(gmake)46 b(test)275 4762 y Fo(T)-8 b(o)30 b(simply)e(mak)m(e) k(it)e(run)e(with)i(a)g(male)g(US)g(Ebglish)e(v)m(oiuce)j(it)f(is)g (su\016cien)m(t)f(to)j(install)c(just)390 4890 y Fk(festlex_CMU.tar.gz) 390 4993 y(festlex_POSLEX.tar.gz)390 5097 y(festvox_kallpc16k.tar.gz) 275 5230 y Fo(Note)f(that)g(the)g(single)e(most)h(common)h(reason)f (for)h(problems)d(in)h(compilation)g(and)h(linking)d(found)150 5340 y(amongst)41 b(the)f(b)s(eta)g(testers)h(w)m(as)g(a)f(bad)f (installation)f(of)j(GNU)f(C)p Fk(++)p Fo(.)69 b(If)40 b(y)m(ou)g(get)h(man)m(y)f(strange)p eop %%Page: 16 18 16 17 bop 150 -116 a Fo(16)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(errors)34 b(in)g(G)p Fk(++)g Fo(library)f(header)h(\014les)g(or)h(link)d(errors)j (it)f(is)g(w)m(orth)h(c)m(hec)m(king)g(that)h(y)m(our)e(system)h(has) 150 408 y(the)j(compiler,)h(header)f(\014les)f(and)h(run)m(time)f (libraries)e(prop)s(erly)h(installed.)62 b(This)37 b(ma)m(y)h(b)s(e)g (c)m(hec)m(k)m(ed)150 518 y(b)m(y)c(compiling)e(a)i(simple)e(program)h (under)g(C)p Fk(++)g Fo(and)g(also)h(\014nding)e(out)i(if)f(an)m(y)m (one)i(at)g(y)m(our)e(site)h(has)150 628 y(ev)m(er)e(used)f(the)h (installation.)43 b(Most)32 b(of)g(these)g(installation)e(problems)g (are)i(caused)g(b)m(y)f(upgrading)f(to)150 737 y(a)g(new)m(er)f(v)m (ersion)f(of)i(libg)p Fk(++)d Fo(without)h(remo)m(ving)h(the)h(older)e (v)m(ersion)h(so)g(a)h(mixed)e(v)m(ersion)g(of)i(the)f(`)p Fk(.h)p Fo(')150 847 y(\014les)g(exist.)275 986 y(Although)c(w)m(e)i (ha)m(v)m(e)h(tried)d(v)m(ery)i(hard)f(to)h(ensure)e(that)i(F)-8 b(estiv)j(al)27 b(compiles)e(with)h(no)g(w)m(arnings)f(this)150 1096 y(is)k(not)i(p)s(ossible)d(under)h(some)i(systems.)275 1236 y(Under)26 b(SunOS)g(the)h(system)h(include)e(\014les)g(do)i(not)g (declare)f(a)h(n)m(um)m(b)s(er)f(of)g(system)h(pro)m(vided)f(func-)150 1345 y(tions.)47 b(This)31 b(a)i(bug)f(in)f(Sun's)g(include)g(\014les.) 46 b(This)31 b(will)f(causes)j(w)m(arnings)e(lik)m(e)h Fk(")p Fo(implicit)d(de\014nition)150 1455 y(of)i(fprin)m(tf)p Fk(")p Fo(.)38 b(These)30 b(are)h(harmless.)275 1594 y(Under)k(Lin)m(ux)g(a)j(w)m(arning)d(at)j(link)c(time)i(ab)s(out)h (reducing)e(the)i(size)g(of)f(some)h(sym)m(b)s(ols)f(often)h(is)150 1704 y(pro)s(duced.)44 b(This)31 b(is)g(harmless.)44 b(There)32 b(is)f(often)i(o)s(ccasional)f(w)m(arnings)e(ab)s(out)i (some)h(so)s(c)m(k)m(et)h(system)150 1814 y(function)29 b(ha)m(ving)h(an)g(incorrect)h(argumen)m(t)f(t)m(yp)s(e,)h(this)e(is)h (also)g(harmless.)275 1953 y(The)22 b(sp)s(eec)m(h)g(to)s(ols)h(and)f (festiv)-5 b(al)22 b(compile)f(under)g(Windo)m(ws95)i(or)f(Windo)m(ws)g (NT)h(with)e(Visual)g(C)p Fk(++)150 2063 y Fo(v5.0)29 b(using)e(the)i(Microsoft)g(`)p Fk(nmake)p Fo(')e(mak)m(e)i(program.)40 b(W)-8 b(e'v)m(e)31 b(only)c(done)i(this)e(with)g(the)i(Professonal)150 2172 y(edition,)e(but)f(ha)m(v)m(e)i(no)f(reason)g(to)h(b)s(eliev)m(e)e (that)h(it)g(relies)f(on)g(an)m(ything)h(not)g(in)f(the)h(standard)f (edition.)275 2312 y(In)e(accordance)i(to)g(V)m(C)p Fk(++)e Fo(con)m(v)m(en)m(tions,)j(ob)5 b(ject)26 b(\014les)e(are)h(created)h (with)e(extension)g(.ob)5 b(j,)26 b(executa-)150 2421 y(bles)33 b(with)g(extension)h(.exe)i(and)e(libraries)d(with)i (extension)h(.lib.)51 b(This)33 b(ma)m(y)i(mean)f(that)h(b)s(oth)f (unix)150 2531 y(and)c(Win32)g(v)m(ersions)g(can)h(b)s(e)e(built)f(in)i (the)g(same)h(directory)f(tree,)h(but)f(I)g(w)m(ouldn't)f(rely)h(on)g (it.)275 2671 y(T)-8 b(o)36 b(do)g(this)f(y)m(ou)h(require)f(nmak)m(e)h (Mak)m(e\014les)h(for)f(the)g(system.)58 b(These)36 b(can)g(b)s(e)f (generated)i(from)150 2780 y(the)31 b(gn)m(umak)m(e)g(Mak)m(e\014les,)g (using)e(the)i(command)390 2914 y Fk(gnumake)46 b(VCMakefile)275 3054 y Fo(in)23 b(the)h(sp)s(eec)m(h)p 788 3054 28 4 v 33 w(to)s(ols)h(and)e(festiv)-5 b(al)24 b(directories.)38 b(I)24 b(ha)m(v)m(e)i(only)e(done)g(this)f(under)g(unix,)h(it's)g(p)s (ossible)150 3163 y(it)30 b(w)m(ould)f(w)m(ork)i(under)d(the)j(cygn)m (us)f(gn)m(u)m(win32)g(system.)275 3303 y(If)h(`)p Fk(make.depend)p Fo(')f(\014les)i(exist)g(\(i.e.)47 b(if)31 b(y)m(ou)i(ha)m(v)m(e)h (done)e(`)p Fk(gnumake)c(depend)p Fo(')j(in)h(unix\))e(equiv)-5 b(alen)m(t)150 3412 y(`)p Fk(vc_make.depend)p Fo(')25 b(\014les)j(will)e(b)s(e)i(created,)j(if)c(not)i(the)g(V)m(CMak)m (e\014les)h(will)c(not)j(con)m(tain)g(dep)s(endency)150 3522 y(information)c(for)h(the)g(`)p Fk(.cc)p Fo(')g(\014les.)39 b(The)25 b(result)h(will)d(b)s(e)j(that)h(y)m(ou)g(can)f(compile)g(the) g(system)h(once,)h(but)150 3632 y(c)m(hanges)j(will)d(not)j(cause)g (the)f(correct)i(things)d(to)i(b)s(e)f(rebuilt.)275 3771 y(In)i(order)g(to)i(compile)e(from)g(the)h(DOS)g(command)g(line)e (using)g(Visual)h(C)p Fk(++)g Fo(y)m(ou)h(need)g(to)g(ha)m(v)m(e)i(a) 150 3881 y(collection)e(of)h(en)m(vironmen)m(t)g(v)-5 b(ariables)32 b(set.)52 b(In)33 b(Windo)m(ws)g(NT)g(there)h(is)f(an)h (instalation)e(option)h(for)150 3990 y(Visual)28 b(C)p Fk(++)h Fo(whic)m(h)f(sets)i(these)g(globally)-8 b(.)39 b(Under)29 b(Windo)m(ws95)h(or)f(if)g(y)m(ou)h(don't)f(ask)h(for)g (them)f(to)i(b)s(e)150 4100 y(set)g(globally)e(under)g(NT)h(y)m(ou)h (need)f(to)h(run)390 4234 y Fk(vcvars32.bat)275 4373 y Fo(See)f(the)h(V)m(C)p Fk(++)f Fo(do)s(cumen)m(tation)g(for)g(more)h (details.)275 4513 y(Once)115 b(y)m(ou)g(ha)m(v)m(e)h(the)g(source)f (trees)h(with)d(V)m(CMak)m(e\014les)j(somewhere)f(visible)150 4622 y(from)102 b(Windo)m(ws,)120 b(y)m(ou)102 b(need)g(to)h(cop)m(y)g (`)p Fk(peech_tools\\config\\vc_confi)o(g-d)o(ist)p Fo(')96 b(to)150 4732 y(`)p Fk(speech_tools\\config\\vc_co)o(nfig)o Fo(')30 b(and)36 b(edit)f(it)g(to)i(suit)d(y)m(our)i(lo)s(cal)f (situation.)56 b(Then)35 b(do)h(the)150 4842 y(same)31 b(with)e(`)p Fk(festival\\config\\vc_config)o(-di)o(st)p Fo('.)275 4981 y(The)63 b(thing)g(most)h(lik)m(ely)e(to)j(need)f(c)m (hanging)f(is)g(the)h(de\014nition)e(of)i Fk(FESTIVAL_HOME)c Fo(in)150 5091 y(`)p Fk(festival\\config\\vc_config)o(_mak)o(e_ru)o (les)o Fo(')31 b(whic)m(h)k(needs)h(to)h(p)s(oin)m(t)e(to)i(where)f(y)m (ou)g(ha)m(v)m(e)i(put)150 5200 y(festiv)-5 b(al.)275 5340 y(No)m(w)31 b(y)m(ou)f(can)h(compile.)40 b(cd)30 b(to)h(the)g(sp)s(eec)m(h)p 1841 5340 V 32 w(to)s(ols)g(directory)e (and)h(do)p eop %%Page: 17 19 17 18 bop 150 -116 a Fo(Chapter)30 b(6:)41 b(Installation)2590 b(17)390 299 y Fk(nmake)46 b(/nologo)g(/fVCMakefile)150 549 y Fo(and)30 b(the)g(library)-8 b(,)29 b(the)i(programs)f(in)f(main) g(and)h(the)g(test)h(programs)f(should)f(b)s(e)150 658 y(compiled.)275 799 y(The)c(tests)i(can't)g(b)s(e)e(run)g (automatically)g(under)g(Windo)m(ws.)38 b(A)26 b(simple)e(test)j(to)g (c)m(hec)m(k)g(that)g(things)150 908 y(are)k(probably)d(OK)i(is:)390 1043 y Fk(main\\na_play)44 b(testsuite\\data\\ch_wave.wav)150 1293 y Fo(whic)m(h)29 b(reads)h(and)g(pla)m(ys)g(a)h(w)m(a)m(v)m (eform.)275 1543 y(Next)g(go)g(in)m(to)f(the)h(festiv)-5 b(al)29 b(directory)h(and)g(do)390 1678 y Fk(nmake)46 b(/nologo)g(/fVCMakefile)150 1928 y Fo(to)31 b(build)c(festiv)-5 b(al.)40 b(When)31 b(it's)f(\014nished,)e(and)h(assuming)g(y)m(ou)i(ha) m(v)m(e)h(the)150 2037 y(v)m(oices)f(and)f(lexicons)f(unpac)m(k)m(ed)i (in)e(the)h(righ)m(t)g(place,)h(festiv)-5 b(al)30 b(should)e(run)h (just)h(as)g(under)f(unix.)275 2178 y(W)-8 b(e)45 b(should)e(remind)f (y)m(ou)j(that)g(the)g(NT/95)h(p)s(orts)e(are)h(still)d(y)m(oung)j(and) f(there)h(ma)m(y)g(y)m(et)h(b)s(e)150 2287 y(problems)41 b(that)i(w)m(e'v)m(e)i(not)e(found)e(y)m(et.)79 b(W)-8 b(e)44 b(only)e(recommend)h(the)g(use)f(the)h(sp)s(eec)m(h)g(to)s(ols)g (and)150 2397 y(F)-8 b(estiv)j(al)31 b(under)d(Windo)m(ws)i(if)f(y)m (ou)i(ha)m(v)m(e)g(signi\014can)m(t)f(exp)s(erience)g(in)f(C)p Fk(++)g Fo(under)g(those)i(platforms.)275 2537 y(Most)e(of)g(the)g(mo)s (dules)e(`)p Fk(src/modules)p Fo(')f(are)j(actually)f(optional)g(and)g (the)h(system)g(could)f(b)s(e)g(com-)150 2647 y(piled)39 b(without)i(them.)74 b(The)41 b(basic)g(set)h(could)e(b)s(e)h(reduced)g (further)f(if)h(certain)g(facilities)f(are)i(not)150 2756 y(desired.)49 b(P)m(articularly:)c(`)p Fk(donovan)p Fo(')32 b(whic)m(h)h(is)f(only)h(required)f(if)g(the)i(dono)m(v)-5 b(an)34 b(v)m(oice)g(is)f(used;)h(`)p Fk(rxp)p Fo(')150 2866 y(if)29 b(no)h(XML)g(parsing)f(is)g(required)f(\(e.g.)42 b(Sable\);)30 b(and)f(`)p Fk(parser)p Fo(')g(if)g(no)h(sto)s(c)m (hastic)h(paring)e(is)g(required)150 2976 y(\(this)e(parser)h(isn't)f (used)h(for)g(an)m(y)g(of)g(our)g(curren)m(tly)f(released)h(v)m (oices\).)41 b(Actually)28 b(ev)m(en)h(`)p Fk(UniSyn)p Fo(')e(and)150 3085 y(`)p Fk(UniSyn_diphone)p Fo(')34 b(could)i(b)s(e)h(remo)m(v)m(ed)h(if)e(some)h(external)g(w)m(a)m(v)m (eform)i(syn)m(thesizer)e(is)f(b)s(eing)g(used)150 3195 y(\(e.g.)44 b(MBR)m(OLA\))33 b(or)e(some)g(alternativ)m(e)h(one)g(lik)m (e)e(`)p Fk(OGIresLPC)p Fo('.)41 b(Remo)m(ving)31 b(un)m(used)f(mo)s (dules)g(will)150 3304 y(mak)m(e)25 b(the)e(festiv)-5 b(al)23 b(binary)f(smaller)g(and)h(\(p)s(oten)m(tially\))g(start)h(up)f (faster)h(but)f(don't)g(exp)s(ect)h(to)s(o)h(m)m(uc)m(h.)150 3414 y(Y)-8 b(ou)31 b(can)g(delete)f(these)h(b)m(y)f(c)m(hanging)h(the) f Fk(BASE_DIRS)e Fo(v)-5 b(ariable)29 b(in)g(`)p Fk (src/modules/Makefile)p Fo('.)150 3686 y Fn(6.3)68 b(Site)46 b(initialization)275 3885 y Fo(Once)28 b(compiled)f(F)-8 b(estiv)j(al)28 b(ma)m(y)h(b)s(e)f(further)f(customized)h(for)g (particular)f(sites.)40 b(A)m(t)29 b(start)g(up)e(time)150 3994 y(F)-8 b(estiv)j(al)38 b(loads)g(the)g(\014le)f(`)p Fk(init.scm)p Fo(')g(from)h(its)f(library)f(directory)-8 b(.)64 b(This)36 b(\014le)h(further)g(loads)h(other)150 4104 y(necessary)33 b(\014les)f(suc)m(h)h(as)g(phoneset)g (descriptions,)f(duration)g(parameters,)i(in)m(tonation)e(parameters,) 150 4213 y(de\014nitions)i(of)i(v)m(oices)h(etc.)59 b(It)36 b(will)e(also)i(load)f(the)i(\014les)e(`)p Fk(sitevars.scm)p Fo(')e(and)j(`)p Fk(siteinit.scm)p Fo(')d(if)150 4323 y(they)24 b(exist.)39 b(`)p Fk(sitevars.scm)p Fo(')21 b(is)i(loaded)h(after)h(the)f(basic)f(Sc)m(heme)i(library)d(functions)g (are)j(loaded)f(but)150 4432 y(b)s(efore)34 b(an)m(y)g(of)h(the)f (festiv)-5 b(al)34 b(related)g(functions)f(are)h(loaded.)52 b(This)33 b(\014le)g(is)g(in)m(tended)g(to)i(set)g(v)-5 b(arious)150 4542 y(path)30 b(names)h(b)s(efore)f(v)-5 b(arious)29 b(subsystems)h(are)h(loaded.)41 b(T)m(ypically)28 b(v)-5 b(ariables)30 b(suc)m(h)g(as)h Fk(lexdir)d Fo(\(the)150 4652 y(directory)21 b(where)g(the)g(lexicons)f(are)i(held\),)g(and)f Fk(voices_dir)d Fo(\(p)s(oin)m(ting)i(to)i(v)m(oice)g(directories\))f (should)150 4761 y(b)s(e)30 b(reset)h(here)f(if)f(necessary)-8 b(.)275 4902 y(The)23 b(default)g(installation)e(will)g(try)j(to)g (\014nd)f(its)g(lexicons)g(and)g(v)m(oices)h(automatically)g(based)f (on)h(the)150 5011 y(v)-5 b(alue)23 b(of)g Fk(load-path)e Fo(\(this)h(is)g(deriv)m(ed)g(from)h Fk(FESTIVAL_HOME)c Fo(at)24 b(compilation)e(time)h(or)g(b)m(y)g(using)f(the)150 5121 y Fk(--libdir)h Fo(at)k(run-time\).)38 b(If)25 b(the)g(v)m(oices)i (and)e(lexicons)f(ha)m(v)m(e)j(b)s(een)e(unpac)m(k)m(ed)g(in)m(to)h (sub)s(directories)d(of)150 5230 y(the)i(library)e(directory)i(\(the)h (default\))f(then)g(no)g(site)g(sp)s(eci\014c)f(initialization)e(of)j (the)h(ab)s(o)m(v)m(e)g(pathnames)150 5340 y(will)i(b)s(e)h(necessary) -8 b(.)p eop %%Page: 18 20 18 19 bop 150 -116 a Fo(18)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(The)k(second)h(site)g (sp)s(eci\014c)f(\014le)g(is)g(`)p Fk(siteinit.scm)p Fo('.)48 b(T)m(ypical)33 b(examples)h(of)g(lo)s(cal)f(initialization) 150 408 y(are)28 b(as)g(follo)m(ws.)39 b(The)27 b(default)g(audio)f (output)i(metho)s(d)f(is)f(NCD's)i(NAS)g(system)f(if)g(that)h(is)f (supp)s(orted)150 518 y(as)f(that's)h(what)f(w)m(e)h(use)f(normally)e (in)h(CSTR.)g(If)h(it)f(is)g(not)i(supp)s(orted,)e(an)m(y)i(hardw)m (are)e(sp)s(eci\014c)g(mo)s(de)150 628 y(is)34 b(the)h(default)f (\(e.g.)56 b(sun16audio,)35 b(freebas16audio,)i(lin)m(ux16audio)c(or)h (mpla)m(y)m(eraudio\).)54 b(But)35 b(that)150 737 y(default)f(is)g (just)g(a)i(setting)f(in)e(`)p Fk(init.scm)p Fo('.)53 b(If)34 b(for)h(example)f(in)g(y)m(our)h(en)m(vironmen)m(t)f(y)m(ou)h (ma)m(y)h(wish)150 847 y(the)27 b(default)f(audio)g(output)g(metho)s(d) h(to)g(b)s(e)f(8k)i(m)m(ula)m(w)e(through)g(`)p Fk(/dev/audio)p Fo(')f(y)m(ou)i(should)e(add)h(the)150 956 y(follo)m(wing)j(line)g(to)i (y)m(our)f(`)p Fk(siteinit.scm)p Fo(')e(\014le)390 1094 y Fk(\(Parameter.set)44 b('Audio_Method)g('sunaudio\))275 1238 y Fo(Note)d(the)f(use)f(of)h Fk(Parameter.set)d Fo(rather)i(than)h Fk(Parameter.def)c Fo(the)k(second)g(function)f (will)150 1347 y(not)45 b(reset)f(the)h(v)-5 b(alue)44 b(if)f(it)h(is)f(already)h(set.)83 b(Remem)m(b)s(er)44 b(that)g(y)m(ou)h(ma)m(y)g(use)f(the)g(audio)g(meth-)150 1457 y(o)s(ds)c Fk(sun16audio)p Fo(.)68 b Fk(linux16audio)37 b Fo(or)j Fk(freebsd16audio)d Fo(only)i(if)h Fk(NATIVE_AUDIO)d Fo(w)m(as)j(selected)150 1566 y(in)33 b(`)p Fk (speech_tools/config/confi)o(g)p Fo(')c(and)k(y)m(our)i(are)f(on)h(suc) m(h)f(mac)m(hines.)52 b(The)34 b(F)-8 b(estiv)j(al)34 b(v)-5 b(ariable)150 1676 y Fk(*modules*)36 b Fo(con)m(tains)i(a)h (list)e(of)i(all)e(supp)s(orted)g(functions/mo)s(dules)e(in)j(a)g (particular)f(installation)150 1786 y(including)25 b(audio)j(supp)s (ort.)39 b(Chec)m(k)29 b(the)g(v)-5 b(alue)28 b(of)h(that)h(v)-5 b(ariable)27 b(if)h(things)g(aren't)h(what)g(y)m(ou)g(exp)s(ect.)275 1929 y(If)j(y)m(ou)i(are)f(installing)d(on)j(a)h(mac)m(hine)e(whose)h (audio)f(is)g(not)i(directly)d(supp)s(orted)h(b)m(y)h(the)g(sp)s(eec)m (h)150 2039 y(to)s(ols)k(library)-8 b(,)38 b(an)g(external)f(command)h (ma)m(y)g(b)s(e)f(executed)i(to)f(pla)m(y)f(a)h(w)m(a)m(v)m(eform.)64 b(The)37 b(follo)m(wing)150 2148 y(example)g(is)g(for)h(an)f(imaginary) g(mac)m(hine)g(that)h(can)g(pla)m(y)g(audio)e(\014les)h(through)g(a)h (program)g(called)150 2258 y(`)p Fk(adplay)p Fo(')30 b(with)g(argumen)m(ts)h(for)g(sample)g(rate)h(and)e(\014le)g(t)m(yp)s (e.)44 b(When)31 b(pla)m(ying)f(w)m(a)m(v)m(eforms,)i(F)-8 b(estiv)j(al,)150 2367 y(b)m(y)41 b(default,)i(outputs)e(as)g (unheadered)f(w)m(a)m(v)m(eform)i(in)e(nativ)m(e)h(b)m(yte)h(order.)73 b(In)40 b(this)g(example)h(y)m(ou)150 2477 y(w)m(ould)29 b(set)i(up)e(the)i(default)f(audio)f(pla)m(ying)g(mec)m(hanism)h(in)f (`)p Fk(siteinit.scm)p Fo(')e(as)k(follo)m(ws)390 2615 y Fk(\(Parameter.set)44 b('Audio_Method)g('Audio_Command\))390 2719 y(\(Parameter.set)g('Audio_Command)g("adplay)i(-raw)g(-r)h($SR)g ($FILE"\))275 2862 y Fo(F)-8 b(or)25 b Fk(Audio_Command)c Fo(metho)s(d)j(of)h(pla)m(ying)f(w)m(a)m(v)m(eforms)i(F)-8 b(estiv)j(al)24 b(supp)s(orts)f(t)m(w)m(o)j(additional)d(audio)150 2972 y(parameters.)40 b Fk(Audio_Required_Rate)21 b Fo(allo)m(ws)26 b(y)m(ou)h(to)h(use)e(F)-8 b(estiv)j(als)27 b(in)m(ternal)e(sample)h (rate)h(con)m(v)m(er-)150 3081 y(sion)33 b(function)g(to)i(an)m(y)f (desired)f(rate.)52 b(Note)35 b(this)e(ma)m(y)i(not)f(b)s(e)g(as)g(go)s (o)s(d)g(as)g(pla)m(ying)f(the)h(w)m(a)m(v)m(eform)150 3191 y(at)g(the)g(sample)e(rate)j(it)e(is)f(originally)f(created)j(in,) g(but)e(as)i(some)g(hardw)m(are)f(devices)g(are)h(restrictiv)m(e)150 3300 y(in)27 b(what)h(sample)g(rates)h(they)f(supp)s(ort,)g(or)g(ha)m (v)m(e)i(naiv)m(e)e(resample)f(functions)g(this)h(could)f(b)s(e)h (optimal.)150 3410 y(The)40 b(second)h(addition)f(audio)g(parameter)h (is)f Fk(Audio_Required_Format)35 b Fo(whic)m(h)40 b(can)h(b)s(e)f (used)g(to)150 3520 y(sp)s(ecify)25 b(the)i(desired)d(output)j(forms)e (of)i(the)f(\014le.)39 b(The)26 b(default)f(is)h(unheadered)f(ra)m(w,)j (but)d(this)h(ma)m(y)h(b)s(e)150 3629 y(an)m(y)j(of)g(the)h(v)-5 b(alues)29 b(supp)s(orted)f(b)m(y)i(the)g(sp)s(eec)m(h)g(to)s(ols)g (\(including)d(nist,)i(esps,)h(snd,)f(ri\013,)g(ai\013,)h(audlab,)150 3739 y(ra)m(w)g(and,)h(if)e(y)m(ou)i(really)e(w)m(an)m(t)i(it,)f (ascii\).)275 3882 y(F)-8 b(or)39 b(example)f(supp)s(ose)f(y)m(ou)h (run)f(F)-8 b(estiv)j(al)39 b(on)f(a)h(remote)g(mac)m(hine)f(and)g(are) g(not)h(running)d(an)m(y)150 3992 y(net)m(w)m(ork)26 b(audio)f(system)h(and)f(w)m(an)m(t)i(F)-8 b(estiv)j(al)25 b(to)i(cop)m(y)f(\014les)f(bac)m(k)h(to)h(y)m(our)e(lo)s(cal)g(mac)m (hine)g(and)g(simply)150 4101 y(cat)33 b(them)f(to)g(`)p Fk(/dev/audio)p Fo('.)42 b(The)32 b(follo)m(wing)e(w)m(ould)g(do)i (that)g(\(assuming)f(p)s(ermissions)d(for)k(rsh)f(are)150 4211 y(allo)m(w)m(ed\).)390 4349 y Fk(\(Parameter.set)44 b('Audio_Method)g('Audio_Command\))390 4453 y(;;)j(Make)g(output)f (file)h(ulaw)f(8k)h(\(format)f(ulaw)h(implies)f(8k\))390 4556 y(\(Parameter.set)e('Audio_Required_Format)e('ulaw\))390 4660 y(\(Parameter.set)i('Audio_Command)438 4764 y("userhost=`echo)f ($DISPLAY)j(|)h(sed)g('s/:.*$//'`;)e(rcp)i($FILE)f($userhost:$FILE;)d (\\)485 4868 y(rsh)k($userhost)f(\\"cat)g($FILE)g(>/dev/audio\\")f(;)i (rsh)g($userhost)e(\\"rm)i($FILE\\""\))275 5011 y Fo(Note)25 b(there)f(are)g(limits)d(on)j(ho)m(w)g(complex)g(a)g(command)f(y)m(ou)i (w)m(an)m(t)f(to)h(put)e(in)g(the)h Fk(Audio_Command)150 5121 y Fo(string)37 b(directly)-8 b(.)61 b(It)38 b(can)f(get)i(v)m(ery) f(confusing)e(with)g(resp)s(ect)i(to)g(quoting.)62 b(It)38 b(is)e(therefore)i(recom-)150 5230 y(mended)32 b(that)i(once)g(y)m(ou)f (get)h(past)g(a)f(certain)g(complexit)m(y)g(consider)f(writing)f(a)j (simple)d(shell)g(script)150 5340 y(and)f(calling)f(it)h(from)f(the)i Fk(Audio_Command)c Fo(string.)p eop %%Page: 19 21 19 20 bop 150 -116 a Fo(Chapter)30 b(6:)41 b(Installation)2590 b(19)275 299 y(A)26 b(second)g(t)m(ypical)g(customization)h(is)e (setting)h(the)h(default)e(sp)s(eak)m(er.)40 b(Sp)s(eak)m(ers)26 b(dep)s(end)f(on)h(man)m(y)150 408 y(things)36 b(but)f(due)i(to)g(v)-5 b(arious)36 b(licence)g(\(and)g(resource\))h(restrictions)f(y)m(ou)h (ma)m(y)g(only)f(ha)m(v)m(e)i(some)f(di-)150 518 y(phone/nphone)25 b(databases)i(a)m(v)-5 b(ailable)25 b(in)g(y)m(our)h(installation.)37 b(The)26 b(function)e(name)i(that)h(is)e(the)h(v)-5 b(alue)150 628 y(of)29 b Fk(voice_default)d Fo(is)j(called)f(immediately)g(after)i (`)p Fk(siteinit.scm)p Fo(')c(is)i(loaded)h(o\013ering)g(the)h(opp)s (or-)150 737 y(tunit)m(y)i(for)g(y)m(ou)h(to)g(c)m(hange)h(it.)47 b(In)32 b(the)h(standard)e(distribution)e(no)k(c)m(hange)g(should)e(b)s (e)h(required.)45 b(If)150 847 y(y)m(ou)31 b(do)m(wnload)e(all)g(the)i (distributed)c(v)m(oices)k Fk(voice_rab_diphone)26 b Fo(is)j(the)h(default)g(v)m(oice.)42 b(Y)-8 b(ou)30 b(ma)m(y)150 956 y(c)m(hange)g(this)d(for)h(a)h(site)f(b)m(y)h(adding)e(the)i(follo) m(wing)e(to)i(`)p Fk(siteinit.scm)p Fo(')c(or)k(p)s(er)e(p)s(erson)h(b) m(y)g(c)m(hanging)150 1066 y(y)m(our)k(`)p Fk(.festivalrc)p Fo('.)41 b(F)-8 b(or)33 b(example)e(if)g(y)m(ou)g(wish)f(to)j(c)m (hange)f(the)g(default)f(v)m(oice)h(to)h(the)e(American)150 1176 y(one)g Fk(voice_ked_diphone)390 1304 y(\(set!)46 b(voice_default)f('voice_ked_diphone\))275 1438 y Fo(Note)38 b(the)g(single)e(quote,)41 b(and)c(note)h(that)g(unlik)m(e)e(in)g (early)h(v)m(ersions)g Fk(voice_default)d Fo(is)j(not)h(a)150 1547 y(function)29 b(y)m(ou)i(can)f(call)g(directly)-8 b(.)275 1681 y(A)31 b(second)g(lev)m(el)g(of)h(customization)f(is)f(on) h(a)h(p)s(er)e(user)h(basis.)42 b(After)31 b(loading)f(`)p Fk(init.scm)p Fo(',)g(whic)m(h)150 1791 y(includes)35 b(`)p Fk(sitevars.scm)p Fo(')g(and)i(`)p Fk(siteinit.scm)p Fo(')e(for)i(lo)s(cal)g(installation,)h(F)-8 b(estiv)j(al)38 b(loads)f(the)h(\014le)150 1900 y(`)p Fk(.festivalrc)p Fo(')26 b(from)i(the)h(user's)g(home)f(directory)h(\(if)f(it)g (exists\).)40 b(This)27 b(\014le)h(ma)m(y)h(con)m(tain)g(arbitrary)150 2010 y(F)-8 b(estiv)j(al)31 b(commands.)150 2265 y Fn(6.4)68 b(Chec)l(king)46 b(an)e(installation)275 2457 y Fo(Once)25 b(compiled)f(and)g(site)i(initialization)c(is)i(set)i(up)e(y)m(ou)i (should)d(test)k(to)f(see)g(if)e(F)-8 b(estiv)j(al)26 b(can)f(sp)s(eak)150 2567 y(or)30 b(not.)275 2701 y(Start)g(the)h (system)390 2829 y Fk($)47 b(bin/festival)390 2933 y(Festival)f(Speech) g(Synthesis)f(System)h(1.4.2:release)e(July)j(2001)390 3036 y(Copyright)e(\(C\))i(University)e(of)i(Edinburgh,)e(1996-2001.)g (All)i(rights)f(reserved.)390 3140 y(For)h(details)f(type)g (`\(festival_warranty\)')390 3244 y(festival>)f(^D)275 3378 y Fo(If)30 b(errors)h(o)s(ccur)g(at)h(this)e(stage)i(they)g(are)f (most)h(lik)m(ely)e(to)i(do)f(with)e(pathname)i(problems.)42 b(If)31 b(an)m(y)150 3487 y(error)39 b(messages)h(are)g(prin)m(ted)e (ab)s(out)h(non-existen)m(t)h(\014les)e(c)m(hec)m(k)j(that)f(those)g (pathnames)f(p)s(oin)m(t)f(to)150 3597 y(where)f(y)m(ou)i(in)m(tended)e (them)g(to)i(b)s(e.)63 b(Most)39 b(of)f(the)g(\(default\))g(pathnames)g (are)g(dep)s(enden)m(t)f(on)h(the)150 3707 y(basic)d(library)d(path.)55 b(Ensure)34 b(that)i(is)e(correct.)56 b(T)-8 b(o)36 b(\014nd)d(out)j (what)f(it)g(has)g(b)s(een)f(set)i(to,)h(start)f(the)150 3816 y(system)31 b(without)e(loading)g(the)i(init)d(\014les.)390 3944 y Fk($)47 b(bin/festival)e(-q)390 4048 y(Festival)h(Speech)g (Synthesis)f(System)h(1.4.2:release)e(July)j(2001)390 4152 y(Copyright)e(\(C\))i(University)e(of)i(Edinburgh,)e(1996-2001.)g (All)i(rights)f(reserved.)390 4255 y(For)h(details)f(type)g (`\(festival_warranty\)')390 4359 y(festival>)f(libdir)390 4463 y("/projects/festival/lib/)o(")390 4567 y(festival>)g(^D)275 4701 y Fo(This)28 b(should)g(sho)m(w)j(the)f(pathname)h(y)m(ou)f(set)h (in)e(y)m(our)i(`)p Fk(config/config)p Fo('.)275 4835 y(If)e(the)i(system)g(starts)f(with)f(no)i(errors)e(try)i(to)g(syn)m (thesize)f(something)390 4963 y Fk(festival>)45 b(\(SayText)h("hello)g (world"\))275 5097 y Fo(Some)29 b(\014les)g(are)h(only)f(accessed)i(at) f(syn)m(thesis)f(time)h(so)g(this)e(ma)m(y)i(sho)m(w)g(up)f(other)h (problem)e(path-)150 5206 y(names.)41 b(If)30 b(it)f(talks,)i(y)m (ou're)g(in)e(business,)f(if)i(it)f(do)s(esn't,)i(here)f(are)h(some)g (p)s(ossible)d(problems.)275 5340 y(If)h(y)m(ou)i(get)h(the)e(error)g (message)p eop %%Page: 20 22 20 21 bop 150 -116 a Fo(20)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(Can't)46 b(access)g(NAS)h(server)275 429 y Fo(Y)-8 b(ou)27 b(ha)m(v)m(e)i (selected)f(NAS)f(as)h(the)f(audio)g(output)g(but)g(ha)m(v)m(e)h(no)g (serv)m(er)f(running)e(on)i(that)h(mac)m(hine)150 538 y(or)j(y)m(our)h Fk(DISPLAY)d Fo(or)i Fk(AUDIOSERVER)e Fo(en)m(vironmen)m(t)i(v)-5 b(ariable)30 b(is)g(not)i(set)g(prop)s (erly)d(for)i(y)m(our)g(output)150 648 y(device.)39 b(Either)26 b(set)i(these)f(prop)s(erly)e(or)i(c)m(hange)h(the)g(audio)e(output)g (device)h(in)f(`)p Fk(lib/siteinit.scm)p Fo(')150 758 y(as)31 b(describ)s(ed)d(ab)s(o)m(v)m(e.)275 887 y(Ensure)f(y)m(our)j (audio)e(device)h(actually)g(w)m(orks)g(the)h(w)m(a)m(y)g(y)m(ou)f (think)f(it)h(do)s(es.)40 b(On)28 b(Suns,)g(the)i(audio)150 997 y(output)43 b(device)g(can)g(b)s(e)f(switc)m(hed)h(in)m(to)g(a)g(n) m(um)m(b)s(er)f(of)h(di\013eren)m(t)g(output)f(mo)s(des,)k(sp)s(eak)m (er,)h(jac)m(k,)150 1107 y(headphones.)39 b(If)29 b(this)g(is)f(set)i (to)h(the)e(wrong)g(one)h(y)m(ou)g(ma)m(y)g(not)g(hear)f(the)h(output.) 40 b(Use)30 b(one)g(of)f(Sun's)150 1216 y(to)s(ols)39 b(to)h(c)m(hange)h(this)d(\(try)h(`)p Fk(/usr/demo/SOUND/bin/soundt)o (ool)p Fo('\).)62 b(T)-8 b(ry)39 b(to)h(\014nd)d(an)i(audio)g(\014le) 150 1326 y(indep)s(enden)m(t)29 b(of)j(F)-8 b(estiv)j(al)32 b(and)f(get)i(it)e(to)i(pla)m(y)e(on)h(y)m(our)f(audio.)44 b(Once)32 b(y)m(ou)g(ha)m(v)m(e)h(done)e(that)i(ensure)150 1435 y(that)e(the)g(audio)e(output)h(metho)s(d)g(set)h(in)e(F)-8 b(estiv)j(al)30 b(matc)m(hes)i(that.)275 1565 y(Once)e(y)m(ou)h(ha)m(v) m(e)g(got)h(it)e(talking,)f(test)j(the)e(audio)g(sp)s(o)s(oling)e (device.)390 1689 y Fk(festival>)45 b(\(intro\))275 1819 y Fo(This)28 b(pla)m(ys)i(a)h(short)f(in)m(tro)s(duction)e(of)j(t)m(w)m (o)g(sen)m(tences,)h(sp)s(o)s(oling)c(the)j(audio)e(output.)275 1949 y(Finally)f(exit)i(from)g(F)-8 b(estiv)j(al)31 b(\(b)m(y)f(end)g (of)h(\014le)e(or)h Fk(\(quit\))p Fo(\))f(and)h(test)h(the)g(script)e (mo)s(de)h(with.)390 2073 y Fk($)47 b(examples/saytime)275 2203 y Fo(A)41 b(test)i(suite)e(is)g(included)d(with)j(F)-8 b(estiv)j(al)42 b(but)f(it)g(mak)m(es)h(certain)g(assumptions)e(ab)s (out)h(whic)m(h)150 2313 y(v)m(oices)k(are)g(installed.)81 b(It)45 b(assumes)f(that)h Fk(voice_rab_diphone)40 b Fo(\(`)p Fk(festvox_rabxxxx.tar.gz)p Fo('\))150 2422 y(is)106 b(the)i(default)e(v)m(oice)j(and)d(that)i Fk (voice_ked_diphone)103 b Fo(and)k Fk(voice_don_diphone)150 2532 y Fo(\(`)p Fk(festvox_kedxxxx.tar.gz)p Fo(')26 b(and)k(`)p Fk(festvox_don.tar.gz)p Fo('\))d(are)32 b(installed.)41 b(Also)31 b(lo)s(cal)f(settings)150 2641 y(in)i(y)m(our)i(`)p Fk(festival/lib/siteinit.scm)p Fo(')27 b(ma)m(y)35 b(a\013ect)g(these)f (tests.)52 b(Ho)m(w)m(ev)m(er,)37 b(after)d(installation)150 2751 y(it)c(ma)m(y)h(b)s(e)f(w)m(orth)g(trying)390 2875 y Fk(gnumake)46 b(test)275 3005 y Fo(from)41 b(the)i(`)p Fk(festival/)p Fo(')d(directory)-8 b(.)76 b(This)40 b(will)g(do)i(v)-5 b(arious)41 b(tests)i(including)38 b(basic)k(utterance)150 3114 y(tests)d(and)e(tok)m(enization)i(tests.)65 b(It)38 b(also)g(c)m(hec)m(ks)i(that)e(v)m(oices)h(are)g(installed)c(and)j (that)h(they)f(don't)150 3224 y(in)m(terfere)e(with)f(eac)m(h)i(other.) 58 b(These)36 b(tests)h(are)f(primarily)d(regression)i(tests)i(for)f (the)g(dev)m(elop)s(ers)g(of)150 3334 y(F)-8 b(estiv)j(al,)30 b(to)h(ensure)e(new)g(enhancemen)m(ts)h(don't)g(mess)f(up)g(existing)g (supp)s(orted)f(features.)40 b(They)30 b(are)150 3443 y(not)39 b(designed)g(to)g(test)i(an)e(installation)e(is)h(successful,) j(though)e(if)f(they)h(run)f(correctly)i(it)e(is)h(most)150 3553 y(probable)29 b(the)i(installation)d(has)i(w)m(ork)m(ed.)150 3796 y Fn(6.5)68 b(Y2K)275 3984 y Fo(F)-8 b(estiv)j(al)32 b(comes)i(with)d Fi(no)38 b Fo(w)m(arran)m(t)m(y)c(therefore)f(w)m(e)g (will)d(not)i(mak)m(e)i(an)m(y)f(legal)f(statemen)m(t)i(ab)s(out)150 4094 y(the)g(p)s(erformance)f(of)h(the)g(system.)51 b(Ho)m(w)m(ev)m(er) 36 b(a)f(n)m(um)m(b)s(er)d(of)i(p)s(eople)f(ha)m(v)m(e)i(ask)f(ab)s (out)g(F)-8 b(estiv)j(al)34 b(and)150 4204 y(Y2K)d(compliance,)f(and)f (w)m(e)i(ha)m(v)m(e)h(decided)d(to)i(mak)m(e)h(some)e(commen)m(ts)i(on) e(this.)275 4333 y(Ev)m(ery)h(e\013ort)i(has)e(b)s(een)g(made)h(to)g (ensure)f(that)h(F)-8 b(estiv)j(al)32 b(will)d(con)m(tin)m(ue)j (running)d(as)j(b)s(efore)f(in)m(to)150 4443 y(the)41 b(next)h(millenium.)69 b(Ho)m(w)m(ev)m(er)43 b(ev)m(en)f(if)f(F)-8 b(estiv)j(al)41 b(itself)f(has)h(no)g(problems)f(it)g(is)h(dep)s(enden) m(t)f(on)150 4553 y(the)c(op)s(erating)f(system)h(en)m(vironmen)m(t)f (it)g(is)g(running)e(in.)55 b(During)35 b(compilation)f(dates)i(on)g (\014les)f(are)150 4662 y(imp)s(ortan)m(t)e(and)g(the)h(compilation)e (pro)s(cess)i(ma)m(y)g(not)g(w)m(ork)g(if)e(y)m(our)i(mac)m(hine)f (cannot)i(assign)e(\(rea-)150 4772 y(sonable\))25 b(dates)h(to)g(new)f (\014les.)38 b(A)m(t)26 b(run)e(time)h(there)h(is)e(less)h(dep)s (endence)f(on)h(system)h(dates)f(and)g(times.)150 4881 y(Sp)s(eci\014cally)34 b(times)i(are)h(used)e(in)g(generation)i(of)g (random)e(n)m(um)m(b)s(ers)g(\(where)i(only)e(relativ)m(e)i(time)f(is) 150 4991 y(imp)s(ortan)m(t\))c(and)h(as)g(time)f(stamps)h(in)e(log)i (\014les)f(when)f(festiv)-5 b(al)32 b(runs)g(in)f(serv)m(er)i(mo)s(de,) g(th)m(us)g(w)m(e)g(feel)150 5101 y(it)d(is)f(unlik)m(ely)f(there)j (will)d(b)s(e)h(an)m(y)i(problems.)275 5230 y(Ho)m(w)m(ev)m(er,)36 b(as)e(a)h(sp)s(eec)m(h)e(syn)m(thesizer,)i(F)-8 b(estiv)j(al)34 b(m)m(ust)g(mak)m(e)g(explicit)e(decisions)h(ab)s(out)g(the)h(pro-)150 5340 y(n)m(unciation)k(of)h(dates)h(in)e(the)i(next)f(t)m(w)m(o)i (decades)f(when)e(p)s(eople)h(themselv)m(es)g(ha)m(v)m(e)i(not)e(y)m (et)i(made)p eop %%Page: 21 23 21 22 bop 150 -116 a Fo(Chapter)30 b(6:)41 b(Installation)2590 b(21)150 299 y(suc)m(h)30 b(decisions.)41 b(Most)32 b(p)s(eople)e(are)h (still)d(unsure)i(ho)m(w)g(to)i(read)f(y)m(ears)g(written)f(as)h('01,)h ('04,)h('12,)f(00s,)150 408 y(10s,)h(\(cf.)46 b('86,)33 b(90s\).)46 b(It)32 b(is)f(in)m(teresting)g(to)h(note)h(that)f(while)e (there)i(is)f(a)h(con)m(v)m(enien)m(t)h(short)e(name)h(for)150 518 y(the)h(last)f(decade)h(of)g(the)g(t)m(w)m(en)m(tieth)g(cen)m(tury) -8 b(,)34 b(the)f Fk(")p Fo(nin)m(ties)p Fk(")d Fo(there)j(is)f(no)g (equiv)-5 b(alen)m(t)32 b(name)g(for)h(the)150 628 y(\014rst)j(decade)g (of)h(the)f(t)m(w)m(en)m(t)m(y-\014rst)i(cen)m(tury)f(\(or)f(the)h (second\).)58 b(In)36 b(the)g(mean)h(time)f(w)m(e)g(ha)m(v)m(e)i(made) 150 737 y(reasonable)30 b(decisions)f(ab)s(out)h(suc)m(h)g(pron)m (unciations.)275 872 y(Once)g(p)s(eople)g(ha)m(v)m(e)i(themselv)m(es)f (b)s(ecome)g(Y2K)g(complian)m(t)f(and)g(decided)g(what)h(to)g(actually) g(call)150 981 y(these)f(y)m(ears,)g(if)e(their)g(c)m(hoices)i(are)f (di\013eren)m(t)g(from)g(ho)m(w)g(F)-8 b(estiv)j(al)29 b(pronounces)f(them)h(w)m(e)h(reserv)m(e)g(the)150 1091 y(righ)m(t)h(to)h(c)m(hange)g(ho)m(w)f(F)-8 b(estiv)j(al)31 b(sp)s(eaks)g(these)g(dates)h(to)g(matc)m(h)g(their)e(b)s(elated)h (decisions.)41 b(Ho)m(w)m(ev)m(er)150 1200 y(as)c(w)m(e)g(do)f(not)h (giv)m(e)g(out)g(w)m(arran)m(ties)g(ab)s(out)f(compliance)g(w)m(e)h (will)d(not)i(b)s(e)g(requiring)e(our)i(users)g(to)150 1310 y(return)29 b(signed)h(Y2K)g(complian)m(t)g(w)m(arran)m(ties)g(ab) s(out)g(their)g(o)m(wn)g(compliance)g(either.)p eop %%Page: 22 24 22 23 bop 150 -116 a Fo(22)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 23 25 23 24 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(Quic)m(k)30 b(start)2594 b(23)150 299 y Fl(7)80 b(Quic)l(k)54 b(start)275 523 y Fo(This)28 b(section)j(is)e(for)h(those)h(who)f(just)g(w)m(an)m (t)h(to)g(kno)m(w)g(the)f(absolute)g(basics)g(to)h(run)e(the)h(system.) 275 656 y(F)-8 b(estiv)j(al)28 b(w)m(orks)g(in)e(t)m(w)m(o)k(fundamen)m (tal)c(mo)s(des,)i Fi(c)-5 b(ommand)33 b(mo)-5 b(de)36 b Fo(and)28 b Fi(text-to-sp)-5 b(e)g(e)g(ch)32 b(mo)-5 b(de)36 b Fo(\(tts-)150 765 y(mo)s(de\).)55 b(In)34 b(command)h(mo)s (de,)h(information)d(\(in)h(\014les)g(or)h(through)g(standard)f (input\))g(is)g(treated)i(as)150 875 y(commands)28 b(and)g(is)g(in)m (terpreted)g(b)m(y)h(a)g(Sc)m(heme)g(in)m(terpreter.)40 b(In)28 b(tts-mo)s(de,)h(information)e(\(in)h(\014les)g(or)150 984 y(through)33 b(standard)f(input\))g(is)g(treated)j(as)e(text)i(to)f (b)s(e)e(rendered)g(as)i(sp)s(eec)m(h.)50 b(The)32 b(default)h(mo)s(de) g(is)150 1094 y(command)d(mo)s(de,)g(though)g(this)g(ma)m(y)h(c)m (hange)g(in)e(later)i(v)m(ersions.)150 1345 y Fn(7.1)68 b(Basic)45 b(command)g(line)h(options)275 1536 y Fo(F)-8 b(estiv)j(al's)30 b(basic)g(calling)f(metho)s(d)h(is)f(as)390 1663 y Fk(festival)46 b([options])f(file1)h(file2)h(...)275 1795 y Fo(Options)28 b(ma)m(y)j(b)s(e)f(an)m(y)h(of)f(the)h(follo)m (wing)150 1951 y Fk(-q)384 b Fo(start)31 b(F)-8 b(estiv)j(al)31 b(without)e(loading)g(`)p Fk(init.scm)p Fo(')g(or)h(user's)g(`)p Fk(.festivalrc)p Fo(')150 2106 y Fk(-b)150 2216 y(--batch)144 b Fo(After)31 b(pro)s(cessing)e(an)m(y)h(\014le)g(argumen)m(ts)h(do)f (not)g(b)s(ecome)h(in)m(teractiv)m(e)150 2371 y Fk(-i)150 2481 y(--interactive)630 2590 y Fo(After)j(pro)s(cessing)e(\014le)g (argumen)m(ts)i(b)s(ecome)f(in)m(teractiv)m(e.)51 b(This)32 b(option)g(o)m(v)m(errides)i(an)m(y)630 2700 y(batc)m(h)d(argumen)m(t.) 150 2855 y Fk(--tts)240 b Fo(T)-8 b(reat)38 b(\014le)e(argumen)m(ts)h (in)f(text-to-sp)s(eec)m(h)j(mo)s(de,)g(causing)d(them)h(to)h(b)s(e)e (rendered)g(as)630 2965 y(sp)s(eec)m(h)44 b(rather)h(than)f(in)m (terpreted)g(as)g(commands.)83 b(When)44 b(selected)h(in)e(in)m (teractiv)m(e)630 3074 y(mo)s(de)30 b(the)h(command)f(line)e(edit)i (functions)f(are)i(not)f(a)m(v)-5 b(ailable)150 3230 y Fk(--command)630 3339 y Fo(T)d(reat)31 b(\014le)f(argumen)m(ts)g(in)f (command)i(mo)s(de.)40 b(This)28 b(is)i(the)g(default.)150 3495 y Fk(--language)e(LANG)630 3604 y Fo(Set)33 b(the)g(default)f (language)h(to)h Fj(LANG)p Fo(.)f(Curren)m(tly)f Fj(LANG)j Fo(ma)m(y)e(b)s(e)g(one)g(of)g Fk(english)p Fo(,)630 3714 y Fk(spanish)40 b Fo(or)j Fk(welsh)e Fo(\(dep)s(ending)f(on)i (what)g(v)m(oices)i(are)e(actually)g(a)m(v)-5 b(ailable)42 b(in)f(y)m(our)630 3824 y(installation\).)150 3979 y Fk(--server)96 b Fo(After)40 b(loading)f(an)m(y)h(sp)s(eci\014ed)e (\014les)h(go)h(in)m(to)g(serv)m(er)g(mo)s(de.)69 b(This)38 b(is)h(a)h(mo)s(de)f(where)630 4089 y(F)-8 b(estiv)j(al)35 b(w)m(aits)g(for)g(clien)m(ts)f(on)h(a)h(kno)m(wn)e(p)s(ort)g(\(the)i (v)-5 b(alue)34 b(of)h Fk(server_port)p Fo(,)f(default)630 4198 y(is)j(1314\).)67 b(Connected)39 b(clien)m(ts)e(ma)m(y)i(send)f (commands)g(\(or)h(text\))g(to)g(the)g(serv)m(er)g(and)630 4308 y(exp)s(ect)c(w)m(a)m(v)m(eforms)h(bac)m(k.)54 b(See)35 b(Section)g(28.3)h([Serv)m(er/clien)m(t)f(API],)f(page)i(140.)55 b(Note)630 4417 y(serv)m(er)30 b(mo)s(de)f(ma)m(y)h(b)s(e)f(unsafe)g (and)g(allo)m(w)g(unauthorised)e(access)k(to)f(y)m(our)g(mac)m(hine,)g (b)s(e)630 4527 y(sure)g(to)h(read)g(the)f(securit)m(y)h (recommendations)f(in)f(Section)i(28.3)h([Serv)m(er/clien)m(t)f(API],) 630 4637 y(page)g(140)150 4792 y Fk(--script)d(scriptfile)630 4902 y Fo(Run)48 b(script\014le)f(as)i(a)g(F)-8 b(estiv)j(al)49 b(script)f(\014le.)95 b(This)47 b(is)h(similar)e(to)j(to)h Fk(--batch)d Fo(but)630 5011 y(it)38 b(encapsulates)h(the)g(command)f (line)f(argumen)m(ts)i(in)m(to)g(the)g(Sc)m(heme)g(v)-5 b(ariables)37 b Fk(argv)630 5121 y Fo(and)c Fk(argc)p Fo(,)h(so)g(that)g(F)-8 b(estiv)j(al)34 b(scripts)e(ma)m(y)i(pro)s (cess)f(their)g(command)h(line)e(argumen)m(ts)630 5230 y(just)44 b(lik)m(e)f(an)m(y)i(other)g(program.)82 b(It)45 b(also)f(do)s(es)g(not)h(load)f(the)g(the)h(basic)f(initialisa-)630 5340 y(tion)49 b(\014les)f(as)h(sometimes)g(y)m(ou)g(ma)m(y)h(not)f(w)m (an)m(t)h(to)g(do)f(this.)96 b(If)48 b(y)m(ou)h(wish)f(them,)p eop %%Page: 24 26 24 25 bop 150 -116 a Fo(24)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)630 299 y(y)m(ou)47 b(should)d(cop)m(y)j(the)g(loading)e(sequence)i(from)f(an)g(example)h (F)-8 b(estiv)j(al)46 b(script)g(lik)m(e)630 408 y(`)p Fk(festival/examples/saytext)o Fo('.)150 581 y Fk(--heap)29 b(NUMBER)630 690 y Fo(The)j(Sc)m(heme)h(heap)f(\(basic)g(n)m(um)m(b)s (er)f(of)i(Lisp)d(cells\))i(is)g(of)g(a)h(\014xed)f(size)g(and)g (cannot)h(b)s(e)630 800 y(dynamically)e(increased)h(at)i(run)e(time)h (\(this)f(w)m(ould)g(complicate)h(garbage)i(collection\).)630 910 y(The)41 b(default)g(size)h(is)f(210000)k(whic)m(h)40 b(seems)i(to)h(b)s(e)e(more)h(than)g(adequate)h(for)f(most)630 1019 y(w)m(ork.)j(In)31 b(some)h(of)g(our)f(training)f(exp)s(erimen)m (ts)h(where)g(v)m(ery)h(large)g(list)e(structures)i(are)630 1129 y(required)24 b(it)g(is)h(necessary)h(to)g(increase)f(this.)38 b(Note)26 b(there)g(is)e(a)i(trade)g(o\013)g(b)s(et)m(w)m(een)g(size)f (of)630 1238 y(the)32 b(heap)g(and)f(time)h(it)g(tak)m(es)h(to)g (garbage)g(collect)f(so)h(making)e(this)g(unnecessarily)f(big)630 1348 y(is)h(not)h(a)h(go)s(o)s(d)f(idea.)45 b(If)31 b(y)m(ou)i(don't)f (understand)e(the)i(ab)s(o)m(v)m(e)h(explanation)e(y)m(ou)i(almost)630 1457 y(certainly)d(don't)g(need)g(to)h(use)f(the)h(option.)275 1636 y(In)c(command)i(mo)s(de,)f(if)g(the)h(\014le)e(name)i(starts)g (with)e(a)i(left)f(paren)m(thesis,)h(the)f(name)h(itself)e(is)h(read) 150 1746 y(and)33 b(ev)-5 b(aluated)34 b(as)g(a)h(Lisp)d(command.)51 b(This)32 b(is)h(often)h(con)m(v)m(enien)m(t)h(when)e(running)e(in)i (batc)m(h)h(mo)s(de)150 1855 y(and)28 b(a)h(simple)e(command)h(is)g (necessary)h(to)g(start)g(the)g(whole)f(thing)g(o\013)h(after)g (loading)e(in)h(some)h(other)150 1965 y(sp)s(eci\014c)g(\014les.)150 2254 y Fn(7.2)68 b(Sample)46 b(command)e(driv)l(en)i(session)275 2460 y Fo(Here)30 b(is)g(a)h(short)f(session)f(using)g(F)-8 b(estiv)j(al's)31 b(command)f(in)m(terpreter.)275 2607 y(Start)g(F)-8 b(estiv)j(al)31 b(with)e(no)h(argumen)m(ts)390 2749 y Fk($)47 b(festival)390 2853 y(Festival)f(Speech)g(Synthesis)f (System)h(1.4.2:release)e(July)j(2001)390 2956 y(Copyright)e(\(C\))i (University)e(of)i(Edinburgh,)e(1996-2001.)g(All)i(rights)f(reserved.) 390 3060 y(For)h(details)f(type)g(`\(festival_warranty\)')390 3164 y(festival>)275 3311 y Fo(F)-8 b(estiv)j(al)25 b(uses)f(the)i(a)f (command)g(line)e(editor)i(based)g(on)f(editline)f(for)i(terminal)f (input)f(so)i(command)150 3421 y(line)31 b(editing)g(ma)m(y)i(b)s(e)f (done)g(with)g(Emacs)g(commands.)47 b(F)-8 b(estiv)j(al)33 b(also)f(supp)s(orts)f(history)g(as)i(w)m(ell)f(as)150 3531 y(function,)d(v)-5 b(ariable)29 b(name,)i(and)f(\014le)f(name)i (completion)e(via)h(the)2476 3528 y Fh(h)p 2500 3474 148 4 v 2500 3531 a Fg(T)-6 b(AB)p 2500 3546 V 2644 3528 a Fh(i)2704 3531 y Fo(k)m(ey)e(.)275 3678 y(T)m(yping)31 b Fk(help)g Fo(will)f(giv)m(e)j(y)m(ou)g(more)g(information,)e(that)j (is)d Fk(help)h Fo(without)f(an)m(y)i(paren)m(thesis.)46 b(\(It)150 3787 y(is)29 b(actually)h(a)h(v)-5 b(ariable)29 b(name)i(whose)f(v)-5 b(alue)30 b(is)f(a)i(string)e(con)m(taining)h (help.\))275 3935 y(F)-8 b(estiv)j(al)42 b(o\013ers)h(what)f(is)g (called)g(a)g(read-ev)-5 b(al-prin)m(t)42 b(lo)s(op,)j(b)s(ecause)d(it) g(reads)h(an)f(s-expression)150 4044 y(\(atom)d(or)f(list\),)h(ev)-5 b(aluates)38 b(it)g(and)f(prin)m(ts)f(the)i(result.)62 b(As)38 b(F)-8 b(estiv)j(al)38 b(includes)d(the)j(SIOD)g(Sc)m(heme)150 4154 y(in)m(terpreter)30 b(most)h(standard)e(Sc)m(heme)i(commands)f(w)m (ork)390 4296 y Fk(festival>)45 b(\(car)i('\(a)g(d\)\))390 4399 y(a)390 4503 y(festival>)e(\(+)i(34)h(52\))390 4607 y(86)275 4754 y Fo(In)37 b(addition)f(to)j(standard)e(Sc)m(heme)h (commands)g(a)g(n)m(um)m(b)s(er)f(of)h(commands)f(sp)s(eci\014c)g(to)i (sp)s(eec)m(h)150 4864 y(syn)m(thesis)h(are)h(included.)69 b(Although,)43 b(as)e(w)m(e)g(will)d(see,)44 b(there)d(are)g(simpler)e (metho)s(ds)h(for)g(getting)150 4973 y(F)-8 b(estiv)j(al)35 b(to)h(sp)s(eak,)f(here)g(are)g(the)g(basic)g(underlying)c(explicit)j (functions)f(used)h(in)f(syn)m(thesizing)h(an)150 5083 y(utterance.)275 5230 y(Utterances)39 b(can)e(consist)h(of)f(v)-5 b(arious)37 b(t)m(yp)s(es)g(\(See)h(Section)g(14.2)h([Utterance)g(t)m (yp)s(es],)h(page)e(65\),)150 5340 y(but)30 b(the)g(simplest)f(form)h (is)f(plain)f(text.)42 b(W)-8 b(e)32 b(can)e(create)i(an)f(utterance)g (and)f(sa)m(v)m(e)i(it)d(in)h(a)g(v)-5 b(ariable)p eop %%Page: 25 27 25 26 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(Quic)m(k)30 b(start)2594 b(25)390 299 y Fk(festival>)45 b(\(set!)i(utt1)f (\(Utterance)f(Text)i("Hello)f(world"\)\))390 403 y(#)390 506 y(festival>)275 649 y Fo(The)27 b(\(hex\))h(n)m(um)m (b)s(er)e(in)g(the)i(return)f(v)-5 b(alue)27 b(ma)m(y)h(b)s(e)f (di\013eren)m(t)g(for)g(y)m(our)h(installation.)38 b(That)27 b(is)g(the)150 759 y(prin)m(t)k(form)i(for)f(utterances.)49 b(Their)31 b(in)m(ternal)g(structure)i(can)g(b)s(e)f(v)m(ery)h(large)g (so)g(only)e(a)j(tok)m(en)f(form)150 868 y(is)c(prin)m(ted.)275 1011 y(Although)i(this)g(creates)j(an)f(utterance)g(it)f(do)s(esn't)g (do)h(an)m(ything)f(else.)46 b(T)-8 b(o)33 b(get)h(a)f(w)m(a)m(v)m (eform)h(y)m(ou)150 1121 y(m)m(ust)c(syn)m(thesize)h(it.)390 1258 y Fk(festival>)45 b(\(utt.synth)g(utt1\))390 1362 y(#)390 1465 y(festival>)275 1608 y Fo(This)25 b(calls)i(v)-5 b(arious)27 b(mo)s(dules,)g(including)d (tok)m(enizing,)k(duration,.)39 b(in)m(tonation)27 b(etc.)41 b(Whic)m(h)27 b(mo)s(d-)150 1718 y(ules)h(are)h(called)f(are)h (de\014ned)e(with)h(resp)s(ect)g(to)i(the)f(t)m(yp)s(e)f(of)h(the)g (utterance,)h(in)e(this)f(case)j Fk(Text)p Fo(.)39 b(It)29 b(is)150 1827 y(p)s(ossible)d(to)i(individually)23 b(call)k(the)h(mo)s (dules)e(b)m(y)i(hand)f(but)g(y)m(ou)i(just)e(w)m(an)m(ted)i(it)e(to)i (talk)f(didn't)e(y)m(ou.)150 1937 y(So)390 2074 y Fk(festival>)45 b(\(utt.play)h(utt1\))390 2178 y(#)390 2281 y(festival>)150 2534 y Fo(will)28 b(send)h(the)i(syn)m(thesized)f (w)m(a)m(v)m(eform)h(to)h(y)m(our)e(audio)f(device.)41 b(Y)-8 b(ou)31 b(should)150 2643 y(hear)f Fk(")p Fo(Hello)g(w)m(orld)p Fk(")f Fo(from)h(y)m(our)g(mac)m(hine.)275 2786 y(T)-8 b(o)32 b(mak)m(e)h(this)e(all)g(easier)g(a)i(small)d(function)h(doing)g (these)h(three)g(steps)g(exists.)45 b Fk(SayText)30 b Fo(simply)150 2896 y(tak)m(es)i(a)f(string)e(of)h(text,)i(syn)m (thesizes)e(it)g(and)g(sends)f(it)h(to)h(the)g(audio)e(device.)390 3033 y Fk(festival>)45 b(\(SayText)h("Good)g(morning,)g(welcome)g(to)h (Festival"\))390 3137 y(#)390 3240 y(festival>)275 3383 y Fo(Of)26 b(course)i(as)f(history)f(and)h (command)g(line)f(editing)g(are)h(supp)s(orted)2714 3380 y Fh(h)p 2738 3327 95 4 v 2738 3383 a Fg(c-p)p 2738 3399 V 2828 3380 a Fh(i)2885 3383 y Fo(or)g(up-arro)m(w)g(will)d(allo)m(w) 150 3493 y(y)m(ou)31 b(to)g(edit)f(the)g(ab)s(o)m(v)m(e)i(to)f(whatev)m (er)g(y)m(ou)g(wish.)275 3636 y(F)-8 b(estiv)j(al)30 b(ma)m(y)h(also)f(syn)m(thesize)h(from)f(\014les)f(rather)h(than)g (simply)e(text.)390 3773 y Fk(festival>)45 b(\(tts)i("myfile")e(nil\)) 390 3876 y(nil)390 3980 y(festival>)275 4123 y Fo(The)27 b(end)g(of)h(\014le)f(c)m(haracter)1268 4120 y Fh(h)p 1292 4067 V 1292 4123 a Fg(c-d)p 1292 4138 V 1382 4120 a Fh(i)1440 4123 y Fo(will)e(exit)j(from)f(F)-8 b(estiv)j(al)28 b(and)g(return)f(y)m(ou)h(to)h(the)f(shell,)f(alterna-)150 4232 y(tiv)m(ely)j(the)h(command)f Fk(quit)f Fo(ma)m(y)i(b)s(e)f (called)f(\(don't)i(forget)g(the)g(paren)m(theses\).)275 4375 y(Rather)c(than)g(starting)g(the)g(command)g(in)m(terpreter,)h(F) -8 b(estiv)j(al)27 b(ma)m(y)h(syn)m(thesize)f(\014les)g(sp)s(eci\014ed) e(on)150 4485 y(the)31 b(command)f(line)390 4622 y Fk(unix$)46 b(festival)g(--tts)g(myfile)390 4726 y(unix$)275 4868 y Fo(Sometimes)24 b(a)h(simple)d(w)m(a)m(v)m(eform)k(is)e(required)e (from)i(text)i(that)f(is)f(to)h(b)s(e)f(k)m(ept)h(and)f(pla)m(y)m(ed)g (at)i(some)150 4978 y(later)31 b(time.)42 b(The)30 b(simplest)f(w)m(a)m (y)j(to)f(do)g(this)f(with)f(festiv)-5 b(al)30 b(is)g(b)m(y)h(using)e (the)i(`)p Fk(text2wave)p Fo(')e(program.)150 5088 y(This)34 b(is)i(a)g(festiv)-5 b(al)36 b(script)f(that)h(will)e(tak)m(e)k(a)e (\014le)g(\(or)g(text)h(from)f(standard)f(input\))g(and)h(pro)s(duce)f (a)150 5197 y(single)29 b(w)m(a)m(v)m(eform.)275 5340 y(An)h(example)g(use)g(is)p eop %%Page: 26 28 26 27 bop 150 -116 a Fo(26)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(text2wave)45 b(myfile.txt)g(-o)i(myfile.wav)275 433 y Fo(Options)c(exist)h(to)h(sp)s (ecify)e(the)h(w)m(a)m(v)m(eform)i(\014le)e(t)m(yp)s(e,)k(for)c (example)g(if)g(Sun)f(audio)g(format)i(is)150 543 y(required)390 672 y Fk(text2wave)g(myfile.txt)g(-otype)h(snd)h(-o)g(myfile.wav)275 806 y Fo(Use)30 b(`)p Fk(-h)p Fo(')h(on)f(`)p Fk(text2wave)p Fo(')e(to)j(see)g(all)e(options.)150 1064 y Fn(7.3)68 b(Getting)46 b(some)g(help)275 1256 y Fo(If)35 b(no)i(audio)e(is)h (generated)h(then)f(y)m(ou)h(m)m(ust)f(c)m(hec)m(k)i(to)f(see)g(if)f (audio)f(is)h(prop)s(erly)e(initialized)f(on)150 1366 y(y)m(our)d(mac)m(hine.)41 b(See)30 b(Chapter)g(23)h([Audio)f(output],) g(page)h(103.)275 1500 y(In)41 b(the)h(command)g(in)m(terpreter)1458 1497 y Fh(h)p 1482 1444 122 4 v 1482 1500 a Fg(m-h)p 1482 1516 V 1600 1497 a Fh(i)1671 1500 y Fo(\(meta-h\))i(will)39 b(giv)m(e)k(y)m(ou)f(help)e(on)i(the)g(curren)m(t)g(sym)m(b)s(ol)150 1610 y(b)s(efore)33 b(the)h(cursor.)51 b(This)32 b(will)f(b)s(e)i(a)h (short)g(description)e(of)i(the)g(function)e(or)i(v)-5 b(ariable,)34 b(ho)m(w)g(to)g(use)150 1719 y(it)d(and)g(what)h(its)f (argumen)m(ts)g(are.)45 b(A)32 b(listing)d(of)j(all)f(suc)m(h)g(help)f (strings)g(app)s(ears)h(at)i(the)e(end)g(of)h(this)150 1829 y(do)s(cumen)m(t.)628 1826 y Fh(h)p 653 1773 111 4 v 653 1829 a Fg(m-s)p 653 1844 V 758 1826 a Fh(i)827 1829 y Fo(will)j(syn)m(thesize)j(and)g(sa)m(y)h(the)g(same)f (information,)h(but)f(this)f(extra)i(function)e(is)150 1939 y(really)29 b(just)h(for)g(sho)m(w.)275 2073 y(The)41 b(lisp)f(function)h Fk(manual)g Fo(will)e(send)i(the)i(appropriate)e (command)h(to)h(an)f(already)g(running)150 2183 y(Netscap)s(e)35 b(bro)m(wser)f(pro)s(cess.)52 b(If)33 b Fk(nil)h Fo(is)f(giv)m(en)h(as) h(an)f(argumen)m(t)g(the)h(bro)m(wser)f(will)d(b)s(e)j(directed)f(to) 150 2292 y(the)27 b(tables)f(of)h(con)m(ten)m(ts)i(of)d(the)h(man)m (ual.)39 b(If)26 b(a)h(non-nil)e(v)-5 b(alue)26 b(is)g(giv)m(en)g(it)h (is)e(assumed)h(to)i(b)s(e)e(a)h(section)150 2402 y(title)j(and)g(that) h(section)f(is)g(searc)m(hed)h(and)e(if)h(found)f(displa)m(y)m(ed.)39 b(F)-8 b(or)31 b(example)390 2531 y Fk(festival>)45 b(\(manual)h ("Accessing)f(an)i(utterance"\))275 2665 y Fo(Another)27 b(related)h(function)e(is)h Fk(manual-sym)e Fo(whic)m(h)h(giv)m(en)i(a) g(sym)m(b)s(ol)f(will)e(c)m(hec)m(k)k(its)e(do)s(cumen)m(ta-)150 2775 y(tion)d(string)g(for)h(a)h(cross)f(reference)g(to)h(a)f(man)m (ual)g(section)g(and)f(request)h(Netscap)s(e)h(to)g(displa)m(y)d(it.)39 b(This)150 2884 y(function)29 b(is)g(b)s(ound)g(to)989 2881 y Fh(h)p 1013 2828 142 4 v 1013 2884 a Fg(m-m)p 1013 2900 V 1150 2881 a Fh(i)1210 2884 y Fo(and)h(will)e(displa)m(y)g (the)j(appropriate)e(section)i(for)f(the)g(giv)m(en)h(sym)m(b)s(ol.)275 3019 y(Note)e(also)g(that)g(the)1022 3016 y Fh(h)p 1047 2963 148 4 v 1047 3019 a Fg(T)-6 b(AB)p 1047 3034 V 1190 3016 a Fh(i)1249 3019 y Fo(k)m(ey)29 b(can)g(b)s(e)e(used)h(to)h (\014nd)e(out)i(the)g(name)f(of)h(commands)f(a)m(v)-5 b(ailable)28 b(as)150 3128 y(can)j(the)f(function)f Fk(Help)h Fo(\(remem)m(b)s(er)g(the)g(paren)m(theses\).)275 3263 y(F)-8 b(or)31 b(more)f(up)g(to)h(date)g(information)d(on)j(F)-8 b(estiv)j(al)30 b(regularly)f(c)m(hec)m(k)j(the)e(F)-8 b(estiv)j(al)31 b(Home)g(P)m(age)h(at)390 3391 y Fk (http://www.cstr.ed.ac.uk)o(/pro)o(ject)o(s/f)o(esti)o(val.)o(htm)o(l) 275 3526 y Fo(F)-8 b(urther)30 b(help)f(is)g(a)m(v)-5 b(ailable)30 b(b)m(y)g(mailing)e(questions)i(to)390 3655 y Fk(festival-help@cstr.ed.ac)o(.uk)275 3789 y Fo(Although)h(w)m(e)h (cannot)h(guaran)m(tee)h(the)e(time)g(required)e(to)j(answ)m(er)f(y)m (ou,)h(w)m(e)g(will)c(do)j(our)g(b)s(est)f(to)150 3899 y(o\013er)g(help.)275 4033 y(Bug)f(rep)s(orts)g(should)e(b)s(e)i (submitted)f(to)390 4162 y Fk(festival-bug@cstr.ed.ac.)o(uk)275 4296 y Fo(If)d(there)h(is)f(enough)h(user)f(tra\016c)i(a)f(general)g (mailing)e(list)h(will)e(b)s(e)i(created)i(so)g(all)d(users)i(ma)m(y)g (share)150 4406 y(commen)m(ts)h(and)f(receiv)m(e)h(announcemen)m(ts.)40 b(In)26 b(the)i(mean)f(time)g(w)m(atc)m(h)h(the)g(F)-8 b(estiv)j(al)27 b(Home)h(P)m(age)h(for)150 4516 y(news.)p eop %%Page: 27 29 27 28 bop 150 -116 a Fo(Chapter)30 b(8:)41 b(Sc)m(heme)2749 b(27)150 299 y Fl(8)80 b(Sc)l(heme)275 531 y Fo(Man)m(y)37 b(p)s(eople)e(seem)i(daun)m(ted)f(b)m(y)h(the)g(fact)g(that)g(F)-8 b(estiv)j(al)37 b(uses)f(Sc)m(heme)h(as)g(its)f(scripting)e(lan-)150 641 y(guage)g(and)e(feel)h(they)g(can't)h(use)f(F)-8 b(estiv)j(al)33 b(b)s(ecause)g(they)g(don't)g(kno)m(w)g(Sc)m(heme.)49 b(Ho)m(w)m(ev)m(er)34 b(most)g(of)150 750 y(those)29 b(same)g(p)s(eople)e(use)i(Emacs)f(ev)m(eryda)m(y)i(whic)m(h)d(also)i (has)f(\(a)h(m)m(uc)m(h)g(more)f(complex\))h(Lisp)e(system)150 860 y(underneath.)61 b(The)37 b(n)m(um)m(b)s(er)g(of)h(Sc)m(heme)g (commands)f(y)m(ou)h(actually)f(need)h(to)g(kno)m(w)g(in)e(F)-8 b(estiv)j(al)38 b(is)150 969 y(really)26 b(v)m(ery)i(small)d(and)i(y)m (ou)g(can)h(easily)e(just)h(\014nd)f(out)h(as)g(y)m(ou)h(go)g(along.)40 b(Also)27 b(p)s(eople)f(use)h(the)g(Unix)150 1079 y(shell)37 b(often)i(but)f(only)f(kno)m(w)i(a)g(small)e(fraction)h(of)h(actual)g (commands)f(a)m(v)-5 b(ailable)38 b(in)f(the)i(shell)e(\(or)150 1189 y(in)32 b(fact)i(that)f(there)g(ev)m(en)h(is)e(a)h(distinction)e (b)s(et)m(w)m(een)j(shell)d(builtin)e(commands)k(and)f(user)g (de\014nable)150 1298 y(ones\).)41 b(So)30 b(tak)m(e)i(it)e(easy)-8 b(,)32 b(y)m(ou'll)e(learn)f(the)i(commands)f(y)m(ou)g(need)g(fairly)f (quic)m(kly)-8 b(.)150 1554 y Fn(8.1)68 b(Sc)l(heme)45 b(references)275 1747 y Fo(If)29 b(y)m(ou)i(wish)e(to)i(learn)e(ab)s (out)h(Sc)m(heme)h(in)e(more)i(detail)e(I)h(recommend)h(the)f(b)s(o)s (ok)g Fj(ab)s(elson85)p Fo(.)275 1881 y(The)36 b(Emacs)i(Lisp)d(do)s (cumen)m(tation)i(is)f(reasonable)h(as)g(it)g(is)f(comprehensiv)m(e)h (and)f(man)m(y)h(of)h(the)150 1990 y(underlying)c(uses)i(of)h(Sc)m (heme)h(in)d(F)-8 b(estiv)j(al)37 b(w)m(ere)h(in\015uenced)d(b)m(y)h (Emacs.)61 b(Emacs)37 b(Lisp)f(ho)m(w)m(ev)m(er)i(is)150 2100 y(not)31 b(Sc)m(heme)f(so)h(there)g(are)f(some)h(di\013erences.) 275 2234 y(Other)e(Sc)m(heme)i(tutorials)f(and)f(resources)i(a)m(v)-5 b(ailable)29 b(on)i(the)f(W)-8 b(eb)31 b(are)225 2368 y Fm(\017)60 b Fo(The)30 b(Revised)f(Revised)g(Revised)h(Revised)f(Sc)m (heme)i(Rep)s(ort,)f(the)g(do)s(cumen)m(t)g(de\014ning)e(the)i(lan-)330 2478 y(guage)i(is)d(a)m(v)-5 b(ailable)30 b(from)570 2606 y Fk(http://tinuviel.cs.wcu.e)o(du/r)o(es/l)o(dp/)o(r4rs)o(-htm)o (l/r)o(4rs_)o(toc.)o(htm)o(l)225 2740 y Fm(\017)60 b Fo(a)31 b(Sc)m(heme)g(tutorials)e(from)h(the)g(net:)405 2874 y Fm(\017)60 b Fk(http://www.cs.uoregon.ed)o(u/cl)o(asse)o(s/c)o (is42)o(5/sc)o(hem)o(eTut)o(oria)o(l.h)o(tml)225 3008 y Fm(\017)g Fo(the)31 b(Sc)m(heme)f(F)-10 b(A)m(Q)405 3143 y Fm(\017)60 b Fk(http://www.landfield.com)o(/faq)o(s/sc)o(hem)o (e-fa)o(q/pa)o(rt1)o(/)150 3399 y Fn(8.2)68 b(Sc)l(heme)45 b(fundamen)l(tals)275 3591 y Fo(But)33 b(y)m(ou)g(w)m(an)m(t)h(more)f (no)m(w,)h(don't)f(y)m(ou,)h(not)f(just)f(b)s(e)h(referred)f(to)h(some) h(other)f(b)s(o)s(ok.)48 b(OK)32 b(here)150 3701 y(go)s(es.)275 3835 y Fi(Syntax)11 b Fo(:)47 b(an)34 b(expression)e(is)g(an)h Fi(atom)42 b Fo(or)34 b(a)f Fi(list)p Fo(.)50 b(A)34 b(list)e(consists)h(of)g(a)h(left)f(paren,)h(a)g(n)m(um)m(b)s(er)e(of) 150 3944 y(expressions)25 b(and)g(righ)m(t)h(paren.)39 b(A)m(toms)27 b(can)f(b)s(e)f(sym)m(b)s(ols,)h(n)m(um)m(b)s(ers,)g (strings)f(or)h(other)g(sp)s(ecial)f(t)m(yp)s(es)150 4054 y(lik)m(e)30 b(functions,)f(hash)g(tables,)i(arra)m(ys,)g(etc.)275 4188 y Fi(Semantics)7 b Fo(:)38 b(All)22 b(expressions)g(can)h(b)s(e)g (ev)-5 b(aluated.)38 b(Lists)22 b(are)i(ev)-5 b(aluated)23 b(as)h(function)e(calls.)37 b(When)150 4298 y(ev)-5 b(aluating)23 b(a)g(list)f(all)h(the)g(mem)m(b)s(ers)f(of)i(the)f(list)f(are)i(ev)-5 b(aluated)23 b(\014rst)g(then)g(the)g(\014rst)g(item)g(\(a)h (function\))150 4407 y(is)j(called)f(with)h(the)g(remaining)f(items)h (in)f(the)i(list)e(as)i(argumen)m(ts.)40 b(A)m(toms)29 b(are)f(ev)-5 b(aluated)27 b(dep)s(ending)150 4517 y(on)j(their)f(t)m (yp)s(e:)41 b(sym)m(b)s(ols)29 b(are)h(ev)-5 b(aluated)31 b(as)f(v)-5 b(ariables)29 b(returning)f(their)i(v)-5 b(alues.)40 b(Num)m(b)s(ers,)29 b(strings,)150 4626 y(functions,)g (etc.)42 b(ev)-5 b(aluate)31 b(to)g(themselv)m(es.)275 4760 y(Commen)m(ts)f(are)h(started)g(b)m(y)f(a)h(semicolon)e(and)h(run) f(un)m(til)g(end)g(of)i(line.)275 4895 y(And)i(that's)h(it.)51 b(There)33 b(is)g(nothing)g(more)h(to)h(the)f(language)g(that.)52 b(But)34 b(just)f(in)g(case)i(y)m(ou)f(can't)150 5004 y(follo)m(w)c(the)g(consequences)h(of)g(that,)g(here)f(are)h(some)g(k)m (ey)g(examples.)390 5132 y Fk(festival>)45 b(\(+)i(2)h(3\))390 5236 y(5)390 5340 y(festival>)d(\(set!)i(a)g(4\))p eop %%Page: 28 30 28 29 bop 150 -116 a Fo(28)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(4)390 403 y(festival>)45 b(\(*)i(3)h(a\))390 506 y(12)390 610 y(festival>)d(\(define)h(\(add)h(a)g(b\))g(\(+)h(a)f(b\)\))390 714 y(#)390 818 y(festival>)e(\(add)i(3)g(4\))390 922 y(7)390 1025 y(festival>)e (\(set!)i(alist)f('\(apples)g(pears)g(bananas\)\))390 1129 y(\(apples)g(pears)g(bananas\))390 1233 y(festival>)f(\(car)i (alist\))390 1337 y(apples)390 1440 y(festival>)e(\(cdr)i(alist\))390 1544 y(\(pears)f(bananas\))390 1648 y(festival>)f(\(set!)i(blist)f (\(cons)g('oranges)g(alist\)\))390 1752 y(\(oranges)g(apples)g(pears)g (bananas\))390 1856 y(festival>)f(\(append)h(alist)g(blist\))390 1959 y(\(apples)g(pears)g(bananas)g(oranges)g(apples)g(pears)g (bananas\))390 2063 y(festival>)f(\(cons)i(alist)f(blist\))390 2167 y(\(\(apples)g(pears)g(bananas\))f(oranges)h(apples)g(pears)h (bananas\))390 2271 y(festival>)e(\(length)h(alist\))390 2374 y(3)390 2478 y(festival>)f(\(length)h(\(append)g(alist)g (blist\)\))390 2582 y(7)150 2839 y Fn(8.3)68 b(Sc)l(heme)45 b(F)-11 b(estiv)k(al)46 b(sp)t(eci\014cs)275 3031 y Fo(There)32 b(a)h(n)m(um)m(b)s(er)e(of)i(additions)d(to)k(SIOD)e(that)h(are)g(F)-8 b(estiv)j(al)32 b(sp)s(eci\014c)g(though)g(still)f(part)h(of)h(the)150 3140 y(Lisp)c(system)h(rather)g(than)h(the)f(syn)m(thesis)g(functions)e (p)s(er)i(se.)275 3275 y(By)f(con)m(v)m(en)m(tion)h(if)d(the)i(\014rst) f(statemen)m(t)j(of)e(a)g(function)e(is)h(a)h(string,)g(it)f(is)g (treated)h(as)g(a)h(do)s(cumen-)150 3384 y(tation)h(string.)39 b(The)30 b(string)g(will)d(b)s(e)j(prin)m(ted)f(when)g(help)g(is)h (requested)g(for)g(that)h(function)e(sym)m(b)s(ol.)275 3518 y(In)21 b(in)m(teractiv)m(e)i(mo)s(de)f(if)f(the)h(function)f Fk(:backtrace)f Fo(is)h(called)g(\(within)f(paren)m(thesis\))i(the)g (previous)150 3628 y(stac)m(k)40 b(trace)f(is)f(displa)m(y)m(ed.)63 b(Calling)36 b Fk(:backtrace)g Fo(with)h(a)i(n)m(umeric)e(argumen)m(t)i (will)d(displa)m(y)g(that)150 3738 y(particular)e(stac)m(k)i(frame)f (in)f(full.)53 b(Note)37 b(that)e(an)m(y)h(command)f(other)g(than)g Fk(:backtrace)e Fo(will)f(reset)150 3847 y(the)f(trace.)41 b(Y)-8 b(ou)31 b(ma)m(y)g(optionally)e(call)390 3976 y Fk(\(set_backtrace)44 b(t\))275 4110 y Fo(Whic)m(h)27 b(will)f(cause)j(a)f(bac)m(ktrace)j(to)e(b)s(e)e(displa)m(y)m(ed)g (whenev)m(er)h(a)h(Sc)m(heme)g(error)e(o)s(ccurs.)40 b(This)27 b(can)150 4219 y(b)s(e)33 b(put)f(in)g(y)m(our)h(`)p Fk(.festivalrc)p Fo(')e(if)h(y)m(ou)h(wish.)48 b(This)31 b(is)h(esp)s(ecially)g(useful)f(when)h(running)f(F)-8 b(estiv)j(al)150 4329 y(in)33 b(non-in)m(teractiv)m(e)i(mo)s(de)f (\(batc)m(h)h(or)g(script)e(mo)s(de\))h(so)h(that)g(more)f(information) f(is)g(prin)m(ted)g(when)150 4439 y(an)d(error)g(o)s(ccurs.)275 4573 y(A)i Fi(ho)-5 b(ok)44 b Fo(in)32 b(Lisp)f(terms)h(is)g(a)h(p)s (osition)e(within)f(some)j(piece)f(of)h(co)s(de)g(where)f(a)h(user)f (ma)m(y)h(sp)s(ecify)150 4682 y(their)23 b(o)m(wn)g(customization.)39 b(The)23 b(notion)g(is)f(used)h(hea)m(vily)g(in)f(Emacs.)39 b(In)23 b(F)-8 b(estiv)j(al)24 b(there)g(a)f(n)m(um)m(b)s(er)g(of)150 4792 y(places)29 b(where)f(ho)s(oks)h(are)g(used.)40 b(A)29 b(ho)s(ok)g(v)-5 b(ariable)27 b(con)m(tains)i(either)g(a)g (function)f(or)h(list)e(of)i(functions)150 4902 y(that)40 b(are)f(to)h(b)s(e)e(applied)f(at)i(some)h(p)s(oin)m(t)e(in)f(the)j (pro)s(cessing.)65 b(F)-8 b(or)39 b(example)g(the)g Fk(after_synth_)150 5011 y(hooks)32 b Fo(are)h(applied)e(after)j(syn)m(thesis)e(has)h(b)s (een)f(applied)f(to)j(allo)m(w)f(sp)s(eci\014c)f(customization)h(suc)m (h)g(as)150 5121 y(resampling)d(or)j(mo)s(di\014cation)d(of)j(the)f (gain)g(of)h(the)f(syn)m(thesized)g(w)m(a)m(v)m(eform.)48 b(The)32 b(Sc)m(heme)g(function)150 5230 y Fk(apply_hooks)23 b Fo(tak)m(es)28 b(a)e(ho)s(ok)h(v)-5 b(ariable)25 b(as)h(argumen)m(t)h (and)e(an)h(ob)5 b(ject)28 b(and)d(applies)g(the)h(function/list)150 5340 y(of)31 b(functions)d(in)i(turn)f(to)i(the)f(ob)5 b(ject.)p eop %%Page: 29 31 29 30 bop 150 -116 a Fo(Chapter)30 b(8:)41 b(Sc)m(heme)2749 b(29)275 299 y(When)37 b(an)h(error)g(o)s(ccurs)f(in)g(either)g(Sc)m (heme)i(or)e(within)f(the)i(C)p Fk(++)f Fo(part)h(of)g(F)-8 b(estiv)j(al)38 b(b)m(y)g(default)150 408 y(the)31 b(system)h(jumps)e (to)i(the)f(top)h(lev)m(el,)f(resets)h(itself)e(and)h(con)m(tin)m(ues.) 43 b(Note)33 b(that)f(errors)f(are)g(usually)150 518 y(serious)22 b(things,)i(p)s(oin)m(ting)e(to)i(bugs)f(in)f(parameters)h (or)h(co)s(de.)38 b(Ev)m(ery)24 b(e\013ort)g(has)f(b)s(een)g(made)h(to) g(ensure)150 628 y(that)31 b(the)g(pro)s(cessing)f(of)h(text)g(nev)m (er)g(causes)g(errors)g(in)e(F)-8 b(estiv)j(al.)42 b(Ho)m(w)m(ev)m(er) 33 b(when)d(using)f(F)-8 b(estiv)j(al)31 b(as)150 737 y(a)g(dev)m(elopmen)m(t)g(system)f(it)g(is)f(often)i(that)g(errors)f(o) s(ccur)g(in)f(co)s(de.)275 866 y(Sometimes)35 b(in)f(writing)f(Sc)m (heme)j(co)s(de)g(y)m(ou)g(kno)m(w)f(there)h(is)e(a)i(p)s(oten)m(tial)f (for)g(an)h(error)f(but)g(y)m(ou)150 975 y(wish)40 b(to)i(ignore)g (that)g(and)f(con)m(tin)m(ue)h(on)f(to)i(the)e(next)h(thing)f(without)g (exiting)f(or)i(stopping)f(and)150 1085 y(returning)31 b(to)i(the)g(top)g(lev)m(el.)46 b(F)-8 b(or)34 b(example)e(y)m(ou)h (are)g(pro)s(cessing)e(a)i(n)m(um)m(b)s(er)e(of)i(utterances)g(from)g (a)150 1194 y(database)e(and)e(some)h(\014les)e(con)m(taining)h(the)h (descriptions)e(ha)m(v)m(e)j(errors)e(in)f(them)i(but)f(y)m(ou)g(w)m (an)m(t)i(y)m(our)150 1304 y(pro)s(cessing)c(to)j(con)m(tin)m(ue)f (through)f(ev)m(ery)h(utterance)h(that)f(can)g(b)s(e)f(pro)s(cessed)g (rather)h(than)f(stopping)150 1414 y(5)j(min)m(utes)e(after)i(y)m(ou)g (gone)g(home)f(after)h(setting)g(a)f(big)g(batc)m(h)h(job)f(for)g(o)m (v)m(ernigh)m(t.)275 1542 y(F)-8 b(estiv)j(al's)37 b(Sc)m(heme)g(pro)m (vides)e(the)i(function)f Fk(unwind-protect)d Fo(whic)m(h)i(allo)m(ws)h (the)h(catc)m(hing)h(of)150 1652 y(errors)27 b(and)g(then)g(con)m(tin)m (uing)f(normally)-8 b(.)39 b(F)-8 b(or)28 b(example)f(supp)s(ose)f(y)m (ou)i(ha)m(v)m(e)g(the)g(function)e Fk(process_)150 1761 y(utt)h Fo(whic)m(h)g(tak)m(es)i(a)g(\014lename)e(and)g(do)s(es)h (things)f(whic)m(h)g(y)m(ou)h(kno)m(w)g(migh)m(t)g(cause)h(an)f(error.) 39 b(Y)-8 b(ou)29 b(can)150 1871 y(write)h(the)g(follo)m(wing)f(to)i (ensure)f(y)m(ou)g(con)m(tin)m(ue)h(pro)s(cessing)e(ev)m(en)i(in)e(an)i (error)f(o)s(ccurs.)390 1994 y Fk(\(unwind-protect)438 2097 y(\(process_utt)44 b(filename\))438 2201 y(\(begin)533 2305 y(\(format)i(t)h("Error)g(found)f(in)h(processing)e(\045s\\n")h (filename\))533 2409 y(\(format)g(t)h("continuing\\n"\)\)\))275 2537 y Fo(The)38 b Fk(unwind-protect)d Fo(function)j(tak)m(es)j(t)m(w)m (o)f(argumen)m(ts.)68 b(The)38 b(\014rst)h(is)f(ev)-5 b(aluated)39 b(and)g(if)f(no)150 2647 y(error)g(o)s(ccurs)g(the)h(v)-5 b(alue)38 b(returned)f(from)h(that)h(expression)e(is)h(returned.)64 b(If)38 b(an)g(error)g(do)s(es)g(o)s(ccur)150 2756 y(while)31 b(ev)-5 b(aluating)32 b(the)h(\014rst)f(expression,)g(the)h(second)g (expression)e(is)h(ev)-5 b(aluated.)48 b Fk(unwind-protect)150 2866 y Fo(ma)m(y)29 b(b)s(e)f(used)g(recursiv)m(ely)-8 b(.)39 b(Note)30 b(that)g(all)d(\014les)h(op)s(ened)g(while)e(ev)-5 b(aluating)28 b(the)h(\014rst)f(expression)g(are)150 2976 y(closed)g(if)g(an)g(error)g(o)s(ccurs.)40 b(All)27 b(global)g(v)-5 b(ariables)27 b(outside)h(the)h(scop)s(e)f(of)h(the)f Fk(unwind-protect)d Fo(will)150 3085 y(b)s(e)30 b(left)g(as)g(they)g(w) m(ere)h(set)g(up)e(un)m(til)g(the)h(error.)40 b(Care)31 b(should)d(b)s(e)i(tak)m(en)h(in)e(using)g(this)g(function)g(but)150 3195 y(its)h(p)s(o)m(w)m(er)g(is)g(necessary)g(to)h(b)s(e)f(able)g(to)h (write)f(robust)f(Sc)m(heme)i(co)s(de.)150 3434 y Fn(8.4)68 b(Sc)l(heme)45 b(I/O)275 3621 y Fo(Di\013eren)m(t)35 b(Sc)m(heme's)g(ma)m(y)h(ha)m(v)m(e)g(quite)e(di\013eren)m(t)h (implemen)m(tations)e(of)i(\014le)f(i/o)i(functions)d(so)i(in)150 3730 y(this)29 b(section)i(w)m(e)g(will)c(describ)s(e)i(the)i(basic)e (functions)g(in)g(F)-8 b(estiv)j(al)31 b(SIOD)f(regarding)f(i/o.)275 3859 y(Simple)c(prin)m(ting)h(to)j(the)f(screen)g(ma)m(y)h(b)s(e)e(ac)m (hiev)m(ed)i(with)e(the)h(function)f Fk(print)f Fo(whic)m(h)h(prin)m (ts)g(the)150 3968 y(giv)m(en)j(s-expression)g(to)h(the)f(screen.)41 b(The)30 b(prin)m(ted)f(form)g(is)h(preceded)g(b)m(y)g(a)h(new)f(line.) 39 b(This)28 b(is)i(often)150 4078 y(useful)f(for)h(debugging)f(but)h (isn't)f(really)h(p)s(o)m(w)m(erful)e(enough)j(for)f(m)m(uc)m(h)g (else.)275 4206 y(Files)25 b(ma)m(y)i(b)s(e)f(op)s(ened)g(and)f(closed) i(and)f(referred)f(to)i(\014le)f(descriptors)f(in)g(a)i(direct)f (analogy)h(to)g(C's)150 4316 y(stdio)j(library)-8 b(.)41 b(The)30 b(SIOD)h(functions)e Fk(fopen)h Fo(and)g Fk(fclose)g Fo(w)m(ork)h(in)e(the)i(exactly)h(the)f(same)h(w)m(a)m(y)g(as)150 4425 y(their)d(equiv)-5 b(alen)m(tly)29 b(named)h(partners)g(in)f(C.) 275 4554 y(The)h Fk(format)f Fo(command)i(follo)m(ws)f(the)i(command)e (of)i(the)f(same)g(name)g(in)f(Emacs)h(and)g(a)g(n)m(um)m(b)s(er)150 4664 y(of)h(other)h(Lisps.)45 b(C)32 b(programmers)f(can)i(think)e(of)h (it)g(as)h Fk(fprintf)p Fo(.)44 b Fk(format)31 b Fo(tak)m(es)j(a)e (\014le)g(descriptor,)150 4773 y(format)44 b(string)e(and)h(argumen)m (ts)g(to)h(prin)m(t.)78 b(The)43 b(\014le)g(description)e(ma)m(y)j(b)s (e)e(a)i(\014le)f(descriptor)f(as)150 4883 y(returned)32 b(b)m(y)h(the)g(Sc)m(heme)g(function)f Fk(fopen)p Fo(,)g(it)h(ma)m(y)g (also)g(b)s(e)f Fk(t)h Fo(whic)m(h)f(means)h(the)g(output)f(will)f(b)s (e)150 4992 y(directed)24 b(as)h(standard)e(out)i(\(cf.)39 b Fk(printf)p Fo(\).)e(A)25 b(third)e(p)s(ossibilit)m(y)e(is)i Fk(nil)h Fo(whic)m(h)f(will)f(cause)j(the)f(output)150 5102 y(to)31 b(prin)m(ted)e(to)i(a)g(string)e(whic)m(h)g(is)h(returned) f(\(cf.)41 b Fk(sprintf)p Fo(\).)275 5230 y(The)31 b(format)i(string)e (closely)h(follo)m(ws)g(the)g(format)h(strings)e(in)g(ANSI)h(C,)g(but)g (it)g(is)f(not)i(the)f(same.)150 5340 y(Sp)s(eci\014cally)41 b(the)j(directiv)m(es)f(curren)m(tly)g(supp)s(orted)e(are,)48 b Fk(\045\045)p Fo(,)f Fk(\045d)p Fo(,)f Fk(\045x)p Fo(,)h Fk(\045s)p Fo(,)g Fk(\045f)p Fo(,)f Fk(\045g)d Fo(and)g Fk(\045c)p Fo(.)80 b(All)p eop %%Page: 30 32 30 31 bop 150 -116 a Fo(30)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(mo)s(di\014ers)34 b(for)i(these)g(are)h(also)f(supp)s(orted.)56 b(In)35 b(addition)f Fk(\045l)i Fo(is)f(pro)m(vided)g(for)g(prin)m(ting)f(of)j (Sc)m(heme)150 408 y(ob)5 b(jects)31 b(as)g(ob)5 b(jects.)275 543 y(F)-8 b(or)31 b(example)390 672 y Fk(\(format)46 b(t)h("\04503d)g(\0453.4f)f(\045s)h(\045l)g(\045l)h(\045l\\n")e(23)h (23)g("abc")g("abc")f('\(a)h(b)g(d\))h(utt1\))275 806 y Fo(will)27 b(pro)s(duce)390 935 y Fk(023)47 b(23.0000)f(abc)h("abc")f (\(a)h(b)h(d\))f(#)275 1069 y Fo(on)30 b(standard)f(output.)275 1204 y(When)j(large)g(lisp)e(expressions)h (are)i(prin)m(ted)d(they)j(are)g(di\016cult)d(to)j(read)f(b)s(ecause)g (of)h(the)f(paren-)150 1313 y(theses.)51 b(The)33 b(function)f Fk(pprintf)g Fo(prin)m(ts)g(an)h(expression)g(to)h(a)g(\014le)f (description)e(\(or)j Fk(t)f Fo(for)h(standard)150 1423 y(out\).)39 b(It)25 b(prin)m(ts)f(so)h(the)g(s-expression)e(is)h (nicely)g(lined)f(up)g(and)h(inden)m(ted.)38 b(This)23 b(is)h(often)h(called)f(prett)m(y)150 1533 y(prin)m(ting)k(in)h(Lisps.) 275 1667 y(F)-8 b(or)29 b(reading)f(input)e(from)j(terminal)e(or)h (\014le,)h(there)g(is)e(curren)m(tly)h(no)h(equiv)-5 b(alen)m(t)28 b(to)h Fk(scanf)p Fo(.)39 b(Items)150 1777 y(ma)m(y)31 b(only)e(b)s(e)h(read)g(as)h(Sc)m(heme)g(expressions.)39 b(The)30 b(command)390 1905 y Fk(\(load)46 b(FILENAME)g(t\))150 2259 y Fo(will)25 b(load)h(all)h(s-expressions)f(in)g Fk(FILENAME)f Fo(and)h(return)h(them,)h(unev)-5 b(aluated)26 b(as)i(a)f(list.)39 b(Without)27 b(the)150 2369 y(third)i(argumen)m(t)h (the)h Fk(load)e Fo(function)g(will)f(load)i(and)g(ev)-5 b(aluate)31 b(eac)m(h)g(s-expression)f(in)f(the)h(\014le.)275 2503 y(T)-8 b(o)30 b(read)h(individual)25 b(s-expressions)30 b(use)g Fk(readfp)p Fo(.)39 b(F)-8 b(or)31 b(example)390 2632 y Fk(\(let)47 b(\(\(fd)f(\(fopen)g(trainfile)g("r"\)\))676 2736 y(\(entry\))676 2839 y(\(count)g(0\)\))581 2943 y(\(while)g(\(not)h(\(equal?)e(\(set!)i(entry)f(\(readfp)g(fd\)\))h (\(eof-val\)\)\))629 3047 y(\(if)g(\(string-equal)d(\(car)i(entry\))g ("home"\))772 3151 y(\(set!)g(count)h(\(+)g(1)g(count\)\)\)\))581 3254 y(\(fclose)f(fd\)\))275 3389 y Fo(T)-8 b(o)39 b(con)m(v)m(ert)i(a) f(sym)m(b)s(ol)e(whose)i(prin)m(t)e(name)h(is)g(a)h(n)m(um)m(b)s(er)e (to)i(a)g(n)m(um)m(b)s(er)e(use)h Fk(parse-number)p Fo(.)150 3499 y(This)29 b(is)g(the)i(equiv)-5 b(alen)m(t)29 b(to)i Fk(atof)f Fo(in)f(C.)275 3633 y(Note)24 b(that,)i(all)c(i/o)i(from)f (Sc)m(heme)h(input)d(\014les)i(is)f(assumed)h(to)h(b)s(e)f(basically)f (some)i(form)f(of)h(Sc)m(heme)150 3743 y(data)j(\(though)f(can)g(b)s(e) g(just)f(n)m(um)m(b)s(ers,)h(tok)m(ens\).)41 b(F)-8 b(or)26 b(more)h(elab)s(orate)f(analysis)f(of)h(incoming)f(data)h(it)150 3852 y(is)j(p)s(ossible)f(to)i(use)g(the)g(text)h(tok)m(enization)g (functions)e(whic)m(h)g(o\013er)h(a)h(fully)c(programmable)i(metho)s(d) 150 3962 y(of)i(reading)e(data.)p eop %%Page: 31 33 31 32 bop 150 -116 a Fo(Chapter)30 b(9:)41 b(TTS)2861 b(31)150 299 y Fl(9)80 b(TTS)275 546 y Fo(F)-8 b(estiv)j(al)39 b(supp)s(orts)f(text)i(to)g(sp)s(eec)m(h)g(for)f(ra)m(w)g(text)i (\014les.)67 b(If)39 b(y)m(ou)g(are)h(not)g(in)m(terested)f(in)f(using) 150 656 y(F)-8 b(estiv)j(al)37 b(in)e(an)m(y)h(other)h(w)m(a)m(y)g (except)g(as)g(blac)m(k)f(b)s(o)m(x)g(for)g(rendering)f(text)i(as)g(sp) s(eec)m(h,)h(the)e(follo)m(wing)150 766 y(metho)s(d)30 b(is)f(probably)g(what)h(y)m(ou)h(w)m(an)m(t.)390 899 y Fk(festival)46 b(--tts)g(myfile)275 1038 y Fo(This)24 b(will)g(sa)m(y)j(the)g(con)m(ten)m(ts)h(of)e(`)p Fk(myfile)p Fo('.)39 b(Alternativ)m(ely)25 b(text)j(ma)m(y)f(b)s(e)f(submitted)e (on)j(standard)150 1147 y(input)390 1280 y Fk(echo)47 b(hello)f(world)g(|)i(festival)d(--tts)390 1384 y(cat)i(myfile)f(|)h (festival)f(--tts)275 1523 y Fo(F)-8 b(estiv)j(al)37 b(supp)s(orts)f(the)i(notion)e(of)i Fi(text)i(mo)-5 b(des)46 b Fo(where)37 b(the)h(text)g(\014le)f(t)m(yp)s(e)h(ma)m(y)g(b)s(e)f (iden)m(ti\014ed,)150 1633 y(allo)m(wing)e(F)-8 b(estiv)j(al)37 b(to)g(pro)s(cess)f(the)h(\014le)e(in)h(an)g(appropriate)f(w)m(a)m(y)-8 b(.)61 b(Curren)m(tly)35 b(only)g(t)m(w)m(o)j(t)m(yp)s(es)f(are)150 1742 y(considered)h(stable:)58 b Fk(STML)38 b Fo(and)h Fk(raw)p Fo(,)i(but)e(other)g(t)m(yp)s(es)g(suc)m(h)g(as)h Fk(email)p Fo(,)g Fk(HTML)p Fo(,)h Fk(Latex)p Fo(,)f(etc.)69 b(are)150 1852 y(b)s(eing)24 b(dev)m(elop)s(ed)i(and)f(discussed)f(b)s (elo)m(w.)39 b(This)24 b(follo)m(ws)h(the)h(idea)f(of)h(bu\013er)f(mo)s (des)h(in)e(Emacs)i(where)150 1961 y(a)k(\014le's)e(t)m(yp)s(e)h(can)h (b)s(e)e(utilized)f(to)j(b)s(est)f(displa)m(y)f(the)h(text.)41 b(T)-8 b(ext)30 b(mo)s(de)f(ma)m(y)h(also)f(b)s(e)g(selected)g(based) 150 2071 y(on)h(a)h(\014lename's)f(extension.)275 2210 y(Within)25 b(the)j(command)g(in)m(terpreter)f(the)g(function)g Fk(tts)g Fo(is)f(used)h(to)h(render)f(\014les)g(as)g(text;)j(it)d(tak)m (es)150 2320 y(a)k(\014lename)e(and)h(the)h(text)g(mo)s(de)f(as)h (argumen)m(ts.)150 2588 y Fn(9.1)68 b(Utterance)46 b(c)l(h)l(unking)275 2785 y Fo(T)-8 b(ext)26 b(to)g(sp)s(eec)m(h)g(w)m(orks)f(b)m(y)g (\014rst)g(tok)m(enizing)h(the)f(\014le)g(and)g(c)m(h)m(unking)f(the)i (tok)m(ens)g(in)m(to)g(utterances.)150 2895 y(The)e(de\014nition)e(of)j (utterance)h(breaks)e(is)g(determined)f(b)m(y)i(the)f(utterance)i(tree) f(in)f(v)-5 b(ariable)23 b Fk(eou_tree)p Fo(.)150 3004 y(A)35 b(default)g(v)m(ersion)f(is)g(giv)m(en)h(in)f(`)p Fk(lib/tts.scm)p Fo('.)53 b(This)33 b(uses)i(a)g(decision)f(tree)i(to)g (determine)e(what)150 3114 y(signi\014es)27 b(an)i(utterance)g(break.) 40 b(Ob)m(viously)27 b(blank)g(lines)g(are)j(probably)d(the)i(most)g (reliable,)e(follo)m(w)m(ed)150 3223 y(b)m(y)33 b(certain)h (punctuation.)48 b(The)33 b(confusion)f(of)i(the)f(use)g(of)h(p)s(erio) s(ds)d(for)i(b)s(oth)g(sen)m(tence)h(breaks)g(and)150 3333 y(abbreviations)27 b(requires)g(some)i(more)g(heuristics)e(to)i(b) s(est)f(guess)h(their)e(di\013eren)m(t)i(use.)39 b(The)28 b(follo)m(wing)150 3443 y(tree)j(is)e(curren)m(tly)h(used)f(whic)m(h)h (w)m(orks)g(b)s(etter)g(than)g(simply)e(using)h(punctuation.)390 3576 y Fk(\(defvar)46 b(eou_tree)390 3680 y('\(\(n.whitespace)e (matches)h(".*\\n.*\\n\\\\\(.\\\\|\\n\\\\\)*"\))d(;;)47 b(2)g(or)g(more)g(newlines)485 3783 y(\(\(1\)\))485 3887 y(\(\(punc)g(in)g(\("?")f(":")h("!"\)\))533 3991 y(\(\(1\)\))533 4095 y(\(\(punc)f(is)h("."\))581 4198 y(;;)g(This)g(is)g(to)g (distinguish)e(abbreviations)f(vs)j(periods)581 4302 y(;;)g(These)f(are)h(heuristics)581 4406 y(\(\(name)f(matches)g ("\\\\\(.*\\\\..*\\\\|[A-Z][A-Za)o(-z])o(?[A-)o(Za-z)o(]?\\)o(\\|et)o (c\\\\\))o("\))629 4510 y(\(\(n.whitespace)e(is)j(")g("\))676 4614 y(\(\(0\)\))858 b(;;)47 b(if)g(abbrev)g(single)f(space)g(isn't)g (enough)g(for)h(break)676 4717 y(\(\(n.name)f(matches)g("[A-Z].*"\))724 4821 y(\(\(1\)\))724 4925 y(\(\(0\)\)\)\))629 5029 y(\(\(n.whitespace)e (is)j(")g("\))95 b(;;)47 b(if)g(it)h(doesn't)d(look)i(like)g(an)g (abbreviation)676 5132 y(\(\(n.name)f(matches)g("[A-Z].*"\))92 b(;;)48 b(single)e(space)g(and)h(non-cap)f(is)h(no)g(break)724 5236 y(\(\(1\)\))724 5340 y(\(\(0\)\)\))p eop %%Page: 32 34 32 33 bop 150 -116 a Fo(32)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)676 299 y Fk(\(\(1\)\)\)\))581 403 y(\(\(0\)\)\)\)\))275 543 y Fo(The)37 b(tok)m(en)i(items)f(this)f (is)g(applied)e(to)k(will)c(alw)m(a)m(ys)k(\(except)g(in)e(the)h(end)g (of)g(\014le)f(case\))i(include)150 653 y(one)29 b(follo)m(wing)f(tok)m (en,)i(so)f(lo)s(ok)g(ahead)g(is)f(p)s(ossible.)38 b(The)29 b Fk(")p Fo(n.)p Fk(")f Fo(and)g Fk(")p Fo(p.)p Fk(")g Fo(and)g Fk(")p Fo(p.p.)p Fk(")g Fo(pre\014xes)g(allo)m(w)150 762 y(access)36 b(to)g(the)f(surrounding)d(tok)m(en)k(con)m(text.)57 b(The)34 b(features)i Fk(name)p Fo(,)f Fk(whitespace)d Fo(and)j Fk(punc)e Fo(allo)m(w)150 872 y(access)h(to)g(the)f(con)m(ten) m(ts)h(of)f(the)h(tok)m(en)g(itself.)47 b(A)m(t)33 b(presen)m(t)g (there)g(is)f(no)h(w)m(a)m(y)h(to)f(access)i(the)e(lexicon)150 982 y(form)f(this)f(tree)i(whic)m(h)e(unfortunately)g(migh)m(t)h(b)s(e) g(useful)f(if)g(certain)h(abbreviations)f(w)m(ere)i(iden)m(ti\014ed)150 1091 y(as)e(suc)m(h)f(there.)275 1232 y(Note)j(these)g(are)g (heuristics)d(and)i(written)g(b)m(y)g(hand)f(not)i(trained)f(from)g (data,)h(though)g(problems)150 1341 y(ha)m(v)m(e)i(b)s(een)e(\014xed)g (as)h(they)g(ha)m(v)m(e)h(b)s(een)e(observ)m(ed)g(in)g(data.)51 b(The)33 b(ab)s(o)m(v)m(e)i(rules)e(ma)m(y)h(mak)m(e)h(mistak)m(es)150 1451 y(where)c(abbreviations)f(app)s(ear)g(at)i(end)f(of)g(lines,)f (and)h(when)f(improp)s(er)f(spacing)i(and)g(capitalization)150 1561 y(is)f(used.)41 b(This)30 b(is)f(probably)h(w)m(orth)g(c)m (hanging,)i(for)e(mo)s(des)h(where)f(more)h(casual)g(text)h(app)s (ears,)e(suc)m(h)150 1670 y(as)36 b(email)e(messages)i(and)f(USENET)g (news)f(messages.)57 b(A)35 b(p)s(ossible)e(impro)m(v)m(emen)m(t)j (could)e(b)s(e)h(made)150 1780 y(b)m(y)g(analysing)e(a)j(text)g(to)f (\014nd)f(out)h(its)f(basic)h(threshold)e(of)i(utterance)h(break)f (\(i.e.)54 b(if)34 b(no)h(full)e(stop,)150 1889 y(t)m(w)m(o)d(spaces,)f (follo)m(w)m(ed)f(b)m(y)g(a)h(capitalized)f(w)m(ord)g(sequences)g(app)s (ear)g(and)g(the)g(text)h(is)f(of)g(a)h(reasonable)150 1999 y(length)h(then)g(lo)s(ok)g(for)g(other)h(criteria)e(for)h (utterance)i(breaks\).)275 2140 y(Ultimately)k(what)g(w)m(e)i(are)f (trying)f(to)i(do)f(is)f(to)h(c)m(h)m(unk)g(the)g(text)h(in)m(to)f (utterances)h(that)f(can)h(b)s(e)150 2249 y(syn)m(thesized)23 b(quic)m(kly)f(and)g(start)i(to)g(pla)m(y)f(them)g(quic)m(kly)f(to)i (minimise)c(the)j(time)g(someone)h(has)f(to)h(w)m(ait)150 2359 y(for)33 b(the)h(\014rst)e(sound)g(when)g(starting)h(syn)m (thesis.)49 b(Th)m(us)32 b(it)h(w)m(ould)f(b)s(e)g(b)s(etter)i(if)e (this)g(c)m(h)m(unking)g(w)m(ere)150 2468 y(done)d(on)g Fi(pr)-5 b(oso)g(dic)34 b(phr)-5 b(ases)39 b Fo(rather)29 b(than)g(c)m(h)m(unks)g(more)g(similar)e(to)i(linguistic)e(sen)m (tences.)41 b(Proso)s(dic)150 2578 y(phrases)29 b(are)i(b)s(ounded)d (in)i(size,)g(while)e(sen)m(tences)k(are)f(not.)150 2851 y Fn(9.2)68 b(T)-11 b(ext)45 b(mo)t(des)275 3050 y Fo(W)-8 b(e)22 b(do)e(not)i(b)s(eliev)m(e)e(that)h(all)f(texts)i(are)f(of)g (the)g(same)h(t)m(yp)s(e.)37 b(Often)21 b(information)e(ab)s(out)i(the) g(general)150 3159 y(con)m(ten)m(ts)30 b(of)e(\014le)f(will)f(aid)h (syn)m(thesis)g(greatly)-8 b(.)41 b(F)-8 b(or)29 b(example)f(in)e (Latex)j(\014les)e(w)m(e)i(do)f(not)g(w)m(an)m(t)h(to)g(here)150 3269 y Fk(")p Fo(left)37 b(brace,)j(bac)m(kslash)d(e)h(m)p Fk(")f Fo(b)s(efore)g(eac)m(h)i(emphasized)e(w)m(ord,)i(nor)e(do)g(w)m (e)h(w)m(an)m(t)h(to)f(necessarily)150 3378 y(hear)26 b(formating)g(commands.)39 b(F)-8 b(estiv)j(al)26 b(o\013ers)h(a)g (basic)e(metho)s(d)h(for)g(sp)s(ecifying)e(customization)i(rules)150 3488 y(dep)s(ending)f(on)i(the)g Fi(mo)-5 b(de)36 b Fo(of)27 b(the)g(text.)41 b(By)27 b(t)m(yp)s(e)h(w)m(e)g(are)f(follo)m(wing)f (the)h(notion)g(of)g(mo)s(des)g(in)f(Emacs)150 3598 y(and)k(ev)m(en)m (tually)g(will)e(allo)m(w)i(customization)g(at)h(a)g(similar)d(lev)m (el.)275 3738 y(Mo)s(des)j(are)h(sp)s(eci\014ed)d(as)j(the)f(third)f (argumen)m(t)h(to)h(the)g(function)e Fk(tts)p Fo(.)42 b(When)31 b(using)f(the)i(Emacs)150 3848 y(in)m(terface)d(to)g(F)-8 b(estiv)j(al)29 b(the)f(bu\013er)g(mo)s(de)g(is)f(automatically)h (passed)g(as)h(the)g(text)g(mo)s(de.)40 b(If)28 b(the)g(mo)s(de)150 3957 y(is)h(not)i(supp)s(orted)e(a)h(w)m(arning)g(message)h(is)e(prin)m (ted)g(and)h(the)h(ra)m(w)f(text)i(mo)s(de)e(is)f(used.)275 4098 y(Our)g(initial)f(text)k(mo)s(de)e(implemen)m(tation)g(allo)m(ws)g (con\014guration)g(b)s(oth)g(in)g(C)p Fk(++)g Fo(and)g(in)f(Sc)m(heme.) 150 4208 y(Ob)m(viously)f(in)g(C)p Fk(++)h Fo(almost)g(an)m(ything)g (can)h(b)s(e)g(done)f(but)g(it)g(is)g(not)h(as)g(easy)g(to)g (recon\014gure)g(without)150 4317 y(recompilation.)39 b(Here)28 b(w)m(e)h(will)d(discuss)g(those)j(mo)s(des)f(whic)m(h)f(can) i(b)s(e)e(fully)f(con\014gured)i(at)h(run)e(time.)275 4458 y(A)j(text)h(mo)s(de)f(ma)m(y)h(con)m(tain)g(the)g(follo)m(wing) 150 4626 y Fi(\014lter)296 b Fo(A)25 b(Unix)f(shell)f(program)i (\014lter)g(that)g(pro)s(cesses)g(the)g(text)i(\014le)d(in)g(some)h (appropriate)f(w)m(a)m(y)-8 b(.)630 4736 y(F)g(or)36 b(example)f(for)g(email)g(it)g(migh)m(t)g(remo)m(v)m(e)i(unin)m (teresting)d(headers)h(and)f(just)h(output)630 4846 y(the)c(sub)5 b(ject,)30 b(from)g(line)f(and)h(the)g(message)i(b)s(o)s(dy)-8 b(.)40 b(If)30 b(not)h(sp)s(eci\014ed,)e(an)h(iden)m(tit)m(y)g (\014lter)630 4955 y(is)f(used.)150 5121 y Fi(init)p 293 5121 28 4 v 34 w(function)630 5230 y Fo(This)36 b(\(Sc)m(heme\))j (function)e(will)f(b)s(e)h(called)g(b)s(efore)h(an)m(y)g(pro)s(cessing) f(will)f(b)s(e)h(done.)64 b(It)630 5340 y(allo)m(ws)30 b(further)f(set)i(up)e(of)i(tok)m(enization)g(rules)e(and)g(v)m(oices)j (etc.)p eop %%Page: 33 35 33 34 bop 150 -116 a Fo(Chapter)30 b(9:)41 b(TTS)2861 b(33)150 299 y Fi(exit)p 298 299 28 4 v 34 w(function)630 408 y Fo(This)39 b(\(Sc)m(heme\))j(function)e(will)f(b)s(e)h(called)g (at)i(the)f(end)g(of)g(an)m(y)g(pro)s(cessing)f(allo)m(wing)630 518 y(reseting)30 b(of)h(tok)m(enization)g(rules)e(etc.)150 669 y Fi(analysis)p 468 669 V 35 w(mo)-5 b(de)630 779 y Fo(If)35 b(analysis)f(mo)s(de)h(is)g Fk(xml)f Fo(the)i(\014le)e(is)h (read)g(through)g(the)h(built)d(in)h(XML)i(parser)f Fk(rxp)p Fo(.)630 889 y(Alternativ)m(ely)f(if)f(analysis)g(mo)s(de)h(is)g Fk(xxml)f Fo(the)i(\014lter)e(should)g(an)h(SGML)h(normalising)630 998 y(parser)c(and)g(the)g(output)g(is)g(pro)s(cessed)f(in)g(a)i(w)m(a) m(y)h(suitable)c(for)j(it.)43 b(An)m(y)31 b(other)h(v)-5 b(alue)31 b(is)630 1108 y(ignored.)275 1259 y(These)f(mo)s(de)g(sp)s (eci\014c)f(parameters)h(are)h(sp)s(eci\014ed)e(in)g(the)i(a-list)e (held)g(in)g Fk(tts_text_modes)p Fo(.)275 1389 y(When)34 b(using)f(F)-8 b(estiv)j(al)35 b(in)e(Emacs)i(the)g(emacs)g(bu\013er)e (mo)s(de)i(is)e(passed)h(to)i(F)-8 b(estiv)j(al)34 b(as)h(the)g(text) 150 1499 y(mo)s(de.)275 1629 y(Note)g(that)h(ab)s(o)m(v)m(e)g(mec)m (hanism)d(is)h(not)h(really)e(designed)h(to)h(b)s(e)f(re-en)m(tran)m (t,)k(this)33 b(should)g(b)s(e)h(ad-)150 1739 y(dressed)29 b(in)h(later)g(v)m(ersions.)275 1869 y(F)-8 b(ollo)m(wing)32 b(the)h(use)g(of)g(auto-selection)h(of)f(mo)s(de)g(in)e(Emacs,)k(F)-8 b(estiv)j(al)33 b(can)g(auto-select)i(the)e(text)150 1979 y(mo)s(de)27 b(based)h(on)g(the)g(\014lename)f(giv)m(en)h(when)f (no)h(explicit)e(mo)s(de)h(is)g(giv)m(en.)40 b(The)27 b(Lisp)g(v)-5 b(ariable)26 b Fk(auto-)150 2089 y(text-mode-alist)17 b Fo(is)k(a)h(list)e(of)i(dotted)g(pairs)e(of)h(regular)g(expression)f (and)h(mo)s(de)g(name.)38 b(F)-8 b(or)22 b(example)150 2198 y(to)33 b(sp)s(ecify)f(that)h(the)g Fk(email)e Fo(mo)s(de)i(is)e (to)j(b)s(e)e(used)g(for)g(\014les)g(ending)f(in)h(`)p Fk(.email)p Fo(')f(w)m(e)j(w)m(ould)d(add)h(to)150 2308 y(the)f(curren)m(t)f Fk(auto-text-mode-alist)25 b Fo(as)30 b(follo)m(ws)390 2432 y Fk(\(set!)46 b(auto-text-mode-alist)676 2536 y(\(cons)h(\(cons)f("\\\\.email$")f('email\))963 2640 y(auto-text-mode-alist\)\))275 2770 y Fo(If)21 b(the)h(function)f Fk(tts)g Fo(is)g(called)g(with)g(a)h(mo)s(de)g(other)g(than)g Fk(nil)f Fo(that)i(mo)s(de)e(o)m(v)m(errides)h(an)m(y)h(sp)s(eci\014ed) 150 2880 y(b)m(y)33 b(the)h Fk(auto-text-mode-alist)p Fo(.)45 b(The)33 b(mo)s(de)g Fk(fundamental)d Fo(is)i(the)i(explicit)e Fk(")p Fo(n)m(ull)p Fk(")f Fo(mo)s(de,)j(it)f(is)150 2990 y(used)38 b(when)g(no)g(mo)s(de)g(is)g(sp)s(eci\014ed)f(in)g(the)i (function)f Fk(tts)p Fo(,)i(and)e(matc)m(h)h(is)f(found)f(in)h Fk(auto-text-)150 3099 y(mode-alist)28 b Fo(or)i(the)g(sp)s(eci\014ed)f (mo)s(de)h(is)g(not)g(found.)275 3230 y(By)51 b(con)m(v)m(en)m(tion)h (if)e(a)h(requested)g(text)h(mo)s(del)d(is)h(not)i(found)d(in)h Fk(tts_text_modes)d Fo(the)k(\014le)150 3339 y(`)p Fk(MODENAME-mode)p Fo(')28 b(will)g(b)s(e)j Fk(required)p Fo(.)40 b(Therefore)31 b(if)f(y)m(ou)h(ha)m(v)m(e)h(the)f(\014le)f(`)p Fk(MODENAME-mode.scm)p Fo(')d(in)150 3449 y(y)m(our)35 b(library)d(then)i(it)g(will)e(b)s(e)i (automatically)h(loaded)f(on)g(reference.)54 b(Mo)s(des)35 b(ma)m(y)g(b)s(e)f(quite)g(large)150 3558 y(and)c(it)g(is)f(not)i (necessary)f(ha)m(v)m(e)i(F)-8 b(estiv)j(al)31 b(load)f(them)g(all)f (at)i(start)g(up)f(time.)275 3689 y(Because)d(of)g(the)g Fk(auto-text-mode-alist)21 b Fo(and)26 b(the)h(auto)g(loading)e(of)i (curren)m(tly)f(unde\014ned)e(text)150 3798 y(mo)s(des)30 b(y)m(ou)h(can)f(use)g(F)-8 b(estiv)j(al)31 b(lik)m(e)390 3923 y Fk(festival)46 b(--tts)g(example.email)275 4054 y Fo(F)-8 b(estiv)j(al)30 b(with)f(automatically)h(syn)m(thesize)h(`)p Fk(example.email)p Fo(')c(in)i(text)i(mo)s(de)f Fk(email)p Fo(.)275 4184 y(If)51 b(y)m(ou)h(add)f(y)m(our)g(o)m(wn)h(p)s(ersonal)e (text)j(mo)s(des)e(y)m(ou)h(should)d(do)j(the)g(follo)m(wing.)103 b(Supp)s(ose)150 4294 y(y)m(ou'v)m(e)52 b(written)d(an)h(HTML)g(mo)s (de.)99 b(Y)-8 b(ou)51 b(ha)m(v)m(e)g(named)f(it)g(`)p Fk(html-mode.scm)p Fo(')d(and)i(put)h(it)f(in)150 4403 y(`)p Fk(/home/awb/lib/festival/)p Fo('.)36 b(In)30 b(y)m(our)h(`)p Fk(.festivalrc)p Fo(')d(\014rst)i(iden)m(tify)f(y)m(ou're)i(p)s (ersonal)f(F)-8 b(estiv)j(al)150 4513 y(library)28 b(directory)i(b)m(y) g(adding)f(it)h(to)h Fk(lib-path)p Fo(.)390 4637 y Fk(\(set!)46 b(lib-path)g(\(cons)g("/home/awb/lib/festival/")41 b(lib-path\)\))275 4768 y Fo(Then)33 b(add)h(the)g(de\014nition)e(to)k(the)e Fk(auto-text-mode-alist)29 b Fo(that)35 b(\014le)f(names)g(ending)f(`)p Fk(.html)p Fo(')150 4877 y(or)d(`)p Fk(.htm)p Fo(')g(should)e(b)s(e)i (read)g(in)g(HTML)g(mo)s(de.)390 5002 y Fk(\(set!)46 b(auto-text-mode-alist)676 5106 y(\(cons)h(\(cons)f("\\\\.html?$")f ('html\))963 5210 y(auto-text-mode-alist\)\))275 5340 y Fo(Then)29 b(y)m(ou)i(ma)m(y)g(syn)m(thesize)f(an)g(HTML)g(\014le)g (either)g(from)g(Sc)m(heme)p eop %%Page: 34 36 34 35 bop 150 -116 a Fo(34)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(tts)47 b("example.html")d(nil\))150 546 y Fo(Or)30 b(from)g(the)g(shell)f (command)h(line)390 787 y Fk(festival)46 b(--tts)g(example.html)275 925 y Fo(An)m(y)m(one)27 b(familiar)d(with)h(mo)s(des)h(in)f(Emacs)i (should)d(recognise)j(that)g(the)g(pro)s(cess)f(of)h(adding)e(a)h(new) 150 1034 y(text)31 b(mo)s(de)f(to)h(F)-8 b(estiv)j(al)31 b(is)e(v)m(ery)i(similar)d(to)j(adding)e(a)i(new)f(bu\013er)f(mo)s(de)h (to)h(Emacs.)150 1299 y Fn(9.3)68 b(Example)46 b(text)g(mo)t(de)275 1495 y Fo(Here)37 b(is)f(a)i(short)e(example)h(of)g(a)h(tts)f(mo)s(de)g (for)g(reading)f(email)g(messages.)62 b(It)37 b(is)f(b)m(y)h(no)g (means)150 1605 y(complete)c(but)f(is)g(a)h(start)g(at)g(sho)m(wing)f (ho)m(w)g(y)m(ou)h(can)g(customize)g(tts)g(mo)s(des)f(without)g (writing)e(new)150 1714 y(C)p Fk(++)f Fo(co)s(de.)275 1852 y(The)35 b(\014rst)h(task)h(is)f(to)h(de\014ne)e(a)i(\014lter)f (that)h(will)d(tak)m(e)k(a)e(sa)m(v)m(ed)i(mail)d(message)j(and)d(remo) m(v)m(e)j(ex-)150 1961 y(traneous)31 b(headers)g(and)f(just)g(lea)m(v)m (e)j(the)e(from)f(line,)g(sub)5 b(ject)31 b(and)f(b)s(o)s(dy)g(of)h (the)g(message.)43 b(The)31 b(\014lter)150 2071 y(program)d(is)f(giv)m (en)h(a)g(\014le)f(name)h(as)g(its)g(\014rst)f(argumen)m(t)h(and)f (should)f(output)i(the)g(result)f(on)h(standard)150 2181 y(out.)41 b(F)-8 b(or)31 b(our)f(purp)s(oses)e(w)m(e)j(will)d(do)i (this)g(as)g(a)h(shell)e(script.)390 2312 y Fk(#!/bin/sh)390 2416 y(#)95 b(Email)47 b(filter)f(for)h(Festival)e(tts)i(mode)390 2520 y(#)95 b(usage:)46 b(email_filter)f(mail_message)f (>tidied_mail_message)390 2624 y(grep)j("^From:)e(")j($1)390 2727 y(echo)390 2831 y(grep)f("^Subject:)e(")i($1)390 2935 y(echo)390 3039 y(#)g(delete)g(up)g(to)g(first)f(blank)h(line)f (\(i.e.)h(the)g(header\))390 3142 y(sed)g('1,/^$/)f(d')h($1)275 3280 y Fo(Next)37 b(w)m(e)f(de\014ne)g(the)g(email)g(init)e(function,)j (whic)m(h)e(will)f(b)s(e)h(called)h(when)f(w)m(e)i(start)g(this)e(mo)s (de.)150 3390 y(What)d(w)m(e)h(will)c(do)i(is)g(sa)m(v)m(e)i(the)f (curren)m(t)g(tok)m(en)g(to)h(w)m(ords)e(function)f(and)h(slot)h(in)e (our)h(o)m(wn)h(new)f(one.)150 3499 y(W)-8 b(e)32 b(can)e(then)g (restore)h(the)g(previous)e(one)h(when)g(w)m(e)h(exit.)390 3631 y Fk(\(define)46 b(\(email_init_func\))438 3735 y("Called)g(on)h(starting)e(email)i(text)f(mode.")438 3838 y(\(set!)g(email_previous_t2w_func)c(token_to_words\))438 3942 y(\(set!)k(english_token_to_words)c(email_token_to_words\))438 4046 y(\(set!)k(token_to_words)e(email_token_to_words\)\))275 4184 y Fo(Note)30 b(that)g Fi(b)-5 b(oth)37 b Fk (english_token_to_words)23 b Fo(and)28 b Fk(token_to_words)e Fo(should)h(b)s(e)h(set)i(to)g(ensure)150 4293 y(that)h(our)f(new)g (tok)m(en)h(to)g(w)m(ord)f(function)f(is)h(still)e(used)i(when)f(w)m(e) i(c)m(hange)g(v)m(oices.)275 4431 y(The)e(corresp)s(onding)g(end)g (function)h(puts)f(the)i(tok)m(en)g(to)g(w)m(ords)f(function)f(bac)m (k.)390 4562 y Fk(\(define)46 b(\(email_exit_func\))438 4666 y("Called)g(on)h(exit)f(email)h(text)f(mode.")438 4770 y(\(set!)g(english_token_to_words)c(email_previous_t2w_func\))438 4874 y(\(set!)k(token_to_words)e(email_previous_t2w_func\))o(\))275 5011 y Fo(No)m(w)33 b(w)m(e)g(can)g(de\014ne)e(the)i(email)f(sp)s (eci\014c)f(tok)m(en)j(to)f(w)m(ords)f(function.)46 b(In)32 b(this)f(example)h(w)m(e)h(deal)150 5121 y(with)k(t)m(w)m(o)i(sp)s (eci\014c)d(cases.)64 b(First)38 b(w)m(e)g(deal)f(with)g(the)h(common)g (form)f(of)h(email)f(addresses)g(so)h(that)150 5230 y(the)28 b(angle)g(brac)m(k)m(ets)i(are)e(not)g(pronounced.)39 b(The)27 b(second)h(p)s(oin)m(ts)f(are)h(to)h(recognise)f(quoted)h (text)g(and)150 5340 y(immediately)g(c)m(hange)i(the)g(the)f(sp)s(eak)m (er)h(to)g(the)g(alternativ)m(e)f(sp)s(eak)m(er.)p eop %%Page: 35 37 35 36 bop 150 -116 a Fo(Chapter)30 b(9:)41 b(TTS)2861 b(35)390 299 y Fk(\(define)46 b(\(email_token_to_words)c(token)k (name\))485 403 y("Email)h(specific)e(token)h(to)i(word)e(rules.")485 506 y(\(cond)275 638 y Fo(This)34 b(\014rst)i(condition)f(iden)m (ti\014es)g(the)i(tok)m(en)g(as)g(a)g(brac)m(k)m(eted)h(email)d (address)h(and)g(remo)m(v)m(es)i(the)150 747 y(brac)m(k)m(ets)c(and)e (splits)f(the)i(tok)m(en)h(in)m(to)e(name)h(and)f(IP)g(address.)47 b(Note)34 b(that)f(w)m(e)g(recursiv)m(ely)f(call)g(the)150 857 y(function)j Fk(email_previous_t2w_func)29 b Fo(on)36 b(the)g(email)f(name)h(and)g(IP)f(address)h(so)g(that)g(they)h(will)150 967 y(b)s(e)d(pronounced)e(prop)s(erly)-8 b(.)51 b(Note)35 b(that)g(b)s(ecause)f(that)h(function)e(returns)g(a)h Fi(list)44 b Fo(of)34 b(w)m(ords)g(w)m(e)g(need)150 1076 y(to)d(app)s(end)e(them)h(together.)533 1202 y Fk(\(\(string-matches)44 b(name)i("<.*.*>"\))629 1306 y(\(append)676 1409 y (\(email_previous_t2w_func)c(token)724 1513 y(\(string-after)i (\(string-before)g(name)j("@"\))f("<"\)\))676 1617 y(\(cons)724 1721 y("at")724 1824 y(\(email_previous_t2w_func)41 b(token)772 1928 y(\(string-before)j(\(string-after)g(name)j("@"\))f(">"\)\)\)\)\)) 275 2060 y Fo(Our)40 b(next)h(condition)f(deals)h(with)f(iden)m (tifying)f(a)j(greater)h(than)e(sign)f(b)s(eing)g(used)h(as)h(a)f (quote)150 2169 y(mark)m(er.)f(When)28 b(w)m(e)g(detect)i(this)d(w)m(e) h(select)h(the)f(alternativ)m(e)g(sp)s(eak)m(er,)h(ev)m(en)g(though)e (it)h(ma)m(y)g(already)150 2279 y(b)s(e)36 b(selected.)59 b(W)-8 b(e)38 b(then)e(return)g(no)g(w)m(ords)g(so)h(the)g(quote)g (mark)m(er)f(is)g(not)h(sp)s(ok)m(en.)58 b(The)36 b(follo)m(wing)150 2388 y(condition)29 b(\014nds)g(greater)i(than)f(signs)g(whic)m(h)f (are)h(the)h(\014rst)f(tok)m(en)h(on)f(a)h(line.)533 2514 y Fk(\(\(and)47 b(\(string-matches)c(name)k(">"\))820 2618 y(\(string-matches)c(\(item.feat)i(token)i("whitespace"\))1583 2721 y("[)g(\\t\\n]*\\n)f(*"\)\))581 2825 y(\(voice_don_diphone\))581 2929 y(nil)h(;;)g(return)f(nothing)g(to)h(say)533 3033 y(\))275 3164 y Fo(If)38 b(it)g(do)s(esn't)g(matc)m(h)h(an)m(y)g(of)f (these)h(w)m(e)g(can)g(go)g(ahead)g(and)f(use)g(the)h(builtin)c(tok)m (en)k(to)g(w)m(ords)150 3274 y(function)30 b(Actually)-8 b(,)32 b(w)m(e)g(call)f(the)g(function)f(that)i(w)m(as)g(set)g(b)s (efore)f(w)m(e)h(en)m(tered)g(this)f(mo)s(de)g(to)h(ensure)150 3383 y(an)m(y)25 b(other)g(sp)s(eci\014c)f(rules)f(still)g(remain.)38 b(But)25 b(b)s(efore)f(that)i(w)m(e)f(need)f(to)i(c)m(hec)m(k)g(if)e(w) m(e'v)m(e)j(had)d(a)h(newline)150 3493 y(with)36 b(do)s(esn't)g(start)i (with)e(a)h(greater)h(than)f(sign.)60 b(In)36 b(that)h(case)h(w)m(e)g (switc)m(h)e(bac)m(k)i(to)g(the)f(primary)150 3603 y(sp)s(eak)m(er.)533 3728 y Fk(\(t)95 b(;;)47 b(for)g(all)g(other)f(cases)629 3832 y(\(if)h(\(string-matches)c(\(item.feat)i(token)i("whitespace"\)) 1583 3936 y(".*\\n[)f(\\t\\n]*"\))820 4039 y(\(voice_rab_diphone\)\)) 629 4143 y(\(email_previous_t2w_fun)o(c)c(token)k(name\)\)\)\))275 4275 y Fo(In)33 b(addition)f(to)i(these)h(w)m(e)f(ha)m(v)m(e)h(to)g (actually)e(declare)h(the)g(text)h(mo)s(de.)50 b(This)33 b(w)m(e)h(do)g(b)m(y)f(adding)150 4384 y(to)e(an)m(y)g(existing)e(mo)s (des)h(as)h(follo)m(ws.)390 4510 y Fk(\(set!)46 b(tts_text_modes)533 4614 y(\(cons)581 4717 y(\(list)676 4821 y('email)142 b(;;)47 b(mode)g(name)676 4925 y(\(list)429 b(;;)47 b(email)f(mode)h (params)724 5029 y(\(list)f('init_func)f(email_init_func\))724 5132 y(\(list)h('exit_func)f(email_exit_func\))724 5236 y('\(filter)h("email_filter"\)\)\))581 5340 y(tts_text_modes\)\))p eop %%Page: 36 38 36 37 bop 150 -116 a Fo(36)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(This)f(will)g(no)m(w)i (allo)m(w)g(simple)e(email)i(messages)h(to)g(b)s(e)f(dealt)g(with)f(in) g(a)i(mo)s(de)f(sp)s(eci\014c)f(w)m(a)m(y)-8 b(.)275 433 y(An)34 b(example)h(mail)e(message)j(is)e(included)e(in)i(`)p Fk(examples/ex1.email)p Fo('.)50 b(T)-8 b(o)35 b(hear)g(the)g(result)f (of)150 543 y(the)g(ab)s(o)m(v)m(e)h(text)f(mo)s(de)g(start)g(F)-8 b(estiv)j(al,)35 b(load)e(in)f(the)i(email)f(mo)s(de)g(descriptions,)g (and)g(call)g(TTS)f(on)150 653 y(the)f(example)f(\014le.)390 781 y Fk(\(tts)47 b(".../examples/ex1.email)o(")42 b('email\))275 916 y Fo(The)26 b(ab)s(o)m(v)m(e)i(is)e(v)m(ery)h(short)f(of)h(a)h (real)e(email)g(mo)s(de)g(but)g(do)s(es)h(illustrate)e(ho)m(w)i(one)g (migh)m(t)g(go)g(ab)s(out)150 1025 y(building)32 b(one.)56 b(It)36 b(should)e(b)s(e)g(reiterated)i(that)g(text)h(mo)s(des)e(are)h (new)f(in)f(F)-8 b(estiv)j(al)36 b(and)f(their)g(most)150 1135 y(e\013ectiv)m(e)d(form)e(has)g(not)h(b)s(een)e(disco)m(v)m(ered)i (y)m(et.)42 b(This)28 b(will)g(impro)m(v)m(e)i(with)f(time)h(and)g(exp) s(erience.)p eop %%Page: 37 39 37 38 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(XML/SGML)31 b(mark-up)2116 b(37)150 299 y Fl(10)80 b(XML/SGML)53 b(mark-up)275 539 y Fo(The)35 b(ideas)h(of)g(a)h(general,)h(syn)m (thesizer)e(system)g(nonsp)s(eci\014c,)g(mark-up)f(language)i(for)f (lab)s(elling)150 649 y(text)43 b(has)f(b)s(een)g(under)e(discussion)g (for)i(some)g(time.)76 b(F)-8 b(estiv)j(al)43 b(has)f(supp)s(orted)e (an)i(SGML)g(based)150 759 y(markup)27 b(language)j(through)e(m)m (ultiple)e(v)m(ersions)i(most)h(recen)m(tly)g(STML)f(\()p Fj(sproat97)7 b Fo(\).)43 b(This)26 b(is)i(based)150 868 y(on)k(the)g(earlier)f(SSML)h(\(Sp)s(eec)m(h)g(Syn)m(thesis)e (Markup)i(Language\))h(whic)m(h)e(w)m(as)i(supp)s(orted)d(b)m(y)i (previ-)150 978 y(ous)c(v)m(ersions)g(of)h(F)-8 b(estiv)j(al)29 b(\()p Fj(ta)m(ylor96)7 b Fo(\).)42 b(With)29 b(this)e(v)m(ersion)h(of) h(F)-8 b(estiv)j(al)29 b(w)m(e)g(supp)s(ort)e Fi(Sable)36 b Fo(a)29 b(similar)150 1087 y(mark-up)e(language)i(devised)f(b)m(y)g (a)h(consortium)e(from)h(Bell)g(Labls,)g(Sub)e(Microsystems,)k(A)-8 b(T&T)28 b(and)150 1197 y(Edin)m(burgh,)22 b Fj(sable98)p Fo(.)39 b(Unlik)m(e)23 b(the)h(previous)e(v)m(ersions)h(whic)m(h)g(w)m (ere)h(SGML)g(based,)h(the)f(implemen)m(ta-)150 1307 y(tion)f(of)g(Sable)g(in)f(F)-8 b(estiv)j(al)23 b(is)f(no)m(w)i(XML)f (based.)38 b(T)-8 b(o)24 b(the)g(user)e(they)i(di\013eren)m(t)e(is)h (negligable)f(but)g(using)150 1416 y(XML)28 b(mak)m(es)g(pro)s(cessing) e(of)i(\014les)e(easier)h(and)g(more)h(standardized.)38 b(Also)27 b(F)-8 b(estiv)j(al)28 b(no)m(w)f(includes)e(an)150 1526 y(XML)31 b(parser)e(th)m(us)h(reducing)f(the)i(dep)s(endencies)d (in)h(pro)s(cessing)h(Sable)f(text.)275 1662 y(Ra)m(w)f(text)h(has)f (the)h(problem)e(that)h(it)g(cannot)h(alw)m(a)m(ys)g(easily)e(b)s(e)h (rendered)f(as)h(sp)s(eec)m(h)h(in)e(the)h(w)m(a)m(y)150 1772 y(the)c(author)g(wishes.)37 b(Sable)23 b(o\013ers)i(a)f(w)m (ell-de\014ned)e(w)m(a)m(y)j(of)f(marking)f(up)g(text)i(so)g(that)f (the)g(syn)m(thesizer)150 1881 y(ma)m(y)31 b(render)e(it)h (appropriately)-8 b(.)275 2018 y(The)44 b(de\014nition)f(of)i(Sable)f (is)g(b)m(y)g(no)h(means)g(settled)g(and)g(is)f(still)e(in)i(dev)m (elopmen)m(t.)85 b(In)44 b(this)150 2128 y(release)29 b(F)-8 b(estiv)j(al)30 b(o\013ers)f(p)s(eople)f(w)m(orking)h(on)g (Sable)f(and)g(other)i(XML)f(\(and)g(SGML\))g(based)g(markup)150 2237 y(languages)h(a)g(c)m(hance)h(to)f(quic)m(kly)f(exp)s(erimen)m(t)g (with)f(protot)m(yp)s(es)i(b)m(y)g(pro)m(viding)d(a)k(DTD)f(\(do)s (cumen)m(t)150 2347 y(t)m(yp)s(e)45 b(descriptions\))f(and)g(the)i (mapping)d(of)i(the)h(elemen)m(ts)f(in)f(the)h(DTD)h(to)g(F)-8 b(estiv)j(al)45 b(functions.)150 2456 y(Although)e(w)m(e)h(ha)m(v)m(e)i (not)e(y)m(et)h(\(p)s(ersonally\))d(in)m(v)m(estigated)j(facilities)d (lik)m(e)h(cascading)h(st)m(yle)h(sheets)150 2566 y(and)30 b(generalized)h(SGML)f(sp)s(eci\014cation)g(languages)h(lik)m(e)f (DSSSL)g(w)m(e)h(b)s(eliev)m(e)f(the)h(facilities)e(o\013er)i(b)m(y)150 2676 y(F)-8 b(estiv)j(al)31 b(allo)m(w)e(rapid)g(protot)m(yping)h(of)h (sp)s(eec)m(h)f(output)g(markup)f(languages.)275 2812 y(Primarily)42 b(w)m(e)k(see)g(Sable)f(markup)f(text)i(as)g(a)g (language)g(that)g(will)d(b)s(e)i(generated)h(b)m(y)g(other)150 2922 y(programs,)31 b(e.g.)42 b(text)32 b(generation)f(systems,)f (dialog)g(managers)h(etc.)43 b(therefore)31 b(a)g(standard,)f(easy)h (to)150 3031 y(parse,)f(format)h(is)f(required,)e(ev)m(en)j(if)f(it)g (seems)g(o)m(v)m(erly)h(v)m(erb)s(ose)g(for)f(h)m(uman)f(writers.)275 3168 y(F)-8 b(or)31 b(more)f(information)f(of)h(Sable)g(and)g(access)h (to)g(the)g(mailing)d(list)h(see)390 3299 y Fk (http://www.cstr.ed.ac.uk)o(/pro)o(ject)o(s/s)o(able)o(.htm)o(l)150 3562 y Fn(10.1)68 b(Sable)46 b(example)275 3756 y Fo(Here)30 b(is)g(a)h(simple)d(example)i(of)h(Sable)e(mark)m(ed)h(up)g(text)390 3887 y Fk()390 3991 y()390 4302 y()390 4406 y()390 4614 y(The)h(boy)g(saw)g(the)g (girl)f(in)h(the)g(park)g()f(with)g(the)h(telescope.)390 4717 y(The)g(boy)g(saw)g(the)g(girl)f()g(in)h(the)g(park)g (with)f(the)h(telescope.)390 4925 y(Good)g(morning)e()g(My)g (name)g(is)g(Stuart,)f(which)g(is)h(spelled)390 5029 y()390 5132 y(stuart)c()390 5236 y(though)k(some)h(people)f(pronounce)f(it)390 5340 y(stuart.)90 b(My)47 b(telephone)e(number)p eop %%Page: 38 40 38 39 bop 150 -116 a Fo(38)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(is)47 b(2787.)390 506 y(I)h(used)g(to)g (work)g(in)g(Buccleuch)41 b(Place,)390 610 y(but)47 b(no)g(one)g(can)g(pronounce)e(that.)390 818 y(By)i(the)g(way,)g(my)g(telephone)e(number)h(is)h(actually)390 922 y()390 1025 y()390 1129 y()390 1233 y(.)390 1337 y()390 1440 y()275 1579 y Fo(After)26 b(the)h(initial)c(de\014nition)i (of)h(the)h(SABLE)f(tags,)i(through)e(the)h(\014le)e(`)p Fk(Sable.v0_2.dtd)p Fo(',)f(whic)m(h)150 1688 y(is)41 b(distributed)e(as)j(part)g(of)g(F)-8 b(estiv)j(al,)45 b(the)d(b)s(o)s(dy)e(is)h(giv)m(en.)75 b(There)41 b(are)i(tags)g(for)e (iden)m(tifying)f(the)150 1798 y(language)c(and)g(the)g(v)m(oice.)59 b(Explicit)34 b(b)s(oundary)g(mark)m(ers)i(ma)m(y)h(b)s(e)e(giv)m(en)h (in)f(text.)59 b(Also)35 b(duration)150 1908 y(and)f(in)m(tonation)h (con)m(trol)g(can)g(b)s(e)f(explicit)f(sp)s(eci\014ed)g(as)j(can)f(new) f(pron)m(unciations)f(of)i(w)m(ords.)53 b(The)150 2017 y(last)30 b(sen)m(tence)i(sp)s(eci\014es)d(some)i(external)f (\014lenames)f(to)i(pla)m(y)f(at)i(that)f(p)s(oin)m(t.)150 2284 y Fn(10.2)68 b(Supp)t(orted)44 b(Sable)i(tags)275 2480 y Fo(There)20 b(is)h(not)g(y)m(et)i(a)f(de\014nitiv)m(e)d(set)j (of)g(tags)g(but)f(hop)s(efully)d(suc)m(h)j(a)h(list)e(will)f(form)h(o) m(v)m(er)j(the)f(next)f(few)150 2590 y(mon)m(ths.)38 b(As)24 b(adding)e(supp)s(ort)g(for)i(new)f(tags)i(is)e(often)h (trivial)e(the)i(problem)e(lies)h(m)m(uc)m(h)g(more)h(in)f(de\014n-)150 2700 y(ing)i(what)h(tags)g(there)g(should)e(b)s(e)h(than)h(in)e (actually)i(implemen)m(ting)d(them.)40 b(The)25 b(follo)m(wing)f(are)i (based)150 2809 y(on)48 b(v)m(ersion)g(0.2)h(of)g(Sable)e(as)i(describ) s(ed)d(in)h Fk(http://www.cstr.ed.ac.uk)o(/pro)o(jec)o(ts/s)o(able)o(_) 150 2919 y(spec2.html)p Fo(,)g(though)e(some)h(asp)s(ects)g(are)h(not)f (curren)m(tly)e(supp)s(orted)g(in)g(this)h(implemen)m(tation.)150 3028 y(F)-8 b(urther)30 b(up)s(dates)f(will)f(b)s(e)i(announces)g (through)g(the)g(Sable)f(mailing)g(list.)150 3194 y Fk(LANGUAGE)96 b Fo(Allo)m(ws)28 b(the)i(sp)s(eci\014cation)e(of)i(the)f(language)h (through)f(the)g Fk(ID)g Fo(attribute.)40 b(V)-8 b(alid)29 b(v)-5 b(alues)630 3303 y(in)44 b(F)-8 b(estiv)j(al)46 b(are,)k Fk(english)p Fo(,)d Fk(en1)p Fo(,)i Fk(spanish)p Fo(,)e Fk(en)p Fo(,)i(and)c(others)h(dep)s(ending)d(on)i(y)m(our)630 3413 y(particular)29 b(installation.)38 b(F)-8 b(or)31 b(example)870 3543 y Fk()f(...)j ()630 3680 y Fo(If)29 b(the)h(language)g(isn't)e(supp)s (orted)g(b)m(y)h(the)h(particualr)e(installation)f(of)i(F)-8 b(estiv)j(al)30 b Fk(")p Fo(Some)630 3789 y(text)h(in)e(..)p Fk(")i Fo(is)e(said)h(instead)f(and)h(the)h(section)f(is)g(ommitted.) 150 3953 y Fk(SPEAKER)144 b Fo(Select)40 b(a)g(v)m(oice.)70 b(Accepts)41 b(a)f(parameter)g Fk(NAME)e Fo(whic)m(h)h(tak)m(es)i(v)-5 b(alues)39 b Fk(male1)p Fo(,)i Fk(male2)p Fo(,)630 4062 y Fk(female1)p Fo(,)i(etc.)75 b(There)41 b(is)f(curren)m(tly)h(no)g (de\014nition)f(ab)s(out)h(what)g(happ)s(ens)f(when)h(a)630 4172 y(v)m(oice)31 b(is)f(selected)h(whic)m(h)e(the)h(syn)m(thesizer)g (do)s(esn't)g(supp)s(ort.)39 b(An)30 b(example)g(is)870 4302 y Fk()e(...)j()150 4466 y(AUDIO)240 b Fo(This)37 b(allo)m(ws)g(the)i(sp)s(eci\014cation)e (of)i(an)f(external)h(w)m(a)m(v)m(eform)h(that)f(is)e(to)j(b)s(e)d (included.)630 4575 y(There)32 b(are)h(attributes)f(for)g(sp)s (ecifying)f(v)m(olume)h(and)g(whether)g(the)h(w)m(a)m(v)m(eform)h(is)d (to)j(b)s(e)630 4685 y(pla)m(y)m(ed)42 b(in)f(the)h(bac)m(kground)g(of) g(the)g(follo)m(wing)f(text)i(or)f(not.)76 b(F)-8 b(estiv)j(al)42 b(as)h(y)m(et)g(only)630 4794 y(supp)s(orts)28 b(insertion.)870 4925 y Fk(My)47 b(telephone)e(number)i(is)870 5029 y()870 5132 y()870 5236 y()870 5340 y(.)p eop %%Page: 39 41 39 40 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(XML/SGML)31 b(mark-up)2116 b(39)150 299 y Fk(MARKER)192 b Fo(This)20 b(allo)m(ws)h(F)-8 b(estiv)j(al)22 b(to)h(mark)e(when)g(a)i(particalur) d(part)h(of)h(the)g(text)h(has)f(b)s(een)f(reac)m(hed.)630 408 y(A)m(t)34 b(presen)m(t)f(the)g(simply)d(the)j(v)-5 b(alue)32 b(of)h(the)g Fk(MARK)f Fo(attribute)h(is)f(prin)m(ted.)46 b(This)31 b(is)h(done)630 518 y(some)e(when)f(that)h(piece)f(of)h(text) h(is)d(analyzed.)41 b(not)30 b(when)e(it)h(is)g(pla)m(y)m(ed.)40 b(T)-8 b(o)30 b(use)g(this)e(in)630 628 y(an)m(y)j(real)f(application)e (w)m(ould)i(require)f(c)m(hanges)i(to)g(this)e(tags)j(implemen)m (tation.)870 758 y Fk(Move)47 b(the)g()i (mouse)f(to)i(the)e(top.)150 921 y(BREAK)240 b Fo(Sp)s(eci\014es)33 b(a)i(b)s(oundary)d(at)j(some)g Fk(LEVEL)p Fo(.)51 b(Strength)35 b(ma)m(y)g(b)s(e)e(v)-5 b(alues)34 b Fk(Large)p Fo(,)g Fk(Medium)p Fo(,)630 1031 y Fk(Small)d Fo(or)h(a)h(n)m(um)m(b)s(er.)46 b(Note)34 b(that)f(this)e(this)h(tag)h(is)f(an)g(em)m(tp)m(y)h(tag)h (and)e(m)m(ust)g(include)630 1140 y(the)f(closing)e(part)h(within)e (itse\015)i(sp)s(eci\014cation.)870 1271 y Fk()150 1434 y(DIV)336 b Fo(This)36 b(signals)g(an)h (division.)59 b(In)36 b(F)-8 b(estiv)j(al)38 b(this)e(causes)i(an)g (utterance)g(break.)62 b(A)37 b Fk(TYPE)630 1543 y Fo(attribute)30 b(ma)m(y)h(b)s(e)f(sp)s(eci\014ed)e(but)i(it)g(is)f(ignored)h(b)m(y)g (F)-8 b(estiv)j(al.)150 1706 y Fk(PRON)288 b Fo(Allo)m(ws)37 b(pron)m(unciation)f(of)i(enclosed)g(text)g(to)h(b)s(e)e(explcitily)f (giv)m(en.)63 b(It)38 b(supp)s(orts)e(the)630 1816 y(attributes)f Fk(IPA)g Fo(for)h(an)g(IP)-8 b(A)36 b(sp)s(eci\014cation)e(\(not)j (curren)m(tly)d(supp)s(orted)g(b)m(y)i(F)-8 b(estiv)j(al\);)630 1926 y Fk(SUB)27 b Fo(text)j(to)f(b)s(e)f(substituted)e(whic)m(h)h(can) i(b)s(e)f(in)f(some)i(form)e(of)i(phonetic)f(sp)s(elling,)e(and)630 2035 y Fk(ORIGIN)40 b Fo(where)g(the)i(linguistic)c(origin)i(of)h(the)g (enclosed)g(text)h(ma)m(y)g(b)s(e)f(iden)m(ti\014ed)e(to)630 2145 y(assist)30 b(in)f(et)m(ymologically)h(sensitiv)m(e)g(letter)h(to) g(sound)e(rules.)870 2275 y Fk(tomato)150 2438 y(SAYAS)240 b Fo(Allo)m(ws)43 b(indeitn\014cation)g(of)h(the)h(enclose)f(tok)m(ens/text.)86 b(The)44 b(attribute)g Fk(MODE)f Fo(cand)630 2548 y(tak)m(e)35 b(an)m(y)e(of)g(the)h(follo)m(wing)d(a)j(v)-5 b(alues:)45 b Fk(literal)p Fo(,)32 b Fk(date)p Fo(,)h Fk(time)p Fo(,)g Fk(phone)p Fo(,)f Fk(net)p Fo(,)h Fk(postal)p Fo(,)630 2657 y Fk(currency)p Fo(,)41 b Fk(math)p Fo(,)h Fk(fraction)p Fo(,)f Fk(measure)p Fo(,)g Fk(ordinal)p Fo(,)g Fk(cardinal)p Fo(,)g(or)f Fk(name)p Fo(.)69 b(F)-8 b(urther)630 2767 y(sp)s(eci\014cation)31 b(of)h(t)m(yp)s(e)g(for)f(dates)h(\(MD)m(Y,)i (DMY)f(etc\))g(ma)m(y)f(b)s(e)g(sp)s(e\014cied)e(through)h(the)630 2877 y Fk(MODETYPE)d Fo(attribute.)870 3007 y Fk(As)47 b(a)h(test)e(of)h(marked-up)f(numbers.)f(Here)i(we)g(have)870 3111 y(a)g(year)g(1998,)870 3215 y(an)h(ordinal)f(1998,)870 3318 y(a)h(cardinal)f(1998)o(,)870 3422 y(a)h(literal)f(1998,)870 3526 y(and)h(phone)f(number)g(1998.)150 3689 y(EMPH)288 b Fo(T)-8 b(o)30 b(sp)s(ecify)e(enclose)i(text)g (should)e(b)s(e)h(emphasized,)g(a)h Fk(LEVEL)e Fo(attribute)h(ma)m(y)h (b)s(e)f(sp)s(eci-)630 3799 y(\014ed)d(but)h(its)f(v)-5 b(alue)27 b(is)f(curren)m(tly)g(ignored)h(b)m(y)g(F)-8 b(estiv)j(al)27 b(\(b)s(esides)f(the)h(emphasis)f(F)-8 b(estiv)j(al)630 3908 y(generates)32 b(isn't)d(v)m(ery)i(go)s(o)s(d)f (an)m(yw)m(a)m(y\).)870 4039 y Fk(The)47 b(leaders)f(of)h (Denmark)42 b(and)47 b(India)c(meet)k(on)870 4142 y(Friday.)150 4305 y(PITCH)240 b Fo(Allo)m(ws)29 b(the)i(sp)s(eci\014cation)e(of)i(pitc)m(h)f(range,)g(mid)f(and)h(base) h(p)s(oin)m(ts.)870 4436 y Fk(Without)46 b(his)h(penguin,)e()f(which)h(he)h(left)g(at)g(home,)g()870 4540 y(he)g(could)g(not)f(enter)h(the)g(restaurant.)150 4703 y(RATE)288 b Fo(Allo)m(ws)29 b(the)i(sp)s(eci\014cation)e(of)i(sp) s(eaking)e(rate)870 4833 y Fk(The)47 b(address)f(is)h()e(10)k(Main)e(Street)g(.)150 4996 y(VOLUME)192 b Fo(Allo)m(ws)38 b(the)h(sp)s(eci\014cation)e(of)i (v)m(olume.)66 b(Note)40 b(in)e(festiv)-5 b(al)38 b(this)f(causes)i(an) g(utetrance)630 5106 y(break)30 b(b)s(efore)g(and)g(after)h(this)e (tag.)870 5236 y Fk(Please)46 b(speak)g(more)h(loudly)o(,)c(except)870 5340 y(when)47 b(I)g(ask)g(you)g(to)g(speak)f(in)e (a)j(quiet)f(voice.)p eop %%Page: 40 42 40 41 bop 150 -116 a Fo(40)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(ENGINE)192 b Fo(This)29 b(allo)m(ws)g(sp)s(eci\014cation)g(of)i(engine)f(sp)s (eci\014c)f(commands)870 435 y Fk(An)47 b(example)f(is)h()e(the)j(festival)f(speech)g(synthesizer)c (or)870 643 y(the)47 b(Bell)g(Labs)f(speech)g(synthesizer.)275 826 y Fo(These)32 b(tags)i(ma)m(y)f(c)m(hange)g(in)f(name)g(but)g(they) h(co)m(v)m(er)h(the)f(asp)s(ects)g(of)g(sp)s(eec)m(h)f(mark)h(up)e (that)i(w)m(e)150 935 y(wish)c(to)i(express.)40 b(Later)31 b(additions)d(and)i(c)m(hanges)h(to)h(these)e(are)h(exp)s(ected.)275 1085 y(See)20 b(the)h(\014les)e(`)p Fk(festival/examples/exampl)o(e.sa) o(ble)p Fo(')14 b(and)20 b(`)p Fk(festival/examples/exampl)o(e2.s)o (abl)o(e)p Fo(')150 1195 y(for)30 b(w)m(orking)g(examples.)275 1345 y(Note)61 b(the)f(de\014nition)e(of)i(Sable)f(is)g(on)h(going)g (and)f(there)h(are)g(lik)m(ely)f(to)i(b)s(e)e(later)h(more)150 1455 y(complete)85 b(implemen)m(tations)e(of)i(sable)f(for)h(F)-8 b(estiv)j(al)84 b(as)h(indep)s(enden)m(t)e(releases)i(consult)150 1564 y(`)p Fk(url://www.cstr.ed.ac.uk/p)o(roje)o(cts/)o(sab)o(le.h)o (tml)p Fo(')24 b(for)30 b(the)h(most)f(recen)m(t)i(up)s(dates.)150 1861 y Fn(10.3)68 b(Adding)45 b(Sable)g(tags)275 2069 y Fo(W)-8 b(e)34 b(do)e(not)h(y)m(et)h(claim)e(that)h(there)g(is)f(a)h (\014xed)f(standard)g(for)h(Sable)f(tags)i(but)e(w)m(e)h(wish)e(to)i (mo)m(v)m(e)150 2178 y(to)m(w)m(ards)27 b(suc)m(h)f(a)h(standard.)39 b(In)25 b(the)i(mean)g(time)f(w)m(e)h(ha)m(v)m(e)g(made)g(it)f(easy)h (in)e(F)-8 b(estiv)j(al)27 b(to)g(add)f(supp)s(ort)150 2288 y(for)k(new)g(tags)h(without,)f(in)f(general,)i(ha)m(ving)f(to)h (c)m(hange)g(an)m(y)g(of)g(the)f(core)h(functions.)275 2438 y(Tw)m(o)57 b(c)m(hanges)i(are)f(necessary)h(to)f(add)f(a)h(new)g (tags.)124 b(First,)64 b(c)m(hange)59 b(the)f(de\014nition)d(in)150 2548 y(`)p Fk(lib/Sable.v0_2.dtd)p Fo(',)24 b(so)k(that)g(Sable)f (\014les)g(ma)m(y)h(use)g(it.)39 b(The)28 b(second)f(stage)j(is)c(to)j (mak)m(e)g(F)-8 b(estiv)j(al)150 2657 y(sensitiv)m(e)36 b(to)i(that)f(new)g(tag.)61 b(The)36 b(example)h(in)f Fk(festival/lib/sable-mode)o(.sc)o(m)31 b Fo(sho)m(ws)37 b(ho)m(w)g(a)150 2767 y(new)k(text)i(mo)s(de)f(ma)m(y)g(b)s(e)f (implemen)m(ted)g(for)g(an)h(XML/SGML-based)g(markup)f(language.)75 b(The)150 2877 y(basic)35 b(p)s(oin)m(t)g(is)f(that)j(an)e(iden)m (ti\014ed)f(function)g(will)f(b)s(e)i(called)g(on)h(\014nding)d(a)j (start)g(tag)h(or)f(end)f(tags)150 2986 y(in)g(the)i(do)s(cumen)m(t.)58 b(It)37 b(is)e(the)i(tag-function's)g(job)f(to)h(syn)m(thesize)f(the)h (giv)m(en)f(utterance)i(if)d(the)i(tag)150 3096 y(signals)27 b(an)i(utterance)g(b)s(oundary)-8 b(.)39 b(The)28 b(return)g(v)-5 b(alue)28 b(from)g(the)h(tag-function)g(is)f(the)h(new)f(status)h(of) 150 3205 y(the)36 b(curren)m(t)f(utterance,)j(whic)m(h)c(ma)m(y)i (remain)e(unc)m(hanged)h(or)h(if)e(the)i(curren)m(t)f(utterance)h(has)g (b)s(een)150 3315 y(syn)m(thesized)30 b Fk(nil)f Fo(should)g(b)s(e)g (returned)h(signalling)d(a)k(new)f(utterance.)275 3465 y(Note)k(the)g(hierarc)m(hical)d(structure)i(of)h(the)f(do)s(cumen)m(t) g(is)g(not)g(a)m(v)-5 b(ailable)33 b(in)f(this)g(metho)s(d)h(of)g(tag-) 150 3575 y(functions.)74 b(An)m(y)42 b(hierarc)m(hical)f(state)i(that)g (m)m(ust)e(b)s(e)h(preserv)m(ed)f(has)h(to)h(b)s(e)e(done)h(using)f (explicit)150 3684 y(stac)m(ks)36 b(in)d(Sc)m(heme.)53 b(This)33 b(is)g(an)i(artifact)g(due)e(to)j(the)e(cross)h(relationship) d(to)j(utterances)g(and)f(tags)150 3794 y(\(utterances)f(ma)m(y)f(end)f (within)f(start)i(and)f(end)g(tags\),)j(and)d(the)h(desire)f(to)h(ha)m (v)m(e)h(all)e(sp)s(eci\014cation)f(in)150 3903 y(Sc)m(heme)h(rather)f (than)g(C)p Fk(++)p Fo(.)275 4053 y(The)i(tag-functions)h(are)h (de\014ned)e(in)f(an)i(elemen)m(ts)h(list.)47 b(They)33 b(are)g(iden)m(ti\014ed)e(with)h(names)h(suc)m(h)150 4163 y(as)39 b Fk(")p Fo(\(SABLE)p Fk(")g Fo(and)f Fk(")p Fo(\)SABLE)p Fk(")h Fo(denoting)f(start)i(and)e(end)h(tags)h(resp)s (ectiv)m(ely)-8 b(.)66 b(Tw)m(o)40 b(argumen)m(ts)150 4273 y(are)34 b(passed)e(to)i(these)g(tag)g(functions,)f(an)g(asso)s(c) h(list)e(of)h(attributes)g(and)f(v)-5 b(alues)33 b(as)g(sp)s(eci\014ed) f(in)g(the)150 4382 y(do)s(cumen)m(t)38 b(and)f(the)g(curren)m(t)h (utterances.)63 b(If)38 b(the)g(tag)g(denotes)h(an)e(utterance)i (break,)g(call)e Fk(xxml_)150 4492 y(synth)28 b Fo(on)g Fk(UTT)g Fo(and)h(return)f Fk(nil)p Fo(.)39 b(If)28 b(a)i(tag)g (\(start)g(or)f(end\))f(is)g(found)g(in)g(the)h(do)s(cumen)m(t)f(and)h (there)g(is)150 4601 y(no)h(corresp)s(onding)f(tag-function)h(it)g(is)g (ignored.)275 4752 y(New)e(features)g(ma)m(y)h(b)s(e)e(added)g(to)i(w)m (ords)f(with)e(a)j(start)f(and)g(end)f(tag)i(b)m(y)f(adding)f(features) h(to)h(the)150 4861 y(global)h Fk(xxml_word_features)p Fo(.)35 b(An)m(y)c(features)g(in)e(that)i(v)-5 b(ariable)29 b(will)e(b)s(e)j(added)g(to)h(eac)m(h)h(w)m(ord.)275 5011 y(Note)f(that)f(this)f(metho)s(d)h(ma)m(y)g(b)s(e)g(used)f(for)h (b)s(oth)f(XML)h(based)g(lamnguages)g(and)f(SGML)h(based)150 5121 y(markup)24 b(languages)i(\(though)g(and)f(external)h(normalizing) d(SGML)j(parser)f(is)g(required)f(in)g(the)i(SGML)150 5230 y(case\).)43 b(The)30 b(t)m(yp)s(e)h(\(XML)g(vs)g(SGML\))f(is)g (iden)m(ti\014ed)f(b)m(y)h(the)h Fk(analysis_type)c Fo(parameter)k(in)f (the)g(tts)150 5340 y(text)h(mo)s(de)f(sp)s(eci\014cation.)p eop %%Page: 41 43 41 42 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(XML/SGML)31 b(mark-up)2116 b(41)150 299 y Fn(10.4)68 b(XML/SGML)43 b(requiremen)l(ts)275 491 y Fo(F)-8 b(estiv)j(al)44 b(is)g(distributed) e(with)h Fk(rxp)h Fo(an)h(XML)g(parser)f(dev)m(elop)s(ed)g(b)m(y)h(Ric) m(hard)e(T)-8 b(obin)44 b(of)h(the)150 601 y(Language)40 b(T)-8 b(ec)m(hnology)40 b(Group,)i(Univ)m(ersit)m(y)c(of)h(Edin)m (burgh.)65 b(Sable)38 b(is)h(set)g(up)g(as)g(an)g(XML)h(text)150 711 y(mo)s(de)25 b(so)g(no)g(further)e(requiremen)m(ts)h(or)h(external) g(programs)g(are)g(required)f(to)h(syn)m(thesize)g(from)g(Sable)150 820 y(mark)m(ed)j(up)g(text)h(\(unlik)m(e)e(previous)g(releases\).)40 b(Note)30 b(that)f Fk(rxp)e Fo(is)h(not)g(a)h(full)d(v)-5 b(alidation)27 b(parser)h(and)150 930 y(hence)j(do)s(esn't)f(c)m(hec)m (k)i(some)e(asp)s(ects)h(of)g(the)f(\014le)g(\(tags)h(within)d(tags\).) 275 1064 y(F)-8 b(estiv)j(al)82 b(still)e(supp)s(orts)g(SGML)i(based)f (markup)g(but)g(in)g(suc)m(h)h(cases)h(requires)d(an)150 1174 y(external)63 b(SGML)h(normalizing)d(parser.)139 b(W)-8 b(e)64 b(ha)m(v)m(e)h(tested)f(`)p Fk(nsgmls-1.0)p Fo(')d(whic)m(h)h(is)h(a)m(v)-5 b(ail-)150 1284 y(able)78 b(as)g(part)g(of)h(the)f(SGML)g(to)s(ols)g(set)h(`)p Fk(sp-1.1.tar.gz)p Fo(')c(whic)m(h)i(is)g(a)m(v)-5 b(ailable)77 b(from)150 1393 y Fk(http://www.jclark.com/sp)o(/ind)o(ex.h)o(tml)o Fo(.)35 b(This)29 b(seems)h(p)s(ortable)g(b)s(et)m(w)m(een)h(man)m(y)f (platforms.)150 1650 y Fn(10.5)68 b(Using)46 b(Sable)275 1843 y Fo(Supp)s(ort)25 b(in)i(F)-8 b(estiv)j(al)27 b(for)h(Sable)f(is) f(as)i(a)g(text)h(mo)s(de.)40 b(In)27 b(the)g(command)h(mo)s(de)f(use)h (the)f(follo)m(wing)150 1953 y(to)k(pro)s(cess)f(an)g(Sable)g(\014le) 390 2081 y Fk(\(tts)47 b("file.sable")d('sable\))275 2216 y Fo(Also)32 b(the)g(automatic)i(selection)e(of)g(mo)s(de)g(based) g(on)h(\014le)e(t)m(yp)s(e)i(has)f(b)s(een)g(set)h(up)e(suc)m(h)h(that) h(\014les)150 2325 y(ending)c(`)p Fk(.sable)p Fo(')g(will)f(b)s(e)i (automatically)g(syn)m(thesized)g(in)f(this)g(mo)s(de.)40 b(Th)m(us)390 2454 y Fk(festival)46 b(--tts)g(fred.sable)275 2589 y Fo(Will)28 b(render)h(`)p Fk(fred.sable)p Fo(')f(as)j(sp)s(eec)m (h)f(in)f(Sable)h(mo)s(de.)275 2723 y(Another)35 b(w)m(a)m(y)i(of)f (using)f(Sable)g(is)g(through)g(the)h(Emacs)g(in)m(terface.)58 b(The)35 b(sa)m(y-bu\013er)h(command)150 2833 y(will)28 b(send)j(the)g(Emacs)g(bu\013er)f(mo)s(de)h(to)h(F)-8 b(estiv)j(al)31 b(as)g(its)g(tts-mo)s(de.)43 b(If)30 b(the)i(Emacs)f(mo)s(de)g(is)f(stml)g(or)150 2942 y(sgml)g(the)g (\014le)g(is)f(treated)i(as)g(an)f(sable)g(\014le.)40 b(See)31 b(Chapter)e(11)j([Emacs)e(in)m(terface],)i(page)f(43)275 3077 y(Man)m(y)23 b(p)s(eople)f(exp)s(erimen)m(ting)f(with)g(Sable)h (\(and)h(TTS)e(in)h(general\))h(often)g(w)m(an)m(t)h(all)d(the)i(w)m(a) m(v)m(eform)150 3186 y(output)33 b(to)i(b)s(e)e(sa)m(v)m(ed)h(to)h(b)s (e)e(pla)m(y)m(ed)g(at)i(a)f(later)g(date.)51 b(The)33 b(simplest)f(w)m(a)m(y)i(to)h(do)e(this)g(is)g(using)f(the)150 3296 y(`)p Fk(text2wave)p Fo(')c(script,)i(It)g(resp)s(ects)h(the)f (audo)g(mo)s(de)g(selection)h(so)390 3425 y Fk(text2wave)45 b(fred.sable)g(-o)i(fred.wav)275 3559 y Fo(Note)35 b(this)f(renders)f (the)i(\014le)e(a)i(single)e(w)m(a)m(v)m(eform)j(\(done)f(b)m(y)f (concatenating)i(the)e(w)m(a)m(v)m(eforms)i(for)150 3669 y(eac)m(h)c(utterance)f(in)e(the)h(Sable)g(\014le\).)275 3803 y(If)d(y)m(ou)h(wish)e(the)j(w)m(a)m(v)m(eform)g(for)f(eac)m(h)h (utterance)g(in)d(a)j(\014le)e(sa)m(v)m(ed)i(y)m(ou)f(can)g(cause)h (the)f(tts)g(pro)s(cess)150 3913 y(to)j(sa)m(v)m(e)h(the)f(w)m(a)m(v)m (eforms)g(during)d(syn)m(thesis.)40 b(A)31 b(call)e(to)390 4042 y Fk(festival>)45 b(\(save_waves_during_tts\))275 4176 y Fo(An)m(y)25 b(future)f(call)h(to)h Fk(tts)e Fo(will)e(cause)k (the)g(w)m(a)m(v)m(eforms)g(to)g(b)s(e)f(sa)m(v)m(ed)h(in)e(a)i(\014le) e(`)p Fk(tts_file_xxx.wav)p Fo(')150 4286 y(where)34 b(`)p Fk(xxx)p Fo(')h(is)f(a)h(n)m(um)m(b)s(er.)53 b(A)35 b(call)f(to)i Fk(\(save_waves_during_tts_)o(STOP)o(\))29 b Fo(will)j(stop)j(sa)m(ving)g(the)150 4395 y(w)m(a)m(v)m(es.)41 b(A)28 b(message)g(is)e(prin)m(ted)f(when)i(the)g(w)m(a)m(v)m(eform)h (is)e(sa)m(v)m(ed)j(otherwise)d(p)s(eople)g(forget)i(ab)s(out)f(this) 150 4505 y(and)j(w)m(onder)g(wh)m(y)g(their)f(disk)g(has)h(\014lled)e (up.)275 4639 y(This)33 b(is)i(done)g(b)m(y)h(inserting)d(a)j(function) f(in)f Fk(tts_hooks)f Fo(whic)m(h)h(sa)m(v)m(es)j(the)f(w)m(a)m(v)m(e.) 58 b(T)-8 b(o)36 b(do)g(other)150 4749 y(things)21 b(to)h(eac)m(h)h (utterances)g(during)c(TTS)i(\(suc)m(h)h(as)g(sa)m(ving)g(the)g (utterance)g(structure\),)i(try)e(rede\014ning)150 4858 y(the)31 b(function)e Fk(save_tts_output)d Fo(\(see)31 b Fk(festival/lib/tts.scm)p Fo(\).)p eop %%Page: 42 44 42 43 bop 150 -116 a Fo(42)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 43 45 43 44 bop 150 -116 a Fo(Chapter)30 b(11:)41 b(Emacs)31 b(in)m(terface)2371 b(43)150 299 y Fl(11)80 b(Emacs)53 b(in)l(terface)275 533 y Fo(One)26 b(easy)i(metho)s(d)f(of)h(using)d(F) -8 b(estiv)j(al)28 b(is)e(via)h(an)g(Emacs)h(in)m(terface)g(that)g (allo)m(ws)e(selection)h(of)h(text)150 643 y(regions)i(to)h(b)s(e)f (sen)m(t)h(to)g(F)-8 b(estiv)j(al)30 b(for)g(rendering)f(as)i(sp)s(eec) m(h.)275 777 y(`)p Fk(festival.el)p Fo(')i(o\013ers)j(a)h(new)e(minor)g (mo)s(de)h(whic)m(h)f(o\013ers)h(an)g(extra)h(men)m(u)e(\(in)g (emacs-19)k(and)150 887 y(20\))c(with)d(options)h(for)h(sa)m(ying)f(a)i (selected)f(region,)g(or)g(a)g(whole)f(bu\013er,)h(as)g(w)m(ell)e(as)i (v)-5 b(arious)33 b(general)150 996 y(con)m(trol)g(functions.)46 b(T)-8 b(o)33 b(use)f(this)f(y)m(ou)i(m)m(ust)f(install)f(`)p Fk(festival.el)p Fo(')f(in)h(a)i(directory)f(where)g(Emacs)150 1106 y(can)f(\014nd)d(it,)j(then)f(add)f(to)j(y)m(our)e(`)p Fk(.emacs)p Fo(')f(in)g(y)m(our)h(home)h(directory)f(the)g(follo)m (wing)f(lines.)390 1235 y Fk(\(autoload)45 b('say-minor-mode)f ("festival")h("Menu)h(for)h(using)g(Festival.")e(t\))390 1338 y(\(say-minor-mode)f(t\))275 1473 y Fo(Successiv)m(e)22 b(calls)f(to)i Fk(say-minor-mode)18 b Fo(will)h(toggle)k(the)g(minor)d (mo)s(de,)k(switc)m(hing)c(the)j(`)p Fk(say)p Fo(')e(men)m(u)150 1582 y(on)30 b(and)g(o\013.)275 1717 y(Note)h(that)f(the)h(optional)e (v)m(oice)i(selection)f(o\013ered)g(b)m(y)g(the)g(language)h(sub-men)m (u)d(is)h(not)i(sensitiv)m(e)150 1826 y(to)g(actual)g(v)m(oices)g(supp) s(orted)d(b)m(y)i(the)h(y)m(our)f(F)-8 b(estiv)j(al)30 b(installation.)39 b(Hand)30 b(customization)g(is)f(require)150 1936 y(in)k(the)i(`)p Fk(festival.el)p Fo(')d(\014le.)52 b(Th)m(us)33 b(some)i(v)m(oices)h(ma)m(y)f(app)s(ear)f(in)f(y)m(our)h (men)m(u)g(that)h(y)m(our)g(F)-8 b(estiv)j(al)150 2046 y(do)s(esn't)30 b(supp)s(ort)f(and)h(some)h(v)m(oices)h(ma)m(y)f(b)s(e) f(supp)s(orted)f(b)m(y)h(y)m(our)h(F)-8 b(estiv)j(al)31 b(that)g(do)f(not)h(app)s(ear)f(in)150 2155 y(the)h(men)m(u.)275 2290 y(When)k(the)h(Emacs)g(Lisp)e(function)g Fk(festival-say-buffer)d Fo(or)36 b(the)g(men)m(u)f(equiv)-5 b(alen)m(t)35 b(is)g(used)150 2399 y(the)c(Emacs)f(ma)5 b(jor)31 b(mo)s(de)f(is)f(passed)h(to)h(F)-8 b(estiv)j(al)31 b(as)f(the)h(text)g(mo)s(de.)p eop %%Page: 44 46 44 45 bop 150 -116 a Fo(44)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 45 47 45 46 bop 150 -116 a Fo(Chapter)30 b(12:)41 b(Phonesets)2603 b(45)150 299 y Fl(12)80 b(Phonesets)275 542 y Fo(The)22 b(notion)g(of)h(phonesets)g(is)e(imp)s(ortan)m(t)h(to)i(a)f(n)m(um)m(b) s(er)e(of)i(di\013eren)m(t)g(subsystems)e(within)f(F)-8 b(estiv)j(al.)150 652 y(F)d(estiv)j(al)26 b(supp)s(orts)d(m)m(ultiple)g (phonesets)i(sim)m(ultaneously)e(and)i(allo)m(ws)g(mapping)e(b)s(et)m (w)m(een)j(sets)g(when)150 761 y(necessary)-8 b(.)56 b(The)35 b(lexicons,)h(letter)f(to)h(sound)e(rules,)h(w)m(a)m(v)m (eform)i(syn)m(thesizers,)f(etc.)57 b(all)34 b(require)g(the)150 871 y(de\014nition)28 b(of)j(a)f(phoneset)h(b)s(efore)f(they)g(will)e (op)s(erate.)275 1008 y(A)k(phoneset)g(is)g(a)h(set)g(of)f(sym)m(b)s (ols)f(whic)m(h)h(ma)m(y)h(b)s(e)e(further)g(de\014ned)h(in)f(terms)h (of)h(features,)g(suc)m(h)150 1118 y(as)42 b(v)m(o)m(w)m(el/consonan)m (t,)48 b(place)42 b(of)g(articulation)f(for)h(consonan)m(ts,)k(t)m(yp)s (e)c(of)g(v)m(o)m(w)m(el)h(etc.)77 b(The)41 b(set)i(of)150 1227 y(features)f(and)f(their)g(v)-5 b(alues)41 b(m)m(ust)h(b)s(e)f (de\014ned)f(with)h(the)h(phoneset.)75 b(The)41 b(de\014nition)e(is)i (used)g(to)150 1337 y(ensure)34 b(compatibilit)m(y)f(b)s(et)m(w)m(een)j (sub-systems)e(as)h(w)m(ell)f(as)h(allo)m(wing)e(groups)h(of)h(phones)f (in)g(v)-5 b(arious)150 1447 y(prediction)29 b(systems)h(\(e.g.)42 b(duration\))275 1584 y(A)30 b(phoneset)g(de\014nition)e(has)i(the)h (form)485 1716 y Fk(\(defPhoneSet)629 1820 y(NAME)629 1923 y(FEATUREDEFS)629 2027 y(PHONEDEFS)45 b(\))275 2165 y Fo(The)28 b Fj(NAME)35 b Fo(is)28 b(an)m(y)i(unique)d(sym)m(b)s(ol)h (used)g(e.g.)42 b Fk(mrpa)p Fo(,)28 b Fk(darpa)p Fo(,)g(etc.)42 b Fj(FEA)-8 b(TUREDEFS)35 b Fo(is)28 b(a)h(list)150 2274 y(of)i(de\014nitions)c(eac)m(h)32 b(consisting)d(of)i(a)f(feature)h (name)g(and)e(its)h(p)s(ossible)e(v)-5 b(alues.)40 b(F)-8 b(or)31 b(example)533 2406 y Fk(\()629 2510 y(\(vc)47 b(+)g(-\))620 b(;;)47 b(vowel)f(consonant)629 2614 y(\(vlength)f(short) i(long)f(diphthong)f(schwa)i(0\))95 b(;;)47 b(vowel)f(length)629 2717 y(...)533 2821 y(\))275 2959 y Fo(The)24 b(third)f(section)i(is)f (a)i(list)e(of)h(phone)f(de\014nitions)f(themselv)m(es.)39 b(Eac)m(h)25 b(phone)g(de\014nition)d(consists)150 3068 y(of)34 b(a)g(phone)f(name)h(and)g(the)g(v)-5 b(alues)33 b(for)h(eac)m(h)h(feature)f(in)f(the)h(order)f(the)h(features)g(w)m (ere)h(de\014ned)d(in)150 3178 y(the)f(ab)s(o)m(v)m(e)g(section.)275 3315 y(A)f(t)m(ypical)g(example)g(of)h(a)f(phoneset)h(de\014nition)d (can)i(b)s(e)g(found)f(in)g(`)p Fk(lib/mrpa_phones.scm)p Fo('.)275 3453 y(Note)36 b(the)g(phoneset)f(should)f(also)h(include)e (a)j(de\014nition)d(for)j(an)m(y)f(silence)g(phones.)55 b(In)35 b(addition)150 3562 y(to)i(the)f(de\014nition)e(of)i(the)h(set) f(the)h(silence)e(phone\(s\))h(themselv)m(es)g(m)m(ust)g(also)g(b)s(e)g (iden)m(ti\014ed)e(to)j(the)150 3672 y(system.)53 b(This)32 b(is)i(done)g(through)f(the)i(command)f Fk(PhoneSet.silences)p Fo(.)48 b(In)34 b(the)g(mrpa)g(set)h(this)e(is)150 3782 y(done)d(b)m(y)g(the)h(command)390 3913 y Fk(\(PhoneSet.silences)43 b('\(#\)\))275 4051 y Fo(There)25 b(ma)m(y)h(b)s(e)f(more)g(than)h(one) f(silence)g(phone)g(\(e.g.)40 b(breath,)27 b(start)f(silence)f(etc.\)) 40 b(in)24 b(an)m(y)i(phone-)150 4160 y(set)i(de\014nition.)37 b(Ho)m(w)m(ev)m(er)30 b(the)d(\014rst)g(phone)g(in)f(this)g(set)i(is)e (treated)j(sp)s(ecial)c(and)i(should)f(b)s(e)g(canonical)150 4270 y(silence.)37 b(Among)22 b(other)h(things,)g(it)e(is)h(this)f (phone)g(that)i(is)e(inserted)g(b)m(y)h(the)g(pause)g(prediction)e(mo)s (dule.)275 4407 y(In)43 b(addition)g(to)j(declaring)d(phonesets,)48 b(alternate)e(sets)f(ma)m(y)g(b)s(e)f(selected)h(b)m(y)f(the)h(command) 150 4517 y Fk(PhoneSet.select)p Fo(.)275 4655 y(Phones)22 b(in)g(di\013eren)m(t)g(sets)i(ma)m(y)g(b)s(e)e(automatically)h(mapp)s (ed)f(b)s(et)m(w)m(een)h(using)f(their)g(features.)39 b(This)150 4764 y(mapping)31 b(is)h(not)h(y)m(et)h(as)f(general)g(as)h (it)e(could)g(b)s(e,)h(but)f(is)g(useful)f(when)h(mapping)f(b)s(et)m(w) m(een)j(v)-5 b(arious)150 4874 y(phonesets)24 b(of)h(the)f(same)h (language.)39 b(When)24 b(a)h(phone)f(needs)g(to)h(b)s(e)e(mapp)s(ed)g (from)h(one)h(set)g(to)g(another)150 4983 y(the)i(phone)g(with)f(matc)m (hing)h(features)h(is)e(selected.)40 b(This)26 b(allo)m(ws,)h(at)h (least)g(to)f(some)h(exten)m(t,)i(lexicons,)150 5093 y(w)m(a)m(v)m(eform)g(syn)m(thesizers,)f(duration)e(mo)s(dules)g(etc.) 42 b(to)29 b(use)g(di\013eren)m(t)f(phonesets)h(\(though)f(in)g (general)150 5202 y(this)h(is)h(not)g(advised\).)275 5340 y(A)g(list)f(of)i(curren)m(tly)e(de\014ned)g(phonesets)h(is)g (returned)f(b)m(y)h(the)h(function)p eop %%Page: 46 48 46 47 bop 150 -116 a Fo(46)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(PhoneSet.list\)) 275 433 y Fo(Note)36 b(phonesets)f(are)h(often)f(not)h(de\014ned)e(un)m (til)f(a)j(v)m(oice)g(is)e(actually)h(loaded)g(so)g(this)g(list)e(is)i (not)150 543 y(the)c(list)e(of)i(of)g(sets)g(that)h(are)f(distributed)c (but)j(the)h(list)f(of)h(sets)g(that)g(are)g(used)f(b)m(y)h(curren)m (tly)e(loaded)150 653 y(v)m(oices.)275 787 y(The)35 b(name,)i(phones,)g (features)f(and)f(silences)f(of)i(the)g(curren)m(t)g(phoneset)f(ma)m(y) i(b)s(e)e(accessedwith)150 897 y(the)c(function)390 1025 y Fk(\(PhoneSet.description)42 b(nil\))275 1160 y Fo(If)35 b(the)h(argumen)m(t)h(to)g(this)e(function)g(is)g(a)h(list,)h(only)e (those)i(parts)e(of)i(the)f(phoneset)g(description)150 1269 y(named)30 b(are)h(returned.)39 b(F)-8 b(or)31 b(example)390 1398 y Fk(\(PhoneSet.description)42 b('\(silences\)\))390 1502 y(\(PhoneSet.description)g('\(silences)j(phones\)\))p eop %%Page: 47 49 47 48 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(47)150 299 y Fl(13)80 b(Lexicons)275 621 y Fo(A)40 b Fi(L)-5 b(exic)g(on)49 b Fo(in)39 b(F)-8 b(estiv)j(al)41 b(is)f(a)h(subsystem)f(that)h(pro)m(vides)f(pron)m(unciations)f(for)h (w)m(ords.)72 b(It)41 b(can)150 731 y(consist)28 b(of)g(three)h (distinct)d(parts:)40 b(an)28 b(addenda,)g(t)m(ypically)f(short)h (consisting)f(of)i(hand)e(added)g(w)m(ords;)150 840 y(a)32 b(compiled)e(lexicon,)h(t)m(ypically)f(large)i(\(10,000s)i(of)d(w)m (ords\))g(whic)m(h)g(sits)f(on)i(disk)e(somewhere;)i(and)f(a)150 950 y(metho)s(d)f(for)g(dealing)f(with)g(w)m(ords)h(not)h(in)e(either)h (list.)150 1280 y Fn(13.1)68 b(Lexical)46 b(en)l(tries)275 1502 y Fo(Lexical)28 b(en)m(tries)h(consist)g(of)g(three)g(basic)g (parts,)g(a)g(head)g(w)m(ord,)h(a)f(part)g(of)g(sp)s(eec)m(h)g(and)g(a) g(pron)m(un-)150 1612 y(ciation.)40 b(The)27 b(headw)m(ord)h(is)f(what) h(y)m(ou)g(migh)m(t)g(normally)f(think)f(of)i(as)h(a)f(w)m(ord)g(e.g.) 41 b(`)p Fk(walk)p Fo(',)28 b(`)p Fk(chairs)p Fo(')150 1721 y(etc.)42 b(but)29 b(it)h(migh)m(t)g(b)s(e)g(an)m(y)h(tok)m(en.) 275 1885 y(The)i(part-of-sp)s(eec)m(h)i(\014eld)e(curren)m(tly)g (consist)h(of)g(a)g(simple)e(atom)j(\(or)g(nil)d(if)h(none)h(is)f(sp)s (eci\014ed\).)150 1995 y(Of)i(course)g(there)g(are)h(man)m(y)f(part)g (of)g(sp)s(eec)m(h)g(tag)i(sets)e(and)g(whatev)m(er)h(y)m(ou)f(mark)g (in)f(y)m(our)h(lexicon)150 2104 y(m)m(ust)28 b(b)s(e)g(compatible)g (with)f(the)i(subsystems)f(that)h(use)f(that)h(information.)39 b(Y)-8 b(ou)29 b(can)f(optionally)f(set)150 2214 y(a)33 b(part)g(of)g(sp)s(eec)m(h)g(tag)h(mapping)d(for)i(eac)m(h)h(lexicon.) 48 b(The)32 b(v)-5 b(alue)32 b(should)f(b)s(e)i(a)g(rev)m(erse)g(asso)s (c-list)g(of)150 2324 y(the)e(follo)m(wing)d(form)390 2482 y Fk(\(lex.set.pos.map)533 2585 y('\(\(\()47 b(punc)f(fpunc\))h (punc\))629 2689 y(\(\()g(nn)g(nnp)g(nns)g(nnps)f(\))i(n\)\)\))275 2853 y Fo(All)19 b(part)h(of)h(sp)s(eec)m(h)g(tags)h(not)f(app)s (earing)e(in)h(the)g(left)h(hand)e(side)h(of)h(a)g(p)s(os)f(map)g(are)i (left)e(unc)m(hanged.)275 3017 y(The)43 b(third)e(\014eld)h(con)m (tains)i(the)g(actual)g(pron)m(unciation)d(of)j(the)g(w)m(ord.)79 b(This)42 b(is)h(an)g(arbitrary)150 3126 y(Lisp)28 b(S-expression.)40 b(In)29 b(man)m(y)h(of)g(the)h(lexicons)e(distributed)e(with)i(F)-8 b(estiv)j(al)30 b(this)f(en)m(try)h(has)g(in)m(ternal)150 3236 y(format,)f(iden)m(tifying)d(syllable)g(structure,)i(stress)g (markigns)e(and)i(of)g(course)g(the)g(phones)f(themselv)m(es.)150 3346 y(In)i(some)h(of)g(our)g(other)g(lexicons)f(w)m(e)h(simply)d(list) i(the)h(phones)f(with)f(stress)i(marking)f(on)h(eac)m(h)h(v)m(o)m(w)m (el.)275 3509 y(Some)f(t)m(ypical)g(example)g(en)m(tries)g(are)390 3667 y Fk(\()47 b("walkers")f(n)h(\(\(\()g(w)h(oo)f(\))g(1\))g(\(\()h (k)f(@)g(z)h(\))f(0\)\))g(\))390 3771 y(\()g("present")f(v)h(\(\(\()g (p)h(r)f(e)g(\))h(0\))f(\(\()g(z)h(@)f(n)h(t)f(\))h(1\)\))e(\))390 3875 y(\()h("monument")e(n)j(\(\(\()f(m)g(o)h(\))f(1\))g(\(\()h(n)f(y)g (u)h(\))f(0\))h(\(\()f(m)g(@)h(n)f(t)h(\))f(0\)\))g(\))275 4039 y Fo(Note)38 b(y)m(ou)g(ma)m(y)g(ha)m(v)m(e)h(t)m(w)m(o)g(en)m (tries)e(with)f(the)i(same)g(headw)m(ord,)h(but)e(di\013eren)m(t)g (part)g(of)h(sp)s(eec)m(h)150 4148 y(\014elds)29 b(allo)m(w)h (di\013eren)m(tiation.)39 b(F)-8 b(or)31 b(example)390 4306 y Fk(\()47 b("lives")f(n)i(\(\(\()f(l)g(ai)g(v)h(z)f(\))h(1\)\))f (\))390 4410 y(\()g("lives")f(v)i(\(\(\()f(l)g(i)h(v)f(z)g(\))h(1\)\))f (\))275 4574 y Fo(See)27 b(Section)f(13.3)j([Lo)s(okup)d(pro)s(cess],)h (page)h(49)g(for)e(a)h(description)e(of)i(ho)m(w)g(m)m(ultiple)e(en)m (tries)h(with)150 4684 y(the)31 b(same)f(headw)m(ord)g(are)h(used)f (during)e(lo)s(okup.)275 4847 y(By)37 b(curren)m(t)h(con)m(v)m(en)m (tions,)i(single)c(syllable)g(function)g(w)m(ords)h(should)e(ha)m(v)m (e)k(no)e(stress)h(marking,)150 4957 y(while)28 b(single)h(syllable)g (con)m(ten)m(t)j(w)m(ords)e(should)e(b)s(e)i(stressed.)275 5121 y Fi(NOTE:)g Fo(the)c(POS)f(\014eld)f(ma)m(y)j(c)m(hange)g(in)d (future)h(to)i(con)m(tain)f(more)g(complex)g(formats.)39 b(The)26 b(same)150 5230 y(lexicon)d(mec)m(hanism)g(\(but)h(di\013eren) m(t)f(lexicon\))h(is)f(used)g(for)h(holding)e(part)h(of)i(sp)s(eec)m(h) f(tag)h(distributions)150 5340 y(for)30 b(the)h(POS)e(prediction)g(mo)s (dule.)p eop %%Page: 48 50 48 49 bop 150 -116 a Fo(48)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(13.2)68 b(De\014ning)45 b(lexicons)275 493 y Fo(As)f(stated)i(ab)s(o)m(v)m(e,)j (lexicons)44 b(consist)g(of)h(three)g(basic)f(parts)g(\(compiled)g (form,)k(addenda)c(and)150 602 y(unkno)m(wn)29 b(w)m(ord)h(metho)s(d\)) g(plus)e(some)j(other)g(declarations.)275 738 y(Eac)m(h)39 b(lexicon)g(in)f(the)h(system)h(has)f(a)h(name)f(whic)m(h)f(allo)m(ws)h (di\013eren)m(t)f(lexicons)h(to)h(b)s(e)e(selected)150 848 y(from)33 b(e\016cien)m(tly)h(when)f(switc)m(hing)f(b)s(et)m(w)m (een)j(v)m(oices)f(during)e(syn)m(thesis.)50 b(The)33 b(basic)h(steps)f(in)m(v)m(olv)m(ed)150 957 y(in)c(a)i(lexicon)e (de\014nition)f(are)j(as)g(follo)m(ws.)275 1093 y(First)e(a)i(new)f (lexicon)f(m)m(ust)i(b)s(e)e(created)j(with)d(a)i(new)f(name)390 1223 y Fk(\(lex.create)45 b("cstrlex"\))275 1359 y Fo(A)29 b(phone)g(set)h(m)m(ust)f(b)s(e)g(declared)g(for)g(the)h(lexicon,)f(to) h(allo)m(w)f(b)s(oth)g(c)m(hec)m(ks)h(on)g(the)f(en)m(tries)h(them-)150 1468 y(selv)m(es)h(and)e(to)i(allo)m(w)f(phone)g(mapping)f(b)s(et)m(w)m (een)i(di\013eren)m(t)f(phone)f(sets)i(used)f(in)f(the)h(system)390 1598 y Fk(\(lex.set.phoneset)43 b("mrpa"\))275 1734 y Fo(The)29 b(phone)h(set)h(m)m(ust)f(b)s(e)g(already)g(declared)g(in)f (the)h(system.)275 1869 y(A)40 b(compiled)f(lexicon,)k(the)e (construction)f(of)g(whic)m(h)g(is)f(describ)s(ed)g(b)s(elo)m(w,)j(ma)m (y)g(b)s(e)e(optionally)150 1979 y(sp)s(eci\014ed)390 2109 y Fk(\(lex.set.compile.file)i("/projects/festival/lib/)o(dict)o (s/cs)o(trl)o(ex.o)o(ut"\))275 2245 y Fo(The)32 b(metho)s(d)h(for)g (dealing)g(with)f(unkno)m(wn)f(w)m(ords,)j(See)g(Section)f(13.4)i ([Letter)g(to)f(sound)e(rules],)150 2354 y(page)f(51,)h(ma)m(y)f(b)s(e) e(set)390 2484 y Fk(\(lex.set.lts.method)43 b('lts_rules\))390 2588 y(\(lex.set.lts.ruleset)f('nrl\))275 2724 y Fo(In)24 b(this)h(case)h(w)m(e)g(are)g(sp)s(ecifying)e(the)h(use)h(of)f(a)h(set) g(of)g(letter)g(to)g(sound)f(rules)f(originally)f(dev)m(elop)s(ed)150 2833 y(b)m(y)i(the)f(U.S.)h(Na)m(v)-5 b(al)26 b(Researc)m(h)f(Lab)s (oratories.)39 b(The)24 b(default)g(metho)s(d)g(is)g(to)h(giv)m(e)g(an) g(error)f(if)g(a)h(w)m(ord)f(is)150 2943 y(not)31 b(found)e(in)g(the)h (addenda)g(or)g(compiled)f(lexicon.)40 b(\(This)29 b(and)h(other)h (options)e(are)i(discussed)e(more)150 3052 y(fully)f(b)s(elo)m(w.\))275 3188 y(Finally)h(addenda)h(items)h(ma)m(y)h(b)s(e)e(added)h(for)g(w)m (ords)g(that)g(are)h(kno)m(wn)f(to)h(b)s(e)e(common,)i(but)f(not)150 3298 y(in)e(the)i(lexicon)e(and)h(cannot)h(reasonably)f(b)s(e)f (analysed)h(b)m(y)g(the)h(letter)g(to)g(sound)e(rules.)390 3428 y Fk(\(lex.add.entry)485 3531 y('\()48 b("awb")e(n)h(\(\(\()g(ei)h (\))f(1\))g(\(\(d)g(uh\))g(1\))g(\(\(b)g(@)h(l\))f(0\))g(\(\(y)g(uu\))g (0\))g(\(\(b)g(ii\))g(1\)\)\)\))390 3635 y(\(lex.add.entry)485 3739 y('\()h("cstr")e(n)h(\(\(\()g(s)h(ii)f(\))g(1\))g(\(\()h(e)f(s)g (\))h(1\))f(\(\()g(t)h(ii)f(\))g(1\))h(\(\()f(aa)g(\))g(1\)\))g(\)\)) 390 3843 y(\(lex.add.entry)485 3947 y('\()h("Edinburgh")c(n)k(\(\(\()f (e)g(m)h(\))f(1\))g(\(\()g(b)h(r)f(@)h(\))f(0\)\)\))g(\)\))275 4082 y Fo(Using)c Fk(lex.add.entry)d Fo(again)k(for)f(the)i(same)f(w)m (ord)f(and)h(part)f(of)h(sp)s(eec)m(h)g(will)e(rede\014ne)h(the)150 4192 y(curren)m(t)33 b(pron)m(unciation.)46 b(Note)34 b(these)g(add)e(en)m(tries)h(to)g(the)g Fi(curr)-5 b(ent)42 b Fo(lexicon)32 b(so)i(its)e(a)h(go)s(o)s(d)g(idea)f(to)150 4301 y(explicitly)i(select)j(the)f(lexicon)f(b)s(efore)h(y)m(ou)h(add)e (addenda)h(en)m(tries,)i(particularly)33 b(if)j(y)m(ou)g(are)h(doing) 150 4411 y(this)29 b(in)g(y)m(our)i(o)m(wn)f(`)p Fk(.festivalrc)p Fo(')e(\014le.)275 4547 y(F)-8 b(or)25 b(large)g(lists,)g(compiled)e (lexicons)h(are)h(b)s(est.)39 b(The)24 b(function)f Fk(lex.compile)f Fo(tak)m(es)27 b(t)m(w)m(o)f(\014lename)150 4656 y(argumen)m(ts,)46 b(a)d(\014le)f(name)g(con)m(taining)h(a)g(list)e(of)h(lexical)g(en)m (tries)g(and)g(an)h(output)f(\014le)g(where)g(the)150 4766 y(compiled)29 b(lexicon)g(will)f(b)s(e)i(sa)m(v)m(ed.)275 4902 y(Compilation)40 b(can)k(tak)m(e)h(some)e(time)g(and)g(ma)m(y)g (require)f(lots)h(of)g(memory)-8 b(,)47 b(as)d(all)e(en)m(tries)h(are) 150 5011 y(loaded)34 b(in,)g(c)m(hec)m(k)m(ed)i(and)e(then)g(sorted)g (b)s(efore)g(b)s(eing)f(written)g(out)i(again.)52 b(During)33 b(compilation)g(if)150 5121 y(some)d(en)m(try)f(is)f(malformed)g(the)i (reading)e(pro)s(cess)h(halts)f(with)g(a)i(not)f(so)h(useful)d (message.)42 b(Note)30 b(that)150 5230 y(if)d(an)m(y)i(of)g(y)m(our)f (en)m(tries)g(include)e(quote)j(or)f(double)f(quotes)i(the)g(en)m (tries)f(will)e(probably)g(b)s(e)i(misparsed)150 5340 y(and)i(cause)h(suc)m(h)f(a)h(w)m(eird)e(error.)40 b(In)30 b(suc)m(h)g(cases)h(try)f(setting)p eop %%Page: 49 51 49 50 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(49)390 299 y Fk(\(debug_output)44 b(t\))150 544 y Fo(b)s(efore)30 b(compilation.)39 b(This)29 b(will)f(prin)m(t)h(out)h(eac)m(h)i(en)m (try)e(as)h(it)f(is)f(read)i(in)150 653 y(whic)m(h)e(should)f(help)h (to)j(narro)m(w)e(do)m(wn)g(where)f(the)i(error)f(is.)150 912 y Fn(13.3)68 b(Lo)t(okup)45 b(pro)t(cess)275 1106 y Fo(When)38 b(lo)s(oking)f(up)g(a)h(w)m(ord,)j(either)c(through)h(the) g(C)p Fk(++)g Fo(in)m(terface,)j(or)d(Lisp)f(in)m(terface,)k(a)d(w)m (ord)150 1215 y(is)e(iden)m(ti\014ed)f(b)m(y)h(its)g(headw)m(ord)g(and) g(part)h(of)g(sp)s(eec)m(h.)60 b(If)36 b(no)g(part)h(of)g(sp)s(eec)m(h) g(is)e(sp)s(eci\014ed,)i Fk(nil)f Fo(is)150 1325 y(assumed)30 b(whic)m(h)f(matc)m(hes)i(an)m(y)g(part)f(of)h(sp)s(eec)m(h)f(tag.)275 1460 y(The)d(lexicon)g(lo)s(ok)g(up)g(pro)s(cess)g(\014rst)g(c)m(hec)m (ks)j(the)e(addenda,)f(if)g(there)h(is)f(a)h(full)e(matc)m(h)i(\(head)g (w)m(ord)150 1570 y(plus)i(part)h(of)h(sp)s(eec)m(h\))g(it)f(is)g (returned.)43 b(If)31 b(there)h(is)f(an)g(addenda)g(en)m(try)h(whose)f (head)h(w)m(ord)f(matc)m(hes)150 1679 y(and)f(whose)g(part)g(of)h(sp)s (eec)m(h)f(is)g Fk(nil)f Fo(that)i(en)m(try)g(is)e(returned.)275 1815 y(If)g(no)h(matc)m(h)h(is)e(found)f(in)h(the)h(addenda,)f(the)i (compiled)d(lexicon,)h(if)g(presen)m(t,)i(is)e(c)m(hec)m(k)m(ed.)42 b(Again)150 1924 y(a)35 b(matc)m(h)h(is)d(when)h(b)s(oth)g(head)h(w)m (ord)f(and)g(part)h(of)g(sp)s(eec)m(h)f(tag)i(matc)m(h,)h(or)e(either)f (the)h(w)m(ord)f(b)s(eing)150 2034 y(searc)m(hed)29 b(for)g(has)f(a)h (part)f(of)h(sp)s(eec)m(h)g Fk(nil)f Fo(or)g(an)h(en)m(try)g(has)f(its) g(tag)i(as)f Fk(nil)p Fo(.)39 b(Unlik)m(e)28 b(the)g(addenda,)h(if)150 2143 y(no)d(full)e(head)i(w)m(ord)g(and)g(part)g(of)h(sp)s(eec)m(h)f (tag)h(matc)m(h)h(is)d(found,)h(the)h(\014rst)e(w)m(ord)h(in)f(the)i (lexicon)e(whose)150 2253 y(head)36 b(w)m(ord)g(matc)m(hes)h(is)e (returned.)57 b(The)36 b(rationale)g(is)f(that)i(the)f(letter)g(to)h (sound)e(rules)g(\(the)i(next)150 2363 y(defence\))29 b(are)g(unlik)m(ely)e(to)i(b)s(e)f(b)s(etter)h(than)f(an)h(giv)m(en)g (alternate)g(pron)m(unciation)e(for)h(a)h(the)g(w)m(ord)g(but)150 2472 y(di\013eren)m(t)j(part)g(of)h(sp)s(eec)m(h.)47 b(Ev)m(en)32 b(more)h(so)g(giv)m(en)f(that)h(as)g(there)g(is)e(an)i(en) m(try)f(with)f(the)i(head)f(w)m(ord)150 2582 y(but)d(a)i(di\013eren)m (t)e(part)h(of)g(sp)s(eec)m(h)g(this)f(w)m(ord)g(ma)m(y)i(ha)m(v)m(e)g (an)f(un)m(usual)e(pron)m(unciation)g(that)i(the)h(letter)150 2691 y(to)g(sound)e(rules)g(will)f(ha)m(v)m(e)j(no)g(c)m(hance)g(in)e (pro)s(ducing.)275 2827 y(Finally)d(if)h(the)i(w)m(ord)f(is)g(not)g (found)f(in)g(the)i(compiled)e(lexicon)h(it)g(is)f(passed)h(to)h (whatev)m(er)g(metho)s(d)150 2936 y(is)24 b(de\014ned)g(for)g(unkno)m (wn)g(w)m(ords.)38 b(This)23 b(is)h(most)h(lik)m(ely)f(a)h(letter)g(to) h(sound)d(mo)s(dule.)38 b(See)25 b(Section)f(13.4)150 3046 y([Letter)31 b(to)h(sound)d(rules],)g(page)i(51.)275 3181 y(Optional)f(pre-)i(and)g(p)s(ost-lo)s(okup)f(ho)s(oks)h(can)g(b)s (e)g(sp)s(eci\014ed)f(for)h(a)g(lexicon.)46 b(As)32 b(a)h(single)e (\(or)h(list)150 3290 y(of)7 b(\))35 b(Lisp)f(functions.)53 b(The)34 b(pre-ho)s(oks)g(will)f(b)s(e)h(called)g(with)g(t)m(w)m(o)i (argumen)m(ts)f(\(w)m(ord)g(and)f(features\))150 3400 y(and)c(should)f(return)g(a)i(pair)e(\(w)m(ord)i(and)f(features\).)42 b(The)30 b(p)s(ost-ho)s(oks)g(will)e(b)s(e)i(giv)m(en)g(a)h(lexical)f (en)m(try)150 3510 y(and)g(should)e(return)h(a)i(lexical)e(en)m(try)-8 b(.)42 b(The)30 b(pre-)g(and)g(p)s(ost-ho)s(oks)g(do)g(nothing)f(b)m(y) i(default.)275 3645 y(Compiled)36 b(lexicons)i(ma)m(y)h(b)s(e)f (created)h(from)g(lists)e(of)h(lexical)g(en)m(tries.)65 b(A)39 b(compiled)e(lexicon)h(is)150 3754 y Fi(much)i Fo(more)33 b(e\016cien)m(t)g(for)g(lo)s(ok)f(up)g(than)g(the)h (addenda.)47 b(Compiled)31 b(lexicons)h(use)g(a)h(binary)e(searc)m(h) 150 3864 y(metho)s(d)c(while)e(the)i(addenda)g(is)f(searc)m(hed)i (linearly)-8 b(.)38 b(Also)27 b(it)g(w)m(ould)f(tak)m(e)j(a)e (prohibitiv)m(ely)d(long)j(time)150 3974 y(to)h(load)e(in)g(a)h(t)m (ypical)g(full)e(lexicon)h(as)h(an)g(addenda.)39 b(If)27 b(y)m(ou)g(ha)m(v)m(e)h(more)f(than)g(a)g(few)g(h)m(undred)e(en)m (tries)150 4083 y(in)k(y)m(our)h(addenda)g(y)m(ou)h(should)d(seriously) h(consider)g(adding)g(them)h(to)h(y)m(our)g(compiled)d(lexicon.)275 4218 y(Because)35 b(man)m(y)g(publicly)30 b(a)m(v)-5 b(ailable)34 b(lexicons)f(do)h(not)h(ha)m(v)m(e)g(syllable)e(markings)g (for)h(en)m(tries)g(the)150 4328 y(compilation)g(metho)s(d)h(supp)s (orts)f(automatic)i(syllabi\014cation.)53 b(Th)m(us)35 b(for)g(lexicon)g(en)m(tries)g(for)g(com-)150 4438 y(pilation,)d(t)m(w) m(o)j(forms)e(for)g(the)h(pron)m(unciation)e(\014eld)g(are)i(supp)s (orted:)45 b(the)33 b(standard)g(full)e(syllabi\014ed)150 4547 y(and)26 b(stressed)h(form)g(and)f(a)i(simpler)c(linear)i(form)g (found)g(in)g(at)i(least)f(the)g(BEEP)g(and)f(CMU)i(lexicons.)150 4657 y(If)i(the)g(pron)m(unciation)f(\014eld)g(is)g(a)i(\015at)g (atomic)g(list)e(it)h(is)f(assumed)h(syllabi\014cation)e(is)h (required.)275 4792 y(Syllabi\014cation)37 b(is)i(done)g(b)m(y)h (\014nding)e(the)i(minim)m(um)d(sonoran)m(t)k(p)s(osition)d(b)s(et)m(w) m(een)i(v)m(o)m(w)m(els.)71 b(It)150 4902 y(is)48 b(not)h(guaran)m (teed)h(to)f(b)s(e)f(accurate)j(but)d(do)s(es)g(giv)m(e)h(a)h(solution) d(that)i(is)f(su\016cien)m(t)g(for)h(man)m(y)150 5011 y(purp)s(oses.)79 b(A)44 b(little)f(w)m(ork)h(w)m(ould)e(probably)g (impro)m(v)m(e)i(this)f(signi\014can)m(tly)-8 b(.)79 b(Of)44 b(course)g(syllabi\014-)150 5121 y(cation)j(requires)f(the)h (en)m(try's)g(phones)f(to)i(b)s(e)e(in)g(the)h(curren)m(t)g(phone)f (set.)91 b(The)47 b(sonoran)m(t)g(v)-5 b(al-)150 5230 y(ues)43 b(are)g(calculated)g(from)f(the)h Fi(vc)p Fo(,)j Fi(ctyp)-5 b(e)p Fo(,)47 b(and)42 b Fi(cvox)54 b Fo(features)43 b(for)g(the)g(curren)m(t)g(phoneset.)78 b(See)150 5340 y(`)p Fk(src/arch/festival/Phone.c)o(c:ph)o(_son)o(ori)o(ty\(\))o Fo(')25 b(for)30 b(actual)h(de\014nition.)p eop %%Page: 50 52 50 51 bop 150 -116 a Fo(50)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(Additionally)f(in)j (this)g(\015at)h(structure)f(v)m(o)m(w)m(els)i(\(atoms)g(starting)f (with)e(a,)j(e,)g(i,)e(o)i(or)f(u\))f(ma)m(y)i(ha)m(v)m(e)150 408 y(1)c(2)g(or)f(0)h(app)s(ended)d(marking)i(stress.)40 b(This)26 b(is)i(again)g(follo)m(wing)f(the)i(form)e(found)h(in)f(the)h (BEEP)h(and)150 518 y(CMU)h(lexicons.)275 659 y(Some)g(example)g(en)m (tries)g(in)f(the)i(\015at)f(form)g(\(tak)m(en)i(from)e(BEEP\))h(are) 390 793 y Fk(\("table")46 b(nil)g(\(t)i(ei1)f(b)g(l\)\))390 897 y(\("suspicious")d(nil)j(\(s)g(@)h(s)f(p)h(i1)f(sh)g(@)g(s\)\))275 1038 y Fo(Also)22 b(if)g(syllabi\014cation)e(is)i(required)f(there)j (is)e(an)g(opp)s(ortunit)m(y)g(to)h(run)f(a)h(set)h(of)f Fk(")p Fo(letter-to-sound)p Fk(")p Fo(-)150 1147 y(rules)i(on)i(the)g (input)e(\(actually)h(an)h(arbitrary)f(re-write)g(rule)f(system\).)40 b(If)27 b(the)f(v)-5 b(ariable)26 b Fk(lex_lts_set)150 1257 y Fo(is)34 b(set,)i(the)f(lts)f(ruleset)f(of)i(that)g(name)g(is)e (applied)g(to)i(the)g(\015at)f(input)f(b)s(efore)h(syllabi\014cation.) 51 b(This)150 1367 y(allo)m(ws)28 b(simple)e(predictable)h(c)m(hanges)i (suc)m(h)f(as)g(con)m(v)m(ersion)h(of)f(\014nal)f(r)h(in)m(to)g(longer) g(v)m(o)m(w)m(el)h(for)f(English)150 1476 y(RP)i(from)g(American)g(lab) s(elled)e(lexicons.)275 1617 y(A)h(list)f(of)i(all)f(matc)m(hing)g(en)m (tries)h(in)e(the)i(addenda)e(and)h(the)h(compiled)e(lexicon)h(ma)m(y)h (b)s(e)f(found)f(b)m(y)150 1726 y(the)h(function)e Fk(lex.lookup_all)p Fo(.)37 b(This)27 b(function)g(tak)m(es)j(a)g(w)m(ord)e(and)g(returns)g (all)f(matc)m(hing)i(en)m(tries)150 1836 y(irresp)s(ectiv)m(e)g(of)i (part)f(of)h(sp)s(eec)m(h.)275 1977 y(Y)-8 b(ou)32 b(can)h(optionall)e (in)m(tercept)i(the)f(w)m(ords)g(as)h(they)g(are)f(lo)s(okup)f(up,)i (and)e(after)i(they)g(ha)m(v)m(e)h(b)s(een)150 2086 y(found)d(through)h Fk(pre_hooks)d Fo(and)j Fk(post_hooks)e Fo(for)i(eac)m(h)h(lexicon.)46 b(This)31 b(allo)m(ws)g(a)i(function)e(or)h(list)150 2196 y(of)h(functions)e(to)j(b)s(e)e(applied)f(to)i(an)g(w)m(ord)f(and) h(feature)g(sb)s(efore)f(lo)s(okup)f(or)i(to)h(the)f(resulting)e(en)m (try)150 2305 y(after)36 b(lo)s(okup.)55 b(The)35 b(follo)m(wing)f (example)h(sho)m(ws)g(ho)m(w)h(to)g(add)f(v)m(oice)h(sp)s(eci\014c)f (en)m(tries)g(to)h(a)g(general)150 2415 y(lexicon)30 b(without)f(a\013ecting)i(other)g(v)m(oices)g(that)g(use)f(that)h (lexicon.)275 2556 y(F)-8 b(or)27 b(example)g(supp)s(ose)e(w)m(e)j(w)m (ere)f(trying)f(to)h(use)g(a)g(Scottish)g(English)d(v)m(oice)k(with)e (the)h(US)f(English)150 2665 y(\(cm)m(u\))j(lexicon.)39 b(A)28 b(n)m(um)m(b)s(er)e(of)i(en)m(tgries)g(will)d(b)s(e)i(inapp)s (orpriate)e(but)j(w)m(e)g(can)g(rede\014ne)f(some)h(en)m(tries)150 2775 y(th)m(us)390 2910 y Fk(\(set!)46 b(cmu_us_awb::lexicon_addend)o (a)676 3013 y('\()390 3117 y(\("edinburgh")e(n)k(\(\(\(eh)e(d\))h(1\))h (\(\(ax)e(n\))h(0\))h(\(\(b)f(r)g(ax\))g(0\)\)\))390 3221 y(\("poem")f(n)h(\(\(\(p)g(ow\))g(1\))g(\(\(y)g(ax)g(m\))g (0\)\)\))390 3325 y(\("usual")f(n)h(\(\(\(y)g(uw\))g(1\))g(\(\(zh)f(ax) i(l\))f(0\)\)\))390 3428 y(\("air")f(n)i(\(\(\(ey)e(r\))h(1\)\)\))390 3532 y(\("hair")f(n)h(\(\(\(hh)g(ey)g(r\))g(1\)\)\))390 3636 y(\("fair")f(n)h(\(\(\(f)g(ey)g(r\))g(1\)\)\))390 3740 y(\("chair")f(n)h(\(\(\(ch)f(ey)i(r\))f(1\)\)\)\)\))275 3880 y Fo(W)-8 b(e)35 b(can)g(the)f(de\014ne)g(a)h(function)e(that)i(c) m(hesk)f(to)h(see)g(if)f(the)g(w)m(ord)g(lo)s(ok)m(ed)h(up)e(is)g(in)g (the)i(sp)s(eak)m(er)150 3990 y(sp)s(eci\014c)29 b(exception)i(list)e (and)h(use)g(that)h(en)m(try)f(instead.)390 4125 y Fk(\(define)46 b(\(cmu_us_awb::cmu_lookup_)o(pos)o(t)c(entry\))485 4229 y("\(cmu_us_awb::cmu_lookup_p)o(ost)f(entry\))390 4332 y(Speaker)46 b(specific)f(lexicon)h(addeda.")485 4436 y(\(let)h(\(\(ne)438 4540 y(\(assoc_string)d(\(car)j(entry\))f (cmu_us_awb::lexicon_add)o(enda)o(\)\)\))581 4644 y(\(if)h(ne)390 4747 y(ne)390 4851 y(entry\)\)\))275 4992 y Fo(And)24 b(then)i(for)f(the)h(particualr)e(v)m(oice)j(set)f(up)e(w)m(e)i(need)g (to)g(add)f(b)s(oth)g(a)h(selection)g(part)f Fi(and)36 b Fo(a)26 b(reset)150 5101 y(part.)41 b(Th)m(uis)28 b(follo)m(wing)h (the)i(F)-8 b(estV)g(o)m(x)33 b(v)m(on)m(v)m(en)m(tions)e(for)f(v)m (oice)i(set)f(up.)390 5236 y Fk(\(define)46 b (\(cmu_us_awb::select_lexi)o(con)o(\))p eop %%Page: 51 53 51 52 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(51)581 299 y Fk(...)581 403 y(\(lex.select)45 b("cmu"\))581 506 y(;;)i(Get)g(old)g(var)g(for)g(reset)f(and)h(to)g(append)f(our)h (function)f(to)h(is)581 610 y(\(set!)f(cmu_us_awb::old_cmu_post_)o (hook)o(s)724 714 y(\(lex.set.post_hooks)d(nil\)\))581 818 y(\(lex.set.post_hooks)724 922 y(\(append)j (cmu_us_awb::old_cmu_post)o(_hoo)o(ks)1106 1025 y(\(list)g (cmu_us_awb::cmu_lookup_po)o(st\)\))o(\))581 1129 y(...)390 1233 y(\))390 1440 y(...)390 1648 y(\(define)g (\(cmu_us_awb::reset_lexic)o(on\))485 1856 y(...)485 1959 y(;;)i(reset)e(CMU's)g(post_hooks)f(back)i(to)g(original)485 2063 y(\(lex.set.post_hooks)c(cmu_us_awb::old_cmu_post)o(_hoo)o(ks\)) 485 2167 y(...)390 2374 y(\))275 2532 y Fo(The)32 b(ab)s(o)m(v)m(e)j (isn't)d(the)h(most)h(e\016cien)m(t)f(w)m(a)m(y)i(as)e(the)g(w)m(ord)g (is)f(lo)s(ok)m(ed)i(up)e(\014rst)g(then)h(it)g(is)f(c)m(hec)m(k)m(ed) 150 2641 y(with)d(the)i(sp)s(eak)m(er)f(sp)s(eci\014c)f(list.)275 2799 y(The)39 b Fk(pre_hooks)e Fo(function)h(are)j(called)e(with)f(t)m (w)m(o)j(argumen)m(ts,)i(the)d(w)m(ord)f(and)g(features,)k(they)150 2908 y(should)28 b(return)i(a)g(pair)g(of)g(w)m(ord)g(and)g(features.) 150 3223 y Fn(13.4)68 b(Letter)46 b(to)g(sound)e(rules)275 3439 y Fo(Eac)m(h)22 b(lexicon)f(ma)m(y)i(de\014ne)e(what)h(action)g (to)h(tak)m(e)g(when)e(a)i(w)m(ord)e(cannot)i(b)s(e)e(found)g(in)g(the) h(addenda)150 3548 y(or)34 b(the)g(compiled)f(lexicon.)51 b(There)34 b(are)g(a)h(n)m(um)m(b)s(er)d(of)j(options)e(whic)m(h)g (will)e(hop)s(efully)g(b)s(e)j(added)f(to)150 3658 y(as)e(more)f (general)h(letter)f(to)h(sound)e(rule)h(systems)g(are)h(added.)275 3815 y(The)e(metho)s(d)h(is)g(set)h(b)m(y)f(the)g(command)390 3967 y Fk(\(lex.set.lts.method)43 b(METHOD\))275 4124 y Fo(Where)30 b Fj(METHOD)35 b Fo(can)c(b)s(e)f(an)m(y)h(of)f(the)h (follo)m(wing)150 4318 y(`)p Fk(Error)p Fo(')190 b(Thro)m(w)30 b(an)g(error)g(when)f(an)i(unkno)m(wn)d(w)m(ord)i(is)g(found)f (\(default\).)150 4500 y(`)p Fk(lts_rules)p Fo(')630 4610 y(Use)42 b(externally)g(sp)s(eci\014ed)e(set)i(of)h(letter)f(to)h (sound)d(rules)h(\(describ)s(ed)f(b)s(elo)m(w\).)75 b(The)630 4719 y(name)26 b(of)g(the)f(rule)g(set)h(to)h(use)e(is)g(de\014ned)f (with)g(the)i Fk(lex.lts.ruleset)c Fo(function.)38 b(This)630 4829 y(metho)s(d)28 b(runs)e(one)j(set)f(of)h(rules)d(on)i(an)h(explo)s (ded)d(form)i(of)g(the)h(w)m(ord)e(and)h(assumes)g(the)630 4938 y(rules)e(return)g(a)i(list)e(of)h(phonemes)g(\(in)f(the)h (appropriate)g(set\).)40 b(If)27 b(m)m(ultiple)e(instances)i(of)630 5048 y(rules)i(are)i(required)d(use)i(the)h Fk(function)d Fo(metho)s(d)i(describ)s(ed)e(next.)150 5230 y(`)p Fk(none)p Fo(')238 b(This)26 b(returns)h(an)h(en)m(try)g(with)f(a)i Fk(nil)e Fo(pron)m(unciation)f(\014eld.)39 b(This)26 b(will)f(only)i(b)s(e)h(v)-5 b(alid)26 b(in)630 5340 y(v)m(ery)31 b(sp)s(ecial)e(circumstances.)p eop %%Page: 52 54 52 53 bop 150 -116 a Fo(52)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(`)p Fk(FUNCTIONNAME)p Fo(')630 408 y(Call)40 b(this)g(as)i(a)g(LISP)e (function)g(function)g(name.)74 b(This)40 b(function)g(is)g(giv)m(en)i (t)m(w)m(o)h(ar-)630 518 y(gumen)m(ts:)63 b(the)41 b(w)m(ord)g(and)f (the)i(part)f(of)g(sp)s(eec)m(h.)73 b(It)42 b(should)d(return)h(a)h(v) -5 b(alid)40 b(lexical)630 628 y(en)m(try)-8 b(.)275 809 y(The)38 b(basic)h(letter)g(to)h(sound)e(rule)g(system)i(is)e(v)m (ery)h(simple)f(but)g(is)g(p)s(o)m(w)m(erful)g(enough)h(to)h(build)150 918 y(reasonably)34 b(complex)f(letter)i(to)g(sound)d(rules.)51 b(Although)33 b(w)m(e'v)m(e)j(found)d(trained)g(L)-8 b(TS)33 b(rules)g(b)s(etter)150 1028 y(than)e(hand)f(written)g(ones)h (\(for)g(complex)f(languages\))i(where)e(no)h(data)h(is)e(a)m(v)-5 b(ailable)30 b(and)h(rules)e(m)m(ust)150 1137 y(b)s(e)h(hand)g(written) h(the)g(follo)m(wing)e(rule)h(formalism)f(is)i(m)m(uc)m(h)g(easier)g (to)h(use)e(than)h(that)h(generated)g(b)m(y)150 1247 y(the)f(L)-8 b(TS)29 b(training)g(system)h(\(describ)s(ed)f(in)g(the)i (next)f(section\).)275 1396 y(The)f(basic)h(form)g(of)h(a)f(rule)f(is)h (as)g(follo)m(ws)390 1539 y Fk(\()47 b(LEFTCONTEXT)e([)j(ITEMS)e(])h (RIGHTCONTEXT)e(=)i(NEWITEMS)f(\))275 1687 y Fo(This)28 b(in)m(terpretation)i(is)g(that)h(if)e Fj(ITEMS)35 b Fo(app)s(ear)30 b(in)f(the)i(sp)s(eci\014ed)e(righ)m(t)h(and)g(left)g (con)m(text)i(then)150 1797 y(the)26 b(output)g(string)f(is)g(to)i(con) m(tain)f Fj(NEWITEMS)p Fo(.)g(An)m(y)g(of)g Fj(LEFTCONTEXT)p Fo(,)f Fj(RIGHTCONTEXT)150 1907 y Fo(or)h Fj(NEWITEMS)k Fo(ma)m(y)c(b)s(e)f(empt)m(y)-8 b(.)40 b(Note)27 b(that)g Fj(NEWITEMS)j Fo(is)25 b(written)g(to)h(a)g(di\013eren)m(t)f Fk(")p Fo(tap)s(e)p Fk(")h Fo(and)150 2016 y(hence)31 b(cannot)g(feed)f(further)f(rules)g(\(within)f(this)h(ruleset\).)41 b(An)30 b(example)g(is)390 2159 y Fk(\()47 b(#)h([)f(c)h(h)f(])h(C)f(=) h(k)f(\))275 2308 y Fo(The)32 b(sp)s(ecial)f(c)m(haracter)k Fk(#)d Fo(denotes)i(a)f(w)m(ord)f(b)s(oundary)-8 b(,)33 b(and)f(the)h(sym)m(b)s(ol)e Fk(C)i Fo(denotes)g(the)g(set)h(of)150 2418 y(all)g(consonan)m(ts,)j(sets)f(are)f(declared)f(b)s(efore)h (rules.)53 b(This)33 b(rule)h(states)i(that)g(a)f Fk(ch)g Fo(at)h(the)f(start)g(of)h(a)150 2527 y(w)m(ord)26 b(follo)m(w)m(ed)g (b)m(y)g(a)g(consonan)m(t)h(is)e(to)i(b)s(e)f(rendered)f(as)h(the)h Fk(k)e Fo(phoneme.)39 b(Sym)m(b)s(ols)25 b(in)f(con)m(texts)k(ma)m(y) 150 2637 y(b)s(e)f(follo)m(w)m(ed)g(b)m(y)g(the)h(sym)m(b)s(ol)e Fk(*)i Fo(for)f(zero)h(or)g(more)f(o)s(ccurrences,)i(or)e Fk(+)g Fo(for)h(one)f(or)h(more)g(o)s(ccurrences.)275 2786 y(The)39 b(sym)m(b)s(ols)f(in)g(the)i(rules)e(are)i(treated)g(as)g (set)g(names)g(if)e(they)i(are)g(declared)f(as)h(suc)m(h)f(or)h(as)150 2895 y(sym)m(b)s(ols)26 b(in)g(the)i(input/output)d(alphab)s(ets.)39 b(The)26 b(sym)m(b)s(ols)g(ma)m(y)i(b)s(e)f(more)h(than)f(one)g(c)m (haracter)i(long)150 3005 y(and)h(the)g(names)h(are)f(case)i(sensitiv)m (e.)275 3154 y(The)23 b(rules)g(are)i(tried)f(in)f(order)h(un)m(til)f (one)h(matc)m(hes)i(the)f(\014rst)e(\(or)i(more\))g(sym)m(b)s(ol)e(of)i (the)g(tap)s(e.)38 b(The)150 3263 y(rule)31 b(is)g(applied)f(adding)h (the)h(righ)m(t)g(hand)f(side)g(to)i(the)f(output)g(tap)s(e.)46 b(The)32 b(rules)e(are)j(again)f(applied)150 3373 y(from)e(the)g(start) h(of)g(the)f(list)g(of)g(rules.)275 3522 y(The)j(function)f(used)h(to)i (apply)d(a)i(set)g(of)g(rules)f(if)f(giv)m(en)i(an)g(atom)g(will)e (explo)s(de)g(it)i(in)m(to)f(a)h(list)f(of)150 3631 y(single)h(c)m (haracters,)j(while)c(if)h(giv)m(en)h(a)g(list)f(will)e(use)j(it)f(as)h (is.)54 b(This)33 b(re\015ects)i(the)g(common)g(usage)h(of)150 3741 y(wishing)27 b(to)j(re-write)e(the)i(individual)24 b(letters)30 b(in)e(a)h(w)m(ord)g(to)h(phonemes)f(but)f(without)g (excluding)g(the)150 3850 y(p)s(ossibilit)m(y)36 b(of)j(using)f(the)h (system)h(for)f(more)g(complex)g(manipulations,)g(suc)m(h)f(as)i(m)m (ulti-pass)e(L)-8 b(TS)150 3960 y(systems)30 b(and)g(phoneme)g(con)m(v) m(ersion.)275 4109 y(F)-8 b(rom)26 b(lisp)e(there)i(are)h(three)f (basic)g(access)h(functions,)f(there)h(are)f(corresp)s(onding)e (functions)h(in)g(the)150 4218 y(C/C)p Fk(++)30 b Fo(domain.)150 4399 y Fk(\(lts.ruleset)d(NAME)i(SETS)g(RULES\))630 4509 y Fo(De\014ne)j(a)g(new)g(set)g(of)g(lts)f(rules.)44 b(Where)32 b Fk(NAME)f Fo(is)g(the)h(name)g(for)f(this)g(rule,)g(SETS)g (is)g(a)630 4618 y(list)g(of)h(set)h(de\014nitions)d(of)i(the)h(form)e Fk(\(SETNAME)e(e0)g(e1)h(...\))h Fo(and)h Fk(RULES)f Fo(are)h(a)h(list)e(of)630 4728 y(rules)e(as)i(describ)s(ed)d(ab)s(o)m (v)m(e.)150 4902 y Fk(\(lts.apply)g(WORD)h(RULESETNAME\))630 5011 y Fo(Apply)k(the)h(set)h(of)g(rules)e(named)h Fk(RULESETNAME)d Fo(to)k Fk(WORD)p Fo(.)52 b(If)34 b Fk(WORD)f Fo(is)h(a)h(sym)m(b)s(ol) e(it)h(is)630 5121 y(explo)s(ded)c(in)m(to)i(a)f(list)g(of)g(the)h (individual)27 b(c)m(haracters)33 b(in)d(its)h(prin)m(t)f(name.)45 b(If)31 b Fk(WORD)f Fo(is)h(a)630 5230 y(list)c(it)i(is)e(used)h(as)h (is.)40 b(If)28 b(the)h(rules)e(cannot)i(b)s(e)g(successfully)d (applied)h(an)i(error)f(is)g(giv)m(en.)630 5340 y(The)i(result)f(of)i (\(successful\))f(application)e(is)i(returned)f(in)g(a)i(list.)p eop %%Page: 53 55 53 54 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(53)150 299 y Fk(\(lts.check_alpha)26 b(WORD)j(RULESETNAME\))630 408 y Fo(The)d(sym)m(b)s(ols)e(in)h Fk(WORD)g Fo(are)h(c)m(hec)m(k)m (ed)i(against)f(the)f(input)e(alphab)s(et)h(of)h(the)h(rules)d(named) 630 518 y Fk(RULESETNAME)p Fo(.)37 b(If)26 b(they)h(are)h(all)e(con)m (tained)h(in)f(that)i(alphab)s(et)e Fk(t)h Fo(is)f(returned,)h(else)g Fk(nil)p Fo(.)630 628 y(Note)33 b(this)e(do)s(es)g(not)h(necessarily)e (mean)i(the)g(rules)e(will)f(successfully)h(apply)g(\(con)m(texts)630 737 y(ma)m(y)39 b(restrict)f(the)h(application)e(of)i(the)f(rules\),)i (but)e(it)g(allo)m(ws)g(general)g(c)m(hec)m(king)i(lik)m(e)630 847 y(n)m(umerals,)29 b(punctuation)g(etc,)j(allo)m(wing)d(application) g(of)h(appropriate)g(rule)f(sets.)275 1001 y(The)i(letter)h(to)g(sound) e(rule)h(system)g(ma)m(y)i(b)s(e)e(used)g(directly)f(from)h(Lisp)f(and) h(can)h(easily)f(b)s(e)g(used)150 1110 y(to)k(do)f(relativ)m(ely)f (complex)g(op)s(erations)h(for)f(analyzing)h(w)m(ords)f(without)g (requiring)e(mo)s(di\014cation)i(of)150 1220 y(the)26 b(C/C)p Fk(++)e Fo(system.)39 b(F)-8 b(or)27 b(example)e(the)g(W)-8 b(elsh)26 b(letter)f(to)h(sound)f(rule)f(system)h(consists)g(or)h (three)f(rule)150 1329 y(sets,)31 b(\014rst)e(to)i(explicitly)c(iden)m (tify)i(ep)s(en)m(thesis,)g(then)h(iden)m(tify)e(stressed)i(v)m(o)m(w)m (els,)h(and)f(\014nally)e(rewrite)150 1439 y(this)h(augmen)m(ted)i (letter)g(string)e(to)j(phonemes.)40 b(This)28 b(is)i(ac)m(hiev)m(ed)h (b)m(y)f(the)h(follo)m(wing)d(function)390 1565 y Fk(\(define)46 b(\(welsh_lts)f(word)h(features\))485 1669 y(\(let)h(\(epen)f(str)h (wel\))581 1772 y(\(set!)f(epen)h(\(lts.apply)e(\(downcase)g(word\))i ('newepen\)\))581 1876 y(\(set!)f(str)h(\(lts.apply)e(epen)i ('newwelstr\)\))581 1980 y(\(set!)f(wel)h(\(lts.apply)e(str)i ('newwel\)\))581 2084 y(\(list)f(word)867 2188 y(nil)867 2291 y(\(lex.syllabify.phstress)c(wel\)\)\)\))275 2423 y Fo(The)36 b(L)-8 b(TS)36 b(metho)s(d)g(for)h(the)g(W)-8 b(elsh)37 b(lexicon)f(is)g(set)h(to)h Fk(welsh_lts)p Fo(,)e(so)h(this)f(function)g(is)g(called)150 2533 y(when)29 b(a)i(w)m(ord)e(is)h(not)g(found)f(in)g(the)h(lexicon.)40 b(The)29 b(ab)s(o)m(v)m(e)j(function)c(\014rst)i(do)m(wncases)g(the)h (w)m(ord)f(and)150 2642 y(then)39 b(applies)e(the)j(rulesets)e(in)g (turn,)j(\014nally)c(calling)h(the)h(syllabi\014cation)e(pro)s(cess)i (and)g(returns)f(a)150 2752 y(constructed)31 b(lexically)d(en)m(try)-8 b(.)150 3001 y Fn(13.5)68 b(Building)45 b(letter)i(to)e(sound)f(rules) 275 3191 y Fo(As)25 b(writing)e(letter)j(to)g(sound)e(rules)g(b)m(y)h (hand)g(is)f(hard)g(and)h(v)m(ery)h(time)f(consuming,)g(an)h (alternativ)m(e)150 3300 y(metho)s(d)k(is)f(also)h(a)m(v)-5 b(ailable)29 b(where)h(a)g(latter)h(to)g(sound)e(system)h(ma)m(y)h(b)s (e)e(built)f(from)i(a)g(lexicon)f(of)i(the)150 3410 y(language.)42 b(This)28 b(tec)m(hnique)i(has)h(successfully)d(b)s(een)i(used)g(from)g (English)e(\(British)h(and)h(American\),)150 3519 y(F)-8 b(renc)m(h)38 b(and)f(German.)63 b(The)37 b(di\016cult)m(y)f(and)h (appropriateness)f(of)i(using)e(letter)i(to)g(sound)f(rules)f(is)150 3629 y(v)m(ery)31 b(language)g(dep)s(enden)m(t,)275 3761 y(The)i(follo)m(wing)g(outlines)f(the)j(pro)s(cesses)f(in)m(v)m(olv)m (ed)g(in)e(building)f(a)j(letter)h(to)g(sound)e(mo)s(del)g(for)h(a)150 3870 y(language)e(giv)m(en)f(a)g(large)h(lexicon)e(of)i(pron)m (unciations.)41 b(This)29 b(tec)m(hnique)i(is)g(lik)m(ely)e(to)j(w)m (ork)g(for)f(most)150 3980 y(Europ)s(ean)41 b(languages)i(\(including)c (Russian\))i(but)h(do)s(esn't)g(seem)h(particularly)d(suitable)h(for)i (v)m(ery)150 4089 y(language)31 b(alphab)s(et)e(languages)i(lik)m(e)f (Japanese)g(and)g(Chinese.)40 b(The)30 b(pro)s(cess)g(describ)s(ed)e (here)i(is)g(not)150 4199 y(\(y)m(et\))37 b(fully)c(automatic)i(but)g (the)g(hand)f(in)m(terv)m(en)m(tion)h(required)e(is)h(small)g(and)g(ma) m(y)i(easily)e(b)s(e)g(done)150 4309 y(ev)m(en)d(b)m(y)f(p)s(eople)g (with)f(only)g(a)i(v)m(ery)g(little)e(kno)m(wledge)h(of)h(the)f (language)h(b)s(eing)e(dealt)h(with.)275 4440 y(The)f(pro)s(cess)h(in)m (v)m(olv)m(es)h(the)f(follo)m(wing)f(steps)225 4572 y Fm(\017)60 b Fo(Pre-pro)s(cessing)29 b(lexicon)h(in)m(to)g(suitable)f (training)g(set)225 4704 y Fm(\017)60 b Fo(De\014ning)33 b(the)h(set)g(of)g(allo)m(w)m(able)f(pairing)f(of)i(letters)g(to)g (phones.)50 b(\(W)-8 b(e)36 b(in)m(tend)c(to)j(do)f(this)e(fully)330 4813 y(automatically)e(in)f(future)h(v)m(ersions\).)225 4945 y Fm(\017)60 b Fo(Constructing)29 b(the)i(probabilities)c(of)j (eac)m(h)i(letter/phone)e(pair.)225 5077 y Fm(\017)60 b Fo(Aligning)28 b(letters)j(to)g(an)f(equal)g(set)h(of)f(phones/)p 2021 5077 28 4 v 33 w(epsilons)p 2365 5077 V 31 w(.)225 5208 y Fm(\017)60 b Fo(Extracting)31 b(the)f(data)h(b)m(y)f(letter)h (suitable)e(for)h(training.)225 5340 y Fm(\017)60 b Fo(Building)27 b(CAR)-8 b(T)31 b(mo)s(dels)e(for)h(predicting)e(phone)i(from)g (letters)g(\(and)h(con)m(text\).)p eop %%Page: 54 56 54 55 bop 150 -116 a Fo(54)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)225 299 y Fm(\017)60 b Fo(Building)27 b(additional)i(lexical)g(stress)h(assignmen)m(t)g(mo)s (del)g(\(if)f(necessary\).)275 468 y(All)g(except)i(the)f(\014rst)g(t)m (w)m(o)i(stages)f(of)g(this)e(are)i(fully)d(automatic.)275 608 y(Before)37 b(building)d(a)j(mo)s(del)f(its)g(wise)g(to)i(think)d (a)i(little)f(ab)s(out)h(what)g(y)m(ou)g(w)m(an)m(t)h(it)e(to)i(do.)60 b(Ide-)150 718 y(ally)35 b(the)i(mo)s(del)f(is)f(an)i(auxiluary)d(to)k (the)e(lexicon)g(so)h(only)f(w)m(ords)g(not)h(found)e(in)g(the)i (lexicon)f(will)150 828 y(require)c(use)h(of)h(the)f(letter)h(to)g (sound)e(rules.)49 b(Th)m(us)32 b(only)h(un)m(usual)e(forms)i(are)h (lik)m(ely)e(to)i(require)e(the)150 937 y(rules.)58 b(More)38 b(precisely)d(the)i(most)g(common)g(w)m(ords,)h(often)f(ha)m(ving)f (the)h(most)g(non-standard)f(pro-)150 1047 y(n)m(unciations,)i(should)d (probably)h(b)s(e)g(explicitly)f(listed)h(alw)m(a)m(ys.)62 b(It)37 b(is)g(p)s(ossible)e(to)j(reduce)f(the)g(size)150 1156 y(of)31 b(the)h(lexicon)e(\(sometimes)h(drastically\))f(b)m(y)h (remo)m(ving)g(all)f(en)m(tries)h(that)h(the)f(training)f(L)-8 b(TS)30 b(mo)s(del)150 1266 y(correctly)h(predicts.)275 1407 y(Before)44 b(starting)g(it)f(is)g(wise)g(to)h(consider)f(remo)m (ving)g(some)i(en)m(tries)e(from)g(the)h(lexicon)f(b)s(efore)150 1516 y(training,)32 b(I)h(t)m(ypically)e(will)g(remo)m(v)m(e)j(w)m (ords)e(under)g(4)h(letters)g(and)f(if)g(part)h(of)g(sp)s(eec)m(h)g (information)e(is)150 1626 y(a)m(v)-5 b(ailable)27 b(I)h(remo)m(v)m(e)i (all)d(function)g(w)m(ords,)h(ideally)e(only)h(training)f(from)i(nouns) f(v)m(erbs)h(and)f(adjectiv)m(es)150 1735 y(as)c(these)h(are)f(the)g (most)g(lik)m(ely)f(forms)g(to)i(b)s(e)e(unkno)m(wn)g(in)f(text.)40 b(It)23 b(is)f(useful)f(to)j(ha)m(v)m(e)g(morphologically)150 1845 y(in\015ected)e(and)g(deriv)m(ed)g(forms)g(in)g(the)h(training)e (set)i(as)g(it)f(is)g(often)h(suc)m(h)g(v)-5 b(arian)m(t)23 b(forms)f(that)h(not)g(found)150 1955 y(in)i(the)h(lexicon)f(ev)m(en)i (though)e(their)g(ro)s(ot)i(morpheme)e(is.)38 b(Note)27 b(that)g(in)e(man)m(y)h(forms)f(of)h(text,)i(prop)s(er)150 2064 y(names)g(are)h(the)f(most)h(common)g(form)e(of)i(unkno)m(wn)e(w)m (ord)h(and)f(ev)m(en)i(the)g(tec)m(hnique)f(presen)m(ted)g(here)150 2174 y(ma)m(y)c(not)f(adequately)g(cater)h(for)f(that)h(form)f(of)g (unkno)m(wn)e(w)m(ords)i(\(esp)s(ecially)f(if)g(they)h(unkno)m(wn)e(w)m (ords)150 2283 y(are)27 b(non-nativ)m(e)h(names\).)40 b(This)25 b(is)h(all)g(stating)h(that)h(this)e(ma)m(y)i(or)f(ma)m(y)g (not)h(b)s(e)e(appropriate)g(for)h(y)m(our)150 2393 y(task)i(but)f(the) g(rules)f(generated)i(b)m(y)g(this)e(learning)g(pro)s(cess)h(ha)m(v)m (e)h(in)e(the)i(examples)f(w)m(e'v)m(e)i(done)e(b)s(een)150 2503 y(m)m(uc)m(h)36 b(b)s(etter)h(than)e(what)i(w)m(e)f(could)f(pro)s (duce)h(b)m(y)g(hand)f(writing)f(rules)h(of)h(the)g(form)g(describ)s (ed)e(in)150 2612 y(the)d(previous)d(section.)275 2753 y(First)e(prepro)s(cess)g(the)i(lexicon)e(in)m(to)h(a)h(\014le)e(of)h (lexical)f(en)m(tries)h(to)h(b)s(e)e(used)h(for)g(training,)f(remo)m (ving)150 2862 y(functions)21 b(w)m(ords)g(and)g(c)m(hanging)h(the)g (head)g(w)m(ords)g(to)g(all)f(lo)m(w)m(er)i(case)g(\(ma)m(y)g(b)s(e)e (language)h(dep)s(enden)m(t\).)150 2972 y(The)h(en)m(tries)g(should)e (b)s(e)i(of)g(the)h(form)f(used)f(for)h(input)f(for)h(F)-8 b(estiv)j(al's)23 b(lexicon)g(compilation.)37 b(Sp)s(eci\014cal)150 3082 y(the)32 b(pron)m(unciations)e(should)f(b)s(e)j(simple)d(lists)i (of)g(phones)g(\(no)h(syllabi\014cation\).)43 b(Dep)s(ending)30 b(on)i(the)150 3191 y(language,)40 b(y)m(ou)e(ma)m(y)g(wish)d(to)k(rem) m(v)m(e)f(the)g(stressing|for)e(examples)h(here)g(w)m(e)h(ha)m(v)m(e)h (though)e(later)150 3301 y(tests)32 b(suggest)f(that)h(w)m(e)f(should)e (k)m(eep)j(it)f(in)e(ev)m(en)j(for)f(English.)40 b(Th)m(us)29 b(the)j(training)d(set)i(should)e(lo)s(ok)150 3410 y(something)h(lik)m (e)390 3545 y Fk(\("table")46 b(nil)g(\(t)i(ei)f(b)g(l\)\))390 3649 y(\("suspicious")d(nil)j(\(s)g(@)h(s)f(p)h(i)f(sh)g(@)h(s\)\))275 3790 y Fo(It)27 b(is)g(b)s(est)g(to)h(split)e(the)i(data)g(in)m(to)g(a) g(training)e(set)i(and)f(a)h(test)g(set)g(if)f(y)m(ou)h(wish)d(to)k (kno)m(w)e(ho)m(w)h(w)m(ell)150 3899 y(y)m(our)g(training)e(has)i(w)m (ork)m(ed.)41 b(In)27 b(our)g(tests)i(w)m(e)g(remo)m(v)m(e)g(ev)m(ery)g (ten)m(th)f(en)m(try)h(and)e(put)h(it)f(in)g(a)h(test)h(set.)150 4009 y(Note)g(this)e(will)e(mean)i(our)g(test)i(results)d(are)j (probably)c(b)s(etter)j(than)g(if)e(w)m(e)i(remo)m(v)m(ed)h(sa)m(y)f (the)g(last)g(ten)150 4119 y(in)h(ev)m(ery)i(h)m(undred.)275 4259 y(The)g(second)g(stage)i(is)e(to)h(de\014ne)f(the)h(set)g(of)g (allo)m(w)m(able)f(letter)h(to)g(phone)f(mappings)f(irresp)s(ectiv)m(e) 150 4369 y(of)e(con)m(text.)42 b(This)26 b(can)j(sometimes)f(b)s(e)f (initially)e(done)i(b)m(y)h(hand)f(then)h(c)m(hec)m(k)m(ed)i(against)e (the)h(training)150 4479 y(set.)41 b(Initially)28 b(constract)j(a)g (\014le)f(of)g(the)h(form)390 4614 y Fk(\(require)46 b('lts_build\))390 4717 y(\(set!)g(allowables)676 4821 y('\(\(a)h(_epsilon_\))772 4925 y(\(b)g(_epsilon_\))772 5029 y(\(c)g(_epsilon_\))772 5132 y(...)772 5236 y(\(y)g(_epsilon_\)) 772 5340 y(\(z)g(_epsilon_\))p eop %%Page: 55 57 55 56 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(55)772 299 y Fk(\(#)47 b(#\)\)\))275 434 y Fo(All)34 b(letters)h(that)h(app)s(ear)f(in)f(the)i(alphab)s(et)e(should)f(\(at)k (least\))f(map)f(to)h Fk(_epsilon_)p Fo(,)e(including)150 543 y(an)m(y)29 b(accen)m(ted)i(c)m(haracters)f(that)g(app)s(ear)e(in)f (that)j(language.)40 b(Note)30 b(the)f(last)g(t)m(w)m(o)h(hashes.)40 b(These)29 b(are)150 653 y(used)f(b)m(y)g(to)h(denote)g(b)s(eginning)d (and)h(end)h(of)h(w)m(ord)f(and)f(are)i(automatically)g(added)e(during) f(training,)150 762 y(they)31 b(m)m(ust)f(app)s(ear)g(in)f(the)h(list)f (and)h(should)e(only)i(map)g(to)h(themselv)m(es.)275 897 y(T)-8 b(o)30 b(incremen)m(tally)f(add)h(to)h(this)e(allo)m(w)m (able)h(list)f(run)g(festiv)-5 b(al)30 b(as)390 1026 y Fk(festival)46 b(allowables.scm)275 1160 y Fo(and)29 b(at)i(the)g(prompt)e(t)m(yp)s(e)390 1289 y Fk(festival>)45 b(\(cummulate-pairs)f("oald.train"\))275 1424 y Fo(with)29 b(y)m(our)h(train)g(\014le.)41 b(This)29 b(will)f(prin)m(t)h(out)i(eac) m(h)g(lexical)f(en)m(try)h(that)g(couldn't)f(b)s(e)g(aligned)f(with)150 1533 y(the)g(curren)m(t)g(set)g(of)g(allo)m(w)m(ables.)40 b(A)m(t)30 b(the)f(start)g(this)f(will)e(b)s(e)i(ev)m(ery)i(en)m(try)-8 b(.)41 b(Lo)s(oking)28 b(at)i(these)f(en)m(tries)150 1643 y(add)h(to)h(the)f(allo)m(w)m(ables)g(to)h(mak)m(e)h(alignmen)m(t) d(w)m(ork.)41 b(F)-8 b(or)31 b(example)f(if)g(the)g(follo)m(wing)f(w)m (ord)h(fails)390 1772 y Fk(\("abate")46 b(nil)g(\(ah)h(b)h(ey)f(t\)\)) 275 1906 y Fo(Add)28 b Fk(ah)h Fo(to)i(the)f(allo)m(w)m(ables)f(for)g (letter)h Fk(a)p Fo(,)g Fk(b)f Fo(to)i Fk(b)p Fo(,)f Fk(ey)f Fo(to)h Fk(a)g Fo(and)f Fk(t)g Fo(to)h(letter)g Fk(t)p Fo(.)41 b(After)30 b(doing)e(that)150 2016 y(restart)33 b(festiv)-5 b(al)31 b(and)h(call)g Fk(cummulate-pairs)c Fo(again.)47 b(Incremen)m(tally)31 b(add)h(to)h(the)f(allo)m(w)m(able)g (pairs)150 2126 y(un)m(til)27 b(the)h(n)m(um)m(b)s(er)f(of)i(failures)d (b)s(ecomes)i(accceptable.)42 b(Often)28 b(there)g(are)h(en)m(tries)f (for)g(whic)m(h)f(there)i(is)150 2235 y(no)f(real)g(relationship)d(b)s (et)m(w)m(een)k(the)f(letters)g(and)g(the)g(pron)m(unciation)e(suc)m(h) i(as)g(in)f(abbreviations)g(and)150 2345 y(foreign)h(w)m(ords)g(\(e.g.) 41 b Fk(")p Fo(aaa)p Fk(")29 b Fo(as)g Fk(")p Fo(t)f(r)g(ih)f(p)h(ax)h (l)f(ey)p Fk(")p Fo(\).)40 b(F)-8 b(or)29 b(the)g(lexicons)e(I'v)m(e)j (used)d(the)i(tec)m(hnique)f(on)150 2454 y(less)i(than)g(10)h(p)s(er)e (thousand)h(fail)f(in)g(this)g(w)m(a)m(y)-8 b(.)275 2589 y(It)41 b(is)f(w)m(orth)i(while)d(b)s(eing)h(consisten)m(t)i(on)f (de\014ning)f(y)m(our)h(set)h(of)g(allo)m(w)m(ables.)73 b(\(A)m(t)43 b(least\))f(t)m(w)m(o)150 2699 y(mappings)26 b(are)j(p)s(ossible)d(for)i(the)g(letter)g(sequence)h Fk(ch)p Fo(|ha)m(ving)e(letter)h Fk(c)g Fo(go)h(to)g(phone)f Fk(ch)f Fo(and)h(letter)150 2808 y Fk(h)23 b Fo(go)i(to)f Fk(_epsilon_)e Fo(and)h(also)g(letter)h Fk(c)g Fo(go)g(to)h(phone)e Fk(_epsilon_)e Fo(and)i(letter)h Fk(h)f Fo(go)s(es)i(to)f Fk(ch)p Fo(.)38 b(Ho)m(w)m(ev)m(er)150 2918 y(only)29 b(one)i(should)e(b)s(e)g(allo)m(w)m(ed,)i(w)m(e)g(preferred)e Fk(c)h Fo(to)h Fk(ch)p Fo(.)275 3052 y(It)c(ma)m(y)i(also)f(b)s(e)f (the)h(case)h(that)f(some)g(letters)g(giv)m(e)h(rise)d(to)j(more)f (than)f(one)i(phone.)39 b(F)-8 b(or)28 b(example)150 3162 y(the)40 b(letter)g Fk(x)f Fo(in)g(English)e(is)i(often)h(pron)m (unced)e(as)i(the)g(phone)f(com)m(bination)g Fk(k)h Fo(and)f Fk(s)p Fo(.)68 b(T)-8 b(o)40 b(allo)m(w)150 3272 y(this,)g(use)e(the)h (m)m(ultiphone)e Fk(k-s)p Fo(.)65 b(Th)m(us)38 b(the)h(m)m(ultiphone)d Fk(k-s)i Fo(will)e(b)s(e)i(predicted)g(for)h Fk(x)f Fo(in)g(some)150 3381 y(con)m(text)31 b(and)e(the)h(mo)s(del)e(will)f(separate)j(it)f (in)m(to)h(t)m(w)m(o)h(phones)d(while)g(it)h(also)g(ignoring)f(an)m(y)i (predicted)150 3491 y Fk(_epsilons_)p Fo(.)36 b(Note)28 b(that)e(m)m(ultiphone)e(units)h(are)h(relativ)m(ely)f(rare)h(but)g(do) g(o)s(ccur.)39 b(In)25 b(English,)g(letter)150 3600 y Fk(x)i Fo(giv)m(e)g(rise)f(to)i(a)g(few,)f Fk(k-s)f Fo(in)g Fk(taxi)p Fo(,)h Fk(g-s)f Fo(in)g Fk(example)p Fo(,)g(and)g(sometimes)h Fk(g-zh)f Fo(and)h Fk(k-sh)f Fo(in)f Fk(luxury)p Fo(.)150 3710 y(Others)g(are)g Fk(w-ah)f Fo(in)g Fk(one)p Fo(,)i Fk(t-s)e Fo(in)g Fk(pizza)p Fo(,)i Fk(y-uw)e Fo(in)g Fk(new)g Fo(\(British\),)h Fk(ah-m)g Fo(in)f Fk(-ism)g Fo(etc.)40 b(Three)25 b(phone)150 3820 y(m)m(ultiphone)33 b(are)j(m)m(uc)m(h)f(rarer)f(but)h(ma)m(y)h(exist,)g(they)f(are)h(not)f (supp)s(orted)e(b)m(y)i(this)f(co)s(de)i(as)f(is,)h(but)150 3929 y(suc)m(h)h(en)m(tries)h(should)d(probably)h(b)s(e)h(ignored.)62 b(Note)39 b(the)f Fk(-)f Fo(sign)g(in)f(the)i(m)m(ultiphone)e(examples) h(is)150 4039 y(signi\014can)m(t)29 b(and)h(is)g(used)f(to)i(inden)m (tify)e(m)m(ultiphones.)275 4173 y(The)g(allo)m(w)m(ables)h(for)g(O)m (ALD)h(end)f(up)f(b)s(eing)390 4302 y Fk(\(set!)46 b(allowables)724 4406 y(')676 4510 y(\(\(a)h(_epsilon_)f(ei)h(aa)g(a)g(e@)h(@)f(oo)g(au) g(o)h(i)f(ou)g(ai)h(uh)f(e\))724 4614 y(\(b)g(_epsilon_)f(b)h(\))724 4717 y(\(c)g(_epsilon_)f(k)h(s)g(ch)h(sh)f(@-k)g(s)g(t-s\))724 4821 y(\(d)g(_epsilon_)f(d)h(dh)g(t)h(jh\))724 4925 y(\(e)f(_epsilon_)f (@)h(ii)g(e)h(e@)f(i)g(@@)g(i@)h(uu)f(y-uu)f(ou)i(ei)f(aa)g(oi)g(y)h (y-u@)e(o\))724 5029 y(\(f)h(_epsilon_)f(f)h(v)g(\))724 5132 y(\(g)g(_epsilon_)f(g)h(jh)g(zh)g(th)h(f)f(ng)g(k)h(t\))724 5236 y(\(h)f(_epsilon_)f(h)h(@)g(\))724 5340 y(\(i)g(_epsilon_)f(i@)h (i)g(@)h(ii)f(ai)g(@@)g(y)h(ai-@)e(aa)h(a\))p eop %%Page: 56 58 56 57 bop 150 -116 a Fo(56)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)724 299 y Fk(\(j)47 b(_epsilon_)f(h)h(zh)g(jh)g(i)h(y)f(\))724 403 y(\(k)g(_epsilon_)f(k)h (ch)g(\))724 506 y(\(l)g(_epsilon_)f(l)h(@-l)g(l-l\))724 610 y(\(m)g(_epsilon_)f(m)h(@-m)g(n\))724 714 y(\(n)g(_epsilon_)f(n)h (ng)g(n-y)g(\))724 818 y(\(o)g(_epsilon_)f(@)h(ou)g(o)h(oo)f(uu)g(u)g (au)h(oi)f(i)g(@@)g(e)h(uh)f(w)h(u@)f(w-uh)f(y-@\))724 922 y(\(p)h(_epsilon_)f(f)h(p)g(v)h(\))724 1025 y(\(q)f(_epsilon_)f(k)h (\))724 1129 y(\(r)g(_epsilon_)f(r)h(@@)g(@-r\))724 1233 y(\(s)g(_epsilon_)f(z)h(s)g(sh)h(zh)f(\))724 1337 y(\(t)g(_epsilon_)f (t)h(th)g(sh)g(dh)h(ch)f(d)g(\))724 1440 y(\(u)g(_epsilon_)f(uu)h(@)g (w)h(@@)f(u)g(uh)g(y-uu)g(u@)g(y-u@)g(y-u)g(i)g(y-uh)g(y-@)g(e\))724 1544 y(\(v)g(_epsilon_)f(v)h(f)g(\))724 1648 y(\(w)g(_epsilon_)f(w)h (uu)g(v)h(f)f(u\))724 1752 y(\(x)g(_epsilon_)f(k-s)g(g-z)h(sh)h(z)f (k-sh)g(z)g(g-zh)g(\))724 1856 y(\(y)g(_epsilon_)f(i)h(ii)g(i@)g(ai)h (uh)f(y)g(@)h(ai-@\))724 1959 y(\(z)f(_epsilon_)f(z)h(t-s)g(s)g(zh)h (\))724 2063 y(\(#)f(#\))724 2167 y(\)\))275 2300 y Fo(Note)42 b(this)d(is)h(an)h(exhaustiv)m(e)g(list)e(and)h(\(delib)s(erately\))g (sa)m(ys)h(nothing)f(ab)s(out)g(the)h(con)m(texts)i(or)150 2409 y(frequency)g(that)g(these)h(letter)f(to)h(phone)f(pairs)e(app)s (ear.)79 b(That)43 b(information)e(will)f(b)s(e)j(generated)150 2519 y(automatically)30 b(from)g(the)h(training)d(set.)275 2652 y(Once)h(the)h(n)m(um)m(b)s(er)f(of)g(failed)g(matc)m(hes)i(is)d (sign\014can)m(tly)h(lo)m(w)h(enough)f(let)h Fk(cummulate-pairs)25 b Fo(run)150 2761 y(to)31 b(completion.)39 b(This)28 b(coun)m(ts)j(the)f(n)m(um)m(b)s(er)e(of)i(times)g(eac)m(h)h (letter/phone)f(pair)e(o)s(ccurs)i(in)e(allo)m(w)m(able)150 2871 y(alignmen)m(ts.)275 3003 y(Next)j(call)390 3130 y Fk(festival>)45 b(\(save-table)g("oald-"\))275 3263 y Fo(with)33 b(the)j(name)f(of)g(y)m(our)g(lexicon.)55 b(This)33 b(c)m(hanges)j(the)f(cumm)m(ulation)f(table)h(in)m(to)g (probabilities)150 3373 y(and)30 b(sa)m(v)m(es)i(it.)275 3505 y(Restart)f(festiv)-5 b(al)29 b(loading)h(this)f(new)h(table)390 3632 y Fk(festival)46 b(allowables.scm)d(oald-pl-table.scm)275 3765 y Fo(No)m(w)h(eac)m(h)h(w)m(ord)e(can)h(b)s(e)f(aligned)f(to)i(an) g(equally-lengthed)e(string)h(of)g(phones,)k(epsilon)42 b(and)150 3875 y(m)m(ultiphones.)390 4002 y Fk(festival>)j(\(aligndata) g("oald.train")g("oald.train.align"\))275 4134 y Fo(Do)31 b(this)e(also)h(for)g(y)m(ou)h(test)g(set.)275 4267 y(This)d(will)g (pro)s(duce)h(en)m(tries)h(lik)m(e)390 4394 y Fk(aaronson)46 b(_epsilon_)f(aa)i(r)g(ah)h(n)f(s)h(ah)f(n)390 4498 y(abandon)f(ah)h(b) g(ae)h(n)f(d)h(ah)f(n)390 4601 y(abate)f(ah)i(b)f(ey)g(t)h(_epsilon_) 390 4705 y(abbe)f(ae)g(b)g(_epsilon_)f(iy)275 4838 y Fo(The)28 b(next)h(stage)i(is)d(to)i(build)c(features)j(suitable)f(for) h(`)p Fk(wagon)p Fo(')f(to)i(build)c(mo)s(dels.)39 b(This)27 b(is)h(done)h(b)m(y)390 4965 y Fk(festival>)45 b(\(build-feat-file)f ("oald.train.align")e("oald.train.feats"\))275 5098 y Fo(Again)30 b(the)g(same)h(for)f(the)h(test)g(set.)275 5230 y(No)m(w)d(y)m(ou)h(need)e(to)i(constructrure)f(a)g(description)e (\014le)h(for)h(`)p Fk(wagon)p Fo(')f(for)h(the)g(giv)m(en)g(data.)41 b(The)28 b(can)150 5340 y(b)s(e)i(done)g(using)f(the)h(script)g(`)p Fk(make_wgn_desc)p Fo(')d(pro)m(vided)i(with)g(the)i(sp)s(eec)m(h)f(to) s(ols)p eop %%Page: 57 59 57 58 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(57)275 299 y(Here)35 b(is)f(an)h(example)f(script)g(for)h(building)c (the)k(mo)s(dels,)g(y)m(ou)g(will)d(need)j(to)h(mo)s(dify)d(it)h(for)h (y)m(our)150 408 y(particualr)29 b(database)i(but)f(it)g(sho)m(ws)g (the)g(basic)g(pro)s(cesses)390 551 y Fk(for)47 b(i)g(in)h(a)f(b)g(c)h (d)f(e)h(f)f(g)h(h)f(i)h(j)f(k)h(l)f(m)g(n)h(o)f(p)h(q)f(r)h(s)f(t)h(u) f(v)h(w)f(x)g(y)h(z)390 655 y(do)533 759 y(#)g(Stop)e(value)h(for)g (wagon)533 863 y(STOP=2)533 967 y(echo)g(letter)f($i)h(STOP)g($STOP)533 1070 y(#)h(Find)e(training)g(set)h(for)g(letter)f($i)533 1174 y(cat)h(oald.train.feats)c(|)581 1278 y(awk)k('{if)f(\($6)h(==)h ("'$i'"\))d(print)i($0}')f(>ltsdataTRAIN.$i.feats)533 1382 y(#)i(split)e(training)g(set)g(to)i(get)f(heldout)e(data)i(for)g (stepwise)e(testing)533 1485 y(traintest)g(ltsdataTRAIN.$i.feats)533 1589 y(#)j(Extract)d(test)i(data)g(for)g(letter)f($i)533 1693 y(cat)h(oald.test.feats)d(|)581 1797 y(awk)j('{if)f(\($6)h(==)h ("'$i'"\))d(print)i($0}')f(>ltsdataTEST.$i.feats)533 1901 y(#)i(run)f(wagon)f(to)h(predict)f(model)533 2004 y(wagon)h(-data)f(ltsdataTRAIN.$i.feats.tr)o(ain)41 b(-test)47 b(ltsdataTRAIN.$i.feats.t)o(est)41 b(\\)867 2108 y(-stepwise)46 b(-desc)g(ltsOALD.desc)e(-stop)j($STOP)f(-output)g(lts.$i.tree)533 2212 y(#)i(Test)e(the)h(resulting)e(tree)i(against)533 2316 y(wagon_test)e(-heap)i(2000000)e(-data)i(ltsdataTEST.$i.feats)42 b(-desc)k(ltsOALD.desc)f(\\)1058 2419 y(-tree)i(lts.$i.tree)390 2523 y(done)275 2672 y Fo(The)34 b(script)g(`)p Fk(traintest)p Fo(')e(splits)h(the)i(giv)m(en)g(\014le)f(`)p Fk(X)p Fo(')h(in)m(to)g(`)p Fk(X.train)p Fo(')e(and)h(`)p Fk(X.test)p Fo(')g(with)f(ev)m(ery)150 2782 y(ten)m(th)e(line)e(in)g(`)p Fk(X.test)p Fo(')g(and)h(the)g(rest)h(in)e(`)p Fk(X.train)p Fo('.)275 2930 y(This)g(script)h(can)i(tak)m(e)h(a)f(signi\014cnat)e (amoun)m(t)i(of)f(time)g(to)i(run,)d(ab)s(out)h(6)h(hours)e(on)i(a)f (Sun)f(Ultra)150 3040 y(140.)275 3189 y(Once)h(the)i(mo)s(dels)d(are)j (created)g(the)f(m)m(ust)g(b)s(e)f(collected)h(together)i(in)m(to)e(a)g (single)f(list)f(structure.)150 3298 y(The)j(trees)h(generated)h(b)m(y) e(`)p Fk(wagon)p Fo(')g(con)m(tain)h(fully)d(probabilit)m(y)g (distributions)f(at)k(eac)m(h)h(leaf,)g(at)f(this)150 3408 y(time)28 b(this)f(information)g(can)h(b)s(e)g(remo)m(v)m(ed)h(as) g(only)e(the)i(most)g(probable)e(will)e(actually)j(b)s(e)g(predicted.) 150 3518 y(This)h(substan)m(tially)f(reduces)i(the)g(size)h(of)f(the)h (tress.)390 3661 y Fk(\(merge_models)44 b('oald_lts_rules)g ("oald_lts_rules.scm"\))275 3809 y Fo(\()p Fk(merge_models)22 b Fo(is)j(de\014ned)f(within)g(`)p Fk(lts_build.scm)p Fo('\))f(The)i(giv)m(en)h(\014le)e(will)f(con)m(tain)j(a)h Fk(set!)d Fo(for)150 3919 y(the)33 b(giv)m(en)g(v)-5 b(ariable)32 b(name)i(to)f(an)g(asso)s(c)h(list)e(of)h(letter)g(to)h (trained)e(tree.)50 b(Note)35 b(the)e(ab)s(o)m(v)m(e)h(function)150 4029 y(naiv)m(ely)28 b(assumes)h(that)g(the)g(letters)g(in)f(the)h (alphab)s(et)e(are)j(the)f(26)g(lo)m(w)m(er)g(case)h(letters)f(of)g (the)g(English)150 4138 y(alphab)s(et,)35 b(y)m(ou)f(will)e(need)i(to)h (edit)f(this)f(adding)g(accen)m(ted)k(letters)d(if)g(required.)51 b(Note)35 b(that)g(adding)150 4248 y Fk(")p Fo(')p Fk(")i Fo(\(single)f(quote\))i(as)f(a)h(letter)f(is)f(a)i(little)e(tric)m(ky)h (in)f(sc)m(heme)i(but)e(can)i(b)s(e)e(done|the)h(command)150 4357 y Fk(\(intern)28 b("'"\))i Fo(will)d(giv)m(e)k(y)m(ou)g(the)f(sym) m(b)s(ol)g(for)g(single)f(quote.)275 4506 y(T)-8 b(o)28 b(test)i(a)f(set)g(of)f(lts)g(mo)s(dels)f(load)i(the)f(sa)m(v)m(ed)i (mo)s(del)d(and)h(call)g(the)g(follo)m(wing)f(function)h(with)f(the)150 4616 y(test)k(align)e(\014le)390 4759 y Fk(festival)46 b(oald-table.scm)d(oald_lts_rules.scm)390 4862 y(festival>)i (\(lts_testset)g("oald.test.align")e(oald_lts_rules\))275 5011 y Fo(The)26 b(result)g(\(after)h(sho)m(wing)f(all)g(the)h(failed)e (ones\),)j(will)d(b)s(e)h(a)h(table)g(sho)m(wing)f(the)h(results)e(for) i(eac)m(h)150 5121 y(letter,)f(for)f(all)e(letters)i(and)f(for)g (complete)h(w)m(ords.)38 b(The)24 b(failed)g(en)m(tries)g(ma)m(y)h(giv) m(e)g(some)g(notion)f(of)h(ho)m(w)150 5230 y(go)s(o)s(d)34 b(or)h(bad)f(the)g(result)g(is,)h(sometimes)f(it)g(will)e(b)s(e)i (simple)e(v)m(o)m(w)m(el)k(diferences,)f(long)f(v)m(ersus)g(short,)150 5340 y(sc)m(h)m(w)m(a)41 b(v)m(ersus)f(full)d(v)m(o)m(w)m(el,)44 b(other)c(times)f(it)h(ma)m(y)g(b)s(e)f(who)h(consonan)m(ts)g(missing.) 67 b(Remem)m(b)s(er)40 b(the)p eop %%Page: 58 60 58 59 bop 150 -116 a Fo(58)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(ultimate)i(qualit)m(y) f(of)i(the)g(letter)f(sound)g(rules)f(is)g(ho)m(w)i(adequate)g(they)g (are)g(at)g(pro)m(viding)d Fi(ac)-5 b(c)g(eptable)150 408 y Fo(pron)m(unciations)28 b(rather)j(than)f(ho)m(w)g(go)s(o)s(d)g (the)h(n)m(umeric)e(score)i(is.)275 550 y(F)-8 b(or)25 b(some)h(languages)f(\(e.g.)40 b(English\))23 b(it)i(is)f(necessary)h (to)h(also)e(\014nd)g(a)h(stree)h(pattern)f(for)f(unkno)m(wn)150 659 y(w)m(ords.)39 b(Ultimately)28 b(for)f(this)g(to)i(w)m(ork)f(w)m (ell)f(y)m(ou)i(need)e(to)i(kno)m(w)f(the)h(morphological)d(decomp)s (osition)150 769 y(of)34 b(the)g(w)m(ord.)50 b(A)m(t)35 b(presen)m(t)f(w)m(e)g(pro)m(vide)f(a)h(CAR)-8 b(T)34 b(trained)f(system)h(to)g(predict)f(stress)g(patterns)h(for)150 879 y(English.)56 b(If)35 b(do)s(es)h(get)i(94.6\045)f(correct)h(for)d (an)i(unseen)e(test)i(set)g(but)e(that)i(isn't)e(really)g(v)m(ery)i(go) s(o)s(d.)150 988 y(Later)25 b(tests)g(suggest)g(that)g(predicting)d (stressed)i(and)g(unstressed)f(phones)h(directly)f(is)g(actually)h(b)s (etter)150 1098 y(for)34 b(getting)h(whole)f(w)m(ords)f(correct)j(ev)m (en)f(though)f(the)g(mo)s(dels)f(do)h(sligh)m(tly)f(w)m(orse)i(on)f(a)g (p)s(er)g(phone)150 1207 y(basis)29 b Fj(blac)m(k98)p Fo(.)275 1349 y(As)36 b(the)h(lexicon)f(ma)m(y)h(b)s(e)f(a)g(large)h (part)g(of)f(the)h(system)g(w)m(e)g(ha)m(v)m(e)g(also)g(exp)s(erimen)m (ted)e(with)h(re-)150 1458 y(mo)m(ving)f(en)m(tries)g(from)g(the)h (lexicon)e(if)g(the)i(letter)g(to)g(sound)e(rules)g(system)h(\(and)g (stree)h(assignmen)m(t)150 1568 y(system\))k(can)h(correct)g(predict)e (them.)69 b(F)-8 b(or)41 b(O)m(ALD)g(this)e(allo)m(ws)g(us)g(to)i(half) e(the)h(size)g(of)g(the)g(lex-)150 1677 y(icon,)46 b(it)c(could)g(p)s (ossibly)e(allo)m(w)i(more)h(if)e(a)j(certain)e(amoun)m(t)h(of)g(fuzzy) g(acceptance)i(w)m(as)e(allo)m(w)m(ed)150 1787 y(\(e.g.)82 b(with)42 b(sc)m(h)m(w)m(a\).)82 b(F)-8 b(or)45 b(other)e(languages)h (the)g(gain)f(here)h(can)g(b)s(e)f(v)m(ery)h(signifcan)m(t,)i(for)d (Ger-)150 1897 y(man)37 b(and)g(F)-8 b(renc)m(h)39 b(w)m(e)f(can)g (reduce)f(the)h(lexicon)f(b)m(y)g(o)m(v)m(er)i(90\045.)63 b(The)37 b(function)g Fk(reduce_lexicon)150 2006 y Fo(in)e(`)p Fk(festival/lib/lts_build.scm)o Fo(')c(w)m(as)37 b(used)f(to)h(do)f (this.)58 b(A)37 b(diccussion)d(of)j(using)e(the)i(ab)s(o)m(v)m(e)150 2116 y(tec)m(hnique)i(as)h(a)g(dictionary)e(compression)g(metho)s(d)h (is)g(discussed)e(in)i Fj(pagel98)p Fo(.)69 b(A)39 b(morphological)150 2225 y(decomp)s(osition)29 b(algorithm,)h(lik)m(e)f(that)i(describ)s (ed)e(in)g Fj(blac)m(k91)p Fo(,)i(ma)m(y)g(ev)m(en)g(help)e(more.)275 2367 y(The)f(tec)m(hnique)g(describ)s(ed)f(in)h(this)g(section)h(and)f (its)g(relativ)m(e)h(merits)f(with)g(resp)s(ect)g(to)i(a)f(n)m(um)m(b)s (er)150 2476 y(of)i(languages/lexicons)f(and)g(tasks)g(is)g(dicussed)e (more)j(fully)d(in)h Fj(blac)m(k98)p Fo(.)150 2751 y Fn(13.6)68 b(Lexicon)45 b(requiremen)l(ts)275 2950 y Fo(F)-8 b(or)25 b(English)e(there)i(are)g(a)h(n)m(um)m(b)s(er)d(of)i (assumptions)f(made)h(ab)s(out)f(the)h(lexicon)f(whic)m(h)g(are)h(w)m (orth)m(y)150 3060 y(of)j(explicit)d(men)m(tion.)40 b(If)27 b(y)m(ou)h(are)f(basically)f(going)i(to)g(use)f(the)h(existing)e(tok)m (en)j(rules)d(y)m(ou)i(should)d(try)150 3169 y(to)31 b(include)d(at)j(least)g(the)g(follo)m(wing)d(in)h(an)m(y)i(lexicon)f (that)h(is)e(to)i(w)m(ork)g(with)e(them.)225 3311 y Fm(\017)60 b Fo(The)30 b(letters)g(of)h(the)f(alphab)s(et,)f(when)h(a)g(tok)m(en)i (is)d(iden)m(ti\014ed)f(as)j(an)f(acron)m(ym)h(it)e(is)h(sp)s(elled)d (out.)330 3420 y(The)i(tok)m(enization)g(assumes)g(that)h(the)f (individual)c(letters)k(of)g(the)g(alphab)s(et)f(are)i(in)d(the)j (lexicon)330 3530 y(with)g(their)h(pron)m(unciations.)41 b(They)31 b(should)f(b)s(e)g(iden)m(ti\014ed)g(as)i(nouns.)42 b(\(This)30 b(is)h(to)h(distinguish)330 3639 y Fk(a)k Fo(as)g(a)g(determiner)f(whic)m(h)g(can)h(b)s(e)g(sc)m(h)m(w)m(a'd)h (from)e Fk(a)h Fo(as)g(a)h(letter)f(whic)m(h)f(cannot.\))59 b(The)35 b(part)330 3749 y(of)d(sp)s(eec)m(h)g(should)d(b)s(e)i Fk(nn)g Fo(b)m(y)h(default,)f(but)g(the)h(v)-5 b(alue)31 b(of)h(the)g(v)-5 b(ariable)31 b Fk(token.letter_pos)c Fo(is)330 3859 y(used)j(and)f(ma)m(y)i(b)s(e)f(c)m(hanged)h(if)e(this)h (is)f(not)i(what)f(is)f(required.)225 3997 y Fm(\017)60 b Fo(One)22 b(c)m(haracter)i(sym)m(b)s(ols)d(suc)m(h)h(as)g(dollar,)h (at-sign,)h(p)s(ercen)m(t)f(etc.)39 b(Its)22 b(di\016cult)e(to)j(get)h (a)e(complete)330 4106 y(list)27 b(and)g(to)i(kno)m(w)f(what)g(the)g (pron)m(unciation)e(of)i(some)h(of)f(these)g(are)h(\(e.g)g(hash)e(or)h (p)s(ound)e(sign\).)330 4216 y(But)g(the)g(letter)g(to)g(sound)e(rules) g(cannot)j(deal)e(with)f(them)i(so)f(they)h(need)g(to)g(b)s(e)f (explicitly)e(listed.)330 4325 y(See)e(the)g(list)f(in)f(the)i (function)f Fk(mrpa_addend)d Fo(in)j(`)p Fk(festival/lib/dicts/oald/o)o (ald)o(lex.)o(scm)o Fo('.)330 4435 y(This)29 b(list)g(should)f(also)i (con)m(tain)h(the)g(con)m(trol)f(c)m(haracters)i(and)e(eigh)m(t)h(bit)e (c)m(haracters.)225 4573 y Fm(\017)60 b Fo(The)44 b(p)s(ossessiv)m(e)f Fk('s)h Fo(should)e(b)s(e)i(in)f(y)m(our)h(lexicon)g(as)g(sc)m(h)m(w)m (a)i(and)d(v)m(oiced)i(fricativ)m(e)f(\()p Fk(z)p Fo(\).)83 b(It)330 4682 y(should)38 b(b)s(e)h(in)g(t)m(wice,)k(once)e(as)f(part)g (sp)s(eec)m(h)f(t)m(yp)s(e)i Fk(pos)e Fo(and)g(once)i(as)f Fk(n)f Fo(\(used)h(in)e(plurals)g(of)330 4792 y(n)m(um)m(b)s(ers)30 b(acron)m(yms)i(etc.)45 b(e.g)32 b(1950's\).)46 b Fk('s)31 b Fo(is)f(treated)i(as)g(a)g(w)m(ord)f(and)g(is)f(separated)i(from)f (the)330 4902 y(tok)m(ens)39 b(it)e(app)s(ears)g(with.)61 b(The)37 b(p)s(ost-lexical)f(rule)h(\(the)h(function)e Fk(postlex_apos_s_check)p Fo(\))330 5011 y(will)28 b(delete)i(the)h(sc) m(h)m(w)m(a)h(and)e(dev)m(oice)h(the)g Fk(z)f Fo(in)f(appropriate)g (con)m(texts.)43 b(Note)32 b(this)d(p)s(ost-lexical)330 5121 y(rule)34 b(brazenly)g(assumes)g(that)i(the)f(un)m(v)m(oiced)g (fricativ)m(e)g(in)f(the)h(phoneset)g(is)f Fk(s)p Fo(.)54 b(If)34 b(it)h(is)f(not)h(in)330 5230 y(y)m(our)29 b(phoneset)g(cop)m (y)h(the)f(function)f(\(it)h(is)f(in)f(`)p Fk(festival/lib/postlex.scm) p Fo('\))d(and)k(c)m(hange)i(it)330 5340 y(for)g(y)m(our)g(phoneset)h (and)f(use)g(y)m(our)g(v)m(ersion)g(as)g(a)h(p)s(ost-lexical)e(rule.)p eop %%Page: 59 61 59 60 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(59)225 299 y Fm(\017)60 b Fo(Num)m(b)s(ers)34 b(as)h(digits)e(\(e.g.) 56 b Fk(")p Fo(1)p Fk(")p Fo(,)36 b Fk(")p Fo(2)p Fk(")p Fo(,)h Fk(")p Fo(34)p Fk(")p Fo(,)f(etc.\))56 b(should)33 b(normally)g Fi(not)44 b Fo(b)s(e)35 b(in)e(the)i(lexicon.)330 408 y(The)30 b(n)m(um)m(b)s(er)f(con)m(v)m(ersion)i(routines)f(con)m(v) m(ert)i(n)m(um)m(b)s(ers)d(to)j(w)m(ords)e(\(i.e.)41 b Fk(")p Fo(one)p Fk(")p Fo(,)31 b Fk(")p Fo(t)m(w)m(o)p Fk(")p Fo(,)h Fk(")p Fo(thirt)m(y)330 518 y(four)p Fk(")p Fo(,)e(etc.\).)225 658 y Fm(\017)60 b Fo(The)29 b(w)m(ord)f Fk(")p Fo(unkno)m(wn)p Fk(")f Fo(or)i(whatev)m(er)h(is)e(in)g(the)h(v) -5 b(ariable)28 b Fk(token.unknown_word_name)p Fo(.)34 b(This)330 768 y(is)k(used)h(in)e(a)j(few)f(obscure)g(cases)h(when)e (there)h(just)g(isn't)f(an)m(ything)g(that)i(can)g(b)s(e)e(said)g (\(e.g.)330 878 y(single)25 b(c)m(haracters)j(whic)m(h)d(aren't)i(in)e (the)i(lexicon\).)39 b(Some)27 b(p)s(eople)e(ha)m(v)m(e)j(suggested)f (it)f(should)f(b)s(e)330 987 y(p)s(ossible)f(to)j(mak)m(e)h(this)d(a)i (sound)e(rather)h(than)g(a)h(w)m(ord.)39 b(I)26 b(agree,)j(but)d(F)-8 b(estiv)j(al)26 b(do)s(esn't)h(supp)s(ort)330 1097 y(that)k(y)m(et.)150 1383 y Fn(13.7)68 b(Av)-7 b(ailable)46 b(lexicons)275 1587 y Fo(Curren)m(tly)21 b(F)-8 b(estiv)j(al)24 b(supp)s(orts)d(a)i(n) m(um)m(b)s(er)f(of)i(di\013eren)m(t)f(lexicons.)37 b(They)23 b(are)g(all)f(de\014ned)g(in)g(the)i(\014le)150 1697 y(`)p Fk(lib/lexicons.scm)p Fo(')h(eac)m(h)30 b(with)e(a)h(n)m(um)m(b)s (er)f(of)h(common)g(extra)h(w)m(ords)f(added)f(to)i(their)e(addendas.) 150 1807 y(They)i(are)150 1983 y(`)p Fk(CUVOALD)p Fo(')94 b(The)25 b(Computer)g(Users)g(V)-8 b(ersion)25 b(of)h(Oxford)e(Adv)-5 b(anced)26 b(Learner's)f(Dictionary)g(is)g(a)m(v)-5 b(ail-)630 2093 y(able)20 b(from)g(the)g(Oxford)f(T)-8 b(ext)21 b(Arc)m(hiv)m(e)g Fk(ftp://ota.ox.ac.uk/pub/o)o(ta/)o(publ)o(ic/d)o (ict)o(s/71)o(0)p Fo(.)630 2203 y(It)32 b(con)m(tains)g(ab)s(out)f (70,000)j(en)m(tries)d(and)g(is)g(a)h(part)g(of)f(the)h(BEEP)g (lexicon.)43 b(It)32 b(is)f(more)630 2312 y(consisten)m(t)46 b(in)f(its)h(marking)f(of)h(stress)g(though)f(its)h(syllable)e(marking) h(is)g(not)h(what)630 2422 y(w)m(orks)g(b)s(est)f(for)g(our)g(syn)m (thesis)g(metho)s(ds.)86 b(Man)m(y)46 b(syllabic)d(`)p Fk(l)p Fo(''s,)50 b(`)p Fk(n)p Fo(''s,)g(and)45 b(`)p Fk(m)p Fo(''s,)630 2531 y(mess)39 b(up)f(the)h(syllabi\014cation)d (algorithm,)41 b(making)d(results)g(sometimes)h(app)s(ear)g(o)m(v)m(er) 630 2641 y(reduced.)54 b(It)35 b(is)f(ho)m(w)m(ev)m(er)j(our)d(curren)m (t)h(default)f(lexicon.)54 b(It)35 b(is)f(also)h(the)h(only)e(lexicon) 630 2751 y(with)29 b(part)h(of)h(sp)s(eec)m(h)f(tags)i(that)f(can)f(b)s (e)g(distributed)d(\(for)k(non-commercial)f(use\).)150 2922 y(`)p Fk(CMU)p Fo(')286 b(This)39 b(is)h(automatically)g (constructed)h(from)g(`)p Fk(cmu_dict-0.4)p Fo(')c(a)m(v)-5 b(ailable)41 b(from)f(man)m(y)630 3031 y(places)h(on)h(the)g(net)f (\(see)i Fk(comp.speech)38 b Fo(arc)m(hiv)m(es\).)76 b(It)41 b(is)g(not)h(in)e(the)i(mrpa)f(phone)630 3141 y(set)g(b)s(ecause)g(it)f(is)g(American)g(English)e(pron)m(unciation.) 70 b(Although)39 b(mappings)g(exist)630 3250 y(b)s(et)m(w)m(een)27 b(its)f(phoneset)h(\(`)p Fk(darpa)p Fo('\))f(and)g(`)p Fk(mrpa)p Fo(')g(the)h(results)f(for)g(British)f(English)f(sp)s(eak-) 630 3360 y(ers)40 b(are)g(not)h(v)m(ery)f(go)s(o)s(d.)70 b(Ho)m(w)m(ev)m(er)42 b(this)d(is)g(probably)g(the)h(biggest,)j(most)d (carefully)630 3469 y(sp)s(eci\014ed)33 b(lexicon)i(a)m(v)-5 b(ailable.)54 b(It)35 b(con)m(tains)g(just)g(under)e(100,000)38 b(en)m(tries.)55 b(Our)34 b(distri-)630 3579 y(bution)e(has)h(b)s(een)f (mo)s(di\014ed)f(to)j(include)d(part)i(of)g(sp)s(eec)m(h)g(tags)i(on)e (w)m(ords)f(w)m(e)i(kno)m(w)f(to)630 3689 y(b)s(e)d(homographs.)150 3860 y(`)p Fk(mrpa)p Fo(')238 b(A)42 b(v)m(ersion)f(of)g(the)h(CSTR)e (lexicon)h(whic)m(h)f(has)h(b)s(een)g(\015oating)g(ab)s(out)h(for)f(y)m (ears.)75 b(It)630 3969 y(con)m(tains)32 b(ab)s(out)f(25,000)j(en)m (tries.)45 b(A)32 b(new)f(up)s(dated)f(free)i(v)m(ersion)f(of)h(this)e (is)h(due)g(to)i(b)s(e)630 4079 y(released)d(so)s(on.)150 4250 y(`)p Fk(BEEP)p Fo(')238 b(A)36 b(British)e(English)f(riv)-5 b(al)34 b(for)h(the)h(`)p Fk(cmu_lex)p Fo('.)55 b(BEEP)36 b(has)f(b)s(een)g(made)h(a)m(v)-5 b(ailable)35 b(b)m(y)630 4359 y(T)-8 b(on)m(y)40 b(Robinson)d(at)j(Cam)m(bridge)e(and)h(is)f(a)m (v)-5 b(ailable)38 b(in)g(man)m(y)h(arc)m(hiv)m(es.)68 b(It)39 b(con)m(tains)630 4469 y(163,000)j(en)m(tries)c(and)g(has)h(b)s (een)f(con)m(v)m(erted)i(to)g(the)f(`)p Fk(mrpa)p Fo(')f(phoneset)h (\(whic)m(h)e(w)m(as)j(a)630 4579 y(trivial)35 b(mapping\).)60 b(Although)37 b(large,)i(it)e(su\013ers)f(from)h(a)g(certain)h (randomness)e(in)g(its)630 4688 y(stress)30 b(markings,)g(making)f(use) h(of)h(it)f(for)g(syn)m(thesis)f(dubious.)275 4865 y(All)21 b(of)i(the)g(ab)s(o)m(v)m(e)h(lexicons)e(ha)m(v)m(e)j(some)e (distribution)c(restrictions)j(\(though)h(mostly)g(prett)m(y)g(ligh)m (t\),)150 4975 y(but)31 b(as)g(they)h(are)g(mostly)f(freely)g(a)m(v)-5 b(ailable)31 b(w)m(e)h(pro)m(vide)e(programs)h(that)h(can)g(con)m(v)m (ert)h(the)f(originals)150 5084 y(in)m(to)e(F)-8 b(estiv)j(al's)31 b(format.)275 5230 y(The)g(MOBY)i(lexicon)e(has)h(recen)m(tly)h(b)s (een)e(released)h(in)m(to)h(the)f(public)e(domain)h(and)g(will)f(b)s(e) h(con-)150 5340 y(v)m(erted)g(in)m(to)f(our)g(format)h(so)s(on.)p eop %%Page: 60 62 60 61 bop 150 -116 a Fo(60)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(13.8)68 b(P)l(ost-lexical)47 b(rules)275 499 y Fo(It)39 b(is)g(the)g(lexicon's) g(job)g(to)h(pro)s(duce)f(a)h(pron)m(unciation)d(of)j(a)g(giv)m(en)f(w) m(ord.)68 b(Ho)m(w)m(ev)m(er)41 b(in)e(most)150 609 y(languages)32 b(the)g(most)g(natural)e(pron)m(unciation)g(of)i(a)g(w)m(ord)f(cannot)h (b)s(e)f(found)f(in)g(isolation)h(from)g(the)150 718 y(con)m(text)39 b(in)e(whic)m(h)f(it)h(is)f(to)j(b)s(e)e(sp)s(ok)m(en.) 61 b(This)36 b(includes)f(suc)m(h)i(phenomena)g(as)h(reduction,)h (phrase)150 828 y(\014nal)29 b(dev)m(oicing)h(and)g(r-insertion.)39 b(In)29 b(F)-8 b(estiv)j(al)31 b(this)e(is)g(done)i(b)m(y)f(p)s (ost-lexical)f(rules.)275 970 y Fk(PostLex)j Fo(is)h(a)h(mo)s(dule)e (whic)m(h)h(is)g(run)g(after)h(accen)m(t)i(assignmen)m(t)e(but)g(b)s (efore)f(duration)g(and)g(F0)150 1079 y(generation.)54 b(This)33 b(is)h(b)s(ecause)g(kno)m(wledge)h(of)g(accen)m(t)h(p)s (osition)d(is)h(necessary)h(for)f(v)m(o)m(w)m(el)i(reduction)150 1189 y(and)30 b(other)g(p)s(ost)g(lexical)g(phenomena)f(and)h(c)m (hanging)h(the)f(segmen)m(tal)h(items)f(will)e(a\013ect)k(durations.) 275 1331 y(The)c Fk(PostLex)g Fo(\014rst)h(applies)e(a)j(set)g(of)g (built)d(in)h(rules)g(\(whic)m(h)h(could)f(b)s(e)h(done)g(in)g(Sc)m (heme)g(but)g(for)150 1441 y(historical)h(reasons)i(are)g(still)d(in)i (C)p Fk(++)p Fo(\).)44 b(It)32 b(then)f(applies)f(the)i(functions)e (set)i(in)f(the)h(ho)s(ok)f Fk(postlex_)150 1550 y(rules_hook)p Fo(.)49 b(These)34 b(should)e(b)s(e)i(a)g(set)h(of)f(functions)f(that)h (tak)m(e)i(an)e(utterance)h(and)e(apply)g(appro-)150 1660 y(priate)d(rules.)39 b(This)29 b(should)f(b)s(e)i(set)h(up)e(on)h (a)h(p)s(er)e(v)m(oice)j(basis.)275 1802 y(Although)f(a)i(rule)e (system)i(could)e(b)s(e)h(devised)f(for)h(p)s(ost-lexical)g(sound)f (rules)g(it)h(is)g(unclear)f(what)150 1912 y(the)26 b(scop)s(e)g(of)f (them)h(should)e(b)s(e,)i(so)g(w)m(e)g(ha)m(v)m(e)h(left)e(it)g (completely)h(op)s(en.)38 b(Our)25 b(v)m(o)m(w)m(el)i(reduction)d(mo)s (del)150 2021 y(uses)k(a)g(CAR)-8 b(T)28 b(decision)f(tree)h(to)h (predict)e(whic)m(h)g(syllables)f(should)g(b)s(e)h(reduced,)h(while)e (the)j Fk(")p Fo('s)p Fk(")e Fo(rule)150 2131 y(is)i(v)m(ery)i(simple)d (\(sho)m(wn)j(in)e(`)p Fk(festival/lib/postlex.scm)o Fo('\).)275 2273 y(The)j Fk('s)g Fo(in)f(English)g(ma)m(y)i(b)s(e)f (pronounced)g(in)f(a)j(n)m(um)m(b)s(er)d(of)i(di\013eren)m(t)f(w)m(a)m (ys)i(dep)s(ending)c(on)j(the)150 2382 y(preceding)d(con)m(text.)44 b(If)31 b(the)g(preceding)f(consonan)m(t)i(is)e(a)h(fricativ)m(e)g(or)g (a\013ricativ)m(e)g(and)g(not)g(a)g(palatal)150 2492 y(labio-den)m(tal)37 b(or)h(den)m(tal)f(a)h(sc)m(h)m(w)m(a)h(is)e (required)f(\(e.g.)64 b Fk(bench's)p Fo(\))36 b(otherwise)h(no)h(sc)m (h)m(w)m(a)h(is)e(required)150 2602 y(\(e.g.)k Fk(John's)p Fo(\).)d(Also)27 b(if)f(the)h(previous)f(phoneme)h(is)f(un)m(v)m(oiced) h(the)g Fk(")p Fo(s)p Fk(")f Fo(is)g(rendered)g(as)i(an)f Fk(")p Fo(s)p Fk(")f Fo(while)150 2711 y(in)j(all)g(other)i(cases)g(it) f(is)g(rendered)f(as)h(a)h Fk(")p Fo(z)p Fk(")p Fo(.)275 2853 y(F)-8 b(or)29 b(our)f(English)e(v)m(oices)k(w)m(e)f(ha)m(v)m(e)h (a)f(lexical)f(en)m(try)g(for)h Fk(")p Fo('s)p Fk(")f Fo(as)h(a)g(sc)m(h)m(w)m(a)h(follo)m(w)m(ed)e(b)m(y)h(a)g Fk(")p Fo(z)p Fk(")p Fo(.)40 b(W)-8 b(e)150 2963 y(use)38 b(a)h(p)s(ost)f(lexical)g(rule)f(function)g(called)h Fk(postlex_apos_s_check)33 b Fo(to)39 b(mo)s(dify)e(the)i(basic)f(giv)m (en)150 3072 y(form)33 b(when)f(required.)46 b(After)34 b(lexical)e(lo)s(okup)f(the)j(segmen)m(t)g(relation)e(con)m(tains)h (the)g(concatenation)150 3182 y(of)e(segmen)m(ts)g(directly)e(from)h (lo)s(okup)f(in)g(the)h(lexicon.)40 b(P)m(ost)32 b(lexical)d(rules)g (are)i(applied)d(after)j(that.)275 3324 y(In)i(the)h(follo)m(wing)e (rule)g(w)m(e)j(c)m(hec)m(k)g(eac)m(h)g(segmen)m(t)g(to)f(see)h(if)e (it)g(is)g(part)g(of)h(a)g(w)m(ord)g(lab)s(elled)d Fk(")p Fo('s)p Fk(")p Fo(,)150 3434 y(if)39 b(so)h(w)m(e)h(c)m(hec)m(k)g(to)g (see)g(if)e(are)h(w)m(e)h(curren)m(tly)e(lo)s(oking)f(at)j(the)f(sc)m (h)m(w)m(a)i(or)e(the)g(z)g(part,)j(and)c(test)i(if)150 3543 y(mo)s(di\014cation)29 b(is)g(required)390 3680 y Fk(\(define)46 b(\(postlex_apos_s_check)c(utt\))485 3783 y("\(postlex_apos_s_check)g(UTT\))390 3887 y(Deal)47 b(with)f(possesive)g(s)h(for)g(English)f(\(American)f(and)i(British\).) 93 b(Delete)390 3991 y(schwa)46 b(of)i('s)f(if)g(previous)e(is)j(not)f (a)g(fricative)e(or)i(affricative,)e(and)390 4095 y(change)h(voiced)g (to)h(unvoiced)f(s)h(if)h(previous)d(is)i(not)g(voiced.")485 4198 y(\(mapcar)533 4302 y(\(lambda)f(\(seg\))629 4406 y(\(if)h(\(string-equal)d("'s")i(\(item.feat)1774 4510 y(seg)h("R:SylStructure.parent.p)o(aren)o(t.na)o(me")o(\)\))820 4614 y(\(if)f(\(string-equal)f("a")i(\(item.feat)e(seg)h('ph_vlng\)\)) 1010 4717 y(\(if)h(\(and)g(\(member_string)d(\(item.feat)h(seg)i ('p.ph_ctype\))2156 4821 y('\(f)g(a\)\))1440 4925 y(\(not)g (\(member_string)1726 5029 y(\(item.feat)e(seg)i("p.ph_cplace"\))1726 5132 y('\(d)g(b)h(g\)\)\)\))1201 5236 y(t;;)f(don't)g(delete)f(schwa) 1201 5340 y(\(item.delete)f(seg\)\))p eop %%Page: 61 63 61 62 bop 150 -116 a Fo(Chapter)30 b(13:)41 b(Lexicons)2656 b(61)1010 299 y Fk(\(if)47 b(\(string-equal)e("-")h(\(item.feat)f(seg)i ("p.ph_cvox"\)\))1201 403 y(\(item.set_name)d(seg)j("s"\)\)\)\)\);;)e (from)i("z")533 506 y(\(utt.relation.items)c(utt)k('Segment\)\))485 610 y(utt\))p eop %%Page: 62 64 62 63 bop 150 -116 a Fo(62)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 63 65 63 64 bop 150 -116 a Fo(Chapter)30 b(14:)41 b(Utterances)2573 b(63)150 299 y Fl(14)80 b(Utterances)275 551 y Fo(The)37 b(utterance)i(structure)f(lies)e(at)j(the)f(heart)h(of)f(F)-8 b(estiv)j(al.)64 b(This)36 b(c)m(hapter)j(describ)s(es)d(its)i(basic) 150 661 y(form)30 b(and)g(the)g(functions)f(a)m(v)-5 b(ailable)30 b(to)h(manipulate)e(it.)150 933 y Fn(14.1)68 b(Utterance)47 b(structure)275 1132 y Fo(F)-8 b(estiv)j(al's)33 b(basic)g(ob)5 b(ject)35 b(for)e(syn)m(thesis)f(is)h(the)g Fi(utter)-5 b(anc)g(e)p Fo(.)52 b(An)33 b(represen)m(ts)g(some)h(c)m(h) m(unk)f(of)h(text)150 1241 y(that)d(is)e(to)i(b)s(e)f(rendered)f(as)i (sp)s(eec)m(h.)40 b(In)30 b(general)g(y)m(ou)h(ma)m(y)g(think)d(of)j (it)f(as)g(a)h(sen)m(tence)g(but)f(in)f(man)m(y)150 1351 y(cases)35 b(it)f(w)m(on)m(t)i(actually)e(conform)g(to)h(the)g (standard)f(linguistic)d(syn)m(tactic)36 b(form)e(of)g(a)h(sen)m (tence.)55 b(In)150 1460 y(general)30 b(the)f(pro)s(cess)g(of)h(text)h (to)f(sp)s(eec)m(h)g(is)e(to)i(tak)m(e)i(an)d(utterance)h(whic)m(h)f (con)m(taisn)h(a)f(simple)f(string)150 1570 y(of)42 b(c)m(haracters)i (and)e(con)m(v)m(ert)i(it)d(step)i(b)m(y)f(step,)j(\014lling)40 b(out)i(the)h(utterance)g(structure)f(with)f(more)150 1679 y(information)29 b(un)m(til)f(a)j(w)m(a)m(v)m(eform)h(is)d(built)f (that)j(sa)m(ys)g(what)g(the)f(text)i(con)m(tains.)275 1820 y(The)d(pro)s(cesses)i(in)m(v)m(olv)m(ed)f(in)f(con)m(v)m(ertion)i (are,)g(in)e(general,)i(as)f(follo)m(ws)150 1988 y Fi(T)-7 b(okenization)630 2098 y Fo(Con)m(v)m(erting)33 b(the)h(string)e(of)h (c)m(haracters)i(in)m(to)e(a)h(list)e(of)h(tok)m(ens.)50 b(T)m(ypically)32 b(this)g(means)630 2208 y(whitespace)e(separated)h (tok)m(esn)g(of)g(the)f(original)f(text)i(string.)150 2373 y Fi(T)-7 b(oken)33 b(identi\014c)-5 b(ation)630 2483 y Fo(iden)m(ti\014cation)27 b(of)i(general)g(t)m(yp)s(es)g(for)g (the)g(tok)m(ens,)h(usually)d(this)g(is)h(trivial)f(but)h(requires)630 2592 y(some)j(w)m(ork)f(to)h(iden)m(tify)e(tok)m(ens)j(of)e(digits)f (as)i(y)m(ears,)g(dates,)g(n)m(um)m(b)s(ers)e(etc.)150 2758 y Fi(T)-7 b(oken)33 b(to)g(wor)-5 b(d)630 2867 y Fo(Con)m(v)m(ert)31 b(eac)m(h)g(tok)m(ens)g(to)f(zero)h(or)f(more)g(w)m (ords,)f(expanding)g(n)m(um)m(b)s(ers,)f(abbreviations)630 2977 y(etc.)150 3142 y Fi(Part)33 b(of)g(sp)-5 b(e)g(e)g(ch)630 3252 y Fo(Iden)m(tify)29 b(the)i(syn)m(tactic)g(part)g(of)f(sp)s(eec)m (h)g(for)h(the)f(w)m(ords.)150 3417 y Fi(Pr)-5 b(oso)g(dic)34 b(phr)-5 b(asing)630 3527 y Fo(Ch)m(unk)29 b(utterance)i(in)m(to)g (proso)s(dic)d(phrases.)150 3692 y Fi(L)-5 b(exic)g(al)34 b(lo)-5 b(okup)630 3802 y Fo(Find)27 b(the)i(pron)m(ucnation)f(of)g (eac)m(h)i(w)m(ord)f(from)f(a)h(lexicon/letter)g(to)g(sound)e(rule)h (system)630 3911 y(including)f(phonetic)j(and)f(syllable)g(structure.) 150 4077 y Fi(Intonational)35 b(ac)-5 b(c)g(ents)630 4186 y Fo(Assign)29 b(in)m(tonation)h(accen)m(ts)i(to)g(approrpiate)d (syllables.)150 4352 y Fi(Assign)j(dur)-5 b(ation)630 4461 y Fo(Assign)29 b(duration)g(to)i(eac)m(h)h(phone)e(in)f(the)h (utterance.)150 4627 y Fi(Gener)-5 b(ate)34 b(F0)f(c)-5 b(ontour)34 b(\(tune\))630 4736 y Fo(Generate)e(tune)e(based)g(on)g (accen)m(ts)i(etc.)150 4902 y Fi(R)-5 b(ender)34 b(waveform)630 5011 y Fo(Render)h(w)m(a)m(v)m(eform)h(from)f(phones,)h(duration)e(and) g(F\))i(target)h(v)-5 b(alues,)36 b(this)e(itself)g(ma)m(y)630 5121 y(tak)m(e)46 b(sev)m(eral)f(steps)g(including)c(unit)i(selection)h (\(b)s(e)h(they)g(diphones)d(or)j(other)g(sized)630 5230 y(units\),)31 b(imp)s(osition)e(of)j(dsesired)e(proso)s(dy)g (\(duration)h(and)g(F0\))i(and)e(w)m(a)m(v)m(eform)i(recon-)630 5340 y(struction.)p eop %%Page: 64 66 64 65 bop 150 -116 a Fo(64)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(The)41 b(n)m(um)m(b)s(er)f(of)i(steps)g(and)f(what)h(actually)f(happ)s(ens)f (ma)m(y)j(v)-5 b(ary)41 b(and)g(is)g(dep)s(enden)m(t)g(on)h(the)150 408 y(particular)29 b(v)m(oice)i(selected)g(and)f(the)g(utterance's)i Fi(typ)-5 b(e)p Fo(,)31 b(see)g(b)s(elo)m(w.)275 547 y(Eac)m(h)42 b(of)h(these)f(steps)g(in)f(F)-8 b(estiv)j(al)43 b(is)e(ac)m(hiv)m(ed)h(b)m(y)g(a)h Fi(mo)-5 b(dule)50 b Fo(whic)m(h)41 b(will)f(t)m(ypically)h(add)g(new)150 657 y(information)29 b(to)i(the)f(utterance)i(structure.)275 795 y(An)27 b(utterance)i(structure)e(consists)h(of)g(a)g(set)h(of)f Fi(items)36 b Fo(whic)m(h)26 b(ma)m(y)j(b)s(e)e(part)h(of)g(one)g(or)g (more)g Fi(r)-5 b(ela-)150 905 y(tions)p Fo(.)42 b(Items)30 b(represen)m(t)h(things)e(lik)m(e)g(w)m(ords)h(and)g(phones,)g(though)g (ma)m(y)h(also)f(b)s(e)g(used)g(to)h(represen)m(t)150 1014 y(less)d(concrete)i(ob)5 b(jects)29 b(lik)m(e)f(noun)f(phrases,)h (and)g(no)s(des)g(in)f(metrical)h(trees.)41 b(An)28 b(item)g(con)m (tains)h(a)f(set)150 1124 y(of)g(features,)g(\(name)g(and)f(v)-5 b(alue\).)39 b(Relations)27 b(are)h(t)m(ypically)e(simple)f(lists)h(of) h(items)g(or)h(trees)g(of)f(items.)150 1233 y(F)-8 b(or)27 b(example)f(the)h(the)f Fk(Word)f Fo(relation)h(is)f(a)i(simple)d(list) h(of)h(items)g(eac)m(h)i(of)e(whic)m(h)f(represen)m(t)i(a)f(w)m(ord)g (in)150 1343 y(the)i(utternace.)40 b(Those)28 b(w)m(ords)f(will)d(also) k(b)s(e)f(in)f(other)h(relations,)h(suc)m(h)f(as)h(the)f Fi(SylStructur)-5 b(e)36 b Fo(relation)150 1453 y(where)30 b(the)g(w)m(ord)g(will)e(b)s(e)i(the)g(top)h(of)g(a)f(tree)h(structure) f(con)m(taining)g(its)g(syllables)e(and)i(segmen)m(ts.)275 1591 y(Unlik)m(e)i(previous)g(v)m(ersions)g(of)i(the)f(system)h(items)f (\(then)g(called)f(stream)i(items\))f(are)h(not)g(in)e(an)m(y)150 1701 y(particular)41 b(relations)h(\(or)h(stream\).)79 b(And)42 b(are)h(merely)f(part)h(of)g(the)g(relations)f(they)h(are)g (within.)150 1810 y(Imp)s(ortan)m(tly)23 b(this)g(allo)m(ws)g(m)m(uc)m (h)h(more)g(general)g(relations)f(to)h(b)s(e)g(made)g(o)m(v)m(er)h (items)e(that)i(w)m(as)f(allo)m(w)m(ed)150 1920 y(in)31 b(the)i(previous)e(system.)47 b(This)30 b(new)i(arc)m(hitecture)h(is)f (the)h(con)m(tin)m(uation)f(of)g(our)g(goal)h(of)g(pro)m(viding)150 2029 y(a)e(general)f(e\016cien)m(t)h(structure)f(for)g(represen)m(ting) g(complex)g(in)m(terrelated)g(utterance)h(ob)5 b(jects.)275 2168 y(The)39 b(arc)m(hitecture)i(is)f(fully)e(general)i(and)g(new)g (items)f(and)h(relations)g(ma)m(y)h(b)s(e)e(de\014ned)g(at)i(run)150 2277 y(time,)25 b(suc)m(h)f(that)h(new)f(mo)s(dules)e(ma)m(y)j(use)f (an)m(y)h(relations)e(they)h(wish.)37 b(Ho)m(w)m(ev)m(er)26 b(within)c(our)i(standard)150 2387 y(English)k(\(and)i(other)h(v)m (oices\))g(w)m(e)g(ha)m(v)m(e)h(used)d(a)i(sp)s(eci\014c)e(set)i(of)g (relations)e(ass)i(follo)m(ws.)150 2552 y Fi(T)-7 b(oken)241 b Fo(a)32 b(list)e(of)i(trees.)45 b(This)30 b(is)h(\014rst)f(formed)i (as)f(a)h(list)f(of)g(tok)m(ens)i(found)d(in)h(a)h(c)m(haracter)h(text) 630 2662 y(string.)40 b(Eac)m(h)31 b(ro)s(ot's)g(daugh)m(ters)f(are)h (the)f Fi(Wor)-5 b(d)9 b Fo('s)32 b(that)f(the)g(tok)m(en)h(is)d (related)h(to.)150 2825 y Fi(Wor)-5 b(d)264 b Fo(a)36 b(list)d(of)j(w)m(ords.)55 b(These)34 b(items)h(will)e(also)i(app)s (ear)g(as)g(daugh)m(ters)g(\(leaf)h(no)s(des\))e(of)i(the)630 2935 y Fk(Token)d Fo(relation.)51 b(They)34 b(ma)m(y)h(also)f(app)s (ear)f(in)g(the)i Fk(Syntax)d Fo(relation)i(\(as)g(leafs\))h(if)e(the) 630 3045 y(parser)d(is)f(used.)40 b(They)30 b(will)e(also)i(b)s(e)g (leafs)g(of)g(the)h Fk(Phrase)e Fo(relation.)150 3208 y Fi(Phr)-5 b(ase)214 b Fo(a)37 b(list)e(of)i(trees.)60 b(This)35 b(is)g(a)i(list)e(of)i(phrase)f(ro)s(ots)h(whose)f(daugh)m (ters)h(are)g(the)g Fk(Word's)630 3318 y Fo(within)28 b(those)j(phrases.)150 3481 y Fi(Syntax)216 b Fo(a)39 b(single)e(tree.)66 b(This,)39 b(if)e(the)i(probabilistic)c(parser)i (is)h(called,)i(is)d(a)i(syn)m(tactic)h(binary)630 3591 y(branc)m(hing)29 b(tree)i(o)m(v)m(er)h(the)e(mem)m(b)s(ers)g(of)g(the) h Fk(Word)e Fo(relation.)150 3754 y Fi(SylStructur)-5 b(e)630 3864 y Fo(a)40 b(list)f(of)h(trees.)70 b(This)38 b(links)g(the)i Fk(Word)p Fo(,)i Fk(Syllable)37 b Fo(and)j Fk(Segment)e Fo(relations.)68 b(Eac)m(h)630 3973 y Fk(Word)26 b Fo(is)h(the)h(ro)s(ot)g(of)f(a)h(tree)g(whose)g(immediate)e(daugh)m (ters)i(are)g(its)f(syllables)e(and)i(their)630 4083 y(daugh)m(ters)j(in)f(turn)h(as)g(its)g(segmen)m(ts.)150 4246 y Fi(Syl)5 b(lable)181 b Fo(a)35 b(list)f(of)h(syllables.)52 b(Eac)m(h)36 b(mem)m(b)s(er)e(will)e(also)j(b)s(e)g(in)e(a)j(the)f Fk(SylStructure)c Fo(relation.)630 4356 y(In)c(that)h(relation)f(its)g (paren)m(t)h(will)e(b)s(e)h(the)h(w)m(ord)f(it)g(is)g(in)f(and)i(its)f (daugh)m(ters)h(will)d(b)s(e)i(the)630 4465 y(segmen)m(ts)38 b(that)g(are)g(in)e(it.)61 b(Syllables)35 b(are)i(also)h(in)e(the)h Fk(Intonation)e Fo(relation)h(giving)630 4575 y(links)28 b(to)j(their)f(related)g(in)m(tonation)g(ev)m(en)m(ts.)150 4738 y Fi(Se)-5 b(gment)153 b Fo(a)26 b(list)e(of)i(segmen)m(ts)g (\(phones\).)39 b(Eac)m(h)27 b(mem)m(b)s(er)e(\(except)h(silences\))f (will)e(b)s(e)i(leaf)g(no)s(des)g(in)630 4848 y(the)34 b Fk(SylStructure)c Fo(relation.)50 b(These)33 b(ma)m(y)h(also)g(b)s(e) f(in)f(the)i Fk(Target)e Fo(relation)h(linking)630 4957 y(them)d(to)h(F0)h(target)f(p)s(oin)m(ts.)150 5121 y Fi(IntEvent)137 b Fo(a)22 b(list)f(of)h(in)m(tonation)f(ev)m(en)m(ts)i (\(accen)m(ts)h(and)e(b)s(ounaries\).)36 b(These)22 b(are)g(related)g (to)g(syllables)630 5230 y(through)k(the)h Fk(Intonation)d Fo(relation)j(as)g(leafs)f(on)h(that)h(relation.)38 b(Th)m(us)26 b(their)g(paren)m(t)h(in)630 5340 y(the)k Fk(Intonation)c Fo(relation)j(is)f(the)i(syllable)d(these)j(ev)m(en)m(ts)h(are)e(attac) m(hed)j(to.)p eop %%Page: 65 67 65 66 bop 150 -116 a Fo(Chapter)30 b(14:)41 b(Utterances)2573 b(65)150 299 y Fi(Intonation)630 408 y Fo(a)44 b(list)e(of)i(trees)h (relating)e(syllables)e(to)k(in)m(tonation)e(ev)m(en)m(ts.)82 b(Ro)s(ots)44 b(of)g(the)g(trees)g(in)630 518 y Fk(Intonation)28 b Fo(are)i Fk(Syllables)e Fo(and)i(their)f(daugh)m(ters)i(are)g Fk(IntEvents)p Fo(.)150 685 y Fi(Wave)259 b Fo(a)27 b(single)e(item)h (with)f(a)i(feature)g(called)f Fk(wave)f Fo(whose)i(v)-5 b(alue)26 b(is)f(the)i(generated)g(w)m(a)m(v)m(eform.)275 856 y(This)22 b(is)i(a)h(non-exhaustiv)m(e)g(list)e(some)i(mo)s(dules)e (ma)m(y)j(add)e(other)h(relations)e(and)h(not)h(all)f(utterance)150 965 y(ma)m(y)31 b(ha)m(v)m(e)h(all)d(these)i(relations,)e(but)h(the)h (ab)s(o)m(v)m(e)g(is)f(the)g(general)h(case.)150 1241 y Fn(14.2)68 b(Utterance)47 b(t)l(yp)t(es)275 1442 y Fo(The)37 b(primary)e(purp)s(ose)h(of)i(t)m(yp)s(es)g(is)f(to)h (de\014ne)f(whic)m(h)f(mo)s(dules)g(are)i(to)g(b)s(e)f(applied)f(to)i (an)g(ut-)150 1551 y(terance.)46 b Fk(UttTypes)29 b Fo(are)j(de\014ned) f(in)f(`)p Fk(lib/synthesis.scm)p Fo('.)40 b(The)32 b(function)e Fk(defUttType)f Fo(de\014nes)150 1661 y(whic)m(h)i(mo)s(dules)f(are)j (to)g(b)s(e)f(applied)e(to)j(an)f(utterance)h(of)g(that)g(t)m(yp)s(e.) 46 b(The)32 b(function)f Fk(utt.synth)f Fo(is)150 1770 y(called)g(applies)e(this)h(list)g(of)i(mo)s(dule)e(to)i(an)f (utterance)h(b)s(efore)f(w)m(a)m(v)m(eform)i(syn)m(thesis)d(is)h (called.)275 1912 y(F)-8 b(or)28 b(example)g(when)f(a)h Fk(Segment)e Fo(t)m(yp)s(e)i(Utterance)h(is)e(syn)m(thesized)g(it)h (needs)f(only)g(ha)m(v)m(e)i(its)f(v)-5 b(alues)150 2022 y(loaded)25 b(in)m(to)g(a)h Fk(Segment)d Fo(relation)h(and)h(a)h Fk(Target)d Fo(relation,)j(then)f(the)g(lo)m(w)g(lev)m(el)g(w)m(a)m(v)m (eform)i(syn)m(thesis)150 2132 y(mo)s(dule)i Fk(Wave_Synth)e Fo(is)j(called.)40 b(This)28 b(is)i(de\014ned)f(as)h(follo)m(ws)390 2268 y Fk(\(defUttType)45 b(Segments)485 2372 y(\(Initialize)g(utt\)) 485 2475 y(\(Wave_Synth)g(utt\)\))275 2617 y Fo(A)32 b(more)h(complex)f(t)m(yp)s(e)h(is)e Fk(Text)g Fo(t)m(yp)s(e)i (utterance)g(whic)m(h)f(requires)f(man)m(y)h(more)h(mo)s(dules)d(to)k (b)s(e)150 2727 y(called)c(b)s(efore)g(a)g(w)m(a)m(v)m(eform)i(can)f(b) s(e)f(syn)m(thesized)390 2863 y Fk(\(defUttType)45 b(Text)485 2967 y(\(Initialize)g(utt\))485 3071 y(\(Text)i(utt\))485 3175 y(\(Token)g(utt\))485 3278 y(\(POS)g(utt\))485 3382 y(\(Phrasify)f(utt\))485 3486 y(\(Word)h(utt\))485 3590 y(\(Intonation)e(utt\))485 3693 y(\(Duration)h(utt\))485 3797 y(\(Int_Targets)f(utt\))485 3901 y(\(Wave_Synth)g(utt\))390 4005 y(\))275 4147 y Fo(The)30 b Fk(Initialize)e Fo(mo)s(dule)h(should) g(normally)g(b)s(e)h(called)g(for)h(all)f(t)m(yp)s(es.)42 b(It)31 b(loads)f(the)i(necessary)150 4256 y(relations)22 b(from)g(the)g(input)f(form)h(and)g(deletes)h(all)e(other)i(relations)f (\(if)f(an)m(y)i(exist\))g(ready)f(for)h(syn)m(thesis.)275 4398 y(Mo)s(dules)29 b(ma)m(y)i(b)s(e)e(directly)g(de\014ned)g(as)i (C/C)p Fk(++)f Fo(functions)e(and)i(declared)g(with)f(a)i(Lisp)e(name)h (or)150 4508 y(simple)f(functions)g(in)g(Lisp)g(that)j(c)m(hec)m(k)g (some)f(global)f(parameter)h(b)s(efore)g(calling)e(a)i(sp)s(eci\014c)f (mo)s(dule)150 4618 y(\(e.g.)42 b(c)m(ho)s(osing)30 b(b)s(et)m(w)m(een) h(di\013eren)m(t)f(in)m(tonation)g(mo)s(dules\).)275 4760 y(These)f(t)m(yp)s(es)g(are)h(used)e(when)h(calling)f(the)h (function)f Fk(utt.synth)f Fo(and)i(individual)c(mo)s(dules)i(ma)m(y) 150 4869 y(b)s(e)j(called)f(explicitly)f(b)m(y)j(hand)e(if)g(required.) 275 5011 y(Because)35 b(w)m(e)g(exp)s(ect)h(w)m(a)m(v)m(eform)g(syn)m (thesis)d(metho)s(ds)h(to)h(themselv)m(es)g(b)s(ecome)g(complex)f(with) g(a)150 5121 y(de\014ned)26 b(set)i(of)f(functions)f(to)i(select,)g (join,)f(and)g(mo)s(dify)e(units)h(w)m(e)h(no)m(w)h(supp)s(ort)d(an)i (addition)e(notion)150 5230 y(of)h Fk(SynthTypes)c Fo(lik)m(e)j Fk(UttTypes)f Fo(these)h(de\014ne)g(a)h(set)g(of)g(functions)e(to)i (apply)e(to)j(an)e(utterance.)40 b(These)150 5340 y(ma)m(y)31 b(b)s(e)f(de\014ned)f(using)g(the)h Fk(defSynthType)d Fo(function.)40 b(F)-8 b(or)31 b(example)p eop %%Page: 66 68 66 67 bop 150 -116 a Fo(66)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(defSynthType)44 b(Festival)485 403 y(\(print)j("synth)f(method)g(Festival"\))485 610 y(\(print)h("select"\))485 714 y(\(simple_diphone_select)42 b(utt\))485 922 y(\(print)47 b("join"\))485 1025 y(\(cut_unit_join)d (utt\))485 1233 y(\(print)j("impose"\))485 1337 y(\(simple_impose)d (utt\))485 1440 y(\(simple_power)h(utt\))485 1648 y(\(print)i ("synthesis"\))485 1752 y(\(frames_lpc_synthesis)42 b(utt\))485 1856 y(\))275 1988 y Fo(A)30 b Fk(SynthType)e Fo(is)h(selected)i(b)m(y) f(naming)g(as)g(the)h(v)-5 b(alue)30 b(of)g(the)h(parameter)g Fk(Synth_Method)p Fo(.)275 2120 y(Duration)d(the)g(application)f(of)i (the)g(function)e Fk(utt.synth)f Fo(there)j(are)g(three)g(ho)s(oks)f (applied.)38 b(This)150 2229 y(allo)m(ws)25 b(addition)f(con)m(trol)j (of)f(the)g(syn)m(thesis)f(pro)s(cess.)39 b Fk(before_synth_hooks)20 b Fo(is)25 b(applied)f(b)s(efore)i(an)m(y)150 2339 y(mo)s(dules)32 b(are)h(applied.)48 b Fk(after_analysis_hooks)28 b Fo(is)33 b(applied)e(at)j(the)g(start)g(of)f Fk(Wave_Synth)e Fo(when)150 2449 y(all)e(text,)i(linguistic)c(and)i(proso)s(dic)g(pro)s(cessing)f (ha)m(v)m(e)j(b)s(een)f(done.)40 b Fk(after_synth_hooks)25 b Fo(is)k(applied)150 2558 y(after)c(all)f(mo)s(dules)f(ha)m(v)m(e)j(b) s(een)e(applied.)37 b(These)25 b(are)g(useful)e(for)h(things)g(suc)m(h) h(as,)h(altering)e(the)h(v)m(olume)150 2668 y(of)j(a)g(v)m(oice)h(that) f(happ)s(ens)e(to)i(b)s(e)g(quieter)f(than)g(others,)i(or)f(for)f (example)h(outputing)e(information)g(for)150 2777 y(a)f(talking)f(head) g(b)s(efore)h(w)m(a)m(v)m(eform)h(syn)m(thesis)e(o)s(ccurs)g(so)h (preparation)f(of)h(the)g(facial)f(frames)g(and)g(syn-)150 2887 y(thesizing)33 b(the)h(w)m(a)m(v)m(eform)h(ma)m(y)f(b)s(e)f(done)h (in)f(parallel.)49 b(\(see)34 b(`)p Fk(festival/examples/th-mode.s)o (cm)p Fo(')150 2997 y(for)c(an)g(example)g(use)h(of)f(these)h(ho)s(oks) f(for)g(a)h(talking)e(head)i(text)g(mo)s(de.\))150 3247 y Fn(14.3)68 b(Example)46 b(utterance)g(t)l(yp)t(es)275 3437 y Fo(A)35 b(n)m(um)m(b)s(er)g(of)h(utterance)g(t)m(yp)s(es)g(are)g (curren)m(tly)f(supp)s(orted.)54 b(It)36 b(is)f(easy)h(to)h(add)e(new)g (ones)h(but)150 3547 y(the)31 b(standard)e(distribution)e(includes)h (the)i(follo)m(wing.)150 3702 y Fk(Text)288 b Fo(Ra)m(w)31 b(text)g(as)g(a)g(string.)870 3828 y Fk(\(Utterance)45 b(Text)i("This)f(is)h(an)g(example"\))150 3983 y(Words)240 b Fo(A)30 b(list)g(of)g(w)m(ords)870 4109 y Fk(\(Utterance)45 b(Words)h(\(this)h(is)g(an)g(example\)\))630 4241 y Fo(W)-8 b(ords)44 b(ma)m(y)h(b)s(e)e(atomic)i(or)f(lists)f(if)g(further)g (features)h(need)g(to)h(b)s(e)e(sp)s(eci\014ed.)80 b(F)-8 b(or)630 4351 y(example)30 b(to)h(sp)s(ecify)e(a)i(w)m(ord)f(and)g(its) f(part)i(of)f(sp)s(eec)m(h)h(y)m(ou)f(can)h(use)870 4477 y Fk(\(Utterance)45 b(Words)h(\(I)i(\(live)e(\(pos)h(v\)\))f(in)i (\(Reading)d(\(pos)i(n\))g(\(tone)f(H-H\045\)\)\)\))630 4610 y Fo(Note:)41 b(the)29 b(use)f(of)h(the)g(tone)g(feature)g (requires)e(an)i(in)m(tonation)f(mo)s(de)g(that)h(supp)s(orts)e(it.)630 4742 y(An)m(y)j(feature)h(and)f(v)-5 b(alue)30 b(named)g(in)f(the)h (input)f(will)f(b)s(e)h(added)h(to)h(the)g(W)-8 b(ord)30 b(item.)150 4896 y Fk(Phrase)192 b Fo(This)25 b(allo)m(ws)i(explicit)f (phrasing)f(and)i(features)g(on)g(T)-8 b(ok)m(ens)28 b(to)g(b)s(e)f(sp)s(eci\014ed.)38 b(The)27 b(input)630 5006 y(consists)j(of)g(a)h(list)e(of)i(phrases)e(eac)m(h)j(con)m(tains) e(a)h(list)e(of)i(tok)m(ens.)870 5132 y Fk(\(Utterance)918 5236 y(Phrase)918 5340 y(\(\(Phrase)45 b(\(\(name)h(B\)\))p eop %%Page: 67 69 67 68 bop 150 -116 a Fo(Chapter)30 b(14:)41 b(Utterances)2573 b(67)1013 299 y Fk(I)48 b(saw)f(the)f(man)1013 403 y(\(in)h(\(\(EMPH)f (1\)\)\))1013 506 y(the)h(park\))965 610 y(\(Phrase)f(\(\(name)g (BB\)\))1013 714 y(with)h(the)g(telescope\)\)\))630 843 y Fo(T)-8 b(oBI)25 b(tones)g(and)f(accen)m(ts)j(ma)m(y)e(also)f(b)s(e)g (sp)s(eci\014ed)f(on)i(T)-8 b(ok)m(ens)25 b(but)f(these)h(will)d(only)h (tak)m(e)630 953 y(e\013ect)32 b(if)d(the)i(selected)g(in)m(tonation)f (metho)s(d)f(uses)h(them.)150 1101 y Fk(Segments)96 b Fo(This)29 b(allo)m(ws)g(sp)s(eci\014cation)g(of)i(segmen)m(ts,)h (durations)c(and)i(F0)h(target)h(v)-5 b(alues.)870 1224 y Fk(\(Utterance)918 1328 y(Segments)918 1432 y(\(\(#)47 b(0.19)f(\))965 1536 y(\(h)i(0.055)e(\(0)h(115\)\))965 1639 y(\(@)h(0.037)e(\(0.018)g(136\)\))965 1743 y(\(l)i(0.064)e(\))965 1847 y(\(ou)h(0.208)g(\(0.0)f(134\))h(\(0.100)f(135\))h(\(0.208)f (123\)\))965 1951 y(\(#)i(0.19\)\)\))630 2080 y Fo(Note)33 b(the)g(times)e(are)i(in)e Fi(se)-5 b(c)g(onds)41 b Fo(NOT)32 b(milliseconds.)42 b(The)32 b(format)g(of)h(eac)m(h)g(segmen)m(t)630 2189 y(en)m(try)40 b(is)f(segmen)m(t)j(name,)g(duration)d(in)g (seconds,)j(and)e(list)e(of)j(target)g(v)-5 b(alues.)69 b(Eac)m(h)630 2299 y(target)39 b(v)-5 b(alue)36 b(consists)h(of)g(a)h (pair)e(of)h(p)s(oin)m(t)f(in)m(to)h(the)h(segmen)m(t)g(\(in)e (seconds\))i(and)e(F0)630 2408 y(v)-5 b(alue)30 b(in)f(Hz.)150 2557 y Fk(Phones)192 b Fo(This)32 b(allo)m(ws)h(a)i(simple)c(sp)s (eci\014cation)i(of)h(a)g(list)f(of)h(phones.)51 b(Syn)m(thesis)32 b(sp)s(eci\014es)h(\014xed)630 2667 y(durations)26 b(\(sp)s(eci\014ed)g (in)g Fk(FP_duration)p Fo(,)f(default)i(100)i(ms\))e(and)g(monotone)h (in)m(tonation)630 2776 y(\(sp)s(eci\014ed)37 b(in)h Fk(FP_F0)p Fo(,)h(default)f(120Hz\).)68 b(This)37 b(ma)m(y)i(b)s(e)f (used)g(for)g(simple)f(c)m(hec)m(ks)j(for)630 2886 y(w)m(a)m(v)m(eform) 32 b(syn)m(thesizers)e(etc.)870 3009 y Fk(\(Utterance)45 b(Phones)h(\(#)h(h)h(@)f(l)h(ou)f(#\)\))630 3138 y Fo(Note)42 b(the)e(function)f Fk(SayPhones)f Fo(allo)m(ws)h(syn)m(thesis)g(and)h (pla)m(ying)f(of)i(lists)d(of)j(phones)630 3247 y(through)30 b(this)f(utterance)i(t)m(yp)s(e.)150 3396 y Fk(Wave)288 b Fo(A)30 b(w)m(a)m(v)m(eform)i(\014le.)40 b(Syn)m(thesis)29 b(here)h(simply)e(in)m(v)m(olv)m(es)j(loading)e(the)h(\014le.)870 3519 y Fk(\(Utterance)45 b(Wave)i(fred.wav\))275 3687 y Fo(Others)21 b(are)i(supp)s(orted,)g(as)g(de\014ned)e(in)g(`)p Fk(lib/synthesis.scm)p Fo(')e(but)j(are)h(used)e(in)m(ternally)g(b)m(y) h(v)-5 b(ari-)150 3797 y(ous)20 b(parts)h(of)f(the)h(system.)38 b(These)20 b(include)e Fk(Tokens)h Fo(used)h(in)f(TTS)g(and)h Fk(SegF0)g Fo(used)f(b)m(y)i Fk(utt.resynth)p Fo(.)150 4038 y Fn(14.4)68 b(Utterance)47 b(mo)t(dules)275 4225 y Fo(The)29 b(mo)s(dule)g(is)g(the)h(basic)g(unit)f(that)i(do)s(es)f (the)g(w)m(ork)g(of)h(syn)m(thesis.)39 b(Within)29 b(F)-8 b(estiv)j(al)30 b(there)h(are)150 4334 y(duration)36 b(mo)s(dules,)h(in)m(tonation)g(mo)s(dules,)h(w)m(a)m(v)m(e)h(syn)m (thesis)d(mo)s(dules)f(etc.)63 b(As)37 b(stated)h(ab)s(o)m(v)m(e)h(the) 150 4444 y(utterance)33 b(t)m(yp)s(e)f(de\014nes)f(the)i(set)f(of)h(mo) s(dules)d(whic)m(h)h(are)h(to)h(b)s(e)e(applied)f(to)j(the)f (utterance.)47 b(These)150 4553 y(mo)s(dules)27 b(in)g(turn)h(will)e (create)31 b(relations)c(and)i(items)f(so)h(that)g(ultimately)e(a)j(w)m (a)m(v)m(eform)g(is)e(generated,)150 4663 y(if)h(required.)275 4792 y(Man)m(y)e(of)g(the)g(c)m(hapters)h(in)d(this)h(man)m(ual)h(are)g (solely)f(concerned)h(with)f(particular)f(mo)s(dules)g(in)h(the)150 4902 y(system.)42 b(Note)33 b(that)e(man)m(y)g(mo)s(dules)e(ha)m(v)m(e) j(in)m(ternal)e(c)m(hoices,)i(suc)m(h)f(as)g(whic)m(h)e(duration)h (metho)s(d)g(to)150 5011 y(use)36 b(or)g(whic)m(h)f(in)m(tonation)h (metho)s(d)f(to)i(use.)58 b(Suc)m(h)35 b(general)h(c)m(hoices)h(are)g (often)f(done)g(through)g(the)150 5121 y Fk(Parameter)h Fo(system.)70 b(P)m(arameters)41 b(ma)m(y)f(b)s(e)f(set)i(for)e (di\013eren)m(t)h(features)g(lik)m(e)f Fk(Duration_Method)p Fo(,)150 5230 y Fk(Synth_Method)31 b Fo(etc.)53 b(F)-8 b(ormerly)34 b(the)g(v)-5 b(alues)34 b(for)g(these)g(parameters)h(w)m (ere)f(atomic)h(v)-5 b(alues)33 b(but)h(no)m(w)150 5340 y(they)d(ma)m(y)g(b)s(e)e(the)i(functions)e(themselv)m(es.)41 b(F)-8 b(or)31 b(example,)f(to)h(select)g(the)g(Klatt)f(duration)f (rules)p eop %%Page: 68 70 68 69 bop 150 -116 a Fo(68)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(Parameter.set)44 b('Duration_Method)f(Duration_Klatt\))275 427 y Fo(This)d(allo)m(ws)h (new)h(mo)s(dules)e(to)j(b)s(e)f(added)f(without)g(requiring)f(c)m (hanges)j(to)g(the)f(cen)m(tral)h(Lisp)150 537 y(functions)29 b(suc)m(h)h(as)h Fk(Duration)p Fo(,)d Fk(Intonation)p Fo(,)g(and)i Fk(Wave_Synth)p Fo(.)150 776 y Fn(14.5)68 b(Accessing)45 b(an)g(utterance)275 962 y Fo(There)27 b(are)h(a)h(n)m(um)m(b)s(er)d(of)i(standard)g(functions)e(that)j(allo)m (w)e(one)h(to)h(access)g(parts)f(of)g(an)g(utterance)150 1072 y(and)i(tra)m(v)m(erse)i(through)d(it.)275 1200 y(F)-8 b(unctions)29 b(exist)i(in)e(Lisp)f(\(and)i(of)h(course)f(C)p Fk(++)p Fo(\))g(for)g(accessing)h(an)f(utterance.)42 b(The)30 b(Lisp)f(access)150 1310 y(functions)g(are)150 1457 y(`)p Fk(\(utt.relationnames)d(UTT\))p Fo(')630 1567 y(returns)j(a)i(list)e(of)h(the)h(names)f(of)h(the)f(relations)g (curren)m(tly)f(created)j(in)d Fk(UTT)p Fo(.)150 1714 y(`)p Fk(\(utt.relation.items)c(UTT)30 b(RELATIONNAME\))p Fo(')630 1824 y(returns)h(a)i(list)e(of)h(all)f(items)h(in)f Fk(RELATIONNAME)e Fo(in)i Fk(UTT)p Fo(.)46 b(This)30 b(is)i(nil)e(if)h(no)h(relation)g(of)630 1933 y(that)f(name)f(exists.) 41 b(Note)31 b(for)g(tree)g(relation)e(will)f(giv)m(e)j(the)f(items)g (in)f(pre-order.)150 2080 y(`)p Fk(\(utt.relation_tree)d(UTT)j (RELATIONNAME\))p Fo(')630 2190 y(A)22 b(Lisp)e(tree)j(presen)m(tation) f(of)g(the)g(items)f Fk(RELATIONNAME)e Fo(in)h Fk(UTT)p Fo(.)37 b(The)22 b(Lisp)e(brac)m(k)m(eting)630 2299 y(re\015ects)31 b(the)f(tree)h(structure)f(in)f(the)i(relation.)150 2447 y(`)p Fk(\(utt.relation.leafs)25 b(UTT)30 b(RELATIONNAME\))p Fo(')630 2556 y(A)35 b(list)f(of)h(all)f(the)h(leafs)g(of)g(the)h (items)e(in)g Fk(RELATIONNAME)e Fo(in)h Fk(UTT)p Fo(.)54 b(Leafs)36 b(are)f(de\014ned)630 2666 y(as)30 b(those)g(items)f(with)f (no)i(daugh)m(ters)f(within)e(that)j(relation.)40 b(F)-8 b(or)30 b(simple)e(list)g(relations)630 2775 y Fk(utt.relation.leafs)d Fo(and)30 b Fk(utt.relation.items)c Fo(will)h(return)j(the)g(same)h (thing.)150 2923 y(`)p Fk(\(utt.relation.first)25 b(UTT)30 b(RELATIONNAME\))p Fo(')630 3032 y(returns)35 b(the)h(\014rst)f(item)g (in)g Fk(RELATIONNAME)p Fo(.)53 b(Returns)35 b Fk(nil)g Fo(if)g(this)g(relation)g(con)m(tains)630 3142 y(no)30 b(items)150 3289 y(`)p Fk(\(utt.relation.last)c(UTT)j(RELATIONNAME\))p Fo(')630 3399 y(returns)38 b(the)h(last)g(\(the)h(most)f(next\))h(item) e(in)g Fk(RELATIONNAME)p Fo(.)64 b(Returns)38 b Fk(nil)g Fo(if)g(this)630 3508 y(relation)30 b(con)m(tains)g(no)g(items)150 3655 y(`)p Fk(\(item.feat)e(ITEM)h(FEATNAME\))p Fo(')630 3765 y(returns)40 b(the)h(v)-5 b(alue)40 b(of)h(feature)g Fk(FEATNAME)e Fo(in)g Fk(ITEM)p Fo(.)71 b Fk(FEATNAME)39 b Fo(ma)m(y)i(b)s(e)f(a)h(feature)630 3875 y(name,)36 b(feature)g(function)e(name,)i(or)f(pathname)g(\(see)h(b)s(elo)m(w\).) 54 b(allo)m(wing)34 b(reference)h(to)630 3984 y(other)c(parts)f(of)g (the)h(utterance)g(this)e(item)h(is)g(in.)150 4131 y(`)p Fk(\(item.features)d(ITEM\))p Fo(')630 4241 y(Returns)i(an)i(asso)s(c)g (list)e(of)h(feature-v)-5 b(alue)31 b(pairs)e(of)h(all)g(lo)s(cal)f (features)i(on)f(this)f(item.)150 4388 y(`)p Fk(\(item.name)f(ITEM\))p Fo(')630 4498 y(Returns)39 b(the)h(name)g(of)g(this)f Fk(ITEM)p Fo(.)68 b(This)38 b(could)h(also)h(b)s(e)f(accessed)j(as)e Fk(\(item.feat)630 4607 y(ITEM)29 b('name\))p Fo(.)150 4754 y(`)p Fk(\(item.set_name)e(ITEM)i(NEWNAME\))p Fo(')630 4864 y(Sets)f(name)f(on)h Fk(ITEM)e Fo(to)j(b)s(e)e Fk(NEWNAME)p Fo(.)38 b(This)25 b(is)i(equiv)-5 b(alen)m(t)27 b(to)i Fk(\(item.set_feat)d(ITEM)630 4974 y('name)j(NEWNAME\))150 5121 y Fo(`)p Fk(\(item.set_feat)e(ITEM)i(FEATNAME)f(FEATVALUE\))p Fo(')630 5230 y(set)i(the)f(v)-5 b(alue)29 b(of)g Fk(FEATNAME)e Fo(to)j Fk(FEATVALUE)c Fo(in)i Fk(ITEM)p Fo(.)39 b Fk(FEATNAME)27 b Fo(should)g(b)s(e)h(a)i(simple)630 5340 y(name)g(and)g(not)h(refer)f (to)h(next,)g(previous)e(or)h(other)h(relations)e(via)h(links.)p eop %%Page: 69 71 69 70 bop 150 -116 a Fo(Chapter)30 b(14:)41 b(Utterances)2573 b(69)150 299 y(`)p Fk(\(item.relation)27 b(ITEM)i(RELATIONNAME\))p Fo(')630 408 y(Return)35 b(the)h(item)g(as)g(view)m(ed)f(from)h Fk(RELATIONNAME)p Fo(,)e(or)i Fk(nil)f Fo(if)g Fk(ITEM)g Fo(is)g(not)h(in)e(that)630 518 y(relation.)150 675 y(`)p Fk(\(item.relationnames)25 b(ITEM\))p Fo(')630 784 y(Return)30 b(a)g(list)f(of)i(relation)e(names)i(that)g(this)e(item)h(is)g(in.)150 941 y(`)p Fk(\(item.relationname)c(ITEM\))p Fo(')630 1050 y(Return)k(the)g(relation)g(name)g(that)h(this)e(item)h(is)g (curren)m(tly)f(b)s(eing)g(view)m(ed)h(as.)150 1207 y(`)p Fk(\(item.next)e(ITEM\))p Fo(')630 1316 y(Return)i(the)g(next)h(item)f (in)f Fk(ITEM)p Fo('s)g(curren)m(t)h(relation,)g(or)h Fk(nil)e Fo(if)g(there)i(is)e(no)i(next.)150 1473 y(`)p Fk(\(item.prev)d(ITEM\))p Fo(')630 1583 y(Return)g(the)g(previous)f (item)h(in)f Fk(ITEM)p Fo('s)h(curren)m(t)g(relation,)g(or)h Fk(nil)e Fo(if)h(there)g(is)g(no)g(previ-)630 1692 y(ous.)150 1849 y(`)p Fk(\(item.parent)f(ITEM\))p Fo(')630 1958 y(Return)22 b(the)g(paren)m(t)h(of)f Fk(ITEM)f Fo(in)g Fk(ITEM)p Fo('s)h(curren)m(t)g(relation,)h(or)g Fk(nil)e Fo(if)g(there)i(is)e(no)h(paren)m(t.)150 2115 y(`)p Fk (\(item.daughter1)k(ITEM\))p Fo(')630 2225 y(Return)i(the)g(\014rst)g (daugh)m(ter)h(of)g Fk(ITEM)e Fo(in)g Fk(ITEM)p Fo('s)h(curren)m(t)g (relation,)g(or)h Fk(nil)e Fo(if)h(there)h(are)630 2334 y(no)h(daugh)m(ters.)150 2491 y(`)p Fk(\(item.daughter2)c(ITEM\))p Fo(')630 2600 y(Return)31 b(the)h(second)g(daugh)m(ter)g(of)g Fk(ITEM)f Fo(in)g Fk(ITEM)p Fo('s)g(curren)m(t)g(relation,)h(or)g Fk(nil)f Fo(if)g(there)630 2710 y(is)e(no)i(second)f(daugh)m(ter.)150 2866 y(`)p Fk(\(item.daughtern)c(ITEM\))p Fo(')630 2976 y(Return)j(the)h(last)f(daugh)m(ter)h(of)g Fk(ITEM)e Fo(in)h Fk(ITEM)p Fo('s)f(curren)m(t)i(relation,)f(or)g Fk(nil)g Fo(if)g(there)h(are)630 3086 y(no)g(daugh)m(ters.)150 3242 y(`)p Fk(\(item.leafs)e(ITEM\))p Fo(')630 3352 y(Return)d(a)h (list)f(of)h(all)e(lefs)h(items)h(\(those)g(with)f(no)g(daugh)m(ters\)) i(dominated)e(b)m(y)g(this)g(item.)150 3508 y(`)p Fk(\(item.next_leaf)h (ITEM\))p Fo(')630 3618 y(Find)20 b(the)h(next)g(item)g(in)e(this)h (relation)h(that)g(has)g(no)g(daugh)m(ters.)38 b(Note)22 b(this)e(ma)m(y)h(tra)m(v)m(erse)630 3727 y(up)29 b(the)i(tree)g(from)f (this)f(p)s(oin)m(t)g(to)j(searc)m(h)f(for)f(suc)m(h)g(an)g(item.)275 3884 y(As)i(from)g(1.2)i(the)e(utterance)i(structure)e(ma)m(y)h(b)s(e)f (fully)e(manipulated)g(from)i(Sc)m(heme.)48 b(Relations)150 3994 y(and)30 b(items)g(ma)m(y)h(b)s(e)e(created)j(and)e(deleted,)g(as) h(easily)e(as)i(they)f(can)h(in)e(C)p Fk(++)p Fo(;)150 4150 y(`)p Fk(\(utt.relation.present)c(UTT)k(RELATIONNAME\))p Fo(')630 4260 y(returns)g Fk(t)h Fo(if)g(relation)f(named)h Fk(RELATIONNAME)d Fo(is)i(presen)m(t,)i Fk(nil)f Fo(otherwise.)150 4416 y(`)p Fk(\(utt.relation.create)25 b(UTT)30 b(RELATIONNAME\))p Fo(')630 4526 y(Creates)36 b(a)g(new)f(relation)f(called)h Fk(RELATIONNAME)p Fo(.)52 b(If)35 b(this)f(relation)h(already)f(exists) h(it)630 4635 y(is)i(deleted)h(\014rst)g(and)f(items)h(in)f(the)h (relation)g(are)h(derefenced)f(from)f(it)h(\(deleting)g(the)630 4745 y(items)f(if)g(they)h(are)g(no)f(longer)h(referenced)f(b)m(y)h(an) m(y)g(relation\).)62 b(Th)m(us)36 b(create)k(relation)630 4855 y(guaran)m(tees)32 b(an)e(empt)m(y)h(relation.)150 5011 y(`)p Fk(\(utt.relation.delete)25 b(UTT)30 b(RELATIONNAME\))p Fo(')630 5121 y(Deletes)i(the)f(relation)f(called)h Fk(RELATIONNAME)c Fo(in)j(utt.)43 b(All)29 b(items)i(in)f(that)h(relation)g(are)630 5230 y(derefenced)d(from)g(the)h(relation)e(and)h(if)f(they)i(are)f(no) h(longer)f(in)f(an)m(y)h(relation)g(the)g(items)630 5340 y(themselv)m(es)j(are)f(deleted.)p eop %%Page: 70 72 70 71 bop 150 -116 a Fo(70)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(`)p Fk(\(utt.relation.append)c(UTT)30 b(RELATIONNAME)d(ITEM\))p Fo(')630 408 y(App)s(end)32 b Fk(ITEM)h Fo(to)i(end)e(of)i(relation)e (named)h Fk(RELATIONNAME)d Fo(in)h Fk(UTT)p Fo(.)52 b(Returns)33 b Fk(nil)g Fo(if)630 518 y(there)k(is)f(not)i(relation)e(named)g Fk(RELATIONNAME)e Fo(in)i Fk(UTT)g Fo(otherwise)g(returns)g(the)h(item) 630 628 y(app)s(ended.)g(This)23 b(new)i(item)f(b)s(ecomes)h(the)g (last)g(in)e(the)j(top)f(list.)37 b Fk(ITEM)24 b Fo(item)g(ma)m(y)i(b)s (e)e(an)630 737 y(item)29 b(itself)f(\(in)g(this)g(or)h(another)h (relation\))e(or)i(a)f(LISP)f(description)f(of)j(an)f(item,)g(whic)m(h) 630 847 y(consist)d(of)g(a)g(list)f(con)m(taining)g(a)i(name)f(and)f(a) i(set)f(of)g(feature)h(v)-5 b(ale)26 b(pairs.)38 b(It)26 b Fk(ITEM)f Fo(is)g Fk(nil)630 956 y Fo(or)j(insp)s(eci\014ed)e(an)i (new)g(empt)m(y)h(item)f(is)f(added.)40 b(If)28 b Fk(ITEM)f Fo(is)g(already)h(in)f(this)h(relation)f(it)630 1066 y(is)i(dereferenced)i(from)f(its)f(curren)m(t)h(p)s(osition)f(\(and)h (an)g(em)m(tp)m(y)i(item)e(re-inserted\).)150 1280 y(`)p Fk(\(item.insert)d(ITEM1)i(ITEM2)g(DIRECTION\))p Fo(')630 1390 y(Insert)45 b Fk(ITEM2)f Fo(in)m(to)i Fk(ITEM1)p Fo('s)e(relation)h(in)g(the)g(direction)g(sp)s(eci\014ed)f(b)m(y)h Fk(DIRECTION)p Fo(.)630 1500 y Fk(DIRECTION)31 b Fo(ma)m(y)k(tak)m(e)g (the)f(v)-5 b(alue,)34 b Fk(before)p Fo(,)f Fk(after)p Fo(,)h Fk(above)e Fo(and)h Fk(below)p Fo(.)49 b(If)34 b(unsp)s(eci-)630 1609 y(\014ed,)c Fk(after)e Fo(is)i(assumed.)40 b(Note)31 b(it)f(is)f(not)h(recommended)g(to)h(insert)e(ab)s(o)m(v)m(e) i(and)f(b)s(elo)m(w)630 1719 y(and)44 b(the)h(functions)e Fk(item.insert_parent)d Fo(and)k Fk(item.append_daughter)39 b Fo(should)630 1828 y(normally)33 b(b)s(e)i(used)f(for)h(tree)h (building.)51 b(Inserting)34 b(using)g Fk(before)f Fo(and)i Fk(after)e Fo(within)630 1938 y(daugh)m(ters)d(is)g(p)s(erfectly)f (safe.)150 2152 y(`)p Fk(\(item.append_daughter)c(PARENT)j(DAUGHTER\))p Fo(')630 2262 y(App)s(end)k Fk(DAUGHTER)p Fo(,)h(an)g(item)h(or)g(a)g (description)e(of)i(an)f(item)h(to)h(the)f(item)f Fk(PARENT)f Fo(in)630 2371 y(the)f Fk(PARENT)p Fo('s)d(relation.)150 2586 y(`)p Fk(\(item.insert_parent)d(DAUGHTER)j(NEWPARENT\))p Fo(')630 2695 y(Insert)f(a)h(new)f(paren)m(t)h(ab)s(o)m(v)m(e)h Fk(DAUGHTER)p Fo(.)37 b Fk(NEWPARENT)25 b Fo(ma)m(y)k(b)s(e)e(a)h(item) f(or)g(the)h(descrip-)630 2805 y(tion)i(of)g(an)h(item.)150 3019 y(`)p Fk(\(item.delete)c(ITEM\))p Fo(')630 3129 y(Delete)37 b(this)d(item)h(from)g(all)f(relations)h(it)f(is)h(in.)54 b(All)34 b(daugh)m(ters)i(of)f(this)g(item)g(in)f(eac)m(h)630 3238 y(relations)29 b(are)h(also)g(remo)m(v)m(ed)h(from)e(the)h (relation)f(\(whic)m(h)g(ma)m(y)i(in)d(turn)h(cause)h(them)g(to)630 3348 y(b)s(e)g(deleted)g(if)f(they)i(cease)h(to)f(b)s(e)e(referenced)i (b)m(y)f(an)m(y)h(other)f(relation.)150 3562 y(`)p Fk (\(item.relation.remove)25 b(ITEM\))p Fo(')630 3672 y(Remo)m(v)m(e)33 b(this)d(item)g(from)h(this)f(relation,)g(and)h(an)m(y)g(of)g(its)g (daugh)m(ters.)42 b(Other)31 b(relations)630 3781 y(this)e(item)h(are)h (in)e(remain)g(un)m(touc)m(hed.)150 3996 y(`)p Fk(\(item.move_tree)d (FROM)k(TO\))p Fo(')630 4105 y(Mo)m(v)m(e)37 b(the)d(item)h Fk(FROM)e Fo(to)i(the)g(p)s(osition)e(of)h Fk(TO)g Fo(in)g Fk(TO)p Fo('s)g(relation.)52 b Fk(FROM)34 b Fo(will)e(often)j(b)s(e)630 4215 y(in)k(the)i(same)g(relation)f(as)h Fk(TO)f Fo(but)g(that)i(isn't) d(necessary)-8 b(.)73 b(The)40 b(con)m(ten)m(ts)j(of)d Fk(TO)h Fo(are)630 4325 y(dereferenced.)58 b(its)35 b(daugh)m(ters)h (are)h(sa)m(v)m(ed)g(then)f(descendan)m(ts)g(of)g Fk(FROM)f Fo(are)i(recreated)630 4434 y(under)c(the)i(new)f Fk(TO)p Fo(,)i(then)e Fk(TO)p Fo('s)g(previous)g(daugh)m(ters)g(are)i (derefenced.)53 b(The)35 b(order)f(of)630 4544 y(this)f(is)f(imp)s (ortan)m(t)h(as)h Fk(FROM)e Fo(ma)m(y)i(b)s(e)f(part)h(of)g Fk(TO)p Fo('s)f(descendan)m(ts.)50 b(Note)35 b(that)f(if)f Fk(TO)g Fo(is)630 4653 y(part)28 b(of)g Fk(FROM)p Fo('s)f(descendan)m (ts)h(no)g(mo)m(ving)g(o)s(ccurs)f(and)h Fk(nil)f Fo(is)g(returned.)39 b(F)-8 b(or)28 b(example)630 4763 y(to)i(remo)m(v)m(e)h(all)e(punction) f(terminal)g(no)s(des)h(in)f(the)i(Syn)m(tax)g(relation)f(the)g(call)g (w)m(ould)g(b)s(e)630 4872 y(something)h(lik)m(e)870 5029 y Fk(\(define)46 b(\(syntax_relation_punc)c(p\))965 5132 y(\(if)47 b(\(string-equal)e("punc")h(\(item.feat)f (\(item.daughter2)e(p\))k("pos"\)\))1156 5236 y(\(item.move_tree)d (\(item.daughter1)g(p\))j(p\))965 5340 y(\(mapcar)f(syntax_remove_punc) d(\(item.daughters)h(p\)\)\)\))p eop %%Page: 71 73 71 72 bop 150 -116 a Fo(Chapter)30 b(14:)41 b(Utterances)2573 b(71)150 299 y(`)p Fk(\(item.exchange_trees)25 b(ITEM1)k(ITEM2\))p Fo(')630 408 y(Exc)m(hange)f Fk(ITEM1)d Fo(and)h Fk(ITEM2)g Fo(and)g(their)g(descendan)m(ts)g(in)g Fk(ITEM2)p Fo('s)f(relation.)39 b(If)26 b Fk(ITEM1)630 518 y Fo(is)d(within)e Fk(ITEM2)p Fo('s)i(descenden)m(ts)h(or)f(vice)h(v)m(ersa)h Fk(nil)e Fo(is)g(returns)f(and)h(no)h(exc)m(hange)h(tak)m(es)630 628 y(place.)41 b(If)30 b Fk(ITEM1)f Fo(is)g(not)i(in)e Fk(ITEM2)p Fo('s)g(relation,)h(no)g(exc)m(hange)i(tak)m(es)f(place.)275 793 y(Daugh)m(ters)22 b(of)f(a)g(no)s(de)g(are)g(actually)g(represen)m (ted)g(as)g(a)h(list)d(whose)i(\014rst)g(daugh)m(ter)g(is)f(double)g (link)m(ed)150 903 y(to)26 b(the)g(paren)m(t.)39 b(Although)25 b(b)s(eing)f(a)m(w)m(are)j(of)f(this)e(structure)h(ma)m(y)h(b)s(e)f (useful)f(it)h(is)f(recommended)h(that)150 1012 y(all)h(access)i(go)f (through)f(the)h(tree)g(sp)s(eci\014c)f(functions)f Fk(*.parent)f Fo(and)i Fk(*.daughter*)e Fo(whic)m(h)h(prop)s(erly)150 1122 y(deal)k(with)g(the)h(structure,)g(th)m(us)f(is)g(the)h(in)m (ternal)e(structure)i(ev)m(er)g(c)m(hanges)h(in)e(the)h(future)f(only)f (these)150 1232 y(tree)j(access)h(function)d(need)h(b)s(e)g(up)s (dated.)275 1370 y(With)39 b(the)g(ab)s(o)m(v)m(e)i(functions)d(quite)h (elab)s(orate)h(utterance)h(manipulations)36 b(can)k(b)s(e)f(p)s (erformed.)150 1480 y(F)-8 b(or)27 b(example)e(in)g(p)s(ost-lexical)g (rules)f(where)i(mo)s(di\014cations)e(to)j(the)f(segmen)m(ts)h(are)f (required)e(based)i(on)150 1589 y(the)34 b(w)m(ords)f(and)g(their)g (con)m(text.)52 b(See)34 b(Section)g(13.8)h([P)m(ost-lexical)f(rules],) f(page)i(60)f(for)g(an)f(example)150 1699 y(of)e(using)d(v)-5 b(arious)30 b(utterance)h(access)h(functions.)150 1966 y Fn(14.6)68 b(F)-11 b(eatures)275 2163 y Fo(In)34 b(previous)h(v)m (ersions)f(items)i(had)f(a)h(n)m(um)m(b)s(er)e(of)i(prede\014ned)e (features.)56 b(This)34 b(is)h(no)h(longer)f(the)150 2273 y(case)i(and)d(all)h(features)h(are)g(optional.)55 b(P)m(articularly)34 b(the)i Fk(start)e Fo(and)h Fk(end)f Fo(features)i(are)g(no)f(longer)150 2382 y(\014xed,)25 b(though)g(those)g(names)f(are)h(still)e(used)h(in)f(the)i(relations)e (where)h(yjeu)h(are)g(appropriate.)37 b(Sp)s(eci\014c)150 2492 y(functions)27 b(are)i(pro)m(vided)e(for)i(the)g Fk(name)e Fo(feature)i(but)f(they)h(are)g(just)f(short)g(hand)g(for)g (normal)f(feature)150 2601 y(access.)42 b(Simple)28 b(features)j (directly)e(access)i(the)g(features)f(in)f(the)i(underlying)c Fk(EST_Feature)g Fo(class)j(in)150 2711 y(an)g(item.)275 2850 y(In)c(addition)f(to)i(simple)e(features)i(there)g(is)f(a)h(mec)m (hanism)f(for)h(relating)f(functions)f(to)j(names,)f(th)m(us)150 2959 y(accessing)42 b(a)f(feature)h(ma)m(y)f(actually)g(call)g(a)g (function.)72 b(F)-8 b(or)42 b(example)e(the)i(features)f Fk(num_syls)e Fo(is)150 3069 y(de\014ned)c(as)h(a)g(feature)g(function) f(whic)m(h)g(will)e(coun)m(t)j(the)g(n)m(um)m(b)s(er)f(of)h(syllables)e (in)g(the)i(giv)m(en)g(w)m(ord,)150 3178 y(rather)f(than)f(simple)f (access)j(a)g(pre-existing)d(feature.)55 b(F)-8 b(eature)37 b(functions)c(are)i(usually)e(dep)s(enden)m(t)150 3288 y(on)h(the)h(particular)d(realtion)i(the)g(item)g(is)g(in,)g(e.g.)53 b(some)35 b(feature)g(functions)e(are)h(only)g(appropriate)150 3398 y(for)c(items)g(in)f(the)i Fk(Word)e Fo(relation,)h(or)g(only)g (appropriate)f(for)h(those)h(in)e(the)i Fk(IntEvent)d Fo(relation.)275 3536 y(The)35 b(third)f(asp)s(ect)i(of)g(feature)g (names)g(is)f(a)h(path)g(comp)s(onen)m(t.)57 b(These)36 b(are)g(parts)g(of)g(the)g(name)150 3646 y(\(preceding)d(in)g Fk(.)p Fo(\))h(that)g(indicated)f(some)h(trv)m(ersal)g(of)g(the)g (utterance)h(structure.)51 b(F)-8 b(or)34 b(example)g(the)150 3755 y(features)24 b Fk(name)e Fo(will)f(access)j(the)g(name)g(feature) f(on)h(the)f(giv)m(en)h(item.)38 b(The)23 b(feature)h Fk(n.name)d Fo(will)g(return)150 3865 y(the)35 b(name)g(feature)h(on)f (the)g(next)h(item)e(\(in)g(that)i(item's)f(relation\).)55 b(A)35 b(n)m(um)m(b)s(er)f(of)h(basic)f(direction)150 3974 y(op)s(erators)d(are)f(de\014ned.)150 4140 y Fk(n.)384 b Fo(next)150 4303 y Fk(p.)g Fo(previous)150 4467 y Fk(nn.)336 b Fo(next)31 b(next)150 4630 y Fk(pp.)336 b Fo(previous)150 4794 y Fk(parent.)150 4957 y(daughter1.)630 5067 y Fo(\014rst)30 b(daugh)m(ter)150 5230 y Fk(daughter2.)630 5340 y Fo(second)g(daugh)m (ter)p eop %%Page: 72 74 72 73 bop 150 -116 a Fo(72)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(daughtern.)630 408 y Fo(last)h(daugh)m(ter)150 569 y Fk(first.)192 b Fo(most)31 b(previous)e(item)150 730 y Fk(last.)240 b Fo(most)31 b(next)f(item)275 891 y(Also)92 b(y)m(ou)i(ma)m(y)f(sp)s (eci\014c)f(tra)m(v)m(ersal)i(to)g(another)f(relation)f(relation,)108 b(though)93 b(the)150 1001 y Fk(R:.)60 b Fo(op)s(erator.)145 b(F)-8 b(or)66 b(example)e(giv)m(en)h(an)g(Item)g (in)f(the)h(syllable)e(relation)150 1110 y Fk(R:SylStructure.parent.na) o(me)24 b Fo(w)m(ould)29 b(giv)m(e)i(the)g(name)f(of)h(w)m(ord)f(the)g (syllable)f(is)g(in.)275 1246 y(Some)j(more)g(complex)g(examples)g(are) h(as)f(follo)m(ws,)g(assuming)f(w)m(e)i(are)f(starting)g(form)g(an)g (item)g(in)150 1356 y(the)f Fk(Syllable)d Fo(relation.)150 1517 y(`)p Fk(stress)p Fo(')142 b(This)29 b(item's)h(lexical)f(stress) 150 1678 y(`)p Fk(n.stress)p Fo(')630 1787 y(The)h(next)g(syllable's)f (lexical)g(stress)150 1948 y(`)p Fk(p.stress)p Fo(')630 2057 y(The)h(previous)f(syllable's)f(lexical)h(stress)150 2218 y(`)p Fk(R:SylStructure.parent.nam)o(e)p Fo(')630 2328 y(The)h(w)m(ord)g(this)f(syllable)f(is)i(in)150 2488 y(`)p Fk(R:SylStructure.parent.R:W)o(ord.)o(n.na)o(me)p Fo(')630 2598 y(The)g(w)m(ord)g(next)g(to)i(the)e(w)m(ord)g(this)f (syllable)g(is)g(in)150 2759 y(`)p Fk(n.R:SylStructure.parent.n)o(ame)p Fo(')630 2868 y(The)h(w)m(ord)g(the)g(next)h(syllable)d(is)i(in)150 3029 y(`)p Fk(R:SylStructure.daughtern.)o(ph_v)o(c)p Fo(')630 3138 y(The)g(phonetic)g(feature)g Fk(vc)g Fo(of)h(the)f (\014nal)f(segmen)m(t)j(in)d(this)g(syllable.)275 3300 y(A)h(list)f(of)i(all)e(feature)i(functions)e(is)g(giv)m(en)i(in)e(an)h (app)s(endix)e(of)j(this)e(do)s(cumen)m(t.)41 b(See)30 b(Chapter)g(32)150 3409 y([F)-8 b(eature)32 b(functions],)d(page)j (153.)42 b(New)30 b(functions)f(ma)m(y)i(also)f(b)s(e)g(added)g(in)f (Lisp.)275 3545 y(In)e(C)p Fk(++)g Fo(feature)h(v)-5 b(alues)27 b(are)i(of)f(class)g Fi(EST)p 1792 3545 28 4 v 33 w(V)-7 b(al)38 b Fo(whic)m(h)26 b(ma)m(y)j(b)s(e)e(a)h(string,)g (in)m(t,)g(or)g(a)h(\015oat)f(\(or)h(an)m(y)150 3655 y(arbitrary)36 b(ob)5 b(ject\).)63 b(In)36 b(Sc)m(heme)i(this)e (distinction)f(cannot)j(not)f(alw)m(a)m(ys)h(b)s(e)f(made)g(and)g (sometimes)150 3764 y(when)43 b(y)m(ou)i(exp)s(ect)g(an)f(in)m(t)g(y)m (ou)h(actually)f(get)h(a)g(string.)82 b(Care)44 b(should)e(b)s(e)i(tak) m(e)i(to)f(ensure)f(the)150 3874 y(righ)m(t)29 b(matc)m(hing)h (functions)e(are)i(use)f(in)f(Sc)m(heme.)41 b(It)29 b(is)g(recommended) g(y)m(ou)h(use)f Fk(string-append)d Fo(or)150 3983 y Fk(string-match)h Fo(as)k(they)f(will)e(alw)m(a)m(ys)j(w)m(ork.)275 4119 y(If)36 b(a)i(pathname)f(do)s(es)g(not)h(iden)m(tify)e(a)h(v)-5 b(alid)36 b(path)h(for)g(the)h(particular)d(item)i(\(e.g.)63 b(there)38 b(is)e(no)150 4229 y(next\))31 b Fk("0")e Fo(is)h(returned.)275 4364 y(When)k(collecting)g(data)i(from)e(sp)s (eec)m(h)h(databases)g(it)g(is)f(often)h(useful)e(to)i(collect)g(a)h (whole)d(set)j(of)150 4474 y(features)h(from)g(all)f(utterances)i(in)e (a)h(database.)62 b(These)37 b(features)h(can)f(then)g(b)s(e)g(used)f (for)h(building)150 4584 y(v)-5 b(arious)36 b(mo)s(dels)g(\(b)s(oth)h (CAR)-8 b(T)37 b(tree)h(mo)s(dels)e(and)h(linear)f(regression)g(mo)s (dules)g(use)h(these)g(feature)150 4693 y(names\),)275 4829 y(A)30 b(n)m(um)m(b)s(er)f(of)i(functions)e(exist)h(to)h(help)e (in)g(this)g(task.)41 b(F)-8 b(or)32 b(example)390 4959 y Fk(\(utt.features)44 b(utt1)j('Word)f('\(name)g(pos)h(p.pos)g (n.pos\)\))275 5095 y Fo(will)27 b(return)j(a)g(list)f(of)i(w)m(ord,)f (and)g(part)g(of)h(sp)s(eec)m(h)f(con)m(text)i(for)e(eac)m(h)i(w)m(ord) e(in)f(the)i(utterance.)275 5230 y(See)41 b(Section)g(26.2)i ([Extracting)f(features],)j(page)d(126)h(for)e(an)g(example)g(of)h (extracting)g(sets)g(of)150 5340 y(features)31 b(from)f(a)g(database)i (for)e(use)g(in)f(building)d(sto)s(c)m(hastic)32 b(mo)s(dels.)p eop %%Page: 73 75 73 74 bop 150 -116 a Fo(Chapter)30 b(14:)41 b(Utterances)2573 b(73)150 299 y Fn(14.7)68 b(Utterance)47 b(I/O)275 491 y Fo(A)21 b(n)m(um)m(b)s(er)f(of)i(functions)e(are)i(a)m(v)-5 b(ailable)21 b(to)i(allo)m(w)e(an)g(utterance's)i(structure)e(to)h(b)s (e)f(made)h(a)m(v)-5 b(ailable)150 601 y(for)30 b(other)h(programs.)275 736 y(The)j(whole)g(structure,)i(all)e(relations,)i(items)e(and)h (features)g(ma)m(y)g(b)s(e)g(sa)m(v)m(ed)h(in)e(an)g(ascii)h(format)150 845 y(using)27 b(the)h(function)f Fk(utt.save)p Fo(.)38 b(This)27 b(\014le)g(ma)m(y)i(b)s(e)f(reloaded)f(using)g(the)i Fk(utt.load)d Fo(function.)39 b(Note)150 955 y(the)31 b(w)m(a)m(v)m(eform)g(is)f(not)g(sa)m(v)m(ed)i(using)d(the)h(form.)275 1089 y(Individual)h(asp)s(ects)36 b(of)g(an)g(utterance)h(ma)m(y)f(b)s (e)f(selectiv)m(ely)h(sa)m(v)m(ed.)58 b(The)35 b(w)m(a)m(v)m(eform)j (itself)c(ma)m(y)150 1199 y(b)s(e)k(sa)m(v)m(ed)j(using)c(the)j (function)d Fk(utt.save.wave)p Fo(.)64 b(This)37 b(will)g(sa)m(v)m(e)j (the)g(w)m(a)m(v)m(eform)g(in)e(the)h(named)150 1308 y(\014le)30 b(in)f(the)j(format)f(sp)s(eci\014ed)e(in)g(the)i Fk(Parameter)e(Wavefiletype)p Fo(.)39 b(All)29 b(formats)i(supp)s (orted)e(b)m(y)i(the)150 1418 y(Edin)m(burgh)j(Sp)s(eec)m(h)i(T)-8 b(o)s(ols)36 b(are)h(v)-5 b(alid)35 b(including)e Fk(nist)p Fo(,)38 b Fk(esps)p Fo(,)f Fk(sun)p Fo(,)h Fk(riff)p Fo(,)f Fk(aiff)p Fo(,)g Fk(raw)f Fo(and)g Fk(ulaw)p Fo(.)150 1528 y(Note)27 b(the)g(functions)d Fk(utt.wave.rescale)e Fo(and)k Fk(utt.wave.resample)21 b Fo(ma)m(y)27 b(b)s(e)e(used)h(to)g (c)m(hange)i(the)150 1637 y(gain)g(and)h(sample)f(frequency)g(of)h(the) g(w)m(a)m(v)m(eform)h(b)s(efore)e(sa)m(ving)h(it.)40 b(A)29 b(w)m(a)m(v)m(eform)h(ma)m(y)f(b)s(e)g(imp)s(orted)150 1747 y(in)m(to)c(an)h(existing)e(utterance)j(with)d(the)i(function)e Fk(utt.import.wave)p Fo(.)35 b(This)23 b(is)i(sp)s(eci\014cally)e (designed)150 1856 y(to)43 b(allo)m(w)f(external)g(metho)s(ds)g(of)g(w) m(a)m(v)m(eform)i(syn)m(thesis.)76 b(Ho)m(w)m(ev)m(er)44 b(if)e(y)m(ou)h(just)e(wish)g(to)i(pla)m(y)f(an)150 1966 y(external)30 b(w)m(a)m(v)m(e)i(or)f(mak)m(e)g(it)f(in)m(to)g(an)h (utterance)g(y)m(ou)g(should)d(consider)h(the)i(utterance)g Fk(Wave)e Fo(t)m(yp)s(e.)275 2100 y(The)h(segmen)m(ts)h(of)g(an)f (utterance)h(ma)m(y)h(b)s(e)d(sa)m(v)m(ed)j(in)d(a)i(\014le)f(using)f (the)h(function)g Fk(utt.save.segs)150 2210 y Fo(whic)m(h)43 b(sa)m(v)m(es)i(the)f(segmen)m(ts)h(of)f(the)g(named)f(utterance)i(in)e (xlab)s(el)f(format.)81 b(An)m(y)44 b(other)h(stream)150 2320 y(ma)m(y)33 b(also)g(b)s(e)f(sa)m(v)m(ed)h(using)e(the)i(more)g (general)f Fk(utt.save.relation)c Fo(whic)m(h)j(tak)m(es)j(the)f (additional)150 2429 y(argumen)m(t)c(of)g(a)g(relation)g(name.)40 b(The)28 b(names)h(of)g(eac)m(h)h(item)e(and)h(the)g(end)f(feature)h (of)g(eac)m(h)h(item)f(are)150 2539 y(sa)m(v)m(ed)f(in)e(the)h(named)g (\014le,)g(again)g(in)f(Xlab)s(el)g(format,)i(other)f(features)h(are)f (sa)m(v)m(ed)h(in)e(extra)i(\014elds.)38 b(F)-8 b(or)150 2648 y(more)30 b(elab)s(orated)f(sa)m(ving)g(metho)s(ds)g(y)m(ou)h(can) g(easily)e(write)h(a)h(Sc)m(heme)f(function)g(to)h(sa)m(v)m(e)h(data)f (in)e(an)150 2758 y(utterance)j(in)e(whatev)m(er)i(format)g(is)f (required.)39 b(See)30 b(the)h(\014le)e(`)p Fk(lib/mbrola.scm)p Fo(')e(for)j(an)h(example.)275 2892 y(A)j(simple)f(function)g(to)j (allo)m(w)e(the)g(displa)m(ying)f(of)h(an)h(utterance)g(in)f(En)m (tropic's)g(Xw)m(a)m(v)m(es)i(to)s(ol)f(is)150 3002 y(pro)m(vided)j(b)m (y)h(the)h(function)e Fk(display)p Fo(.)66 b(It)40 b(simply)d(sa)m(v)m (es)k(the)f(w)m(a)m(v)m(eform)h(and)d(the)i(segmen)m(ts)h(and)150 3112 y(sends)29 b(appropriate)h(commands)g(to)h(\(the)g(already)f (running\))e(Xw)m(a)m(v)m(es)k(and)e(xlab)s(el)f(programs.)275 3246 y(A)22 b(function)f(to)i(syn)m(thesize)f(an)g(externally)f(sp)s (eci\014ed)g(utterance)i(is)e(pro)m(vided)g(for)h(b)m(y)g Fk(utt.resynth)150 3356 y Fo(whic)m(h)33 b(tak)m(es)j(t)m(w)m(o)f (\014lename)f(argumen)m(ts,)i(an)e(xlab)s(el)e(segmen)m(t)k(\014le)d (and)h(an)g(F0)h(\014le.)52 b(This)32 b(function)150 3465 y(loads,)h(syn)m(thesizes)f(and)g(pla)m(ys)f(an)i(utterance)g(syn) m(thesized)f(from)g(these)h(\014les.)46 b(The)31 b(loading)h(is)f(pro-) 150 3575 y(vided)e(b)m(y)h(the)h(underlying)c(function)i Fk(utt.load.segf0)p Fo(.)p eop %%Page: 74 76 74 75 bop 150 -116 a Fo(74)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 75 77 75 76 bop 150 -116 a Fo(Chapter)30 b(15:)41 b(T)-8 b(ext)31 b(analysis)2474 b(75)150 299 y Fl(15)80 b(T)-13 b(ext)53 b(analysis)150 666 y Fn(15.1)68 b(T)-11 b(ok)l(enizing)275 860 y Fo(A)30 b(crucial)g(stage)i(in)e(text)i(pro)s(cessing)d(is)h(the) h(initial)d(tok)m(enization)k(of)f(text.)43 b(A)31 b Fi(token)38 b Fo(in)30 b(F)-8 b(estiv)j(al)150 970 y(is)36 b(an)g(atom)h(separated)g(with)f(whitespace)g(from)g(a)h(text)g(\014le) f(\(or)h(string\).)58 b(If)36 b(punctuation)f(for)i(the)150 1080 y(curren)m(t)h(language)g(is)f(de\014ned,)i(c)m(haracters)g(matc)m (hing)f(that)h(punctuation)d(are)i(remo)m(v)m(ed)h(from)f(the)150 1189 y(b)s(eginning)21 b(and)i(end)g(of)g(a)h(tok)m(en)h(and)e(held)f (as)h(features)h(of)g(the)f(tok)m(en.)40 b(The)23 b(default)g(list)f (of)h(c)m(haracters)150 1299 y(to)31 b(b)s(e)f(treated)h(as)g(white)e (space)i(is)f(de\014ned)f(as)390 1430 y Fk(\(defvar)46 b(token.whitespace)d(")48 b(\\t\\n\\r"\))275 1566 y Fo(While)29 b(the)h(default)g(set)h(of)f(punctuation)f(c)m(haracters)j(is)390 1697 y Fk(\(defvar)46 b(token.punctuation)d("\\"'`.,:;!?\(\){}[]"\))390 1801 y(\(defvar)j(token.prepunctuation)c("\\"'`\({["\))275 1938 y Fo(These)26 b(are)h(declared)g(in)e(`)p Fk(lib/token.scm)p Fo(')f(but)i(ma)m(y)i(b)s(e)e(c)m(hanged)i(for)e(di\013eren)m(t)h (languages,)h(text)150 2047 y(mo)s(des)i(etc.)150 2310 y Fn(15.2)68 b(T)-11 b(ok)l(en)45 b(to)g(w)l(ord)h(rules)275 2505 y Fo(T)-8 b(ok)m(ens)32 b(are)g(further)e(analysed)h(in)m(to)h (lists)e(of)i(w)m(ords.)44 b(A)32 b(w)m(ord)f(is)g(an)g(atom)i(that)f (can)g(b)s(e)f(giv)m(en)h(a)150 2614 y(pron)m(unciation)c(b)m(y)i(the)h (lexicon)e(\(or)h(letter)h(to)g(sound)d(rules\).)40 b(A)30 b(tok)m(en)h(ma)m(y)g(giv)m(e)g(rise)e(to)i(a)f(n)m(um)m(b)s(er)150 2724 y(of)h(w)m(ords)e(or)i(none)f(at)h(all.)275 2861 y(F)-8 b(or)31 b(example)f(the)g(basic)g(tok)m(ens)390 2992 y Fk(This)47 b(pocket-watch)d(was)j(made)g(in)g(1983.)275 3128 y Fo(w)m(ould)29 b(giv)m(e)i(a)f(w)m(ord)g(relation)g(of)390 3259 y Fk(this)47 b(pocket)f(watch)g(was)h(made)g(in)g(nineteen)e (eighty)h(three)275 3396 y Fo(Becuase)e(the)f(relationship)d(b)s(et)m (w)m(een)k(tok)m(ens)g(and)e(w)m(ord)h(in)e(some)i(cases)h(is)e (complex,)k(a)e(user)150 3505 y(function)32 b(ma)m(y)i(b)s(e)e(sp)s (eci\014ed)g(for)h(translating)f(tok)m(ens)i(in)m(to)f(w)m(ords.)49 b(This)31 b(is)i(designed)f(to)h(deal)g(with)150 3615 y(things)38 b(lik)m(e)g(n)m(um)m(b)s(ers,)h(email)f(addresses,)j(and)d (other)h(non-ob)m(vious)f(pron)m(unciations)f(of)i(tok)m(ens)h(as)150 3724 y(zero)26 b(or)g(more)g(w)m(ords.)39 b(Curren)m(tly)24 b(a)i(builtin)c(function)i Fk(builtin_english_token_to_)o(word)o(s)c Fo(o\013ers)150 3834 y(m)m(uc)m(h)30 b(of)h(the)g(necessary)f (functionalit)m(y)f(for)h(English)e(but)i(a)h(user)e(ma)m(y)i(further)e (customize)i(this.)275 3971 y(If)c(the)g(user)g(de\014nes)g(a)g (function)g Fk(token_to_words)c Fo(whic)m(h)j(tak)m(es)j(t)m(w)m(o)g (argumen)m(ts:)40 b(a)28 b(tok)m(en)g(item)150 4080 y(and)39 b(a)i(tok)m(en)g(name,)i(it)d(will)d(b)s(e)j(called)f(b)m(y)h(the)g Fk(Token_English)d Fo(and)i Fk(Token_Any)f Fo(mo)s(dules.)68 b(A)150 4190 y(substan)m(tial)29 b(example)h(is)g(giv)m(en)g(as)h Fk(english_token_to_words)24 b Fo(in)29 b(`)p Fk (festival/lib/token.scm)p Fo('.)275 4327 y(An)c(example)h(of)g(this)f (function)g(is)g(in)g(`)p Fk(lib/token.scm)p Fo('.)36 b(It)26 b(is)f(quite)h(elab)s(orate)g(and)g(co)m(v)m(ers)i(most)150 4436 y(of)34 b(the)g(common)g(m)m(ulti-w)m(ord)e(tok)m(ens)j(in)d (English)f(including,)h(n)m(um)m(b)s(ers,)h(money)h(sym)m(b)s(ols,)f (Roman)150 4546 y(n)m(umerals,)h(dates,)h(times,)g(plurals)c(of)k(sym)m (b)s(ols,)e(n)m(um)m(b)s(er)g(ranges,)i(telephone)f(n)m(um)m(b)s(er)f (and)g(v)-5 b(arious)150 4655 y(other)31 b(sym)m(b)s(ols.)275 4792 y(Let)f(us)g(lo)s(ok)g(at)h(the)f(treatmen)m(t)i(of)f(one)f (particular)f(phenomena)h(whic)m(h)f(sho)m(ws)h(the)g(use)g(of)g(these) 150 4902 y(rules.)38 b(Consider)23 b(the)i(expression)f Fk(")p Fo($12)j(million)p Fk(")21 b Fo(whic)m(h)j(should)f(b)s(e)i (rendered)f(as)i(the)f(w)m(ords)g Fk(")p Fo(t)m(w)m(elv)m(e)150 5011 y(million)d(dollars)p Fk(")p Fo(.)38 b(Note)26 b(the)g(w)m(ord)g Fk(")p Fo(dollars)p Fk(")d Fo(whic)m(h)h(is)h(in)m(tro)s(duced)f(b)m(y) i(the)g Fk(")p Fo($)p Fk(")f Fo(sign,)h(ends)f(up)f(after)150 5121 y(the)i(end)f(of)h(the)g(expression.)38 b(There)26 b(are)g(t)m(w)m(o)h(cases)g(w)m(e)f(need)g(to)g(deal)g(with)e(as)i (there)g(are)h(t)m(w)m(o)g(tok)m(ens.)150 5230 y(The)21 b(\014rst)h(condition)e(in)h(the)h Fk(cond)f Fo(c)m(hec)m(ks)i(if)e (the)h(curren)m(t)g(tok)m(en)h(name)f(is)f(a)h(money)g(sym)m(b)s(ol,)h (while)d(the)150 5340 y(second)31 b(condition)f(c)m(hec)m(k)j(that)f (follo)m(wing)e(w)m(ord)h(is)g(a)g(magnitude)g(\(million,)e(billion,)f (trillion,)h(zillion)p eop %%Page: 76 78 76 77 bop 150 -116 a Fo(76)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(etc.\))62 b(If)37 b(that)g(is)f(the)h(case)h(the)g Fk(")p Fo($)p Fk(")e Fo(is)g(remo)m(v)m(ed)i(and)f(the)g(remaining)e(n)m(um)m(b)s (ers)h(are)h(pronounced,)150 408 y(b)m(y)32 b(calling)f(the)h(builtin)d (tok)m(en)k(to)g(w)m(ord)e(function.)45 b(The)31 b(second)i(condition)d (deals)i(with)f(the)h(second)150 518 y(tok)m(en.)58 b(It)36 b(con\014rms)f(the)h(previous)e(is)h(a)h(money)g(v)-5 b(alue)36 b(\(the)g(same)g(regular)f(expression)g(as)h(b)s(efore\))150 628 y(and)f(then)h(returns)e(the)i(w)m(ord)g(follo)m(w)m(ed)f(b)m(y)h (the)g(w)m(ord)g Fk(")p Fo(dollars)p Fk(")p Fo(.)55 b(If)35 b(it)g(is)g(neither)g(of)h(these)h(forms)150 737 y(then)30 b(the)h(builtin)c(function)i(is)g(called.)390 870 y Fk(\(define)46 b(\(token_to_words)d(token)k(name\))390 974 y("\(token_to_words)c (TOKEN)k(NAME\))390 1078 y(Returns)f(a)h(list)g(of)g(words)f(for)h (NAME)g(from)g(TOKEN.")438 1182 y(\(cond)485 1285 y(\(\(and)g (\(string-matches)c(name)k("\\\\$[0-9,]+\\\\\(\\\\.[0-9]+\\\\)o(\)?")o (\))772 1389 y(\(string-matches)c(\(item.feat)i(token)i("n.name"\))e (".*illion.?"\)\))533 1493 y(\(builtin_english_token_to)o(_wor)o(ds)c (token)47 b(\(string-after)d(name)j("$"\)\)\))485 1597 y(\(\(and)g(\(string-matches)c(\(item.feat)i(token)i("p.name"\))1631 1701 y("\\\\$[0-9,]+\\\\\(\\\\.[0-9]+\\)o(\\\)?")o(\))772 1804 y(\(string-matches)c(name)k(".*illion.?"\)\))533 1908 y(\(list)581 2012 y(name)581 2116 y("dollars"\)\))485 2219 y(\(t)533 2323 y(\(builtin_english_token_to)o(_wor)o(ds)41 b(token)47 b(name\)\)\)\))275 2462 y Fo(It)30 b(is)g(v)-5 b(alid)29 b(to)j(mak)m(e)g(some)f(conditions)e(return)h(no)h(w)m(ords,) f(though)h(some)g(care)h(should)d(b)s(e)h(tak)m(en)150 2572 y(with)23 b(that,)j(as)f(punctuation)e(information)f(ma)m(y)j(no)f (longer)g(b)s(e)g(a)m(v)-5 b(ailable)23 b(to)i(later)g(pro)s(cessing)e (if)g(there)150 2681 y(are)31 b(no)f(w)m(ords)g(related)g(to)h(a)g(tok) m(en.)150 2950 y Fn(15.3)68 b(Homograph)46 b(disam)l(biguation)275 3146 y Fo(Not)33 b(all)f(tok)m(ens)i(can)f(b)s(e)g(rendered)e(as)i(w)m (ords)g(easily)-8 b(.)48 b(Their)31 b(con)m(text)k(ma)m(y)e(a\013ect)i (the)e(w)m(a)m(y)h(they)150 3256 y(are)d(to)g(b)s(e)f(pronounced.)39 b(F)-8 b(or)31 b(example)f(in)f(the)i(utterance)390 3389 y Fk(On)47 b(May)g(5)h(1985,)e(1985)h(people)f(moved)g(to)h (Livingston.)150 3638 y Fo(the)31 b(tok)m(ens)g Fk(")p Fo(1985)p Fk(")g Fo(should)e(b)s(e)h(pronounced)f(di\013eren)m(tly)-8 b(,)29 b(the)i(\014rst)f(as)150 3747 y(a)j(y)m(ear,)i Fk(")p Fo(nineteen)d(eigh)m(t)m(y)h(\014v)m(e)p Fk(")g Fo(while)e(the)i(second)g(as)g(a)h(quan)m(tit)m(y)f Fk(")p Fo(one)g(thousand)f(nine)f(h)m(undred)150 3857 y(and)40 b(eigh)m(t)m(y)i(\014v)m(e)p Fk(")p Fo(.)71 b(Num)m(b)s(ers)40 b(ma)m(y)h(also)g(b)s(e)f(pronounced)f(as)i(ordinals)e(as)i(in)e(the)i Fk(")p Fo(5)p Fk(")g Fo(ab)s(o)m(v)m(e,)j(it)150 3966 y(should)28 b(b)s(e)i Fk(")p Fo(\014fth)p Fk(")f Fo(rather)h(than)g Fk(")p Fo(\014v)m(e)p Fk(")p Fo(.)275 4105 y(Also,)c(the)f(pron)m (unciation)e(of)i(certain)g(w)m(ords)g(cannot)g(simply)e(b)s(e)h(found) g(from)g(their)g(orthographic)150 4215 y(form)g(alone.)39 b(Linguistic)23 b(part)i(of)g(sp)s(eec)m(h)g(tags)h(help)d(to)j(disam)m (biguate)e(a)h(large)g(class)g(of)g(homographs,)150 4324 y(e.g.)59 b Fk(")p Fo(liv)m(es)p Fk(")p Fo(.)d(A)36 b(part)g(of)g(sp)s (eec)m(h)g(tagger)i(is)d(included)e(in)i(F)-8 b(estiv)j(al)36 b(and)g(discussed)e(in)h(Chapter)g(16)150 4434 y([POS)24 b(tagging],)k(page)e(79.)40 b(But)25 b(ev)m(en)h(part)f(of)g(sp)s(eec)m (h)g(isn't)g(su\016cien)m(t)f(in)g(a)i(n)m(um)m(b)s(er)e(of)h(cases.)40 b(W)-8 b(ords)150 4544 y(suc)m(h)33 b(as)g Fk(")p Fo(bass)p Fk(")p Fo(,)f Fk(")p Fo(wind)p Fk(")p Fo(,)f Fk(")p Fo(b)s(o)m(w)p Fk(")h Fo(etc)i(cannot)g(b)m(y)e(distinguished)d(b)m(y)k(part)g(of)g (sp)s(eec)m(h)g(alone,)h(some)150 4653 y(seman)m(tic)25 b(information)d(is)h(also)h(required.)37 b(As)25 b(full)c(seman)m(tic)k (analysis)e(of)h(text)h(is)f(out)m(with)f(the)i(realms)150 4763 y(of)31 b(F)-8 b(estiv)j(al's)30 b(capabilities)e(some)j(other)g (metho)s(d)f(for)g(disam)m(biguation)e(is)i(required.)275 4902 y(F)-8 b(ollo)m(wing)35 b(the)i(w)m(ork)f(of)g Fj(y)m(aro)m (wsky96)46 b Fo(w)m(e)36 b(ha)m(v)m(e)i(included)33 b(a)k(metho)s(d)f (for)g(iden)m(ti\014ed)e(tok)m(ens)j(to)150 5011 y(b)s(e)29 b(further)g(lab)s(elled)e(with)i(extra)i(tags)g(to)f(help)f(iden)m (tify)f(their)h(t)m(yp)s(e.)41 b(Y)-8 b(aro)m(wsky)31 b(uses)e Fi(de)-5 b(cision)33 b(lists)150 5121 y Fo(to)i(iden)m(tify)e (di\013eren)m(t)g(t)m(yp)s(es)i(for)f(homographs.)51 b(Decision)34 b(lists)f(are)i(a)f(restricted)g(form)g(of)g(decision)150 5230 y(trees)27 b(whic)m(h)f(ha)m(v)m(e)i(some)f(adv)-5 b(an)m(tages)29 b(o)m(v)m(er)f(full)d(trees,)j(they)f(are)h(easier)f (to)g(build)d(and)i(Y)-8 b(aro)m(wsky)28 b(has)150 5340 y(sho)m(wn)i(them)g(to)h(b)s(e)f(adequate)h(for)f(t)m(ypical)g (homograph)g(resolution.)p eop %%Page: 77 79 77 78 bop 150 -116 a Fo(Chapter)30 b(15:)41 b(T)-8 b(ext)31 b(analysis)2474 b(77)150 299 y Ff(15.3.1)63 b(Using)42 b(disam)m(biguators)275 492 y Fo(F)-8 b(estiv)j(al)23 b(o\013ers)h(a)g(metho)s(d)g(for)f(assigning)f(a)i Fk(token_pos)d Fo(feature)k(to)f(eac)m(h)h(tok)m(en.)39 b(It)24 b(do)s(es)g(so)f (using)150 601 y(Y)-8 b(aro)m(wsky-t)m(yp)s(e)31 b(disam)m(biguation)c (tec)m(hniques.)40 b(A)29 b(list)f(of)h(disam)m(biguators)f(can)i(b)s (e)e(pro)m(vided)g(in)g(the)150 711 y(v)-5 b(ariable)30 b Fk(token_pos_cart_trees)p Fo(.)38 b(Eac)m(h)32 b(disam)m(biguator)f (consists)f(of)i(a)g(regular)e(expression)h(and)150 820 y(a)42 b(CAR)-8 b(T)40 b(tree)i(\(whic)m(h)f(ma)m(y)g(b)s(e)g(a)g (decision)f(list)g(as)h(they)h(ha)m(v)m(e)g(the)f(same)h(format\).)74 b(If)40 b(a)i(tok)m(en)150 930 y(matc)m(hes)e(the)f(regular)e (expression)h(the)g(CAR)-8 b(T)39 b(tree)g(is)f(applied)e(to)k(the)e (tok)m(en)i(and)e(the)h(resulting)150 1040 y(class)c(is)g(assigned)f (to)i(the)g(tok)m(en)h(via)e(the)g(feature)h Fk(token_pos)p Fo(.)53 b(This)34 b(is)g(done)i(b)m(y)f(the)g Fk(Token_POS)150 1149 y Fo(mo)s(dule.)275 1284 y(F)-8 b(or)37 b(example,)h(the)f(follo)m (w)f(disam)m(biguator)f(distinguishes)f Fk(")p Fo(St)p Fk(")i Fo(\(street)h(and)g(sain)m(t\))f(and)g Fk(")p Fo(Dr)p Fk(")150 1394 y Fo(\(do)s(ctor)31 b(and)f(driv)m(e\).)533 1522 y Fk(\("\\\\\([dD][Rr]\\\\|[Ss][tT]\\)o(\\\)")581 1626 y(\(\(n.name)45 b(is)j(0\))629 1730 y(\(\(p.cap)d(is)j(1\))676 1834 y(\(\(street\)\))676 1938 y(\(\(p.name)e(matches)g ("[0-9]*\\\\\(1[sS][tT]\\\\|2)o([nN])o([dD])o(\\\\|)o(3[rR)o(][dD)o (]\\\\)o(|[0-)o(9][t)o(T][)o(hH]\\)o(\\\)")o(\))724 2041 y(\(\(street\)\))724 2145 y(\(\(title\)\)\)\))629 2249 y(\(\(punc)g(matches)g(".*,.*"\))676 2353 y(\(\(street\)\))676 2456 y(\(\(p.punc)g(matches)g(".*,.*"\))724 2560 y(\(\(title\)\))724 2664 y(\(\(n.cap)g(is)h(0\))772 2768 y(\(\(street\)\))772 2872 y(\(\(p.cap)f(is)h(0\))820 2975 y(\(\(p.name)e(matches)h ("[0-9]*\\\\\(1[sS][tT]\\\\|2[)o(nN][)o(dD])o(\\\\|3)o([rR])o([dD)o (]\\\\|)o([0-9)o(][t)o(T][h)o(H]\\)o(\\\)"\))867 3079 y(\(\(street\)\))867 3183 y(\(\(title\)\)\))820 3287 y(\(\(pp.name)f(matches)h("[1-9][0-9]+"\))867 3390 y(\(\(street\)\))867 3494 y(\(\(title\)\)\)\)\)\)\)\)\))275 3629 y Fo(Note)e(that)g(these)g (only)e(assign)g(v)-5 b(alues)43 b(for)g(the)g(feature)h Fk(token_pos)d Fo(and)h(do)h(nothing)g(more.)150 3738 y(Y)-8 b(ou)41 b(m)m(ust)g(ha)m(v)m(e)h(a)f(related)f(tok)m(en)i(to)f (w)m(ord)g(rule)e(that)i(in)m(terprets)f(this)g(feature)h(v)-5 b(alue)40 b(and)g(do)s(es)150 3848 y(the)33 b(required)f(translation.) 48 b(F)-8 b(or)34 b(example)f(the)g(corresp)s(onding)e(tok)m(en)k(to)f (w)m(ord)e(rule)g(for)h(the)h(ab)s(o)m(v)m(e)150 3958 y(disam)m(biguator)29 b(is)485 4087 y Fk(\(\(string-matches)44 b(name)i("\\\\\([dD][Rr]\\\\|[Ss][tT]\\\\\))o("\))533 4190 y(\(if)h(\(string-equal)d(\(item.feat)h(token)i("token_pos"\))d ("street"\))724 4294 y(\(if)j(\(string-matches)d(name)i("[dD][rR]"\)) 915 4398 y(\(list)g("drive"\))915 4502 y(\(list)g("street"\)\))724 4605 y(\(if)h(\(string-matches)d(name)i("[dD][rR]"\))915 4709 y(\(list)g("doctor"\))915 4813 y(\(list)g("saint"\)\)\)\))150 5038 y Ff(15.3.2)63 b(Building)42 b(disam)m(biguators)275 5230 y Fo(F)-8 b(estiv)j(al)42 b(o\013ers)g(some)g(supp)s(ort)f(for)g (building)e(disam)m(biguation)g(trees.)77 b(The)41 b(basic)g(metho)s(d) h(is)150 5340 y(to)35 b(\014nd)d(all)h(o)s(ccurrences)i(of)f(a)g (homographic)g(tok)m(en)h(in)e(a)h(large)h(text)g(database,)h(lab)s(el) c(eac)m(h)k(o)s(ccur-)p eop %%Page: 78 80 78 79 bop 150 -116 a Fo(78)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(rence)f(in)m(to)f (classes,)h(extract)h(appropriate)d(con)m(text)k(features)d(for)h (these)f(tok)m(ens)i(and)d(\014nally)g(build)e(an)150 408 y(classi\014cation)29 b(tree)i(or)g(decision)e(list)g(based)h(on)g (the)h(extracted)g(features.)275 543 y(The)c(extraction)j(and)d (building)e(of)k(trees)g(is)e(not)i(y)m(et)g(a)g(fully)d(automated)k (pro)s(cess)e(in)f(F)-8 b(estiv)j(al)29 b(but)150 653 y(the)39 b(\014le)f(`)p Fk(festival/examples/toksear)o(ch.s)o(cm)p Fo(')33 b(sho)m(ws)38 b(some)i(basic)e(Sc)m(heme)h(co)s(de)g(w)m(e)h (use)e(for)150 762 y(extracting)31 b(tok)m(ens)g(from)f(v)m(ery)h (large)g(collections)e(of)i(text.)275 897 y(The)42 b(function)g Fk(extract_tokens)d Fo(do)s(es)j(the)h(real)g(w)m(ork.)79 b(It)43 b(reads)f(the)i(giv)m(en)f(\014le,)i(tok)m(en)f(b)m(y)150 1006 y(tok)m(en)35 b(in)m(to)f(a)g(tok)m(en)h(stream.)51 b(Eac)m(h)35 b(tok)m(en)f(is)f(tested)i(against)f(the)g(desired)e(tok)m (ens)j(and)e(if)g(there)h(is)150 1116 y(a)g(matc)m(h)g(the)g(named)f (features)h(are)g(extracted.)51 b(The)33 b(tok)m(en)i(stream)e(will)e (b)s(e)i(extended)h(to)g(pro)m(vide)150 1225 y(the)e(necessary)g(con)m (text.)48 b(Note)33 b(that)f(only)f(some)i(features)f(will)d(mak)m(e)k (an)m(y)f(sense)g(in)f(this)g(situation.)150 1335 y(There)f(is)f(only)h (a)h(tok)m(en)g(relation)f(so)g(referring)f(to)i(w)m(ords,)f(syllables) e(etc.)42 b(is)30 b(not)g(pro)s(ductiv)m(e.)275 1469 y(In)44 b(this)h(example)g(databases)i(are)f(iden)m(ti\014ed)e(b)m(y)h (a)h(\014le)f(that)h(lists)f(all)f(the)i(\014les)f(in)f(the)i(text)150 1579 y(databases.)81 b(Its)43 b(name)h(is)e(exp)s(ected)i(to)g(b)s(e)f (`)p Fk(bin/DBNAME.files)p Fo(')d(where)j Fk(DBNAME)f Fo(is)g(the)i(name)150 1689 y(of)e(the)g(database.)77 b(The)41 b(\014le)g(should)f(con)m(tain)i(a)h(list)d(of)i(\014lenames)f (in)g(the)h(database)h(e.g)g(for)f(the)150 1798 y(Guten)m(b)s(erg)30 b(texts)i(the)e(\014le)g(`)p Fk(bin/Gutenberg.files)p Fo(')25 b(con)m(tains)390 1927 y Fk(gutenberg/etext90/bill11)o(.txt)390 2031 y(gutenberg/etext90/const1)o(1.tx)o(t)390 2134 y (gutenberg/etext90/getty1)o(1.tx)o(t)390 2238 y (gutenberg/etext90/jfk11.)o(txt)390 2342 y(...)275 2477 y Fo(Extracting)h(the)h(tok)m(ens)g(is)e(t)m(ypically)g(done)i(in)e(t)m (w)m(o)i(passes.)39 b(The)26 b(\014rst)g(pass)g(extracts)i(the)e(con)m (text)150 2586 y(\(I'v)m(e)33 b(used)d(5)i(tok)m(ens)g(either)f (side\).)43 b(It)31 b(extracts)i(the)f(\014le)e(and)h(p)s(osition,)f (so)h(the)h(tok)m(en)g(is)f(iden)m(ti\014ed,)150 2696 y(and)f(the)g(w)m(ord)g(in)f(con)m(text.)275 2830 y(Next)38 b(those)g(examples)g(should)d(b)s(e)i(lab)s(elled)f(with)g(a)i(small)e (set)j(of)e(classes)h(whic)m(h)f(iden)m(tify)f(the)150 2940 y(t)m(yp)s(e)26 b(of)g(the)f(tok)m(en.)41 b(F)-8 b(or)26 b(example)f(for)h(a)g(tok)m(en)g(lik)m(e)f Fk(")p Fo(Dr)p Fk(")g Fo(whether)g(it)g(is)g(a)h(p)s(erson's)e(title)h(or)h(a) g(street)150 3049 y(iden)m(ti\014er.)37 b(Note)28 b(that)e(hand-lab)s (elling)d(can)j(b)s(e)f(lab)s(orious,)g(though)h(it)g(is)f(surprising)d (ho)m(w)k(few)g(tok)m(ens)150 3159 y(of)31 b(particular)d(t)m(yp)s(es)j (actually)f(exist)g(in)f(62)i(million)c(w)m(ords.)275 3293 y(The)35 b(next)h(task)g(is)f(to)h(extract)h(the)f(tok)m(ens)h (with)d(the)i(features)g(that)g(will)e(b)s(est)h(distinguish)d(the)150 3403 y(particular)k(tok)m(en.)62 b(In)36 b(our)h Fk(")p Fo(Dr)p Fk(")g Fo(case)h(this)e(will)f(in)m(v)m(olv)m(e)i(punctuation)f (around)g(the)i(tok)m(en,)i(capi-)150 3513 y(talisation)35 b(of)g(surrounding)e(tok)m(ens)j(etc.)58 b(After)36 b(extracting)g(the) g(distinguishing)31 b(tok)m(ens)36 b(y)m(ou)g(m)m(ust)150 3622 y(line)i(up)h(the)h(lab)s(els)e(with)h(these)h(extracted)i (features.)70 b(It)40 b(w)m(ould)e(b)s(e)i(easier)f(to)i(extract)h(b)s (oth)d(the)150 3732 y(con)m(text)d(and)e(the)g(desired)f(features)h(at) h(the)g(same)f(time)g(but)g(exp)s(erience)f(sho)m(ws)h(that)h(in)e(lab) s(elling,)150 3841 y(more)f(appropriate)f(features)h(come)h(to)g(mind)d (that)i(will)d(distinguish)f(classes)k(b)s(etter)g(and)g(y)m(ou)g (don't)150 3951 y(w)m(an)m(t)f(to)g(ha)m(v)m(e)h(to)f(lab)s(el)e(t)m (wice.)275 4086 y(Once)38 b(a)g(set)h(of)f(features)g(consisting)f(of)i (the)f(lab)s(el)f(and)g(features)h(is)g(created)h(it)e(is)h(easy)g(to)h (use)150 4195 y(`)p Fk(wagon)p Fo(')f(to)h(create)h(the)f(corresp)s (onding)e(decision)g(tree)i(or)g(decision)e(list.)64 b(`)p Fk(wagon)p Fo(')38 b(supp)s(orts)f(b)s(oth)150 4305 y(decision)30 b(trees)h(and)g(decision)e(lists,)h(it)h(ma)m(y)h(b) s(e)e(w)m(orth)h(exp)s(erimen)m(ting)f(to)h(\014nd)f(out)h(whic)m(h)f (giv)m(e)i(the)150 4414 y(b)s(est)e(results)f(on)i(some)f(held)f(out)i (test)h(data.)41 b(It)31 b(app)s(ears)e(that)i(decision)e(trees)i(are)g (t)m(ypically)f(b)s(etter,)150 4524 y(but)40 b(are)h(often)h(m)m(uc)m (h)e(larger,)k(and)c(the)h(size)g(do)s(es)f(not)h(alw)m(a)m(ys)h (justify)d(the)i(the)g(sometimes)g(only)150 4633 y(sligh)m(tly)29 b(b)s(etter)h(results.)p eop %%Page: 79 81 79 80 bop 150 -116 a Fo(Chapter)30 b(16:)41 b(POS)30 b(tagging)2493 b(79)150 299 y Fl(16)80 b(POS)54 b(tagging)275 533 y Fo(P)m(art)29 b(of)h(sp)s(eec)m(h)f(tagging)h(is)e(a)i(fairly)d (w)m(ell-de\014ned)g(pro)s(cess.)40 b(F)-8 b(estiv)j(al)29 b(includes)e(a)j(part)f(of)g(sp)s(eec)m(h)150 643 y(tagger)48 b(follo)m(wing)c(the)i(HMM-t)m(yp)s(e)i(taggers)f(as)f(found)f(in)g (the)h(Xero)m(x)h(tagger)h(and)d(others)h(\(e.g.)150 752 y Fj(DeRose88)7 b Fo(\).)87 b(P)m(art)45 b(of)g(sp)s(eec)m(h)g (tags)h(are)f(assigned,)j(based)d(on)f(the)h(probabilit)m(y)e (distribution)e(of)150 862 y(tags)35 b(giv)m(en)g(a)f(w)m(ord,)i(and)d (from)h(ngrams)g(of)g(tags.)54 b(These)34 b(mo)s(dels)f(are)i (externally)e(sp)s(eci\014ed)g(and)h(a)150 971 y(Viterbi)29 b(deco)s(der)h(is)f(used)h(to)h(assign)f(part)g(of)h(sp)s(eec)m(h)f (tags)h(at)g(run)e(time.)275 1106 y(So)39 b(far)h(this)f(tagger)j(has)d (only)h(b)s(een)f(used)g(for)h(English)d(but)j(there)g(is)f(nothing)g (language)h(sp)s(e-)150 1215 y(ci\014c)g(ab)s(out)h(it.)71 b(The)40 b(mo)s(dule)g Fk(POS)f Fo(assigns)h(the)h(tags.)73 b(It)41 b(accesses)i(the)e(follo)m(wing)e(v)-5 b(ariables)39 b(for)150 1325 y(parameterization.)150 1484 y Fk(pos_lex_name)630 1594 y Fo(The)k(name)h(of)f(a)h Fk(")p Fo(lexicon)p Fk(")f Fo(holding)e(rev)m(erse)j(probabilities)c(of)k(w)m(ords)f(giv)m(en)h(a) g(tag)630 1704 y(\(indexed)d(b)m(y)h(w)m(ord\).)76 b(If)42 b(this)f(is)g(unset)h(or)g(has)g(the)h(v)-5 b(alue)41 b Fk(NIL)g Fo(no)i(part)f(of)g(sp)s(eec)m(h)630 1813 y(tagging)31 b(tak)m(es)h(place.)150 1973 y Fk(pos_ngram_name)630 2082 y Fo(The)58 b(name)h(of)f(a)h(loaded)f(ngram)g(mo)s(del)g(of)g (part)h(of)g(sp)s(eec)m(h)f(tags)i(\(loaded)e(b)m(y)630 2192 y Fk(ngram.load)p Fo(\).)150 2351 y Fk(pos_p_start_tag)630 2461 y Fo(The)44 b(name)h(of)f(the)h(most)g(lik)m(ely)e(tag)i(b)s (efore)f(the)h(start)g(of)g(an)f(utterance.)84 b(This)43 b(is)630 2570 y(t)m(ypically)29 b(the)i(tag)g(for)f(sen)m(tence)i (\014nal)d(punctuation)g(marks.)150 2730 y Fk(pos_pp_start_tag)630 2839 y Fo(The)42 b(name)g(of)g(the)h(most)f(lik)m(ely)f(tag)j(t)m(w)m (o)f(b)s(efore)f(the)h(start)f(of)h(an)f(utterance.)77 b(F)-8 b(or)630 2949 y(English)34 b(the)j(is)e(t)m(ypically)g(a)i (simple)d(noun,)k(but)d(for)h(other)h(languages)g(it)f(migh)m(t)g(b)s (e)g(a)630 3059 y(v)m(erb.)57 b(If)35 b(the)h(ngram)g(mo)s(del)f(is)f (bigger)i(than)f(three)i(this)d(tag)j(is)e(e\013ectiv)m(ely)i(rep)s (eated)630 3168 y(for)30 b(the)h(previous)e(left)h(con)m(texts.)150 3328 y Fk(pos_map)144 b Fo(W)-8 b(e)31 b(ha)m(v)m(e)g(found)d(that)i (it)f(is)g(often)h(b)s(etter)g(to)g(use)g(a)g(ric)m(h)f(tagset)i(for)e (prediction)f(of)i(part)630 3437 y(of)38 b(sp)s(eec)m(h)g(tags)h(but)e (that)i(in)e(later)h(use)f(\(phrase)h(breaks)g(and)f(dictionary)g(lo)s (okup\))g(a)630 3547 y(m)m(uc)m(h)30 b(more)h(constrained)e(tagset)j (is)d(b)s(etter.)41 b(Th)m(us)29 b(mapping)f(of)j(the)f(predicted)f (tagset)630 3656 y(to)f(a)f(di\013eren)m(t)g(tagset)h(is)f(supp)s (orted.)37 b Fk(pos_map)25 b Fo(should)g(b)s(e)i(a)g(a)h(list)d(of)i (pairs)f(consisting)630 3766 y(of)31 b(a)f(list)f(of)i(tags)g(to)g(b)s (e)f(mapp)s(ed)f(and)h(the)g(new)g(tag)i(they)e(are)h(to)g(b)s(e)f (mapp)s(ed)f(to.)275 3925 y(Note)f(is)e(it)h(imp)s(ortan)m(t)f(to)i(ha) m(v)m(e)h(the)e(part)g(of)h(sp)s(eec)m(h)f(tagger)i(matc)m(h)f(the)f (tags)i(used)d(in)g(later)h(parts)150 4035 y(of)c(the)h(system,)g (particularly)d(the)i(lexicon.)38 b(Only)21 b(t)m(w)m(o)k(of)e(our)g (lexicons)f(used)g(so)h(far)g(ha)m(v)m(e)h(\(mappable\))150 4144 y(part)30 b(of)h(sp)s(eec)m(h)f(lab)s(els.)275 4279 y(An)g(example)g(of)g(the)h(part)f(of)g(sp)s(eec)m(h)h(tagger)h(for)e (English)e(can)j(b)s(e)e(found)g(in)h(`)p Fk(lib/pos.scm)p Fo('.)p eop %%Page: 80 82 80 81 bop 150 -116 a Fo(80)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 81 83 81 82 bop 150 -116 a Fo(Chapter)30 b(17:)41 b(Phrase)30 b(breaks)2443 b(81)150 299 y Fl(17)80 b(Phrase)53 b(breaks)275 563 y Fo(There)41 b(are)h(t)m(w)m(o)h(metho)s(ds)e(for)h(predicting)e (phrase)h(breaks)h(in)e(F)-8 b(estiv)j(al,)45 b(one)e(simple)c(and)j (one)150 673 y(sophisticated.)e(These)29 b(t)m(w)m(o)i(metho)s(ds)e (are)h(selected)g(through)f(the)h(parameter)g Fk(Phrase_Method)d Fo(and)150 783 y(phrasing)h(is)i(ac)m(hiev)m(ed)h(b)m(y)f(the)h(mo)s (dule)e Fk(Phrasify)p Fo(.)275 927 y(The)41 b(\014rst)g(metho)s(d)h(is) f(b)m(y)h(CAR)-8 b(T)42 b(tree.)76 b(If)42 b(parameter)g Fk(Phrase_Method)d Fo(is)i Fk(cart_tree)p Fo(,)i(the)150 1037 y(CAR)-8 b(T)40 b(tree)g(in)f(the)h(v)-5 b(ariable)39 b Fk(phrase_cart_tree)c Fo(is)k(applied)f(to)j(eac)m(h)g(w)m(ord)f(to)g (see)h(if)e(a)h(break)150 1147 y(should)e(b)s(e)h(inserted)g(or)h(not.) 70 b(The)39 b(tree)i(should)d(predict)g(categories)k Fk(BB)d Fo(\(for)h(big)f(break\),)k Fk(B)d Fo(\(for)150 1256 y(break\))28 b(or)g Fk(NB)f Fo(\(for)h(no)g(break\).)40 b(A)28 b(simple)e(example)i(of)g(a)g(tree)h(to)g(predict)d(phrase)i (breaks)f(is)g(giv)m(en)h(in)150 1366 y(the)j(\014le)e(`)p Fk(lib/phrase.scm)p Fo('.)390 1505 y Fk(\(set!)46 b (simple_phrase_cart_tree)390 1608 y(')390 1712 y (\(\(R:Token.parent.punc)c(in)47 b(\("?")g(".")g(":"\)\))485 1816 y(\(\(BB\)\))485 1920 y(\(\(R:Token.parent.punc)42 b(in)48 b(\("'")e("\\"")h(",")g(";"\)\))533 2023 y(\(\(B\)\))533 2127 y(\(\(n.name)f(is)h(0\))581 2231 y(\(\(BB\)\))581 2335 y(\(\(NB\)\)\)\)\)\))275 2479 y Fo(The)39 b(second)i(and)e(more)i (elab)s(orate)f(metho)s(d)g(of)h(phrase)e(break)h(prediction)f(is)g (used)g(when)h(the)150 2589 y(parameter)33 b Fk(Phrase_Method)c Fo(is)j Fk(prob_models)p Fo(.)45 b(In)32 b(this)g(case)i(a)f (probabilistic)d(mo)s(del)h(using)h(prob-)150 2699 y(abilities)38 b(of)i(a)g(break)g(after)h(a)f(w)m(ord)g(based)f(on)h(the)h(part)e(of)i (sp)s(eec)m(h)f(of)g(the)g(neigh)m(b)s(ouring)d(w)m(ords)150 2808 y(and)29 b(the)h(previous)e(w)m(ord.)40 b(This)27 b(is)i(com)m(bined)g(with)f(a)i(ngram)f(mo)s(del)f(of)i(the)g (distribution)c(of)j(breaks)150 2918 y(and)g(non-breaks)g(using)g(a)h (Viterbi)e(deco)s(der)h(to)i(\014nd)d(the)i(optimal)e(phrasing)g(of)i (the)g(utterance.)41 b(The)150 3027 y(results)25 b(using)g(this)g(tec)m (hnique)h(are)h(go)s(o)s(d)f(and)f(ev)m(en)i(sho)m(w)f(go)s(o)s(d)g (results)f(on)i(unseen)e(data)i(from)f(other)150 3137 y(researc)m(hers')38 b(phrase)f(break)g(tests)h(\(see)h Fj(blac)m(k97b)r Fo(\).)62 b(Ho)m(w)m(ev)m(er)40 b(sometimes)d(it)g(do) s(es)g(sound)f(wrong,)150 3247 y(suggesting)30 b(there)h(is)e(still)g (further)g(w)m(ork)h(required.)275 3391 y(P)m(arameters)39 b(for)g(this)e(mo)s(dule)g(are)i(set)g(through)f(the)h(feature)g(list)e (held)h(in)f(the)i(v)-5 b(ariable)37 b Fk(phr_)150 3501 y(break_params)p Fo(,)30 b(and)h(example)h(of)g(whic)m(h)f(for)h (English)e(is)h(set)i(in)e Fk(english_phr_break_param)o(s)26 b Fo(in)150 3610 y(the)31 b(\014le)e(`)p Fk(lib/phrase.scm)p Fo('.)37 b(The)30 b(features)h(names)f(and)g(meaning)g(are)150 3785 y Fk(pos_ngram_name)630 3895 y Fo(The)25 b(name)g(of)h(a)g(loaded) f(ngram)g(that)h(giv)m(es)g(probabilit)m(y)d(distributions)f(of)j(B/NB) i(giv)m(en)630 4004 y(previous,)i(curren)m(t)h(and)g(next)h(part)f(of)g (sp)s(eec)m(h.)150 4174 y Fk(pos_ngram_filename)630 4283 y Fo(The)g(\014lename)f(con)m(taining)h Fk(pos_ngram_name)p Fo(.)150 4453 y Fk(break_ngram_name)630 4562 y Fo(The)36 b(name)g(of)h(a)f(loaded)g(ngram)g(of)g(B/NB)i(distributions.)55 b(This)34 b(is)h(t)m(ypically)h(a)g(6)h(or)630 4672 y(7-gram.)150 4842 y Fk(break_ngram_filename)630 4951 y Fo(The)30 b(\014lename)f(con) m(taining)h Fk(break_ngram_name)p Fo(.)150 5121 y Fk(gram_scale_s)630 5230 y Fo(A)38 b(w)m(eigh)m(ting)g(factor)i(for)e(breaks)g(in)e(the)j (break/non-break)f(ngram.)64 b(Increasing)38 b(the)630 5340 y(v)-5 b(alue)30 b(insertes)f(more)i(breaks,)f(reducing)f(it)h (causes)h(less)f(breaks)g(to)h(b)s(e)f(inserted.)p eop %%Page: 82 84 82 83 bop 150 -116 a Fo(82)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(phrase_type_tree) 630 408 y Fo(A)42 b(CAR)-8 b(T)41 b(tree)h(that)g(is)e(used)h(to)h (predict)e(t)m(yp)s(e)i(of)f(break)h(giv)m(en)f(the)h(predict)e(break) 630 518 y(p)s(osition.)66 b(This)37 b(\(rather)j(crude\))f(tec)m (hnique)g(is)f(curren)m(t)i(used)e(to)i(distinguish)c(ma)5 b(jor)630 628 y(and)30 b(minor)f(breaks.)150 787 y Fk(break_tags)630 897 y Fo(A)h(list)g(of)g(the)h(break)f(tags)h(\(t)m(ypically)f Fk(\(B)g(NB\))p Fo(\).)150 1056 y Fk(pos_map)144 b Fo(A)24 b(part)g(of)g(sp)s(eec)m(h)g(map)g(used)f(to)h(map)g(the)g Fk(pos)f Fo(feature)i(of)f(w)m(ords)f(in)m(to)h(a)h(smaller)d(tagset) 630 1166 y(used)30 b(b)m(y)g(the)g(phrase)g(predictor.)p eop %%Page: 83 85 83 84 bop 150 -116 a Fo(Chapter)30 b(18:)41 b(In)m(tonation)2585 b(83)150 299 y Fl(18)80 b(In)l(tonation)275 519 y Fo(A)27 b(n)m(um)m(b)s(er)f(of)i(di\013eren)m(t)e(in)m(tonation)h(mo)s(dules)f (are)i(a)m(v)-5 b(ailable)26 b(with)h(v)-5 b(arying)26 b(lev)m(els)h(of)h(con)m(trol.)40 b(In)150 629 y(general)30 b(in)m(tonation)g(is)g(generated)h(in)e(t)m(w)m(o)j(steps.)199 760 y(1.)61 b(Prediction)29 b(of)h(accen)m(ts)j(\(and/or)d(end)g (tones\))h(on)f(a)h(p)s(er)f(syllable)e(basis.)199 892 y(2.)61 b(Prediction)29 b(of)h(F0)i(target)f(v)-5 b(alues,)30 b(this)g(m)m(ust)g(b)s(e)g(done)g(after)h(durations)e(are)h(predicted.) 275 1046 y(Re\015ecting)37 b(this)f(split)g(there)i(are)g(t)m(w)m(o)g (main)f(in)m(tonation)g(mo)s(dules)e(that)j(call)f(sub-mo)s(dules)e (de-)150 1156 y(p)s(ending)f(on)i(the)g(desired)f(in)m(tonation)h (metho)s(ds.)58 b(The)35 b Fk(Intonation)f Fo(and)i Fk(Int_Targets)d Fo(mo)s(dules)150 1265 y(are)25 b(de\014ned)f(in)f(Lisp)g(\(`)p Fk(lib/intonation.scm)p Fo('\))e(and)j(call)g(sub-mo)s(dules)e(whic)m (h)i(are)h(\(so)g(far\))g(in)f(C)p Fk(++)p Fo(.)150 1514 y Fn(18.1)68 b(Default)46 b(in)l(tonation)275 1704 y Fo(This)39 b(is)h(the)i(simplest)d(form)i(of)h(in)m(tonation)f(and)f (o\013ers)i(the)f(mo)s(dules)f Fk(Intonation_Default)150 1814 y Fo(and)52 b Fk(Intonation_Targets_Defa)o(ult)o Fo(.)101 b(The)51 b(\014rst)h(of)g(whic)m(h)f(actually)h(do)s(es)g (nothing)f(at)i(all.)150 1923 y Fk(Intonation_Targets_Defau)o(lt)30 b Fo(simply)k(creates)k(a)f(target)h(at)f(the)g(start)g(of)g(the)f (utterance,)k(and)150 2033 y(one)31 b(at)g(the)g(end.)41 b(The)30 b(v)-5 b(alues)30 b(of)g(whic)m(h,)g(b)m(y)h(default)e(are)i (130)h(Hz)f(and)f(110)i(Hz.)42 b(These)30 b(v)-5 b(alues)30 b(ma)m(y)150 2143 y(b)s(e)41 b(set)h(through)f(the)h(parameter)g Fk(duffint_params)c Fo(for)j(example)g(the)h(follo)m(wing)e(will)f (general)j(a)150 2252 y(monotone)31 b(at)g(150Hz.)390 2378 y Fk(\(set!)46 b(duffint_params)e('\(\(start)i(150\))g(\(end)h (150\)\)\))390 2482 y(\(Parameter.set)d('Int_Method)h('DuffInt\))390 2586 y(\(Parameter.set)f('Int_Target_Method)f(Int_Targets_Default\))150 2835 y Fn(18.2)68 b(Simple)46 b(in)l(tonation)275 3024 y Fo(This)24 b(mo)s(dule)g(uses)h(the)h(CAR)-8 b(T)26 b(tree)g(in)f Fk(int_accent_cart_tree)20 b Fo(to)27 b(predict)d(if)h (eac)m(h)i(syllable)d(is)150 3134 y(accen)m(ted)j(or)e(not.)40 b(A)25 b(predicted)f(v)-5 b(alue)25 b(of)g Fk(NONE)f Fo(means)h(no)h(accen)m(t)h(is)d(generated)i(b)m(y)f(the)h(corresp)s (ond-)150 3244 y(ing)32 b Fk(Int_Targets_Simple)c Fo(function.)48 b(An)m(y)33 b(other)g(predicted)f(v)-5 b(alue)33 b(will)d(cause)k(a)f (`hat')h(accen)m(t)h(to)150 3353 y(b)s(e)30 b(put)f(on)i(that)g (syllable.)275 3485 y(A)i(default)g Fk(int_accent_cart_tree)28 b Fo(is)33 b(a)m(v)-5 b(ailable)33 b(in)f(the)i(v)-5 b(alue)33 b Fk(simple_accent_cart_tree)150 3595 y Fo(in)h(`)p Fk(lib/intonation.scm)p Fo('.)51 b(It)36 b(simply)d(predicts)h(accen)m (ts)j(on)e(the)h(stressed)f(syllables)e(on)i(con)m(ten)m(t)150 3704 y(w)m(ords)c(in)g(p)s(oly-syllabic)e(w)m(ords,)j(and)f(on)h(the)g (only)f(syllable)f(in)g(single)h(syllable)e(con)m(ten)m(t)34 b(w)m(ords.)45 b(Its)150 3814 y(form)30 b(is)390 3940 y Fk(\(set!)46 b(simple_accent_cart_tree)438 4043 y(')485 4147 y(\(\(R:SylStructure.parent.gp)o(os)c(is)47 b(content\))533 4251 y(\(\(stress)f(is)h(1\))581 4355 y(\(\(Accented\)\))581 4459 y(\(\(position_type)d(is)j(single\))629 4562 y(\(\(Accented\)\)) 629 4666 y(\(\(NONE\)\)\)\))533 4770 y(\(\(NONE\)\)\)\))275 4902 y Fo(The)21 b(function)g Fk(Int_Targets_Simple)c Fo(uses)22 b(parameters)g(in)f(the)h(a-list)f(in)g(v)-5 b(ariable)21 b Fk(int_simple_)150 5011 y(params)p Fo(.)54 b(There)35 b(are)h(t)m(w)m(o)h(in)m(teresting)d(parameters)i Fk(f0_mean)e Fo(whic)m(h)g(giv)m(es)i(the)f(mean)h(F0)g(for)f(this)150 5121 y(sp)s(eak)m(er)23 b(\(default)f(110)i(Hz\))f(and)f Fk(f0_std)f Fo(is)g(the)i(standard)f(deviation)f(of)i(F0)g(for)f(this)g (sp)s(eak)m(er)g(\(default)150 5230 y(25)36 b(Hz\).)56 b(This)34 b(second)h(v)-5 b(alue)35 b(is)f(used)g(to)i(determine)f(the) g(amoun)m(t)h(of)f(v)-5 b(ariation)35 b(to)h(b)s(e)e(put)h(in)f(the)150 5340 y(generated)d(targets.)p eop %%Page: 84 86 84 85 bop 150 -116 a Fo(84)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(F)-8 b(or)39 b(eac)m(h)i(Phrase)d(in)g(the)h(giv)m(en)h(utterance)g(an)f(F0) g(is)f(generated)j(starting)d(at)i Fk(f0_code+\(f0_)150 408 y(std*0.6\))24 b Fo(and)h(declines)f Fk(f0_std)g Fo(Hz)i(o)m(v)m(er)i(the)e(length)f(of)h(the)g(phrase)f(un)m(til)f(the) i(last)f(syllable)f(whose)150 518 y(end)33 b(is)g(set)h(to)g Fk(f0_code-f0_std)p Fo(.)47 b(An)33 b(imaginary)f(line)g(called)h Fk(baseline)e Fo(is)i(dra)m(wn)g(from)g(start)h(to)150 628 y(the)29 b(end)g(\(min)m(us)f(the)h(\014nal)f(extra)i(fall\),)e(F) -8 b(or)30 b(eac)m(h)g(syllable)d(that)j(is)e(accen)m(ted)j(\(i.e.)41 b(has)29 b(an)g(In)m(tEv)m(en)m(t)150 737 y(related)k(to)h(it\))f (three)g(targets)i(are)f(added.)48 b(One)33 b(at)h(the)f(start,)i(one)e (in)f(mid)g(v)m(o)m(w)m(el,)j(and)d(one)i(at)g(the)150 847 y(end.)40 b(The)28 b(start)i(and)e(end)g(are)h(at)h(p)s(osition)d Fk(baseline)g Fo(Hz)i(\(as)h(declined)d(for)i(that)g(syllable\))e(and)i (the)150 956 y(mid)g(v)m(o)m(w)m(el)i(is)f(set)h(to)g Fk(baseline+f0_std)p Fo(.)275 1090 y(Note)39 b(this)d(mo)s(del)h(is)g (not)h(supp)s(osed)d(to)k(b)s(e)e(complex)g(or)h(comprehensiv)m(e)f (but)g(it)g(o\013ers)h(a)h(v)m(ery)150 1199 y(quic)m(k)28 b(and)g(easy)h(w)m(a)m(y)g(to)h(generate)g(something)e(other)g(than)g (a)h(\014xed)f(line)f(F0.)41 b(Something)27 b(similar)f(to)150 1309 y(this)33 b(has)g(b)s(een)g(for)g(Spanish)f(and)h(W)-8 b(elsh)33 b(without)g(\(to)s(o)i(man)m(y\))f(p)s(eople)e(complaining.) 49 b(Ho)m(w)m(ev)m(er)35 b(it)150 1418 y(is)29 b(not)i(designed)e(as)i (a)g(serious)e(in)m(tonation)h(mo)s(dule.)150 1672 y Fn(18.3)68 b(T)-11 b(ree)45 b(in)l(tonation)275 1864 y Fo(This)25 b(mo)s(dule)h(is)g(more)h(\015exible.)38 b(Tw)m(o)27 b(di\013eren)m(t)g(CAR)-8 b(T)27 b(trees)h(can)f(b)s(e)g (used)f(to)i(predict)f(`accen)m(ts')150 1973 y(and)g(`endtones'.)40 b(Although)26 b(at)i(presen)m(t)f(this)f(mo)s(dule)f(is)i(used)f(for)h (an)g(implemen)m(tation)f(of)h(the)g(T)-8 b(oBI)150 2083 y(in)m(tonation)30 b(lab)s(elling)d(system)k(it)e(could)h(b)s(e)g(used) f(for)h(man)m(y)h(di\013eren)m(t)f(t)m(yp)s(es)g(of)h(in)m(tonation)e (system.)275 2216 y(The)d(target)j(mo)s(dule)d(for)h(this)g(metho)s(d)f (uses)h(a)h(Linear)e(Regression)i(mo)s(del)e(to)i(predict)e(start)i (mid-)150 2326 y(v)m(o)m(w)m(el)i(and)e(end)g(targets)i(for)e(eac)m(h)i (syllable)d(using)g(arbitrarily)f(sp)s(eci\014ed)h(features.)40 b(This)27 b(follo)m(ws)h(the)150 2435 y(w)m(ork)h(describ)s(ed)f(in)g Fj(blac)m(k96)p Fo(.)41 b(The)29 b(LR)g(mo)s(dels)f(are)i(held)e(as)h (as)h(describ)s(ed)d(b)s(elo)m(w)i(See)g(Section)g(25.5)150 2545 y([Linear)e(regression],)h(page)g(123.)41 b(Three)28 b(mo)s(dels)e(are)i(used)f(in)f(the)i(v)-5 b(ariables)26 b Fk(f0_lr_start)p Fo(,)g Fk(f0_lr_)150 2654 y(mid)j Fo(and)h Fk(f0_lr_end)p Fo(.)150 2908 y Fn(18.4)68 b(Tilt)46 b(in)l(tonation)275 3099 y Fo(Tilt)28 b(description)h(to)i(b)s(e)f (inserted.)150 3353 y Fn(18.5)68 b(General)46 b(in)l(tonation)275 3545 y Fo(As)33 b(there)g(seems)h(to)g(b)s(e)e(a)i(n)m(um)m(b)s(er)e (of)h(in)m(tonation)g(theories)g(that)h(predict)e(F0)i(con)m(tours)g(b) m(y)f(rule)150 3654 y(\(p)s(ossibly)24 b(using)g(trained)i (parameters\))h(this)e(mo)s(dule)f(aids)i(the)g(external)g(sp)s (eci\014cation)f(of)h(suc)m(h)g(rules)150 3764 y(for)h(a)h(wide)e (class)i(of)f(in)m(tonation)g(theories)g(\(through)h(primarily)c(those) k(that)g(migh)m(t)f(b)s(e)g(referred)f(to)j(as)150 3873 y(the)k(T)-8 b(oBI)34 b(group\).)49 b(This)32 b(is)g(designed)g(to)i(b) s(e)f(m)m(ulti-lingual)c(and)k(o\013er)g(a)h(quic)m(k)f(w)m(a)m(y)h(to) g(p)s(ort)f(often)150 3983 y(pre-existing)c(rules)g(in)m(to)h(F)-8 b(estiv)j(al)31 b(without)e(writing)g(new)h(C)p Fk(++)f Fo(co)s(de.)275 4116 y(The)g(accen)m(t)j(prediction)d(part)h(uses)f (the)i(same)f(mec)m(hanisms)f(as)i(the)f(Simple)e(in)m(tonation)h (metho)s(d)150 4226 y(describ)s(ed)36 b(ab)s(o)m(v)m(e,)k(a)f(decision) d(tree)i(for)g(accen)m(t)h(prediction,)f(th)m(us)f(the)h(tree)g(in)f (the)h(v)-5 b(ariable)36 b Fk(int_)150 4335 y(accent_cart_tree)26 b Fo(is)j(used)h(on)g(eac)m(h)i(syllable)c(to)j(predict)e(an)i Fk(IntEvent)p Fo(.)275 4469 y(The)k(target)j(part)e(calls)f(a)i(sp)s (eci\014ed)d(Sc)m(heme)i(function)f(whic)m(h)g(returns)g(a)h(list)f(of) h(target)i(p)s(oin)m(ts)150 4578 y(for)d(a)h(syllable.)53 b(In)35 b(this)f(w)m(a)m(y)i(an)m(y)g(arbitrary)e(tests)i(ma)m(y)g(b)s (e)e(done)h(to)h(pro)s(duce)f(the)g(target)i(p)s(oin)m(ts.)150 4688 y(F)-8 b(or)34 b(example)e(here)h(is)f(a)i(function)d(whic)m(h)h (returns)g(three)h(target)i(p)s(oin)m(ts)d(for)g(eac)m(h)i(syllable)d (with)h(an)150 4797 y Fk(IntEvent)c Fo(related)i(to)i(it)d(\(i.e.)41 b(accen)m(ted)33 b(syllables\).)390 4925 y Fk(\(define)46 b(\(targ_func1)f(utt)h(syl\))485 5029 y("\(targ_func1)f(UTT)i (STREAMITEM\))390 5132 y(Returns)f(a)h(list)g(of)g(targets)f(for)h(the) g(given)f(syllable.")485 5236 y(\(let)h(\(\(start)f(\(item.feat)f(syl)i ('syllable_start\)\))772 5340 y(\(end)f(\(item.feat)f(syl)i ('syllable_end\)\)\))p eop %%Page: 85 87 85 86 bop 150 -116 a Fo(Chapter)30 b(18:)41 b(In)m(tonation)2585 b(85)581 299 y Fk(\(if)47 b(\(equal?)f(\(item.feat)f(syl)i ("R:Intonation.daughter1)o(.na)o(me"\))41 b("Accented"\))772 403 y(\(list)820 506 y(\(list)46 b(start)g(110\))820 610 y(\(list)g(\(/)h(\(+)g(start)g(end\))f(2.0\))h(140\))820 714 y(\(list)f(end)h(100\)\)\)\)\))275 854 y Fo(This)22 b(function)h(ma)m(y)i(b)s(e)f(iden)m(ti\014ed)f(as)i(the)f(function)f (to)j(call)d(b)m(y)i(the)f(follo)m(wing)f(setup)h(parameters.)390 989 y Fk(\(Parameter.set)44 b('Int_Method)h('General\))390 1093 y(\(Parameter.set)f('Int_Target_Method)f(Int_Targets_General\))390 1300 y(\(set!)j(int_general_params)676 1404 y(\(list)724 1508 y(\(list)g('targ_func)f(targ_func1\)\)\))150 1780 y Fn(18.6)68 b(Using)46 b(T)-11 b(oBI)275 1978 y Fo(An)75 b(example)g(implemen)m(tation)g(of)h(a)g(T)-8 b(oBI)77 b(to)f(F0)h(target)g(mo)s(dule)d(is)h(included)e(in)150 2088 y(`)p Fk(lib/tobi_rules.scm)p Fo(')44 b(based)k(on)g(the)h(rules)e (describ)s(ed)f(in)h Fj(jilk)-5 b(a96)p Fo(.)95 b(This)46 b(uses)i(the)h(general)150 2197 y(in)m(tonation)26 b(metho)s(d)f (discussed)f(in)h(the)i(previous)d(section.)40 b(This)24 b(is)h(designed)g(to)i(b)s(e)f(useful)e(to)j(p)s(eople)150 2307 y(who)j(are)h(exp)s(erimen)m(ting)d(with)h(T)-8 b(oBI)32 b(\()p Fj(silv)m(erman92)7 b Fo(\),)30 b(rather)h(than)f (general)g(text)i(to)f(sp)s(eec)m(h.)275 2447 y(T)-8 b(o)33 b(use)g(this)g(metho)s(d)g(y)m(ou)g(need)g(to)i(load)d(`)p Fk(lib/tobi_rules.scm)p Fo(')d(and)k(call)g Fk(setup_tobi_f0_)150 2557 y(method)p Fo(.)71 b(The)41 b(default)f(is)g(in)g(a)h(male's)g (pitc)m(h)f(range,)45 b(i.e.)72 b(for)41 b Fk(voice_rab_diphone)p Fo(.)68 b(Y)-8 b(ou)42 b(can)150 2666 y(c)m(hange)32 b(it)d(for)i(other)f(pitc)m(h)g(ranges)h(b)m(y)f(c)m(hanging)g(the)h (folw)m(oing)e(v)-5 b(ariables.)390 2801 y Fk(\(Parameter.set)44 b('Default_Topline)f(110\))390 2905 y(\(Parameter.set)h ('Default_Start_Baseline)d(87\))390 3009 y(\(Parameter.set)j ('Default_End_Baseline)e(83\))390 3112 y(\(Parameter.set)i ('Current_Topline)f(\(Parameter.get)h('Default_Topline\)\))390 3216 y(\(Parameter.set)g('Valley_Dip)h(75\))275 3356 y Fo(An)33 b(example)h(using)e(this)h(from)g(STML)h(is)f(giv)m(en)h(in) e(`)p Fk(examples/tobi.stml)p Fo('.)47 b(But)34 b(it)g(can)g(also)150 3466 y(b)s(e)j(used)h(from)f(Sc)m(heme.)64 b(F)-8 b(or)39 b(example)f(b)s(efore)f(de\014ning)f(an)i(utterance)h(y)m(ou)f(should)e (execute)k(the)150 3576 y(follo)m(wing)29 b(either)h(from)g(teh)g (command)g(line)f(on)h(in)f(some)i(setup)f(\014le)390 3710 y Fk(\(voice_rab_diphone\))390 3814 y(\(require)46 b('tobi_rules\))390 3918 y(\(setup_tobi_f0_method\))275 4058 y Fo(In)27 b(order)h(to)i(allo)m(w)e(sp)s(eci\014cation)f(of)i (accen)m(ts,)i(tones,)f(and)e(break)g(lev)m(els)g(y)m(ou)h(m)m(ust)g (use)f(an)g(utter-)150 4168 y(ance)j(t)m(yp)s(e)g(that)g(allo)m(ws)e (suc)m(h)h(sp)s(eci\014cation.)40 b(F)-8 b(or)31 b(example)390 4302 y Fk(\(Utterance)438 4406 y(Words)438 4510 y(\(boy)485 4614 y(\(saw)47 b(\(\(accent)f(H*\)\)\))533 4717 y(the)533 4821 y(\(girl)h(\(\(accent)e(H*\)\)\))533 4925 y(in)i(the)533 5029 y(\(park)g(\(\(accent)e(H*\))i(\(tone)f(H-\)\)\))533 5132 y(with)h(the)533 5236 y(\(telescope)e(\(\(accent)h(H*\))h(\(tone)f (H-H\045\)\)\)\)\))p eop %%Page: 86 88 86 87 bop 150 -116 a Fo(86)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(Utterance)45 b(Words)438 403 y(\(The)485 506 y(\(boy)i(\(\(accent)f(L*\)\)\))485 610 y(saw)485 714 y(the)485 818 y(\(girl)h(\(\(accent)e(H*\))i(\(tone)g (L-\)\)\))485 922 y(with)485 1025 y(the)485 1129 y(\(telescope)e (\(\(accent)h(H*\))h(\(tone)f(H-H\045\)\)\)\)\)\))275 1264 y Fo(Y)-8 b(ou)26 b(can)g(displa)m(y)e(the)j(the)f(syn)m(thesized) f(form)h(of)g(these)g(utterance)h(in)e(Xw)m(a)m(v)m(es.)41 b(Start)26 b(an)g(Xw)m(a)m(v)m(es)150 1373 y(and)k(an)g(Xlab)s(eller)e (and)i(call)g(the)g(function)f Fk(display)g Fo(on)h(the)g(syn)m (thesized)g(utterance.)p eop %%Page: 87 89 87 88 bop 150 -116 a Fo(Chapter)30 b(19:)41 b(Duration)2641 b(87)150 299 y Fl(19)80 b(Duration)275 503 y Fo(A)35 b(n)m(um)m(b)s(er)e(of)j(di\013eren)m(t)e(duration)g(prediction)f(mo)s (dules)g(are)j(a)m(v)-5 b(ailable)34 b(with)g(v)-5 b(arying)34 b(lev)m(els)h(of)150 612 y(sophistication.)275 740 y(Segmen)m(tal)42 b(duration)e(prediction)g(is)h(done)g(b)m(y)h(the)g(mo)s(dule)e Fk(Duration)f Fo(whic)m(h)i(calls)f(di\013eren)m(t)150 850 y(actual)31 b(metho)s(ds)e(dep)s(ending)f(on)j(the)f(parameter)h Fk(Duration_Method)p Fo(.)275 978 y(All)26 b(of)i(the)f(follo)m(wing)f (duration)h(metho)s(ds)f(ma)m(y)j(b)s(e)e(further)f(a\013ected)j(b)m(y) f(b)s(oth)e(a)i(global)f(duration)150 1088 y(stretc)m(h)k(and)f(a)h(p)s (er)e(w)m(ord)h(one.)275 1216 y(If)36 b(the)h(parameter)g Fk(Duration_Stretch)c Fo(is)j(set,)j(all)d(absolute)h(durations)e (predicted)h(b)m(y)h(an)m(y)g(of)150 1326 y(the)29 b(duration)f(metho)s (ds)h(describ)s(ed)e(here)i(are)g(m)m(ultiplied)d(b)m(y)j(the)h (parameter's)f(v)-5 b(alue.)40 b(F)-8 b(or)30 b(example)390 1449 y Fk(\(Parameter.set)44 b('Duration_Stretch)f(1.2\))150 1687 y Fo(will)28 b(mak)m(e)j(ev)m(erything)f(sp)s(eak)g(more)h(slo)m (wly)-8 b(.)275 1925 y(In)21 b(addition)f(to)j(the)f(global)f(stretc)m (h)i(metho)s(d,)h(if)d(the)h(feature)g Fk(dur_stretch)d Fo(on)j(the)g(related)g Fk(Token)150 2034 y Fo(is)j(set)i(it)f(will)d (also)k(b)s(e)e(used)h(as)g(a)h(m)m(ultiplicativ)m(e)d(factor)j(on)f (the)h(duration)d(pro)s(duced)h(b)m(y)h(the)g(selected)150 2144 y(metho)s(d.)71 b(That)40 b(is)g Fk(R:Syllable.parent.paren)o (t.R:)o(Tok)o(en.p)o(aren)o(t.d)o(ur_s)o(tret)o(ch)p Fo(.)65 b(There)40 b(is)150 2253 y(a)e(lisp)d(function)h Fk(duration_find_stretch)31 b Fo(w)m(c)m(hi)37 b(will)e(return)h(the)i (com)m(bined)e(gloab)s(el)h(and)g(lo)s(cal)150 2363 y(duration)29 b(stretc)m(h)i(factor)h(for)e(a)g(giv)m(en)h(segmen)m(t)g(item.)275 2491 y(Note)k(these)g(global)f(and)f(lo)s(cal)h(metho)s(ds)g(of)g (a\013ecting)h(the)g(duration)e(pro)s(duced)f(b)m(y)j(mo)s(dels)e(are) 150 2601 y(crude)44 b(and)f(should)g(b)s(e)g(considered)g(hac)m(ks.)84 b(Uniform)42 b(mo)s(di\014cation)h(of)h(durations)f(is)g(not)i(what)150 2711 y(happ)s(ens)27 b(in)h(real)h(sp)s(eec)m(h.)41 b(These)29 b(parameters)g(are)h(t)m(ypically)e(used)g(when)h(the)g(underlying)d (duration)150 2820 y(metho)s(d)k(is)f(lac)m(king)h(in)f(some)i(w)m(a)m (y)-8 b(.)42 b(Ho)m(w)m(ev)m(er)33 b(these)e(can)f(b)s(e)g(useful.)275 2949 y(Note)h(it)f(is)g(quite)f(easy)i(to)g(implemen)m(t)e(new)h (duration)f(metho)s(ds)h(in)f(Sc)m(heme)i(directly)-8 b(.)150 3188 y Fn(19.1)68 b(Default)46 b(durations)275 3374 y Fo(If)32 b(parameter)g Fk(Duration_Method)d Fo(is)i(set)i(to)g Fk(Default)p Fo(,)f(the)g(simplest)f(duration)g(mo)s(del)g(is)g(used.) 150 3484 y(All)d(segmen)m(ts)j(are)f(100)g(milliseconds)d(\(this)h(can) i(b)s(e)f(mo)s(di\014ed)e(b)m(y)j Fk(Duration_Stretch)p Fo(,)25 b(and/or)30 b(the)150 3593 y(lo)s(calised)f(T)-8 b(ok)m(en)31 b(related)f Fk(dur_stretch)d Fo(feature\).)150 3832 y Fn(19.2)68 b(Av)l(erage)46 b(durations)275 4019 y Fo(If)33 b(parameter)h Fk(Duration_Method)29 b Fo(is)k(set)h(to)g Fk(Averages)d Fo(then)j(segmen)m(tal)g(durations)e(are)i(set)g(to)150 4128 y(their)24 b(a)m(v)m(erages.)41 b(The)24 b(v)-5 b(ariable)23 b Fk(phoneme_durations)d Fo(should)j(b)s(e)h(an)g(a-list)g (of)h(phones)e(and)h(a)m(v)m(erages)150 4238 y(in)29 b(seconds.)41 b(The)30 b(\014le)f(`)p Fk(lib/mrpa_durs.scm)p Fo(')d(has)k(an)h(example)f(for)g(the)g(mrpa)g(phoneset.)275 4366 y(If)h(a)i(segmen)m(t)g(is)f(found)f(that)i(do)s(es)f(not)g(app)s (ear)g(in)f(the)h(list)f(a)i(default)e(duration)g(of)i(0.1)g(seconds) 150 4476 y(is)c(assigned,)h(and)g(a)h(w)m(arning)e(message)i (generated.)150 4715 y Fn(19.3)68 b(Klatt)47 b(durations)275 4902 y Fo(If)32 b(parameter)i Fk(Duration_Method)29 b Fo(is)k(set)h(to)g Fk(Klatt)e Fo(the)h(duration)f(rules)g(from)h(the)g (Klatt)h(b)s(o)s(ok)150 5011 y(\()p Fj(allen87)p Fo(,)52 b(c)m(hapter)47 b(9\).)92 b(This)45 b(metho)s(d)h(requires)g(minim)m (um)e(and)j(inheren)m(t)f(durations)f(for)i(eac)m(h)150 5121 y(phoneme)22 b(in)f(the)i(phoneset.)38 b(This)21 b(information)g(is)g(held)g(in)g(the)i(v)-5 b(ariable)21 b Fk(duration_klatt_params)p Fo(.)150 5230 y(Eac)m(h)32 b(mem)m(b)s(er)f(of)h(this)f(list)f(is)g(a)i(three-tuple,)g(of)g(phone) f(name,)h(inheren)m(t)f(duration)f(and)h(minim)m(um)150 5340 y(duration.)39 b(An)30 b(example)g(for)g(the)h(mrpa)f(phoneset)g (is)f(in)g(`)p Fk(lib/klatt_durs.scm)p Fo('.)p eop %%Page: 88 90 88 89 bop 150 -116 a Fo(88)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(19.4)68 b(CAR)-11 b(T)45 b(durations)275 491 y Fo(Tw)m(o)24 b(v)m(ery)g (similar)e(metho)s(ds)h(of)h(duration)f(prediction)f(b)m(y)i(CAR)-8 b(T)24 b(tree)h(are)f(supp)s(orted.)37 b(The)23 b(\014rst,)150 601 y(used)k(when)h(parameter)h Fk(Duration_Method)24 b Fo(is)j Fk(Tree)g Fo(simply)f(predicts)h(durations)g(directly)g(for)h (eac)m(h)150 711 y(segmen)m(t.)42 b(The)30 b(tree)h(is)e(set)i(in)e (the)i(v)-5 b(ariable)29 b Fk(duration_cart_tree)p Fo(.)275 845 y(The)43 b(second,)k(whic)m(h)c(seems)h(to)g(giv)m(e)h(b)s(etter)e (results,)k(is)42 b(used)h(when)g(parameter)h Fk(Duration_)150 955 y(Method)20 b Fo(is)h Fk(Tree_ZScores)p Fo(.)34 b(In)21 b(this)g(second)g(mo)s(del)g(the)h(tree)g(predicts)f(zscores)h(\(n)m (um)m(b)s(er)f(of)h(standard)150 1064 y(deviations)29 b(from)g(the)g(mean\))h(rather)g(than)f(duration)f(directly)-8 b(.)40 b(\(This)28 b(follo)m(ws)h Fj(campb)s(ell91)p Fo(,)g(but)f(w)m(e)150 1174 y(don't)e(deal)f(in)g(syllable)f(durations) g(here.\))39 b(This)24 b(metho)s(d)i(requires)e(means)i(and)f(standard) g(deviations)150 1284 y(for)39 b(eac)m(h)h(phone.)65 b(The)39 b(v)-5 b(ariable)38 b Fk(duration_cart_tree)33 b Fo(should)k(con)m(tain)j(the)f(zscore)h(prediction)150 1393 y(tree)g(and)f(the)g(v)-5 b(ariable)38 b Fk(duration_ph_info)d Fo(should)j(con)m(tain)h(a)h(list)e(of)i(phone,)h(mean)e(duration,)150 1503 y(and)30 b(standard)f(deviation)h(for)g(eac)m(h)h(phone)f(in)f (the)i(phoneset.)275 1637 y(An)25 b(example)h(tree)h(trained)e(from)h (460)i(sen)m(tences)f(sp)s(ok)m(en)f(b)m(y)g(Gordon)g(is)f(in)g(`)p Fk(lib/gswdurtreeZ)p Fo('.)150 1747 y(Phone)30 b(means)g(and)g (standard)g(deviations)f(are)i(in)e(`)p Fk(lib/gsw_durs.scm)p Fo('.)275 1881 y(After)h(prediction)f(the)h(segmen)m(tal)h(duration)e (is)h(calculated)g(b)m(y)g(the)h(simple)d(form)m(ula)390 2010 y Fk(duration)46 b(=)h(mean)g(+)g(\(zscore)f(*)h(standard)f (deviation\))275 2144 y Fo(F)-8 b(or)40 b(some)f(other)h(duration)e(mo) s(dels)g(that)i(a\013ect)h(an)e(inheren)m(t)g(duration)f(b)m(y)h(some)h (factor)g(this)150 2254 y(metho)s(d)31 b(has)h(b)s(een)g(used.)45 b(If)31 b(the)h(tree)h(predicts)e(factors)i(rather)f(than)g(zscores)h (and)e(the)h Fk(duration_)150 2364 y(ph_info)37 b Fo(en)m(tries)i(are)h (phone,)h(0.0,)h(inheren)m(t)c(duration.)66 b(The)39 b(ab)s(o)m(v)m(e)h(form)m(ula)f(will)d(generate)41 b(the)150 2473 y(desired)h(result.)79 b(Klatt)43 b(and)g(Klatt-lik)m(e)g(rules)f (can)i(b)s(e)f(implemen)m(ted)e(in)i(the)g(this)g(w)m(a)m(y)h(without) 150 2583 y(adding)29 b(a)i(new)f(metho)s(d.)p eop %%Page: 89 91 89 90 bop 150 -116 a Fo(Chapter)30 b(20:)41 b(UniSyn)29 b(syn)m(thesizer)2239 b(89)150 299 y Fl(20)80 b(UniSyn)54 b(syn)l(thesizer)275 545 y Fo(Since)28 b(1.3)i(a)g(new)f(general)g(syn) m(thesizer)g(mo)s(dule)f(has)h(b)s(een)g(included.)37 b(This)28 b(designed)g(to)i(replace)150 655 y(the)g(older)f(diphone)f (syn)m(thesizer)h(describ)s(ed)f(in)g(the)i(next)g(c)m(hapter.)41 b(A)30 b(redesign)f(w)m(as)h(made)g(in)e(order)150 764 y(to)38 b(ha)m(v)m(e)f(a)h(generalized)e(w)m(a)m(v)m(eform)i(syn)m (thesizer,)g(singla)e(pro)s(cessing)f(mo)s(dule)g(that)j(could)e(b)s(e) g(used)150 874 y(ev)m(en)24 b(when)d(the)j(units)d(b)s(eing)g (concatenated)k(are)f(not)f(diphones.)36 b(Also)22 b(at)i(this)e(stage) i(the)f(full)e(diphone)150 984 y(\(or)31 b(other\))g(database)g (pre-pro)s(cessing)e(functions)g(w)m(ere)i(added)e(to)i(the)g(Sp)s(eec) m(h)f(T)-8 b(o)s(ol)30 b(library)-8 b(.)150 1251 y Fn(20.1)68 b(UniSyn)45 b(database)h(format)275 1448 y Fo(The)40 b(Unisyn)g(syn)m(thesis)g(mo)s(dules)g(can)h(use)g(databases)h(in)e(t)m (w)m(o)j(basic)e(formats,)j Fi(sep)-5 b(ar)g(ate)51 b Fo(and)150 1557 y Fi(gr)-5 b(oup)g(e)g(d)p Fo(.)50 b(Separate)34 b(is)e(when)f(all)h(\014les)g(\(signal,)h(pitc)m(hmark)f(and)g(co)s (e\016cien)m(t)i(\014les\))e(are)h(accessed)h(in-)150 1667 y(dividually)29 b(during)h(syn)m(thesis.)47 b(This)31 b(is)h(the)h(standard)f(use)g(during)f(databse)i(dev)m(elopmen)m(t.)49 b(Group)150 1777 y(format)28 b(is)e(when)h(a)h(database)g(is)f (collected)h(together)h(in)m(to)f(a)g(single)e(sp)s(ecial)g(\014le)h (con)m(taining)g(all)f(infor-)150 1886 y(mation)d(necessary)h(for)f(w)m (a)m(v)m(eform)h(syn)m(thesis.)37 b(This)22 b(format)h(is)g(designed)f (to)i(b)s(e)e(used)h(for)g(distribution)150 1996 y(and)30 b(general)g(use)g(of)h(the)f(database.)275 2134 y(A)g(database)h (should)d(consist)i(of)g(a)h(set)f(of)g(w)m(a)m(v)m(eforms,)i(\(whic)m (h)d(ma)m(y)i(b)s(e)f(translated)f(in)m(to)i(a)f(set)h(of)150 2244 y(co)s(e\016cien)m(ts)e(if)f(the)h(desired)e(the)i(signal)e(pro)s (cessing)g(metho)s(d)i(requires)e(it\),)i(a)g(set)g(of)g(pitc)m(hmarks) f(and)150 2354 y(an)j(index.)43 b(The)31 b(pitc)m(hmarks)g(are)h (necessary)g(as)f(most)h(of)g(our)f(curren)m(t)g(signal)f(pro)s (cessing)h(are)h(pitc)m(h)150 2463 y(sync)m(hronous.)150 2695 y Ff(20.1.1)63 b(Generating)42 b(pitc)m(hmarks)275 2892 y Fo(Pitc)m(hmarks)49 b(ma)m(y)i(b)s(e)e(deriv)m(ed)h(from)f (laryngograph)h(\014les)f(using)g(the)h(our)g(pro)m(v)m(ed)g(program) 150 3002 y(`)p Fk(pitchmark)p Fo(')41 b(distributed)f(with)i(the)h(sp)s (eec)m(h)g(to)s(ols.)78 b(The)43 b(actual)g(parameters)h(to)f(this)f (program)150 3111 y(are)e(still)d(a)j(bit)f(of)g(an)h(art)g(form.)67 b(The)39 b(\014rst)g(ma)5 b(jor)40 b(issue)e(is)h(whic)m(h)f(direction) g(the)i(lar)f(\014les.)67 b(W)-8 b(e)150 3221 y(ha)m(v)m(e)32 b(seen)g(b)s(oth,)f(though)g(it)g(do)s(es)f(seem)i(to)g(b)s(e)f(CSTR's) f(ones)h(are)h(most)f(often)h(upside)d(do)m(wn)i(while)150 3330 y(others)e(\(e.g.)41 b(OGI's\))29 b(are)g(the)f(righ)m(t)g(w)m(a)m (y)i(up.)39 b(The)28 b Fk(-inv)f Fo(argumen)m(t)i(to)g(`)p Fk(pitchmark)p Fo(')e(is)g(sp)s(eci\014cally)150 3440 y(pro)m(vided)i(to)j(cater)g(for)e(this.)41 b(There)30 b(other)h(issues)f(in)f(getting)j(the)f(pitc)m(hmarks)f(aligned.)40 b(The)31 b(basic)150 3550 y(command)f(for)g(generating)h(pitc)m(hmarks) e(is)390 3682 y Fk(pitchmark)45 b(-inv)i(lar/file001.lar)d(-o)j (pm/file001.pm)d(-otype)i(est)h(\\)629 3786 y(-min)f(0.005)h(-max)f (0.012)h(-fill)f(-def)h(0.01)f(-wave_end)275 3925 y Fo(The)28 b(`)p Fk(-min)p Fo(',)h(`)p Fk(-max)p Fo(')g(and)g(`)p Fk(-def)p Fo(')f(\(\014ll)g(v)-5 b(alues)28 b(for)h(un)m(v)m(oiced)g (regions\),)h(ma)m(y)g(need)f(to)h(b)s(e)e(c)m(hanged)150 4034 y(dep)s(ending)20 b(on)j(the)g(sp)s(eak)m(er)g(pitc)m(h)f(range.) 39 b(The)22 b(ab)s(o)m(v)m(e)i(is)e(suitable)f(for)i(a)g(male)f(sp)s (eak)m(er.)39 b(The)22 b(`)p Fk(-fill)p Fo(')150 4144 y(option)30 b(states)h(that)g(un)m(v)m(oiced)g(sections)f(should)e(b)s (e)i(\014lled)e(with)h(equally)h(spaced)g(pitc)m(hmarks.)150 4376 y Ff(20.1.2)63 b(Generating)42 b(LPC)e(co)s(e\016cien)m(ts)275 4573 y Fo(LPC)33 b(co)s(e\016cien)m(ts)h(are)h(generated)g(using)d(the) j(`)p Fk(sig2fv)p Fo(')d(command.)52 b(Tw)m(o)34 b(stages)h(are)f (required,)150 4683 y(generating)h(the)g(LPC)g(co)s(e\016cien)m(ts)g (and)g(generating)g(the)g(residual.)52 b(The)34 b(protot)m(ypical)h (commands)150 4792 y(for)30 b(these)h(are)390 4925 y Fk(sig2fv)46 b(wav/file001.wav)e(-o)j(lpc/file001.lpc)d(-otype)i(est)h (-lpc_order)e(16)i(\\)581 5029 y(-coefs)f("lpc")g(-pm)h(pm/file001.pm)d (-preemph)i(0.95)h(-factor)e(3)j(\\)581 5132 y(-window_type)c(hamming) 390 5236 y(sigfilter)h(wav/file001.wav)f(-o)j(lpc/file001.res)d(-otype) i(nist)g(\\)581 5340 y(-lpcfilter)f(lpc/file001.lpc)f(-inv_filter)p eop %%Page: 90 92 90 91 bop 150 -116 a Fo(90)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(F)-8 b(or)31 b(some)f(databases)i(y)m(ou)e(ma)m(y)h(need)f(to)h(normalize)f (the)g(p)s(o)m(w)m(er.)41 b(Prop)s(erly)29 b(normalizing)f(p)s(o)m(w)m (er)150 408 y(is)g(di\016cult)f(but)i(w)m(e)g(pro)m(vide)f(a)i(simple)d (function)h(whic)m(h)f(ma)m(y)j(do)f(the)g(jobs)g(acceptably)-8 b(.)41 b(Y)-8 b(ou)30 b(should)150 518 y(do)e(this)f(on)i(the)f(w)m(a)m (v)m(eform)i(b)s(efore)e(lp)s(c)f(analysis)g(\(and)h(ensure)f(y)m(ou)i (also)f(do)h(the)f(residual)e(extraction)150 628 y(on)k(the)h (normalized)e(w)m(a)m(v)m(eform)j(rather)e(than)g(the)g(original.)390 756 y Fk(ch_wave)46 b(-scaleN)g(0.5)h(wav/file001.wav)c(-o)k (file001.Nwav)275 889 y Fo(This)21 b(normalizes)i(the)h(p)s(o)m(w)m(er) g(b)m(y)f(maximizing)f(the)i(signal)e(\014rst)h(then)h(m)m(ultiplying)c (it)j(b)m(y)h(the)g(giv)m(en)150 999 y(factor.)42 b(If)29 b(the)h(database)h(w)m(a)m(v)m(eforms)g(are)f(clean)g(\(i.e.)41 b(no)30 b(clic)m(ks\))g(this)f(can)h(giv)m(e)g(reasonable)g(results.) 150 1254 y Fn(20.2)68 b(Generating)46 b(a)f(diphone)g(index)275 1446 y Fo(The)31 b(diphone)f(index)g(consists)i(of)g(a)g(short)f (header)h(follo)m(wing)e(b)m(y)i(an)g(ascii)f(list)g(of)h(eac)m(h)h (diphone,)150 1556 y(the)41 b(\014le)f(it)g(comes)h(from)g(follo)m(w)m (ed)f(b)m(y)g(its)g(start)i(middle)c(and)i(end)g(times)g(in)g(seconds.) 71 b(F)-8 b(or)42 b(most)150 1665 y(databases)31 b(this)e(\014les)h (needs)g(to)h(b)s(e)f(generated)h(b)m(y)f(some)h(database)g(sp)s (eci\014c)e(script.)275 1799 y(An)h(example)g(header)g(is)390 1927 y Fk(EST_File)46 b(index)390 2031 y(DataType)g(ascii)390 2134 y(NumEntries)f(2005)390 2238 y(IndexName)g(rab_diphone)390 2342 y(EST_Header_End)275 2476 y Fo(The)34 b(most)h(notable)g(part)f (is)g(the)h(n)m(um)m(b)s(er)e(of)i(en)m(tries,)h(whic)m(h)e(y)m(ou)h (should)d(note)k(can)f(get)h(out)f(of)150 2585 y(sync)g(with)g(the)h (actual)g(n)m(um)m(b)s(er)e(of)i(en)m(tries)g(if)e(y)m(ou)i(hand)f (edit)g(en)m(tries.)57 b(I.e.)g(if)35 b(y)m(ou)h(add)f(an)h(en)m(try) 150 2695 y(and)30 b(the)g(system)h(still)d(can't)j(\014nd)e(it)h(c)m (hec)m(k)i(that)f(the)g(n)m(um)m(b)s(er)e(of)h(en)m(tries)g(is)g(righ)m (t.)275 2829 y(The)g(en)m(tries)i(themselv)m(es)f(ma)m(y)h(tak)m(e)h (on)f(one)f(of)h(t)m(w)m(o)h(forms,)e(full)e(en)m(tries)i(or)h(index)e (en)m(tries.)43 b(F)-8 b(ull)150 2938 y(en)m(tries)26 b(consist)f(of)i(a)f(diphone)e(name,)j(where)f(the)g(phones)f(are)i (separated)f(b)m(y)g Fk(")p Fo(-)p Fk(")p Fo(;)i(a)e(\014le)f(name)h (whic)m(h)150 3048 y(is)j(used)g(to)i(index)d(in)m(to)i(the)h(pitc)m (hmark,)e(LPC)g(and)h(w)m(a)m(v)m(eform)h(\014le;)e(and)h(the)g(start,) h(middle)c(\(c)m(hange)150 3157 y(o)m(v)m(er)k(p)s(oin)m(t)d(b)s(et)m (w)m(een)i(phones\))f(and)g(end)g(of)h(the)g(phone)e(in)g(the)i(\014le) f(in)f(seconds)h(of)h(the)g(diphone.)38 b(F)-8 b(or)150 3267 y(example)390 3395 y Fk(r-uh)190 b(edx_1001)379 b(0.225)142 b(0.261)g(0.320)390 3499 y(r-e)238 b(edx_1002)379 b(0.224)142 b(0.273)g(0.326)390 3602 y(r-i)238 b(edx_1003)379 b(0.240)142 b(0.280)g(0.321)390 3706 y(r-o)238 b(edx_1004)379 b(0.212)142 b(0.253)g(0.320)275 3840 y Fo(The)34 b(second)i(form)e(of)i (en)m(try)f(is)f(an)h(index)f(en)m(try)i(whic)m(h)e(simply)e(states)37 b(that)f(reference)f(to)h(that)150 3950 y(diphone)28 b(should)h(actually)h(b)s(e)g(made)g(to)h(another.)41 b(F)-8 b(or)31 b(example)390 4078 y Fk(aa-ll)142 b(&aa-l)275 4211 y Fo(This)24 b(states)k(that)f(the)g(diphone)e Fk(aa-ll)g Fo(should)g(actually)h(use)g(the)h(diphone)e Fk(aa-l)p Fo(.)38 b(Note)28 b(they)f(are)150 4321 y(a)37 b(n)m(um)m(b)s(er)f(of)h (w)m(a)m(ys)g(to)h(sp)s(ecify)d(alternates)j(for)e(missing)f(diphones)g (an)h(this)g(metho)s(d)g(is)g(b)s(est)h(used)150 4430 y(for)d(\014xing)e(single)h(or)h(small)e(classes)i(of)g(missing)e(or)h (brok)m(en)h(diphones.)49 b(Index)33 b(en)m(tries)h(ma)m(y)h(app)s(ear) 150 4540 y(an)m(ywhere)30 b(in)f(the)i(\014le)e(but)h(can't)h(b)s(e)f (nested.)275 4674 y(Some)39 b(c)m(hec)m(ks)i(are)f(made)g(one)f (reading)g(this)g(index)f(to)i(ensure)f(times)g(etc)h(are)g(reasonable) g(but)150 4783 y(m)m(ultiple)28 b(en)m(tries)i(for)g(the)h(same)g (diphone)d(are)j(not,)g(in)e(that)i(case)g(the)g(later)f(one)h(will)d (b)s(e)h(selected.)150 5039 y Fn(20.3)68 b(Database)47 b(declaration)275 5230 y Fo(There)27 b(t)m(w)m(o)i(ma)5 b(jor)28 b(t)m(yp)s(es)g(of)g(database)h Fi(gr)-5 b(oup)g(e)g(d)39 b Fo(and)28 b Fi(ungr)-5 b(oup)g(e)g(d)p Fo(.)42 b(Group)s(ed)26 b(databases)j(come)g(as)150 5340 y(a)e(single)d(\014le)i(con)m(taining) f(the)i(diphone)d(index,)i(co)s(e\014cinets)g(and)f(residuals)f(for)i (the)g(diphones.)38 b(This)24 b(is)p eop %%Page: 91 93 91 92 bop 150 -116 a Fo(Chapter)30 b(20:)41 b(UniSyn)29 b(syn)m(thesizer)2239 b(91)150 299 y(the)21 b(standard)f(w)m(a)m(y)i (databases)g(are)f(distributed)d(as)j(v)m(oices)h(in)e(F)-8 b(esto)m(v)j(al.)39 b(Ungroup)s(ed)20 b(access)i(diphones)150 408 y(from)i(individual)19 b(\014les)24 b(and)f(is)g(designed)g(as)i(a) g(metho)s(d)e(for)h(debugging)f(and)h(testing)g(databases)h(b)s(efore) 150 518 y(distribution.)42 b(Using)31 b(ungroup)s(ed)f(dataabse)j(is)e (slo)m(w)m(er)h(but)f(allo)m(ws)g(quic)m(k)m(er)h(c)m(hanges)h(to)g (the)f(index,)150 628 y(and)e(asso)s(ciated)h(co)s(e\016cien)m(t)g (\014les)e(and)h(residuals)e(without)h(rebuilding)e(the)j(group)g (\014le.)275 769 y(A)38 b(database)h(is)f(declared)g(to)h(the)g(system) f(through)g(the)h(command)f Fk(us_diphone_init)p Fo(.)61 b(This)150 878 y(function)40 b(tak)m(es)i(a)f(parameter)h(list)d(of)i (v)-5 b(arious)40 b(features)h(used)f(for)h(setting)g(up)f(a)h (database.)73 b(The)150 988 y(features)31 b(are)150 1157 y Fk(name)288 b Fo(An)32 b(atomic)i(name)e(for)h(this)e(database,)k (used)d(in)f(selecting)i(it)f(from)g(the)h(curren)m(t)g(set)g(of)630 1267 y(laded)c(database.)150 1433 y Fk(index_file)630 1542 y Fo(A)k(\014lename)e(name)i(con)m(taining)f(either)g(a)h(diphone) e(index,)h(as)g(descripb)s(ed)e(ab)s(o)m(v)m(e,)35 b(or)e(a)630 1652 y(group)k(\014le.)63 b(The)38 b(feature)g Fk(grouped)e Fo(de\014nes)h(the)i(distinction)c(b)s(et)m(w)m(een)k(this)e(b)s(eing)g (a)630 1761 y(group)30 b(of)g(simple)f(index)g(\014le.)150 1927 y Fk(grouped)144 b Fo(T)-8 b(ak)m(es)34 b(the)e(v)-5 b(alue)32 b Fk("true")f Fo(or)h Fk("false")p Fo(.)45 b(This)31 b(de\014ned)g(simple)f(index)h(or)h(if)g(the)g(index)630 2037 y(\014le)d(is)h(a)h(group)s(ed)e(\014le.)150 2203 y Fk(coef_dir)96 b Fo(The)51 b(directory)g(con)m(taining)h(the)f(co)s (e\016cien)m(ts,)58 b(\(LPC)52 b(or)f(just)h(pitc)m(hmarks)e(in)h(the) 630 2312 y(PSOLA)29 b(case\).)150 2478 y Fk(sig_dir)144 b Fo(The)34 b(directory)g(con)m(taining)f(the)i(signal)e(\014les)g (\(residual)g(for)h(LPC,)g(full)e(w)m(a)m(v)m(eforms)j(for)630 2588 y(PSOLA\).)150 2754 y Fk(coef_ext)96 b Fo(The)32 b(exten)m(tion)g(for)g(co)s(e\016cien)m(t)h(\014les,)f(t)m(ypically)e Fk(".lpc")h Fo(for)h(LPC)f(\014le)g(and)h Fk(".pm")e Fo(for)630 2863 y(pitc)m(hmark)g(\014les.)150 3029 y Fk(sig_ext)144 b Fo(The)22 b(exten)m(tion)g(for)g(signal)f(\014les,)i (t)m(ypically)e Fk(".res")g Fo(for)h(LPC)f(residual)f(\014les)h(and)h Fk(".wav")630 3139 y Fo(for)30 b(w)m(a)m(v)m(eform)i(\014les.)150 3305 y Fk(default_diphone)630 3414 y Fo(The)f(diphone)e(to)j(b)s(e)e (used)h(when)f(the)h(requested)g(one)h(do)s(esn't)e(exist.)43 b(No)32 b(matter)g(ho)m(w)630 3524 y(careful)42 b(y)m(ou)h(are)h(y)m (ou)f(should)e(alw)m(a)m(ys)i(include)e(a)i(default)f(diphone)f(for)i (distributed)630 3633 y(diphone)38 b(database.)71 b(Syn)m(thesis)38 b(will)g(thro)m(w)h(an)h(error)g(if)f(no)h(diphone)e(is)h(found)g(and) 630 3743 y(there)f(is)g(no)g(default.)63 b(Although)38 b(it)f(is)h(usually)e(an)i(error)g(when)f(this)g(is)g(required)g(its) 630 3853 y(b)s(etter)f(to)g(\014ll)e(in)g(something)h(than)g(stop)h (syn)m(thesizing.)55 b(T)m(ypical)35 b(v)-5 b(alues)35 b(for)g(this)g(are)630 3962 y(silence)29 b(to)i(silence)f(or)g(sc)m(h)m (w)m(a)i(to)f(sc)m(h)m(w)m(a.)150 4128 y Fk(alternates_left)630 4238 y Fo(A)23 b(list)f(of)i(pairs)d(sho)m(wing)i(the)g(alternate)h (phone)e(names)i(for)f(the)g(left)g(phone)f(in)g(a)i(diphone)630 4347 y(pair.)37 b(This)19 b(is)i(list)f(is)h(used)g(to)h(rewrite)f(the) h(diphone)e(name)h(when)g(the)h(directly)e(requested)630 4457 y(one)26 b(do)s(esn't)f(exist.)38 b(This)24 b(is)g(the)i (recommended)f(metho)s(d)f(for)h(dealing)f(with)g(systematic)630 4567 y(holes)30 b(in)f(a)i(diphone)d(database.)150 4732 y Fk(alternates_right)630 4842 y Fo(A)43 b(list)f(of)h(pairs)e(sho)m (wing)h(the)h(alternate)h(phone)e(names)h(for)f(the)h(righ)m(t)g(phone) f(in)g(a)630 4952 y(diphone)24 b(pair.)39 b(This)24 b(is)i(list)f(is)g (used)h(to)h(rewrite)f(the)g(diphone)f(name)h(when)g(the)g(directly)630 5061 y(requested)j(one)h(do)s(esn't)f(exist.)40 b(This)27 b(is)h(the)i(recommended)f(metho)s(d)f(for)h(dealing)f(with)630 5171 y(systematic)j(holes)f(in)f(a)i(diphone)d(database.)275 5340 y(An)i(example)g(database)h(de\014nition)d(is)p eop %%Page: 92 94 92 93 bop 150 -116 a Fo(92)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(set!)46 b(rab_diphone_dir)e("/projects/festival/lib/)o(voic)o(es/e)o(ngl)o (ish/)o(rab_)o(dip)o(hone)o("\))390 403 y(\(set!)i(rab_lpc_group)676 506 y(\(list)724 610 y('\(name)g("rab_lpc_group"\))724 714 y(\(list)g('index_file)1010 818 y(\(path-append)f(rab_diphone_dir)f ("group/rablpc16k.group")o(\)\))724 922 y('\(alternates_left)f(\(\(i)k (ii\))g(\(ll)g(l\))g(\(u)g(uu\))g(\(i@)g(ii\))g(\(uh)g(@\))g(\(a)g (aa\))1965 1025 y(\(u@)g(uu\))g(\(w)g(@\))g(\(o)g(oo\))g(\(e@)g(ei\))g (\(e)g(ei\))1965 1129 y(\(r)g(@\)\)\))724 1233 y('\(alternates_right)c (\(\(i)k(ii\))g(\(ll)g(l\))g(\(u)g(uu\))g(\(i@)g(ii\))2013 1337 y(\(y)g(i\))g(\(uh)g(@\))g(\(r)g(@\))h(\(w)f(@\)\)\))724 1440 y('\(default_diphone)c(@-@@\))724 1544 y('\(grouped)i ("true"\)\)\))390 1648 y(\(us_dipohone_init)e(rab_lpc_group\))150 1908 y Fn(20.4)68 b(Making)45 b(group\014les)275 2101 y Fo(The)33 b(function)g Fk(us_make_group_file)d Fo(will)h(mak)m(e)k(a) g(group)f(\014le)f(of)i(the)f(curren)m(tly)g(selected)g(US)150 2211 y(diphone)g(database.)58 b(It)36 b(loads)f(in)f(all)h(diphone)f (sin)g(the)i(dtabaase)h(and)e(sa)m(v)m(es)i(them)f(in)e(the)i(named)150 2320 y(\014le.)47 b(An)32 b(optional)g(second)h(argumen)m(t)g(allo)m (ws)f(sp)s(eci\014cation)f(of)i(ho)m(w)g(the)g(group)f(\014le)g(will)e (b)s(e)i(sa)m(v)m(ed.)150 2430 y(These)e(options)g(are)h(as)f(a)h (feature)g(list.)39 b(There)30 b(are)h(three)f(p)s(ossible)e(options) 150 2591 y Fk(track_file_format)630 2700 y Fo(The)37 b(format)g(for)g(the)h(co)s(e\016cien)m(t)g(\014les.)60 b(By)38 b(default)e(this)g(is)h Fk(est_binary)p Fo(,)f(curren)m(tly)630 2810 y(the)31 b(only)e(other)i(alternativ)m(e)f(is)g Fk(est_ascii)p Fo(.)150 2970 y Fk(sig_file_format)630 3080 y Fo(The)j(format)h(for)g(the)f(signal)g(parts)g(of)h(the)g(of)g (the)f(database.)52 b(By)34 b(default)f(this)f(is)h Fk(snd)630 3190 y Fo(\(Sun's)42 b(Audio)f(format\).)79 b(This)41 b(w)m(as)i(c)m(ho)s(osen)g(as)g(it)g(has)f(the)h(smallest)f(header)h (and)630 3299 y(supp)s(orts)f(v)-5 b(arious)43 b(sample)f(formats.)81 b(An)m(y)44 b(format)g(supp)s(orted)e(b)m(y)i(the)g(Edin)m(burgh)630 3409 y(Sp)s(eec)m(h)30 b(T)-8 b(o)s(ols)30 b(is)f(allo)m(w)m(ed.)150 3569 y Fk(sig_sample_format)630 3679 y Fo(The)34 b(format)g(for)g(the)g (samples)f(in)g(the)h(signal)e(\014les.)51 b(By)34 b(default)g(this)e (is)i Fk(mulaw)p Fo(.)50 b(This)630 3788 y(is)29 b(suitable)f(when)h (the)g(signal)g(\014les)f(are)j(LPC)e(residuals.)38 b(LPC)29 b(residuals)e(ha)m(v)m(e)k(a)f(m)m(uc)m(h)630 3898 y(smaller)i(dynamic) g(range)i(that)g(plain)d(PCM)j(\014les.)49 b(Because)34 b Fk(mulaw)e Fo(represen)m(tation)i(is)630 4007 y(half)h(the)h(size)g (\(8)g(bits\))f(of)h(standard)g(PCM)f(\014les)g(\(16bits\))h(this)f (signi\014can)m(tly)f(reduces)630 4117 y(the)29 b(size)g(of)g(the)h (group)e(\014le)h(while)e(only)h(marginally)f(altering)h(the)h(qualit)m (y)g(of)g(syn)m(thesis)630 4227 y(\(and)42 b(from)g(exp)s(erimen)m(ts)g (the)g(e\013ect)i(is)e(not)h(p)s(erceptible\).)75 b(Ho)m(w)m(ev)m(er)45 b(when)c(sa)m(ving)630 4336 y(group)29 b(\014les)f(where)h(the)g (signals)f(are)i(not)f(LPC)g(residuals)e(\(e.g.)42 b(in)28 b(PSOLA\))g(using)g(this)630 4446 y(default)i Fk(mulaw)e Fo(is)i(not)h(recommended)f(and)f Fk(short)g Fo(should)g(probably)f(b)s (e)i(used.)150 4705 y Fn(20.5)68 b(UniSyn)45 b(mo)t(dule)g(selection) 275 4899 y Fo(In)29 b(a)i(v)m(oice)g(selection)f(a)h(UniSyn)d(database) k(ma)m(y)f(b)s(e)e(selected)i(as)g(follo)m(ws)485 5029 y Fk(\(set!)47 b(UniSyn_module_hooks)42 b(\(list)47 b (rab_diphone_const_clust)o(ers)41 b(\)\))485 5132 y(\(set!)47 b(us_abs_offset)d(0.0\))485 5236 y(\(set!)j(window_factor)d(1.0\))485 5340 y(\(set!)j(us_rel_offset)d(0.0\))p eop %%Page: 93 95 93 94 bop 150 -116 a Fo(Chapter)30 b(20:)41 b(UniSyn)29 b(syn)m(thesizer)2239 b(93)485 299 y Fk(\(set!)47 b(us_gain)f(0.9\))485 506 y(\(Parameter.set)e('Synth_Method)h('UniSyn\))485 610 y(\(Parameter.set)f('us_sigpr)i('lpc\))485 714 y(\(us_db_select)f (rab_db_name\))275 848 y Fo(The)20 b Fk(UniSyn_module_hooks)c Fo(are)21 b(run)f(b)s(efore)g(syn)m(thesis,)i(see)g(the)f(next)g (selection)g(ab)s(out)g(diphone)150 958 y(name)j(selection.)39 b(A)m(t)25 b(presen)m(t)g(only)e Fk(lpc)g Fo(is)h(supp)s(orted)e(b)m(y) i(the)h(UniSyn)d(mo)s(dule,)i(though)g(p)s(oten)m(tially)150 1068 y(there)31 b(ma)m(y)g(b)s(e)e(others.)275 1202 y(An)22 b(optional)g(implemen)m(tation)g(of)h(TD-PSOLA)g Fj(moulines90)29 b Fo(has)23 b(b)s(een)f(written)g(but)h(fear)g(of)g(legal)150 1312 y(problems)30 b(unfortunately)g(prev)m(en)m(ts)i(it)f(b)s(eing)g (in)f(the)i(public)d(distribution,)f(but)j(this)g(p)s(olicy)f(should) 150 1421 y(not)h(b)s(e)e(tak)m(en)j(as)e(ac)m(kno)m(wledging)h(or)f (not)h(ac)m(kno)m(wledging)f(an)m(y)h(alleged)f(paten)m(t)i(violation.) 150 1679 y Fn(20.6)68 b(Diphone)45 b(selection)275 1871 y Fo(Diphone)26 b(names)h(are)h(constructed)g(for)f(eac)m(h)i (phone-phone)d(pair)g(in)g(the)i(Segmen)m(t)g(relation)f(in)f(an)150 1981 y(utterance.)44 b(If)31 b(a)g(segmen)m(t)i(has)d(the)i(feature)f (in)f(forming)g(a)i(diphone)d(name)i(UniSyn)e(\014rst)i(c)m(hec)m(ks)h (for)150 2090 y(the)22 b(feature)h Fk(us_diphone_left)18 b Fo(\(or)23 b Fk(us_diphone_right)17 b Fo(for)22 b(the)h(righ)m(t)f (hand)f(part)h(of)g(the)h(diphone\))150 2200 y(then)h(if)g(that)h(do)s (esn't)g(exist)f(the)h(feature)g Fk(us_diphone)d Fo(then)i(if)g(that)h (do)s(esn't)f(exist)h(the)g(feature)g Fk(name)p Fo(.)150 2310 y(Th)m(us)i(is)g(is)g(p)s(ossible)f(to)i(sp)s(ecify)f(diphone)f (names)i(whic)m(h)f(are)h(not)g(simply)e(the)i(concatenation)h(of)g(t)m (w)m(o)150 2419 y(segmen)m(t)j(names.)275 2554 y(This)e(feature)j(is)e (used)g(to)i(sp)s(ecify)e(consonan)m(t)i(cluster)f(diphone)e(names)i (for)g(our)g(English)e(v)m(oices.)150 2663 y(The)k(ho)s(ok)g Fk(UniSyn_module_hooks)29 b Fo(is)34 b(run)f(b)s(efore)h(selection)g (and)g(w)m(e)h(sp)s(ecify)e(a)h(function)f(to)j(add)150 2773 y Fk(us_diphone_*)27 b Fo(features)j(as)g(appropriate.)40 b(See)30 b(the)g(function)e Fk(rab_diphone_fix_phone_name)23 b Fo(in)150 2883 y(`)p Fk(lib/voices/english/rab_di)o(phon)o(e/fe)o (stv)o(ox/r)o(ab_d)o(iph)o(one.)o(scm)o Fo(')i(for)30 b(an)g(example.)275 3017 y(Once)g(the)g(diphone)e(name)i(is)f(created)i (it)f(is)f(used)g(to)i(select)g(the)f(diphone)e(from)i(the)g(database.) 41 b(If)150 3127 y(it)30 b(is)f(not)i(found)e(the)i(name)f(is)g(con)m (v)m(erted)i(using)d(the)h(list)f(of)i Fk(alternates_left)26 b Fo(and)k Fk(alternates_)150 3236 y(right)38 b Fo(as)i(sp)s(eci\014ed) e(in)h(the)g(database)i(declaration.)68 b(If)39 b(that)i(do)s(esn't)e (sp)s(ecify)g(a)h(diphone)d(in)i(the)150 3346 y(database.)g(The)23 b Fk(default_diphone)c Fo(is)k(selected,)i(and)e(a)h(w)m(arning)e(is)g (prin)m(ted.)37 b(If)23 b(no)g(default)g(diphone)150 3455 y(is)29 b(sp)s(eci\014ed)g(or)h(the)h(default)f(diphone)e(do)s (esn't)i(exist)g(in)f(the)i(database)g(an)f(error)g(is)g(thro)m(wn.)p eop %%Page: 94 96 94 95 bop 150 -116 a Fo(94)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 95 97 95 96 bop 150 -116 a Fo(Chapter)30 b(21:)41 b(Diphone)30 b(syn)m(thesizer)2200 b(95)150 299 y Fl(21)80 b(Diphone)53 b(syn)l(thesizer)275 606 y Fi(NOTE:)47 b Fo(use)c(of)h(this)e(diphone)f (syn)m(thesis)i(is)f(depricated)h(and)g(it)g(will)e(probably)g(b)s(e)i (remo)m(v)m(ed)150 715 y(from)k(future)f(v)m(ersions,)52 b(all)46 b(of)h(its)g(functionalit)m(y)f(has)h(b)s(een)g(replaced)g(b)m (y)g(the)g(UniSyn)f(syn)m(the-)150 825 y(sizer.)75 b(It)42 b(is)f(not)i(compiled)d(b)m(y)i(default,)j(if)c(required)f(add)h Fk(ALSO_INCLUDE)27 b(+=)j(diphone)40 b Fo(to)j(y)m(our)150 934 y(`)p Fk(festival/config/config)p Fo(')25 b(\014le.)275 1093 y(A)g(basic)g(diphone)f(syn)m(thesizer)h(o\013ers)g(a)h(metho)s(d) f(for)g(making)g(sp)s(eec)m(h)h(from)f(segmen)m(ts,)j(durations)150 1203 y(and)35 b(in)m(tonation)g(targets.)57 b(This)34 b(mo)s(dule)g(w)m(as)h(mostly)g(written)g(b)m(y)g(Alistair)f(Conkie)g (but)h(the)h(base)150 1312 y(diphone)28 b(format)j(is)f(compatible)f (with)g(previous)g(CSTR)g(diphone)g(syn)m(thesizers.)275 1471 y(The)d(syn)m(thesizer)h(o\013ers)g(residual)e(excited)i(LPC)f (based)h(syn)m(thesis)f(\()p Fj(h)m(un)m(t89)7 b Fo(\))29 b(and)d(PSOLA)g(\(TM\))150 1581 y(\()p Fj(moulines90)7 b Fo(\))30 b(\(PSOLA)g(is)f(not)i(a)m(v)-5 b(ailable)30 b(for)g(distribution\).)150 1899 y Fn(21.1)68 b(Diphone)45 b(database)i(format)275 2115 y Fo(A)24 b(diphone)f(database)i(consists) f(of)h(a)g Fi(dictionary)k(\014le)p Fo(,)d(a)f(set)g(of)g Fi(waveform)j(\014les)p Fo(,)f(and)c(a)i(set)g(of)g Fi(pitch)150 2225 y(mark)33 b(\014les)p Fo(.)41 b(These)31 b(\014les)e(are)i(the)f (same)h(format)g(as)f(the)h(previous)e(CSTR)g(\(Osprey\))h(syn)m (thesizer.)275 2384 y(The)38 b(dictionary)g(\014le)g(consist)g(of)h (one)h(en)m(try)f(p)s(er)f(line.)65 b(Eac)m(h)39 b(en)m(try)g(consists) g(of)g(\014v)m(e)g(\014elds:)57 b(a)150 2493 y(diphone)39 b(name)h(of)h(the)g(form)f Fj(P1-P2)p Fo(,)45 b(a)c(\014lename)f (\(without)g(extension\),)j(a)e(\015oating)g(p)s(oin)m(t)e(start)150 2603 y(p)s(osition)25 b(in)g(the)i(\014le)f(in)g(milliseconds,)e(a)j (mid)f(p)s(osition)f(in)g(milliseconds)f(\(c)m(hange)k(in)d(phone\),)j (and)e(an)150 2712 y(end)31 b(p)s(osition)f(in)h(milliseconds.)42 b(Lines)31 b(starting)h(with)e(a)j(semi-colon)e(and)g(blank)g(lines)f (are)j(ignored.)150 2822 y(The)d(list)f(ma)m(y)i(b)s(e)f(in)f(an)m(y)h (order.)275 2981 y(F)-8 b(or)31 b(example)f(a)g(partial)g(list)f(of)h (phones)g(ma)m(y)h(lo)s(ok)f(lik)m(e.)390 3134 y Fk(ch-l)94 b(r021)142 b(412.035)94 b(463.009)g(518.23)390 3237 y(jh-l)g(d747)142 b(305.841)94 b(382.301)g(446.018)390 3341 y(h-l)142 b(d748)g(356.814)94 b(403.54)142 b(437.522)390 3445 y(#-@)g(d404)g(233.628)94 b(297.345)g(331.327)390 3549 y(@-#)142 b(d001)g(836.814)94 b(938.761)g(1002.48)275 3707 y Fo(W)-8 b(a)m(v)m(eform)42 b(\014les)d(ma)m(y)h(b)s(e)g(in)e(an)m(y)j(form,)h(as)e(long)g(as)g(ev) m(ery)h(\014le)e(is)g(the)h(same)g(t)m(yp)s(e,)j(headered)150 3817 y(or)31 b(unheadered)g(as)g(long)g(as)h(the)f(format)h(is)f(supp)s (orted)e(the)j(sp)s(eec)m(h)f(to)s(ols)g(w)m(a)m(v)m(e)j(reading)c (functions.)150 3927 y(These)24 b(ma)m(y)g(b)s(e)f(standard)g(linear)f (PCM)i(w)m(a)m(v)m(eform)h(\014les)e(in)f(the)i(case)h(of)f(PSOLA)e(or) i(LPC)f(co)s(e\016cien)m(ts)150 4036 y(and)d(residual)e(when)h(using)g (the)i(residual)d(LPC)h(syn)m(thesizer.)37 b(Section)21 b(21.2)g([LPC)f(databases],)k(page)d(96)275 4195 y(Pitc)m(h)35 b(mark)g(\014les)f(consist)i(a)f(simple)f(list)g(of)i(p)s(ositions)d (in)h(milliseconds)f(\(plus)g(places)j(after)g(the)150 4305 y(p)s(oin)m(t\))44 b(in)f(order,)48 b(one)d(p)s(er)e(line)g(of)i (eac)m(h)h(pitc)m(h)e(mark)g(in)f(the)i(\014le.)83 b(F)-8 b(or)45 b(high)e(qualit)m(y)h(diphone)150 4414 y(syn)m(thesis)31 b(these)h(should)e(b)s(e)h(deriv)m(ed)g(from)g(laryngograph)g(data.)46 b(During)30 b(un)m(v)m(oiced)i(sections)g(pitc)m(h)150 4524 y(marks)38 b(should)f(b)s(e)h(arti\014cially)f(created)j(at)f (reasonable)g(in)m(terv)-5 b(als)38 b(\(e.g.)67 b(10)40 b(ms\).)66 b(In)38 b(the)h(curren)m(t)150 4633 y(format)j(there)g(is)f (no)h(w)m(a)m(y)h(to)g(determine)e(the)h Fk(")p Fo(real)p Fk(")f Fo(pitc)m(h)g(marks)h(from)f(the)h Fk(")p Fo(un)m(v)m(oiced)p Fk(")g Fo(pitc)m(h)150 4743 y(marks.)275 4902 y(It)30 b(is)g(normal)f(to)i(hold)f(a)h(diphone)d(database)k(in)d(a)i (directory)f(with)f(a)i(n)m(um)m(b)s(er)e(of)i(sub-directories)150 5011 y(namely)f(`)p Fk(dic/)p Fo(')f(con)m(tain)i(the)g(dictionary)e (\014le,)g(`)p Fk(wave/)p Fo(')h(for)g(the)h(w)m(a)m(v)m(eform)g (\014les,)f(t)m(ypically)f(of)i(whole)150 5121 y(nonsense)22 b(w)m(ords)g(\(sometimes)h(this)f(directory)g(is)g(called)g(`)p Fk(vox/)p Fo(')g(for)h(historical)e(reasons\))i(and)f(`)p Fk(pm/)p Fo(')g(for)150 5230 y(the)29 b(pitc)m(h)e(mark)h(\014les.)39 b(The)28 b(\014lename)g(in)f(the)h(dictionary)f(en)m(try)i(should)d(b)s (e)i(the)h(same)f(for)g(w)m(a)m(v)m(eform)150 5340 y(\014le)h(and)h (the)h(pitc)m(h)f(mark)g(\014le)f(\(with)h(di\013eren)m(t)f (extensions\).)p eop %%Page: 96 98 96 97 bop 150 -116 a Fo(96)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(21.2)68 b(LPC)45 b(databases)275 498 y Fo(The)31 b(standard)f(metho)s(d)i(for)f (diphone)f(resyn)m(thesis)g(in)h(the)g(released)h(system)g(is)e (residual)g(excited)150 608 y(LPC)j(\()p Fj(h)m(un)m(t89)7 b Fo(\).)52 b(The)33 b(actual)g(metho)s(d)g(of)h(resyn)m(thesis)f (isn't)f(imp)s(ortan)m(t)h(to)h(the)g(database)g(format,)150 717 y(but)28 b(if)g(residual)e(LPC)i(syn)m(thesis)g(is)f(to)j(b)s(e)e (used)g(then)g(it)g(is)g(necessary)h(to)h(mak)m(e)f(the)g(LPC)f(co)s (e\016cien)m(t)150 827 y(\014les)h(and)h(their)g(corresp)s(onding)e (residuals.)275 968 y(Previous)38 b(v)m(ersions)h(of)g(the)h(system)f (used)g(a)h Fk(")p Fo(host)f(of)g(hac)m(ky)i(little)d(scripts)p Fk(")g Fo(to)i(this)e(but)h(no)m(w)150 1078 y(that)28 b(the)g(Edin)m(burgh)c(Sp)s(eec)m(h)j(T)-8 b(o)s(ols)27 b(supp)s(orts)f(LPC)g(analysis)g(w)m(e)i(can)g(pro)m(vide)e(a)i(w)m (alk)f(through)g(for)150 1188 y(generating)k(these.)275 1329 y(W)-8 b(e)22 b(assume)e(that)i(the)f(w)m(a)m(v)m(eform)h(\014le)e (of)h(nonsense)g(w)m(ords)f(are)h(in)f(a)h(directory)g(called)f(`)p Fk(wave/)p Fo('.)36 b(The)150 1438 y(LPC)28 b(co)s(e\016cien)m(ts)h (and)g(residuals)d(will)g(b)s(e,)j(in)e(this)h(example,)h(stored)f(in)g (`)p Fk(lpc16k/)p Fo(')f(with)g(extensions)150 1548 y(`)p Fk(.lpc)p Fo(')j(and)f(`)p Fk(.res)p Fo(')h(resp)s(ectiv)m(ely)-8 b(.)275 1689 y(Before)30 b(starting)g(it)f(is)g(w)m(orth)h(considering) e(p)s(o)m(w)m(er)h(normalization.)40 b(W)-8 b(e)30 b(ha)m(v)m(e)h (found)e(this)g(imp)s(or-)150 1799 y(tan)m(t)37 b(on)f(all)g(of)g(the)g (databases)h(w)m(e)g(ha)m(v)m(e)g(collected)g(so)g(far.)58 b(The)35 b Fk(ch_wave)g Fo(program,)i(part)f(of)h(the)150 1909 y(sp)s(eec)m(h)29 b(to)s(ols,)h(with)e(the)i(optional)f Fk(-scaleN)f(0.4)h Fo(ma)m(y)h(b)s(e)f(used)f(if)h(a)g(more)h(complex)f (metho)s(d)g(is)g(not)150 2018 y(a)m(v)-5 b(ailable.)275 2159 y(The)29 b(follo)m(wing)g(shell)g(command)h(generates)i(the)e (\014les)390 2295 y Fk(for)47 b(i)g(in)h(wave/*.wav)390 2399 y(do)533 2503 y(fname=`basename)c($i)j(.wav`)533 2606 y(echo)g($i)533 2710 y(lpc_analysis)e(-reflection)f(-shift)i(0.01) h(-order)f(18)h(-o)h(lpc16k/$fname.lpc)43 b(\\)724 2814 y(-r)k(lpc16k/$fname.res)c(-otype)j(htk)h(-rtype)f(nist)h($i)390 2918 y(done)275 3059 y Fo(It)37 b(is)g(said)g(that)h(the)g(LPC)f(order) h(should)d(b)s(e)i(sample)g(rate)i(divided)c(b)m(y)j(one)g(thousand)e (plus)g(2.)150 3169 y(This)25 b(ma)m(y)i(or)f(ma)m(y)i(not)e(b)s(e)g (appropriate)g(and)g(if)f(y)m(ou)i(are)g(particularly)d(w)m(orried)i (ab)s(out)g(the)h(database)150 3278 y(size)j(it)g(is)g(w)m(orth)g(exp)s (erimen)m(ting.)275 3419 y(The)36 b(program)h(`)p Fk(lpc_analysis)p Fo(',)g(found)f(in)g(`)p Fk(speech_tools/bin)p Fo(',)f(can)i(b)s(e)g (used)f(to)i(generate)150 3529 y(the)27 b(lp)s(c)f(co)s(e\016cien)m(ts) i(and)f(residual.)37 b(Note)29 b(these)e(should)e(b)s(e)i(re\015ection) g(co)s(e\016cien)m(ts)h(so)f(they)h(ma)m(y)g(b)s(e)150 3639 y(quan)m(tised)i(\(as)h(they)f(are)h(in)e(group)h(\014les\).)275 3780 y(The)22 b(co)s(e\016cien)m(ts)h(and)f(residual)f(\014les)g(pro)s (duced)g(b)m(y)i(di\013eren)m(t)f(LPC)g(analysis)f(programs)h(ma)m(y)h (start)150 3890 y(at)35 b(di\013eren)m(t)f(o\013sets.)54 b(F)-8 b(or)35 b(example)g(the)f(En)m(tropic's)g(ESPS)f(functions)g (generate)j(LPC)e(co)s(e\016cien)m(ts)150 3999 y(that)29 b(are)g(o\013set)h(b)m(y)f(one)g(frame)f(shift)f(\(e.g.)42 b(0.01)30 b(seconds\).)41 b(Our)27 b(o)m(wn)i(`)p Fk(lpc_analysis)p Fo(')d(routine)h(has)150 4109 y(no)32 b(o\013set.)45 b(The)32 b Fk(Diphone_Init)c Fo(parameter)k(list)e(allo)m(ws)i(these)g (o\013sets)g(to)h(b)s(e)e(sp)s(eci\014ed.)43 b(Using)31 b(the)150 4218 y(ab)s(o)m(v)m(e)h(function)d(to)i(generate)h(the)e(LPC) g(\014les)f(the)i(description)d(parameters)j(should)d(include)485 4354 y Fk(\(lpc_frame_offset)44 b(0\))485 4458 y(\(lpc_res_offset)g (0.0\))275 4599 y Fo(While)29 b(when)g(generating)i(using)e(ESPS)g (routines)g(the)h(description)f(should)f(b)s(e)485 4734 y Fk(\(lpc_frame_offset)44 b(1\))485 4838 y(\(lpc_res_offset)g(0.01\)) 275 4979 y Fo(The)35 b(defaults)f(actually)i(follo)m(w)e(the)i(ESPS)f (form,)h(that)h(is)d Fk(lpc_frame_offset)d Fo(is)k(1)h(and)f Fk(lpc_)150 5089 y(res_offset)28 b Fo(is)h(equal)h(to)h(the)g(frame)f (shift,)f(if)h(they)g(are)h(not)f(explicitly)e(men)m(tioned.)275 5230 y(Note)22 b(the)f(biggest)g(problem)e(w)m(e)j(ha)m(v)m(e)g(in)e (implemen)m(ting)e(the)j(residual)e(excited)i(LPC)f(resyn)m(thesizer) 150 5340 y(w)m(as)j(getting)g(the)f(righ)m(t)g(part)h(of)f(the)h (residual)d(to)j(line)e(up)g(with)g(the)i(righ)m(t)f(LPC)f(co)s (e\016cien)m(ts)i(describing)p eop %%Page: 97 99 97 98 bop 150 -116 a Fo(Chapter)30 b(21:)41 b(Diphone)30 b(syn)m(thesizer)2200 b(97)150 299 y(the)31 b(pitc)m(h)f(mark.)42 b(Making)31 b(errors)f(in)g(this)g(degrades)h(the)g(syn)m(thesized)f(w) m(a)m(v)m(eform)i(notably)-8 b(,)32 b(but)e(not)150 408 y(seriously)-8 b(,)29 b(making)h(it)g(di\016cult)e(to)j(determine)f(if) f(it)h(is)f(an)i(o\013set)g(problem)e(or)h(some)h(other)g(bug.)275 552 y(Although)38 b(w)m(e)i(ha)m(v)m(e)g(started)g(in)m(v)m(estigating) f(if)f(extracting)i(pitc)m(h)f(sync)m(hronous)f(LPC)h(parame-)150 662 y(ters)d(rather)g(than)f(\014xed)h(shift)e(parameters)i(giv)m(es)g (b)s(etter)g(p)s(erformance,)h(w)m(e)g(ha)m(v)m(en't)g(\014nished)c (this)150 771 y(w)m(ork.)57 b(`)p Fk(lpc_analysis)p Fo(')33 b(supp)s(orts)i(pitc)m(h)g(sync)m(hronous)g(analysis)f(but)h(the)i(ra)m (w)f Fk(")p Fo(ungroup)s(ed)p Fk(")d Fo(ac-)150 881 y(cess)38 b(metho)s(d)f(do)s(es)g(not)h(y)m(et.)63 b(A)m(t)38 b(presen)m(t)g(the) f(LPC)g(parameters)h(are)g(extracted)h(at)f(a)g(particular)150 990 y(pitc)m(h)28 b(mark)h(b)m(y)f(in)m(terp)s(olating)f(o)m(v)m(er)k (the)d(closest)i(LPC)e(parameters.)40 b(The)29 b Fk(")p Fo(group)p Fk(")e Fo(\014les)h(hold)f(these)150 1100 y(in)m(terp)s(olated)i(parameters)i(pitc)m(h)f(sync)m(hronously)-8 b(.)275 1244 y(The)41 b(American)h(English)d(v)m(oice)k(`)p Fk(kd)p Fo(')f(w)m(as)h(created)g(using)e(the)h(sp)s(eec)m(h)g(to)s (ols)g(`)p Fk(lpc_analysis)p Fo(')150 1353 y(program)28 b(and)g(its)g(set)h(up)f(should)e(b)s(e)i(lo)s(ok)m(ed)g(at)i(if)d(y)m (ou)i(are)g(going)f(to)i(cop)m(y)f(it.)40 b(The)28 b(British)e(English) 150 1463 y(v)m(oice)31 b(`)p Fk(rb)p Fo(')g(w)m(as)f(constructed)h (using)e(ESPS)g(routines.)150 1743 y Fn(21.3)68 b(Group)45 b(\014les)275 1945 y Fo(Databases)39 b(ma)m(y)f(b)s(e)e(accessed)j (directly)d(but)g(this)h(is)f(usually)f(to)s(o)j(ine\016cien)m(t)f(for) g(an)m(y)h(purp)s(ose)150 2054 y(except)45 b(debugging.)80 b(It)44 b(is)f(exp)s(ected)h(that)g Fi(gr)-5 b(oup)46 b(\014les)52 b Fo(will)41 b(b)s(e)i(built)f(whic)m(h)g(con)m(tain)i(a)h (binary)150 2164 y(represen)m(tation)40 b(of)f(the)h(database.)69 b(A)40 b(group)f(\014le)f(is)h(a)h(compact)g(e\016cien)m(t)g(represen)m (tation)g(of)g(the)150 2273 y(diphone)j(database.)84 b(Group)44 b(\014les)f(are)i(b)m(yte)g(order)f(indep)s(enden)m(t,)j(so) d(ma)m(y)i(b)s(e)d(shared)h(b)s(et)m(w)m(een)150 2383 y(mac)m(hines)33 b(of)h(di\013eren)m(t)f(b)m(yte)h(orders)f(and)g(w)m (ord)g(sizes.)50 b(Certain)33 b(information)f(in)g(a)i(group)f(\014le)f (ma)m(y)150 2493 y(b)s(e)37 b(c)m(hanged)g(at)h(load)f(time)g(so)g(a)h (database)g(name,)h(access)g(strategy)f(etc.)62 b(ma)m(y)38 b(b)s(e)f(c)m(hanged)g(from)150 2602 y(what)30 b(w)m(as)h(set)g (originally)d(in)h(the)h(group)g(\014le.)275 2746 y(A)d(group)g(\014le) g(con)m(tains)h(the)f(basic)g(parameters,)i(the)f(diphone)e(index,)h (the)g(signal)g(\(original)f(w)m(a)m(v)m(e-)150 2855 y(form)k(or)h(LPC)f(residual\),)f(LPC)h(co)s(e\016cien)m(ts,)i(and)f (the)g(pitc)m(h)f(marks.)41 b(It)31 b(is)f(all)g(y)m(ou)h(need)f(for)h (a)g(run-)150 2965 y(time)22 b(syn)m(thesizer.)37 b(V)-8 b(arious)22 b(compression)g(mec)m(hanisms)f(are)h(supp)s(orted)f(to)i (allo)m(w)e(smaller)g(databases)150 3075 y(if)i(desired.)38 b(A)24 b(full)e(English)g(LPC)i(plus)f(residual)f(database)j(at)g(8k)g (ula)m(w)f(is)f(ab)s(out)i(3)f(megab)m(ytes,)k(while)150 3184 y(a)j(full)d(16)j(bit)e(v)m(ersion)h(at)h(16k)h(is)d(ab)s(out)h(8) h(megab)m(ytes.)275 3328 y(Group)25 b(\014les)g(are)i(created)g(with)e (the)i Fk(Diphone.group)22 b Fo(command)k(whic)m(h)f(tak)m(es)j(a)f (database)g(name)150 3437 y(and)k(an)g(output)g(\014lename)f(as)i(an)f (argumen)m(t.)44 b(Making)31 b(group)f(\014les)h(can)g(tak)m(e)i(some)f (time)f(esp)s(ecially)150 3547 y(if)26 b(they)i(are)g(large.)39 b(The)27 b Fk(group_type)e Fo(parameter)i(sp)s(eci\014es)f Fk(raw)h Fo(or)g Fk(ulaw)f Fo(for)h(enco)s(ding)g(signal)f(\014les.)150 3657 y(This)j(can)h(signi\014can)m(tly)f(reduce)h(the)g(size)h(of)f (databases.)275 3800 y(Group)g(\014les)h(ma)m(y)h(b)s(e)f(partially)f (loaded)h(\(see)i(access)g(strategies\))f(at)h(run)d(time)h(for)h(quic) m(k)m(er)f(start)150 3910 y(up)e(and)h(to)h(minimise)d(run-time)h (memory)h(requiremen)m(ts.)150 4190 y Fn(21.4)68 b(Diphone)p 957 4190 41 6 v 49 w(Init)275 4392 y Fo(The)39 b(basic)g(metho)s(d)g (for)g(describing)f(a)i(database)g(is)f(through)g(the)h Fk(Diphone_Init)c Fo(command.)150 4501 y(This)f(function)g(tak)m(es)j (a)e(single)f(argumen)m(t,)k(a)e(list)e(of)h(pairs)f(of)i(parameter)g (name)f(and)g(v)-5 b(alue.)58 b(The)150 4611 y(parameters)31 b(are)150 4784 y Fk(name)288 b Fo(An)30 b(atomic)h(name)f(for)h(this)e (database.)150 4952 y Fk(group_file)630 5062 y Fo(The)39 b(\014lename)f(of)h(a)g(group)g(\014le,)h(whic)m(h)e(ma)m(y)i(itself)e (con)m(tain)h(parameters)g(describing)630 5171 y(itself)150 5340 y Fk(type)288 b Fo(The)30 b(default)f(v)-5 b(alue)30 b(is)g Fk(pcm)p Fo(,)f(but)h(for)g(distributed)e(v)m(oices)j(this)e(is) g(alw)m(a)m(ys)i Fk(lpc)p Fo(.)p eop %%Page: 98 100 98 99 bop 150 -116 a Fo(98)2189 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(index_file)630 408 y Fo(A)h(\014lename)g(con)m(taining)g(the)h(diphone)d(dictionary)-8 b(.)150 557 y Fk(signal_dir)630 666 y Fo(A)30 b(directory)g(\(slash)g (terminated\))g(con)m(taining)g(the)h(p)s(cm)e(w)m(a)m(v)m(eform)j (\014les.)150 815 y Fk(signal_ext)630 924 y Fo(A)e(dot)h(pre\014xed)e (extension)h(for)g(the)h(p)s(cm)f(w)m(a)m(v)m(eform)h(\014les.)150 1072 y Fk(pitch_dir)630 1182 y Fo(A)f(directory)g(\(slash)g (terminated\))g(con)m(taining)g(the)h(pitc)m(h)e(mark)i(\014les.)150 1330 y Fk(pitch_ext)630 1440 y Fo(A)f(dot)h(pre\014xed)e(extension)h (for)g(the)h(pitc)m(h)f(\014les)150 1588 y Fk(lpc_dir)144 b Fo(A)28 b(directory)e(\(slash)h(terminated\))g(con)m(taining)g(the)h (LPC)f(co)s(e\016cien)m(t)h(\014les)e(and)h(residual)630 1698 y(\014les.)150 1846 y Fk(lpc_ext)144 b Fo(A)30 b(dot)h(pre\014xed) e(extension)h(for)g(the)h(LPC)f(co)s(e\016cien)m(t)h(\014les)150 1994 y Fk(lpc_type)96 b Fo(The)30 b(t)m(yp)s(e)g(of)h(LPC)f(\014le)f (\(as)i(supp)s(orted)e(b)m(y)h(the)g(sp)s(eec)m(h)h(to)s(ols\))150 2143 y Fk(lpc_frame_offset)630 2252 y Fo(The)38 b(n)m(um)m(b)s(er)g(of) h(frames)f Fk(")p Fo(missing)p Fk(")f Fo(from)h(the)h(b)s(eginning)d (of)j(the)g(\014le.)65 b(Often)39 b(LPC)630 2362 y(parameters)31 b(are)f(o\013set)i(b)m(y)e(one)h(frame.)150 2510 y Fk(lpc_res_ext)630 2620 y Fo(A)f(dot)h(pre\014xed)e(extension)h(for)g(the)h(residual)d (\014les)150 2768 y Fk(lpc_res_type)630 2877 y Fo(The)e(t)m(yp)s(e)h (of)g(the)g(residual)e(\014les,)i(this)f(is)f(a)j(standard)e(w)m(a)m(v) m(eform)i(t)m(yp)s(e)f(as)g(supp)s(orted)e(b)m(y)630 2987 y(the)31 b(sp)s(eec)m(h)f(to)s(ols.)150 3135 y Fk(lpc_res_offset) 630 3245 y Fo(Num)m(b)s(er)40 b(of)h(seconds)f Fk(")p Fo(missing)p Fk(")e Fo(from)j(the)g(b)s(eginning)d(of)i(the)h(residual) e(\014le.)71 b(Some)630 3354 y(LPC)30 b(analysis)f(tec)m(hnique)h(do)g (not)h(generate)g(a)g(residual)d(un)m(til)h(after)i(one)g(frame.)150 3503 y Fk(samp_freq)630 3612 y Fo(Sample)e(frequency)h(of)h(signal)e (\014les)150 3761 y Fk(phoneset)96 b Fo(Phoneset)31 b(used,)e(m)m(ust)i (already)f(b)s(e)f(declared.)150 3909 y Fk(num_diphones)630 4018 y Fo(T)-8 b(otal)28 b(n)m(um)m(b)s(er)f(of)h(diphones)d(in)i (database.)41 b(If)27 b(sp)s(eci\014ed)f(this)h(m)m(ust)g(b)s(e)g (equal)h(or)f(bigger)630 4128 y(than)k(the)h(n)m(um)m(b)s(er)e(of)h(en) m(tries)h(in)e(the)h(index)f(\014le.)43 b(If)31 b(it)g(is)g(not)g(sp)s (eci\014ed)f(the)i(square)f(of)630 4238 y(the)g(n)m(um)m(b)s(er)e(of)h (phones)g(in)f(the)h(phoneset)h(is)e(used.)150 4386 y Fk(sig_band)96 b Fo(n)m(um)m(b)s(er)30 b(of)i(sample)e(p)s(oin)m(ts)g (around)h(actual)g(diphone)f(to)i(tak)m(e)h(from)e(\014le.)42 b(This)30 b(should)630 4495 y(b)s(e)d(larger)f(than)h(an)m(y)h(windo)m (wing)d(used)h(on)h(the)g(signal,)g(and/or)g(up)f(to)i(the)g(pitc)m(h)e (marks)630 4605 y(outside)k(the)g(diphone)f(signal.)150 4753 y Fk(alternates_after)630 4863 y Fo(List)23 b(of)h(pairs)f(of)h (phones)f(stating)h(replacemen)m(ts)g(for)f(the)h(second)g(part)g(of)g (diphone)e(when)630 4973 y(the)31 b(basic)e(diphone)g(is)g(not)i(found) e(in)g(the)h(diphone)f(database.)150 5121 y Fk(alternates_before)630 5230 y Fo(List)i(of)h(pairs)f(of)h(phones)f(stating)h(replacemen)m(ts)h (for)e(the)i(\014rst)e(part)h(of)g(diphone)e(when)630 5340 y(the)h(basic)e(diphone)g(is)g(not)i(found)e(in)g(the)h(diphone)f (database.)p eop %%Page: 99 101 99 100 bop 150 -116 a Fo(Chapter)30 b(21:)41 b(Diphone)30 b(syn)m(thesizer)2200 b(99)150 299 y Fk(default_diphone)630 408 y Fo(When)23 b(unexp)s(ected)f(com)m(binations)g(o)s(ccur)g(and)h (no)f(appropriate)g(diphone)f(can)i(b)s(e)f(found)630 518 y(this)k(diphone)f(should)h(b)s(e)g(used.)39 b(This)25 b(should)h(b)s(e)g(sp)s(eci\014ed)g(for)h(all)f(diphone)f(databases)630 628 y(that)33 b(are)f(to)h(b)s(e)f(robust.)46 b(W)-8 b(e)33 b(usually)d(us)h(the)i(silence)e(to)i(silence)e(diphone.)45 b(No)32 b(mater)630 737 y(ho)m(w)45 b(carefully)e(y)m(ou)i(designed)e (y)m(our)i(diphone)d(set,)49 b(conditions)43 b(when)h(an)g(unkno)m(wn) 630 847 y(diphone)f(o)s(ccur)h(seem)h(to)g Fi(always)54 b Fo(happ)s(en.)81 b(If)44 b(this)f(is)h(not)h(set)g(and)e(a)i(diphone) e(is)630 956 y(requested)30 b(that)h(is)f(not)g(in)f(the)i(database)g (an)g(error)e(o)s(ccurs)i(and)e(syn)m(thesis)h(will)d(stop.)275 1115 y(Examples)i(of)h(b)s(oth)g(general)g(set)h(up,)f(making)g(group)g (\014les)f(and)h(general)g(use)g(are)h(in)390 1243 y Fk(`lib/voices/english/rab_)o(diph)o(one/)o(fes)o(tvox)o(/rab)o(_di)o (phon)o(e.sc)o(m')150 1498 y Fn(21.5)68 b(Access)45 b(strategies)275 1690 y Fo(Three)32 b(basic)h(accessing)h(strategies)g(are)g(a)m(v)-5 b(ailable)33 b(when)f(using)g(diphone)f(databases.)51 b(They)33 b(are)150 1800 y(designed)c(to)i(optimise)e(access)j(time,)e (start)h(up)f(time)g(and)g(space)g(requiremen)m(ts.)150 1958 y Fk(direct)192 b Fo(Load)24 b(all)e(signals)g(at)j(database)f (init)e(time.)38 b(This)22 b(is)g(the)i(slo)m(w)m(est)g(startup)f(but)g (the)h(fastest)630 2068 y(to)k(access.)41 b(This)25 b(is)h(ideal)g(for) h(serv)m(ers.)40 b(It)28 b(is)e(also)h(useful)e(for)i(small)f (databases)i(that)g(can)630 2177 y(b)s(e)i(loaded)g(quic)m(kly)-8 b(.)40 b(It)30 b(is)f(reasonable)i(for)f(man)m(y)g(group)g(\014les.)150 2336 y Fk(dynamic)144 b Fo(Load)31 b(signals)e(as)j(they)f(are)g (required.)40 b(This)29 b(has)i(m)m(uc)m(h)g(faster)g(start)h(up)d(and) i(will)d(only)630 2445 y(gradually)k(use)h(up)g(memory)g(as)h(the)g (diphones)e(are)i(actually)f(used.)49 b(Useful)33 b(for)g(larger)630 2555 y(databases,)e(and)f(for)g(non-group)g(\014le)f(access.)150 2713 y Fk(ondemand)96 b Fo(Load)35 b(the)g(signals)f(as)h(they)g(are)h (requested)f(but)f(free)h(them)g(if)f(they)h(are)g(not)h(required)630 2823 y(again)h(immediately)-8 b(.)60 b(This)35 b(is)h(slo)m(w)m(er)h (access)i(but)d(requires)f(lo)m(w)i(memory)g(usage.)62 b(In)630 2932 y(group)27 b(\014les)f(the)i(re-reads)f(are)h(quite)f(c)m (heap)h(as)f(the)h(database)g(is)f(w)m(ell)f(cac)m(hed)i(and)f(a)h (\014le)630 3042 y(description)g(is)i(already)g(op)s(en)f(for)i(the)f (\014le.)275 3200 y(Note)45 b(that)g(in)e(group)h(\014les)g(pitc)m(h)f (marks)h(\(and)g(LPC)g(co)s(e\016cien)m(ts\))i(are)e(alw)m(a)m(ys)h (fully)d(loaded)150 3309 y(\(cf.)55 b Fk(direct)p Fo(\),)35 b(as)g(they)g(are)h(t)m(ypically)d(smaller.)53 b(Only)34 b(signals)f(\(w)m(a)m(v)m(eform)k(\014les)d(or)h(residuals\))e(are)150 3419 y(p)s(oten)m(tially)c(dynamically)f(loaded.)150 3675 y Fn(21.6)68 b(Diphone)45 b(selection)275 3867 y Fo(The)36 b(appropriate)g(diphone)e(is)i(selected)i(based)e(on)h(the)g (name)f(of)h(the)g(phone)f(iden)m(ti\014ed)f(in)h(the)150 3976 y(segmen)m(t)c(stream.)45 b(Ho)m(w)m(ev)m(er)33 b(for)e(b)s(etter)g(diphone)f(syn)m(thesis)g(it)h(is)f(useful)g(to)i (augmen)m(t)g(the)g(diphone)150 4086 y(database)j(with)f(other)g (diphones)f(in)g(addition)f(to)k(the)e(ones)h(directly)e(from)h(the)h (phoneme)f(set.)53 b(F)-8 b(or)150 4195 y(example)26 b(dark)f(and)g(ligh)m(t)g(l's,)h(distinguishing)c(consonan)m(ts)k(from) f(their)g(consonan)m(t)i(cluster)e(form)h(and)150 4305 y(their)k(isolated)h(form.)43 b(There)31 b(are)h(ho)m(w)m(ev)m(er)g(t)m (w)m(o)h(metho)s(ds)d(to)i(iden)m(tify)e(this)g(mo)s(di\014cation)g (from)h(the)150 4415 y(basic)f(name.)275 4549 y(When)i(the)i(diphone)d (mo)s(dule)g(is)h(called)h(the)g(ho)s(ok)g Fk(diphone_module_hooks)27 b Fo(is)32 b(applied.)47 b(That)150 4658 y(is)28 b(a)i(function)e(of)h (list)f(of)h(functions)f(whic)m(h)g(will)e(b)s(e)j(applied)e(to)j(the)f (utterance.)41 b(Its)29 b(main)f(purp)s(ose)g(is)150 4768 y(to)k(allo)m(w)f(the)h(con)m(v)m(ersion)g(of)g(the)f(basic)g (name)h(in)m(to)f(an)h(augmen)m(ted)g(one.)45 b(F)-8 b(or)32 b(example)f(con)m(v)m(erting)150 4877 y(a)d(basic)f Fk(l)h Fo(in)m(to)f(a)i(dark)e(l,)h(denoted)f(b)m(y)h Fk(ll)p Fo(.)39 b(The)28 b(functions)e(giv)m(en)i(in)e Fk(diphone_module_hooks)c Fo(ma)m(y)150 4987 y(set)33 b(the)f(feature)g Fk(diphone_phone_name)27 b Fo(whic)m(h)k(if)g(set)i (will)c(b)s(e)i(used)h(rather)g(than)f(the)i Fk(name)e Fo(of)h(the)150 5096 y(segmen)m(t.)275 5230 y(F)-8 b(or)30 b(example)g(supp)s(ose)f(w)m(e)h(wish)e(to)j(use)f(a)g(dark)g(l)f(\()p Fk(ll)p Fo(\))h(rather)g(than)g(a)g(normal)f(l)g(for)h(all)f(l's)g (that)150 5340 y(app)s(ear)k(in)g(the)h(co)s(da)h(of)f(a)g(syllable.)50 b(First)33 b(w)m(e)i(w)m(ould)e(de\014ne)g(a)h(function)f(to)i(whic)m (h)e(iden)m(ti\014es)f(this)p eop %%Page: 100 102 100 101 bop 150 -116 a Fo(100)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(condition)37 b(and)g(adds)g(the)h(addition)f(feature)h Fk(diphone_phone_name)33 b Fo(iden)m(tify)j(the)j(name)f(c)m(hange.)150 408 y(The)30 b(follo)m(wing)f(function)g(w)m(ould)g(ac)m(hiev)m(e)j(this)390 537 y Fk(\(define)46 b(\(fix_dark_ls)e(utt\))390 641 y("\(fix_dark_ls)g(UTT\))390 745 y(Identify)i(ls)h(in)g(coda)g (position)e(and)i(relabel)f(them)g(as)i(ll.")485 848 y(\(mapcar)533 952 y(\(lambda)e(\(seg\))629 1056 y(\(if)h(\(and)f (\(string-equal)e("l")j(\(item.name)e(seg\)\))1058 1160 y(\(string-equal)f("+")j(\(item.feat)e(seg)i("p.ph_vc"\)\))1058 1264 y(\(item.relation.prev)c(seg)k("SylStructure"\)\))676 1367 y(\(item.set_feat)d(seg)j("diphone_phone_name")42 b("ll"\)\)\))533 1471 y(\(utt.relation.items)h(utt)k('Segment\)\))485 1575 y(utt\))275 1709 y Fo(Then)29 b(when)g(w)m(e)i(wish)e(to)i(use)f (this)f(for)h(a)h(particular)e(v)m(oice)i(w)m(e)g(need)f(to)h(add)390 1838 y Fk(\(set!)46 b(diphone_module_hooks)d(\(list)j(fix_dark_ls\)\)) 150 2082 y Fo(in)29 b(the)i(v)m(oice)g(selection)f(function.)275 2326 y(F)-8 b(or)26 b(a)g(more)g(complex)f(example)h(including)c (consonan)m(t)27 b(cluster)e(iden)m(ti\014cation)f(see)j(the)e (American)150 2436 y(English)44 b(v)m(oice)k(`)p Fk(ked)p Fo(')e(in)f(`)p Fk(festival/lib/voices/engli)o(sh/k)o(ed/f)o(est)o (vox/)o(kd_d)o(iph)o(one.)o(scm)o Fo('.)150 2545 y(The)30 b(function)f Fk(ked_diphone_fix_phone_na)o(me)24 b Fo(carries)30 b(out)h(a)f(n)m(um)m(b)s(er)f(of)i(mappings.)275 2680 y(The)k(second)h(metho)s(d)g(for)f(c)m(hanging)h(a)h(name)f(is)f (during)f(actual)i(lo)s(ok)f(up)g(of)i(a)f(diphone)e(in)h(the)150 2790 y(database.)64 b(The)37 b(list)f(of)i(alternates)g(is)f(giv)m(en)h (b)m(y)f(the)h Fk(Diphone_Init)d Fo(function.)61 b(These)38 b(are)g(used)150 2899 y(when)32 b(the)h(sp)s(eci\014ed)f(diphone)f (can't)j(b)s(e)f(found.)47 b(F)-8 b(or)34 b(example)f(w)m(e)h(often)f (allo)m(w)g(mappings)e(of)i(dark)150 3009 y(l,)d Fk(ll)g Fo(to)h Fk(l)f Fo(as)g(sometimes)h(the)f(dark)g(l)g(diphone)e(do)s (esn't)i(actually)g(exist)g(in)f(the)i(database.)p eop %%Page: 101 103 101 102 bop 150 -116 a Fo(Chapter)30 b(22:)41 b(Other)30 b(syn)m(thesis)g(metho)s(ds)1968 b(101)150 299 y Fl(22)80 b(Other)53 b(syn)l(thesis)f(metho)t(ds)275 524 y Fo(F)-8 b(estiv)j(al)30 b(supp)s(orts)f(a)h(n)m(um)m(b)s(er)f(of)i(other)g(syn) m(thesis)e(systems)150 775 y Fn(22.1)68 b(LPC)45 b(diphone)g(syn)l (thesizer)275 966 y Fo(A)24 b(v)m(ery)i(simple,)e(and)g(v)m(ery)h (e\016cien)m(t)h(LPC)e(diphone)f(syn)m(thesizer)h(using)f(the)i Fk(")p Fo(dono)m(v)-5 b(an)p Fk(")25 b Fo(diphones)150 1076 y(is)38 b(also)h(supp)s(orted.)64 b(This)38 b(syn)m(thesis)f (metho)s(d)i(is)f(primarily)d(the)k(w)m(ork)g(of)h(Stev)m(e)f(Isard)g (and)f(later)150 1185 y(Alistair)30 b(Conkie.)44 b(The)31 b(syn)m(thesis)g(qualit)m(y)g(is)g(not)h(as)g(go)s(o)s(d)f(as)h(the)g (residual)e(excited)i(LPC)f(diphone)150 1295 y(syn)m(thesizer)i(but)f (has)i(the)f(adv)-5 b(an)m(tage)35 b(of)f(b)s(eing)e(m)m(uc)m(h)h (smaller.)48 b(The)33 b(dono)m(v)-5 b(an)34 b(diphone)d(database)150 1404 y(is)e(under)g(800k.)275 1537 y(The)k(diphones)f(are)j(loaded)e (through)h(the)g Fk(Donovan_Init)d Fo(function)i(whic)m(h)g(tak)m(es)i (the)g(name)f(of)150 1647 y(the)d(dictionary)e(\014le)g(and)h(the)g (diphone)f(\014le)g(as)i(argumen)m(ts,)g(see)g(the)f(follo)m(wing)f (for)h(details)390 1773 y Fk(lib/voices/english/don_d)o(ipho)o(ne/f)o (est)o(vox/)o(don_)o(dip)o(hone)o(.scm)150 2025 y Fn(22.2)68 b(MBR)l(OLA)275 2216 y Fo(As)56 b(an)g(example)g(of)g(ho)m(w)g(F)-8 b(estiv)j(al)56 b(ma)m(y)h(use)f(a)g(completely)g(external)g(syn)m (thesis)f(metho)s(d)150 2325 y(w)m(e)78 b(supp)s(ort)d(the)j(free)f (system)g(MBR)m(OLA.)h(MBR)m(OLA)g(is)f(b)s(oth)f(a)i(diphone)d(syn)m (thesis)150 2435 y(tec)m(hnique)80 b(and)g(an)h(actual)g(system)g(that) g(constructs)g(w)m(a)m(v)m(eforms)h(from)e(segmen)m(t,)95 b(du-)150 2545 y(ration)65 b(and)h(F0)g(target)h(information.)146 b(F)-8 b(or)66 b(details)f(see)h(the)g(MBR)m(OLA)h(home)f(page)g(at)150 2654 y Fk(http://tcts.fpms.ac.be/s)o(ynth)o(esis)o(/mb)o(rola)o(.htm)o (l)p Fo(.)163 b(MBR)m(OLA)74 b(already)f(supp)s(orts)f(a)150 2764 y(n)m(um)m(b)s(er)29 b(of)i(diphone)d(sets)j(including)c(F)-8 b(renc)m(h,)31 b(Spanish,)d(German)i(and)g(Romanian.)275 2896 y(F)-8 b(estiv)j(al)30 b(supp)s(ort)f(for)i(MBR)m(OLA)g(is)f(in)f (the)i(\014le)e(`)p Fk(lib/mbrola.scm)p Fo('.)38 b(It)31 b(is)f(all)f(in)h(Sc)m(heme.)41 b(The)150 3006 y(function)34 b Fk(MBROLA_Synth)e Fo(is)j(called)f(when)h(parameter)h Fk(Synth_Method)c Fo(is)i Fk(MBROLA)p Fo(.)54 b(The)35 b(function)150 3116 y(simply)i(sa)m(v)m(es)j(the)f(segmen)m(t,)k (duration)38 b(and)g(target)j(information)c(from)i(the)g(utterance,)k (calls)38 b(the)150 3225 y(external)c(`)p Fk(mbrola)p Fo(')f(program)g(with)g(the)h(selected)h(diphone)d(database,)k(and)d (reloads)h(the)g(generated)150 3335 y(w)m(a)m(v)m(eform)e(bac)m(k)f(in) m(to)f(the)h(utterance.)275 3467 y(An)d(MBR)m(OLA-ized)h(v)m(ersion)e (of)i(the)g(Roger)g(diphoneset)e(is)g(a)m(v)-5 b(ailable)28 b(from)g(the)h(MBR)m(OLA)g(site.)150 3577 y(The)e(simple)e(F)-8 b(estiv)j(al)27 b(end)g(is)f(distributed)e(as)j(part)g(of)h(the)f (system)g(in)f(`)p Fk(festvox_en1.tar.gz)p Fo('.)35 b(The)150 3687 y(follo)m(wing)29 b(v)-5 b(ariables)29 b(are)i(used)e(b)m(y)h(the) h(pro)s(cess)150 3842 y Fk(mbrola_progname)630 3952 y Fo(the)g(pathname)f(of)g(the)h(m)m(brola)f(executable.)150 4107 y Fk(mbrola_database)630 4217 y Fo(the)37 b(name)f(of)h(the)g (database)g(to)h(use.)59 b(This)34 b(v)-5 b(ariable)36 b(is)f(switc)m(hed)h(b)s(et)m(w)m(een)h(di\013eren)m(t)630 4327 y(sp)s(eak)m(ers.)150 4578 y Fn(22.3)68 b(Syn)l(thesizers)46 b(in)f(dev)l(elopmen)l(t)275 4769 y Fo(In)31 b(addition)f(to)i(the)g (ab)s(o)m(v)m(e)i(syn)m(thesizers)d(F)-8 b(estiv)j(al)32 b(also)g(supp)s(orts)e(CSTR's)g(older)h(PSOLA)g(syn-)150 4879 y(thesizer)39 b(written)f(b)m(y)h(P)m(aul)f(T)-8 b(a)m(ylor.)67 b(But)39 b(as)g(the)g(new)m(er)g(diphone)e(syn)m (thesizer)i(pro)s(duces)f(similar)150 4988 y(qualit)m(y)c(output)h(and) f(is)g(a)i(new)m(er)f(\(and)f(hence)i(a)f(cleaner\))g(implemen)m (tation)f(further)g(dev)m(elopmen)m(t)150 5098 y(of)d(the)f(older)g(mo) s(dule)e(is)i(unlik)m(ely)-8 b(.)275 5230 y(An)35 b(exp)s(erimen)m(tal) f(unit)g(seleciton)h(syn)m(thesis)f(mo)s(dule)g(is)g(included)f(in)h(`) p Fk(modules/clunits/)p Fo(')d(it)150 5340 y(is)f(an)i(implemen)m (tation)e(of)h Fj(blac)m(k97c)p Fo(.)45 b(It)32 b(is)e(included)f(for)i (p)s(eople)g(wishing)d(to)33 b(con)m(tin)m(ue)e(reserac)m(h)h(in)p eop %%Page: 102 104 102 103 bop 150 -116 a Fo(102)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(the)36 b(area)g(rather)f(than)g(as)h(a)g(fully)d(usable)h(w)m(a)m(v)m(eform)j (syn)m(thesis)d(engine.)55 b(Although)35 b(it)g(sometimes)150 408 y(giv)m(es)30 b(excellen)m(t)h(results)d(it)i(also)f(sometimes)h (giv)m(es)h(amazingly)e(bad)g(ones)h(to)s(o.)42 b(W)-8 b(e)31 b(included)c(this)i(as)150 518 y(an)h(example)g(of)h(one)g(p)s (ossible)c(framew)m(ork)k(for)f(selection-based)g(syn)m(thesis.)275 653 y(As)38 b(one)h(of)g(our)f(funded)f(pro)5 b(jects)38 b(is)g(to)h(sp)s(eci\014cally)e(dev)m(elop)h(new)g(selection)h(based)f (syn)m(thesis)150 762 y(algorithms)29 b(w)m(e)i(exp)s(ect)g(to)g (include)d(more)j(mo)s(dels)e(within)f(later)i(v)m(ersions)g(of)g(the)h (system.)275 897 y(Also,)40 b(no)m(w)f(that)g(F)-8 b(estiv)j(al)39 b(has)g(b)s(een)f(released)g(other)h(groups)f(are)h(w)m(orking)f(on)h (new)f(syn)m(thesis)150 1006 y(tec)m(hniques)32 b(in)g(the)g(system.)48 b(Man)m(y)33 b(of)g(these)g(will)d(b)s(ecome)j(a)m(v)-5 b(ailable)32 b(and)g(where)g(p)s(ossible)e(w)m(e)k(will)150 1116 y(giv)m(e)24 b(p)s(oin)m(ters)d(from)i(the)g(F)-8 b(estiv)j(al)23 b(home)g(page)h(to)g(them.)38 b(P)m(articularly)21 b(there)j(is)e(an)h(alternativ)m(e)g(resid-)150 1225 y(ual)34 b(excited)i(LPC)e(mo)s(dule)f(implemen)m(ted)h(at)i(the)f(Cen) m(ter)h(for)e(Sp)s(ok)m(en)h(Language)h(Understanding)150 1335 y(\(CSLU\))30 b(at)h(the)g(Oregon)f(Graduate)h(Institute)f (\(OGI\).)p eop %%Page: 103 105 103 104 bop 150 -116 a Fo(Chapter)30 b(23:)41 b(Audio)30 b(output)2415 b(103)150 299 y Fl(23)80 b(Audio)54 b(output)275 558 y Fo(If)33 b(y)m(ou)i(ha)m(v)m(e)g(nev)m(er)g(heard)e(an)m(y)i (audio)e(ev)m(er)i(on)f(y)m(our)g(mac)m(hine)g(then)g(y)m(ou)h(m)m(ust) f(\014rst)f(w)m(ork)i(out)150 668 y(if)h(y)m(ou)h(ha)m(v)m(e)h(the)e (appropriate)g(hardw)m(are.)59 b(If)36 b(y)m(ou)i(do,)g(y)m(ou)f(also)g (need)f(the)h(appropriate)e(soft)m(w)m(are)150 777 y(to)f(driv)m(e)e (it.)48 b(F)-8 b(estiv)j(al)33 b(can)g(directly)f(in)m(terface)i(with)d (a)j(n)m(um)m(b)s(er)d(of)i(audio)f(systems)h(or)g(use)g(external)150 887 y(metho)s(ds)d(for)g(pla)m(ying)f(audio.)275 1030 y(The)g(curren)m(tly)h(supp)s(orted)e(audio)i(metho)s(ds)f(are)150 1264 y(`)p Fk(NAS)p Fo(')286 b(NCD's)28 b(NAS,)f(is)g(a)h(net)m(w)m (ork)g(transparen)m(t)f(audio)g(system)h(\(formerly)e(called)h (netaudio\).)630 1374 y(If)37 b(y)m(ou)i(already)e(run)g(serv)m(ers)h (on)g(y)m(our)f(mac)m(hines)h(y)m(ou)g(simply)e(need)h(to)i(ensure)e(y) m(our)630 1484 y Fk(AUDIOSERVER)18 b Fo(en)m(vironmen)m(t)j(v)-5 b(ariable)20 b(is)g(set)i(\(or)g(y)m(our)f Fk(DISPLAY)e Fo(v)-5 b(ariable)20 b(if)h(y)m(our)g(audio)630 1593 y(output)33 b(device)h(is)f(the)h(same)g(as)g(y)m(our)g(X)g(Windo)m(ws) f(displa)m(y\).)50 b(Y)-8 b(ou)34 b(ma)m(y)h(set)f(NAS)g(as)630 1703 y(y)m(our)c(audio)g(output)g(metho)s(d)g(b)m(y)g(the)g(command)870 1836 y Fk(\(Parameter.set)44 b('Audio_Method)g('netaudio\))150 2004 y Fo(`)p Fk(/dev/audio)p Fo(')630 2113 y(On)27 b(man)m(y)i (systems)f(`)p Fk(/dev/audio)p Fo(')e(o\013ers)j(a)g(simple)d(lo)m(w)i (lev)m(el)g(metho)s(d)g(for)g(audio)f(out-)630 2223 y(put.)81 b(It)45 b(is)e(limited)f(to)j(m)m(u-la)m(w)f(enco)s(ding)f(at)i(8KHz.) 83 b(Some)44 b(implemen)m(tations)f(of)630 2332 y(`)p Fk(/dev/audio)p Fo(')36 b(allo)m(w)i(other)h(sample)f(rates)h(and)f (sample)g(t)m(yp)s(es)h(but)f(as)g(that)i(is)d(non-)630 2442 y(standard)25 b(this)f(metho)s(d)i(only)e(uses)i(the)f(common)h (format.)40 b(T)m(ypical)25 b(systems)g(that)i(o\013er)630 2551 y(these)d(are)h(Suns,)f(Lin)m(ux)e(and)i(F)-8 b(reeBSD)25 b(mac)m(hines.)38 b(Y)-8 b(ou)25 b(ma)m(y)f(set)h(direct)e(`)p Fk(/dev/audio)p Fo(')630 2661 y(access)32 b(as)e(y)m(our)h(audio)e (metho)s(d)h(b)m(y)g(the)h(command)870 2794 y Fk(\(Parameter.set)44 b('Audio_Method)g('sunaudio\))150 2962 y Fo(`)p Fk(/dev/audio)28 b(\(16bit\))p Fo(')630 3071 y(Later)41 b(Sun)e(Microsystems)i(w)m (orkstations)g(supp)s(ort)e(16)j(bit)e(linear)f(audio)g(at)j(v)-5 b(arious)630 3181 y(sample)22 b(rates.)39 b(Supp)s(ort)20 b(for)j(this)f(form)g(of)h(audio)f(output)g(is)g(supp)s(orted.)36 b(It)23 b(is)f(a)h(compile)630 3291 y(time)j(option)f(\(as)h(it)g (requires)e(include)g(\014les)h(that)h(only)f(exist)h(on)f(Sun)g(mac)m (hines.)39 b(If)25 b(y)m(our)630 3400 y(installation)20 b(supp)s(orts)f(it)j(\(c)m(hec)m(k)h(the)f(mem)m(b)s(ers)f(of)h(the)g (list)f Fk(*modules*)p Fo(\))e(y)m(ou)j(can)g(select)630 3510 y(16)31 b(bit)f(audio)f(output)h(on)g(Suns)f(b)m(y)h(the)h (command)870 3643 y Fk(\(Parameter.set)44 b('Audio_Method)g ('sun16audio\))630 3781 y Fo(Note)30 b(this)e(will)e(send)h(it)i(to)g (the)g(lo)s(cal)f(mac)m(hine)g(where)g(the)h(festiv)-5 b(al)28 b(binary)f(is)g(running,)630 3891 y(this)33 b(migh)m(t)h(not)h (b)s(e)f(the)g(one)h(y)m(ou)g(are)g(sitting)e(next)i(to|that's)g(wh)m (y)f(w)m(e)h(recommend)630 4001 y(netaudio.)40 b(A)30 b(hac)m(ky)h(solution)d(to)j(pla)m(ying)e(audio)g(on)h(a)g(lo)s(cal)f (mac)m(hine)h(from)g(a)g(remote)630 4110 y(mac)m(hine)23 b(without)f(using)g(netaudio)h(is)f(describ)s(ed)f(in)h(Chapter)h(6)g ([Installation],)h(page)g(13)150 4278 y(`)p Fk(/dev/dsp)k(\(voxware\))p Fo(')630 4388 y(Both)67 b(F)-8 b(reeBSD)68 b(and)e(Lin)m(ux)f(ha)m(v)m (e)j(a)f(v)m(ery)g(similar)d(audio)h(in)m(terface)j(through)630 4497 y(`)p Fk(/dev/dsp)p Fo('.)61 b(There)37 b(is)f(compile)h(time)g (supp)s(ort)f(for)h(these)h(in)f(the)h(sp)s(eec)m(h)f(to)s(ols)h(and) 630 4607 y(when)i(compiled)g(with)g(that)h(option)g(F)-8 b(estiv)j(al)41 b(ma)m(y)h(utilise)d(it.)72 b(Chec)m(k)42 b(the)f(v)-5 b(alue)41 b(of)630 4716 y(the)49 b(v)-5 b(ariable)47 b Fk(*modules*)f Fo(to)j(see)g(whic)m(h)e(audio)g(devices) i(are)f(directly)g(supp)s(orted.)630 4826 y(On)43 b(F)-8 b(reeBSD,)45 b(if)e(supp)s(orted,)j(y)m(ou)e(ma)m(y)g(select)h(lo)s (cal)e(16)h(bit)f(linear)f(audio)h(b)m(y)h(the)630 4935 y(command)870 5068 y Fk(\(Parameter.set)g('Audio_Method)g ('freebsd16audio\))630 5207 y Fo(While)29 b(under)g(Lin)m(ux,)g(if)g (supp)s(orted,)g(y)m(ou)i(ma)m(y)g(use)f(the)h(command)870 5340 y Fk(\(Parameter.set)44 b('Audio_Method)g('linux16audio\))p eop %%Page: 104 106 104 105 bop 150 -116 a Fo(104)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)630 299 y(Some)41 b(earlier)e(\(and)i(smaller)e(mac)m(hines\))h(only)g(ha)m(v)m(e)i(8bit) e(audio)g(ev)m(en)h(though)g(they)630 408 y(include)23 b(a)i(`)p Fk(/dev/dsp)p Fo(')f(\(Soundblaster)f(PR)m(O)i(for)g (example\).)39 b(This)23 b(w)m(as)j(not)f(dealt)g(with)630 518 y(prop)s(erly)35 b(in)g(earlier)h(v)m(ersions)h(of)g(the)g(system)g (but)g(no)m(w)g(the)g(supp)s(ort)e(automatically)630 628 y(c)m(hec)m(ks)43 b(to)f(see)g(the)g(sample)f(width)e(supp)s(orted) h(and)h(uses)g(it)g(accordingly)-8 b(.)74 b(8)42 b(bit)e(at)630 737 y(higher)30 b(frequencies)g(that)i(8K)g(sounds)e(b)s(etter)h(than)h (straigh)m(t)f(8k)h(ula)m(w)f(so)g(this)f(feature)630 847 y(is)f(useful.)150 990 y(`)p Fk(mplayer)p Fo(')94 b(Under)29 b(Windo)m(ws)h(NT)g(or)g(95)h(y)m(ou)g(can)g(use)f(the)g(`)p Fk(mplayer)p Fo(')f(command)h(whic)m(h)f(w)m(e)i(ha)m(v)m(e)630 1100 y(found)22 b(requires)f(sp)s(ecial)h(treatemen)m(t)j(to)f(get)g (its)f(parameters)g(righ)m(t.)38 b(Rather)24 b(than)e(using)630 1210 y Fk(Audio_Command)38 b Fo(y)m(ou)k(can)g(select)g(this)e(on)i (Windo)m(ws)e(mac)m(hine)h(with)g(the)g(follo)m(wing)630 1319 y(command)870 1440 y Fk(\(Parameter.set)j('Audio_Method)g ('mplayeraudio\))630 1567 y Fo(Alternativ)m(ely)30 b(built-in)d(audio)i (output)h(is)g(a)m(v)-5 b(ailable)30 b(with)870 1687 y Fk(\(Parameter.set)44 b('Audio_Method)g('win32audio\))150 1831 y Fo(`)p Fk(SGI)30 b(IRIX)p Fo(')64 b(Builtin)28 b(audio)h(output)h(is)g(no)m(w)g(a)m(v)-5 b(ailable)30 b(for)g(SGI's)g(IRIX)g(6.2)i(using)c(the)j(command)870 1952 y Fk(\(Parameter.set)44 b('Audio_Method)g('irixaudio\))150 2095 y Fo(`)p Fk(Audio)29 b(Command)p Fo(')630 2205 y(Alternativ)m(ely) 43 b(the)i(user)e(can)h(pro)m(vide)g(a)g(command)g(that)g(can)h(pla)m (y)e(an)h(audio)g(\014le.)630 2314 y(F)-8 b(estiv)j(al)26 b(will)d(execute)k(that)g(command)e(in)g(an)h(en)m(vironmen)m(t)f (where)g(the)h(shell)e(v)-5 b(ariables)630 2424 y Fk(SR)29 b Fo(is)f(set)i(to)g(the)g(sample)e(rate)i(\(in)f(Hz\))h(and)f Fk(FILE)f Fo(whic)m(h,)g(b)m(y)h(default,)g(is)g(the)g(name)h(of)630 2534 y(an)h(unheadered)f(ra)m(w,)i(16bit)f(\014le)f(con)m(taining)h (the)h(syn)m(thesized)e(w)m(a)m(v)m(eform)j(in)d(the)h(b)m(yte)630 2643 y(order)j(of)h(the)g(mac)m(hine)g(F)-8 b(estiv)j(al)35 b(is)e(running)f(on.)54 b(Y)-8 b(ou)35 b(can)g(sp)s(ecify)f(y)m(our)g (audio)g(pla)m(y)630 2753 y(command)39 b(and)h(that)g(y)m(ou)g(wish)e (F)-8 b(estiv)j(al)40 b(to)g(execute)h(that)f(command)g(through)f(the) 630 2862 y(follo)m(wing)29 b(command)870 2983 y Fk(\(Parameter.set)44 b('Audio_Command)g("sun16play)h(-f)i($SR)g($FILE"\))870 3087 y(\(Parameter.set)d('Audio_Method)g('Audio_Command\))630 3213 y Fo(On)30 b(SGI)f(mac)m(hines)h(under)f(IRIX)h(the)h(equiv)-5 b(alen)m(t)30 b(w)m(ould)f(b)s(e)870 3334 y Fk(\(Parameter.set)44 b('Audio_Command)1395 3438 y("sfplay)i(-i)h(integer)f(16)h(2scomp)f (rate)h($SR)g(end)g($FILE"\))870 3542 y(\(Parameter.set)d ('Audio_Method)g('Audio_Command\))275 3685 y Fo(The)21 b Fk(Audio_Command)e Fo(metho)s(d)j(of)g(pla)m(ying)f(w)m(a)m(v)m (eforms)j(F)-8 b(estiv)j(al)23 b(supp)s(orts)d(t)m(w)m(o)k(additional)c (audio)150 3795 y(parameters.)56 b Fk(Audio_Required_Rate)30 b Fo(allo)m(ws)35 b(y)m(ou)g(to)h(use)f(F)-8 b(estiv)j(al's)36 b(in)m(ternal)e(sample)g(rate)i(con-)150 3905 y(v)m(ersion)26 b(function)g(to)h(an)m(y)g(desired)f(rate.)40 b(Note)28 b(this)e(ma)m(y)h(not)g(b)s(e)f(as)h(go)s(o)s(d)g(as)g(pla)m(ying)f (the)g(w)m(a)m(v)m(eform)150 4014 y(at)34 b(the)g(sample)e(rate)j(it)e (is)f(originally)f(created)j(in,)g(but)e(as)i(some)g(hardw)m(are)f (devices)g(are)h(restrictiv)m(e)150 4124 y(in)27 b(what)h(sample)g (rates)h(they)f(supp)s(ort,)g(or)g(ha)m(v)m(e)i(naiv)m(e)e(resample)f (functions)g(this)h(could)f(b)s(e)h(optimal.)150 4233 y(The)34 b(second)h(additional)d(audio)i(parameter)g(is)g Fk(Audio_Required_Format)29 b Fo(whic)m(h)k(can)i(b)s(e)f(used)f(to)150 4343 y(sp)s(ecify)25 b(the)i(desired)d(output)j(forms)e(of)i(the)f (\014le.)39 b(The)26 b(default)f(is)h(unheadered)f(ra)m(w,)j(but)d (this)h(ma)m(y)h(b)s(e)150 4453 y(an)m(y)j(of)g(the)h(v)-5 b(alues)29 b(supp)s(orted)f(b)m(y)i(the)g(sp)s(eec)m(h)g(to)s(ols)g (\(including)d(nist,)i(esps,)h(snd,)f(ri\013,)g(ai\013,)h(audlab,)150 4562 y(ra)m(w)k(and,)g(if)e(y)m(ou)i(really)e(w)m(an)m(t)j(it,)f (ascii\).)49 b(F)-8 b(or)35 b(example)e(supp)s(ose)f(y)m(ou)i(ha)m(v)m (e)h(a)e(program)h(that)g(only)150 4672 y(pla)m(ys)c(sun)f(headered)h (\014les)f(at)j(16000)g(KHz)f(y)m(ou)f(can)h(set)g(up)e(audio)h(output) g(as)390 4792 y Fk(\(Parameter.set)44 b('Audio_Method)g ('Audio_Command\))390 4896 y(\(Parameter.set)g('Audio_Required_Rate)e (16000\))390 5000 y(\(Parameter.set)i('Audio_Required_Format)e('snd\)) 390 5104 y(\(Parameter.set)i('Audio_Command)g("sunplay)h($FILE"\))275 5230 y Fo(Where)21 b(the)g(audio)f(metho)s(d)g(supp)s(orts)f(it,)k(y)m (ou)e(can)h(sp)s(ecify)d(alternativ)m(e)j(audio)e(device)h(for)f(mac)m (hine)150 5340 y(that)31 b(ha)m(v)m(e)h(more)e(than)g(one)h(audio)e (device.)p eop %%Page: 105 107 105 106 bop 150 -116 a Fo(Chapter)30 b(23:)41 b(Audio)30 b(output)2415 b(105)390 299 y Fk(\(Parameter.set)44 b('Audio_Device)g ("/dev/dsp2"\))275 433 y Fo(If)69 b(Netaudio)i(is)e(not)h(a)m(v)-5 b(ailable)70 b(and)g(y)m(ou)g(need)g(to)h(pla)m(y)f(audio)f(on)i(a)f (mac)m(hine)g(dif-)150 543 y(feren)m(t)77 b(from)f(teh)g(one)h(F)-8 b(estiv)j(al)76 b(is)g(running)d(on)j(w)m(e)h(ha)m(v)m(e)h(had)d(rep)s (orts)h(that)h(`)p Fk(snack)p Fo(')150 653 y(\()p Fk (http://www.speech.kth.se/s)o(nac)o(k/)p Fo(\))36 b(is)41 b(a)h(p)s(ossible)d(solution.)74 b(It)42 b(allo)m(ws)f(remote)h(pla)m (y)g(but)150 762 y(imp)s(ortnatly)28 b(also)j(supp)s(orts)d(Windo)m(ws) i(95/NT)h(based)f(clien)m(ts.)275 897 y(Because)c(y)m(ou)g(do)f(not)g (w)m(an)m(t)h(to)g(w)m(ait)f(for)g(a)h(whole)e(\014le)h(to)g(b)s(e)g (syn)m(thesized)g(b)s(efore)f(y)m(ou)i(can)f(pla)m(y)g(it,)150 1006 y(F)-8 b(estiv)j(al)33 b(also)f(o\013ers)h(an)g Fi(audio)j(sp)-5 b(o)g(oler)45 b Fo(that)33 b(allo)m(ws)f(the)h(pla)m (ying)e(of)i(audio)f(\014les)f(while)g(con)m(tin)m(uing)150 1116 y(to)k(syn)m(thesize)g(the)f(follo)m(wing)f(utterances.)54 b(On)34 b(reasonable)g(w)m(orkstations)h(this)f(allo)m(ws)f(the)i (breaks)150 1225 y(b)s(et)m(w)m(een)c(utterances)g(to)g(b)s(e)f(as)h (short)f(as)g(y)m(our)h(hardw)m(are)f(allo)m(ws)f(them)i(to)g(b)s(e.) 275 1360 y(The)e(audio)h(sp)s(o)s(oler)f(ma)m(y)i(b)s(e)e(started)i(b)m (y)g(selecting)f(async)m(hronous)g(mo)s(de)390 1489 y Fk(\(audio_mode)45 b(async\))275 1623 y Fo(This)37 b(is)h(switc)m(hed)h (on)g(b)m(y)h(default)e(b)s(e)h(the)g(function)f Fk(tts)p Fo(.)67 b(Y)-8 b(ou)40 b(ma)m(y)g(put)e(F)-8 b(estiv)j(al)40 b(bac)m(k)g(in)m(to)150 1733 y(sync)m(hronous)k(mo)s(de)h(\(i.e.)86 b(the)45 b Fk(utt.play)e Fo(command)i(will)e(w)m(ait)i(un)m(til)f(the)h (audio)f(has)h(\014nished)150 1842 y(pla)m(ying)29 b(b)s(efore)h (returning\).)39 b(b)m(y)31 b(the)f(command)390 1971 y Fk(\(audio_mode)45 b(sync\))275 2105 y Fo(Additional)28 b(related)i(commands)g(are)150 2265 y Fk(\(audio_mode)d('close\))630 2374 y Fo(Close)f(the)g(audio)f(serv)m(er)h(do)m(wn)g(but)f(w)m(ait)h (un)m(til)f(it)g(is)h(cleared.)39 b(This)24 b(is)h(useful)f(in)h (scripts)630 2484 y(etc.)42 b(when)29 b(y)m(ou)i(wish)d(to)k(only)d (exit)h(when)g(all)f(audio)g(is)h(complete.)150 2643 y Fk(\(audio_mode)d('shutup\))630 2753 y Fo(Close)d(the)h(audio)e(do)m (wn)h(no)m(w,)i(stopping)e(the)g(curren)m(t)h(\014le)e(b)s(eing)g(pla)m (y)m(ed)i(and)f(an)m(y)h(in)e(the)630 2863 y(queue.)53 b(Note)35 b(that)g(this)f(ma)m(y)h(tak)m(e)h(some)f(time)f(to)h(tak)m (e)h(e\013ect)g(dep)s(ending)c(on)i(whic)m(h)630 2972 y(audio)26 b(metho)s(d)h(y)m(ou)g(use.)40 b(Sometimes)27 b(there)g(can)h(b)s(e)e(100s)i(of)g(milliseconds)c(of)j(audio)f(in)630 3082 y(the)31 b(device)f(itself)f(whic)m(h)g(cannot)i(b)s(e)f(stopp)s (ed.)150 3241 y Fk(\(audio_mode)d('query\))630 3351 y Fo(Lists)i(the)i(size)f(of)h(eac)m(h)g(w)m(a)m(v)m(eform)h(curren)m (tly)e(in)f(the)h(queue.)p eop %%Page: 106 108 106 107 bop 150 -116 a Fo(106)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 107 109 107 108 bop 150 -116 a Fo(Chapter)30 b(24:)41 b(V)-8 b(oices)2707 b(107)150 299 y Fl(24)80 b(V)-13 b(oices)275 580 y Fo(This)20 b(c)m(hapter)k(giv)m(es)f(some)g(general)f (suggestions)h(ab)s(out)f(adding)f(new)i(v)m(oices)g(to)g(F)-8 b(estiv)j(al.)39 b(F)-8 b(estiv)j(al)150 689 y(attempts)34 b(to)f(o\013er)g(an)f(en)m(vironmen)m(t)h(where)f(new)g(v)m(oices)h (and)f(languages)h(can)g(easily)f(b)s(e)g(slotted)g(in)150 799 y(to)f(the)g(system.)150 1096 y Fn(24.1)68 b(Curren)l(t)46 b(v)l(oices)275 1304 y Fo(Curren)m(tly)28 b(there)i(are)g(a)h(n)m(um)m (b)s(er)d(of)i(v)m(oices)h(a)m(v)-5 b(ailable)30 b(in)e(F)-8 b(estiv)j(al)30 b(and)g(w)m(e)g(exp)s(ect)h(that)f(n)m(um)m(b)s(er)150 1413 y(to)j(increase.)48 b(Eac)m(h)34 b(is)d(elected)j(via)e(a)h (function)f(of)h(the)f(name)h(`)p Fk(voice_*)p Fo(')f(whic)m(h)f(sets)i (up)f(the)h(w)m(a)m(v)m(e-)150 1523 y(form)39 b(syn)m(thesizer,)j (phone)c(set,)43 b(lexicon,)e(duration)d(and)h(in)m(tonation)g(mo)s (dels)f(\(and)h(an)m(ything)g(else)150 1633 y(necessary\))31 b(for)f(that)h(sp)s(eak)m(er.)41 b(These)30 b(v)m(oice)i(setup)d (functions)g(are)i(de\014ned)e(in)g(`)p Fk(lib/voices.scm)p Fo('.)275 1783 y(The)g(curren)m(t)i(v)m(oice)g(functions)e(are)150 1966 y Fk(voice_rab_diphone)630 2075 y Fo(A)44 b(British)e(English)f (male)j(RP)f(sp)s(eak)m(er,)48 b(Roger.)81 b(This)42 b(uses)i(the)g(UniSyn)d(residual)630 2185 y(excited)30 b(LPC)f(diphone)f(syn)m(thesizer.)40 b(The)30 b(lexicon)f(is)g(the)h (computer)f(users)g(v)m(ersion)h(of)630 2294 y(Oxford)e(Adv)-5 b(anced)29 b(Learners')g(Dictionary)-8 b(,)30 b(with)d(letter)j(to)g (sound)e(rules)f(trained)h(from)630 2404 y(that)42 b(lexicon.)73 b(In)m(tonation)42 b(is)e(pro)m(vided)g(b)m(y)h(a)h(T)-8 b(oBI-lik)m(e)42 b(system)g(using)e(a)h(decision)630 2513 y(tree)j(to)g(predict)e(accen)m(t)j(and)d(end)h(tone)h(p)s (osition.)77 b(The)43 b(F0)g(itself)f(is)h(predicted)f(as)630 2623 y(three)36 b(p)s(oin)m(ts)e(on)i(eac)m(h)g(syllable,)f(using)g (linear)f(regression)g(trained)h(from)g(the)h(Boston)630 2733 y(Univ)m(ersit)m(y)g(FM)h(database)h(\(f2b\))f(and)f(mapp)s(ed)f (to)j(Roger's)f(pitc)m(h)f(range.)60 b(Duration)630 2842 y(is)33 b(predicted)g(b)m(y)h(decision)f(tree,)j(predicting)d(zscore)i (durations)e(for)h(segmen)m(ts)h(trained)630 2952 y(from)30 b(the)g(460)i(Timit)d(sen)m(tence)i(sp)s(ok)m(en)f(b)m(y)h(another)f (British)f(male)h(sp)s(eak)m(er.)150 3127 y Fk(voice_ked_diphone)630 3236 y Fo(An)e(American)h(English)d(male)i(sp)s(eak)m(er,)i(Kurt.)39 b(Again)29 b(this)e(uses)i(the)g(UniSyn)d(residual)630 3346 y(excited)39 b(LPC)g(diphone)e(syn)m(thesizer.)66 b(This)37 b(uses)i(the)g(CMU)g(lexicon,)h(and)f(letter)g(to)630 3456 y(sound)44 b(rules)g(trained)h(from)g(it.)85 b(In)m(tonation)46 b(as)f(with)g(Roger)h(is)e(trained)h(from)g(the)630 3565 y(Boston)35 b(Univ)m(ersit)m(y)e(FM)i(Radio)e(corpus.)51 b(Duration)34 b(for)g(this)f(v)m(oice)i(also)f(comes)g(from)630 3675 y(that)d(database.)150 3850 y Fk(voice_kal_diphone)630 3959 y Fo(An)22 b(American)g(English)f(male)h(sp)s(eak)m(er.)39 b(Again)22 b(this)g(uses)g(the)h(UniSyn)d(residual)h(excited)630 4069 y(LPC)35 b(diphone)e(syn)m(thesizer.)56 b(And)35 b(lik)m(e)f(k)m(ed,)k(uses)d(the)h(CMU)f(lexicon,)h(and)f(letter)h(to) 630 4179 y(sound)44 b(rules)g(trained)h(from)g(it.)85 b(In)m(tonation)46 b(as)f(with)g(Roger)h(is)e(trained)h(from)g(the)630 4288 y(Boston)35 b(Univ)m(ersit)m(y)e(FM)i(Radio)e(corpus.)51 b(Duration)34 b(for)g(this)f(v)m(oice)i(also)f(comes)g(from)630 4398 y(that)i(database.)55 b(This)33 b(v)m(oice)j(w)m(as)f(built)e(in)h (t)m(w)m(o)i(da)m(ys)f(w)m(ork)h(and)e(is)g(at)i(least)f(as)g(go)s(o)s (d)630 4507 y(as)j(k)m(ed)g(due)f(to)h(us)f(understanding)e(the)i(pro)s (cess)h(b)s(etter.)62 b(The)37 b(diphone)f(lab)s(els)f(w)m(ere)630 4617 y(autoaligned)30 b(with)f(hand)g(correction.)150 4792 y Fk(voice_don_diphone)630 4902 y Fo(Stev)m(e)40 b(Isard's)e(LPC)h(based)f(diphone)f(syn)m(thesizer,)k(Dono)m(v)-5 b(an)41 b(diphones.)64 b(The)39 b(other)630 5011 y(parts)d(of)h(this)f (v)m(oice,)j(lexicon,)f(in)m(tonation,)g(and)e(duration)g(are)h(the)g (same)g(as)g Fk(voice_)630 5121 y(rab_diphone)32 b Fo(describ)s(ed)i (ab)s(o)m(v)m(e.)56 b(The)35 b(qualit)m(y)g(of)g(the)h(diphones)d(is)h (not)i(as)f(go)s(o)s(d)h(as)630 5230 y(the)29 b(other)g(v)m(oices)g(b)s (ecause)g(it)f(uses)g(spik)m(e)g(excited)h(LPC.)f(Although)g(the)h (qualit)m(y)f(is)g(not)630 5340 y(as)j(go)s(o)s(d)f(it)g(is)f(m)m(uc)m (h)i(faster)f(and)g(the)h(database)g(is)e(m)m(uc)m(h)i(smaller)e(than)h (the)g(others.)p eop %%Page: 108 110 108 109 bop 150 -116 a Fo(108)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(voice_el_diphone) 630 408 y Fo(A)g(male)g(Castilian)e(Spanish)f(sp)s(eak)m(er,)k(using)e (the)h(Eduardo)f(Lop)s(ez)h(diphones.)38 b(Alistair)630 518 y(Conkie)30 b(and)g(Borja)h(Etxebarria)f(did)f(m)m(uc)m(h)i(to)g (mak)m(e)h(this.)40 b(It)31 b(has)g(impro)m(v)m(ed)f(recen)m(tly)630 628 y(but)g(is)f(not)i(as)f(comprehensiv)m(e)g(as)h(our)f(English)e(v)m (oices.)150 803 y Fk(voice_gsw_diphone)630 913 y Fo(This)33 b(o\013ers)h(a)h(male)g(RP)f(sp)s(eak)m(er,)i(Gordon,)f(famed)f(for)h (man)m(y)f(previous)f(CSTR)g(syn-)630 1023 y(thesizers,)28 b(using)f(the)h(standard)f(diphone)f(mo)s(dule.)39 b(Its)28 b(higher)e(lev)m(els)i(are)g(v)m(ery)h(similar)630 1132 y(to)h(the)e(Roger)i(v)m(oice)g(ab)s(o)m(v)m(e.)41 b(This)27 b(v)m(oice)j(is)e(not)h(in)e(the)i(standard)f(distribution,)e(and)i(is) 630 1242 y(unlik)m(ely)c(to)j(b)s(e)f(added)g(for)h(commercial)f (reasons,)i(ev)m(en)f(though)f(it)g(sounds)g(b)s(etter)g(than)630 1351 y(Roger.)150 1527 y Fk(voice_en1_mbrola)630 1637 y Fo(The)54 b(Roger)i(diphone)d(set)i(using)e(the)i(same)h(fron)m(t)e (end)h(as)g Fk(voice_rab_diphone)630 1746 y Fo(but)c(uses)g(the)h(MBR)m (OLA)g(diphone)e(syn)m(thesizer)h(for)g(w)m(a)m(v)m(eform)i(syn)m (thesis.)103 b(The)630 1856 y(MBR)m(OLA)68 b(syn)m(thesizer)e(and)g (Roger)i(diphone)c(database)k(\(called)f Fk(en1)p Fo(\))f(is)g(not)630 1965 y(distributed)43 b(b)m(y)i(CSTR)f(but)h(is)f(a)m(v)-5 b(ailable)45 b(for)g(non-commercial)g(use)h(for)f(free)g(from)630 2075 y Fk(http://tcts.fpms.ac.be/s)o(ynth)o(esis)o(/mb)o(rola)o(.htm)o (l)p Fo(.)k(W)-8 b(e)37 b(do)e(ho)m(w)m(ev)m(er)i(pro)m(vide)630 2185 y(the)31 b(F)-8 b(estiv)j(al)30 b(part)g(of)h(the)f(v)m(oice)i(in) d(`)p Fk(festvox_en1.tar.gz)p Fo('.)150 2360 y Fk(voice_us1_mbrola)630 2470 y Fo(A)45 b(female)f(Amercian)g(English)e(v)m(oice)j(using)e(our)h (standard)g(US)g(English)e(fron)m(t)j(end)630 2580 y(and)i(the)h Fk(us1)f Fo(database)i(for)f(the)g(MBR)m(OLA)g(diphone)e(syn)m (thesizer)i(for)f(w)m(a)m(v)m(eform)630 2689 y(syn)m(thesis.)79 b(The)43 b(MBR)m(OLA)h(syn)m(thesizer)f(and)f(the)i Fk(us1)f Fo(diphone)e(database)j(is)f(not)630 2799 y(distributed)g(b)m(y)i(CSTR) f(but)h(is)f(a)m(v)-5 b(ailable)45 b(for)g(non-commercial)g(use)h(for)f (free)g(from)630 2908 y Fk(http://tcts.fpms.ac.be/s)o(ynth)o(esis)o (/mb)o(rola)o(.htm)o(l)p Fo(.)d(W)-8 b(e)35 b(pro)m(vide)d(the)h(F)-8 b(estiv)j(al)630 3018 y(part)30 b(of)h(the)f(v)m(oice)i(in)d(`)p Fk(festvox_us1.tar.gz)p Fo('.)150 3194 y Fk(voice_us2_mbrola)630 3303 y Fo(A)51 b(male)f(Amercian)g(English)f(v)m(oice)i(using)e(our)h (standard)g(US)h(English)d(fron)m(t)j(end)630 3413 y(and)c(the)h Fk(us2)f Fo(database)i(for)f(the)g(MBR)m(OLA)g(diphone)e(syn)m (thesizer)i(for)f(w)m(a)m(v)m(eform)630 3523 y(syn)m(thesis.)79 b(The)43 b(MBR)m(OLA)h(syn)m(thesizer)f(and)f(the)i Fk(us2)f Fo(diphone)e(database)j(is)f(not)630 3632 y(distributed)g(b)m(y)i(CSTR) f(but)h(is)f(a)m(v)-5 b(ailable)45 b(for)g(non-commercial)g(use)h(for)f (free)g(from)630 3742 y Fk(http://tcts.fpms.ac.be/s)o(ynth)o(esis)o (/mb)o(rola)o(.htm)o(l)p Fo(.)d(W)-8 b(e)35 b(pro)m(vide)d(the)h(F)-8 b(estiv)j(al)630 3851 y(part)30 b(of)h(the)f(v)m(oice)i(in)d(`)p Fk(festvox_us2.tar.gz)p Fo('.)150 4027 y Fk(voice_us3_mbrola)630 4137 y Fo(Another)44 b(male)g(Amercian)f(English)f(v)m(oice)j(using)e (our)g(standard)g(US)h(English)e(fron)m(t)630 4246 y(end)30 b(and)g(the)h Fk(us2)f Fo(database)h(for)g(the)g(MBR)m(OLA)g(diphone)e (syn)m(thesizer)h(for)g(w)m(a)m(v)m(eform)630 4356 y(syn)m(thesis.)79 b(The)43 b(MBR)m(OLA)h(syn)m(thesizer)f(and)f(the)i Fk(us2)f Fo(diphone)e(database)j(is)f(not)630 4465 y(distributed)g(b)m(y)i(CSTR) f(but)h(is)f(a)m(v)-5 b(ailable)45 b(for)g(non-commercial)g(use)h(for)f (free)g(from)630 4575 y Fk(http://tcts.fpms.ac.be/s)o(ynth)o(esis)o (/mb)o(rola)o(.htm)o(l)p Fo(.)d(W)-8 b(e)35 b(pro)m(vide)d(the)h(F)-8 b(estiv)j(al)630 4685 y(part)30 b(of)h(the)f(v)m(oice)i(in)d(`)p Fk(festvox_us1.tar.gz)p Fo('.)275 4902 y(Other)34 b(v)m(oices)i(will)d (b)s(ecome)j(a)m(v)-5 b(ailable)35 b(through)f(time.)56 b(Groups)34 b(other)i(than)f(CSTR)f(are)i(w)m(ork-)150 5011 y(ing)45 b(on)g(new)g(v)m(oices.)88 b(P)m(articularly)44 b(OGI's)h(CSLU)g(ha)m(v)m(e)i(release)f(a)g(n)m(um)m(b)s(er)e(of)i (American)f(En-)150 5121 y(glish)d(v)m(oices,)48 b(t)m(w)m(o)e(Mexican) e(Spanish)d(v)m(oices)k(and)e(t)m(w)m(o)i(German)f(v)m(oices.)82 b(All)43 b(use)g(OGI's)h(their)150 5230 y(o)m(wn)38 b(residual)d (excited)j(LPC)f(syn)m(thesizer)g(whic)m(h)f(is)h(distributed)e(as)j(a) g(plug-in)d(for)i(F)-8 b(estiv)j(al.)63 b(\(see)150 5340 y Fk(http://www.cse.ogi.edu/C)o(SLU/)o(rese)o(arc)o(h/TT)o(S)24 b Fo(for)31 b(details\).)p eop %%Page: 109 111 109 110 bop 150 -116 a Fo(Chapter)30 b(24:)41 b(V)-8 b(oices)2707 b(109)275 299 y(Other)42 b(languages)h(are)h(b)s(eing)e(w) m(ork)m(ed)h(on)g(including)d(German,)46 b(Basque,)h(W)-8 b(elsh,)47 b(Greek)d(and)150 408 y(P)m(olish)29 b(already)h(ha)m(v)m(e) i(b)s(een)e(dev)m(elop)s(ed)g(and)g(could)g(b)s(e)f(release)i(so)s(on.) 41 b(CSTR)30 b(has)g(a)h(set)g(of)g(Klingon)150 518 y(diphones)c (though)i(the)h(text)g(anlysis)e(for)h(Klingon)e(still)h(requires)f (some)j(w)m(ork)g(\(If)f(an)m(y)m(one)i(has)e(access)150 628 y(to)i(a)g(go)s(o)s(d)f(Klingon)f(con)m(tinous)h(sp)s(eec)m(h)g (corp)s(ora)g(please)g(let)h(us)e(kno)m(w.\))275 765 y(P)m(oin)m(ters)e(and)f(examples)h(of)g(v)m(oices)g(dev)m(elop)s(ed)g (at)g(CSTR)f(and)g(elsewhere)h(will)d(b)s(e)i(p)s(osted)h(on)g(the)150 875 y(F)-8 b(estiv)j(al)31 b(home)f(page.)150 1140 y Fn(24.2)68 b(Building)45 b(a)g(new)h(v)l(oice)275 1336 y Fo(This)23 b(section)i(runs)e(through)i(the)g(de\014nition)d(of)j(a)h (new)e(v)m(oice)i(in)e(F)-8 b(estiv)j(al.)39 b(Although)24 b(this)g(v)m(oice)i(is)150 1445 y(simple)21 b(\(it)j(is)e(a)i (simpli\014ed)c(v)m(ersion)j(of)g(the)h(distributed)c(spanish)i(v)m (oice\))j(it)e(sho)m(ws)g(all)f(the)i(ma)5 b(jor)23 b(parts)150 1555 y(that)30 b(m)m(ust)g(b)s(e)f(de\014ned)g(to)h(get)h(F)-8 b(estiv)j(al)30 b(to)g(sp)s(eak)g(in)e(a)i(new)g(v)m(oice.)41 b(Thanks)29 b(go)h(to)h(Alistair)d(Conkie)150 1664 y(for)j(helping)d (me)j(de\014ne)f(this)g(but)g(as)i(I)e(don't)h(sp)s(eak)g(Spanish)d (there)j(are)g(probably)e(man)m(y)i(mistak)m(es.)150 1774 y(Hop)s(efully)d(its)i(p)s(edagogical)g(use)g(is)g(b)s(etter)g (than)g(its)g(abilit)m(y)f(to)i(b)s(e)f(understo)s(o)s(d)e(in)h (Castille.)275 1912 y(A)j(m)m(uc)m(h)h(more)f(detailed)g(do)s(cumen)m (t)g(on)h(building)28 b(v)m(oices)34 b(in)d(F)-8 b(estiv)j(al)32 b(has)h(b)s(een)e(written)h(and)g(is)150 2021 y(recommend)37 b(reading)e(for)i(an)m(y)g(one)g(attempting)g(to)h(add)e(a)h(new)f(v)m (oice)i(to)g(F)-8 b(estiv)j(al)37 b Fj(blac)m(k99)p Fo(.)60 b(The)150 2131 y(information)29 b(here)h(is)f(a)i(little)e(sparse)h (though)g(giv)m(es)h(the)g(basic)e(requiremen)m(ts.)275 2268 y(The)22 b(general)g(metho)s(d)g(for)h(de\014ning)e(a)i(new)f(v)m (oice)h(is)f(to)h(de\014ne)f(the)h(parameters)g(for)g(all)e(the)i(v)-5 b(arious)150 2378 y(sub-parts)41 b(e.g.)76 b(phoneset,)45 b(duration)c(parameter)h(in)m(tonation)g(parameters)g(etc.,)k(then)c (de\014ned)f(a)150 2487 y(function)29 b(of)i(the)f(form)g Fk(voice_NAME)e Fo(whic)m(h)h(when)g(called)h(will)d(actually)j(select) h(the)g(v)m(oice.)150 2718 y Ff(24.2.1)63 b(Phoneset)275 2913 y Fo(F)-8 b(or)37 b(most)h(new)f(languages)g(and)f(often)i(for)f (new)g(dialects,)h(a)g(new)e(phoneset)h(is)f(required.)60 b(It)37 b(is)150 3023 y(really)30 b(the)i(basic)f(building)d(blo)s(c)m (k)j(of)h(a)g(v)m(oice)g(and)f(most)h(other)g(parts)f(are)h(de\014ned)f (in)f(terms)h(of)h(this)150 3133 y(set,)f(so)g(de\014ning)d(it)i (\014rst)g(is)f(a)i(go)s(o)s(d)f(start.)390 3264 y Fk(\(defPhoneSet)485 3368 y(spanish)485 3472 y(;;;)95 b(Phone)46 b(Features)485 3576 y(\(;;)h(vowel)g(or)g(consonant)533 3680 y(\(vc)g(+)h(-\))533 3783 y(;;)f(vowel)g(length:)f(short)g(long)h(diphthong)e(schwa)533 3887 y(\(vlng)i(s)g(l)g(d)h(a)f(0\))533 3991 y(;;)g(vowel)g(height:)f (high)g(mid)h(low)533 4095 y(\(vheight)f(1)h(2)h(3)f(-\))533 4198 y(;;)g(vowel)g(frontness:)e(front)h(mid)h(back)533 4302 y(\(vfront)f(1)h(2)h(3)f(-\))533 4406 y(;;)g(lip)g(rounding)533 4510 y(\(vrnd)g(+)g(-\))533 4614 y(;;)g(consonant)f(type:)g(stop)h (fricative)e(affricative)g(nasal)h(liquid)533 4717 y(\(ctype)g(s)i(f)f (a)h(n)f(l)h(0\))533 4821 y(;;)f(place)g(of)g(articulation:)d(labial)i (alveolar)g(palatal)g(labio-dental)533 4925 y(;;)1193 b(dental)46 b(velar)533 5029 y(\(cplace)g(l)h(a)h(p)f(b)h(d)f(v)h(0\)) 533 5132 y(;;)f(consonant)f(voicing)533 5236 y(\(cvox)h(+)g(-\))533 5340 y(\))p eop %%Page: 110 112 110 111 bop 150 -116 a Fo(110)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)485 299 y Fk(;;)48 b(Phone)e(set)h(members)f(\(features)f(are)i(not!)g(set)f(properly\)) 485 403 y(\()533 506 y(\(#)95 b(-)48 b(0)f(-)g(-)h(-)f(0)h(0)f(-\))533 610 y(\(a)95 b(+)48 b(l)f(3)g(1)h(-)f(0)h(0)f(-\))533 714 y(\(e)95 b(+)48 b(l)f(2)g(1)h(-)f(0)h(0)f(-\))533 818 y(\(i)95 b(+)48 b(l)f(1)g(1)h(-)f(0)h(0)f(-\))533 922 y(\(o)95 b(+)48 b(l)f(3)g(3)h(-)f(0)h(0)f(-\))533 1025 y(\(u)95 b(+)48 b(l)f(1)g(3)h(+)f(0)h(0)f(-\))533 1129 y(\(b)95 b(-)48 b(0)f(-)g(-)h(+)f(s)h(l)f(+\))533 1233 y(\(ch)g(-)h(0)f(-)g(-)h(+)f(a)h(a)f(-\))533 1337 y(\(d)95 b(-)48 b(0)f(-)g(-)h(+)f(s)h(a)f(+\))533 1440 y(\(f)95 b(-)48 b(0)f(-)g(-)h(+)f(f)h(b)f(-\))533 1544 y(\(g)95 b(-)48 b(0)f(-)g(-)h(+)f(s)h(p)f(+\))533 1648 y(\(j)95 b(-)48 b(0)f(-)g(-)h(+)f(l)h(a)f(+\))533 1752 y(\(k)95 b(-)48 b(0)f(-)g(-)h(+)f(s)h(p)f(-\))533 1856 y(\(l)95 b(-)48 b(0)f(-)g(-)h(+)f(l)h(d)f(+\))533 1959 y(\(ll)g(-)h(0)f(-)g(-)h(+)f(l)h(d)f(+\))533 2063 y(\(m)95 b(-)48 b(0)f(-)g(-)h(+)f(n)h(l)f(+\))533 2167 y(\(n)95 b(-)48 b(0)f(-)g(-)h(+)f(n)h(d)f(+\))533 2271 y(\(ny)g(-)h(0)f(-)g(-)h (+)f(n)h(v)f(+\))533 2374 y(\(p)95 b(-)48 b(0)f(-)g(-)h(+)f(s)h(l)f (-\))533 2478 y(\(r)95 b(-)48 b(0)f(-)g(-)h(+)f(l)h(p)f(+\))533 2582 y(\(rr)g(-)h(0)f(-)g(-)h(+)f(l)h(p)f(+\))533 2686 y(\(s)95 b(-)48 b(0)f(-)g(-)h(+)f(f)h(a)f(+\))533 2790 y(\(t)95 b(-)48 b(0)f(-)g(-)h(+)f(s)h(t)f(+\))533 2893 y(\(th)g(-)h(0)f(-)g(-)h(+)f(f)h(d)f(+\))533 2997 y(\(x)95 b(-)48 b(0)f(-)g(-)h(+)f(a)h(a)f(-\))485 3101 y(\))390 3205 y(\))390 3308 y(\(PhoneSet.silences)c('\(#\)\))275 3447 y Fo(Note)31 b(some)g(phonetic)f(features)g(ma)m(y)h(b)s(e)f (wrong.)150 3681 y Ff(24.2.2)63 b(Lexicon)41 b(and)g(L)-10 b(TS)275 3878 y Fo(Spanish)27 b(is)i(a)h(language)g(whose)f(pron)m (unciation)f(can)i(almost)g(completely)g(b)s(e)f(predicted)f(from)i (its)150 3987 y(orthograph)m(y)e(so)f(in)f(this)h(case)h(w)m(e)g(do)f (not)h(need)f(a)h(list)e(of)h(w)m(ords)g(and)g(their)f(pron)m (unciations)g(and)h(can)150 4097 y(do)j(most)h(of)g(the)f(w)m(ork)h (with)e(letter)h(to)h(sound)f(rules.)275 4236 y(Let)g(us)g(\014rst)g (mak)m(e)h(a)g(lexicon)e(structure)h(as)h(follo)m(ws)390 4369 y Fk(\(lex.create)45 b("spanish"\))390 4473 y(\(lex.set.phoneset)e ("spanish"\))275 4612 y Fo(Ho)m(w)m(ev)m(er)30 b(if)e(w)m(e)h(did)e (just)h(w)m(an)m(t)i(a)f(few)g(en)m(tries)f(to)i(test)g(our)e(system)h (without)f(building)d(an)m(y)k(letter)150 4721 y(to)i(sound)e(rules)g (w)m(e)i(could)e(add)h(en)m(tries)g(directly)f(to)j(the)e(addenda.)40 b(F)-8 b(or)31 b(example)390 4854 y Fk(\(lex.add.entry)533 4958 y('\("amigos")45 b(nil)i(\(\(\(a\))f(0\))i(\(\(m)f(i\))g(1\))g (\(g)g(o)h(s\)\)\)\))275 5097 y Fo(A)37 b(letter)i(to)f(sound)f(rule)f (system)i(for)g(Spanish)d(is)i(quite)g(simple)f(in)h(the)h(format)g (supp)s(orted)e(b)m(y)150 5207 y(F)-8 b(estiv)j(al.)41 b(The)30 b(follo)m(wing)f(is)g(a)i(go)s(o)s(d)f(start)h(to)g(a)g(full)d (set.)390 5340 y Fk(\(lts.ruleset)p eop %%Page: 111 113 111 112 bop 150 -116 a Fo(Chapter)30 b(24:)41 b(V)-8 b(oices)2707 b(111)390 299 y Fk(;)95 b(Name)47 b(of)g(rule)g(set)438 403 y(spanish)390 506 y(;)95 b(Sets)47 b(used)f(in)i(the)f(rules)390 610 y(\()485 714 y(\(LNS)g(l)h(n)f(s)g(\))485 818 y(\(AEOU)g(a)g(e)h(o) f(u)h(\))485 922 y(\(AEO)f(a)h(e)f(o)g(\))485 1025 y(\(EI)g(e)h(i)f(\)) 485 1129 y(\(BDGLMN)f(b)i(d)f(g)h(l)f(m)h(n)f(\))390 1233 y(\))390 1337 y(;)95 b(Rules)390 1440 y(\()438 1544 y(\()47 b([)h(a)f(])h(=)f(a)g(\))438 1648 y(\()g([)h(e)f(])h(=)f(e)g (\))438 1752 y(\()g([)h(i)f(])h(=)f(i)g(\))438 1856 y(\()g([)h(o)f(])h (=)f(o)g(\))438 1959 y(\()g([)h(u)f(])h(=)f(u)g(\))438 2063 y(\()g([)h("'")f(a)g(])g(=)h(a1)f(\))143 b(;;)47 b(stressed)f(vowels)438 2167 y(\()h([)h("'")f(e)g(])g(=)h(e1)f(\))438 2271 y(\()g([)h("'")f(i)g(])g(=)h(i1)f(\))438 2374 y(\()g([)h("'")f(o)g (])g(=)h(o1)f(\))438 2478 y(\()g([)h("'")f(u)g(])g(=)h(u1)f(\))438 2582 y(\()g([)h(b)f(])h(=)f(b)g(\))438 2686 y(\()g([)h(v)f(])h(=)f(b)g (\))438 2790 y(\()g([)h(c)f(])h("'")e(EI)i(=)f(th)g(\))438 2893 y(\()g([)h(c)f(])h(EI)f(=)g(th)g(\))438 2997 y(\()g([)h(c)f(h)h(]) f(=)g(ch)h(\))438 3101 y(\()f([)h(c)f(])h(=)f(k)g(\))438 3205 y(\()g([)h(d)f(])h(=)f(d)g(\))438 3308 y(\()g([)h(f)f(])h(=)f(f)g (\))438 3412 y(\()g([)h(g)f(])h("'")e(EI)i(=)f(x)h(\))438 3516 y(\()f([)h(g)f(])h(EI)f(=)g(x)h(\))438 3620 y(\()f([)h(g)f(u)h(])f ("'")g(EI)g(=)h(g)f(\))438 3724 y(\()g([)h(g)f(u)h(])f(EI)g(=)h(g)f(\)) 438 3827 y(\()g([)h(g)f(])h(=)f(g)g(\))438 3931 y(\()g([)h(h)f(u)h(e)f (])g(=)h(u)f(e)h(\))438 4035 y(\()f([)h(h)f(i)h(e)f(])g(=)h(i)f(e)h(\)) 438 4139 y(\()f([)h(h)f(])h(=)95 b(\))438 4242 y(\()47 b([)h(j)f(])h(=)f(x)g(\))438 4346 y(\()g([)h(k)f(])h(=)f(k)g(\))438 4450 y(\()g([)h(l)f(l)h(])f(#)g(=)h(l)f(\))438 4554 y(\()g([)h(l)f(l)h (])f(=)g(ll)h(\))438 4658 y(\()f([)h(l)f(])h(=)f(l)g(\))438 4761 y(\()g([)h(m)f(])h(=)f(m)g(\))438 4865 y(\()g([)h(~)f(n)h(])f(=)g (ny)h(\))438 4969 y(\()f([)h(n)f(])h(=)f(n)g(\))438 5073 y(\()g([)h(p)f(])h(=)f(p)g(\))438 5176 y(\()g([)h(q)f(u)h(])f(=)g(k)h (\))438 5280 y(\()f([)h(r)f(r)h(])f(=)g(rr)h(\))p eop %%Page: 112 114 112 113 bop 150 -116 a Fo(112)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)438 299 y Fk(\()47 b(#)h([)f(r)h(])f(=)g(rr)h(\))438 403 y(\()f(LNS)g([)h(r)f(])g(=)h(rr)f (\))438 506 y(\()g([)h(r)f(])h(=)f(r)g(\))438 610 y(\()g([)h(s)f(])h (BDGLMN)e(=)h(th)g(\))438 714 y(\()g([)h(s)f(])h(=)f(s)g(\))438 818 y(\()g(#)h([)f(s)h(])f(C)g(=)h(e)f(s)h(\))438 922 y(\()f([)h(t)f(])h(=)f(t)g(\))438 1025 y(\()g([)h(w)f(])h(=)f(u)g(\)) 438 1129 y(\()g([)h(x)f(])h(=)f(k)g(s)h(\))438 1233 y(\()f(AEO)g([)h(y) f(])g(=)h(i)f(\))438 1337 y(\()g(#)h([)f(y)h(])f(#)g(=)h(i)f(\))438 1440 y(\()g([)h(y)f(])h(=)f(ll)g(\))438 1544 y(\()g([)h(z)f(])h(=)f(th) g(\))390 1648 y(\)\))275 1800 y Fo(W)-8 b(e)22 b(could)f(simply)e(set)j (our)f(lexicon)g(to)h(use)f(the)h(ab)s(o)m(v)m(e)h(letter)e(to)i(sound) d(system)i(with)e(the)h(follo)m(wing)150 1909 y(command)390 2055 y Fk(\(lex.set.lts.ruleset)42 b('spanish\))275 2207 y Fo(But)31 b(this)f(w)m(ould)g(not)h(deal)g(with)f(upp)s(er)f(case)j (letters.)43 b(Instead)31 b(of)h(writing)d(new)h(rules)g(for)h(upp)s (er)150 2317 y(case)45 b(letters)g(w)m(e)g(can)f(de\014ne)g(that)h(a)f (Lisp)f(function)g(b)s(e)h(called)f(when)h(lo)s(oking)f(up)g(a)i(w)m (ord)f(and)150 2426 y(in)m(tercept)39 b(the)h(lo)s(okup)d(with)h(our)h (o)m(wn)g(function.)65 b(First)39 b(w)m(e)h(state)g(that)g(unkno)m(wn)d (w)m(ords)i(should)150 2536 y(call)31 b(a)g(function,)g(and)g(then)g (de\014ne)f(the)i(function)e(w)m(e)i(wish)d(called.)43 b(The)31 b(actual)h(link)d(to)j(ensure)e(our)150 2646 y(function)f(will)f(b)s(e)i(called)f(is)h(done)g(b)s(elo)m(w)f(at)i (lexicon)f(selection)g(time)390 2792 y Fk(\(define)46 b(\(spanish_lts)e(word)j(features\))485 2895 y("\(spanish_lts)e(WORD)h (FEATURES\))390 2999 y(Using)g(letter)g(to)i(sound)e(rules)g(build)h(a) g(spanish)f(pronunciation)e(of)j(WORD.")485 3103 y(\(list)g(word)772 3207 y(nil)772 3311 y(\(lex.syllabify.phstress)41 b(\(lts.apply)k (\(downcase)h(word\))g('spanish\)\)\)\))390 3414 y (\(lex.set.lts.method)d(spanish_lts\))275 3566 y Fo(In)32 b(the)h(function)e(w)m(e)j(do)m(wncase)f(the)h(w)m(ord)e(and)g(apply)g (the)h(L)-8 b(TS)32 b(rule)g(to)i(it.)48 b(Next)33 b(w)m(e)h(syllabify) 150 3676 y(it)c(and)g(return)f(the)i(created)g(lexical)e(en)m(try)-8 b(.)150 3935 y Ff(24.2.3)63 b(Phrasing)275 4145 y Fo(Without)26 b(detailed)f(lab)s(elled)f(databases)j(w)m(e)g(cannot)g(build)c (statistical)k(mo)s(dels)e(of)h(phrase)g(breaks,)150 4254 y(but)35 b(w)m(e)h(can)g(simply)e(build)f(a)j(phrase)f(break)h(mo) s(del)e(based)i(on)f(punctuation.)56 b(The)35 b(follo)m(wing)g(is)g(a) 150 4364 y(CAR)-8 b(T)30 b(tree)h(to)g(predict)f(simple)e(breaks,)i (from)g(punctuation.)390 4510 y Fk(\(set!)46 b (spanish_phrase_cart_tree)390 4614 y(')390 4717 y (\(\(lisp_token_end_punc)c(in)47 b(\("?")g(".")g(":"\)\))485 4821 y(\(\(BB\)\))485 4925 y(\(\(lisp_token_end_punc)42 b(in)48 b(\("'")e("\\"")h(",")g(";"\)\))533 5029 y(\(\(B\)\))533 5132 y(\(\(n.name)f(is)h(0\))95 b(;;)47 b(end)g(of)g(utterance)581 5236 y(\(\(BB\)\))581 5340 y(\(\(NB\)\)\)\)\)\))p eop %%Page: 113 115 113 114 bop 150 -116 a Fo(Chapter)30 b(24:)41 b(V)-8 b(oices)2707 b(113)150 299 y Ff(24.2.4)63 b(In)m(tonation)275 496 y Fo(F)-8 b(or)31 b(in)m(tonation)g(there)g(are)h(n)m(um)m(b)s(er)e (of)h(simple)e(options)h(without)h(requiring)d(training)i(data.)43 b(F)-8 b(or)150 606 y(this)27 b(example)g(w)m(e)i(will)c(simply)h(use)h (a)i(hat)f(pattern)g(on)g(all)e(stressed)i(syllables)e(in)g(con)m(ten)m (t)k(w)m(ords)e(and)150 716 y(on)34 b(single)e(syllable)g(con)m(ten)m (t)k(w)m(ords.)51 b(\(i.e.)g Fk(Simple)p Fo(\))33 b(Th)m(us)f(w)m(e)j (need)e(an)h(accen)m(t)i(prediction)c(CAR)-8 b(T)150 825 y(tree.)390 959 y Fk(\(set!)46 b(spanish_accent_cart_tree)438 1063 y(')485 1166 y(\(\(R:SylStructure.parent.gp)o(os)c(is)47 b(content\))533 1270 y(\(\(stress)f(is)h(1\))581 1374 y(\(\(Accented\)\))581 1478 y(\(\(position_type)d(is)j(single\))629 1581 y(\(\(Accented\)\))629 1685 y(\(\(NONE\)\)\)\))533 1789 y(\(\(NONE\)\)\)\))275 1928 y Fo(W)-8 b(e)29 b(also)e(need)h(to)h (sp)s(ecify)d(the)i(pitc)m(h)g(range)g(of)g(our)f(sp)s(eak)m(er.)40 b(W)-8 b(e)30 b(will)25 b(b)s(e)i(using)f(a)j(male)e(Spanish)150 2038 y(diphone)h(database)k(of)e(the)h(follo)m(w)e(range)390 2172 y Fk(\(set!)46 b(spanish_el_int_simple_para)o(ms)581 2275 y('\(\(f0_mean)f(120\))i(\(f0_std)e(30\)\)\))150 2509 y Ff(24.2.5)63 b(Duration)275 2707 y Fo(W)-8 b(e)32 b(will)c(use)j(the)g(tric)m(k)g(men)m(tioned)f(ab)s(o)m(v)m(e)j(for)d (duration)g(prediction.)41 b(Using)30 b(the)h(zscore)h(CAR)-8 b(T)150 2816 y(tree)31 b(metho)s(d,)f(w)m(e)h(will)d(actually)i(use)g (it)g(to)h(predict)e(factors)i(rather)g(than)f(zscores.)275 2956 y(The)j(tree)i(predicts)e(longer)g(durations)g(in)g(stressed)g (syllables)f(and)i(in)e(clause)i(initial)e(and)h(clause)150 3065 y(\014nal)c(syllables.)390 3199 y Fk(\(set!)46 b(spanish_dur_tree) 438 3303 y(')533 3407 y(\(\(R:SylStructure.parent.R)o(:Syl)o(lab)o (le.p)o(.syl)o(_br)o(eak)41 b(>)48 b(1)f(\))h(;;)f(clause)f(initial)581 3510 y(\(\(R:SylStructure.parent.)o(stre)o(ss)41 b(is)48 b(1\))629 3614 y(\(\(1.5\)\))629 3718 y(\(\(1.2\)\)\))581 3822 y(\(\(R:SylStructure.parent.)o(syl_)o(bre)o(ak)42 b(>)47 b(1\))143 b(;;)47 b(clause)f(final)629 3925 y (\(\(R:SylStructure.parent)o(.str)o(ess)41 b(is)47 b(1\))676 4029 y(\(\(2.0\)\))676 4133 y(\(\(1.5\)\)\))629 4237 y(\(\(R:SylStructure.parent)o(.str)o(ess)41 b(is)47 b(1\))676 4341 y(\(\(1.2\)\))676 4444 y(\(\(1.0\)\)\)\)\)\))275 4584 y Fo(In)29 b(addition)g(to)i(the)f(tree)i(w)m(e)e(need)g (durations)f(for)h(eac)m(h)i(phone)e(in)f(the)h(set)390 4717 y Fk(\(set!)46 b(spanish_el_phone_data)390 4821 y('\()533 4925 y(\(#)h(0.0)g(0.250\))533 5029 y(\(a)g(0.0)g(0.090\))533 5132 y(\(e)g(0.0)g(0.090\))533 5236 y(\(i)g(0.0)g(0.080\))533 5340 y(\(o)g(0.0)g(0.090\))p eop %%Page: 114 116 114 115 bop 150 -116 a Fo(114)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)533 299 y Fk(\(u)47 b(0.0)g(0.080\))533 403 y(\(b)g(0.0)g(0.065\))533 506 y(\(ch)g(0.0)g(0.135\))533 610 y(\(d)g(0.0)g(0.060\))533 714 y(\(f)g(0.0)g(0.100\))533 818 y(\(g)g(0.0)g(0.080\))533 922 y(\(j)g(0.0)g(0.100\))533 1025 y(\(k)g(0.0)g(0.100\))533 1129 y(\(l)g(0.0)g(0.080\))533 1233 y(\(ll)g(0.0)g(0.105\))533 1337 y(\(m)g(0.0)g(0.070\))533 1440 y(\(n)g(0.0)g(0.080\))533 1544 y(\(ny)g(0.0)g(0.110\))533 1648 y(\(p)g(0.0)g(0.100\))533 1752 y(\(r)g(0.0)g(0.030\))533 1856 y(\(rr)g(0.0)g(0.080\))533 1959 y(\(s)g(0.0)g(0.110\))533 2063 y(\(t)g(0.0)g(0.085\))533 2167 y(\(th)g(0.0)g(0.100\))533 2271 y(\(x)g(0.0)g(0.130\))390 2374 y(\)\))150 2607 y Ff(24.2.6)63 b(W)-10 b(a)m(v)m(eform)38 b(syn)m(thesis)275 2804 y Fo(There)33 b(are)i(a)g(n)m(um)m(b)s(er)e(of) i(c)m(hoices)g(for)f(w)m(a)m(v)m(eform)i(syn)m(thesis)e(curren)m(tly)f (supp)s(orted.)51 b(MBR)m(OLA)150 2914 y(supp)s(orts)32 b(Spanish,)h(so)h(w)m(e)h(could)e(use)h(that.)52 b(But)34 b(their)f(Spanish)f(diphones)g(in)g(fact)j(use)f(a)h(sligh)m(tly)150 3023 y(di\013eren)m(t)i(phoneset)h(so)g(w)m(e)g(w)m(ould)e(need)i(to)g (c)m(hange)h(the)f(ab)s(o)m(v)m(e)h(de\014nitions)c(to)k(use)e(it)g (e\013ectiv)m(ely)-8 b(.)150 3133 y(Here)32 b(w)m(e)f(will)e(use)h(a)i (diphone)d(database)j(for)f(Spanish)e(recorded)h(b)m(y)h(Eduardo)f(Lop) s(ez)i(when)e(he)h(w)m(as)150 3243 y(a)g(Masters)g(studen)m(t)f(some)h (y)m(ears)g(ago.)275 3381 y(Here)f(w)m(e)h(simply)d(load)i(our)g (pre-built)e(diphone)g(database)390 3514 y Fk(\(us_diphone_init)533 3618 y(\(list)581 3722 y('\(name)46 b("el_lpc_group"\))581 3826 y(\(list)g('index_file)867 3930 y(\(path-append)f(spanish_el_dir)f ("group/ellpc11k.group"\))o(\))581 4033 y('\(grouped)h("true"\))581 4137 y('\(default_diphone)e("#-#"\)\)\))150 4370 y Ff(24.2.7)63 b(V)-10 b(oice)40 b(selection)i(function)275 4567 y Fo(The)27 b(standard)f(w)m(a)m(y)j(to)f(de\014ne)f(a)g(v)m(oice)i(in)d(F)-8 b(estiv)j(al)28 b(is)e(to)i(de\014ne)f(a)h(function)e(of)i(the)g(form)f Fk(voice_)150 4676 y(NAME)f Fo(whic)m(h)g(selects)i(all)e(the)h (appropriate)g(parameters.)40 b(Because)28 b(the)g(de\014nition)d(b)s (elo)m(w)h(follo)m(ws)h(the)150 4786 y(ab)s(o)m(v)m(e)37 b(de\014nitions)d(w)m(e)i(kno)m(w)h(that)f(ev)m(erything)g(appropriate) f(has)h(b)s(een)g(loaded)f(in)m(to)h(F)-8 b(estiv)j(al)37 b(and)150 4896 y(hence)31 b(w)m(e)f(just)g(need)g(to)h(select)g(the)g (appropriate)e(a)i(parameters.)390 5029 y Fk(\(define)46 b(\(voice_spanish_el\))390 5132 y("\(voice_spanish_el\))390 5236 y(Set)h(up)g(synthesis)e(for)i(Male)g(Spanish)f(speaker:)f (Eduardo)h(Lopez")485 5340 y(\(voice_reset\))p eop %%Page: 115 117 115 116 bop 150 -116 a Fo(Chapter)30 b(24:)41 b(V)-8 b(oices)2707 b(115)485 299 y Fk(\(Parameter.set)44 b('Language)i ('spanish\))485 403 y(;;)i(Phone)e(set)485 506 y(\(Parameter.set)e ('PhoneSet)i('spanish\))485 610 y(\(PhoneSet.select)e('spanish\))485 714 y(\(set!)j(pos_lex_name)d(nil\))485 818 y(;;)k(Phrase)e(break)g (prediction)f(by)i(punctuation)485 922 y(\(set!)g(pos_supported)d (nil\))485 1025 y(;;)k(Phrasing)485 1129 y(\(set!)f(phrase_cart_tree)c (spanish_phrase_cart_tree\))485 1233 y(\(Parameter.set)h ('Phrase_Method)g('cart_tree\))485 1337 y(;;)k(Lexicon)d(selection)485 1440 y(\(lex.select)g("spanish"\))485 1544 y(;;)j(Accent)e(prediction) 485 1648 y(\(set!)h(int_accent_cart_tree)42 b (spanish_accent_cart_tree\))485 1752 y(\(set!)47 b(int_simple_params)c (spanish_el_int_simple_pa)o(rams)o(\))485 1856 y(\(Parameter.set)h ('Int_Method)h('Simple\))485 1959 y(;;)j(Duration)d(prediction)485 2063 y(\(set!)i(duration_cart_tree)c(spanish_dur_tree\))485 2167 y(\(set!)k(duration_ph_info)c(spanish_el_phone_data\))485 2271 y(\(Parameter.set)h('Duration_Method)g('Tree_ZScores\))485 2374 y(;;)k(Waveform)d(synthesizer:)g(diphones)485 2478 y(\(Parameter.set)f('Synth_Method)h('UniSyn\))485 2582 y(\(Parameter.set)f('us_sigpr)i('lpc\))485 2686 y(\(us_db_select)f ('el_lpc_group\))485 2893 y(\(set!)i(current-voice)d('spanish_el\))390 2997 y(\))390 3205 y(\(provide)i('spanish_el\))150 3437 y Ff(24.2.8)63 b(Last)40 b(remarks)275 3633 y Fo(W)-8 b(e)45 b(sa)m(v)m(e)i(the)e(ab)s(o)m(v)m(e)h(de\014nitions)c(in)h(a)i (\014le)f(`)p Fk(spanish_el.scm)p Fo('.)80 b(No)m(w)46 b(w)m(e)f(can)g(declare)g(the)150 3743 y(new)34 b(v)m(oice)i(to)g(F)-8 b(estiv)j(al.)54 b(See)36 b(Section)e(24.3)j([De\014ning)d(a)h(new)g(v) m(oice],)i(page)f(117)g(for)f(a)g(description)150 3852 y(of)43 b(metho)s(ds)g(for)g(adding)e(new)i(v)m(oices.)80 b(F)-8 b(or)44 b(testing)f(purp)s(oses)e(w)m(e)j(can)f(explciitly)e (load)i(the)g(\014le)150 3962 y(`)p Fk(spanish_el.scm)p Fo(')275 4100 y(The)29 b(v)m(oice)j(is)d(no)m(w)h(a)m(v)-5 b(ailable)30 b(for)g(use)g(in)f(festiv)-5 b(al.)390 4233 y Fk(festival>)45 b(\(voice_spanish_el\))390 4337 y(spanish_el)390 4440 y(festival>)g(\(SayText)h("hola)g(amigos"\))390 4544 y()275 4682 y Fo(As)35 b(y)m(ou)h(can)g(see)g (adding)e(a)i(new)f(v)m(oice)i(is)d(not)i(v)m(ery)g(di\016cult.)54 b(Of)35 b(course)h(there)f(is)g(quite)g(a)h(lot)150 4792 y(more)26 b(than)g(the)h(ab)s(o)m(v)m(e)g(to)g(add)f(a)g(high)f(qualit) m(y)h(robust)f(v)m(oice)i(to)g(F)-8 b(estiv)j(al.)40 b(But)26 b(as)h(w)m(e)f(can)h(see)g(man)m(y)150 4902 y(of)h(the)g(basic)f(to)s(ols)g(that)h(w)m(e)g(wish)e(to)j(use)e (already)g(exist.)40 b(The)27 b(main)g(di\013erence)g(b)s(et)m(w)m(een) h(the)g(ab)s(o)m(v)m(e)150 5011 y(v)m(oice)39 b(and)f(the)h(English)d (v)m(oices)k(already)e(in)f(F)-8 b(estiv)j(al)39 b(are)f(that)i(their)d (mo)s(dels)g(are)i(b)s(etter)g(trained)150 5121 y(from)d(databases.)61 b(This)35 b(pro)s(duces,)j(in)d(general,)k(b)s(etter)e(results,)g(but)f (the)h(concepts)h(b)s(ehind)c(them)150 5230 y(are)29 b(basically)f(the)h(same.)40 b(All)28 b(of)h(those)g(trainable)f(metho) s(ds)g(ma)m(y)i(b)s(e)e(parameterized)h(with)f(data)h(for)150 5340 y(new)h(v)m(oices.)p eop %%Page: 116 118 116 117 bop 150 -116 a Fo(116)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(As)i(F)-8 b(estiv)j(al)32 b(dev)m(elops,)g(more)g(mo)s(dules)e(will)f(b)s(e)i (added)h(with)e(b)s(etter)i(supp)s(ort)e(for)h(training)f(new)150 408 y(v)m(oices)f(so)g(in)e(the)i(end)e(w)m(e)i(hop)s(e)f(that)h (adding)e(in)g(high)g(qualit)m(y)h(new)g(v)m(oices)h(is)f(actually)g (as)g(simple)f(as)150 518 y(\(or)k(indeed)e(simpler)f(than\))i(the)h (ab)s(o)m(v)m(e)g(description.)150 746 y Ff(24.2.9)63 b(Resetting)41 b(globals)275 940 y Fo(Because)c(the)g(v)m(ersion)f(of)h (Sc)m(heme)f(used)g(in)f(F)-8 b(estiv)j(al)37 b(only)e(has)i(a)g (single)e(\015at)h(name)h(space)g(it)f(is)150 1050 y(unfortunately)k (to)s(o)i(easy)g(for)g(v)m(oices)g(to)g(set)g(some)g(global)f(whic)m(h) f(acciden)m(tally)h(a\013ects)i(all)e(other)150 1159 y(v)m(oices)31 b(selected)h(after)f(it.)41 b(Because)32 b(of)f(this)e(problem)g(w)m(e)i(ha)m(v)m(e)h(in)m(tro)s(duced)d(a)i (con)m(v)m(en)m(tion)h(to)g(try)e(to)150 1269 y(minimise)k(the)j(p)s (ossibilit)m(y)d(of)j(this)f(b)s(ecoming)g(a)i(problem.)59 b(Eac)m(h)37 b(v)m(oice)h(function)e(de\014ned)g(should)150 1378 y(alw)m(a)m(ys)h(call)e Fk(voice_reset)e Fo(at)k(the)f(start.)58 b(This)34 b(will)g(reset)i(an)m(y)h(globals)e(and)g(also)h(call)g(a)g (tidy)f(up)150 1488 y(function)29 b(pro)m(vided)g(b)m(y)h(the)h (previous)e(v)m(oice)i(function.)275 1624 y(Lik)m(ewise)f(in)h(y)m(our) g(new)g(v)m(oice)i(function)d(y)m(ou)j(should)c(pro)m(vide)i(a)h(tidy)f (up)g(function)f(to)i(reset)h(an)m(y)150 1734 y(non-standard)g(global)h (v)-5 b(ariables)33 b(y)m(ou)h(set.)54 b(The)33 b(function)g Fk(current_voice_reset)c Fo(will)j(b)s(e)i(called)150 1843 y(b)m(y)27 b Fk(voice_reset)p Fo(.)37 b(If)27 b(the)h(v)-5 b(alue)27 b(of)h Fk(current_voice_reset)22 b Fo(is)27 b Fk(nil)g Fo(then)g(it)g(is)g(not)h(called.)39 b Fk(voice_)150 1953 y(reset)29 b Fo(sets)i Fk(current_voice_reset)25 b Fo(to)31 b Fk(nil)p Fo(,)f(after)h(calling)d(it.)275 2089 y(F)-8 b(or)46 b(example)f(supp)s(ose)f(some)i(new)f(v)m(oice)h (requires)e(the)i(audio)e(device)i(to)g(b)s(e)f(directed)f(to)j(a)150 2199 y(di\013eren)m(t)c(mac)m(hine.)78 b(In)43 b(this)f(example)h(w)m (e)g(mak)m(e)i(the)e(gian)m(t's)h(v)m(oice)g(go)g(through)e(the)i (netaudio)150 2308 y(mac)m(hine)30 b Fk(big_speakers)d Fo(while)h(the)j(standard)f(v)m(oice)h(go)g(through)f Fk(small_speakers)p Fo(.)275 2445 y(Although)c(w)m(e)i(can)f(easily)f (select)i(the)g(mac)m(hine)e Fk(big_speakers)e Fo(as)k(out)f(when)f (our)h Fk(voice_giant)150 2554 y Fo(is)37 b(called,)j(w)m(e)e(also)g (need)g(to)h(set)g(it)e(bac)m(k)i(when)e(the)h(next)h(v)m(oice)g(is)e (selected,)k(and)c(don't)h(w)m(an)m(t)h(to)150 2664 y(ha)m(v)m(e)30 b(to)g(mo)s(dify)e(ev)m(ery)i(other)f(v)m(oice)h(de\014ned)e(in)g(the)h (system.)41 b(Let)30 b(us)e(\014rst)g(de\014ne)h(t)m(w)m(o)h(functions) e(to)150 2773 y(selection)i(the)h(audio)e(output.)390 2904 y Fk(\(define)46 b(\(select_big\))485 3008 y(\(set!)h (giant_previous_audio)42 b(\(getenv)k("AUDIOSERVER"\)\))485 3111 y(\(setenv)g("AUDIOSERVER")e("big_speakers"\)\))390 3319 y(\(define)i(\(select_normal\))485 3423 y(\(setenv)g ("AUDIOSERVER")e(giant_previous_audio\)\))275 3559 y Fo(Note)c(w)m(e)f(sa)m(v)m(e)h(the)f(previous)e(v)-5 b(alue)38 b(of)h Fk(AUDIOSERVER)d Fo(rather)i(than)h(simply)d(assuming) h(it)i(w)m(as)150 3669 y Fk(small_speakers)p Fo(.)275 3805 y(Our)29 b(de\014nition)f(of)i Fk(voice_giant)e Fo(de\014nition)g(of)i Fk(voice_giant)d Fo(will)h(lo)s(ok)i(something)g (lik)m(e)390 3935 y Fk(\(define)46 b(\(voice_giant\))390 4039 y("comment)g(comment)f(...")533 4143 y(\(voice_reset\))92 b(;;)47 b(get)g(into)g(a)g(known)g(state)533 4246 y(\(select_big\))533 4350 y(;;;)g(other)f(giant)h(voice)f(parameters)533 4454 y(...)533 4662 y(\(set!)h(current_voice_rest)42 b(select_normal\))533 4765 y(\(set!)47 b(current-voice)d('giant\)\))275 4902 y Fo(The)28 b(ob)m(vious)g(question)g(is)g(whic)m(h)g(v)-5 b(ariables)27 b(should)g(a)i(v)m(oice)h(reset.)41 b(Unfortunately)28 b(there)h(is)f(not)150 5011 y(a)38 b(de\014nitiv)m(e)e(answ)m(er)h(to)i (that.)62 b(T)-8 b(o)38 b(a)g(certain)g(exten)m(t)h(I)e(don't)g(w)m(an) m(t)i(to)f(de\014ne)f(that)h(list)e(as)i(there)150 5121 y(will)29 b(b)s(e)h(man)m(y)i(v)-5 b(ariables)30 b(that)i(will)c(b)m(y) k(v)-5 b(arious)30 b(p)s(eople)g(in)g(F)-8 b(estiv)j(al)32 b(whic)m(h)e(are)i(not)f(in)f(the)i(original)150 5230 y(distribution)i(and)k(w)m(e)g(don't)h(w)m(an)m(t)f(to)h(restrict)f (them.)64 b(The)38 b(longer)f(term)h(answ)m(er)g(is)f(some)i(for)f(of) 150 5340 y(partitioning)h(of)i(the)g(Sc)m(heme)g(name)g(space)g(p)s (erhaps)e(ha)m(ving)i(v)m(oice)g(lo)s(cal)g(v)-5 b(ariables)39 b(\(cf.)73 b(Emacs)p eop %%Page: 117 119 117 118 bop 150 -116 a Fo(Chapter)30 b(24:)41 b(V)-8 b(oices)2707 b(117)150 299 y(bu\013er)26 b(lo)s(cal)h(v)-5 b(ariables\).)39 b(But)27 b(ultimately)f(a)i(v)m(oice)g(ma)m(y)g(set)g (global)e(v)-5 b(ariables)26 b(whic)m(h)g(could)h(rede\014ne)150 408 y(the)35 b(op)s(eration)g(of)g(later)h(selected)f(v)m(oices)h(and)f (there)g(seems)h(no)f(real)g(w)m(a)m(y)h(to)g(stop)f(that,)j(and)c(k)m (eep)150 518 y(the)d(generalit)m(y)f(of)h(the)f(system.)275 651 y(Note)g(the)f(con)m(v)m(en)m(tion)h(of)f(setting)f(the)h(global)f Fk(current-voice)e Fo(as)j(the)g(end)f(of)h(an)m(y)g(v)m(oice)h (de\014ni-)150 760 y(tion)c(\014le.)38 b(W)-8 b(e)28 b(do)e(not)h(enforce)g(this)e(but)h(probabaly)f(should.)37 b(The)26 b(v)-5 b(ariable)26 b Fk(current-voice)c Fo(at)28 b(an)m(y)150 870 y(time)j(should)e(iden)m(tify)g(the)i(curren)m(t)g(v)m (oice,)h(the)f(v)m(oice)h(description)d(information)g(\(describ)s(ed)g (b)s(elo)m(w\))150 980 y(will)f(relate)i(this)g(name)g(to)h(prop)s (erties)e(iden)m(tifying)f(it.)150 1232 y Fn(24.3)68 b(De\014ning)45 b(a)h(new)f(v)l(oice)275 1423 y Fo(As)28 b(there)g(are)h(a)f(n)m(um)m(b)s(er)f(of)h(v)m(oices)h(a)m(v)-5 b(ailable)28 b(for)g(F)-8 b(estiv)j(al)28 b(and)g(they)g(ma)m(y)h(or)f (ma)m(y)h(not)f(exists)g(in)150 1532 y(di\013eren)m(t)34 b(installations)e(w)m(e)j(ha)m(v)m(e)g(tried)e(to)i(mak)m(e)h(it)e(as)g (simple)e(as)j(p)s(ossible)d(to)j(add)e(new)h(v)m(oices)h(to)150 1642 y(the)30 b(system)f(without)g(ha)m(ving)g(to)h(c)m(hange)g(an)m(y) g(of)g(the)f(basic)g(distribution.)37 b(In)29 b(fact)h(if)e(the)i(v)m (oices)g(use)150 1751 y(the)e(follo)m(wing)e(standard)h(metho)s(d)g (for)g(describing)f(themselv)m(es)i(it)f(is)g(merely)g(a)h(matter)g(of) g(unpac)m(king)150 1861 y(them)i(in)f(order)h(for)g(them)h(to)g(b)s(e)f (used)f(b)m(y)h(the)h(system.)275 1994 y(The)25 b(v)-5 b(ariable)24 b Fk(voice-path)f Fo(conatins)j(a)g(list)e(of)i (directories)f(where)g(v)m(oices)i(will)c(b)s(e)i(automatically)150 2103 y(searc)m(hed)32 b(for.)42 b(If)31 b(this)f(is)g(not)h(set)h(it)e (is)g(set)i(automatically)f(b)m(y)g(app)s(ending)d(`)p Fk(/voices/)p Fo(')i(to)h(all)f(paths)150 2213 y(in)42 b(festiv)-5 b(al)43 b Fk(load-path)p Fo(.)77 b(Y)-8 b(ou)44 b(ma)m(y)g(add)f(new)g(directories)f(explicitly)f(to)j(this)f(v)-5 b(ariable)42 b(in)g(y)m(our)150 2322 y(`)p Fk(sitevars.scm)p Fo(')28 b(\014le)h(or)h(y)m(our)h(o)m(wn)f(`)p Fk(.festivalrc)p Fo(')e(as)i(y)m(ou)h(wish.)275 2455 y(Eac)m(h)g(v)m(oice)g(directory)f (is)f(assumed)h(to)h(b)s(e)f(of)g(the)h(form)390 2582 y Fk(LANGUAGE/VOICENAME/)275 2715 y Fo(Within)104 b(the)i Fk(VOICENAME/)d Fo(directory)i(itself)g(it)g(is)g(assumed)h(there)g(is) f(a)h(\014le)150 2824 y(`)p Fk(festvox/VOICENAME.scm)p Fo(')71 b(whic)m(h)j(when)h(loaded)h(will)d(de\014ne)i(the)h(v)m(oice)h (itself.)176 b(The)150 2934 y(actual)31 b(v)m(oice)g(function)e(should) f(b)s(e)i(called)g Fk(voice_VOICENAME)p Fo(.)275 3067 y(F)-8 b(or)29 b(example)g(the)g(v)m(oices)h(distributed)c(with)i(the)h (standard)g(F)-8 b(estiv)j(al)29 b(distribution)c(all)j(unpac)m(k)h(in) 150 3176 y(`)p Fk(festival/lib/voices)p Fo('.)36 b(The)30 b(Amercan)g(v)m(oice)i(`)p Fk(ked_diphone)p Fo(')c(unpac)m(ks)i(in)m (to)390 3303 y Fk(festival/lib/voices/engl)o(ish/)o(ked_)o(dip)o(hone)o (/)275 3436 y Fo(Its)g(actual)h(de\014nition)d(\014le)h(is)h(in)390 3563 y Fk(festival/lib/voices/engl)o(ish/)o(ked_)o(dip)o(hone)o(/fes)o (tvo)o(x/ke)o(d_di)o(pho)o(ne.s)o(cm)275 3696 y Fo(Note)j(the)f(name)f (of)h(the)g(directory)g(and)f(the)h(name)g(of)g(the)f(Sc)m(heme)i (de\014nition)c(\014le)i(m)m(ust)h(b)s(e)f(the)150 3805 y(same.)275 3938 y(Alternativ)m(e)c(v)m(oices)h(using)d(p)s(erhaps)g(a) j(di\013eren)m(t)e(enco)s(ding)g(of)i(the)f(database)h(but)e(the)h (same)h(fron)m(t)150 4048 y(end)k(ma)m(y)g(b)s(e)g(de\014ned)f(in)g (the)h(same)h(w)m(a)m(y)g(b)m(y)f(using)f(sym)m(b)s(olic)f(links)g(in)h (the)i(langauge)f(directoriy)f(to)150 4157 y(the)g(main)e(directory)-8 b(.)40 b(F)-8 b(or)32 b(example)e(a)g(PSOLA)g(v)m(ersion)g(of)g(the)h (k)m(ed)f(v)m(oice)i(ma)m(y)f(b)s(e)e(de\014ned)h(in)390 4284 y Fk(festival/lib/voices/engl)o(ish/)o(ked_)o(dip)o(hone)o(/fes)o (tvo)o(x/ke)o(d_ps)o(ola)o(.scm)275 4417 y Fo(Adding)38 b(a)j(sym)m(b)s(ole)f(link)e(in)h(`)p Fk(festival/lib/voices/englis)o (h/)p Fo(')34 b(ro)41 b(`)p Fk(ked_diphone)p Fo(')d(called)150 4527 y(`)p Fk(ked_psola)p Fo(')28 b(will)g(allo)m(w)i(that)h(v)m(oice)g (to)g(b)s(e)f(automatically)g(registered)g(when)g(F)-8 b(estiv)j(al)30 b(starts)h(up.)275 4659 y(Note)46 b(that)g(this)e (metho)s(d)h(do)s(esn't)g(actually)g(load)g(the)h(v)m(oices)g(it)f (\014nds,)i(that)f(could)e(b)s(e)h(pro-)150 4769 y(hibitiv)m(ely)34 b(time)i(consuming)f(to)i(the)g(start)g(up)f(pro)s(cess.)59 b(It)36 b(blindly)d(assumes)j(that)i(there)e(is)g(a)h(\014le)150 4878 y(`)p Fk(VOICENAME/festvox/VOICENA)o(ME.s)o(cm)p Fo(')26 b(to)32 b(load.)45 b(An)31 b(autoload)h(de\014nition)e(is)g (giv)m(en)i(for)g Fk(voice_)150 4988 y(VOICENAME)i Fo(whic)m(h)g(when)h (called)h(will)d(load)j(that)g(\014le)f(and)h(call)f(the)i(real)e (de\014nition)f(if)h(it)h(exists)f(in)150 5098 y(the)c(\014le.)275 5230 y(This)k(is)i(only)f(a)i(recommended)f(metho)s(d)g(to)h(mak)m(e)g (adding)e(new)h(v)m(oices)h(easier,)h(it)e(ma)m(y)h(b)s(e)f(ig-)150 5340 y(nored)c(if)g(y)m(ou)i(wish.)50 b(Ho)m(w)m(ev)m(er)36 b(w)m(e)e(still)e(recommend)i(that)g(ev)m(en)h(if)e(y)m(ou)h(use)g(y)m (our)g(o)m(wn)g(con)m(v)m(etions)p eop %%Page: 118 120 118 119 bop 150 -116 a Fo(118)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(for)35 b(adding)f(new)h(v)m(oices)i(y)m(ou)e(consider)g(the)h(autoload)f (function)g(to)h(de\014ne)f(them)g(in,)h(for)f(example,)150 408 y(the)i(`)p Fk(siteinit.scm)p Fo(')c(\014le)i(or)i(`)p Fk(.festivalrc)p Fo('.)56 b(The)35 b(autoload)i(function)e(tak)m(es)j (three)e(argumen)m(ts:)150 518 y(a)42 b(function)f(name,)j(a)e(\014le)f (con)m(taining)h(the)f(actual)i(de\014niton)d(and)h(a)h(commen)m(t.)76 b(F)-8 b(or)42 b(example)g(a)150 628 y(de\014nition)28 b(of)j(v)m(oice)g(can)g(b)s(e)e(done)h(explicitly)e(b)m(y)390 756 y Fk(\(autooad)46 b(voice_f2b)93 b("/home/awb/data/f2b/duc)o(s/f)o (2b_d)o(ucs")629 860 y("American)45 b(English)h(female)g(f2b"\)\)\))275 995 y Fo(Of)29 b(course)i(y)m(ou)g(can)f(also)h(load)f(the)g (de\014nition)e(\014le)i(explicitly)e(if)h(y)m(ou)i(wish.)275 1129 y(In)24 b(order)h(to)g(allo)m(w)g(the)g(system)h(to)g(start)f (making)g(in)m(tellegen)m(t)g(use)g(of)g(v)m(oices)h(w)m(e)f(recommend) g(that)150 1239 y(all)g(v)m(oice)i(de\014nitions)d(include)g(a)j(call)e (to)i(the)f(function)f Fk(voice_proclaim)e Fo(this)i(allo)m(ws)g(the)i (system)f(to)150 1348 y(kno)m(w)e(some)h(prop)s(erties)e(ab)s(out)h (the)h(v)m(oice)g(suc)m(h)f(as)h(language,)h(gender)e(and)g(dialect.)39 b(The)23 b Fk(proclaim_)150 1458 y(voice)k Fo(function)g(taks)i(t)m(w)m (o)h(argumen)m(ts)f(a)g(name)f(\(e.g.)41 b Fk(rab_diphone)26 b Fo(and)i(an)g(asso)s(c)h(list)e(of)i(features)150 1567 y(and)i(names.)43 b(Curren)m(tly)30 b(w)m(e)i(require)e Fk(language)p Fo(,)f Fk(gender)p Fo(,)i Fk(dialect)e Fo(and)i Fk(description)p Fo(.)40 b(The)31 b(last)150 1677 y(b)s(eing)e(a)i(textual)f(description)f(of)h(the)h(v)m(oice)g (itself.)40 b(An)30 b(example)g(pro)s(claimation)e(is)390 1806 y Fk(\(proclaim_voice)438 1910 y('rab_diphone)438 2013 y('\(\(language)44 b(english\))533 2117 y(\(gender)i(male\))533 2221 y(\(dialect)g(british\))533 2325 y(\(description)581 2428 y("This)g(voice)h(provides)e(a)j(British)d(RP)j(English)d(male)i (voice)f(using)h(a)629 2532 y(residual)e(excited)h(LPC)h(diphone)f (synthesis)f(method.)94 b(It)47 b(uses)f(a)629 2636 y(modified)f (Oxford)h(Advanced)g(Learners')f(Dictionary)g(for)i(pronunciations.)629 2740 y(Prosodic)e(phrasing)h(is)h(provided)e(by)j(a)f(statistically)d (trained)i(model)629 2844 y(using)g(part)h(of)g(speech)f(and)h(local)f (distribution)f(of)i(breaks.)93 b(Intonation)629 2947 y(is)47 b(provided)e(by)j(a)f(CART)g(tree)f(predicting)f(ToBI)i (accents)f(and)h(an)g(F0)629 3051 y(contour)e(generated)h(from)g(a)i (model)e(trained)g(from)h(natural)e(speech.)94 b(The)629 3155 y(duration)45 b(model)i(is)g(also)f(trained)g(from)h(data)f(using) h(a)g(CART)g(tree."\)\)\))275 3289 y Fo(There)25 b(are)i(functions)d (to)j(access)g(a)g(description.)37 b Fk(voice.description)22 b Fo(will)h(return)i(the)h(descrip-)150 3399 y(tion)31 b(for)h(a)g(giv)m(en)g(v)m(oice)g(and)f(will)e(load)j(that)g(v)m(oice)h (if)d(it)i(is)e(not)i(already)g(loaded.)44 b Fk(voice.describe)150 3509 y Fo(will)25 b(describ)s(e)i(the)h(giv)m(en)f(giv)m(en)h(v)m(oice) h(b)m(y)f(syn)m(thesizing)f(the)h(textual)g(description)e(using)g(the)i (curren)m(t)150 3618 y(v)m(oice.)47 b(It)32 b(w)m(ould)f(b)s(e)g(nice)g (to)i(use)f(the)g(v)m(oice)h(itself)e(to)i(giv)m(e)f(a)h(self)e(in)m (tro)s(duction)f(but)h(unfortunately)150 3728 y(that)36 b(in)m(tro)s(duces)d(of)i(problem)f(of)h(decide)f(whic)m(h)g(language)h (the)g(description)e(should)g(b)s(e)h(in,)h(w)m(e)h(are)150 3837 y(not)31 b(all)e(as)h(\015uen)m(t)h(in)e(w)m(elsh)g(as)i(w)m(e'd)f (lik)m(e)g(to)h(b)s(e.)275 3972 y(The)40 b(function)g Fk(voice.list)e Fo(will)h(list)h(the)h Fi(p)-5 b(otential)53 b Fo(v)m(oices)42 b(in)e(the)h(system.)73 b(These)41 b(are)h(the)150 4081 y(names)28 b(of)h(v)m(oices)g(whic)m(h)e(ha)m(v)m (e)i(b)s(een)f(found)f(in)f(the)j Fk(voice-path)p Fo(.)37 b(As)28 b(they)h(ha)m(v)m(e)g(not)g(actaully)f(b)s(een)150 4191 y(loaded)i(they)h(can't)h(actually)f(b)s(e)f(con\014rmed)g(as)h (usable)f(v)m(oices.)43 b(One)30 b(solution)g(to)h(this)f(w)m(ould)g(b) s(e)g(to)150 4301 y(load)h(all)e(v)m(oices)j(at)g(start)f(up)f(time)h (whic)m(h)f(w)m(ould)f(allo)m(w)i(con\014rmation)f(they)h(exist)g(and)f (to)i(get)g(their)150 4410 y(full)26 b(description)g(through)h Fk(proclaim_voice)p Fo(.)36 b(But)28 b(start)g(up)f(is)g(already)h(to)s (o)g(slo)m(w)g(in)e(festiv)-5 b(al)27 b(so)h(w)m(e)150 4520 y(ha)m(v)m(e)33 b(to)g(accept)g(this)e(stat)i(for)f(the)g(time)g (b)s(eing.)44 b(Splitting)30 b(the)i(description)e(of)i(the)g(v)m(oice) h(from)f(the)150 4629 y(actual)27 b(de\014nition)d(is)h(a)h(p)s (ossible)e(solution)h(to)i(this)e(problem)g(but)g(w)m(e)i(ha)m(v)m(e)h (not)e(y)m(et)i(lo)s(ok)m(ed)e(in)f(to)i(this.)p eop %%Page: 119 121 119 120 bop 150 -116 a Fo(Chapter)30 b(25:)41 b(T)-8 b(o)s(ols)2741 b(119)150 299 y Fl(25)80 b(T)-13 b(o)t(ols)275 529 y Fo(A)27 b(n)m(um)m(b)s(er)e(of)i(basic)g(data)h(manipulation)c (to)s(ols)j(are)g(supp)s(orted)e(b)m(y)i(F)-8 b(estiv)j(al.)40 b(These)27 b(often)g(mak)m(e)150 638 y(building)37 b(new)j(mo)s(dules)f (v)m(ery)i(easy)g(and)f(are)i(already)e(used)g(in)f(man)m(y)i(of)g(the) g(existing)e(mo)s(dules.)150 748 y(They)27 b(t)m(ypically)g(o\013er)h (a)g(Sc)m(heme)g(metho)s(d)f(for)g(en)m(tering)h(data,)h(and)e(Sc)m (heme)h(and)f(C)p Fk(++)g Fo(functions)f(for)150 857 y(ev)-5 b(aluating)30 b(it.)150 1112 y Fn(25.1)68 b(Regular)47 b(expressions)275 1304 y Fo(Regular)30 b(expressions)g(are)i(a)g (formal)f(metho)s(d)g(for)g(describing)e(a)j(certain)f(class)g(of)h (mathematical)150 1414 y(languages.)39 b(They)25 b(ma)m(y)h(b)s(e)f (view)m(ed)g(as)g(patterns)h(whic)m(h)e(matc)m(h)i(some)g(set)g(of)f (strings.)38 b(They)25 b(are)h(v)m(ery)150 1523 y(common)38 b(in)f(man)m(y)i(soft)m(w)m(are)g(to)s(ols)f(suc)m(h)g(as)h(scripting)d (languages)i(lik)m(e)g(the)g(UNIX)h(shell,)f(PERL,)150 1633 y(a)m(wk,)d(Emacs)e(etc.)51 b(Unfortunately)32 b(the)i(exact)h (form)d(of)i(regualr)e(expressions)g(often)i(di\013ers)e(sligh)m(tly) 150 1742 y(b)s(et)m(w)m(een)f(di\013eren)m(t)f(applications)e(making)i (their)g(use)g(often)g(a)h(little)e(tric)m(ky)-8 b(.)275 1876 y(F)g(estiv)j(al)34 b(supp)s(ort)e(regular)h(expressions)f(based)i (mainly)e(of)i(the)g(form)f(used)g(in)g(the)h(GNU)g(libg)p Fk(++)150 1986 y(Regex)39 b Fo(class,)44 b(though)c(w)m(e)i(ha)m(v)m(e) g(our)e(o)m(wn)h(implemen)m(tation)e(of)i(it.)72 b(Our)39 b(implemen)m(tation)h(\()p Fk(EST_)150 2095 y(Regex)p Fo(\))29 b(is)h(actually)g(based)g(on)g(Henry)g(Sp)s(encer's)f(`)p Fk(regex.c)p Fo(')g(as)i(distributed)c(with)i(BSD)i(4.4.)275 2229 y(Regular)25 b(expressions)g(are)i(represen)m(ted)f(as)g(c)m (haracter)i(strings)d(whic)m(h)g(are)i(in)m(terpreted)e(as)i(regular) 150 2338 y(expressions)j(b)m(y)h(certain)h(Sc)m(heme)f(and)g(C)p Fk(++)f Fo(functions.)43 b(Most)32 b(c)m(haracters)h(in)d(a)i(regular)e (expression)150 2448 y(are)k(treated)h(as)f(literals)f(and)g(matc)m(h)i (only)e(that)h(c)m(haracter)i(but)d(a)h(n)m(um)m(b)s(er)f(of)h(others)g (ha)m(v)m(e)h(sp)s(ecial)150 2558 y(meaning.)67 b(Some)39 b(c)m(haracters)i(ma)m(y)f(b)s(e)f(escap)s(ed)g(with)f(preceeding)h (bac)m(kslashes)g(to)h(c)m(hange)h(them)150 2667 y(from)30 b(op)s(erators)g(to)i(literals)c(\(or)j(sometime)g(literals)d(to)j(op)s (erators\).)150 2825 y Fk(.)432 b Fo(Matc)m(hes)32 b(an)m(y)f(c)m (haracter.)150 2983 y Fk($)432 b Fo(matc)m(hes)32 b(end)d(of)i(string) 150 3140 y Fk(^)432 b Fo(matc)m(hes)32 b(b)s(eginning)27 b(of)k(string)150 3298 y Fk(X*)384 b Fo(matc)m(hes)32 b(zero)f(or)f(more)h(o)s(ccurrences)f(of)h(X,)g(X)f(ma)m(y)h(b)s(e)f(a) h(c)m(haracter,)h(range)f(of)f(paren-)630 3408 y(thesized)g (expression.)150 3565 y Fk(X+)384 b Fo(matc)m(hes)33 b(one)g(or)f(more)g(o)s(ccurrences)h(of)f(X,)h(X)f(ma)m(y)h(b)s(e)e(a)i (c)m(haracter,)h(range)f(of)f(paren-)630 3675 y(thesized)e(expression.) 150 3833 y Fk(X?)384 b Fo(matc)m(hes)30 b(zero)f(or)f(one)h(o)s (ccurrence)g(of)f(X,)h(X)g(ma)m(y)g(b)s(e)f(a)g(c)m(haracter,)j(range)e (of)f(paren)m(the-)630 3942 y(sized)i(expression.)150 4100 y Fk([...])240 b Fo(a)42 b(ranges)g(matc)m(hes)h(an)f(of)f(the)h (v)-5 b(alues)41 b(in)g(the)h(brac)m(k)m(ets.)76 b(The)41 b(range)h(op)s(erator)g Fk(")p Fo(-)p Fk(")630 4209 y Fo(allo)m(ws)31 b(sp)s(eci\014cation)g(of)h(ranges)g(e.g.)46 b Fk(a-z)31 b Fo(for)h(all)f(lo)m(w)m(er)h(case)h(c)m(haracters.)46 b(If)32 b(the)g(\014rst)630 4319 y(c)m(haracter)43 b(of)e(the)g(range)g (is)f Fk(^)h Fo(then)g(it)f(matc)m(hes)i(an)m(ything)f(c)m(haracter)h (except)g(those)630 4429 y(sp)s(eci\014ced)25 b(in)g(the)h(range.)40 b(If)25 b(y)m(ou)i(wish)d Fk(-)i Fo(to)h(b)s(e)e(in)g(the)h(range)h(y)m (ou)f(m)m(ust)g(put)g(that)g(\014rst.)150 4586 y Fk(\\\\\(...\\\\\))630 4696 y Fo(T)-8 b(reat)32 b(con)m(ten)m(ts)h(of)f(paren)m(theses)f(as)h (single)e(ob)5 b(ject)32 b(allo)m(wing)e(op)s(erators)i Fk(*)p Fo(,)f Fk(+)p Fo(,)h Fk(?)f Fo(etc)h(to)630 4805 y(op)s(erate)f(on)f(more)h(than)f(single)f(c)m(haracters.)150 4963 y Fk(X\\\\|Y)240 b Fo(matc)m(hes)25 b(either)d(X)i(or)f(Y.)h(X)f (or)h(Y)f(ma)m(y)h(b)s(e)f(single)f(c)m(haracters,)k(ranges)e(or)f (paren)m(thesized)630 5073 y(expressions.)275 5230 y(Note)36 b(that)g(actuall)e(only)h(one)g(bac)m(kslash)g(is)f(needed)h(b)s(efore) g(a)g(c)m(haracter)i(to)f(escap)s(e)f(it)g(but)f(b)s(e-)150 5340 y(cuase)i(these)g(expressions)f(are)h(most)g(often)g(con)m(tained) f(with)g(Sc)m(heme)h(or)f(C)p Fk(++)g Fo(strings,)h(the)g(escpae)p eop %%Page: 120 122 120 121 bop 150 -116 a Fo(120)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(mec)m(hanaism)f(for)h (those)g(strings)e(requires)h(that)h(bac)m(kslash)f(itself)g(b)s(e)g (escap)s(ed,)h(hence)g(y)m(ou)g(will)d(most)150 408 y(often)31 b(b)s(e)f(required)e(to)j(t)m(yp)s(e)g(t)m(w)m(o)g(bac)m(kslashes.)275 543 y(Some)f(example)g(ma)m(y)h(help)e(in)g(enderstanding)g(the)h(use)g (of)h(regular)e(expressions.)150 702 y Fk(a.b)336 b Fo(matc)m(hes)32 b(an)m(y)e(three)h(letter)f(string)g(starting)g(with)f(an)h Fk(a)g Fo(and)g(ending)f(with)g(a)i Fk(b)p Fo(.)150 860 y Fk(.*a)336 b Fo(matc)m(hes)32 b(an)m(y)e(string)g(ending)e(in)i(an)g Fk(a)150 1019 y(.*a.*)240 b Fo(matc)m(hes)32 b(an)m(y)e(string)g(con)m (taining)f(an)i Fk(a)150 1178 y([A-Z].*)144 b Fo(matc)m(hes)32 b(an)m(y)e(string)g(starting)g(with)f(a)i(capital)f(letter)150 1337 y Fk([0-9]+)192 b Fo(matc)m(hes)32 b(an)m(y)e(string)g(of)g (digits)150 1496 y Fk(-?[0-9]+\\\\\(\\\\.[0-9]+\\\\\)?)630 1605 y Fo(matc)m(hes)40 b(an)m(y)f(p)s(ositiv)m(e)e(or)i(negativ)m(e)g (real)f(n)m(um)m(b)s(er.)64 b(Note)40 b(the)f(optional)f(preceeding)630 1715 y(min)m(us)24 b(sign)h(and)g(the)h(optional)f(part)h(con)m(tain)g (the)g(p)s(oin)m(t)f(and)g(follo)m(wing)g(n)m(um)m(b)s(ers.)37 b(The)630 1825 y(p)s(oin)m(t)29 b(itself)h(m)m(ust)g(b)s(e)g(escap)s (ed)g(as)h(dot)f(on)g(its)g(o)m(wn)h(matc)m(hes)g(an)m(y)g(c)m (haracter.)150 1983 y Fk([^aeiouAEIOU]+)630 2093 y Fo(mathes)g(an)m(y)f (non-empt)m(y)h(string)e(whic)m(h)g(do)s(esn't)h(conatin)h(a)f(v)m(o)m (w)m(el)150 2252 y Fk(\\\\\([Ss]at\\\\\(urday\\\\\)\\\\\)?)o(\\\\|\\)o (\\\([S)o(s]u)o(n\\\\\()o(day\\)o(\\\)\\)o(\\\))630 2361 y Fo(matc)m(hes)i(Saturda)m(y)e(and)f(Sunda)m(y)h(in)f(v)-5 b(arious)29 b(w)m(a)m(ys)275 2520 y(The)20 b(Sc)m(heme)g(function)g Fk(string-matches)c Fo(tak)m(es)22 b(a)f(string)f(and)f(a)i(regular)f (expression)f(and)h(returns)150 2630 y Fk(t)30 b Fo(if)f(the)i(regular) f(expression)f(macthes)i(the)f(string)g(and)f Fk(nil)h Fo(otherwise.)150 2886 y Fn(25.2)68 b(CAR)-11 b(T)45 b(trees)275 3079 y Fo(One)28 b(of)g(the)h(basic)f(to)s(ols)g(a)m(v)-5 b(ailable)28 b(with)f(F)-8 b(estiv)j(al)29 b(is)e(a)i(system)g(for)f (building)d(and)j(using)f(Classi\014-)150 3188 y(cation)j(and)e (Regression)h(T)-8 b(rees)30 b(\()p Fj(breiman84)7 b Fo(\).)41 b(This)27 b(standard)i(statistical)g(metho)s(d)f(can)i(b)s(e) f(used)f(to)150 3298 y(predict)h(b)s(oth)h(categorical)i(and)e(con)m (tin)m(uous)g(data)h(from)f(a)g(set)h(of)g(feature)g(v)m(ectors.)275 3432 y(The)26 b(tree)i(itself)e(con)m(tains)h(y)m(es/no)h(questions)f (ab)s(out)f(features)i(and)e(ultimately)g(pro)m(vides)g(either)h(a)150 3542 y(probabilit)m(y)i(distribution,)g(when)h(predicting)g (categorical)j(v)-5 b(alues)31 b(\(classi\014cation)g(tree\),)i(or)f(a) g(mean)150 3651 y(and)i(standard)h(deviation)f(when)g(predicting)f(con) m(tin)m(uous)i(v)-5 b(alues)34 b(\(regression)h(tree\).)55 b(W)-8 b(ell)35 b(de\014ned)150 3761 y(tec)m(hniques)43 b(can)h(b)s(e)f(used)g(to)h(construct)g(an)g(optimal)f(tree)h(from)f(a) h(set)g(of)g(training)e(data.)81 b(The)150 3870 y(program,)25 b(dev)m(elop)s(ed)f(in)f(conjunction)g(with)g(F)-8 b(estiv)j(al,)26 b(called)e(`)p Fk(wagon)p Fo(',)g(distributed)e(with)g(the)j(sp)s(eec)m (h)150 3980 y(to)s(ols,)30 b(pro)m(vides)g(a)h(basic)e(but)h(ev)m(er)h (increasingly)d(p)s(o)m(w)m(erful)h(metho)s(d)h(for)g(constructing)g (trees.)275 4114 y(A)42 b(tree)g(need)g(not)g(b)s(e)f(automatically)h (constructed,)j(CAR)-8 b(T)42 b(trees)h(ha)m(v)m(e)g(the)f(adv)-5 b(an)m(tage)44 b(o)m(v)m(er)150 4224 y(some)34 b(other)g(automatic)h (training)d(metho)s(ds,)i(suc)m(h)f(as)h(neural)f(net)m(w)m(orks)h(and) f(linear)f(regression,)i(in)150 4333 y(that)d(their)f(output)h(is)e (more)i(readable)g(and)f(often)h(understandable)e(b)m(y)h(h)m(umans.)41 b(Imp)s(ortan)m(tly)30 b(this)150 4443 y(mak)m(es)35 b(it)e(p)s(ossible)e(to)k(mo)s(dify)d(them.)51 b(CAR)-8 b(T)33 b(trees)i(ma)m(y)f(also)g(b)s(e)f(fully)f(hand)g(constructed.)52 b(This)150 4553 y(is)29 b(used,)h(for)g(example,)g(in)e(generating)j (some)f(duration)f(mo)s(dels)g(for)g(languages)i(w)m(e)f(do)g(not)h(y)m (et)g(ha)m(v)m(e)150 4662 y(full)d(databases)j(to)g(train)f(from.)275 4796 y(A)g(CAR)-8 b(T)30 b(tree)h(has)f(the)h(follo)m(wing)e(syn)m(tax) 581 4925 y Fk(CART)47 b(::=)f(QUESTION-NODE)f(||)i(ANSWER-NODE)581 5029 y(QUESTION-NODE)d(::=)j(\()g(QUESTION)f(YES-NODE)g(NO-NODE)f(\)) 581 5132 y(YES-NODE)g(::=)i(CART)581 5236 y(NO-NODE)f(::=)h(CART)581 5340 y(QUESTION)e(::=)i(\()h(FEATURE)e(in)h(LIST)f(\))p eop %%Page: 121 123 121 122 bop 150 -116 a Fo(Chapter)30 b(25:)41 b(T)-8 b(o)s(ols)2741 b(121)581 299 y Fk(QUESTION)45 b(::=)i(\()h(FEATURE)e (is)h(STRVALUE)e(\))581 403 y(QUESTION)g(::=)i(\()h(FEATURE)e(=)h (NUMVALUE)f(\))581 506 y(QUESTION)f(::=)i(\()h(FEATURE)e(>)h(NUMVALUE)f (\))581 610 y(QUESTION)f(::=)i(\()h(FEATURE)e(<)h(NUMVALUE)f(\))581 714 y(QUESTION)f(::=)i(\()h(FEATURE)e(matches)f(REGEX)i(\))581 818 y(ANSWER-NODE)e(::=)i(CLASS-ANSWER)d(||)j(REGRESS-ANSWER)581 922 y(CLASS-ANSWER)d(::=)j(\()h(\(VALUE0)e(PROB\))g(\(VALUE1)g(PROB\))g (...)h(MOST-PROB-VALUE)d(\))581 1025 y(REGRESS-ANSWER)g(::=)j(\()g(\()h (STANDARD-DEVIATION)42 b(MEAN)47 b(\))h(\))275 1160 y Fo(Note)31 b(that)g(answ)m(er)f(no)s(des)g(are)h(distinguished)26 b(b)m(y)31 b(their)e(car)i(not)f(b)s(eing)f(atomic.)275 1295 y(The)i(in)m(terpretation)g(of)h(a)g(tree)g(is)f(with)g(resp)s (ect)g(to)i(a)f(Stream)p 2500 1295 28 4 v 33 w(Item)g(The)f Fj(FEA)-8 b(TURE)38 b Fo(in)30 b(a)i(tree)150 1404 y(is)d(a)i(standard) f(feature)h(\(see)g(Section)f(14.6)i([F)-8 b(eatures],)32 b(page)f(71\).)275 1539 y(The)23 b(follo)m(wing)g(example)i(tree)g(is)e (used)h(in)f(one)i(of)f(the)h(Spanish)d(v)m(oices)j(to)g(predict)f(v)-5 b(ariations)23 b(from)150 1648 y(a)m(v)m(erage)33 b(durations.)390 1777 y Fk(\(set!)46 b(spanish_dur_tree)438 1881 y(')390 1985 y(\(set!)g(spanish_dur_tree)438 2089 y(')533 2192 y(\(\(R:SylStructure.parent.R)o(:Syl)o(lab)o(le.p)o(.syl)o(_br)o(eak)41 b(>)48 b(1)f(\))h(;;)f(clause)f(initial)581 2296 y (\(\(R:SylStructure.parent.)o(stre)o(ss)41 b(is)48 b(1\))629 2400 y(\(\(1.5\)\))629 2504 y(\(\(1.2\)\)\))581 2607 y(\(\(R:SylStructure.parent.)o(syl_)o(bre)o(ak)42 b(>)47 b(1\))143 b(;;)47 b(clause)f(final)629 2711 y (\(\(R:SylStructure.parent)o(.str)o(ess)41 b(is)47 b(1\))676 2815 y(\(\(2.0\)\))676 2919 y(\(\(1.5\)\)\))629 3023 y(\(\(R:SylStructure.parent)o(.str)o(ess)41 b(is)47 b(1\))676 3126 y(\(\(1.2\)\))676 3230 y(\(\(1.0\)\)\)\)\)\))275 3365 y Fo(It)30 b(is)f(applied)g(to)i(the)f(segmen)m(t)i(stream)f(to)g (giv)m(e)g(a)f(factor)i(to)f(m)m(ultiply)c(the)k(a)m(v)m(erage)i(b)m(y) -8 b(.)275 3499 y Fk(wagon)40 b Fo(is)g(constan)m(tly)j(impro)m(ving)c (and)j(with)e(v)m(ersion)h(1.2)i(of)f(the)f(sp)s(eec)m(h)h(to)s(ols)g (ma)m(y)g(no)m(w)g(b)s(e)150 3609 y(considered)25 b(fairly)f(stable)i (for)f(its)g(basic)h(op)s(erations.)38 b(Exp)s(erimen)m(tal)24 b(features)j(are)f(describ)s(ed)e(in)g(help)150 3719 y(it)h(giv)m(es.)40 b(See)25 b(the)h(Sp)s(eec)m(h)f(T)-8 b(o)s(ols)25 b(man)m(ual)g(for)g(a)h(more)g(comprehensiv)m(e)f (discussion)e(of)j(using)e(`)p Fk(wagon)p Fo('.)275 3853 y(Ho)m(w)m(ev)m(er)34 b(the)e(ab)s(o)m(v)m(e)h(format)f(of)h(trees)f (is)f(similar)f(to)j(those)f(pro)s(duced)f(b)m(y)g(man)m(y)i(other)f (systems)150 3963 y(and)e(hence)g(it)g(is)g(reasonable)g(to)h (translate)f(their)g(formats)g(in)m(to)h(one)f(whic)m(h)g(F)-8 b(estiv)j(al)30 b(can)h(use.)150 4220 y Fn(25.3)68 b(Ngrams)275 4413 y Fo(Bigram,)42 b(trigrams,)f(and)f(general)g(ngrams)f(are)h(used) f(in)g(the)h(part)f(of)h(sp)s(eec)m(h)g(tagger)i(and)d(the)150 4523 y(phrase)g(break)g(predicter.)66 b(An)39 b(Ngram)h(C)p Fk(++)f Fo(Class)f(is)g(de\014ned)g(in)h(the)g(sp)s(eec)m(h)g(to)s(ols) h(library)d(and)150 4632 y(some)31 b(simple)d(facilities)h(are)h(added) g(within)e(F)-8 b(estiv)j(al)31 b(itself.)275 4767 y(Ngrams)e(ma)m(y)h (b)s(e)f(built)e(from)h(\014les)h(of)g(tok)m(ens)h(using)e(the)i (program)f Fk(ngram_build)d Fo(whic)m(h)i(is)g(part)150 4877 y(of)j(the)f(sp)s(eec)m(h)g(to)s(ols.)41 b(See)31 b(the)f(sp)s(eec)m(h)h(to)s(ols)f(do)s(cumen)m(tation)g(for)g(details.) 275 5011 y(Within)j(F)-8 b(estiv)j(al)36 b(ngrams)f(ma)m(y)h(b)s(e)e (named)h(and)g(loaded)g(from)g(\014les)f(and)h(used)f(when)g(required.) 150 5121 y(The)j(LISP)g(function)f Fk(load_ngram)f Fo(tak)m(es)k(a)f (name)f(and)g(a)h(\014lename)f(as)h(argumen)m(t)g(and)f(loads)g(the)150 5230 y(Ngram)21 b(from)g(that)g(\014le.)37 b(F)-8 b(or)21 b(an)g(example)g(of)g(its)f(use)g(once)i(loaded)e(see)i(`)p Fk(src/modules/base/pos.cc)p Fo(')150 5340 y(or)30 b(`)p Fk(src/modules/base/phrasify.c)o(c)p Fo('.)p eop %%Page: 122 124 122 123 bop 150 -116 a Fo(122)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(25.4)68 b(Viterbi)46 b(deco)t(der)275 486 y Fo(Another)84 b(common)i(to)s(ol)f (is)f(a)h(Viterbi)f(deco)s(der.)204 b(This)83 b(C)p Fk(++)h Fo(Class)g(is)g(de\014ned)150 596 y(in)143 b(the)h(sp)s(eec)m(h)g(to)s (ols)g(library)e(`)p Fk(speech_tooks/include/EST_v)o(iter)o(bi.)o(h)p Fo(')d(and)150 705 y(`)p Fk(speech_tools/stats/EST_vi)o(terb)o(i.cc)o Fo('.)204 b(A)87 b(Viterbi)e(deco)s(der)h(requires)f(t)m(w)m(o)k(func-) 150 815 y(tions)34 b(at)h(declaration)f(time.)53 b(The)34 b(\014rst)g(constructs)g(candidates)h(at)g(eac)m(h)g(stage,)j(while)32 b(the)j(second)150 925 y(com)m(bines)30 b(paths.)40 b(A)31 b(n)m(um)m(b)s(er)e(of)h(options)g(are)h(a)m(v)-5 b(ailable)30 b(\(whic)m(h)f(ma)m(y)i(c)m(hange\).)275 1054 y(The)36 b(protot)m(ypical)h(example)g(of)g(use)g(is)f(in)f(the)j(part)f(of)g (sp)s(eec)m(h)g(tagger)h(whic)m(h)e(using)g(standard)150 1163 y(Ngram)43 b(mo)s(dels)e(to)i(predict)f(probabilities)d(of)k (tags.)78 b(See)43 b(`)p Fk(src/modules/base/pos.cc)p Fo(')37 b(for)42 b(an)150 1273 y(example.)275 1402 y(The)30 b(Viterbi)g(deco)s(der)h(can)g(also)g(b)s(e)g(used)f(through)h(the)g (Sc)m(heme)h(function)e Fk(Gen_Viterbi)p Fo(.)40 b(This)150 1512 y(function)27 b(resp)s(ects)h(the)h(parameters)f(de\014ned)f(in)g (the)i(v)-5 b(ariable)27 b Fk(get_vit_params)p Fo(.)36 b(Lik)m(e)28 b(other)g(mo)s(d-)150 1621 y(ules)22 b(this)g(parameter)h (list)f(is)g(an)h(asso)s(c)g(list)f(of)h(feature)h(name)f(and)f(v)-5 b(alue.)38 b(The)22 b(parameters)i(supp)s(orted)150 1731 y(are:)150 1880 y Fk(Relation)96 b Fo(The)30 b(name)g(of)h(the)f (relation)g(the)h(deco)s(eder)f(is)f(to)j(b)s(e)d(applied)g(to.)150 2028 y Fk(cand_function)630 2138 y Fo(A)d(function)g(that)g(is)g(to)h (b)s(e)f(called)f(for)h(eac)m(h)i(item)e(that)h(will)d(return)h(a)i (list)e(of)h(candidates)630 2248 y(\(with)j(probilities\).)150 2396 y Fk(return_feat)630 2506 y Fo(The)c(name)g(of)h(a)g(feature)g (that)g(the)f(b)s(est)g(candidate)h(is)e(to)i(b)s(e)f(returned)f(in)g (for)i(eac)m(h)g(item)630 2616 y(in)j(the)i(named)f(relation.)150 2764 y Fk(p_word)192 b Fo(The)41 b(previous)f(w)m(ord)h(to)i(the)e (\014rst)g(item)g(in)g(the)g(named)g(relation)g(\(only)g(used)g(when) 630 2874 y(ngrams)30 b(are)h(the)f Fk(")p Fo(language)h(mo)s(del)p Fk(")p Fo(\).)150 3023 y Fk(pp_word)144 b Fo(The)31 b(previous)g (previous)f(w)m(ord)i(to)h(the)f(\014rst)f(item)h(in)e(the)j(named)e (relation)g(\(only)h(used)630 3132 y(when)d(ngrams)h(are)h(the)g Fk(")p Fo(language)f(mo)s(del)p Fk(")p Fo(\).)150 3281 y Fk(ngramname)630 3391 y Fo(the)45 b(name)g(of)g(an)g(ngram)g (\(loaded)g(b)m(y)g Fk(ngram.load)p Fo(\))d(to)k(b)s(e)e(used)g(as)h(a) h Fk(")p Fo(language)630 3500 y(mo)s(del)p Fk(")p Fo(.)150 3649 y Fk(wfstmname)630 3759 y Fo(the)25 b(name)h(of)f(a)h(WFST)f (\(loaded)g(b)m(y)g Fk(wfst.load)p Fo(\))e(to)j(b)s(e)f(used)g(as)g(a)h Fk(")p Fo(language)f(mo)s(del)p Fk(")p Fo(,)630 3868 y(this)k(is)h(ignored)f(if)h(an)g Fk(ngramname)e Fo(is)h(also)h(sp)s (eci\014ed.)150 4017 y Fk(debug)240 b Fo(If)30 b(sp)s(eci\014ed)f(more) h(debug)g(features)g(are)h(added)f(to)h(the)g(items)e(in)h(the)g (relation.)150 4166 y Fk(gscale_p)96 b Fo(Grammar)30 b(scaling)g(factor.)275 4314 y(Here)g(is)g(a)h(short)f(example)g(to)h (help)e(mak)m(e)i(the)g(use)f(of)g(this)g(facilit)m(y)f(clearer.)275 4444 y(There)42 b(are)i(t)m(w)m(o)h(parts)e(required)e(for)i(the)h (Viterbi)e(deco)s(de)h(a)h(set)g(of)f(candidate)g(observ)-5 b(ations)150 4553 y(and)37 b(some)h Fk(")p Fo(language)g(mo)s(del)p Fk(")p Fo(.)61 b(F)-8 b(or)38 b(the)g(math)g(to)g(w)m(ork)g(prop)s (erly)d(the)j(candidate)f(observ)-5 b(ations)150 4663 y(m)m(ust)37 b(b)s(e)f(rev)m(erse)h(probabilities)c(\(for)k(eac)m(h)h (candidiate)e(as)h(giv)m(en)f(what)h(is)f(the)h(probabilit)m(y)d(of)j (the)150 4772 y(observ)-5 b(ation,)28 b(rather)f(than)f(the)i (probabilit)m(y)c(of)k(the)f(candidate)g(giv)m(en)g(the)g(observ)-5 b(ation\).)40 b(These)27 b(can)150 4882 y(b)s(e)d(calculated)g(for)g (the)g(probabilties)e(candidate)i(giv)m(en)g(the)g(observ)-5 b(ation)24 b(divided)e(b)m(y)i(the)g(probabilit)m(y)150 4992 y(of)31 b(the)f(candidate)g(in)f(isolation.)275 5121 y(F)-8 b(or)37 b(the)h(sak)m(e)g(of)f(simplicit)m(y)e(let)i(us)f (assume)h(w)m(e)h(ha)m(v)m(e)g(a)g(lexicon)e(of)i(w)m(ords)e(to)i (distribution)c(of)150 5230 y(part)f(of)h(sp)s(eec)m(h)f(tags)h(with)e (rev)m(erse)i(probabilities.)46 b(And)33 b(an)g(tri-gram)g(called)g Fk(pos-tri-gram)d Fo(o)m(v)m(er)150 5340 y(ngram)g(sequences)h(of)f (part)g(of)h(sp)s(eec)m(h)f(tags.)42 b(First)30 b(w)m(e)h(m)m(ust)f (de\014ne)g(the)g(candidate)g(function)p eop %%Page: 123 125 123 124 bop 150 -116 a Fo(Chapter)30 b(25:)41 b(T)-8 b(o)s(ols)2741 b(123)390 299 y Fk(\(define)46 b(\(pos_cand_function)d (w\))438 403 y(;;)k(select)f(the)h(appropriate)e(lexicon)438 506 y(\(lex.select)f('pos_lex\))438 610 y(;;)j(return)f(the)h(list)g (of)g(cands)f(with)h(rprobs)438 714 y(\(cadr)485 818 y(\(lex.lookup)e(\(item.name)g(w\))i(nil\)\)\))275 952 y Fo(The)29 b(returned)h(candidate)g(list)f(w)m(ould)g(lo)s(ok)h(som)m (thing)g(lik)m(e)390 1081 y Fk(\()47 b(\(jj)g(-9.872\))f(\(vbd)h (-6.284\))f(\(vbn)g(-5.565\))g(\))275 1215 y Fo(Our)29 b(part)h(of)g(sp)s(eec)m(h)h(tagger)h(function)d(w)m(ould)g(lo)s(ok)h (something)g(lik)m(e)g(this)390 1344 y Fk(\(define)46 b(\(pos_tagger)f(utt\))485 1448 y(\(set!)i(get_vit_params)772 1552 y(\(list)820 1655 y(\(list)f('Relation)f("Word"\))820 1759 y(\(list)h('return_feat)e('pos_tag\))820 1863 y(\(list)i('p_word)g ("punc"\))820 1967 y(\(list)g('pp_word)f("nn"\))820 2071 y(\(list)h('ngramname)f("pos-tri-gram"\))820 2174 y(\(list)h ('cand_function)e('pos_cand_function\)\)\))485 2278 y(\(Gen_Viterbi)h (utt\))485 2382 y(utt\))275 2516 y Fo(this)29 b(will)f(assign)h(the)i (optimal)e(part)h(of)h(sp)s(eec)m(h)f(tags)i(to)f(eac)m(h)g(w)m(ord)f (in)f(utt.)150 2774 y Fn(25.5)68 b(Linear)46 b(regression)275 2966 y Fo(The)37 b(linear)g(regression)g(mo)s(del)g(tak)m(es)i(mo)s (dels)e(built)f(from)i(some)g(external)g(pac)m(k)-5 b(age)40 b(and)e(\014nds)150 3076 y(co)s(e\016cien)m(ts)c(based)f(on)g(the)g (features)h(and)f(w)m(eigh)m(ts.)49 b(A)34 b(mo)s(del)e(consists)g(of)i (a)g(list)d(of)j(features.)49 b(The)150 3186 y(\014rst)34 b(should)e(b)s(e)i(the)h(atom)g Fk(Intercept)d Fo(plus)h(a)i(v)-5 b(alue.)53 b(The)34 b(follo)m(wing)f(in)g(the)i(list)e(should)f (consist)150 3295 y(of)h(a)g(feature)f(\(see)i(Section)e(14.6)i([F)-8 b(eatures],)35 b(page)e(71\))h(follo)m(w)m(ed)e(b)m(y)h(a)f(w)m(eigh)m (t.)48 b(An)32 b(optional)g(third)150 3405 y(elemen)m(t)g(ma)m(y)g(b)s (e)f(a)h(list)e(of)h(atomic)i(v)-5 b(alues.)43 b(If)31 b(the)h(result)e(of)i(the)f(feature)h(is)f(a)g(mem)m(b)s(er)g(of)h (this)e(list)150 3514 y(the)j(feature's)h(v)-5 b(alue)33 b(is)f(treated)j(as)e(1)h(else)f(it)g(is)f(0.)50 b(This)31 b(third)h(argumen)m(t)h(allo)m(ws)g(an)g(e\016cien)m(t)h(w)m(a)m(y)150 3624 y(to)d(map)g(categorical)h(v)-5 b(alues)30 b(in)m(to)g(n)m(umeric) g(v)-5 b(alues.)41 b(F)-8 b(or)31 b(example,)g(from)f(the)h(F0)g (prediction)e(mo)s(del)150 3733 y(in)g(`)p Fk(lib/f2bf0lr.scm)p Fo('.)37 b(The)30 b(\014rst)g(few)g(parameters)g(are)390 3862 y Fk(\(set!)46 b(f2b_f0_lr_start)390 3966 y('\()533 4070 y(\()i(Intercept)d(160.584956)g(\))533 4174 y(\()j (Word.Token.EMPH)43 b(36.0)k(\))533 4277 y(\()h(pp.tobi_accent)c (10.081770)h(\(H*\))h(\))533 4381 y(\()i(pp.tobi_accent)c(3.358613)h (\(!H*\))h(\))533 4485 y(\()i(pp.tobi_accent)c(4.144342)h(\(*?)i(X*?)g (H*!H*)f(*)i(L+H*)e(L+!H*\))g(\))533 4589 y(\()i(pp.tobi_accent)c (-1.111794)h(\(L*\))h(\))533 4692 y(...)390 4796 y(\))275 4931 y Fo(Note)37 b(the)f(feature)g Fk(pp.tobi_accent)c Fo(returns)j(an)g(atom,)k(and)c(is)g(hence)h(tested)h(with)d(the)i(map) 150 5040 y(groups)30 b(sp)s(eci\014ed)e(as)j(third)d(argumen)m(ts.)275 5175 y(Mo)s(dels)33 b(ma)m(y)i(b)s(e)e(built)f(from)h(feature)i(data)g (\(in)e(the)h(same)h(format)f(as)g(`)p Fk(wagon)p Fo(')f(using)g(the)h (`)p Fk(ols)p Fo(')150 5284 y(program)c(distributed)e(with)h(the)h(sp)s (eec)m(h)h(to)s(ols)f(library)-8 b(.)p eop %%Page: 124 126 124 125 bop 150 -116 a Fo(124)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 125 127 125 126 bop 150 -116 a Fo(Chapter)30 b(26:)41 b(Building)28 b(mo)s(dels)h(from)h(databases)1681 b(125)150 299 y Fl(26)80 b(Building)55 b(mo)t(dels)e(from)g(databases)275 535 y Fo(Because)45 b(our)f(researc)m(h)g(in)m(terests)g(tend)g(to)m(w)m (ards)h(creating)g(statistical)e(mo)s(dels)g(trained)g(from)150 645 y(real)g(sp)s(eec)m(h)g(data,)k(F)-8 b(estiv)j(al)44 b(o\013ers)f(v)-5 b(arious)42 b(supp)s(ort)g(for)h(extracting)h (information)d(from)i(sp)s(eec)m(h)150 755 y(databases,)31 b(in)e(a)i(w)m(a)m(y)h(suitable)c(for)j(building)26 b(mo)s(dels.)275 890 y(Mo)s(dels)j(for)g(accen)m(t)j(prediction,)c(F0)j(generation,)f (duration,)f(v)m(o)m(w)m(el)i(reduction,)e(homograph)g(dis-)150 999 y(am)m(biguation,)i(phrase)g(break)h(assignmen)m(t)f(and)g(unit)f (selection)h(ha)m(v)m(e)i(b)s(een)e(built)e(using)h(F)-8 b(estiv)j(al)32 b(to)150 1109 y(extract)g(and)e(pro)s(cess)g(v)-5 b(arious)29 b(databases.)150 1368 y Fn(26.1)68 b(Lab)t(elling)46 b(databases)275 1562 y Fo(In)28 b(order)h(for)g(F)-8 b(estiv)j(al)29 b(to)h(use)f(a)g(database)i(it)d(is)g(most)i(useful)d (to)j(build)c(utterance)31 b(structures)d(for)150 1671 y(eac)m(h)j(utterance)f(in)e(the)i(database.)41 b(As)30 b(discussed)d(earlier,)i(utterance)h(structures)f(con)m(tain)h (relations)150 1781 y(of)g(items.)40 b(Giv)m(en)30 b(suc)m(h)f(a)h (structure)f(for)h(eac)m(h)h(utterance)f(in)f(a)h(database)h(w)m(e)f (can)g(easily)f(read)g(in)g(the)150 1890 y(utterance)k(represen)m (tation)f(and)f(access)i(it,)f(dumping)d(information)h(in)h(a)h (normalised)d(w)m(a)m(y)k(allo)m(wing)150 2000 y(for)d(easy)h(building) c(and)i(testing)i(of)f(mo)s(dels.)275 2135 y(Of)25 b(course)i(the)f (lev)m(el)g(of)h(lab)s(elling)c(that)j(exists,)h(or)g(that)g(y)m(ou)f (are)h(willing)c(to)k(do)f(b)m(y)g(hand)f(or)h(using)150 2245 y(some)37 b(automatic)h(to)s(ol,)h(for)d(a)i(particular)d (database)j(will)c(v)-5 b(ary)d(.)60 b(F)-8 b(or)38 b(man)m(y)f(purp)s (oses)e(y)m(ou)i(will)d(at)150 2355 y(least)27 b(need)f(phonetic)g(lab) s(elling.)36 b(Hand)27 b(lab)s(elled)d(data)j(is)f(still)e(b)s(etter)j (than)f(auto-lab)s(elled)f(data,)k(but)150 2464 y(that)i(could)e(c)m (hange.)42 b(The)30 b(size)g(and)g(consistency)g(of)h(the)f(data)i(is)d (imp)s(ortan)m(t)h(to)s(o.)275 2599 y(F)-8 b(or)33 b(this)g(discussion) d(w)m(e)k(will)c(assume)j(lab)s(els)f(for:)46 b(segmen)m(ts,)35 b(syllables,)d(w)m(ords,)h(phrases,)h(in)m(to-)150 2709 y(nation)c(ev)m(en)m(ts,)j(pitc)m(h)d(targets.)44 b(Some)31 b(of)g(these)h(can)f(b)s(e)f(deriv)m(ed,)h(some)g(need)g(to)g(b)s(e)g (lab)s(elled.)40 b(This)150 2819 y(w)m(ould)d(not)h(fail)e(with)h(less) g(lab)s(elling)e(but)i(of)h(course)g(y)m(ou)g(w)m(ouldn't)f(b)s(e)g (able)h(to)g(extract)i(as)e(m)m(uc)m(h)150 2928 y(information)29 b(from)h(the)g(result.)275 3063 y(In)e(our)h(databases)i(these)f(lab)s (els)d(are)j(in)e(En)m(tropic's)h(Xlab)s(el)f(format,)j(though)e(it)g (is)f(fairly)g(easy)i(to)150 3173 y(con)m(v)m(ert)i(an)m(y)f (reasonable)f(format.)150 3334 y Fi(Se)-5 b(gment)153 b Fo(These)30 b(giv)m(e)h(phoneme)e(lab)s(els)g(for)h(\014les.)39 b(Note)32 b(the)e(these)h(lab)s(els)d Fi(must)40 b Fo(b)s(e)29 b(mem)m(b)s(ers)h(of)630 3443 y(the)k(phoneset)g(that)h(y)m(ou)g(will)c (b)s(e)j(using)e(for)i(this)f(database.)53 b(Often)34 b(phone)g(lab)s(el)e(\014les)630 3553 y(ma)m(y)g(con)m(tain)g(extra)g (lab)s(els)e(\(e.g.)46 b(b)s(eginning)29 b(and)i(end)g(silence\))g (whic)m(h)f(are)i(not)g(really)630 3662 y(part)25 b(of)h(the)f (phoneset.)39 b(Y)-8 b(ou)26 b(should)d(remo)m(v)m(e)k(\(or)f(re-lab)s (el\))e(these)i(phones)e(accordingly)-8 b(.)150 3823 y Fi(Wor)j(d)264 b Fo(Again)30 b(these)g(will)d(need)j(to)g(b)s(e)f (pro)m(vided.)40 b(The)29 b(end)g(of)h(the)g(w)m(ord)g(should)d(come)k (at)g(the)630 3932 y(last)26 b(phone)f(in)g(the)h(w)m(ord)g(\(or)g (just)g(after\).)40 b(P)m(auses/silences)26 b(should)e(not)i(b)s(e)g (part)g(of)g(the)630 4042 y(w)m(ord.)150 4202 y Fi(Syl)5 b(lable)181 b Fo(There)22 b(is)g(a)h(c)m(hance)h(these)f(can)g(b)s(e)f (automatically)h(generated)h(from)e(W)-8 b(ord)23 b(and)f(Segmen)m(t) 630 4311 y(\014les)29 b(giv)m(en)i(a)f(lexicon.)40 b(Ideally)29 b(these)i(should)e(include)f(lexical)h(stress.)150 4472 y Fi(IntEvent)137 b Fo(These)40 b(should)e(ideally)g(mark)i(accen)m (t/b)s(oundary)h(tone)f(t)m(yp)s(e)h(for)f(eac)m(h)h(syllable,)g(but) 630 4581 y(this)26 b(almost)i(de\014nitely)e(requires)g(hand-lab)s (elling.)35 b(Also)28 b(giv)m(en)f(that)h(hand-lab)s(elling)c(of)630 4691 y(accen)m(t)38 b(t)m(yp)s(e)f(is)f(harder)f(and)h(not)h(as)g (accurate,)j(it)c(is)f(arguable)i(that)g(an)m(ything)f(other)630 4800 y(than)30 b(accen)m(ted)i(vs.)41 b(non-accen)m(ted)32 b(can)e(b)s(e)g(used)g(reliably)-8 b(.)150 4961 y Fi(Phr)j(ase)214 b Fo(This)37 b(could)g(just)h(mark)g(the)h(last)f(non-silence)g(phone)f (in)h(eac)m(h)h(utterance,)j(or)c(b)s(efore)630 5070 y(an)m(y)31 b(silence)e(phones)h(in)f(the)h(whole)g(utterance.)150 5230 y Fi(T)-7 b(ar)i(get)229 b Fo(This)37 b(can)i(b)s(e)e (automatically)i(deriv)m(ed)e(from)h(an)h(F0)g(\014le)f(and)g(the)g (Segmen)m(t)i(\014les.)64 b(A)630 5340 y(marking)29 b(of)i(the)f(mean)h (F0)g(in)e(eac)m(h)j(v)m(oiced)e(phone)g(seem)h(to)g(giv)m(e)g (adequate)g(results.)p eop %%Page: 126 128 126 127 bop 150 -116 a Fo(126)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(Once)23 b(these)g(\014les)g(are)g(created)h(an)g(utterance)g(\014le)e(can)i(b)s (e)e(automatically)h(created)i(from)d(the)i(ab)s(o)m(v)m(e)150 408 y(data.)47 b(Note)33 b(it)f(is)f(prett)m(y)h(easy)h(to)g(get)g(the) f(streams)h(righ)m(t)e(but)h(getting)h(the)f(relations)f(b)s(et)m(w)m (een)i(the)150 518 y(streams)25 b(is)f(m)m(uc)m(h)h(harder.)38 b(Firstly)24 b(lab)s(elling)d(is)k(rarely)f(accurate)i(and)f(small)e (windo)m(ws)g(of)i(error)g(m)m(ust)150 628 y(b)s(e)34 b(allo)m(w)m(ed)g(to)h(ensure)f(things)f(line)g(up)g(prop)s(erly)-8 b(.)51 b(The)34 b(second)g(problem)f(is)h(that)g(some)h(lab)s(el)e (\014les)150 737 y(iden)m(tify)d(p)s(oin)m(t)h(t)m(yp)s(e)i (information)d(\(In)m(tEv)m(en)m(t)k(and)d(T)-8 b(arget\))34 b(while)c(others)i(iden)m(tify)e(segmen)m(ts)j(\(e.g.)150 847 y(Segmen)m(t,)f(W)-8 b(ords)31 b(etc.\).)45 b(Relations)30 b(ha)m(v)m(e)j(to)e(kno)m(w)g(this)f(in)g(order)h(to)g(get)i(it)d(righ) m(t.)42 b(F)-8 b(or)32 b(example)f(is)150 956 y(not)i(righ)m(t)g(for)g (all)f(syllables)f(b)s(et)m(w)m(een)j(t)m(w)m(o)g(In)m(tEv)m(en)m(ts)g (to)g(b)s(e)f(link)m(ed)e(to)j(the)f(In)m(tEv)m(en)m(t,)j(only)c(to)i (the)150 1066 y(Syllable)28 b(the)i(In)m(tEv)m(en)m(t)i(is)d(within.) 275 1208 y(The)34 b(script)f(`)p Fk(festival/examples/make_utts)o Fo(')c(is)34 b(an)h(example)f(F)-8 b(estiv)j(al)35 b(script)e(whic)m(h) h(auto-)150 1318 y(matically)29 b(builds)f(the)i(utterance)i(\014les)d (from)h(the)g(ab)s(o)m(v)m(e)i(lab)s(elled)c(\014les.)275 1460 y(The)20 b(script,)j(b)m(y)e(default)g(assumes,)i(a)f(hierarc)m(h) m(y)f(in)f(an)h(database)h(directory)f(of)h(the)f(follo)m(wing)f(form.) 150 1570 y(Under)28 b(a)h(directory)f(`)p Fk(festival/)p Fo(')e(where)i(all)g(festiv)-5 b(al)28 b(sp)s(eci\014c)f(database)i (ifnromation)e(can)i(b)s(e)f(k)m(ept,)150 1680 y(a)34 b(directory)g(`)p Fk(relations/)p Fo(')d(con)m(tains)j(a)h(sub)s (directory)d(for)h(eac)m(h)i(basic)f(relation)f(\(e.g.)52 b(`)p Fk(Segment/)p Fo(',)150 1789 y(`)p Fk(Syllable/)p Fo(',)29 b(etc.\))42 b(Eac)m(h)31 b(of)f(whic)m(h)f(con)m(tains)i(the)g (basic)e(lab)s(el)g(\014les)g(for)h(that)h(relation.)275 1932 y(The)h(follo)m(wing)f(command)i(will)d(build)f(a)34 b(set)f(of)g(utterance)g(structures)g(\(including)c(building)g(h)m(te) 150 2041 y(relations)g(that)i(link)e(b)s(et)m(w)m(een)i(these)g(basic)e (relations\).)390 2178 y Fk(make_utts)45 b(-phoneset)h(radio)g (festival/relation/Segmen)o(t/*.)o(Seg)o(ment)275 2320 y Fo(This)40 b(will)h(create)j(utterances)f(in)f(`)p Fk(festival/utts/)p Fo('.)74 b(There)43 b(are)g(a)g(n)m(um)m(b)s(er)e (of)i(options)f(to)150 2430 y(`)p Fk(make_utts)p Fo(')d(use)i(`)p Fk(-h)p Fo(')h(to)g(\014nd)d(them.)74 b(The)41 b(`)p Fk(-eval)p Fo(')f(option)h(allo)m(ws)g(extra)h(sc)m(heme)g(co)s(de)f (to)i(b)s(e)150 2539 y(loaded)34 b(whic)m(h)g(ma)m(y)h(b)s(e)f(called)g (b)m(y)h(the)f(utterance)i(building)31 b(pro)s(cess.)53 b(The)34 b(function)g Fk(make_utts_)150 2649 y(user_function)24 b Fo(will)h(b)s(e)h(called)h(on)g(all)g(utterance)h(created.)41 b(Rede\014ning)26 b(that)i(in)e(database)i(sp)s(eci\014c)150 2758 y(loaded)i(co)s(de)g(will)e(allo)m(w)i(database)h(sp)s(eci\014c)e (\014xed)h(to)h(the)g(utterance.)150 3036 y Fn(26.2)68 b(Extracting)46 b(features)275 3236 y Fo(The)25 b(easiest)i(w)m(a)m(y)g (to)g(extract)g(features)g(from)e(a)i(lab)s(elled)d(database)j(of)f (the)g(form)g(describ)s(ed)e(in)h(the)150 3346 y(previous)k(section)i (is)f(b)m(y)h(loading)f(in)f(eac)m(h)k(of)e(the)g(utterance)g (structures)g(and)f(dumping)e(the)j(desired)150 3455 y(features.)275 3598 y(Using)j(the)h(same)h(mec)m(hanism)f(to)g (extract)i(the)f(features)f(as)h(will)c(ev)m(en)m(tually)j(b)s(e)g (used)f(b)m(y)h(mo)s(d-)150 3707 y(els)f(built)f(from)h(the)h(features) g(has)f(the)h(imp)s(ortan)m(t)f(adv)-5 b(an)m(tage)37 b(of)e(a)m(v)m(oiding)f(spurious)f(errors)h(easily)150 3817 y(in)m(tro)s(duced)39 b(when)g(collecting)h(data.)71 b(F)-8 b(or)41 b(example)f(a)g(feature)h(suc)m(h)f(as)g Fk(n.accent)e Fo(in)h(a)i(F)-8 b(estiv)j(al)150 3926 y(utterance)31 b(will)c(b)s(e)i(de\014ned)g(as)h(0)g(when)f(there)i(is) d(no)i(next)g(accen)m(t.)43 b(Extracting)30 b(all)f(the)h(accen)m(ts)i (and)150 4036 y(using)k(an)h(external)g(program)g(to)h(calculate)f(the) g(next)h(accen)m(t)h(ma)m(y)f(mak)m(e)g(a)f(di\013eren)m(t)g(decision)f (so)150 4146 y(that)e(when)f(the)g(generated)i(mo)s(del)d(is)h(used)f (a)i(di\013eren)m(t)f(v)-5 b(alue)33 b(for)g(this)g(feature)h(will)c(b) s(e)j(pro)s(duced.)150 4255 y(Suc)m(h)25 b(mismatc)m(hes)h(in)f (training)f(mo)s(dels)g(and)i(actual)g(use)f(are)i(unfortunately)d (common,)j(so)f(using)f(the)150 4365 y(same)31 b(mec)m(hanism)e(to)j (extract)f(data)g(for)g(training,)e(and)g(for)h(actual)h(use)f(is)g(w)m (orth)m(while.)275 4507 y(The)g(recommedn)h(metho)s(d)f(for)h (extracting)h(features)f(is)f(using)f(the)j(festiv)-5 b(al)30 b(script)g(`)p Fk(dumpfeats)p Fo('.)150 4617 y(It)f(basically)f(tak)m(es)j(a)e(list)f(of)i(feature)g(names)f(and)f (a)i(list)e(of)i(utterance)g(\014les)e(and)h(dumps)e(the)i(desired)150 4726 y(features.)275 4869 y(F)-8 b(eatures)33 b(ma)m(y)g(b)s(e)f(dump)s (ed)e(in)m(to)j(a)g(single)e(\014le)g(or)i(in)m(to)f(separate)i (\014les)d(one)i(for)f(eac)m(h)i(utterance.)150 4978 y(F)-8 b(eature)35 b(names)e(ma)m(y)h(b)s(e)f(sp)s(eci\014ed)f(on)h (the)g(command)h(line)d(or)j(in)e(a)i(separate)g(\014le.)49 b(Extar)34 b(co)s(de)f(to)150 5088 y(de\014ne)d(new)f(features)i(ma)m (y)g(b)s(e)f(loaded)g(to)s(o.)275 5230 y(F)-8 b(or)32 b(example)g(supp)s(ose)e(w)m(e)j(w)m(an)m(ted)f(to)h(sa)m(v)m(e)g(the)g (features)f(for)g(a)g(set)g(of)g(utterances)h(include)d(the)150 5340 y(duration,)f(phone)h(name,)h(previous)d(and)i(next)h(phone)e (names)i(for)f(all)f(segmen)m(ts)i(in)f(eac)m(h)h(utterance.)p eop %%Page: 127 129 127 128 bop 150 -116 a Fo(Chapter)30 b(26:)41 b(Building)28 b(mo)s(dels)h(from)h(databases)1681 b(127)390 299 y Fk(dumpfeats)45 b(-feats)h("\(segment_duration)d(name)k(p.name)f(n.name\)")f(\\)867 403 y(-output)h(feats/\045s.dur)f(-relation)g(Segment)h(\\)867 506 y(festival/utts/*.utt)275 639 y Fo(This)36 b(will)h(sa)m(v)m(e)j (these)f(features)g(in)f(\014les)f(named)h(for)h(the)g(utterances)g (they)g(come)h(from)e(in)g(the)150 749 y(directory)25 b(`)p Fk(feats/)p Fo('.)38 b(The)25 b(argumen)m(t)h(to)h(`)p Fk(-feats)p Fo(')d(is)h(treated)h(as)g(literal)e(list)h(only)f(if)h(it) g(starts)h(with)f(a)150 859 y(left)i(paren)m(thesis,)g(otherwise)g(it)g (is)f(treated)j(as)e(a)h(\014lename)f(con)m(tain)g(named)g(features)h (\(un)m(brac)m(k)m(eted\).)275 991 y(Extra)34 b(co)s(de)h(\(for)f(new)g (feature)h(de\014nitions\))d(ma)m(y)j(b)s(e)f(loaded)g(through)f(the)i (`)p Fk(-eval)p Fo(')e(option.)52 b(If)150 1101 y(the)30 b(argumen)m(t)h(to)g(`)p Fk(-eval)p Fo(')e(starts)i(with)d(a)j(left)f (paren)m(thesis)f(it)h(is)f(trated)i(as)f(an)g(s-expression)f(rather) 150 1211 y(than)k(a)h(\014lename)f(and)g(is)f(ev)-5 b(aluated.)50 b(If)33 b(argumen)m(t)h(`)p Fk(-output)p Fo(')e(con)m(tains)i Fk(")p Fo(\045s)p Fk(")e Fo(it)h(will)e(b)s(e)i(\014lled)e(in)150 1320 y(with)d(the)h(utterance's)i(\014lename,)d(if)h(it)f(is)h(a)g (simple)e(\014lename)i(the)g(features)h(from)e(all)h(utterances)h(will) 150 1430 y(b)s(e)f(sa)m(v)m(ed)h(in)e(that)i(same)f(\014le.)40 b(The)29 b(features)g(for)g(eac)m(h)i(item)e(in)f(the)h(named)g (relation)f(are)i(sa)m(v)m(ed)g(on)g(a)150 1539 y(single)f(line.)150 1792 y Fn(26.3)68 b(Building)45 b(mo)t(dels)275 1983 y Fo(This)32 b(section)j(describ)s(es)d(ho)m(w)i(to)h(build)d(mo)s (dels)h(from)h(data)h(extracted)g(from)f(databases)h(as)g(de-)150 2093 y(scrib)s(ed)42 b(in)g(the)i(previous)f(section.)81 b(It)44 b(uses)f(the)h(CAR)-8 b(T)43 b(building)d(program,)48 b(`)p Fk(wagon)p Fo(')42 b(whic)m(h)h(is)150 2202 y(a)m(v)-5 b(ailable)30 b(in)g(the)h(sp)s(eec)m(h)g(to)s(ols)g(distribution.)39 b(But)32 b(the)f(data)h(is)e(suitable)f(for)i(man)m(y)g(other)h(t)m(yp) s(es)f(of)150 2312 y(mo)s(del)e(building)e(tec)m(hniques,)j(suc)m(h)g (as)h(linear)d(regression)i(or)g(neural)f(net)m(w)m(orks.)275 2445 y(W)-8 b(agon)37 b(is)e(describ)s(ed)f(in)h(the)h(sp)s(eec)m(h)g (to)s(ols)g(man)m(ual,)h(though)f(w)m(e)g(will)d(co)m(v)m(er)38 b(simple)c(use)i(here.)150 2554 y(T)-8 b(o)31 b(use)f(W)-8 b(agon)32 b(y)m(ou)f(need)f(a)h(data\014le)f(and)g(a)g(data)h (description)e(\014le.)275 2687 y(A)f(data\014le)g(consists)f(of)i(a)f (n)m(um)m(b)s(er)f(of)i(v)m(ectors)g(one)g(p)s(er)e(line)f(eac)m(h)k (con)m(taining)d(the)i(same)f(n)m(um)m(b)s(er)150 2797 y(of)h(\014elds.)38 b(This,)27 b(not)i(coinciden)m(tally)-8 b(,)28 b(is)f(exactly)i(the)g(format)g(pro)s(duced)d(b)m(y)j(`)p Fk(dumpfeats)p Fo(')d(describ)s(ed)150 2907 y(in)37 b(the)h(previous)e (section.)64 b(The)37 b(data)i(description)d(\014le)h(describ)s(es)f (the)i(\014elds)f(in)g(the)h(data\014le)g(and)150 3016 y(their)c(range.)56 b(Fields)33 b(ma)m(y)j(b)s(e)e(of)i(an)m(y)f(of)h (the)f(follo)m(wing)e(t)m(yp)s(es:)51 b(class)35 b(\(a)h(list)d(of)j (sym)m(b)s(ols\),)f(\015oats,)150 3126 y(or)d(ignored.)43 b(W)-8 b(agon)34 b(will)29 b(build)f(a)k(classi\014cation)f(tree)h(if)f (the)h(\014rst)f(\014eld)f(\(the)i(predictee\))g(is)f(of)h(t)m(yp)s(e) 150 3235 y(class,)d(or)g(a)h(regression)e(tree)i(if)e(the)h(\014rst)g (\014eld)e(is)h(a)i(\015oat.)41 b(An)28 b(example)h(data)h(description) d(\014le)h(w)m(ould)150 3345 y(b)s(e)390 3472 y Fk(\()390 3576 y(\()47 b(duration)f(float)g(\))390 3680 y(\()h(name)g(#)h(@)f(@@) g(a)h(aa)f(ai)g(au)g(b)h(ch)f(d)g(dh)g(e)h(e@)f(ei)g(f)h(g)f(h)h(i)f (i@)g(ii)g(jh)h(k)f(l)h(m)f(n)581 3783 y(ng)g(o)h(oi)f(oo)g(ou)g(p)h(r) f(s)g(sh)h(t)f(th)g(u)h(u@)f(uh)g(uu)g(v)h(w)f(y)h(z)f(zh)g(\))390 3887 y(\()g(n.name)g(#)g(@)g(@@)h(a)f(aa)g(ai)g(au)h(b)f(ch)g(d)h(dh)f (e)g(e@)h(ei)f(f)g(g)h(h)f(i)h(i@)f(ii)g(jh)g(k)h(l)f(m)g(n)581 3991 y(ng)g(o)h(oi)f(oo)g(ou)g(p)h(r)f(s)g(sh)h(t)f(th)g(u)h(u@)f(uh)g (uu)g(v)h(w)f(y)h(z)f(zh)g(\))390 4095 y(\()g(p.name)g(#)g(@)g(@@)h(a)f (aa)g(ai)g(au)h(b)f(ch)g(d)h(dh)f(e)g(e@)h(ei)f(f)g(g)h(h)f(i)h(i@)f (ii)g(jh)g(k)h(l)f(m)g(n)581 4198 y(ng)g(o)h(oi)f(oo)g(ou)g(p)h(r)f(s)g (sh)h(t)f(th)g(u)h(u@)f(uh)g(uu)g(v)h(w)f(y)h(z)f(zh)g(\))390 4302 y(\()g(R:SylStructure.parent.posi)o(tion)o(_ty)o(pe)42 b(0)47 b(final)f(initial)g(mid)h(single)f(\))390 4406 y(\()h(pos_in_syl)e(float)i(\))390 4510 y(\()g(syl_initial)e(0)j(1)f (\))390 4614 y(\()g(syl_final)f(0)h(1\))390 4717 y(\()g (R:SylStructure.parent.R:Sy)o(llab)o(le.)o(p.sy)o(l_br)o(eak)41 b(0)48 b(1)f(3)h(\))390 4821 y(\()f(R:SylStructure.parent.syl_)o(brea)o (k)42 b(0)47 b(1)h(3)f(4)h(\))390 4925 y(\()f (R:SylStructure.parent.R:Sy)o(llab)o(le.)o(n.sy)o(l_br)o(eak)41 b(0)48 b(1)f(3)h(4)f(\))390 5029 y(\()g(R:SylStructure.parent.R:Sy)o (llab)o(le.)o(p.st)o(ress)41 b(0)47 b(1)h(\))390 5132 y(\()f(R:SylStructure.parent.stre)o(ss)42 b(0)47 b(1)g(\))390 5236 y(\()g(R:SylStructure.parent.R:Sy)o(llab)o(le.)o(n.st)o(ress)41 b(0)47 b(1)h(\))390 5340 y(\))p eop %%Page: 128 130 128 129 bop 150 -116 a Fo(128)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(The)k(script)g(`)p Fk(speech_tools/bin/make_wago)o(n_de)o(sc)p Fo(')28 b(go)s(es)35 b(some)g(w)m(a)m(y)g(to)g(helping.)49 b(Giv)m(en)35 b(a)150 408 y(data\014le)41 b(and)g(a)g(\014le)f(con)m(taining)h(the)h(\014eld) d(names,)44 b(it)d(will)e(construct)i(an)g(appro)m(ximation)f(of)i(the) 150 518 y(description)32 b(\014le.)51 b(This)33 b(\014le)g(should)f (still)g(b)s(e)i(edited)f(as)i(all)e(\014elds)f(are)j(treated)g(as)f (of)h(t)m(yp)s(e)f(class)g(b)m(y)150 628 y(`)p Fk(make_wagon_desc)p Fo(')27 b(and)i(y)m(ou)i(ma)m(y)g(w)m(an)m(t)g(to)g(c)m(hange)h(them)e (some)h(of)g(them)f(to)h(\015oat.)275 762 y(The)f(data)h(\014le)f(m)m (ust)g(b)s(e)g(a)h(single)e(\014le,)h(although)g(w)m(e)h(created)h(a)f (n)m(um)m(b)s(er)e(of)i(feature)g(\014les)e(b)m(y)i(the)150 872 y(pro)s(cess)j(describ)s(ed)f(in)h(the)h(previous)e(section.)55 b(F)-8 b(rom)35 b(a)g(list)f(of)h(\014le)f(ids)f(select,)k(sa)m(y)-8 b(,)37 b(80\045)f(of)f(them,)150 981 y(as)j(training)e(data)j(and)e (cat)j(them)d(in)m(to)h(a)h(single)d(data\014le.)64 b(The)37 b(remaining)f(20\045)j(ma)m(y)f(b)s(e)g(catted)150 1091 y(together)32 b(as)e(test)i(data.)275 1225 y(T)-8 b(o)30 b(build)e(a)i(tree)i(use)e(a)g(command)g(lik)m(e)390 1354 y Fk(wagon)46 b(-desc)h(DESCFILE)e(-data)i(TRAINFILE)e(-test)h (TESTFILE)275 1489 y Fo(The)31 b(minim)m(um)f(cluster)i(size)g (\(default)g(50\))i(ma)m(y)f(b)s(e)e(reduced)h(using)f(the)i(command)f (line)e(option)150 1598 y Fk(-stop)f Fo(plus)f(a)j(n)m(um)m(b)s(er.)275 1733 y(V)-8 b(arying)30 b(the)g(features)h(and)f(stop)g(size)g(ma)m(y)h (impro)m(v)m(e)g(the)f(results.)275 1867 y(Building)d(the)k(mo)s(dels)e (and)h(getting)h(go)s(o)s(d)f(\014gures)g(is)f(only)h(one)g(part)h(of)f (the)h(pro)s(cess.)40 b(Y)-8 b(ou)31 b(m)m(ust)150 1977 y(in)m(tegrate)j(this)e(mo)s(del)g(in)m(to)i(F)-8 b(estiv)j(al)33 b(if)f(its)h(going)g(to)h(b)s(e)e(of)i(an)m(y)f(use.)49 b(In)32 b(the)i(case)g(of)f(CAR)-8 b(T)33 b(trees)150 2086 y(generated)28 b(b)m(y)f(W)-8 b(agon,)30 b(F)-8 b(estiv)j(al)28 b(supp)s(orts)d(these)j(directly)-8 b(.)38 b(In)27 b(the)g(case)i(of)e(CAR)-8 b(T)27 b(trees)h(predicting)150 2196 y(zscores,)k(or)e(factors)h(to)g(mo)s(dify)e(duration)g(a)m(v)m (erages,)k(ees)e(can)f(b)s(e)g(used)g(as)g(is.)275 2330 y(Note)43 b(there)g(are)f(other)h(options)e(to)i(W)-8 b(agon)44 b(whic)m(h)d(ma)m(y)i(help)e(build)e(b)s(etter)j(CAR)-8 b(T)42 b(mo)s(dels.)150 2440 y(Consult)29 b(the)h(c)m(hapter)h(in)f (the)g(sp)s(eec)m(h)g(to)s(ols)h(man)m(ual)e(on)i(W)-8 b(agon)32 b(for)e(more)g(information.)275 2575 y(Other)41 b(parts)g(of)h(the)f(distributed)e(system)j(use)f(CAR)-8 b(T)41 b(trees,)k(and)c(linear)f(regression)h(mo)s(dels)150 2684 y(that)35 b(w)m(ere)h(training)d(using)g(the)i(pro)s(cesses)g (describ)s(ed)e(in)g(this)h(c)m(hapter.)55 b(Some)35 b(other)g(parts)g(of)g(the)150 2794 y(distributed)30 b(system)j(use)g(CAR)-8 b(T)33 b(trees)g(whic)m(h)f(w)m(ere)h(written)g (b)m(y)f(hand)g(and)h(ma)m(y)g(b)s(e)g(impro)m(v)m(ed)f(b)m(y)150 2903 y(prop)s(erly)c(applying)g(these)j(pro)s(cesses.)p eop %%Page: 129 131 129 130 bop 150 -116 a Fo(Chapter)30 b(27:)41 b(Programming)2411 b(129)150 299 y Fl(27)80 b(Programming)275 514 y Fo(This)33 b(c)m(hapter)j(co)m(v)m(ers)h(asp)s(ects)f(of)f(programming)f(within)f (the)j(F)-8 b(estiv)j(al)35 b(en)m(vironmen)m(t,)i(creating)150 623 y(new)f(mo)s(dules,)g(and)f(mo)s(difying)f(existing)h(ones.)58 b(It)36 b(describ)s(es)f(basic)g(Classes)h(a)m(v)-5 b(ailable)35 b(and)h(giv)m(es)150 733 y(some)31 b(particular)d(examples)i(of)h (things)e(y)m(ou)i(ma)m(y)g(wish)d(to)k(add.)150 979 y Fn(27.1)68 b(The)45 b(source)g(co)t(de)275 1167 y Fo(The)28 b(ultimate)f(authorit)m(y)i(on)f(what)h(happ)s(ens)e(in)g(the)i(system) f(lies)g(in)f(the)i(source)g(co)s(de)f(itself.)39 b(No)150 1277 y(matter)f(ho)m(w)g(hard)e(w)m(e)i(try)-8 b(,)40 b(and)c(ho)m(w)i(automatic)g(w)m(e)g(mak)m(e)g(it,)h(the)f(source)f(co) s(de)h(will)d(alw)m(a)m(ys)j(b)s(e)150 1387 y(ahead)d(of)g(the)h(do)s (cumen)m(tation.)54 b(Th)m(us)34 b(if)g(y)m(ou)h(are)h(going)f(to)g(b)s (e)g(using)e(F)-8 b(estiv)j(al)35 b(in)f(a)h(serious)f(w)m(a)m(y)-8 b(,)150 1496 y(familiarit)m(y)28 b(with)h(the)i(source)f(is)g(essen)m (tial.)275 1627 y(The)38 b(lo)m(w)m(est)j(lev)m(el)e(functions)f(are)i (catered)g(for)f(in)f(the)i(Edin)m(burgh)d(Sp)s(eec)m(h)i(T)-8 b(o)s(ols,)41 b(a)f(separate)150 1736 y(library)j(distributed)g(with)h (F)-8 b(estiv)j(al.)86 b(The)45 b(Edin)m(burgh)d(Sp)s(eec)m(h)j(T)-8 b(o)s(ol)46 b(Library)d(o\013ers)j(the)g(basic)150 1846 y(utterance)27 b(structure,)g(w)m(a)m(v)m(eform)g(\014le)e(access,)k (and)c(other)h(v)-5 b(arious)25 b(useful)g(lo)m(w-lev)m(el)h(functions) e(whic)m(h)150 1956 y(w)m(e)d(share)g(b)s(et)m(w)m(een)h(di\013eren)m (t)e(sp)s(eec)m(h)h(systems)g(in)f(our)h(w)m(ork.)37 b(See)22 b(section)f(\\Ov)m(erview")g(in)f Fj(Edin)m(burgh)150 2065 y(Sp)s(eec)m(h)30 b(T)-8 b(o)s(ols)30 b(Library)e(Man)m(ual)t Fo(.)275 2196 y(The)k(directory)h(structure)f(for)h(the)h(F)-8 b(estiv)j(al)33 b(distribution)c(re\015ects)34 b(the)f(conceptual)h (split)d(in)h(the)150 2305 y(co)s(de.)150 2457 y(`)p Fk(./bin/)p Fo(')142 b(The)31 b(user-lev)m(el)g(executable)i(binaries)c (and)i(scripts)g(that)h(are)h(part)e(of)h(the)g(festiv)-5 b(al)31 b(sys-)630 2567 y(tem.)39 b(These)23 b(are)h(simple)d(sym)m(b)s (olic)h(links)g(to)i(the)f(binaries)f(or)h(if)g(the)g(system)h(is)e (compiled)630 2676 y(with)h(shared)h(libraries)e(small)i(wrap-around)f (shell)g(scripts)g(that)j(set)f Fk(LD_LIBRARY_PATH)630 2786 y Fo(appropriately)150 2938 y(`)p Fk(./doc/)p Fo(')142 b(This)25 b(con)m(tains)i(the)g(texinfo)f(do)s(cumen)m(tation)h(for)f (the)h(whole)f(system.)39 b(The)27 b(`)p Fk(Makefile)p Fo(')630 3047 y(constructs)39 b(the)g(info)f(and/or)h(h)m(tml)f(v)m (ersion)g(as)i(desired.)64 b(Note)41 b(that)e(the)g Fk(festival)630 3157 y Fo(binary)28 b(itself)g(is)g(used)h(to)h(generate)h(the)e(lists) f(of)h(functions)f(and)h(v)-5 b(ariables)28 b(used)g(within)630 3266 y(the)j(system,)f(so)h(m)m(ust)f(b)s(e)g(compiled)f(and)h(in)f (place)h(to)i(generate)g(a)e(new)g(v)m(ersion)g(of)h(the)630 3376 y(do)s(cumen)m(tation.)150 3528 y(`)p Fk(./examples/)p Fo(')630 3637 y(This)25 b(con)m(tains)i(v)-5 b(arious)26 b(examples.)39 b(Some)27 b(are)g(explained)e(within)f(this)i(man)m (ual,)h(others)630 3747 y(are)k(there)f(just)g(as)h(examples.)150 3899 y(`)p Fk(./lib/)p Fo(')142 b(The)26 b(basic)g(Sc)m(heme)h(parts)f (of)h(the)g(system,)g(including)c(`)p Fk(init.scm)p Fo(')i(the)i (\014rst)f(\014le)f(loaded)630 4008 y(b)m(y)35 b Fk(festival)d Fo(at)k(start-up)f(time.)54 b(Dep)s(ending)33 b(on)i(y)m(our)g (installation,)f(this)f(directory)630 4118 y(ma)m(y)27 b(also)e(con)m(tain)i(sub)s(directories)c(con)m(taining)j(lexicons,)g (v)m(oices)g(and)g(databases.)40 b(This)630 4227 y(directory)30 b(and)g(its)f(sub-directories)g(are)i(used)e(b)m(y)i(F)-8 b(estiv)j(al)30 b(at)h(run-time.)150 4379 y(`)p Fk(./lib/etc/)p Fo(')630 4489 y(Executables)i(for)h(F)-8 b(estiv)j(al's)34 b(in)m(ternal)e(use.)50 b(A)33 b(sub)s(directory)f(con)m(taining)h(at)h (least)g(the)630 4598 y(audio)29 b(sp)s(o)s(oler)f(will)f(b)s(e)j (automatically)f(created)i(\(one)f(for)g(eac)m(h)h(di\013eren)m(t)e (arc)m(hitecture)630 4708 y(the)i(system)f(is)f(compiled)g(on\).)41 b(Scripts)29 b(are)i(added)f(to)h(this)e(top)i(lev)m(el)f(directory)f (itself.)150 4860 y(`)p Fk(./lib/voices/)p Fo(')630 4969 y(By)24 b(default)e(this)h(con)m(tains)g(the)h(v)m(oices)g(used)f(b)m (y)g(F)-8 b(estiv)j(al)24 b(including)c(their)j(basic)g(Sc)m(heme)630 5079 y(set)31 b(up)e(functions)g(as)i(w)m(ell)e(as)i(the)f(diphone)f (databases.)150 5230 y(`)p Fk(./lib/dicts/)p Fo(')630 5340 y(This)g(con)m(tains)h(v)-5 b(arious)30 b(lexicon)f(\014les)g (distributed)f(as)i(part)h(of)f(the)h(system.)p eop %%Page: 130 132 130 131 bop 150 -116 a Fo(130)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(`)p Fk(./config/)p Fo(')630 408 y(This)f(con)m(tains)i(the)g(basic)f(`)p Fk(Makefile)p Fo(')f(con\014guration)i(\014les)f(for)g(compiling)f(the) i(system)630 518 y(\(run-time)40 b(con\014guration)g(is)g(handled)e(b)m (y)j(Sc)m(heme)g(in)f(the)h(`)p Fk(lib/)p Fo(')f(directory\).)71 b(The)630 628 y(\014le)30 b(`)p Fk(config/config)p Fo(')e(created)k(as) f(a)g(cop)m(y)h(of)f(the)g(standard)f(`)p Fk(config/config-dist)p Fo(')630 737 y(is)38 b(the)i(installation)d(sp)s(eci\014c)h (con\014guration.)68 b(In)38 b(most)i(cases)g(a)g(simp)s(el)d(cop)m(y)j (of)g(the)630 847 y(distribution)27 b(\014le)i(will)f(b)s(e)i (su\016cien)m(t.)150 1000 y(`)p Fk(./src/)p Fo(')142 b(The)30 b(main)f(C)p Fk(++)p Fo(/C)h(source)g(for)g(the)h(system.)150 1154 y(`)p Fk(./src/lib/)p Fo(')630 1263 y(Where)g(the)f(`)p Fk(libFestival.a)p Fo(')d(is)j(built.)150 1417 y(`)p Fk(./src/include/)p Fo(')630 1526 y(Where)37 b(include)d(\014les)h (shared)h(b)s(et)m(w)m(een)g(v)-5 b(arious)36 b(parts)g(of)g(the)h (system)f(liv)m(e.)58 b(The)36 b(\014le)630 1636 y(`)p Fk(festival.h)p Fo(')28 b(pro)m(vides)h(access)j(to)f(most)g(of)f(the)h (parts)f(of)h(the)f(system.)150 1789 y(`)p Fk(./src/main/)p Fo(')630 1899 y(Con)m(tains)37 b(the)g(top)h(lev)m(el)f(C)p Fk(++)f Fo(\014les)g(for)h(the)h(actual)g(executables.)62 b(This)35 b(is)h(directory)630 2008 y(where)30 b(the)g(executable)h (binary)e(`)p Fk(festival)p Fo(')g(is)g(created.)150 2162 y(`)p Fk(./src/arch/)p Fo(')630 2271 y(The)h(main)f(core)h(of)h (the)f(F)-8 b(estiv)j(al)30 b(system.)41 b(A)m(t)31 b(presen)m(t)f(ev)m (erything)g(is)f(held)g(in)g(a)h(single)630 2381 y(sub-directory)c(`)p Fk(./src/arc/festival/)p Fo('.)35 b(This)26 b(con)m(tains)i(the)g (basic)f(core)i(of)e(the)h(syn-)630 2491 y(thesis)34 b(system)h(itself.)53 b(This)33 b(directory)i(con)m(tains)g(lisp)d (fron)m(t)j(ends)f(to)i(access)g(the)f(core)630 2600 y(utterance)40 b(arc)m(hitecture,)i(and)c(phonesets,)j(basic)e(to)s (ols)f(lik)m(e,)j(clien)m(t/serv)m(er)e(supp)s(ort,)630 2710 y(ngram)30 b(supp)s(ort,)f(etc,)j(and)d(an)i(audio)e(sp)s(o)s (oler.)150 2863 y(`)p Fk(./src/modules/)p Fo(')630 2973 y(In)43 b(con)m(trast)i(to)f(the)g(`)p Fk(arch/)p Fo(')f(directory)g (this)f(con)m(tains)i(the)g(non-core)g(parts)f(of)h(the)630 3082 y(system.)d(A)31 b(set)g(of)g(basic)f(example)g(mo)s(dules)f(are)h (included)e(with)h(the)i(standard)f(distri-)630 3192 y(bution.)38 b(These)25 b(are)i(the)f(parts)f(that)i(do)e(the)h(syn)m (thesis,)g(the)h(other)f(parts)f(are)h(just)g(there)630 3302 y(to)31 b(mak)m(e)g(mo)s(dule)e(writing)g(easier.)150 3455 y(`)p Fk(./src/modules/base/)p Fo(')630 3565 y(This)h(con)m(tains) i(some)g(basic)f(simple)f(mo)s(dules)f(that)k(w)m(eren't)f(quite)f(big) g(enough)g(to)i(de-)630 3674 y(serv)m(e)25 b(their)e(o)m(wn)i (directory)-8 b(.)38 b(Most)25 b(imp)s(ortan)m(tly)e(it)h(includes)e (the)i Fk(Initialize)e Fo(mo)s(dule)630 3784 y(called)39 b(b)m(y)g(man)m(y)h(syn)m(thesis)e(metho)s(ds)h(whic)m(h)f(sets)i(up)f (an)g(utterance)h(structure)g(and)630 3893 y(loads)d(in)g(initial)e(v) -5 b(alues.)63 b(This)36 b(directory)i(also)f(con)m(tains)i(phrasing,)f (part)g(of)g(sp)s(eec)m(h,)630 4003 y(and)30 b(w)m(ord)g(\(syllable)e (and)i(phone)g(construction)g(from)g(w)m(ords\))g(mo)s(dules.)150 4156 y(`)p Fk(./src/modules/Lexicon/)p Fo(')630 4266 y(This)38 b(is)h(not)i(really)e(a)h(mo)s(dule)f(in)f(the)j(true)f (sense)g(\(the)g Fk(Word)f Fo(mo)s(dule)g(is)g(the)h(main)630 4376 y(user)27 b(of)g(this\).)39 b(This)25 b(con)m(tains)j(functions)d (to)j(construct,)h(compile,)e(and)f(access)j(lexicons)630 4485 y(\(en)m(tries)43 b(of)f(w)m(ords,)k(part)c(of)h(sp)s(eec)m(h)f (and)g(pron)m(unciations\).)76 b(This)40 b(also)j(con)m(tains)g(a)630 4595 y(letter-to-sound)31 b(rule)e(system.)150 4748 y(`)p Fk(./src/modules/Intonation/)o Fo(')630 4858 y(This)22 b(con)m(tains)h(v)-5 b(arious)22 b(in)m(tonation)h(systems,)i(from)e (the)g(v)m(ery)h(simple)d(to)k(quite)d(complex)630 4967 y(parameter)31 b(driv)m(en)e(in)m(tonation)h(systems.)150 5121 y(`)p Fk(./src/modules/Duration/)p Fo(')630 5230 y(This)f(con)m(tains)i(v)-5 b(arious)30 b(duration)f(prediction)g (systems,)i(from)f(the)h(v)m(ery)h(simple)c(\(\014xed)630 5340 y(duration\))h(to)i(quite)f(complex)g(parameter)h(driv)m(en)e (duration)g(systems.)p eop %%Page: 131 133 131 132 bop 150 -116 a Fo(Chapter)30 b(27:)41 b(Programming)2411 b(131)150 299 y(`)p Fk(./src/modules/UniSyn/)p Fo(')630 408 y(A)52 b(basic)f(diphone)e(syn)m(thesizer)i(system,)58 b(supp)s(orting)49 b(a)j(simple)d(database)k(format)630 518 y(\(whic)m(h)c(can)g(b)s(e)g(group)s(ed)g(in)m(to)g(a)h(more)g (e\016cien)m(t)g(binary)e(represen)m(tation\).)98 b(It)50 b(is)630 628 y(m)m(ulti-lingual,)42 b(and)f(allo)m(ws)g(m)m(ultiple)f (databases)i(to)h(b)s(e)e(loaded)h(at)h(once.)76 b(It)42 b(o\013ers)630 737 y(a)51 b(c)m(hoice)h(of)f(concatenation)h(metho)s (ds)e(for)g(diphones:)80 b(residual)48 b(excited)j(LPC)f(or)630 847 y(PSOLA)29 b(\(TM\))i(\(whic)m(h)f(is)f(not)i(distributed\))150 1024 y(`)p Fk(./src/modules/Text/)p Fo(')630 1133 y(V)-8 b(arious)38 b(text)h(analysis)d(functions,)j(particularly)d(the)i(tok)m (enizer)h(and)e(utterance)i(seg-)630 1243 y(men)m(ter)31 b(\(from)f(arbitrary)f(\014les\).)40 b(This)28 b(directory)i(also)g (con)m(tains)h(the)f(supp)s(ort)f(for)h(text)630 1353 y(mo)s(des)g(and)g(SGML.)150 1530 y(`)p Fk(./src/modules/donovan/)p Fo(')630 1639 y(An)g(LPC)g(based)g(diphone)e(syn)m(thesizer.)40 b(V)-8 b(ery)31 b(small)e(and)h(neat.)150 1816 y(`)p Fk(./src/modules/rxp/)p Fo(')630 1926 y(The)37 b(F)-8 b(estiv)j(al/Sc)m(heme)38 b(fron)m(t)g(end)e(to)i(An)f(XML)h(parser)e (written)h(b)m(y)g(Ric)m(hard)f(T)-8 b(obin)630 2035 y(from)31 b(Univ)m(ersit)m(y)f(of)i(Edin)m(burgh's)c(Language)k(T)-8 b(ec)m(hnology)32 b(Group..)43 b(rxp)31 b(is)f(no)m(w)h(part)630 2145 y(of)g(the)f(sp)s(eec)m(h)g(to)s(ols)h(rather)f(than)g(just)g(F)-8 b(estiv)j(al.)150 2322 y(`)p Fk(./src/modules/parser)p Fo(')630 2431 y(A)44 b(simple)f(in)m(terface)h(the)h(the)f(Sto)s(c)m (hastic)h(Con)m(text)h(F)-8 b(ree)45 b(Grammar)f(parser)g(in)f(the)630 2541 y(sp)s(eec)m(h)30 b(to)s(ols)h(library)-8 b(.)150 2718 y(`)p Fk(./src/modules/diphone)p Fo(')630 2827 y(An)30 b(optional)g(mo)s(dule)e(con)m(tain)j(the)g(previouslt)m(y)d(used)i (diphone)e(syn)m(thsizer.)150 3004 y(`)p Fk(./src/modules/clunits)p Fo(')630 3114 y(A)34 b(partial)f(implemen)m(tation)g(of)h(a)h(cluster)e (unit)g(selection)h(algorithm)f(as)h(describ)s(ed)e(in)630 3224 y Fj(blac)m(k97c)p Fo(.)150 3401 y(`)p Fk(./src/modules/Database) 25 b(rjc_synthesis)p Fo(')630 3510 y(This)f(consist)h(of)h(a)g(new)g (set)g(of)g(mo)s(dules)e(for)h(doing)g(w)m(a)m(v)m(eform)i(syn)m (thesis.)39 b(They)25 b(are)h(in-)630 3620 y(teneded)g(to)g(unit)f (size)g(indep)s(enden)m(t)f(\(e.g.)41 b(diphone,)25 b(phone,)h (non-uniform)d(unit\).)38 b(Also)630 3729 y(selection,)43 b(proso)s(dic)d(mo)s(di\014cation,)i(joining)c(and)j(signal)e(pro)s (cessing)h(are)h(separately)630 3839 y(de\014ned.)63 b(Unfortunately)38 b(this)f(co)s(de)h(has)g(not)h(really)e(b)s(een)h (exercised)g(enough)g(to)h(b)s(e)630 3949 y(considered)24 b(stable)h(to)i(b)s(e)d(used)h(in)f(the)i(default)e(syn)m(thesis)h (metho)s(d,)h(but)f(those)h(w)m(orking)630 4058 y(on)34 b(new)g(syn)m(thesis)f(tec)m(hniques)h(ma)m(y)h(b)s(e)e(in)m(terested)i (in)e(in)m(tegration)h(using)f(these)h(new)630 4168 y(mo)s(dules.)39 b(They)30 b(ma)m(y)h(b)s(e)e(up)s(dated)h(b)s(efore)g(the)g(next)h (full)d(release)i(of)h(F)-8 b(estiv)j(al.)150 4345 y(`)p Fk(./src/modules/*)p Fo(')630 4454 y(Other)36 b(optional)g(directories) g(ma)m(y)i(b)s(e)e(con)m(tained)h(here)g(con)m(taining)f(v)-5 b(arious)36 b(researc)m(h)630 4564 y(mo)s(dules)d(not)h(y)m(et)i(part)e (of)h(the)g(standard)e(distribution.)49 b(See)35 b(b)s(elo)m(w)f(for)g (descriptions)630 4673 y(of)d(ho)m(w)f(to)h(add)f(mo)s(dules)e(to)j (the)g(basic)f(system.)275 4859 y(One)c(in)m(tended)f(use)h(of)h(F)-8 b(estiv)j(al)26 b(is)g(o\013er)h(a)g(soft)m(w)m(are)h(system)e(where)g (new)g(mo)s(dules)f(ma)m(y)i(b)s(e)f(easily)150 4969 y(tested)34 b(in)e(a)h(stable)g(en)m(vironmen)m(t.)49 b(W)-8 b(e)34 b(ha)m(v)m(e)g(tried)f(to)h(mak)m(e)g(the)f(addition)e (of)j(new)e(mo)s(dules)g(easy)-8 b(,)150 5078 y(without)29 b(requiring)f(complex)i(mo)s(di\014cations)f(to)i(the)g(rest)f(of)h (the)f(system.)275 5230 y(All)19 b(of)i(the)g(basic)g(mo)s(dules)e (should)g(really)g(b)s(e)i(considered)e(merely)i(as)g(example)f(mo)s (dules.)36 b(Without)150 5340 y(m)m(uc)m(h)30 b(e\013ort)i(all)d(of)h (them)h(could)e(b)s(e)h(impro)m(v)m(ed.)p eop %%Page: 132 134 132 133 bop 150 -116 a Fo(132)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(27.2)68 b(W)-11 b(riting)46 b(a)f(new)g(mo)t(dule)275 504 y Fo(This)32 b(section)i(giv)m(es)h(a)g(simple)d(example)i(of)g(writing)e(a)j(new)f (mo)s(dule.)51 b(sho)m(wing)33 b(the)h(basic)g(steps)150 614 y(that)23 b(m)m(ust)g(b)s(e)f(done)g(to)i(create)g(and)e(add)g(a)h (new)g(mo)s(dule)e(that)i(is)f(a)m(v)-5 b(ailable)22 b(for)g(the)h(rest)g(of)g(the)g(system)150 724 y(to)32 b(use.)42 b(Note)32 b(man)m(y)f(things)f(can)h(b)s(e)f(done)h(solely)f (in)f(Sc)m(heme)j(no)m(w)f(and)f(really)g(only)g(lo)m(w-lev)m(el)h(v)m (ery)150 833 y(in)m(tensiv)m(e)f(things)f(\(lik)m(e)h(w)m(a)m(v)m (eform)i(syn)m(thesizers\))e(need)g(b)s(e)g(co)s(ded)g(in)f(C)p Fk(++)p Fo(.)150 1083 y Ff(27.2.1)63 b(Example)39 b(1:)62 b(adding)42 b(new)f(mo)s(dules)275 1289 y Fo(The)33 b(example)h(here)g (is)f(a)h(duration)f(mo)s(dule)f(whic)m(h)h(sets)h(durations)f(of)h (phones)f(for)h(a)g(giv)m(en)g(list)150 1398 y(of)41 b(a)m(v)m(erages.)76 b(T)-8 b(o)42 b(mak)m(e)g(this)e(example)h(more)g (in)m(teresting,)j(all)c(durations)f(in)h(accen)m(ted)j(syllables)150 1508 y(are)h(increased)e(b)m(y)i(1.5.)81 b(Note)44 b(that)g(this)e(is)h (just)g(an)g(example)g(for)g(the)h(sak)m(e)g(of)g(one,)j(this)42 b(\(and)150 1617 y(m)m(uc)m(h)e(b)s(etter)h(tec)m(hniques\))f(could)g (easily)f(done)i(within)d(the)i(system)h(as)f(it)g(is)g(at)h(presen)m (t)g(using)e(a)150 1727 y(hand-crafted)30 b(CAR)-8 b(T)30 b(tree.)275 1874 y(Our)67 b(knew)i(mo)s(dule,)77 b(called)68 b Fk(Duration_Simple)d Fo(can)70 b(most)f(easily)f(b)s(e)h(added)f(to)i (the)150 1984 y(`)p Fk(./src/Duration/)p Fo(')38 b(directory)j(in)f(a)h (\014le)g(`)p Fk(simdur.cc)p Fo('.)71 b(Y)-8 b(ou)42 b(can)g(w)m(orry)f(ab)s(out)g(the)h(cop)m(yrigh)m(t)150 2093 y(notice,)31 b(but)f(after)g(that)h(y)m(ou'll)f(probably)f(need)h (the)g(follo)m(wing)f(includes)390 2235 y Fk(#include)46 b()275 2486 y Fo(The)39 b(mo)s(dule)f(itself)g(m)m(ust)i(b) s(e)e(declared)i(in)e(a)i(\014xed)f(form.)68 b(That)39 b(is)g(receiving)g(a)h(single)e(LISP)150 2596 y(form)d(\(an)g (utterance\))i(as)e(an)g(argumen)m(t)h(and)e(returning)g(that)i(LISP)e (form)g(at)i(the)g(end.)54 b(Th)m(us)34 b(our)150 2705 y(de\014nition)28 b(will)g(start)390 2847 y Fk(LISP)47 b(FT_Duration_Simple\(LISP)41 b(utt\))390 2951 y({)275 3098 y Fo(Next)31 b(w)m(e)h(need)e(to)i(declare)f(an)f(utterance)i (structure)f(and)f(extract)i(it)f(from)f(the)h(LISP)f(form.)42 b(W)-8 b(e)150 3208 y(also)30 b(mak)m(e)i(a)e(few)h(other)f(v)-5 b(ariable)29 b(declarations)581 3349 y Fk(EST_Utterance)44 b(*u)j(=)h(get_c_utt\(utt\);)581 3453 y(EST_Item)d(*s;)581 3557 y(float)h(end=0.0,)g(dur;)581 3660 y(LISP)h(ph_avgs,ldur;)275 3808 y Fo(W)-8 b(e)38 b(cannot)g(list)e(the)i(a)m(v)m(erage)i (durations)c(for)h(eac)m(h)i(phone)e(in)f(the)h(source)h(co)s(de)g(as)f (w)m(e)h(cannot)150 3917 y(tell)j(whic)m(h)f(phoneset)i(w)m(e)g(are)g (using)e(\(or)i(what)g(mo)s(di\014cations)d(w)m(e)k(w)m(an)m(t)f(to)g (mak)m(e)h(to)g(durations)150 4027 y(b)s(et)m(w)m(een)h(sp)s(eak)m (ers\).)78 b(Therefore)43 b(the)g(phone)f(and)g(a)m(v)m(erage)k (duration)41 b(information)h(is)f(held)h(in)g(a)150 4137 y(Sc)m(heme)27 b(v)-5 b(ariable)26 b(for)h(easy)h(setting)f(at)h(run)d (time.)39 b(T)-8 b(o)28 b(use)f(the)g(information)e(in)h(our)h(C)p Fk(++)f Fo(domain)f(w)m(e)150 4246 y(m)m(ust)30 b(get)i(that)f(v)-5 b(alue)30 b(from)f(the)i(Sc)m(heme)g(domain.)39 b(This)29 b(is)g(done)i(with)e(the)h(follo)m(wing)f(statemen)m(t.)581 4388 y Fk(ph_avgs)46 b(=)h(siod_get_lval\("phoneme_av)o(erag)o(es")o (,"no)41 b(phoneme)46 b(durations"\);)275 4535 y Fo(The)29 b(\014rst)f(argumen)m(t)j(to)f Fk(siod_get_lval)c Fo(is)i(the)i(Sc)m (heme)g(name)g(of)g(a)g(v)-5 b(ariable)28 b(whic)m(h)g(has)i(b)s(een) 150 4645 y(set)39 b(to)g(an)g(asso)s(c)g(list)e(of)i(phone)e(and)h(a)m (v)m(erage)k(duration)37 b(b)s(efore)h(this)f(mo)s(dule)g(is)h(called.) 64 b(See)39 b(the)150 4754 y(v)-5 b(ariable)32 b Fk(phone_durations)d Fo(in)j(`)p Fk(lib/mrpa_durs.scm)p Fo(')d(for)k(the)g(format.)50 b(The)32 b(second)h(argumen)m(t)150 4864 y(to)28 b Fk(siod_get_lval)p Fo(.)36 b(is)27 b(an)g(error)g(message)h(to)g(b)s(e)f(prin)m(ted)f(if)g (the)i(v)-5 b(ariable)26 b Fk(phone_averages)d Fo(is)k(not)150 4973 y(set.)63 b(If)37 b(the)h(second)f(argumen)m(t)h(to)g Fk(siod_get_lval)c Fo(is)j Fk(NULL)f Fo(then)i(no)f(error)g(is)g(giv)m (en)g(and)g(if)g(the)150 5083 y(v)-5 b(ariable)29 b(is)h(unset)g(this)f (function)g(simply)f(returns)h(the)h(Sc)m(heme)h(v)-5 b(alue)30 b Fk(nil)p Fo(.)275 5230 y(No)m(w)j(that)h(w)m(e)f(ha)m(v)m (e)h(the)f(duration)e(data)j(w)m(e)f(can)g(go)h(through)e(eac)m(h)i (segmen)m(t)g(in)e(the)h(utterance)150 5340 y(and)d(add)g(the)g (duration.)39 b(The)30 b(lo)s(op)g(lo)s(oks)g(lik)m(e)p eop %%Page: 133 135 133 134 bop 150 -116 a Fo(Chapter)30 b(27:)41 b(Programming)2411 b(133)581 299 y Fk(for)47 b(\(s=u->relation\("Segment")o(\)->)o(head)o (\(\);)41 b(s)48 b(!=)f(0;)g(s)h(=)f(next\(s\)\))581 403 y({)275 543 y Fo(W)-8 b(e)40 b(can)f(lo)s(okup)f(the)h(a)m(v)m (erage)j(duration)37 b(of)i(the)g(curren)m(t)g(segmen)m(t)h(name)g (using)d(the)i(function)150 653 y Fk(siod_assoc_str)p Fo(.)45 b(As)33 b(argumen)m(ts,)h(it)f(tak)m(es)i(the)e(segmen)m(t)h (name)f Fk(s->name\(\))e Fo(and)h(the)i(asso)s(c)f(list)150 762 y(of)e(phones)e(and)h(duration.)772 897 y Fk(ldur)46 b(=)i(siod_assoc_str\(s->name\(\))o(,ph_)o(avg)o(s\);)275 1038 y Fo(Note)32 b(the)f(return)e(v)-5 b(alue)31 b(is)f(actually)g(a)h (LISP)f(pair)g(\(phone)g(name)h(and)f(duration\),)g(or)h Fk(nil)f Fo(if)g(the)150 1147 y(phone)i(isn't)g(in)g(the)h(list.)47 b(Here)33 b(w)m(e)h(c)m(hec)m(k)g(if)e(the)h(segmen)m(t)h(is)e(in)g (the)h(list.)47 b(If)33 b(it)f(is)g(not)h(w)m(e)g(prin)m(t)f(an)150 1257 y(error)24 b(and)g(set)h(the)g(duration)e(to)j(100)g(ms,)f(if)f (it)g(is)f(in)h(the)g(list)g(the)h(\015oating)f(p)s(oin)m(t)g(n)m(um)m (b)s(er)f(is)h(extracted)150 1366 y(from)30 b(the)g(LISP)g(pair.)772 1501 y Fk(if)47 b(\(ldur)f(==)i(NIL\))772 1605 y({)963 1709 y(cerr)e(<<)i("Phoneme:)d(")i(<<)g(s->name\(\))f(<<)h(")g(no)h (duration)d(")1154 1812 y(<<)i(endl;)963 1916 y(dur)g(=)g(0.100;)772 2020 y(})772 2124 y(else)963 2228 y(dur)g(=)g (get_c_float\(car\(cdr\(ldur\))o(\)\);)275 2368 y Fo(If)35 b(this)f(phone)h(is)g(in)f(an)i(accen)m(ted)i(syllable)33 b(w)m(e)j(wish)e(to)j(increase)e(its)g(duration)f(b)m(y)i(a)g(factor)h (of)150 2478 y(1.5.)k(T)-8 b(o)29 b(\014nd)e(out)i(if)f(it)g(is)f (accen)m(ted)k(w)m(e)e(use)f(the)h(feature)g(system)g(to)g(\014nd)e (the)i(syllable)d(this)i(phone)g(is)150 2587 y(part)i(of)h(and)f (\014nd)e(out)j(if)e(that)i(syllable)e(is)g(accen)m(ted.)772 2722 y Fk(if)47 b(\(ffeature\(s,"R:SylStruct)o(ure.)o(pare)o(nt.)o (acce)o(nted)o("\))41 b(==)48 b(1\))963 2826 y(dur)f(*=)g(1.5;)275 2966 y Fo(No)m(w)24 b(that)f(w)m(e)h(ha)m(v)m(e)h(the)e(desired)f (duration)g(w)m(e)i(incremen)m(t)e(the)i Fk(end)e Fo(duration)g(with)g (our)h(predicted)150 3076 y(duration)29 b(for)h(this)f(segmen)m(t)j (and)e(set)h(the)f(end)g(of)g(the)h(curren)m(t)f(segmen)m(t.)772 3211 y Fk(end)47 b(+=)g(dur;)772 3314 y(s->fset\("end",end\);)581 3418 y(})275 3559 y Fo(Finally)28 b(w)m(e)j(return)e(the)i(utterance)g (from)f(the)g(function.)581 3694 y Fk(return)46 b(utt;)390 3797 y(})275 3938 y Fo(Once)31 b(a)h(mo)s(dule)f(is)f(de\014ned)h(it)g (m)m(ust)h(b)s(e)f(declared)g(to)i(the)f(system)g(so)g(it)f(ma)m(y)h(b) s(e)g(called.)44 b(T)-8 b(o)32 b(do)150 4047 y(this)g(one)h(m)m(ust)f (call)g(the)h(function)e Fk(festival_def_utt_module)c Fo(whic)m(h)k(tak)m(es)j(a)f(LISP)f(name,)i(the)150 4157 y(C)p Fk(++)26 b Fo(function)f(name)i(and)f(a)h(do)s(cumen)m(tation)f (string)g(describing)e(what)j(the)g(mo)s(dule)e(do)s(es.)39 b(This)25 b(will)150 4267 y(automatically)31 b(b)s(e)f(a)m(v)-5 b(ailable)30 b(at)i(run-time)d(and)i(added)f(to)i(the)f(man)m(ual.)41 b(The)31 b(call)f(to)h(this)f(function)150 4376 y(should)i(b)s(e)h (added)g(to)i(the)f(initialization)c(function)j(in)f(the)i(directory)g (y)m(ou)g(are)g(adding)f(the)h(mo)s(dule)150 4486 y(to)s(o.)45 b(The)32 b(function)e(is)h(called)g Fk(festival_DIRNAME_init\(\))o Fo(.)39 b(If)31 b(one)h(do)s(esn't)g(exist)f(y)m(ou'll)g(need)g(to)150 4595 y(create)h(it.)275 4736 y(In)26 b(`)p Fk(./src/Duration/)p Fo(')e(the)k(function)e Fk(festival_Duration_init\(\))21 b Fo(is)27 b(at)h(the)g(end)f(of)h(the)g(\014le)150 4846 y(`)p Fk(dur_aux.cc)p Fo('.)45 b(Th)m(us)31 b(w)m(e)i(can)g(add)e(our)h (new)g(mo)s(dules)f(declaration)h(at)h(the)g(end)e(of)i(that)g (function.)150 4955 y(But)28 b(\014rst)g(w)m(e)g(m)m(ust)g(declare)g (the)h(C)p Fk(++)e Fo(function)g(in)g(that)h(\014le.)40 b(Th)m(us)27 b(ab)s(o)m(v)m(e)i(that)g(function)e(w)m(e)h(w)m(ould)150 5065 y(add)390 5199 y Fk(LISP)47 b(FT_Duration_Simple\(LISP)41 b(args\);)275 5340 y Fo(While)29 b(at)i(the)f(end)g(of)h(the)f (function)f Fk(festival_Duration_init\(\))24 b Fo(w)m(e)31 b(w)m(ould)e(add)p eop %%Page: 134 136 134 135 bop 150 -116 a Fo(134)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)533 299 y Fk (festival_def_utt_module\(")o(Dura)o(tio)o(n_Si)o(mple)o(",F)o(T_Du)o (rati)o(on_)o(Simp)o(le,)533 403 y("\(Duration_Simple)43 b(UTT\)\\n\\)485 506 y(Label)k(all)g(segments)e(with)i(average)f (duration)f(...)i("\);)275 639 y Fo(In)20 b(order)h(for)g(our)g(new)g (\014le)f(to)i(b)s(e)f(compiled)e(w)m(e)j(m)m(ust)f(add)g(it)g(to)h (the)f(`)p Fk(Makefile)p Fo(')f(in)g(that)i(directory)-8 b(,)150 748 y(to)26 b(the)g Fk(SRCS)f Fo(v)-5 b(ariable.)38 b(Then)25 b(when)f(w)m(e)i(t)m(yp)s(e)g Fk(make)f Fo(in)f(`)p Fk(./src/)p Fo(')h(our)g(new)g(mo)s(dule)f(will)f(b)s(e)i(prop)s(erly) 150 858 y(link)m(ed)k(in)g(and)h(a)m(v)-5 b(ailable)29 b(for)h(use.)275 990 y(Of)d(course)h(w)m(e)h(are)f(not)h(quite)e (\014nished.)38 b(W)-8 b(e)29 b(still)d(ha)m(v)m(e)j(to)g(sa)m(y)g (when)e(our)g(new)h(duration)f(mo)s(dule)150 1100 y(should)h(b)s(e)i (called.)40 b(When)30 b(w)m(e)h(set)533 1226 y Fk(\(Parameter.set)44 b('Duration_Method)f(Duration_Simple\))275 1358 y Fo(for)29 b(a)h(v)m(oice)g(it)f(will)e(use)i(our)g(new)g(mo)s(dule,)g(calls)f(to) i(the)g(function)e Fk(utt.synth)f Fo(will)g(use)i(our)g(new)150 1468 y(duration)g(mo)s(dule.)275 1600 y(Note)22 b(in)d(earlier)h(v)m (ersions)g(of)h(F)-8 b(estiv)j(al)21 b(it)f(w)m(as)i(necessary)f(to)g (mo)s(dify)e(the)j(duration)d(calling)g(function)150 1710 y(in)29 b(`)p Fk(lib/duration.scm)p Fo(')d(but)k(that)h(is)f(no)g (longer)g(necessary)-8 b(.)150 1927 y Ff(27.2.2)63 b(Example)39 b(2:)62 b(accessing)41 b(the)g(utterance)275 2117 y Fo(In)36 b(this)f(example)i(w)m(e)g(will)d(mak)m(e)k(more)f(direct)f(use)g(of)h (the)g(utterance)h(structure,)g(sho)m(wing)e(the)150 2227 y(gory)c(details)f(of)h(follo)m(wing)f(relations)g(in)g(an)g (utterance.)47 b(This)30 b(time)i(w)m(e)g(will)d(create)34 b(a)e(mo)s(dule)e(that)150 2336 y(will)f(name)j(all)e(syllables)g(with) g(a)i(concatenation)h(of)f(the)f(names)h(of)g(the)g(segmen)m(ts)g(they) g(are)g(related)150 2446 y(to.)275 2578 y(As)e(b)s(efore)g(w)m(e)h (need)f(the)g(same)h(standard)f(includes)390 2705 y Fk(#include)46 b("festival.h")275 2941 y Fo(No)m(w)31 b(the)f(de\014nition)e(the)j (function)390 3067 y Fk(LISP)47 b(FT_Name_Syls\(LISP)c(utt\))390 3171 y({)275 3303 y Fo(As)e(with)f(the)h(previous)f(example)h(w)m(e)h (are)g(called)e(with)g(an)h(utterance)h(LISP)f(ob)5 b(ject)42 b(and)f(will)150 3413 y(return)29 b(the)i(same.)41 b(The)30 b(\014rst)f(task)i(is)f(to)h(extract)h(the)e(utterance)i(ob)5 b(ject)31 b(from)f(the)g(LISP)g(ob)5 b(ject.)581 3539 y Fk(EST_Utterance)44 b(*u)j(=)h(get_c_utt\(utt\);)581 3643 y(EST_Item)d(*syl,*seg;)275 3775 y Fo(No)m(w)30 b(for)f(eac)m(h)h(syllable)d(in)h(the)i(utterance)g(w)m(e)g(w)m(an)m(t) g(to)g(\014nd)e(whic)m(h)g(segmen)m(ts)i(are)g(related)f(to)h(it.)581 3901 y Fk(for)47 b(\(syl=u->relation\("Syllab)o(le")o(\)->h)o(ead\()o (\);)41 b(syl)47 b(!=)h(0;)f(syl)g(=)g(next\(syl\)\))581 4005 y({)275 4137 y Fo(Here)30 b(w)m(e)h(declare)g(a)f(v)-5 b(ariable)30 b(to)h(cumm)m(ulate)f(the)g(names)h(of)f(the)h(segmen)m (ts.)772 4264 y Fk(EST_String)45 b(sylname)h(=)h("";)275 4396 y Fo(No)m(w)32 b(w)m(e)g(iterate)g(through)f(the)h Fk(SylStructure)d Fo(daugh)m(ters)i(of)h(the)g(syllable.)42 b(These)32 b(will)d(b)s(e)i(the)150 4506 y(segmen)m(ts)g(in)e(that)i (syllable.)772 4632 y Fk(for)47 b(\(seg=daughter1\(syl,"Syl)o(Stru)o (ctur)o(e"\))o(;)42 b(seg;)47 b(seg=next\(seg\)\))963 4736 y(sylname)f(+=)h(seg->name\(\);)275 4868 y Fo(Finally)42 b(w)m(e)j(set)h(the)f(syllables)d(name)j(to)h(the)f(concatenativ)m(e)i (name,)h(and)c(lo)s(op)g(to)i(the)f(next)150 4978 y(syllable.)772 5104 y Fk(syl->set_name\(sylname\);)581 5208 y(})275 5340 y Fo(Finally)28 b(w)m(e)j(return)e(the)i(LISP)e(form)h(of)g(the)h (utterance.)p eop %%Page: 135 137 135 136 bop 150 -116 a Fo(Chapter)30 b(27:)41 b(Programming)2411 b(135)581 299 y Fk(return)46 b(utt;)390 403 y(})150 614 y Ff(27.2.3)63 b(Example)39 b(3:)62 b(adding)42 b(new)f(directories)275 803 y Fo(In)31 b(this)f(example)i(w)m(e)g(will)d(add)i(a)i(whole)e(new) g(subsystem.)44 b(This)30 b(will)f(often)j(b)s(e)g(a)g(common)g(w)m(a)m (y)150 912 y(for)g(p)s(eople)f(to)i(use)f(F)-8 b(estiv)j(al.)46 b(F)-8 b(or)33 b(example)f(let)g(us)g(assume)g(w)m(e)g(wish)f(to)i(add) e(a)i(forman)m(t)f(w)m(a)m(v)m(eform)150 1022 y(syn)m(thesizer)j(\(e.g) h(lik)m(e)f(that)g(in)f(the)i(free)f(`)p Fk(rsynth)p Fo(')f(program\).)55 b(In)34 b(this)g(case)j(w)m(e)e(will)e(add)h(a)i (whole)150 1132 y(new)30 b(sub-directory)f(to)i(the)g(mo)s(dules)d (directory)-8 b(.)41 b(Let)31 b(us)e(call)h(it)g(`)p Fk(rsynth/)p Fo('.)275 1262 y(In)e(the)i(directory)e(w)m(e)i(need)f(a)h (`)p Fk(Makefile)p Fo(')d(of)j(the)f(standard)g(form)f(so)i(w)m(e)g (should)d(cop)m(y)j(one)f(from)150 1372 y(one)38 b(of)g(the)g(other)g (directories,)h(e.g.)64 b(`)p Fk(Intonation/)p Fo('.)c(Standard)37 b(metho)s(ds)g(are)h(used)f(to)h(iden)m(tify)150 1481 y(the)29 b(source)g(co)s(de)f(\014les)g(in)f(a)i(`)p Fk(Makefile)p Fo(')e(so)i(that)g(the)g(`)p Fk(.o)p Fo(')g(\014les)e (are)i(prop)s(erly)e(added)g(to)j(the)f(library)-8 b(.)150 1591 y(F)g(ollo)m(wing)30 b(the)g(other)h(examples)f(will)e(ensure)h(y) m(our)i(co)s(de)f(is)g(in)m(tegrated)h(prop)s(erly)-8 b(.)275 1721 y(W)g(e'll)29 b(just)f(skip)g(o)m(v)m(er)i(the)f(bit)g (where)f(y)m(ou)i(extract)g(the)g(information)d(from)i(the)g(utterance) h(struc-)150 1831 y(ture)25 b(and)g(syn)m(thesize)g(the)h(w)m(a)m(v)m (eform)h(\(see)f(`)p Fk(donovan/donovan.cc)p Fo(')21 b(or)k(`)p Fk(diphone/diphone.cc)p Fo(')c(for)150 1940 y(examples\).)275 2071 y(T)-8 b(o)44 b(get)i(F)-8 b(estiv)j(al)45 b(to)g(use)f(y)m(our)g(new)g(mo)s(dule)f(y)m(ou)i(m)m(ust)f(tell)g(it)g (to)h(compile)f(the)g(directory's)150 2180 y(con)m(ten)m(ts.)e(This)29 b(is)g(done)i(in)e(`)p Fk(festival/config/config)p Fo('.)35 b(Add)29 b(the)i(line)390 2305 y Fk(ALSO_INCLUDE)44 b(+=)k(rsynth)275 2435 y Fo(to)35 b(the)h(end)e(of)h(that)h(\014le)e(\(there)i(are)f (simialr)e(ones)i(men)m(tioned\).)54 b(Simply)33 b(adding)g(the)j(name) f(of)150 2545 y(the)c(directory)e(here)i(will)c(add)j(that)h(as)g(a)f (new)g(mo)s(dule)f(and)h(the)g(directory)g(will)e(b)s(e)i(compiled.)275 2675 y(What)24 b(y)m(ou)h(m)m(ust)f(pro)m(vide)f(in)g(y)m(our)h(co)s (de)g(is)f(a)h(function)f Fk(festival_DIRNAME_init\(\))18 b Fo(whic)m(h)23 b(will)150 2785 y(b)s(e)35 b(called)g(at)i (initialization)c(time.)57 b(In)35 b(this)g(function)g(y)m(ou)h(should) e(call)h(an)m(y)h(further)f(initialization)150 2894 y(require)i(and)g (de\014ne)g(and)g(new)g(Lisp)g(functions)f(y)m(ou)i(with)f(to)h(made)g (a)m(v)-5 b(ailable)37 b(to)i(the)f(rest)g(of)g(the)150 3004 y(system.)j(F)-8 b(or)31 b(example)f(in)f(the)i(`)p Fk(rsynth)p Fo(')e(case)i(w)m(e)g(w)m(ould)e(de\014ne)h(in)f(some)i (\014le)e(in)g(`)p Fk(rsynth/)p Fo(')390 3128 y Fk(#include)46 b("festival.h")390 3336 y(static)g(LISP)h(utt_rtsynth\(LISP)c(utt\))390 3440 y({)581 3543 y(EST_Utterance)h(*u)j(=)h(get_c_utt\(utt\);)581 3647 y(//)f(Do)g(format)f(synthesis)581 3751 y(return)g(utt;)390 3855 y(})390 4062 y(void)h(festival_rsynth_init\(\))390 4166 y({)533 4270 y(proclaim_module\("rsynth"\))o(;)533 4477 y(festival_def_utt_module\(")o(Rsyn)o(th_)o(Synt)o(h",u)o(tt_)o (rsyn)o(th,)533 4581 y("\(Rsynth_Synth)d(UTT\))533 4685 y(A)k(simple)e(formant)g(synthesizer"\);)533 4892 y(...)390 4996 y(})275 5230 y Fo(In)m(tegration)33 b(of)g(the)g(co)s(de)h(in)d (optional)h(\(and)h(standard)f(directories\))g(is)g(done)h(b)m(y)g (automatically)150 5340 y(creating)43 b(`)p Fk (src/modules/init_modules.)o(cc)p Fo(')37 b(for)42 b(the)h(list)e(of)i (standard)f(directories)g(plus)e(those)p eop %%Page: 136 138 136 137 bop 150 -116 a Fo(136)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y(de\014ned)35 b(as)i Fk(ALSO_INCLUDE)p Fo(.)55 b(A)37 b(call)e(to)i(a)g(function)e (called)h Fk(festival_DIRNAME_init\(\))30 b Fo(will)k(b)s(e)150 408 y(made.)275 549 y(This)c(mec)m(hanism)h(is)g(sp)s(eci\014cally)e (designed)i(so)h(y)m(ou)g(can)g(add)f(mo)s(dules)f(to)j(the)f(system)g (without)150 658 y(c)m(hanging)e(an)m(ything)g(in)f(the)i(standard)e (distribution.)150 895 y Ff(27.2.4)63 b(Example)39 b(4:)62 b(adding)42 b(new)f(LISP)f(ob)7 b(jects)275 1093 y Fo(This)20 b(third)g(examples)h(sho)m(ws)h(y)m(ou)g(ho)m(w)g(to)h(add)e(a)i(new)e (Ob)5 b(ject)22 b(to)h(Sc)m(heme)f(and)g(add)f(wraparounds)150 1203 y(to)31 b(allo)m(w)f(manipulation)e(within)f(the)k(the)f(Sc)m (heme)h(\(and)f(C)p Fk(++)p Fo(\))g(domain.)275 1343 y(Lik)m(e)25 b(example)h(2)g(w)m(e)g(are)g(assuming)f(this)f(is)h(done) h(in)e(a)j(new)e(directory)-8 b(.)39 b(Supp)s(ose)24 b(y)m(ou)i(ha)m(v)m(e)h(a)f(new)150 1453 y(ob)5 b(ject)27 b(called)e Fk(Widget)f Fo(that)i(can)g(transduce)g(a)g(string)f(in)m (to)h(some)g(other)g(string)f(\(with)g(some)h(optional)150 1562 y(con)m(tin)m(uous)k(parameter.)41 b(Th)m(us,)30 b(here)g(w)m(e)h(create)h(a)f(new)e(\014le)h(`)p Fk(widget.cc)p Fo(')e(lik)m(e)i(this)390 1697 y Fk(#include)46 b("festival.h")390 1801 y(#include)g("widget.h")92 b(//)47 b(definitions)e(for)i(the)g (widget)f(class)275 1941 y Fo(In)39 b(order)g(to)h(register)g(the)g (widgets)f(as)h(Lisp)e(ob)5 b(jects)41 b(w)m(e)f(actually)f(need)h(to)g (register)g(them)g(as)150 2051 y Fk(EST_Val)p Fo('s)29 b(as)h(w)m(ell.)40 b(Th)m(us)29 b(w)m(e)i(no)m(w)f(need)390 2185 y Fk(VAL_REGISTER_CLASS\(widge)o(t,Wi)o(dget)o(\))390 2289 y(SIOD_REGISTER_CLASS\(widg)o(et,W)o(idge)o(t\))275 2429 y Fo(The)23 b(\014rst)h(names)h(giv)m(en)f(to)h(these)g(functions) e(should)f(b)s(e)i(a)h(short)f(mnenomic)g(name)g(for)g(the)h(ob)5 b(ject)150 2539 y(that)32 b(will)d(b)s(e)i(used)g(in)g(the)h (de\014ning)d(of)j(a)g(set)h(of)e(access)i(and)f(construction)f (functions.)43 b(It)32 b(of)g(course)150 2649 y(m)m(ust)25 b(b)s(e)g(unique)e(within)g(the)i(whole)g(systems.)39 b(The)25 b(second)g(name)h(is)e(the)h(name)h(of)f(the)h(ob)5 b(ject)26 b(itself.)275 2789 y(T)-8 b(o)30 b(understand)f(its)h(usage)h (w)m(e)f(can)h(add)f(a)h(few)f(simple)e(widget)i(maniplutation)e (functions)390 2924 y Fk(LISP)47 b(widget_load\(LISP)c(filename\))390 3027 y({)533 3131 y(EST_String)i(fname)i(=)g(get_c_string\(filename\);) 533 3235 y(Widget)f(*w)h(=)h(new)f(Widget;)141 b(//)47 b(build)g(a)g(new)g(widget)533 3443 y(if)g(\(w->load\(fname\))d(==)j (0\))95 b(//)47 b(successful)e(load)676 3546 y(return)h(siod\(w\);)533 3650 y(else)533 3754 y({)676 3858 y(cerr)h(<<)g("widget)f(load:)g (failed)g(to)i(load)e(\\"")h(<<)g(fname)g(<<)g("\\"")g(<<)g(endl;)676 3961 y(festival_error\(\);)533 4065 y(})533 4169 y(return)f(NIL;)95 b(//)47 b(for)g(compilers)e(that)i(get)g(confused)390 4273 y(})275 4413 y Fo(Note)32 b(that)g(the)f(function)f Fk(siod)f Fo(constructs)j(a)f(LISP)f(ob)5 b(ject)32 b(from)f(a)g Fk(widget)p Fo(,)f(the)h(class)g(register)150 4523 y(macro)h(de\014nes) f(that)h(for)f(y)m(ou.)44 b(Also)32 b(note)g(that)g(when)e(giving)h(an) g(ob)5 b(ject)32 b(to)h(a)f Fk(LISP)e Fo(ob)5 b(ject)32 b(it)f(then)150 4632 y(o)m(wns)j(the)g(ob)5 b(ject)36 b(and)d(is)g(resp)s(onsibile)e(for)j(deleting)f(it)h(when)f(garbage)i (collection)f(o)s(ccurs)g(on)g(that)150 4742 y Fk(LISP)24 b Fo(ob)5 b(ject.)40 b(Care)25 b(should)e(b)s(e)i(tak)m(en)h(that)g(y)m (ou)g(don't)f(put)g(the)g(same)h(ob)5 b(ject)26 b(within)c(di\013eren)m (t)j Fk(LISP)150 4852 y Fo(ob)5 b(jects.)39 b(The)23 b(macros)h Fk(VAL_RESGISTER_CLASS_NODEL)17 b Fo(should)k(b)s(e)i (called)g(if)g(y)m(ou)g(do)h(not)g(w)m(an)m(t)g(y)m(our)150 4961 y(giv)m(e)31 b(ob)5 b(ject)31 b(to)g(b)s(e)f(deleted)g(b)m(y)g (the)h(LISP)e(system)i(\(this)e(ma)m(y)i(cause)g(leaks\).)275 5102 y(If)e(y)m(ou)i(w)m(an)m(t)g(refer)f(to)i(these)e(functions)f(in)g (other)i(\014les)e(within)f(y)m(our)j(mo)s(dels)e(y)m(ou)h(can)h(use) 390 5236 y Fk(VAL_REGISTER_CLASS_DCLS\()o(widg)o(et,W)o(idg)o(et\))390 5340 y(SIOD_REGISTER_CLASS_DCLS)o(\(wid)o(get,)o(Wid)o(get\))p eop %%Page: 137 139 137 138 bop 150 -116 a Fo(Chapter)30 b(27:)41 b(Programming)2411 b(137)275 299 y(in)29 b(a)h(common)h(`)p Fk(.h)p Fo(')f(\014le)275 433 y(The)37 b(follo)m(wing)g(de\014nes)g(a)i(function)d(that)j(tak)m (es)h(a)e(LISP)f(ob)5 b(ject)39 b(con)m(taining)f(a)g(widget,)i(aplies) 150 543 y(some)31 b(metho)s(d)f(and)f(returns)g(a)i(string.)390 672 y Fk(LISP)47 b(widget_apply\(LISP)c(lwidget,)i(LISP)i(string,)f (LISP)g(param\))390 775 y({)581 879 y(Widget)g(*w)h(=)h (widget\(lwidget\);)581 983 y(EST_String)d(s)i(=)h (get_c_string\(string\);)581 1087 y(float)e(p)i(=)f (get_c_float\(param\);)581 1191 y(EST_String)e(answer;)581 1398 y(answer)h(=)h(w->apply\(s,p\);)581 1606 y(return)f (strintern\(answer\);)390 1709 y(})275 1844 y Fo(The)25 b(function)g Fk(widget)p Fo(,)g(de\014ned)g(b)m(y)h(the)g(regitration)g (macros,)h(tak)m(es)h(a)e Fk(LISP)f Fo(ob)5 b(ject)27 b(and)e(returns)150 1954 y(a)36 b(p)s(oin)m(ter)f(to)h(the)g Fk(widget)e Fo(inside)f(it.)56 b(If)35 b(the)h Fk(LISP)e Fo(ob)5 b(ject)37 b(do)s(es)e(not)h(con)m(tain)g(a)g Fk(widget)e Fo(an)h(error)150 2063 y(will)28 b(b)s(e)h(thro)m(wn.)275 2198 y(Finally)f(y)m(ou)j(wish)d(to)j(add)f(these)h(functions)e(to)i (the)f(Lisp)f(system)390 2326 y Fk(void)47 b(festival_widget_init\(\)) 390 2430 y({)485 2534 y(init_subr_1\("widget.load",)o(widg)o(et_)o (load)o(,)581 2638 y("\(widget.load)d(FILENAME\)\\n\\)485 2741 y(Load)j(in)g(widget)f(from)h(FILENAME."\);)485 2845 y(init_subr_3\("widget.apply")o(,wid)o(get)o(_app)o(ly,)581 2949 y("\(widget.apply)d(WIDGET)i(INPUT)g(VAL\)\\n\\)485 3053 y(Returns)g(widget)g(applied)g(to)h(string)f(iNPUT)h(with)f(float) h(VAL."\);)390 3156 y(})275 3291 y Fo(In)41 b(y)m(out)i(`)p Fk(Makefile)p Fo(')d(for)i(this)f(directory)g(y)m(ou'll)h(need)f(to)i (add)f(the)g(include)e(directory)h(where)150 3401 y(`)p Fk(widget.h)p Fo(')26 b(is,)i(if)f(it)h(is)f(not)h(con)m(tained)h (within)c(the)k(directory)e(itself.)39 b(This)26 b(done)i(through)g (the)g(mak)m(e)150 3510 y(v)-5 b(ariable)29 b Fk(LOCAL_INCLUDES)e Fo(as)390 3639 y Fk(LOCAL_INCLUDES)44 b(=)j(-I/usr/local/widget/includ) o(e)275 3773 y Fo(And)h(for)h(the)g(link)m(er)f(y)m(ou)h('ll)f(need)h (to)h(iden)m(tify)d(where)i(y)m(our)g(widget)g(library)d(is.)97 b(In)48 b(y)m(our)150 3883 y(`)p Fk(festival/config/config)p Fo(')25 b(\014le)k(at)i(the)g(end)f(add)390 4012 y Fk(COMPILERLIBS)44 b(+=)k(-L/usr/local/widget/lib)41 b(-lwidget)p eop %%Page: 138 140 138 139 bop 150 -116 a Fo(138)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 139 141 139 140 bop 150 -116 a Fo(Chapter)30 b(28:)41 b(API)2791 b(139)150 299 y Fl(28)80 b(API)275 571 y Fo(If)28 b(y)m(ou)i(wish)d(to) j(use)e(F)-8 b(estiv)j(al)30 b(within)c(some)k(other)f(application)e (there)j(are)f(a)g(n)m(um)m(b)s(er)f(of)h(p)s(ossible)150 681 y(in)m(terfaces.)150 970 y Fn(28.1)68 b(Sc)l(heme)45 b(API)275 1175 y Fo(F)-8 b(estiv)j(al)29 b(includes)e(a)i(full)e (programming)h(language,)i(Sc)m(heme)g(\(a)g(v)-5 b(arian)m(t)29 b(of)g(Lisp\))f(as)i(a)f(p)s(o)m(w)m(erful)150 1285 y(in)m(terface)g (to)h(its)e(sp)s(eec)m(h)h(syn)m(thesis)f(functions.)38 b(Often)29 b(this)e(will)g(b)s(e)h(the)h(easiest)g(metho)s(d)f(of)h (con)m(trol-)150 1394 y(ling)j(F)-8 b(estiv)j(al's)34 b(functionalit)m(y)-8 b(.)50 b(Ev)m(en)34 b(when)f(using)g(other)h (API's)f(they)h(will)e(ultimately)g(dep)s(end)g(on)150 1504 y(the)f(Sc)m(heme)f(in)m(terpreter.)275 1651 y(Sc)m(heme)43 b(commands)h(\(as)g(s-expressions\))e(ma)m(y)i(b)s(e)f(simply)e (written)i(in)f(\014les)h(and)g(in)m(terpreted)150 1761 y(b)m(y)37 b(F)-8 b(estiv)j(al,)38 b(either)f(b)m(y)f(sp)s (eci\014cation)g(as)h(argumen)m(ts)g(on)f(the)h(command)g(line,)g(in)e (the)i(in)m(teractiv)m(e)150 1870 y(in)m(terpreter,)48 b(or)d(through)f(standard)g(input)f(as)i(a)g(pip)s(e.)82 b(Supp)s(ose)43 b(w)m(e)j(ha)m(v)m(e)g(a)f(\014le)f(`)p Fk(hello.scm)p Fo(')150 1980 y(con)m(taining)390 2121 y Fk(;;)j(A)h(short)e(example)g(file)g(with)h(Festival)f(Scheme)g (commands)390 2225 y(\(voice_rab_diphone\))d(;;)k(select)f(Gordon)390 2329 y(\(SayText)g("Hello)g(there"\))390 2432 y(\(voice_don_diphone\))d (;;)k(select)f(Donovan)390 2536 y(\(SayText)g("and)g(hello)h(from)f (me"\))275 2683 y Fo(F)-8 b(rom)24 b(the)f(command)h(in)m(terpreter)e (w)m(e)i(can)g(execute)h(the)f(commands)f(in)f(this)h(\014le)f(b)m(y)i (loading)e(them)390 2825 y Fk(festival>)45 b(\(load)i("hello.scm"\))390 2928 y(nil)275 3076 y Fo(Or)29 b(w)m(e)i(can)g(execute)g(the)g (commands)f(in)f(the)i(\014le)e(directly)g(from)h(the)h(shell)d (command)i(line)390 3217 y Fk(unix$)46 b(festival)g(-b)h(hello.scm)275 3364 y Fo(The)25 b(`)p Fk(-b)p Fo(')h(option)g(denotes)g(batc)m(h)h(op) s(eration)e(meaning)h(the)g(\014le)f(is)g(loaded)h(and)f(then)h(F)-8 b(estiv)j(al)27 b(will)150 3474 y(exit,)j(without)e(starting)g(the)i (command)f(in)m(terpreter.)39 b(Without)29 b(this)f(option)h(`)p Fk(-b)p Fo(')g(F)-8 b(estiv)j(al)29 b(will)d(load)150 3583 y(`)p Fk(hello.scm)p Fo(')31 b(and)h(then)h(accept)h(commands)e (on)h(standard)f(input.)46 b(This)32 b(can)h(b)s(e)f(con)m(v)m(enien)m (t)i(when)150 3693 y(some)d(initial)c(set)k(up)f(is)f(required)g(for)h (a)h(session.)275 3840 y(Note)38 b(one)g(disadv)-5 b(an)m(tage)38 b(of)g(the)g(batc)m(h)g(metho)s(d)f(is)f(that)i(time)f(is)g(required)f (for)h(F)-8 b(estiv)j(al's)38 b(ini-)150 3950 y(tialisation)33 b(ev)m(ery)i(time)f(it)g(starts)h(up.)51 b(Although)34 b(this)f(will)e(t)m(ypically)j(only)f(b)s(e)h(a)h(few)f(seconds,)h(for) 150 4059 y(sa)m(ying)i(short)g(individual)32 b(expressions)k(that)h (lead)g(in)f(time)h(ma)m(y)g(b)s(e)g(unacceptable.)60 b(Th)m(us)36 b(simply)150 4169 y(executing)c(the)g(commands)f(within)e (an)j(already)f(running)e(system)j(is)f(more)g(desirable,)g(or)h(using) e(the)150 4278 y(serv)m(er/clien)m(t)h(mo)s(de.)275 4426 y(Of)h(course)h(its)f(not)h(just)f(ab)s(out)g(strings)g(of)h(commands,) g(b)s(ecause)g(Sc)m(heme)g(is)f(a)h(fully)e(functional)150 4535 y(language,)38 b(functions,)f(lo)s(ops,)g(v)-5 b(ariables,)37 b(\014le)e(access,)40 b(arithmetic)35 b(op)s(erations)h(ma)m(y)h(all)e (b)s(e)h(carried)150 4645 y(out)23 b(in)e(y)m(our)i(Sc)m(heme)g (programs.)38 b(Also,)24 b(access)g(to)f(Unix)f(is)f(a)m(v)-5 b(ailable)22 b(through)g(the)h Fk(system)e Fo(function.)150 4754 y(F)-8 b(or)37 b(man)m(y)f(applications)e(directly)h(programming)f (them)i(in)f(Sc)m(heme)h(is)f(b)s(oth)h(the)g(easiest)g(and)g(the)150 4864 y(most)31 b(e\016cien)m(t)g(metho)s(d.)275 5011 y(A)e(n)m(um)m(b)s(er)f(of)h(example)g(F)-8 b(estiv)j(al)29 b(scripts)f(are)i(included)c(in)i(`)p Fk(examples/)p Fo('.)38 b(Including)27 b(a)i(program)150 5121 y(for)g(sa)m(ying)g(the) g(time,)g(and)f(for)h(telling)e(y)m(ou)i(the)g(latest)h(news)e(\(b)m(y) h(accessing)h(a)f(page)h(from)e(the)h(w)m(eb\).)150 5230 y(Also)39 b(see)g(the)g(detailed)f(discussion)e(of)k(a)f(script)f (example)g(in)g(See)h(Section)g(29.1)h([POS)e(Example],)150 5340 y(page)31 b(147.)p eop %%Page: 140 142 140 141 bop 150 -116 a Fo(140)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fn(28.2)68 b(Shell)46 b(API)275 492 y Fo(The)25 b(simplest)f(use)h(of)h(F)-8 b(estiv)j(al)26 b(\(though)f(not)h(the)g(most)g(p)s(o)m(w)m(erful\))f (is)f(simply)f(using)i(it)g(to)h(directly)150 601 y(render)j(text)j (\014les)d(as)i(sp)s(eec)m(h.)40 b(Supp)s(ose)29 b(w)m(e)i(ha)m(v)m(e)g (a)g(\014le)f(`)p Fk(hello.txt)p Fo(')e(con)m(taining)390 730 y Fk(Hello)46 b(world.)94 b(Isn't)47 b(it)g(excellent)e(weather)390 834 y(this)i(morning.)275 969 y Fo(W)-8 b(e)31 b(can)g(simply)d(call)h (F)-8 b(estiv)j(al)31 b(as)390 1098 y Fk(unix$)46 b(festival)g(--tts)g (hello.txt)275 1233 y Fo(Or)29 b(for)h(ev)m(en)h(simpler)d(one-o\013)k (phrases)390 1362 y Fk(unix$)46 b(echo)h("hello)f(")i(|)f(festival)f (--tts)275 1496 y Fo(This)34 b(is)h(easy)i(to)g(use)f(but)g(y)m(ou)g (will)e(need)i(to)h(w)m(ait)f(for)g(F)-8 b(estiv)j(al)37 b(to)g(start)g(up)e(and)h(initialise)d(its)150 1606 y(databases)i(b)s (efore)f(it)g(starts)g(to)h(render)f(the)g(text)h(as)g(sp)s(eec)m(h.)52 b(This)33 b(ma)m(y)h(tak)m(e)i(sev)m(eral)f(seconds)f(on)150 1716 y(some)29 b(mac)m(hines.)39 b(A)29 b(so)s(c)m(k)m(et)h(based)e (serv)m(er)h(mec)m(hanism)e(is)h(pro)m(vided)e(in)h(F)-8 b(estiv)j(al)29 b(whic)m(h)e(will)f(allo)m(w)i(a)150 1825 y(single)h(serv)m(er)i(pro)s(cess)f(to)h(start)g(up)e(once)i(and)f (b)s(e)g(used)f(e\016cien)m(tly)h(b)m(y)g(m)m(ultiple)f(clien)m(t)g (programs.)275 1960 y(Note)k(also)f(the)g(use)g(of)h(Sable)e(for)h (mark)m(ed)g(up)f(text,)j(see)f(Chapter)e(10)i([XML/SGML)g(mark-up],) 150 2069 y(page)40 b(37.)66 b(Sable)38 b(allo)m(ws)g(v)-5 b(arious)38 b(forms)g(of)h(additional)e(information)g(in)h(text,)k(suc) m(h)d(as)g(phrasing,)150 2179 y(emphasis,)j(pron)m(unciation,)f(as)f(w) m(ell)f(as)i(c)m(hanging)f(v)m(oices,)k(and)c(inclusion)d(of)j (external)g(w)m(a)m(v)m(eform)150 2289 y(\014les)26 b(\(i.e.)40 b(random)27 b(noises\).)39 b(F)-8 b(or)29 b(man)m(y)e(application)f (this)h(will)d(b)s(e)j(the)h(preferred)e(in)m(terface)i(metho)s(d.)150 2398 y(Other)j(text)i(mo)s(des)e(to)s(o)i(are)f(a)m(v)-5 b(ailable)31 b(through)g(the)h(command)f(line)f(b)m(y)i(using)e Fk(auto-text-mode-)150 2508 y(alist)p Fo(.)150 2766 y Fn(28.3)68 b(Serv)l(er/clien)l(t)47 b(API)275 2959 y Fo(F)-8 b(estiv)j(al)30 b(o\013ers)g(a)g(BSD)h(so)s(c)m(k)m(et-based)h (in)m(terface.)41 b(This)28 b(allo)m(ws)h(F)-8 b(estiv)j(al)30 b(to)h(run)e(as)h(a)g(serv)m(er)h(and)150 3068 y(allo)m(w)j(clien)m(t)h (programs)f(to)i(access)g(it.)54 b(Basically)35 b(the)g(serv)m(er)g (o\013ers)g(a)g(new)g(command)g(in)m(terpreter)150 3178 y(for)25 b(eac)m(h)i(clien)m(t)e(that)h(attac)m(hes)i(to)e(it.)39 b(The)25 b(serv)m(er)h(is)e(fork)m(ed)i(for)f(eac)m(h)i(clien)m(t)e (but)g(this)f(is)h(m)m(uc)m(h)h(faster)150 3288 y(than)j(ha)m(ving)f (to)h(w)m(ait)g(for)g(a)g(F)-8 b(estiv)j(al)29 b(pro)s(cess)g(to)g (start)g(from)g(scratc)m(h.)41 b(Also)28 b(the)i(serv)m(er)f(can)g(run) e(on)150 3397 y(a)k(bigger)f(mac)m(hine,)g(o\013ering)g(m)m(uc)m(h)g (faster)h(syn)m(thesis.)275 3532 y Fi(Note:)44 b(the)34 b(F)-7 b(estival)35 b(server)f(is)f(inher)-5 b(ently)36 b(inse)-5 b(cur)g(e)34 b(and)h(may)f(al)5 b(low)36 b(arbitr)-5 b(ary)36 b(users)e(ac)-5 b(c)g(ess)34 b(to)150 3641 y(your)f(machine.) 275 3776 y Fo(Ev)m(ery)27 b(e\013ort)i(has)e(b)s(een)g(made)g(to)i (minimise)24 b(the)k(risk)e(of)i(unauthorised)d(access)k(through)e(F)-8 b(estiv)j(al)150 3886 y(and)29 b(a)h(n)m(um)m(b)s(er)e(of)h(lev)m(els)h (of)f(securit)m(y)g(are)h(pro)m(vided.)39 b(Ho)m(w)m(ev)m(er)32 b(with)c(an)m(y)i(program)f(o\013ering)g(so)s(c)m(k)m(et)150 3995 y(access,)39 b(lik)m(e)d Fk(httpd)p Fo(,)g Fk(sendmail)e Fo(or)j Fk(ftpd)e Fo(there)h(is)g(a)g(risk)f(that)i(unauthorised)d (access)k(is)d(p)s(ossible.)150 4105 y(I)40 b(trust)g(F)-8 b(estiv)j(al's)41 b(securit)m(y)f(enough)g(to)i(often)f(run)e(it)h(on)g (m)m(y)g(o)m(wn)h(mac)m(hine)f(and)g(departmen)m(tal)150 4215 y(serv)m(ers,)j(restricting)d(access)i(to)f(within)d(our)i (departmen)m(t.)71 b(Please)41 b(read)f(the)h(information)e(b)s(elo)m (w)150 4324 y(b)s(efore)30 b(using)f(the)h(F)-8 b(estiv)j(al)31 b(serv)m(er)g(so)f(y)m(ou)h(understand)d(the)j(risks.)150 4549 y Ff(28.3.1)63 b(Serv)m(er)41 b(access)f(con)m(trol)275 4742 y Fo(The)c(follo)m(wing)f(access)j(con)m(trol)f(is)f(a)m(v)-5 b(ailable)36 b(for)h(F)-8 b(estiv)j(al)37 b(when)f(running)e(as)j(a)g (serv)m(er.)60 b(When)150 4851 y(the)34 b(serv)m(er)f(starts)h(it)f (will)e(usually)g(start)j(b)m(y)f(loading)g(in)f(v)-5 b(arious)32 b(commands)h(sp)s(eci\014c)g(for)g(the)g(task)150 4961 y(it)d(is)f(to)i(b)s(e)f(used)g(for.)40 b(The)30 b(follo)m(wing)f(v)-5 b(ariables)29 b(are)i(used)e(to)i(con)m(trol)g (access.)150 5121 y Fk(server_port)630 5230 y Fo(A)i(n)m(um)m(b)s(er)e (iden)m(tifying)f(the)j(inet)f(so)s(c)m(k)m(et)i(p)s(ort.)46 b(By)33 b(default)f(this)f(is)h(1314.)49 b(It)32 b(ma)m(y)i(b)s(e)630 5340 y(c)m(hanged)d(as)g(required.)p eop %%Page: 141 143 141 142 bop 150 -116 a Fo(Chapter)30 b(28:)41 b(API)2791 b(141)150 299 y Fk(server_log_file)630 408 y Fo(If)30 b(nil)e(no)h(logging)h(tak)m(es)i(place,)e(if)f(t)h(logging)g(is)f (prin)m(ted)g(to)i(standard)e(out)h(and)f(if)g(a)i(\014le)630 518 y(name)36 b(log)f(messages)i(are)f(app)s(ended)d(to)k(that)f (\014le.)55 b(All)34 b(connections)i(and)f(attempted)630 628 y(connections)44 b(are)f(logged)h(with)f(a)h(time)f(stamp)g(and)g (the)h(name)f(of)h(the)g(clien)m(t.)79 b(All)630 737 y(commands)35 b(sen)m(t)h(from)f(the)g(clien)m(t)g(are)h(also)f(logged) h(\(output)f(and)g(data)h(input)d(is)i(not)630 847 y(logged\).)150 1007 y Fk(server_deny_list)630 1117 y Fo(If)i(non-nil)d(it)j(is)f(used) h(to)g(iden)m(tify)f(whic)m(h)g(mac)m(hines)h(are)g(not)g(allo)m(w)m (ed)g(access)i(to)f(the)630 1226 y(serv)m(er.)76 b(This)40 b(is)h(a)i(list)e(of)h(regular)f(expressions.)75 b(If)41 b(the)i(host)f(name)g(of)g(the)g(clien)m(t)630 1336 y(matc)m(hes)30 b(an)m(y)f(of)g(the)h(regexs)f(in)f(this)g(list)f(the)i(clien)m(t)g(is) f(denied)f(access.)42 b(This)27 b(o)m(v)m(errides)630 1446 y(all)40 b(other)h(access)i(metho)s(ds.)72 b(Remem)m(b)s(er)41 b(that)h(sometimes)f(hosts)g(are)g(iden)m(ti\014ed)f(as)630 1555 y(n)m(um)m(b)s(ers)29 b(not)i(as)f(names.)150 1716 y Fk(server_access_list)630 1825 y Fo(If)c(this)f(is)g(non-nil)f(only)h (mac)m(hines)h(whose)g(names)g(matc)m(h)h(at)g(least)f(one)h(of)f(the)g (regexs)h(in)630 1935 y(this)h(list)g(ma)m(y)i(connect)g(as)f(clien)m (ts.)40 b(Remem)m(b)s(er)29 b(that)h(sometimes)f(hosts)g(are)h(iden)m (ti\014ed)630 2044 y(as)38 b(n)m(um)m(b)s(ers)f(not)h(as)g(names,)i(so) e(y)m(ou)g(should)e(probably)g(exclude)i(the)g(IP)f(n)m(um)m(b)s(er)g (of)630 2154 y(mac)m(hine)30 b(as)h(w)m(ell)e(as)i(its)e(name)i(to)g(b) s(e)f(prop)s(erly)e(secure.)150 2314 y Fk(server_passwd)630 2424 y Fo(If)33 b(this)f(is)h(non-nil,)f(the)i(clien)m(t)f(m)m(ust)g (send)g(this)f(passwd)g(to)j(the)e(serv)m(er)h(follo)m(w)m(ed)f(b)m(y)h (a)630 2534 y(newline)28 b(b)s(efore)j(access)g(is)f(giv)m(en.)41 b(This)29 b(is)h(required)e(ev)m(en)k(if)d(the)i(mac)m(hine)f(is)g (included)630 2643 y(in)j(the)i(access)h(list.)52 b(This)33 b(is)h(designed)f(so)i(serv)m(ers)g(for)f(sp)s(eci\014c)g(tasks)h(ma)m (y)g(b)s(e)f(set)h(up)630 2753 y(with)29 b(reasonable)h(securit)m(y)-8 b(.)150 2913 y Fk(\(set_server_safe_functio)o(ns)24 b(FUNCNAMELIST\)) 630 3023 y Fo(If)46 b(called)f(this)g(can)h(restrict)g(whic)m(h)f (functions)g(the)h(clien)m(t)f(ma)m(y)i(call.)87 b(This)45 b(is)g(the)630 3132 y(most)39 b(restrictiv)m(e)g(form)f(of)h(access,)k (and)38 b(thoroughly)g(recommended.)66 b(In)38 b(this)f(mo)s(de)630 3242 y(it)28 b(w)m(ould)g(b)s(e)g(normal)g(to)h(include)e(only)h(the)h (sp)s(eci\014c)f(functions)f(the)i(clien)m(t)f(can)i(execute)630 3352 y(\(i.e.)51 b(the)34 b(function)f(to)i(set)f(up)f(output,)h(and)g (a)g(tts)g(function\).)50 b(F)-8 b(or)35 b(example)e(a)i(serv)m(er)630 3461 y(could)29 b(call)h(the)h(follo)m(wing)e(at)i(set)g(up)e(time,)i (th)m(us)f(restricting)f(calls)h(to)h(only)e(those)i(that)630 3571 y(`)p Fk(festival_client)p Fo(')c Fk(--ttw)i Fo(uses.)870 3700 y Fk(\(set_server_safe_functio)o(ns)1252 3804 y ('\(tts_return_to_client)42 b(tts_text)j(tts_textall)g (Parameter.set\)\))275 3965 y Fo(Its)26 b(is)f(strongly)g(recommend)h (that)h(y)m(ou)f(run)f(F)-8 b(estiv)j(al)26 b(in)f(serv)m(er)h(mo)s(de) g(as)g(userid)e Fk(nobody)g Fo(to)j(limit)150 4074 y(the)k(access)g (the)g(pro)s(cess)f(will)d(ha)m(v)m(e,)32 b(also)f(running)c(it)j(in)f (a)i(c)m(hro)s(ot)g(en)m(vironmen)m(t)f(is)f(more)i(secure.)275 4210 y(F)-8 b(or)25 b(example)f(supp)s(ose)e(w)m(e)j(wish)e(to)i(allo)m (w)f(access)h(to)g(all)e(mac)m(hines)h(in)f(the)i(CSTR)e(domain)g (except)150 4319 y(for)29 b Fk(holmes.cstr.ed.ac.uk)24 b Fo(and)29 b Fk(adam.cstr.ed.ac.uk)p Fo(.)36 b(This)28 b(ma)m(y)i(b)s(e)f(done)g(b)m(y)h(the)f(follo)m(wing)150 4429 y(t)m(w)m(o)j(commands)390 4559 y Fk(\(set!)46 b(server_deny_list) e('\("holmes\\\\.cstr\\\\.ed\\\\)o(.ac\\)o(\\.uk)o(")1583 4662 y("adam\\\\.cstr\\\\.ed\\\\.ac\\\\.)o(uk"\))o(\))390 4766 y(\(set!)i(server_access_list)d ('\("[^\\\\.]*\\\\.cstr\\\\.ed\\\\.)o(ac\\\\)o(.uk)o("\)\))275 4902 y Fo(This)36 b(is)i(not)h(complete)g(though)g(as)g(when)f(DNS)g (is)g(not)h(w)m(orking)f Fk(holmes)f Fo(and)h Fk(adam)g Fo(will)e(still)150 5011 y(b)s(e)d(able)g(to)h(access)h(the)f(serv)m (er)g(\(but)f(if)g(our)g(DNS)g(isn't)g(w)m(orking)g(w)m(e)h(probably)e (ha)m(v)m(e)i(more)g(serious)150 5121 y(problems\).)i(Ho)m(w)m(ev)m(er) 24 b(the)e(ab)s(o)m(v)m(e)h(is)e(secure)h(in)e(that)i(only)f(mac)m (hines)h(in)e(the)i(domain)f Fk(cstr.ed.ac.uk)150 5230 y Fo(can)32 b(access)i(the)e(serv)m(er,)h(though)f(there)h(ma)m(y)f(b)s (e)g(w)m(a)m(ys)h(to)g(\014x)e(mac)m(hines)h(to)h(iden)m(tify)d (themselv)m(es)j(as)150 5340 y(b)s(eing)c(in)g(that)i(domain)e(ev)m(en) i(when)f(they)g(are)h(not.)p eop %%Page: 142 144 142 143 bop 150 -116 a Fo(142)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(By)h(default)g(F)-8 b(estiv)j(al)30 b(in)f(serv)m(er)i(mo)s(de)f(will)e(only)h(accept)j (clien)m(t)e(connections)g(for)h Fk(localhost)p Fo(.)150 521 y Ff(28.3.2)63 b(Clien)m(t)40 b(con)m(trol)275 713 y Fo(An)31 b(example)h(clien)m(t)g(program)g(called)f(`)p Fk(festival_client)p Fo(')e(is)i(included)f(with)h(the)h(system)g(that) 150 823 y(pro)m(vides)f(a)i(wide)e(range)i(of)g(access)h(metho)s(ds)d (to)j(the)e(serv)m(er.)47 b(A)33 b(n)m(um)m(b)s(er)e(of)i(options)e (for)i(the)f(clien)m(t)150 932 y(are)f(o\013ered.)150 1091 y Fk(--server)96 b Fo(The)36 b(name)i(\(or)f(IP)f(n)m(um)m(b)s (er\))g(of)i(the)f(serv)m(er)g(host.)61 b(By)37 b(default)f(this)g(is)g (`)p Fk(localhost)p Fo(')630 1200 y(\(i.e.)41 b(the)30 b(same)h(mac)m(hine)f(y)m(ou)h(run)e(the)i(clien)m(t)e(on\).)150 1358 y Fk(--port)192 b Fo(The)30 b(p)s(ort)g(n)m(um)m(b)s(er)f(the)h(F) -8 b(estiv)j(al)31 b(serv)m(er)f(is)g(running)e(on.)40 b(By)31 b(default)e(this)h(is)f(1314.)150 1517 y Fk(--output)f (FILENAME)630 1626 y Fo(If)73 b(a)h(w)m(a)m(v)m(eform)h(is)d(to)j(b)s (e)e(sync)m(hronously)e(returned,)84 b(it)73 b(will)e(b)s(e)i(sa)m(v)m (ed)h(in)630 1736 y Fj(FILENAME)p Fo(.)54 b(The)e Fk(--ttw)f Fo(option)i(uses)f(this)g(as)h(do)s(es)g(the)g(use)g(of)g(the)g(F)-8 b(estiv)j(al)630 1845 y(command)51 b Fk(utt.send.wave.client)p Fo(.)97 b(If)51 b(an)g(output)g(w)m(a)m(v)m(eform)h(\014le)e(is)h (receiv)m(ed)630 1955 y(b)m(y)e(`)p Fk(festival_client)p Fo(')d(and)j(no)h(output)f(\014le)f(has)i(b)s(een)f(giv)m(en)g(the)h(w) m(a)m(v)m(eform)h(is)630 2064 y(discarded)29 b(with)g(an)h(error)g (message.)150 2223 y Fk(--passwd)e(PASSWD)630 2332 y Fo(If)36 b(a)h(passwd)e(is)h(required)f(b)m(y)h(the)h(serv)m(er)g(this) e(should)g(b)s(e)h(stated)h(on)g(the)f(clien)m(t)g(call.)630 2442 y Fj(P)-8 b(ASSWD)36 b Fo(is)30 b(sen)m(t)i(plus)d(a)j(newline)d (b)s(efore)i(an)m(y)g(other)h(comm)m(unication)e(tak)m(es)j(places.)630 2551 y(If)d(this)f(isn't)g(sp)s(eci\014ed)f(and)i(a)g(passwd)f(is)g (required,)g(y)m(ou)h(m)m(ust)g(en)m(ter)h(that)g(\014rst,)f(if)f(the) 630 2661 y Fk(--ttw)37 b Fo(option)i(is)e(used,)k(a)e(passwd)f(is)f (required)g(and)i(none)f(sp)s(eci\014ed)f(access)j(will)d(b)s(e)630 2771 y(denied.)150 2929 y Fk(--prolog)28 b(FILE)630 3038 y Fj(FILE)44 b Fo(is)38 b(assumed)h(to)h(b)s(e)e(con)m(tain)i(F)-8 b(estiv)j(al)39 b(commands)g(and)f(its)h(con)m(ten)m(ts)i(are)e(sen)m (t)630 3148 y(to)34 b(the)g(serv)m(er)g(after)g(the)g(passwd)e(but)h(b) s(efore)g(an)m(ything)g(else.)50 b(This)32 b(is)h(con)m(v)m(enien)m(t)h (to)630 3258 y(use)d(in)e(conjunction)h(with)g Fk(--ttw)f Fo(whic)m(h)h(otherwise)h(do)s(es)f(not)h(o\013er)h(an)m(y)f(w)m(a)m(y) h(to)g(send)630 3367 y(commands)e(as)h(w)m(ell)e(as)i(the)f(text)i(to)f (the)f(serv)m(er.)150 3525 y Fk(--otype)e(OUTPUTTYPE)630 3635 y Fo(If)36 b(an)f(output)h(w)m(a)m(v)m(eform)i(\014le)d(is)g(to)i (b)s(e)e(used)g(this)g(sp)s(eci\014ed)f(the)j(output)e(t)m(yp)s(e)i(of) f(the)630 3744 y(\014le.)62 b(The)37 b(default)g(is)f Fk(nist)p Fo(,)j(but,)g Fk(ulaw)p Fo(,)f Fk(riff)p Fo(,)h Fk(ulaw)e Fo(and)g(others)g(as)h(supp)s(orted)e(b)m(y)630 3854 y(the)c(Edin)m(burgh)d(Sp)s(eec)m(h)i(T)-8 b(o)s(ols)32 b(Library)e(are)i(v)-5 b(alid.)43 b(Y)-8 b(ou)33 b(ma)m(y)f(use)g(ra)m (w)g(to)s(o)g(but)f(note)630 3964 y(that)c(F)-8 b(estiv)j(al)27 b(ma)m(y)h(return)e(w)m(a)m(v)m(eforms)i(of)f(v)-5 b(arious)25 b(sampling)g(rates)j(dep)s(ending)c(on)j(the)630 4073 y(sample)32 b(rates)i(of)g(the)f(databases)h(its)f(using.)48 b(Y)-8 b(ou)34 b(can)f(of)h(course)f(mak)m(e)h(F)-8 b(estiv)j(al)34 b(only)630 4183 y(return)39 b(one)i(particular)d(sample)i(rate,)k(b)m (y)c(using)f Fk(after_synth_hooks)p Fo(.)66 b(Note)41 b(that)630 4292 y(b)m(yte)c(order)f(will)e(b)s(e)i(nativ)m(e)h(mac)m (hine)g(of)g(the)f Fi(client)46 b Fo(mac)m(hine)36 b(if)g(the)g(output) h(format)630 4402 y(allo)m(ws)30 b(it.)150 4560 y Fk(--ttw)240 b Fo(T)-8 b(ext)35 b(to)g(w)m(a)m(v)m(e)h(is)d(an)i(attempt)g(to)g(mak) m(e)g Fk(festival_client)30 b Fo(useful)j(in)g(man)m(y)h(simple)630 4670 y(applications.)i(Although)20 b(y)m(ou)h(can)g(connect)h(to)f(the) g(serv)m(er)g(and)f(send)g(arbitrary)g(F)-8 b(estiv)j(al)630 4779 y(Sc)m(heme)32 b(commands,)g(this)e(option)h(automatically)g(do)s (es)h(what)f(is)f(probably)g(what)i(y)m(ou)630 4889 y(w)m(an)m(t)g (most)f(often.)42 b(When)31 b(sp)s(eci\014ed)e(this)g(options)h(tak)m (es)j(text)f(from)e(the)h(sp)s(eci\014ed)e(\014le)630 4999 y(\(or)h(stdin\),)f(syn)m(thesizes)g(it)g(\(in)f(one)i(go\))h(and) e(sa)m(v)m(es)i(it)e(in)f(the)h(sp)s(eci\014ed)f(output)h(\014le.)40 b(It)630 5108 y(basically)29 b(do)s(es)h(the)g(follo)m(wing)870 5236 y Fk(\(Parameter.set)44 b('Wavefiletype)g('\))870 5340 y(\(tts_textall)e(")p eop %%Page: 143 145 143 144 bop 150 -116 a Fo(Chapter)30 b(28:)41 b(API)2791 b(143)870 299 y Fk()870 403 y("\)\)\))630 536 y Fo(Note)30 b(that)f(this)f(is)f(b)s(est)i(used)e (for)i(small,)e(single)h(utterance)h(texts)h(as)f(y)m(ou)g(ha)m(v)m(e)g (to)h(w)m(ait)630 646 y(for)g(the)h(whole)e(text)j(to)f(b)s(e)f(syn)m (thesized)f(b)s(efore)h(it)g(is)g(returned.)150 803 y Fk(--aucommand)d(COMMAND)630 913 y Fo(Execute)37 b Fj(COMMAND)k Fo(of)36 b(eac)m(h)h(w)m(a)m(v)m(eform)g(returned)e(b)m(y)h(the)g(serv) m(er.)57 b(The)35 b(v)-5 b(ariable)630 1022 y Fk(FILE)29 b Fo(will)f(b)s(e)i(set)h(when)e Fj(COMMAND)36 b Fo(is)29 b(executed.)150 1180 y Fk(--async)144 b Fo(So)51 b(that)h(the)g(dela)m (y)f(b)s(et)m(w)m(een)h(the)f(text)i(b)s(eing)d(sen)m(t)h(and)g(the)h (\014rst)e(sound)g(b)s(eing)630 1290 y(a)m(v)-5 b(ailable)56 b(to)h(pla)m(y)-8 b(,)63 b(this)55 b(option)h(in)f(conjunction)g(with)g Fk(--ttw)g Fo(causes)h(the)h(text)630 1399 y(to)g(b)s(e)e(syn)m (thesized)g(utterance)i(b)m(y)f(utterance)h(and)e(b)s(e)h(sen)m(t)g (bac)m(k)h(in)d(separated)630 1509 y(w)m(a)m(v)m(eforms.)97 b(Using)48 b Fk(--aucommand)e Fo(eac)m(h)k(w)m(a)m(v)m(eform)g(m)m(y)f (b)s(e)f(pla)m(y)m(ed)h(lo)s(cally)-8 b(,)53 b(and)630 1618 y(when)28 b(`)p Fk(festival_client)p Fo(')d(is)j(in)m(terrupted)g (the)h(sound)f(will)e(stop.)41 b(Getting)29 b(the)g(clien)m(t)630 1728 y(to)37 b(connect)g(to)g(an)e(audio)h(serv)m(er)g(elsewhere)f (means)h(the)h(sound)d(will)g(not)i(necessarily)630 1837 y(stop)30 b(when)g(the)g(`)p Fk(festival_client)p Fo(')d(pro)s(cess)j (is)f(stopp)s(ed.)150 1995 y Fk(--withlisp)630 2105 y Fo(With)d(eac)m(h)h(command)f(b)s(eing)f(sen)m(t)i(to)g(F)-8 b(estiv)j(al)26 b(a)h(Lisp)d(return)i(v)-5 b(alue)25 b(is)h(sen)m(t,)h(also)g(Lisp)630 2214 y(expressions)38 b(ma)m(y)h(b)s(e)g(sen)m(t)g(from)g(the)g(serv)m(er)g(to)h(the)f(clien) m(t)g(through)f(the)h(command)630 2324 y Fk(send_client)p Fo(.)71 b(If)40 b(this)h(option)f(is)h(sp)s(eci\014ed)e(the)j(Lisp)e (expressions)g(are)h(prin)m(ted)f(to)630 2433 y(standard)30 b(out,)g(otherwise)g(this)f(information)g(is)h(discarded.)275 2591 y(A)g(t)m(ypical)g(example)g(use)g(of)h(`)p Fk(festival_client)p Fo(')26 b(is)390 2719 y Fk(festival_client)44 b(--async)h(--ttw)i (--aucommand)e('na_play)g($FILE')h(fred.txt)275 2852 y Fo(This)20 b(will)f(use)j(`)p Fk(na_play)p Fo(')e(to)j(pla)m(y)f(eac) m(h)h(w)m(a)m(v)m(eform)g(generated)g(for)f(the)g(utterances)h(in)d(`)p Fk(fred.txt)p Fo('.)150 2962 y(Note)32 b(the)e Fi(single)37 b Fo(quotes)31 b(so)g(that)g(the)f Fk($)g Fo(in)g Fk($FILE)e Fo(isn't)i(expanded)g(lo)s(cally)-8 b(.)275 3095 y(Note)37 b(the)g(serv)m(er)g(m)m(ust)g(b)s(e)e(running)f(b)s(efore)j(y)m(ou)f (can)h(talk)g(to)g(it.)59 b(A)m(t)38 b(presen)m(t)e(F)-8 b(estiv)j(al)37 b(is)f(not)150 3205 y(set)42 b(up)e(for)h(automatic)h (in)m(v)m(o)s(cations)f(through)f(`)p Fk(inetd)p Fo(')h(and)f(`)p Fk(/etc/services)p Fo('.)70 b(If)41 b(y)m(ou)g(do)g(that)150 3314 y(y)m(ourself,)33 b(note)g(that)h(it)e(is)g(a)h(di\013eren)m(t)f (t)m(yp)s(e)h(of)g(in)m(terface)h(as)f(`)p Fk(inetd)p Fo(')e(assumes)i(all)e(comm)m(unication)150 3424 y(go)s(es)g(through)f (standard)f(in/out.)275 3558 y(Also)39 b(note)i(that)f(eac)m(h)h (connection)f(to)h(the)f(serv)m(er)g(starts)g(a)h(new)e(session.)68 b(V)-8 b(ariables)39 b(are)i(not)150 3667 y(p)s(ersisten)m(t)33 b(o)m(v)m(er)i(m)m(ultiple)c(calls)i(to)i(the)f(serv)m(er)g(so)g(if)f (an)m(y)h(initialization)d(is)i(required)f(\(e.g.)52 b(loading)150 3777 y(of)28 b(v)m(oices\))g(it)f(m)m(ust)g(b)s(e)g(done) g(eac)m(h)i(time)e(the)g(clien)m(t)g(starts)h(or)f(more)h(reasonably)f (in)f(the)h(serv)m(er)h(when)150 3886 y(it)i(is)f(started.)275 4020 y(A)h(PERL)g(festiv)-5 b(al)29 b(clien)m(t)h(is)g(also)g(a)m(v)-5 b(ailable)30 b(in)f(`)p Fk(festival/examples/festiva)o(l_c)o(lien)o (t.pl)o Fo(')150 4241 y Ff(28.3.3)63 b(Serv)m(er/clien)m(t)40 b(proto)s(col)275 4433 y Fo(The)32 b(clien)m(t)g(talks)h(to)h(the)f (serv)m(er)g(using)e(s-expression)h(\(Lisp\).)47 b(The)32 b(serv)m(er)h(will)d(reply)i(with)g(and)150 4542 y(n)m(um)m(b)s(er)c (of)h(di\013eren)m(t)g(c)m(h)m(unks)g(un)m(til)f(either)g(OK,)h(is)g (returned)f(or)h(ER)g(\(on)h(error\).)40 b(The)29 b(comm)m(unica-)150 4652 y(totion)f(is)f(sync)m(hronous,)h(eac)m(h)h(clien)m(t)f(request)g (can)g(generate)i(a)e(n)m(um)m(b)s(er)f(of)h(w)m(a)m(v)m(eform)h (\(WV\))h(replies)150 4762 y(and/or)d(Lisp)e(replies)f(\(LP\))j(and)g (terminated)f(with)f(an)i(OK)f(\(or)h(ER\).)g(Lisp)e(is)g(used)h(as)h (it)f(has)h(its)f(o)m(wn)150 4871 y(inheren)m(t)j(syn)m(tax)i(that)g(F) -8 b(estiv)j(al)31 b(can)f(already)g(parse.)275 5005 y(The)f(follo)m(wing)g(pseudo-co)s(de)h(will)e(help)h(de\014ned)g(the)i (proto)s(col)f(as)h(w)m(ell)e(as)i(sho)m(w)f(t)m(ypical)g(use)533 5236 y Fk(fprintf\(serverfd,"\045s\\n",s)o(-exp)o(res)o(sion)o(\);)533 5340 y(do)p eop %%Page: 144 146 144 145 bop 150 -116 a Fo(144)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)676 299 y Fk(ack)47 b(=)h(read)e(three)h(character)e(acknowledgemnt)676 403 y(if)j(\(ack)e(==)h("WV\\n"\))820 506 y(read)f(a)i(waveform)676 610 y(else)f(if)g(\(ack)g(==)g("LP\\n"\))820 714 y(read)f(an)h (s-expression)676 818 y(else)g(if)g(\(ack)g(==)g("ER\\n"\))820 922 y(an)g(error)f(occurred,)f(break;)533 1025 y(while)i(ack)f(!=)i ("OK\\n")275 1172 y Fo(The)43 b(serv)m(er)i(can)f(send)f(a)i(w)m(a)m(v) m(eform)h(in)c(an)i(utterance)h(to)g(the)g(clien)m(t)e(through)h(the)g (function)150 1281 y Fk(utt.send.wave.client)p Fo(;)37 b(The)h(serv)m(er)h(can)g(send)f(a)g(lisp)f(expression)g(to)i(the)g (clien)m(t)f(through)g(the)150 1391 y(function)150 1678 y Fn(28.4)68 b(C/C)p Fe(++)45 b Fn(API)275 1883 y Fo(As)38 b(w)m(ell)g(as)h(o\013erening)f(an)h(in)m(terface)g(through)f(Sc)m (heme)h(and)g(the)g(shell)e(some)i(users)f(ma)m(y)h(also)150 1992 y(wish)30 b(to)j(em)m(b)s(edd)e(F)-8 b(estiv)j(al)33 b(within)c(their)j(o)m(wn)g(C)p Fk(++)f Fo(programs.)46 b(A)32 b(n)m(um)m(b)s(er)f(of)h(simply)e(to)i(use)g(high)150 2102 y(lev)m(el)e(functions)f(are)i(a)m(v)-5 b(ailable)29 b(for)i(suc)m(h)f(uses.)275 2248 y(In)65 b(order)g(to)h(use)g(F)-8 b(estiv)j(al)66 b(y)m(ou)g(m)m(ust)f(include)f(`)p Fk (festival/src/include/fest)o(ival)o(.h)p Fo(')150 2358 y(whic)m(h)42 b(in)g(turn)g(will)f(include)g(the)j(necessary)g(other)f (include)f(\014les)g(in)g(`)p Fk(festival/src/include)p Fo(')150 2468 y(and)82 b(`)p Fk(speech_tools/include)p Fo(')d(y)m(ou)k(should)e(ensure)h(these)i(are)f(included)e(in)h(the)h (in-)150 2577 y(clude)72 b(path)h(for)g(y)m(ou)g(y)m(our)g(program.)169 b(Also)73 b(y)m(ou)g(will)d(need)j(to)h(link)d(y)m(our)i(program)150 2687 y(with)205 b(`)p Fk(festival/src/lib/libFest)o(ival)o(.a)p Fo(',)244 b(`)p Fk(speech_tools/lib/libestool)o(s.a)o Fo(',)150 2796 y(`)p Fk(speech_tools/lib/libestba)o(se.a)o Fo(')29 b(and)34 b(`)p Fk(speech_tools/lib/libestst)o(ring)o(.a)p Fo(')28 b(as)35 b(w)m(ell)f(as)150 2906 y(an)m(y)d(other)f(optional)g (libraries)d(suc)m(h)j(as)h(net)g(audio.)275 3052 y(The)e(main)h (external)g(functions)f(a)m(v)-5 b(ailable)30 b(for)g(C)p Fk(++)f Fo(users)h(of)g(F)-8 b(estiv)j(al)31 b(are.)150 3230 y Fk(void)e(festival_initialize\(int)24 b(load_init_files,int)h (heapsize\);)630 3339 y Fo(This)33 b(m)m(ust)h(b)s(e)g(called)g(b)s (efore)g(an)m(y)h(other)g(festiv)-5 b(al)34 b(functions)f(ma)m(y)i(b)s (e)f(called.)53 b(It)35 b(sets)630 3449 y(up)27 b(the)h(syn)m(thesizer) f(system.)40 b(The)27 b(\014rst)g(argumen)m(t)h(if)f(true,)h(causes)g (the)g(system)g(set)g(up)630 3559 y(\014les)i(to)j(b)s(e)d(loaded)h (\(whic)m(h)g(is)f(normallly)f(what)i(is)g(necessary\),)h(the)g(second) f(argumen)m(t)630 3668 y(is)37 b(the)h(initial)c(size)k(of)g(the)g(Sc)m (heme)g(heap,)h(this)e(should)e(normally)h(b)s(e)h(210000)k(unless)630 3778 y(y)m(ou)31 b(en)m(visage)g(pro)s(cessing)e(v)m(ery)i(large)f (Lisp)f(structures.)150 3949 y Fk(int)g(festival_say_file\(const)c (EST_String)i(&filename\);)630 4059 y Fo(Sa)m(y)k(the)h(con)m(ten)m(ts) h(of)e(the)g(giv)m(en)g(\014le.)42 b(Returns)30 b Fk(TRUE)g Fo(or)h Fk(FALSE)f Fo(dep)s(ending)e(on)j(where)630 4168 y(this)e(w)m(as)i(successful.)150 4340 y Fk(int)e (festival_say_text\(const)c(EST_String)i(&text\);)630 4449 y Fo(Sa)m(y)42 b(the)g(con)m(ten)m(ts)i(of)e(the)g(giv)m(en)g (string.)74 b(Returns)41 b Fk(TRUE)g Fo(or)h Fk(FALSE)f Fo(dep)s(ending)e(on)630 4559 y(where)30 b(this)f(w)m(as)i(successful.) 150 4730 y Fk(int)e(festival_load_file\(const)24 b(EST_String)k (&filename\);)630 4840 y Fo(Load)f(the)h(con)m(ten)m(ts)g(of)g(the)f (giv)m(en)g(\014le)f(and)h(ev)-5 b(aluate)28 b(its)e(con)m(ten)m(ts)j (as)f(Lisp)d(commands.)630 4949 y(Returns)k Fk(TRUE)h Fo(or)g Fk(FALSE)f Fo(dep)s(ending)f(on)i(where)g(this)f(w)m(as)i (successful.)150 5121 y Fk(int)e(festival_eval_command\(cons)o(t)24 b(EST_String)k(&expr\);)630 5230 y Fo(Read)39 b(the)g(giv)m(en)g (string)f(as)h(a)g(Lisp)e(command)i(and)f(ev)-5 b(aluate)40 b(it.)65 b(Returns)38 b Fk(TRUE)g Fo(or)630 5340 y Fk(FALSE)29 b Fo(dep)s(ending)f(on)i(where)g(this)f(w)m(as)i(successful.)p eop %%Page: 145 147 145 146 bop 150 -116 a Fo(Chapter)30 b(28:)41 b(API)2791 b(145)150 299 y Fk(int)29 b(festival_text_to_wave\(cons)o(t)24 b(EST_String)k(&text,EST_Wave)e(&wave\);)630 408 y Fo(Syn)m(thesize)38 b(the)h(giv)m(en)g(string)f(in)m(to)h(the)g(giv)m(en)g(w)m(a)m(v)m(e.) 68 b(Returns)38 b Fk(TRUE)g Fo(or)g Fk(FALSE)g Fo(de-)630 518 y(p)s(ending)28 b(on)i(where)g(this)f(w)m(as)i(successful.)275 679 y(Man)m(y)g(other)f(commands)g(are)h(also)f(a)m(v)-5 b(ailable)30 b(but)g(often)h(the)f(ab)s(o)m(v)m(e)i(will)27 b(b)s(e)j(su\016cien)m(t.)275 814 y(Belo)m(w)g(is)g(a)h(simple)d(top)j (lev)m(el)f(program)g(that)h(uses)f(the)g(F)-8 b(estiv)j(al)31 b(functions)390 943 y Fk(int)47 b(main\(int)e(argc,)i(char)f(**argv\)) 390 1047 y({)581 1151 y(EST_Wave)f(wave;)581 1255 y(int)i(heap_size)e (=)j(210000;)93 b(//)47 b(default)f(scheme)g(heap)h(size)581 1359 y(int)g(load_init_files)c(=)48 b(1;)f(//)g(we)g(want)g(the)g (festival)f(init)g(files)h(loaded)581 1566 y(festival_initialize\(load) o(_ini)o(t_f)o(iles)o(,hea)o(p_s)o(ize\))o(;)581 1774 y(//)g(Say)g(simple)f(file)581 1877 y(festival_say_file\("/etc/)o(motd) o("\);)581 2085 y(festival_eval_command\("\()o(voic)o(e_k)o(ed_d)o (ipho)o(ne\))o("\);)581 2189 y(//)h(Say)g(some)g(text;)581 2293 y(festival_say_text\("hello)41 b(world"\);)581 2500 y(//)47 b(Convert)f(to)h(a)h(waveform)581 2604 y (festival_text_to_wave\("h)o(ello)41 b(world",wave\);)581 2708 y(wave.save\("/tmp/wave.wav)o(","r)o(iff)o("\);)581 2915 y(//)47 b(festival_say_file)c(puts)k(the)g(system)f(in)h(async)f (mode)h(so)g(we)g(better)581 3019 y(//)g(wait)g(for)g(the)g(spooler)e (to)j(reach)e(the)h(last)f(waveform)g(before)g(exiting)581 3123 y(//)h(This)g(isn't)f(necessary)f(if)j(only)e(festival_say_text)d (is)k(being)g(used)f(\(and)581 3227 y(//)h(your)g(own)g(wave)f(playing) g(stuff\))581 3330 y(festival_wait_for_spoole)o(r\(\);)581 3538 y(return)g(0;)390 3642 y(})150 3901 y Fn(28.5)68 b(C)45 b(only)g(API)275 4094 y Fo(A)20 b(simpler)e(C)i(only)f(in)m (terface)i(example)f(is)f(giv)m(en)h(inf)f(`)p Fk (festival/examples/festival)o(_cl)o(ient)o(.c)p Fo('.)150 4204 y(That)32 b(in)m(terface)h(talks)f(to)h(a)g(festiv)-5 b(al)32 b(serv)m(er.)47 b(The)31 b(co)s(de)i(do)s(es)f(not)g(require)g (linking)d(with)i(an)m(y)i(other)150 4314 y(EST)28 b(or)h(F)-8 b(estiv)j(al)29 b(co)s(de)g(so)h(is)e(m)m(uc)m(h)h(smaller)e(and)i (easier)g(to)h(include)c(in)i(other)h(programs.)40 b(The)29 b(co)s(de)150 4423 y(is)g(missing)g(some)h(functionalit)m(y)f(but)h (not)h(m)m(uc)m(h)f(consider)f(ho)m(w)i(m)m(uc)m(h)f(smaller)f(it)h (is.)150 4683 y Fn(28.6)68 b(Ja)l(v)-7 b(a)46 b(and)f(JSAPI)275 4876 y Fo(Initial)33 b(supp)s(ort)g(for)j(talking)e(to)i(a)g(F)-8 b(estiv)j(al)36 b(serv)m(er)g(from)f(ja)m(v)-5 b(a)36 b(is)f(included)d(from)j(v)m(ersion)g(1.3.0)150 4986 y(and)30 b(initial)e(JSAPI)i(supp)s(ort)f(is)h(included)e(from)i (1.4.0.)44 b(A)m(t)32 b(presen)m(t)f(the)g(JSAPI)e(talks)i(to)h(a)f(F) -8 b(estiv)j(al)150 5095 y(serv)m(er)31 b(elsewhere)e(rather)i(than)f (as)g(part)h(of)f(the)h(Ja)m(v)-5 b(a)31 b(pro)s(cess)f(itself.)275 5230 y(A)20 b(simple)e(\(Pure\))i(Ja)m(v)-5 b(a)22 b(festiv)-5 b(al)19 b(clien)m(t)h(is)f(giv)m(en)i(`)p Fk(festival/src/modules/jav)o (a/c)o(str/)o(fest)o(iva)o(l/Cl)o(ient)o(.ja)o(va)p Fo(')150 5340 y(with)29 b(a)i(wraparound)d(script)i(in)f(`)p Fk (festival/bin/festival_cl)o(ient)o(_jav)o(a)p Fo('.)p eop %%Page: 146 148 146 147 bop 150 -116 a Fo(146)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)275 299 y(See)i(the)g(\014le)f (`)p Fk(festival/src/modules/java)o(/cst)o(r/f)o(esti)o(val/)o(jsa)o (pi/R)o(eadM)o(e)p Fo(')25 b(for)31 b(require-)150 408 y(men)m(ts)g(and)e(a)i(small)e(example)h(of)h(using)e(the)h(JSAPI)g(in) m(terface.)p eop %%Page: 147 149 147 148 bop 150 -116 a Fo(Chapter)30 b(29:)41 b(Examples)2570 b(147)150 299 y Fl(29)80 b(Examples)275 564 y Fo(This)37 b(c)m(hapter)j(con)m(tains)f(some)g(simple)e(w)m(alkthrough)h(examples) h(of)g(using)f(F)-8 b(estiv)j(al)39 b(in)f(v)-5 b(arious)150 673 y(w)m(a)m(ys,)31 b(not)g(just)f(as)g(sp)s(eec)m(h)h(syn)m(thesizer) 150 956 y Fn(29.1)68 b(POS)45 b(Example)275 1159 y Fo(This)30 b(example)i(sho)m(ws)h(ho)m(w)f(w)m(e)h(can)g(use)f(part)h(of)f(the)h (standard)f(syn)m(thesis)f(pro)s(cess)h(to)i(tok)m(enize)150 1268 y(and)d(tag)h(a)g(\014le)e(of)i(text.)44 b(This)30 b(section)h(do)s(es)g(not)h(co)m(v)m(er)h(training)c(and)i(setting)g (up)g(a)g(part)g(of)h(sp)s(eec)m(h)150 1378 y(tag)f(set)g(\(See)g (Chapter)f(16)h([POS)e(tagging],)j(page)f(79\),)h(only)d(ho)m(w)h(to)h (go)h(ab)s(out)e(using)e(the)j(standard)150 1488 y(POS)e(tagger)j(on)f (text.)275 1632 y(This)c(example)i(also)g(sho)m(ws)g(ho)m(w)g(to)h(use) f(F)-8 b(estiv)j(al)29 b(as)g(a)h(simple)d(scripting)g(language,)j(and) f(ho)m(w)g(to)150 1742 y(mo)s(dify)g(v)-5 b(arious)29 b(metho)s(ds)h(used)f(during)f(text)k(to)f(sp)s(eec)m(h.)275 1887 y(The)i(\014le)g(`)p Fk(examples/text2pos)p Fo(')c(con)m(tains)34 b(an)g(executable)h(shell)d(script)g(whic)m(h)h(will)e(read)j(arbi-)150 1996 y(trary)f(ascii)g(text)h(from)f(standard)f(input)f(and)i(pro)s (duce)f(w)m(ords)h(and)f(their)g(part)h(of)h(sp)s(eec)m(h)f(\(one)h(p)s (er)150 2106 y(line\))29 b(on)h(standard)g(output.)275 2250 y(A)k(F)-8 b(estiv)j(al)34 b(script,)h(lik)m(e)f(an)m(y)g(other)h (UNIX)f(script,)h(it)f(m)m(ust)g(start)h(with)e(the)h(the)h(c)m (haracters)h Fk(#!)150 2360 y Fo(follo)m(w)m(ed)31 b(b)m(y)h(the)f (name)h(of)g(the)g(`)p Fk(festival)p Fo(')d(executable.)45 b(F)-8 b(or)33 b(scripts)d(the)i(option)f Fk(-script)e Fo(is)i(also)150 2470 y(required.)39 b(Th)m(us)29 b(our)h(\014rst)g (line)e(lo)s(oks)i(lik)m(e)390 2609 y Fk(#!/usr/local/bin/festiva)o(l) 42 b(-script)275 2753 y Fo(Note)31 b(that)g(the)g(pathname)f(ma)m(y)h (need)f(to)h(b)s(e)f(di\013eren)m(t)g(on)g(y)m(our)g(system)275 2898 y(F)-8 b(ollo)m(wing)27 b(this)g(w)m(e)h(ha)m(v)m(e)h(copious)e (commen)m(ts,)j(to)f(k)m(eep)f(our)g(la)m(wy)m(ers)g(happ)m(y)-8 b(,)28 b(b)s(efore)g(w)m(e)g(get)h(in)m(to)150 3008 y(the)i(real)f (script.)275 3152 y(The)f(basic)f(idea)i(w)m(e)g(use)f(is)f(that)i(the) g(tts)g(pro)s(cess)f(segmen)m(ts)i(text)f(in)m(to)g(utterances,)g (those)g(utter-)150 3262 y(ances)i(are)g(then)g(passed)f(to)h(a)h(list) d(of)i(functions,)f(as)h(de\014ned)e(b)m(y)i(the)g(Sc)m(heme)g(v)-5 b(ariable)30 b Fk(tts_hooks)p Fo(.)150 3371 y(Normally)f(this)f(v)-5 b(ariable)29 b(con)m(tains)g(a)i(list)d(of)i(t)m(w)m(o)h(function,)e Fk(utt.synth)e Fo(and)i Fk(utt.play)e Fo(whic)m(h)i(will)150 3481 y(syn)m(thesize)36 b(and)f(pla)m(y)g(the)h(resulting)e(w)m(a)m(v)m (eform.)58 b(In)35 b(this)g(case,)j(instead,)f(w)m(e)f(wish)e(to)i (predict)f(the)150 3591 y(part)30 b(of)h(sp)s(eec)m(h)f(v)-5 b(alue,)30 b(and)g(then)g(prin)m(t)f(it)h(out.)275 3735 y(The)d(\014rst)g(function)f(w)m(e)j(de\014ne)e(basically)f(replaces)h (the)h(normal)f(syn)m(thesis)g(function)f Fk(utt.synth)p Fo(.)150 3845 y(It)39 b(runs)f(the)i(standard)e(festiv)-5 b(al)38 b(utterance)j(mo)s(dules)c(used)i(in)f(the)h(syn)m(thesis)f (pro)s(cess,)k(up)c(to)i(the)150 3954 y(p)s(oin)m(t)29 b(where)h(POS)g(is)f(predicted.)40 b(This)28 b(function)h(lo)s(oks)h (lik)m(e)390 4093 y Fk(\(define)46 b(\(find-pos)f(utt\))390 4197 y("Main)h(function)g(for)h(processing)e(TTS)i(utterances.)92 b(Predicts)46 b(POS)h(and)390 4301 y(prints)f(words)g(with)h(their)f (POS")485 4405 y(\(Token)h(utt\))485 4508 y(\(POS)g(utt\))390 4612 y(\))275 4757 y Fo(The)29 b(normal)h(text-to-sp)s(eec)m(h)j(pro)s (cess)d(\014rst)g(tok)m(enizes)h(the)g(text)g(splitting)d(it)i(in)f(to) j(\\sen)m(tences".)150 4867 y(The)38 b(utterance)h(t)m(yp)s(e)f(of)h (these)g(is)e Fk(Token)p Fo(.)63 b(Then)37 b(w)m(e)i(call)f(the)g Fk(Token)f Fo(utterance)i(mo)s(dule,)g(whic)m(h)150 4976 y(con)m(v)m(erts)34 b(the)f(tok)m(ens)g(to)g(a)g(stream)g(of)f(w)m (ords.)47 b(Then)31 b(w)m(e)i(call)f(the)h Fk(POS)e Fo(mo)s(dule)g(to)i (predict)e(part)i(of)150 5086 y(sp)s(eec)m(h)f(tags)i(for)e(eac)m(h)h (w)m(ord.)46 b(Normally)32 b(w)m(e)g(w)m(ould)f(call)h(other)h(mo)s (dules)d(ultimately)h(generating)i(a)150 5195 y(w)m(a)m(v)m(eform)f (but)d(in)h(this)f(case)i(w)m(e)g(need)f(no)g(further)g(pro)s(cessing.) 275 5340 y(The)f(second)i(function)e(w)m(e)i(de\014ne)e(is)h(one)g (that)h(will)d(prin)m(t)h(out)i(the)f(w)m(ords)g(and)g(parts)g(of)h(sp) s(eec)m(h)p eop %%Page: 148 150 148 149 bop 150 -116 a Fo(148)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)390 299 y Fk(\(define)46 b(\(output-pos)f(utt\))390 403 y("Output)h(the)h(word/pos)e(for)i(each) g(word)f(in)i(utt")438 506 y(\(mapcar)485 610 y(\(lambda)e(\(pair\))581 714 y(\(format)g(t)h("\045l/\045l\\n")e(\(car)i(pair\))f(\(car)h(\(cdr) g(pair\)\)\)\))485 818 y(\(utt.features)e(utt)i('Word)f('\(name)g (pos\)\)\)\))275 952 y Fo(This)39 b(uses)h(the)h Fk(utt.features)d Fo(function)h(to)j(extract)g(features)g(from)e(the)h(items)g(in)e(a)i (named)150 1062 y(stream)36 b(of)f(an)h(utterance.)57 b(In)34 b(this)h(case)h(w)m(e)g(w)m(an)m(t)g(the)g Fk(name)e Fo(and)h Fk(pos)g Fo(features)g(for)g(eac)m(h)i(item)e(in)150 1171 y(the)c Fk(Word)f Fo(stream.)44 b(Then)30 b(for)h(eac)m(h)h(pair)e (w)m(e)i(prin)m(t)e(out)h(the)g(w)m(ord's)g(name,)h(a)g(slash)e(and)g (its)h(part)g(of)150 1281 y(sp)s(eec)m(h)f(follo)m(w)m(ed)g(b)m(y)h(a)f (newline.)275 1416 y(Our)25 b(next)h(job)g(is)f(to)i(rede\014ne)f(the)g (functions)f(to)i(b)s(e)f(called)g(during)e(text)j(to)g(sp)s(eec)m(h.) 39 b(The)26 b(v)-5 b(ariable)150 1525 y Fk(tts_hooks)28 b Fo(is)h(de\014ned)g(in)g(`)p Fk(lib/tts.scm)p Fo('.)39 b(Here)31 b(w)m(e)f(set)h(it)f(to)h(our)f(t)m(w)m(o)i(newly-de\014ned)c (functions)390 1654 y Fk(\(set!)46 b(tts_hooks)g(\(list)g(find-pos)g (output-pos\)\))275 1788 y Fo(So)35 b(that)h(garbage)h(collection)e (messages)i(do)e(not)h(app)s(ear)f(on)g(the)h(screen)f(w)m(e)h(stop)g (the)g(message)150 1898 y(from)30 b(b)s(eing)f(outputted)h(b)m(y)g(the) h(follo)m(wing)e(command)390 2027 y Fk(\(gc-status)45 b(nil\))275 2161 y Fo(The)32 b(\014nal)f(stage)j(is)e(to)h(start)h(the) f(tts)g(pro)s(cess)f(running)e(on)j(standard)f(input.)45 b(Because)35 b(w)m(e)e(ha)m(v)m(e)150 2271 y(rede\014ned)d(what)g (functions)g(are)h(to)g(b)s(e)f(run)g(on)g(the)h(utterances,)h(it)e (will)f(no)h(longer)h(generate)h(sp)s(eec)m(h)150 2380 y(but)e(just)f(predict)h(part)g(of)h(sp)s(eec)m(h)f(and)g(prin)m(t)f (it)h(to)h(standard)e(output.)390 2509 y Fk(\(tts_file)45 b("-"\))p eop %%Page: 149 151 149 150 bop 150 -116 a Fo(Chapter)30 b(30:)41 b(Problems)2582 b(149)150 299 y Fl(30)80 b(Problems)275 533 y Fo(There)32 b(will)e(b)s(e)i(man)m(y)h(problems)e(with)h(F)-8 b(estiv)j(al,)34 b(b)s(oth)e(in)f(installation)g(and)h(running)e(it.)48 b(It)33 b(is)f(a)150 643 y(y)m(oung)i(system)h(and)e(there)h(is)f(a)i (lot)f(to)h(it.)51 b(W)-8 b(e)35 b(b)s(eliev)m(e)f(the)g(basic)f (design)g(is)g(sound)g(and)h(problems)150 752 y(will)28 b(b)s(e)h(features)i(that)g(are)g(missing)d(or)i(incomplete)g(rather)g (than)g(fundamen)m(tal)g(ones.)275 887 y(W)-8 b(e)41 b(are)f(alw)m(a)m(ys)g(op)s(en)f(to)i(suggestions)e(on)h(ho)m(w)g(to)h (impro)m(v)m(e)e(it)h(and)f(\014x)g(problems,)i(w)m(e)f(don't)150 996 y(guaran)m(tee)24 b(w)m(e'll)e(ha)m(v)m(e)i(the)f(time)f(to)i (\014x)e(problems)f(but)h(w)m(e)h(are)g(in)m(terested)g(in)e(hearing)h (what)h(problems)150 1106 y(y)m(ou)31 b(ha)m(v)m(e.)275 1240 y(Before)g(y)m(ou)f(smother)g(us)g(with)f(mail)g(here)h(is)f(an)h (incomplete)g(list)f(of)h(general)g(problems)f(w)m(e)i(ha)m(v)m(e)150 1350 y(already)f(iden)m(ti\014ed)225 1484 y Fm(\017)60 b Fo(The)27 b(more)h(do)s(cumen)m(tation)f(w)m(e)h(write)f(the)h(more)g (w)m(e)g(realize)f(ho)m(w)h(m)m(uc)m(h)f(more)h(do)s(cumen)m(tation)330 1594 y(is)35 b(required.)54 b(Most)37 b(of)f(the)g(F)-8 b(estiv)j(al)36 b(do)s(cumen)m(tation)f(w)m(as)h(written)f(b)m(y)g (someone)i(who)e(kno)m(ws)330 1704 y(the)29 b(system)f(v)m(ery)h(w)m (ell,)f(and)g(mak)m(es)h(man)m(y)g(English)d(mistak)m(es.)41 b(A)28 b(go)s(o)s(d)g(re-write)g(b)m(y)h(some)g(one)330 1813 y(else)h(w)m(ould)f(b)s(e)h(a)h(go)s(o)s(d)f(start.)225 1948 y Fm(\017)60 b Fo(The)39 b(system)h(is)e(far)h(to)s(o)h(slo)m(w.) 68 b(Although)39 b(mac)m(hines)g(are)g(getting)i(faster,)h(it)d(still)e (tak)m(es)k(to)s(o)330 2057 y(long)33 b(to)h(start)g(the)g(system)f (and)g(get)i(it)e(to)h(sp)s(eak)f(some)h(giv)m(en)f(text.)51 b(Ev)m(en)34 b(so,)h(on)e(reasonable)330 2167 y(mac)m(hines,)e(F)-8 b(estiv)j(al)32 b(can)f(generate)i(the)e(sp)s(eec)m(h)h(sev)m(eral)f (times)g(faster)h(than)f(it)g(tak)m(es)h(to)g(sa)m(y)g(it.)330 2276 y(But)24 b(ev)m(en)h(if)e(it)h(is)f(\014v)m(e)h(time)g(faster,)i (it)d(will)f(tak)m(e)j(2)g(seconds)f(to)h(generate)g(a)g(10)g(second)f (utterance.)330 2386 y(A)h(2)h(second)f(w)m(ait)g(is)f(to)s(o)h(long.) 39 b(F)-8 b(aster)26 b(mac)m(hines)f(w)m(ould)f(impro)m(v)m(e)h(this)e (but)i(a)g(c)m(hange)h(in)e(design)330 2496 y(is)29 b(a)i(b)s(etter)g (solution.)225 2630 y Fm(\017)60 b Fo(The)23 b(system)h(is)e(to)s(o)i (big.)38 b(It)24 b(tak)m(es)h(a)f(long)f(time)g(to)h(compile)f(ev)m(en) h(on)f(quite)g(large)h(mac)m(hines,)h(and)330 2740 y(its)30 b(fo)s(ot)g(prin)m(t)f(is)h(still)e(in)h(the)h(10s)h(of)g(megab)m(ytes) h(as)e(is)g(the)g(run-time)f(requiremen)m(t.)40 b(Although)330 2849 y(w)m(e)28 b(ha)m(v)m(e)g(sp)s(en)m(t)f(some)g(time)g(trying)f(to) i(\014x)f(this)f(\(optional)g(mo)s(dules)g(ha)m(v)m(e)i(made)f(the)g(p) s(ossibilit)m(y)330 2959 y(of)k(building)26 b(a)31 b(m)m(uc)m(h)f (smaller)f(binary\))g(w)m(e)i(ha)m(v)m(en't)h(done)e(enough)g(y)m(et.) 225 3093 y Fm(\017)60 b Fo(The)38 b(signal)e(qualit)m(y)h(of)i(the)f(v) m(oices)h(isn't)e(v)m(ery)h(go)s(o)s(d)g(b)m(y)g(to)s(da)m(y's)h (standard)e(of)h(syn)m(thesizers,)330 3203 y(ev)m(en)43 b(giv)m(en)e(the)h(impro)m(v)m(emen)m(t)g(qualit)m(y)f(since)h(the)g (last)f(release.)76 b(This)40 b(is)g(partly)h(our)h(fault)330 3313 y(in)36 b(not)i(sp)s(ending)d(the)j(time)f(\(or)h(p)s(erhaps)e (also)i(not)g(ha)m(ving)f(enough)g(exp)s(ertise\))h(on)f(the)h(lo)m(w-) 330 3422 y(lev)m(el)i(w)m(a)m(v)m(eform)j(syn)m(thesis)c(parts)i(of)g (the)g(system.)72 b(This)38 b(will)h(impro)m(v)m(e)h(in)f(the)i(future) f(with)330 3532 y(b)s(etter)45 b(signal)f(pro)s(cessing)g(\(under)g (dev)m(elopmen)m(t\))h(and)g(b)s(etter)g(syn)m(thesis)f(tec)m(hniques)h (\(also)330 3641 y(under)29 b(dev)m(elopmen)m(t\).)p eop %%Page: 150 152 150 151 bop 150 -116 a Fo(150)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 151 153 151 152 bop 150 -116 a Fo(Chapter)30 b(31:)41 b(References)2536 b(151)150 299 y Fl(31)80 b(References)150 586 y Fi(al)5 b(len87)198 b Fo(Allen)32 b(J.,)j(Hunnicut)d(S.)i(and)f(Klatt,)i(D.)f Fi(T)-7 b(ext-to-sp)i(e)g(e)g(ch:)50 b(the)36 b(MIT)-7 b(alk)36 b(system)p Fo(,)g(Cam-)630 695 y(bridge)29 b(Univ)m(ersit)m(y) h(Press,)g(1987.)150 863 y Fi(ab)-5 b(elson85)106 b Fo(Ab)s(elson)40 b(H.)i(and)f(Sussman)f(G.)i Fi(Structur)-5 b(e)43 b(and)h(Interpr)-5 b(etation)45 b(of)e(Computer)i(Pr)-5 b(o-)630 972 y(gr)g(ams)p Fo(,)32 b(MIT)e(Press,)g(1985.)150 1140 y Fi(black94)193 b Fo(Blac)m(k)39 b(A.)f(and)f(T)-8 b(a)m(ylor,)40 b(P)-8 b(.)38 b Fk(")p Fo(CHA)-8 b(TR:)38 b(a)g(generic)g(sp)s(eec)m(h)g(syn)m (thesis)f(system.)p Fk(")p Fo(,)j Fi(Pr)-5 b(o-)630 1249 y(c)g(e)g(e)g(dings)33 b(of)g(COLING-94)p Fo(,)e(Ky)m(oto,)h(Japan)e (1994.)150 1417 y Fi(black96)193 b Fo(Blac)m(k,)30 b(A.)f(and)f(Hun)m (t,)h(A.)g Fk(")p Fo(Generating)g(F0)g(con)m(tours)g(from)f(T)-8 b(oBI)30 b(lab)s(els)c(using)i(linear)630 1526 y(regression)p Fk(")p Fo(,)i Fi(ICSLP96)p Fo(,)h(v)m(ol.)41 b(3,)31 b(pp)e(1385-1388,)35 b(Philadelphia,)26 b(P)-8 b(A.)32 b(1996.)150 1694 y Fi(black97b)151 b Fo(Blac)m(k,)45 b(A,)d(and)e(T)-8 b(a)m(ylor,)44 b(P)-8 b(.)42 b Fk(")p Fo(Assigning)d(Phrase)i(Breaks)h(from)e(P)m(art-of-Sp)s(eec)m(h)j(Se-) 630 1803 y(quences)p Fk(")p Fo(,)30 b Fi(Eur)-5 b(osp)g(e)g(e)g(ch97)p Fo(,)34 b(Rho)s(des,)c(Greece,)i(1997.)150 1971 y Fi(black97c)151 b Fo(Blac)m(k,)31 b(A,)f(and)f(T)-8 b(a)m(ylor,)31 b(P)-8 b(.)30 b Fk(")p Fo(Automatically)f(clustering)f(similar)f(units)i(for)g (unit)f(selec-)630 2080 y(tion)i(in)f(sp)s(eec)m(h)h(syn)m(thesis)p Fk(")p Fo(,)g Fi(Eur)-5 b(osp)g(e)g(e)g(ch97)p Fo(,)33 b(Rho)s(des,)d(Greece,)i(1997.)150 2248 y Fi(black98)193 b Fo(Blac)m(k,)33 b(A.,)f(Lenzo,)g(K.)f(and)g(P)m(agel,)h(V.,)h Fk(")p Fo(Issues)d(in)g(building)d(general)32 b(letter)f(to)h(sound)630 2357 y(rules.)p Fk(")p Fo(,)38 b(3rd)f(ESCA)g(W)-8 b(orkshop)38 b(on)f(Sp)s(eec)m(h)h(Syn)m(thesis,)g(Jenolan)f(Ca)m(v)m(es,)k (Australia,)630 2467 y(1998.)150 2634 y Fi(black99)193 b Fo(Blac)m(k,)51 b(A.,)f(and)44 b(Lenzo,)51 b(K.,)e Fk(")p Fo(Building)42 b(V)-8 b(oices)47 b(in)d(the)i(F)-8 b(estiv)j(al)46 b(Sp)s(eec)m(h)f(Syn)m(the-)630 2744 y(sis)36 b(System,)p Fk(")h Fo(unpublished)c(do)s(cumen)m(t,)39 b(Carnegie)e(Mellon)f(Univ)m(ersit)m(y)-8 b(,)39 b(a)m(v)-5 b(ailable)37 b(at)630 2853 y Fk(http://www.cstr.ed.ac.uk)o(/pro)o(ject) o(s/f)o(esti)o(val/)o(doc)o(s/fe)o(stvo)o(x/)150 3021 y Fi(br)-5 b(eiman84)630 3130 y Fo(Breiman,)22 b(L.,)h(F)-8 b(riedman,)22 b(J.)f(Olshen,)g(R.)g(and)f(Stone,)j(C.)d Fi(Classi\014c)-5 b(ation)26 b(and)f(r)-5 b(e)g(gr)g(ession)630 3240 y(tr)g(e)g(es)p Fo(,)32 b(W)-8 b(adsw)m(orth)31 b(and)e(Bro)s(oks,)i(P)m(aci\014c)g(Gro)m(v)m(e,)h(CA.)f(1984.)150 3407 y Fi(c)-5 b(ampb)g(el)5 b(l91)630 3517 y Fo(Campb)s(ell,)25 b(N.)i(and)f(Isard,)g(S.)h Fk(")p Fo(Segmen)m(t)g(durations)e(in)g(a)i (syllable)d(frame)p Fk(")p Fo(,)k Fi(Journal)i(of)630 3626 y(Phonetics)p Fo(,)h(19:1)h(37-47,)h(1991.)150 3794 y Fi(DeR)-5 b(ose88)91 b Fo(DeRose,)26 b(S.)c Fk(")p Fo(Grammatical)g(category)i(disam)m(biguation)d(b)m(y)h(statistical)g (optimization)p Fk(")p Fo(.)630 3903 y Fi(Computational)36 b(Linguistics)p Fo(,)30 b(14:31-39,)k(1988.)150 4071 y Fi(dusterho\01397)630 4180 y Fo(Dusterho\013,)48 b(K.)43 b(and)h(Blac)m(k,)k(A.)c Fk(")p Fo(Generating)g(F0)h(con)m(tours)f(for) g(sp)s(eec)m(h)g(syn)m(thesis)630 4290 y(using)21 b(the)j(Tilt)d(in)m (tonation)h(theory)p Fk(")h Fi(Pr)-5 b(o)g(c)g(e)g(e)g(dings)28 b(of)e(ESCA)f(Workshop)j(of)e(Intonation)p Fo(,)630 4400 y(Septem)m(b)s(er,)k(A)m(thens,)h(Greece.)42 b(1997)150 4567 y Fi(dutoit97)159 b Fo(Dutoit,)30 b(T.)f Fi(A)n(n)h(intr)-5 b(o)g(duction)34 b(to)e(T)-7 b(ext-to-Sp)i(e)g(e)g(ch)33 b(Synthesis)k Fo(Klu)m(w)m(er)29 b(Acedemic)g(Pub-)630 4676 y(lishers,)f(1997.)150 4844 y Fi(hunt89)212 b Fo(Hun)m(t,)40 b(M.,)h(Zwierynski,)d(D.)g(and)g(Carr,)i(R.)e Fk(")p Fo(Issues)f(in)g(high)g(qualit)m(y)g(LPC)g(analysis)630 4953 y(and)30 b(syn)m(thesis)p Fk(")p Fo(,)f Fi(Eur)-5 b(osp)g(e)g(e)g(ch89)p Fo(,)34 b(v)m(ol.)41 b(2,)31 b(pp)e(348-351,)34 b(P)m(aris,)c(F)-8 b(rance.)41 b(1989.)150 5121 y Fi(jilka96)221 b Fo(Jilk)-5 b(a)68 b(M.)j Fi(R)-5 b(e)g(gelb)g(asierte)70 b(Generierung)f(natuerlich)h(klingender)f(Intonation)i(des)630 5230 y(A)n(merikanischen)c(Englisch)p Fo(,)77 b(Magisterarb)s(eit,)g (Institute)67 b(of)h(Natural)f(Language)630 5340 y(Pro)s(cessing,)30 b(Univ)m(ersit)m(y)f(of)i(Stuttgart.)42 b(1996)p eop %%Page: 152 154 152 153 bop 150 -116 a Fo(152)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fi(moulines90)630 408 y Fo(Moulines,)52 b(E,)d(and)g(Charp)s(en)m(tier,)j(N.)d Fk(")p Fo(Pitc)m(h-sync)m(hronous)f(w)m(a)m(v)m(eform)i(pro)s(cessing) 630 518 y(tec)m(hniques)24 b(for)f(text-to-sp)s(eec)m(h)k(syn)m(thesis) c(using)g(diphones)p Fk(")e Fi(Sp)-5 b(e)g(e)g(ch)28 b(Communic)-5 b(ation)p Fo(,)630 628 y(9\(5/6\))33 b(pp)c(453-467.)44 b(1990.)150 787 y Fi(p)-5 b(agel98,)166 b Fo(P)m(agel,)24 b(V.,)f(Lenzo,)g(K.,)g(and)d(Blac)m(k,)j(A.)e Fk(")p Fo(Letter)g(to)g(Sound)e(Rules)h(for)g(Accen)m(ted)i(Lexicon)630 897 y(Compression)p Fk(")p Fo(,)29 b(ICSLP98,)h(Sydney)-8 b(,)30 b(Australia,)f(1998.)150 1056 y Fi(ritchie92)134 b Fo(Ritc)m(hie)23 b(G,)h(Russell)e(G,)i(Blac)m(k)g(A)g(and)e(Pulman)g (S.)h Fi(Computational)30 b(Morpholo)-5 b(gy:)41 b(pr)-5 b(ac-)630 1166 y(tic)g(al)33 b(me)-5 b(chanisms)35 b(for)e(the)g (English)g(L)-5 b(exic)g(on)p Fo(,)32 b(MIT)e(Press,)g(Cam)m(bridge,)f (Mass.)150 1325 y Fi(vansanten96)630 1435 y Fo(v)-5 b(an)24 b(San)m(ten,)i(J.,)g(Sproat,)g(R.,)g(Oliv)m(e,)f(J.)f(and)g(Hirsc)m(h)m (b)s(erg,)h(J.)f(eds,)i Fk(")p Fo(Progress)e(in)f(Sp)s(eec)m(h)630 1544 y(Syn)m(thesis,)p Fk(")29 b Fo(Springer)f(V)-8 b(erlag,)31 b(1996.)150 1704 y Fi(silverman92)630 1813 y Fo(Silv)m(erman)j(K.,)k (Bec)m(kman)f(M.,)h(Pitrelli,)d(J.,)j(Ostendorf,)f(M.,)h(Wigh)m(tman,)g (C.,)f(Price,)630 1923 y(P)-8 b(.,)26 b(Pierreh)m(um)m(b)s(ert,)d(J.,)j (and)d(Hirsc)m(h)m(b)s(erg,)h(J)g Fk(")p Fo(T)-8 b(oBI:)24 b(a)g(standard)f(for)h(lab)s(elling)c(English)630 2032 y(proso)s(dy)-8 b(.)p Fk(")30 b Fi(Pr)-5 b(o)g(c)g(e)g(e)g(dings)34 b(of)f(ICSLP92)44 b Fo(v)m(ol)30 b(2.)41 b(pp)29 b(867-870,)34 b(1992)150 2192 y Fi(spr)-5 b(o)g(at97)155 b Fo(Sproat,)34 b(R.,)h(T)-8 b(a)m(ylor,)34 b(P)-8 b(,)34 b(T)-8 b(anen)m(blatt,)34 b(M.)g(and)f(Isard,)g(A.)h Fk(")p Fo(A)f(Markup)g(Language)h(for)630 2301 y(T)-8 b(ext-to-Sp)s(eec)m(h)32 b(Syn)m(thesis)p Fk(")p Fo(,)d Fi(Eur)-5 b(osp)g(e)g(e)g(ch97)p Fo(,)34 b(Rho)s(des,)c(Greece,)i(1997.)150 2461 y Fi(spr)-5 b(o)g(at98,)127 b Fo(Sproat,)49 b(R.)44 b(eds,)49 b Fk(")p Fo(Multilingual)41 b(T)-8 b(ext-to-Sp)s(eec)m(h)47 b(Syn)m(thesis:)68 b(The)44 b(Bell)g(Labs)h(ap-)630 2570 y(proac)m(h)p Fk(")p Fo(,)31 b(Klu)m(w)m(er)e(1998.)150 2730 y Fi(sable98,)170 b Fo(Sproat,)27 b(R.,)h(Hun)m(t,)f(A.,)h(Ostendorf,)f(M.,)h(T)-8 b(a)m(ylor,)27 b(P)-8 b(.,)28 b(Blac)m(k,)h(A.,)f(Lenzo,)g(K.,)f(and)f(Edg-)630 2839 y(ington,)41 b(M.)f Fk(")p Fo(SABLE:)f(A)g(standard)f(for)h(TTS)f (markup.)p Fk(")g Fo(ICSLP98,)j(Sydney)-8 b(,)41 b(Aus-)630 2949 y(tralia,)30 b(1998.)150 3108 y Fi(taylor91)161 b Fo(T)-8 b(a)m(ylor)31 b(P)-8 b(.,)32 b(Nairn)e(I.,)h(Sutherland)e(A.) i(and)f(Jac)m(k)i(M..)43 b Fk(")p Fo(A)31 b(real)f(time)h(sp)s(eec)m(h) g(syn)m(thesis)630 3218 y(system)p Fk(")p Fo(,)f Fi(Eur)-5 b(osp)g(e)g(e)g(ch91)p Fo(,)34 b(v)m(ol.)41 b(1,)31 b(pp)e(341-344,)34 b(Genoa,)e(Italy)-8 b(.)41 b(1991.)150 3377 y Fi(taylor96)161 b Fo(T)-8 b(a)m(ylor)23 b(P)-8 b(.)23 b(and)f(Isard,)h(A.)g Fk(")p Fo(SSML:)f(A)g(sp)s(eec)m(h)h(syn)m(thesis)e(markup)h(language)p Fk(")g Fo(to)i(app)s(ear)630 3487 y(in)29 b Fi(Sp)-5 b(e)g(e)g(ch)34 b(Communic)-5 b(ations)p Fo(.)150 3646 y Fi(wwwxml97)630 3756 y Fo(W)d(orld)40 b(Wide)g(W)-8 b(eb)41 b(Consortium)d(W)-8 b(orking)40 b(Draft)h Fk(")p Fo(Extensible)d(Markup)i(Language)630 3866 y(\(XML\)V)-8 b(ersion)21 b(1.0)g(P)m(art)g(1:)36 b(Syn)m(tax)p Fk(")p Fo(,)23 b Fk(http://www.w3.org/pub/WW)o(W/T)o(R/WD)o(-xml)o(-)630 3975 y(lang-970630.html)150 4134 y Fi(yar)-5 b(owsky96)630 4244 y Fo(Y)d(aro)m(wsky)g(,)54 b(D.,)f Fk(")p Fo(Homograph)48 b(disam)m(biguation)e(in)h(text-to-sp)s(eec)m(h)j(syn)m(thesis)p Fk(")p Fo(,)h(in)630 4354 y Fk(")p Fo(Progress)45 b(in)e(Sp)s(eec)m(h)i (Syn)m(thesis,)p Fk(")f Fo(eds.)84 b(v)-5 b(an)45 b(San)m(ten,)k(J.,)f (Sproat,)h(R.,)g(Oliv)m(e,)f(J.)630 4463 y(and)30 b(Hirsc)m(h)m(b)s (erg,)g(J.)g(pp)f(157-172.)44 b(Springer)28 b(V)-8 b(erlag,)31 b(1996.)p eop %%Page: 153 155 153 154 bop 150 -116 a Fo(Chapter)30 b(32:)41 b(F)-8 b(eature)32 b(functions)2261 b(153)150 299 y Fl(32)80 b(F)-13 b(eature)53 b(functions)275 504 y Fo(This)37 b(c)m(hapter)j(con)m(tains)f(a)g(list)f(of)h(a)h(basic)e(feature)i (functions)e(a)m(v)-5 b(ailable)38 b(for)h(stream)h(items)e(in)150 613 y(utterances.)i(See)27 b(Section)g(14.6)h([F)-8 b(eatures],)30 b(page)d(71.)41 b(These)26 b(are)i(the)f(basic)f(features,)i(whic)m(h)d (can)j(b)s(e)150 723 y(com)m(bined)33 b(with)g(relativ)m(e)h(features)g (\(suc)m(h)g(as)g Fk(n.)f Fo(for)h(next,)h(and)e(relations)g(to)h (follo)m(w)g(links\).)49 b(Some)150 833 y(of)35 b(these)f(features)h (are)g(implemen)m(ted)e(as)h(short)g(C)p Fk(++)g Fo(functions)f(\(e.g.) 54 b Fk(asyl_in)p Fo(\))33 b(while)f(others)j(are)150 942 y(simple)f(features)j(on)g(an)f(item)g(\(e.g.)61 b Fk(pos)p Fo(\).)d(Note)38 b(that)f(functional)e(feature)i(tak)m(e)h (precidence)e(o)m(v)m(er)150 1052 y(simple)25 b(features,)k(so)f (accessing)g(and)f(feature)h(called)f Fk(")p Fo(X)p Fk(")g Fo(will)d(alw)m(a)m(ys)29 b(use)e(the)g(function)g(called)f Fk(")p Fo(X)p Fk(")150 1161 y Fo(ev)m(en)31 b(if)e(a)i(the)g(simple)d (feature)j(call)f Fk(")p Fo(X)p Fk(")f Fo(exists)h(on)h(the)f(item.)275 1290 y(Unlik)m(e)g(previous)g(v)m(ersions)h(there)h(are)g(no)g (features)g(that)g(are)g(builtin)c(on)k(all)e(items)h(except)i Fk(addr)150 1400 y Fo(\(rein)m(tro)s(duced)d(in)h(1.3.1\))j(whic)m(h)c (returns)h(a)h(unique)e(string)g(for)i(that)g(item)f(\(its)h(the)g(hex) f(address)g(on)150 1509 y(teh)e(item)f(within)f(the)h(mac)m(hine\).)41 b(F)-8 b(eatures)30 b(ma)m(y)f(b)s(e)f(de\014ned)g(through)g(Sc)m(heme) h(to)s(o,)h(these)f(all)f(ha)m(v)m(e)150 1619 y(the)j(pre\014x)e Fk(lisp_)p Fo(.)275 1747 y(The)i(feature)i(functions)e(are)h(listed)f (in)g(the)h(form)g Fj(Relation.name)37 b Fo(where)32 b Fj(Relation)f Fo(is)h(the)g(name)150 1857 y(of)e(the)g(stream)g(that) g(the)g(function)e(is)h(appropriate)g(to)h(and)f Fj(name)35 b Fo(is)29 b(its)g(name.)40 b(Note)31 b(that)g(y)m(ou)f(will)150 1967 y(not)g(require)e(the)i Fj(Relation)f Fo(part)h(of)g(the)f(name)h (if)f(the)h(stream)g(item)f(y)m(ou)h(are)g(applying)d(the)j(function) 150 2076 y(to)h(is)f(of)g(that)h(t)m(yp)s(e.)150 2224 y Fk(ANY.addr)96 b Fo(Returned)34 b(b)m(y)g(p)s(opular)e(demand,)j (returns)e(the)i(address)e(of)i(giv)m(en)f(item)g(that)h(is)f(guar-)630 2333 y(an)m(teed)d(unique)e(for)h(this)f(session.)150 2481 y Fk(ANY.lisp_*)630 2591 y Fo(Apply)k(Lisp)f(function)h(named)h (after)h(lisp)p 2129 2591 28 4 v 31 w(.)52 b(The)34 b(function)f(is)h (called)f(with)g(an)i(stream)630 2700 y(item.)53 b(It)35 b(m)m(ust)f(return)g(an)h(atomic)g(v)-5 b(alue.)53 b(This)33 b(metho)s(d)h(ma)m(y)h(b)s(e)f(ine\016cien)m(t)g(and)g(is)630 2810 y(primarily)27 b(desgined)i(to)i(allo)m(w)f(quic)m(k)g(protot)m (yping)g(of)h(new)f(feature)g(functions.)150 2958 y Fk (Intonation.lisp_last_til)o(t_ac)o(cent)630 3067 y Fo(Returns)f(the)i (most)g(recen)m(t)g(tilt)f(accen)m(t.)150 3215 y Fk (Intonation.lisp_last_til)o(t_bo)o(unda)o(ry)630 3324 y Fo(Returns)f(the)i(most)g(recen)m(t)g(tilt)f(b)s(oundary)-8 b(.)150 3472 y Fk(Intonation.lisp_next_til)o(t_ac)o(cent)630 3582 y Fo(Returns)29 b(the)i(next)g(tilt)e(accen)m(t.)150 3729 y Fk(Intonation.lisp_next_til)o(t_bo)o(unda)o(ry)630 3839 y Fo(Returns)g(the)i(next)g(tilt)e(b)s(oundary)-8 b(.)150 3987 y Fk(Intonation.peak_anchor_s)o(egme)o(nt_t)o(ype)24 b(ie)630 4096 y Fo(Determines)34 b(whether)f(the)h(segmen)m(t)h(anc)m (hor)f(for)f(a)i(p)s(eak)e(is)g(the)h(\014rst)f(consonan)m(t)i(of)f(a) 630 4206 y(syl)e(-)h(C0)g(-,)i(the)e(v)m(o)m(w)m(el)h(of)f(a)h(syl)e(-) h(V0)h(-,)g(or)f(segmen)m(ts)h(after)g(that)f(-)h(C1-)p Fk(>)p Fo(X,V1-)p Fk(>)p Fo(X.)g(If)630 4316 y(the)29 b(segmen)m(t)h(is)d(in)h(a)h(follo)m(wing)e(syl,)h(the)h(return)f(v)-5 b(alue)28 b(will)e(b)s(e)i(preceded)g(b)m(y)h(a)g(1)g(-)g(e.g.)630 4425 y(1V1)150 4573 y Fk(Segment.diphone_phone_na)o(me)630 4682 y Fo(This)d(is)g(pro)s(duced)g(b)m(y)h(the)h(diphone)d(mo)s(dule)h (to)i(con)m(tain)g(the)f(desired)f(phone)h(name)g(for)630 4792 y(the)d(desired)f(diphone.)37 b(This)22 b(adds)h(things)g(lik)m(e) p 2300 4792 V 81 w(if)g(part)h(of)g(a)h(consonan)m(t)g(or)f($)g(to)h (denote)630 4902 y(syllable)36 b(b)s(oundaries.)60 b(These)37 b(are)i(generated)f(on)g(a)g(p)s(er)f(v)m(oice)h(basis)f(b)m(y)h (function\(s\))630 5011 y(sp)s(eci\014ed)29 b(b)m(y)h(diphone)p 1443 5011 V 31 w(mo)s(dule)p 1766 5011 V 31 w(ho)s(oks.)40 b(Iden)m(ti\014cation)30 b(of)g(dark)g(ll's)f(etc.)41 b(ma)m(y)31 b(also)g(b)s(e)630 5121 y(included.)42 b(Note)33 b(this)d(is)h(not)h(necessarily)f(the)h(name)f(of)h(the)g(diphone)e (selected)i(as)g(if)e(it)630 5230 y(is)g(not)g(found)g(some)h(of)f (these)i(c)m(haracters)g(will)c(b)s(e)h(remo)m(v)m(ed)j(and)e(fall)f (bac)m(k)j(v)-5 b(alues)30 b(will)630 5340 y(b)s(e)g(used.)p eop %%Page: 154 156 154 155 bop 150 -116 a Fo(154)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk (Segment.lisp_pos_in_syl)24 b(seg)630 408 y Fo(Finds)29 b(the)h(p)s(osition)f(in)g(a)i(syllable)d(of)i(a)h(segmen)m(t)h(-)e (returns)f(a)i(n)m(um)m(b)s(er.)150 565 y Fk(Segment.ph_*)630 675 y Fo(Access)g(phoneset)e(features)h(for)f(a)h(segmen)m(t.)41 b(This)28 b(de\014nition)f(co)m(v)m(ers)k(m)m(ultiple)c(feature)630 784 y(functions)g(where)i(ph)p 1389 784 28 4 v 60 w(ma)m(y)g(b)s(e)g (extended)f(with)g(an)m(y)h(features)g(that)h(are)f(de\014ned)e(in)h (the)630 894 y(phoneset)i(\(e.g.)42 b(v)m(c,)32 b(vlng,)e(cplace)g (etc.\).)150 1050 y Fk(Segment.pos_in_syl)630 1160 y Fo(The)j(p)s(osition)e(of)i(this)g(segmen)m(t)h(in)e(the)h(syllable)f (it)g(is)h(related)g(to.)50 b(The)33 b(index)e(coun)m(ts)630 1270 y(from)f(0.)41 b(If)30 b(this)f(segmen)m(t)j(is)d(not)i(related)f (to)h(a)g(syllable)d(this)h(returns)h(0.)150 1426 y Fk (Segment.seg_coda_fric)630 1536 y Fo(Returns)43 b(1)i(if)f(co)s(da)g (of)h(the)f(syllable)e(this)i(segmen)m(t)h(is)f(in)f(con)m(tains)h(a)h (fricativ)m(e.)83 b(0)630 1645 y(otherwise.)150 1802 y Fk(Segment.seg_onset_stop)630 1911 y Fo(Returns)24 b(1)i(if)e(onset)h(of)h(the)f(syllable)e(this)h(segmen)m(t)i(is)e(in)g (con)m(tains)h(a)h(stop.)39 b(0)25 b(otherwise.)150 2068 y Fk(Segment.seg_onsetcoda)630 2178 y Fo(Returns)30 b(onset)h(if)e (this)h(segmen)m(t)i(is)d(b)s(efore)i(the)f(v)m(o)m(w)m(el)i(in)e(the)g (syllable)f(it)h(is)g(con)m(tained)630 2287 y(within.)69 b(Returns)40 b(co)s(da)h(if)f(it)g(is)g(the)h(v)m(o)m(w)m(el)g(or)g (after.)72 b(If)41 b(the)g(segmen)m(t)g(is)f(not)h(in)f(a)630 2397 y(syllable)28 b(it)i(returns)f(onset.)150 2553 y Fk(Segment.seg_pitch)630 2663 y Fo(Pitc)m(h)h(at)h(the)g(middle)d(of)i (this)g(segmen)m(t.)150 2819 y Fk(Segment.segment_duration)630 2929 y Fo(The)e(duration)e(of)j(the)f(giv)m(en)g(stream)h(item)e (calculated)h(as)h(the)f(end)g(of)g(this)f(item)h(min)m(us)630 3039 y(the)j(end)e(of)i(the)f(previous)f(item)h(in)f(the)i(Segmen)m(t)g (relation.)150 3195 y Fk(Segment.segment_end)630 3305 y Fo(The)f(end)g(time)g(of)g(the)h(giv)m(en)f(segmen)m(t.)150 3461 y Fk(Segement.segment_mid)630 3571 y Fo(The)g(middle)e(time)i(of)g (the)h(giv)m(en)f(segmen)m(t.)150 3727 y Fk(Segement.segment_start)630 3837 y Fo(The)g(start)h(time)f(of)g(the)h(giv)m(en)f(segmen)m(t.)150 3994 y Fk(Segment.syl_final)630 4103 y Fo(Returns)h(1)h(if)f(this)f (segmen)m(t)j(is)e(the)h(last)g(segmen)m(t)h(in)d(the)i(syllable)e(it)h (is)g(related)h(to,)h(or)630 4213 y(if)c(it)h(is)g(not)g(related)h(to)g (an)m(y)f(syllable.)150 4369 y Fk(Segment.syl_initial)630 4479 y Fo(Returns)g(1)h(if)f(this)g(segmen)m(t)i(is)e(the)h(\014rst)f (segmen)m(t)i(in)d(the)i(syllable)e(it)h(is)g(related)h(to,)h(or)630 4589 y(if)d(it)h(is)g(not)g(related)h(to)g(an)m(y)f(syllable.)150 4745 y Fk(Syllable.accented)630 4855 y Fo(Returns)h(1)h(if)e(syllable)g (is)h(accen)m(ted,)j(0)e(otherwise.)44 b(A)32 b(syllable)d(is)i(accen)m (ted)i(if)e(there)h(is)630 4964 y(at)f(least)g(one)f(In)m(tEv)m(en)m(t) i(related)e(to)h(it.)150 5121 y Fk(Syllable.asyl_in)630 5230 y Fo(Returns)24 b(n)m(um)m(b)s(er)g(of)i(accen)m(ted)h(syllables)c (since)i(last)g(phrase)f(break,)j(not)e(including)d(this)630 5340 y(one.)41 b(Accen)m(tedness)32 b(is)d(as)i(de\014ned)e(b)m(y)h (the)h(syl)p 2303 5340 V 31 w(accen)m(ted)i(feature.)p eop %%Page: 155 157 155 156 bop 150 -116 a Fo(Chapter)30 b(32:)41 b(F)-8 b(eature)32 b(functions)2261 b(155)150 299 y Fk(Syllable.asyl_out)630 408 y Fo(Returns)33 b(n)m(um)m(b)s(er)h(of)g(accen)m(ted)i(syllables)c (to)j(the)g(next)g(phrase)e(break,)j(not)e(including)630 518 y(this)29 b(one.)41 b(Accen)m(tedness)32 b(is)d(as)i(de\014ned)e(b) m(y)h(the)h(syl)p 2480 518 28 4 v 32 w(accen)m(ted)h(feature.)150 675 y Fk(Syllable.last_accent)630 784 y Fo(Returns)d(the)i(n)m(um)m(b)s (er)e(of)i(syllables)d(since)h(last)i(accen)m(ted)h(syllable.)150 941 y Fk(Syllable.lisp_last_stres)o(s)630 1050 y Fo(Num)m(b)s(er)24 b(of)g(syllables)f(from)h(previous)f(stressed)i(syllable.)36 b(0)25 b(if)f(this)g(syllable)e(is)i(stressed.)630 1160 y(It)30 b(is)g(e\013ectiv)m(ely)h(assumed)f(that)h(the)f(syllable)f(b)s (efore)h(the)g(\014rst)g(syllable)e(is)h(stressed.)150 1316 y Fk(Syllable.lisp_next_stres)o(s)630 1426 y Fo(Num)m(b)s(er)g(of) h(syllables)e(to)j(next)f(stressed)g(syllable.)39 b(0)30 b(if)f(this)g(syllable)f(is)h(stressed.)41 b(It)30 b(is)630 1536 y(e\013ectiv)m(ely)h(assumed)f(the)g(syllable)f(after)i(the)f (last)g(syllable)f(is)g(stressed.)150 1692 y Fk (Syllable.lisp_tilt_accen)o(t)630 1802 y Fo(Returns)g Fk(")p Fo(a)p Fk(")i Fo(if)e(there)i(is)e(a)i(tilt)e(accen)m(t)k (related)d(to)h(this)e(syllable,)g(0)i(otherwise.)150 1958 y Fk(Syllable.lisp_tilt_accen)o(ted)630 2068 y Fo(Returns)e(1)i (if)f(there)g(is)g(a)g(tilt)g(accen)m(t)i(related)e(to)i(this)d (syllable,)f(0)j(otherwise.)150 2225 y Fk(Syllable.lisp_tilt_bound)o (arie)o(d)630 2334 y Fo(Returns)e(1)i(if)f(there)g(is)g(a)g(tilt)g(b)s (oundary)e(related)i(to)i(this)d(syllable,)f(0)j(otherwise.)150 2491 y Fk(Syllable.lisp_tilt_bound)o(ary)630 2600 y Fo(Returns)38 b(b)s(oundary)f(lab)s(el)g(if)h(there)h(is)f(a)h(tilt)f(b)s(oundary)f (related)i(to)h(this)d(syllable,)j(0)630 2710 y(otherwise.)150 2866 y Fk(Syllable.lisp_time_to_ne)o(xt_v)o(owel)24 b(syl)630 2976 y Fo(The)30 b(time)g(from)g(v)m(o)m(w)m(el)p 1460 2976 V 34 w(start)h(to)g(next)f(v)m(o)m(w)m(el)p 2243 2976 V 34 w(start)150 3133 y Fk(Syllable.next_accent)630 3242 y Fo(Returns)f(the)i(n)m(um)m(b)s(er)e(of)i(syllables)d(to)j(the)f (next)h(accen)m(ted)h(syllable.)150 3399 y Fk(Syllable.old_syl_break) 630 3508 y Fo(Lik)m(e)25 b(syl)p 938 3508 V 32 w(break)g(but)f(2)h(and) g(3)g(are)h(promoted)f(to)g(4)h(\(to)g(b)s(e)e(compatible)h(with)e (some)j(older)630 3618 y(mo)s(dels.)150 3774 y Fk(Syllable.pos_in_word) 630 3884 y Fo(The)h(p)s(osition)e(of)j(this)e(syllable)g(in)g(the)h(w)m (ord)g(it)g(is)g(related)g(to.)41 b(The)27 b(index)f(coun)m(ts)h(from) 630 3994 y(0.)41 b(If)30 b(this)f(syllable)g(is)g(not)i(related)f(to)h (a)g(w)m(ord)f(then)g(0)h(is)e(returned.)150 4150 y Fk (Syllable.position_type)630 4260 y Fo(The)g(t)m(yp)s(e)h(of)f(syllable) f(with)g(resp)s(ect)h(to)i(the)e(w)m(ord)g(it)g(it)g(related)h(to.)41 b(This)28 b(ma)m(y)i(b)s(e)f(an)m(y)630 4369 y(of:)53 b(single)35 b(for)i(single)e(syllable)f(w)m(ords,)k(initial)c(for)i(w)m (ord)h(initial)c(syllables)i(in)g(a)i(p)s(oly-)630 4479 y(syllabic)30 b(w)m(ord,)j(\014nal)e(for)h(w)m(ord)g(\014nal)f (syllables)f(in)i(p)s(oly-syllabic)d(w)m(ords,)k(and)e(mid)g(for)630 4589 y(syllables)d(within)g(p)s(oly-syllabic)f(w)m(ords.)150 4745 y Fk(Syllable.ssyl_in)630 4855 y Fo(Returns)g(n)m(um)m(b)s(er)g (of)h(stressed)g(syllables)e(since)i(last)g(phrase)f(break,)i(not)f (including)d(this)630 4964 y(one.)150 5121 y Fk(Syllable.ssyl_out)630 5230 y Fo(Returns)34 b(n)m(um)m(b)s(er)g(of)i(stressed)f(syllables)e (to)j(next)f(phrase)g(break,)i(not)e(including)d(this)630 5340 y(one.)p eop %%Page: 156 158 156 157 bop 150 -116 a Fo(156)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(Syllable.stress)630 408 y Fo(The)e(lexical)f(stress)h(of)g(the)g(syllable)e(as)j(sp)s (eci\014ed)d(from)i(the)g(lexicon)f(en)m(try)i(corresp)s(ond-)630 518 y(ing)i(to)h(the)f(w)m(ord)g(related)g(to)i(this)d(syllable.)150 673 y Fk(Syllable.sub_phrases)630 783 y Fo(Returns)e(the)h(n)m(um)m(b)s (er)f(of)h(non-ma)5 b(jor)27 b(phrase)g(breaks)h(since)f(last)h(ma)5 b(jor)28 b(phrase)f(break.)630 892 y(Ma)5 b(jor)34 b(phrase)e(breaks)h (are)h(4,)h(as)e(returned)f(b)m(y)h(syl)p 2476 892 28 4 v 32 w(break,)h(minor)e(phrase)h(breaks)g(are)630 1002 y(2)e(and)f(3.)150 1157 y Fk(Syllable.syl_accent)630 1267 y Fo(Returns)35 b(the)i(name)f(of)h(the)f(accen)m(t)j(related)d (to)h(the)g(syllable.)56 b(NONE)36 b(is)g(returned)f(if)630 1377 y(there)c(are)f(no)h(accen)m(ts,)h(and)e(m)m(ulti)f(is)g(returned) g(if)h(there)g(is)g(more)g(than)g(one.)150 1532 y Fk (Syllable.syl_break)630 1641 y Fo(The)41 b(break)g(lev)m(el)h(after)g (this)e(syllable.)72 b(W)-8 b(ord)42 b(in)m(ternal)e(is)h(syllables)e (return)i(0,)k(non)630 1751 y(phrase)38 b(\014nal)g(w)m(ords)g(return)g (1.)66 b(Final)38 b(syllables)e(in)i(phrase)g(\014nal)g(w)m(ords)g (return)g(the)630 1861 y(name)22 b(of)h(the)g(phrase)e(they)i(are)g (related)f(to.)39 b(Note)24 b(the)e(o)s(ccasional)g Fk(")p Fo(-)p Fk(")h Fo(that)g(ma)m(y)g(app)s(ear)630 1970 y(of)35 b(phrase)e(names)i(is)e(remo)m(v)m(ed)i(so)g(that)g(this)e(feature)i (function)e(returns)g(a)i(n)m(um)m(b)s(er)e(in)630 2080 y(the)e(range)f(0,1,2,3,4.)150 2235 y Fk(Syllable.syl_coda_type)630 2345 y Fo(Return)e(the)g(v)-5 b(an)28 b(San)m(ten)h(and)f(Hirsc)m(h)m (b)s(erg)f(classi\014cation.)39 b(-V)29 b(for)f(un)m(v)m(oiced,)h Fk(+)p Fo(V-S)f(for)630 2454 y(v)m(oiced)j(but)e(no)i(sonoran)m(ts,)g (and)f Fk(+)p Fo(S)f(for)h(sonoran)m(ts.)150 2609 y Fk (Syllable.syl_codasize)630 2719 y Fo(Returns)39 b(the)i(n)m(um)m(b)s (er)e(of)h(segmen)m(ts)h(after)g(the)f(v)m(o)m(w)m(el)i(in)d(this)g (syllable.)68 b(If)39 b(there)i(is)630 2829 y(no)d(v)m(o)m(w)m(el)g(in) f(the)h(syllable)d(this)i(will)e(return)h(the)i(total)h(n)m(um)m(b)s (er)d(of)i(segmen)m(ts)g(in)f(the)630 2938 y(syllable.)150 3093 y Fk(Syllable.syl_endpitch)630 3203 y Fo(Pitc)m(h)30 b(at)h(the)g(end)f(of)g(this)f(syllable.)150 3358 y Fk(Syllable.syl_in) 630 3468 y Fo(Returns)f(n)m(um)m(b)s(er)g(of)i(syllables)d(since)i (last)g(phrase)f(break.)41 b(This)27 b(is)h(0)i(if)e(this)h(syllable)e (is)630 3577 y(phrase)j(initial.)150 3733 y Fk(Syllable.syl_midpitch) 630 3842 y Fo(Pitc)m(h)g(at)h(the)g(mid)e(v)m(o)m(w)m(el)i(of)g(this)e (syllable.)150 3998 y Fk(Syllable.syl_numphones)630 4107 y Fo(Returns)g(n)m(um)m(b)s(er)h(of)g(phones)g(in)f(syllable.)150 4262 y Fk(Syllable.syl_onset_type)630 4372 y Fo(Return)f(the)g(v)-5 b(an)28 b(San)m(ten)h(and)f(Hirsc)m(h)m(b)s(erg)f(classi\014cation.)39 b(-V)29 b(for)f(un)m(v)m(oiced,)h Fk(+)p Fo(V-S)f(for)630 4482 y(v)m(oiced)j(but)e(no)i(sonoran)m(ts,)g(and)f Fk(+)p Fo(S)f(for)h(sonoran)m(ts.)150 4637 y Fk(Syllable.syl_onsetsize)630 4746 y Fo(Returns)35 b(the)i(n)m(um)m(b)s(er)e(of)h(segmen)m(ts)i(b)s (efore)e(the)g(v)m(o)m(w)m(el)i(in)d(this)g(syllable.)56 b(If)36 b(there)h(is)630 4856 y(no)h(v)m(o)m(w)m(el)g(in)f(the)h (syllable)d(this)i(will)e(return)h(the)i(total)h(n)m(um)m(b)s(er)d(of)i (segmen)m(ts)g(in)f(the)630 4966 y(syllable.)150 5121 y Fk(Syllable.syl_out)630 5230 y Fo(Returns)d(n)m(um)m(b)s(er)f(of)h (syllables)e(to)k(next)e(phrase)g(break.)53 b(This)32 b(is)i(0)h(if)e(this)h(syllable)e(is)630 5340 y(phrase)e(\014nal.)p eop %%Page: 157 159 157 158 bop 150 -116 a Fo(Chapter)30 b(32:)41 b(F)-8 b(eature)32 b(functions)2261 b(157)150 299 y Fk(Syllable.syl_pc_unvox) 630 408 y Fo(P)m(ercen)m(tage)37 b(of)e(total)g(duration)e(of)i(un)m(v) m(oiced)f(segmen)m(ts)h(from)f(start)h(of)g(syllable.)50 b(\(i.e.)630 518 y(p)s(ercen)m(tage)32 b(to)f(start)g(of)f(\014rst)g(v) m(oiced)h(segmen)m(t\))150 667 y Fk(Syllable.syl_startpitch)630 776 y Fo(Pitc)m(h)f(at)h(the)g(start)g(of)f(this)g(syllable.)150 925 y Fk(Syllable.syl_vowel)630 1035 y Fo(Returns)c(the)i(name)f(of)g (the)g(v)m(o)m(w)m(el)h(within)d(this)h(syllable.)38 b(Note)28 b(this)e(is)g(not)i(the)f(general)630 1144 y(form)41 b(y)m(ou)h(probably)d(w)m(an)m(t.)75 b(Y)-8 b(ou)42 b(can't)g(refer)f(to)h(ph)p 2608 1144 28 4 v 32 w(*)g(features)g(of)f(this.)73 b(Returns)630 1254 y Fk(")p Fo(no)m(v)m(o)m(w)m(el)p Fk(")31 b Fo(is)f(no)g(v)m(o)m(w)m (el)i(can)e(b)s(e)g(found.)150 1403 y Fk(Syllable.syl_vowel_start)630 1512 y Fo(Start)f(p)s(osition)f(of)h(v)m(o)m(w)m(el)h(in)e(syllable.)38 b(If)29 b(there)g(is)g(no)g(v)m(o)m(w)m(el)h(the)f(start)h(p)s(osition) d(of)j(the)630 1622 y(syllable)e(is)i(returned.)150 1771 y Fk(Syllable.syllable_durati)o(on)630 1880 y Fo(The)35 b(duration)f(of)h(the)h(giv)m(en)f(stream)h(item)f(calculated)g(as)h (the)f(end)g(of)h(last)f(daugh)m(ter)630 1990 y(min)m(us)29 b(the)h(end)g(of)g(previous)f(item)h(in)f(the)i(Segmen)m(t)g(relation)f (of)g(the)h(\014rst)f(duagh)m(ter.)150 2138 y Fk(Syllable.syllable_end) 630 2248 y Fo(The)g(end)g(time)g(of)g(the)h(giv)m(en)f(syllable.)150 2397 y Fk(Syllable.syllable_start)630 2506 y Fo(The)g(start)h(time)f (of)g(the)h(giv)m(en)f(syllable.)150 2655 y Fk(Syllable.tobi_accent)630 2765 y Fo(Returns)42 b(the)h(T)-8 b(oBI)44 b(accen)m(t)h(related)e(to)g (syllable.)77 b(T)-8 b(oBI)44 b(accen)m(ts)g(are)g(those)f(whic)m(h)630 2874 y(con)m(tain)38 b(a)g(*.)64 b(NONE)37 b(is)g(returned)g(if)g (there)h(are)g(none.)63 b(If)37 b(there)h(is)f(more)h(than)g(one)630 2984 y(T)-8 b(oBI)31 b(accen)m(t)h(related)f(to)g(this)e(syllable)f (the)j(\014rst)e(one)i(is)f(returned.)150 3133 y Fk (Syllable.tobi_endtone)630 3242 y Fo(Returns)20 b(the)h(T)-8 b(oBI)21 b(endtone)g(related)f(to)i(syllable.)35 b(T)-8 b(oBI)21 b(end)f(tones)i(are)f(those)g(In)m(tEv)m(en)m(t)630 3352 y(lab)s(els)34 b(whic)m(h)h(con)m(tain)h(a)g(\045)g(or)g(a)g(-)g (\(i.e.)58 b(end)35 b(tones)i(or)e(phrase)h(accen)m(ts\).)59 b(NONE)36 b(is)630 3461 y(returned)30 b(if)h(there)h(are)g(none.)44 b(If)31 b(there)h(is)e(more)i(than)f(one)h(T)-8 b(oBI)33 b(end)d(tone)j(related)e(to)630 3571 y(this)e(syllable)g(the)h(\014rst) g(one)g(is)g(returned.)150 3720 y Fk(Syllable.lisp_get_onset_)o(leng)o (th)630 3829 y Fo(Length)g(from)g(start)h(of)g(syllable)d(to)j(start)g (of)g(v)m(o)m(w)m(el.)150 3978 y Fk(Syllable.lisp_get_rhyme_)o(leng)o (th)630 4088 y Fo(Length)f(from)g(start)h(of)g(the)f(v)m(o)m(w)m(el)i (to)f(end)f(of)g(syllable.)150 4236 y Fk(SylStructure.lisp_length)o (_to_)o(last)o(_se)o(g)630 4346 y Fo(Length)g(from)g(start)h(of)g(the)f (v)m(o)m(w)m(el)i(to)f(start)g(of)f(last)h(segmen)m(t)g(of)g(syllable.) 150 4495 y Fk(SylStructure.lisp_num_po)o(stvo)o(cali)o(c_c)630 4604 y Fo(Finds)e(the)h(n)m(um)m(b)s(er)f(of)i(p)s(ostv)m(o)s(calic)f (consonan)m(ts)h(in)e(a)i(syllable.)150 4753 y Fk (SylStructure.sonority_sc)o(ale_)o(coda)24 b(syl)630 4862 y Fo(Returns)j(v)-5 b(alue)27 b(on)g(sonorit)m(y)g(scale)h(\(1)g (-6,)h(where)e(6)h(is)f(most)h(sonorous\))f(for)g(the)h(co)s(da)g(of) 630 4972 y(a)j(syllable,)d(based)i(on)h(least)f(sonoran)m(t)h(p)s (ortion.)150 5121 y Fk(SylStructure.sonority_sc)o(ale_)o(onse)o(t)24 b(syl)630 5230 y Fo(Returns)32 b(v)-5 b(alue)33 b(on)f(sonorit)m(y)h (scale)h(\(1)f(-6,)i(where)e(6)g(is)f(most)h(sonorous\))g(for)g(the)g (onset)630 5340 y(of)e(a)f(syllable,)f(based)h(on)g(least)h(sonoran)m (t)g(p)s(ortion.)p eop %%Page: 158 160 158 159 bop 150 -116 a Fo(158)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk (SylStructure.lisp_syl_nu)o(mpho)o(nes)24 b(syl)630 408 y Fo(Finds)29 b(the)h(n)m(um)m(b)s(er)f(segmen)m(ts)j(in)d(a)i (syllable.)150 581 y Fk(SylStructure.vowel_front)o(ness)24 b(syl)630 690 y Fo(Classi\014es)k(v)m(o)m(w)m(els)k(as)e(fron)m(t,)h (bac)m(k)g(or)g(mid)150 862 y Fk(SylStructure.lisp_vowel_)o(heig)o(ht) 24 b(syl)630 972 y Fo(Classi\014es)k(v)m(o)m(w)m(els)k(as)e(high,)g(lo) m(w)g(or)g(mid)150 1144 y Fk(SylStructure.vowel_lengt)o(h)24 b(syl)630 1254 y Fo(Returns)29 b(the)i(df.length)e(feature)i(of)g(a)f (syllable's)f(v)m(o)m(w)m(el)150 1426 y Fk(Token.prepunctuation)630 1536 y Fo(Preceeding)h(puctuation)g(sym)m(b)s(ol)f(found)g(b)s(efore)h (tok)m(en)h(in)e(original)g(string/\014le.)150 1708 y Fk(Token.punc)630 1817 y Fo(Succeeding)h(punctuation)f(sym)m(b)s(ol)g (found)g(after)i(tok)m(en)g(in)e(original)g(string/\014le.)150 1990 y Fk(Token.whitespace)630 2099 y Fo(Whitespace)i(found)e(b)s (efore)h(tok)m(en)h(in)e(original)g(string/\014le.)150 2271 y Fk(Word.blevel)630 2381 y Fo(A)g(crude)f(translation)f(of)i (phrase)f(break)h(in)m(to)f(T)-8 b(oBI)30 b(lik)m(e)e(phrase)g(lev)m (el.)40 b(V)-8 b(alues)28 b(ma)m(y)i(b)s(e)630 2491 y(0,1,2,3,4.)150 2663 y Fk(Word.cap)96 b Fo(Returns)29 b(1)i(if)f(this)f(w)m(ord)h (starts)h(with)e(a)h(capital)g(letter,)h(0)g(otherwise.)150 2835 y Fk(Word.content_words_in)630 2945 y Fo(Num)m(b)s(er)e(of)i(con)m (ten)m(t)h(w)m(ords)e(from)g(start)h(this)e(phrase.)150 3117 y Fk(Word.content_words_out)630 3226 y Fo(Num)m(b)s(er)g(of)i(con) m(ten)m(t)h(w)m(ords)e(to)h(end)f(of)g(this)g(phrase.)150 3399 y Fk(Word.contentp)630 3508 y Fo(Returns)f(1)i(if)f(this)f(w)m (ord)h(is)f(a)i(con)m(ten)m(t)h(w)m(ord)e(as)h(de\014ned)e(b)m(y)h(gp)s (os,)h(0)f(otherwise.)150 3680 y Fk(Word.gpos)630 3790 y Fo(Returns)g(a)i(guess)f(at)h(the)f(part)g(of)h(sp)s(eec)m(h)f(of)g (this)f(w)m(ord.)43 b(The)31 b(lisp)e(a-list)i(guess)p 3496 3790 28 4 v 32 w(p)s(os)g(is)630 3900 y(used)i(to)i(load)e(up)g (this)g(w)m(ord.)51 b(If)34 b(no)f(part)h(of)g(sp)s(eec)m(h)g(is)f (found)g(in)f(there)j Fk(")p Fo(con)m(ten)m(t)p Fk(")g Fo(is)630 4009 y(returned.)50 b(This)32 b(allo)m(ws)h(a)i(quic)m(k)e (e\016cien)m(t)i(metho)s(d)e(for)h(part)f(of)h(sp)s(eec)m(h)g(tagging)h (in)m(to)630 4119 y(closed)30 b(class)g(and)g(con)m(ten)m(t)i(w)m (ords.)150 4291 y Fk(Word.n_content)630 4401 y Fo(Next)j(con)m(ten)m(t) g(w)m(ord.)51 b(Note)35 b(this)e(do)s(esn't)h(use)f(the)h(standard)f (n.)51 b(notation)34 b(as)g(it)f(ma)m(y)630 4510 y(ha)m(v)m(e)g(to)f (searc)m(h)g(a)g(n)m(um)m(b)s(er)e(of)i(w)m(ords)f(forw)m(ard)g(b)s (efore)g(\014nding)e(a)j(non-function)e(w)m(ord.)630 4620 y(Uses)44 b(gp)s(os)g(to)h(de\014ne)e(con)m(ten)m(t/function)i(w)m (ord)f(distinction.)79 b(This)42 b(also)i(w)m(orks)g(for)630 4729 y(T)-8 b(ok)m(ens.)150 4902 y Fk(Word.nn_content)630 5011 y Fo(Next)29 b(next)g(con)m(ten)m(t)h(w)m(ord.)39 b(Note)30 b(this)d(do)s(esn't)h(use)g(the)h(standard)e(n.n.)39 b(notation)29 b(as)f(it)630 5121 y(ma)m(y)k(ha)m(v)m(e)h(to)g(searc)m (h)f(a)h(n)m(um)m(b)s(er)d(of)i(w)m(ords)f(forw)m(ard)h(b)s(efore)f (\014nding)e(the)j(second)g(non-)630 5230 y(function)23 b(w)m(ord.)38 b(Uses)24 b(gp)s(os)g(to)h(de\014ne)e(con)m(ten)m (t/function)i(w)m(ord)f(distinction.)36 b(This)22 b(also)630 5340 y(w)m(orks)30 b(for)g(T)-8 b(ok)m(ens.)p eop %%Page: 159 161 159 160 bop 150 -116 a Fo(Chapter)30 b(32:)41 b(F)-8 b(eature)32 b(functions)2261 b(159)150 299 y Fk(Word.num_break)630 408 y Fo(1)39 b(if)e(this)g(is)h(the)g(last)g(w)m(ord)g(in)f(a)i(n)m (umeric)e(tok)m(en)i(and)f(it)g(is)f(follo)m(w)m(ed)h(b)m(y)g(a)h(n)m (umeric)630 518 y(tok)m(en.)150 677 y Fk(Word.p_content)630 787 y Fo(Previous)d(con)m(ten)m(t)j(w)m(ord.)60 b(Note)38 b(this)e(do)s(esn't)g(use)h(the)g(standard)f(p.)60 b(notation)37 b(as)g(it)630 897 y(ma)m(y)e(ha)m(v)m(e)g(to)h(searc)m(h)e(a)h(n)m(um)m (b)s(er)e(of)i(w)m(ords)e(bac)m(kw)m(ard)i(b)s(efore)f(\014nding)e(the) j(\014rst)e(non-)630 1006 y(function)23 b(w)m(ord.)38 b(Uses)24 b(gp)s(os)g(to)h(de\014ne)e(con)m(ten)m(t/function)i(w)m(ord) f(distinction.)36 b(This)22 b(also)630 1116 y(w)m(orks)30 b(for)g(T)-8 b(ok)m(ens.)150 1275 y Fk(Word.pbreak)630 1385 y Fo(Result)23 b(from)g(statistical)g(phrasing)e(mo)s(dule,)j(ma)m (y)g(b)s(e)f(B)g(or)h(NB)g(denoting)e(phrase)h(break)630 1494 y(or)30 b(non-phrase)g(break)g(after)h(the)f(w)m(ord.)150 1654 y Fk(Word.pbreak_score)630 1763 y Fo(Log)h(lik)m(eliho)s(o)s(d)c (score)k(from)f(statistical)g(phrasing)f(mo)s(dule,)g(for)h(pbreak)g(v) -5 b(alue.)150 1923 y Fk(Word.pos)96 b Fo(P)m(art)31 b(of)g(sp)s(eec)m(h)f(tag)i(v)-5 b(alue)29 b(returned)h(b)m(y)g(the)g (POS)g(tagger)i(mo)s(dule.)150 2082 y Fk(Word.pos_in_phrase)630 2192 y Fo(The)e(p)s(osition)e(of)j(this)e(w)m(ord)h(in)f(the)i(phrase)e (this)h(w)m(ord)g(is)f(in.)150 2351 y Fk(Word.pos_score)630 2461 y Fo(P)m(art)i(of)g(sp)s(eec)m(h)f(tag)i(log)e(lik)m(eliho)s(o)s (d)d(from)j(Viterbi)f(searc)m(h.)150 2620 y Fk(Word.pp_content)630 2730 y Fo(Previous)g(previous)f(con)m(ten)m(t)k(w)m(ord.)40 b(Note)32 b(this)c(do)s(esn't)i(use)g(the)g(standard)f(p.p.)40 b(nota-)630 2839 y(tion)34 b(as)h(it)f(ma)m(y)h(ha)m(v)m(e)g(to)g (searc)m(h)g(a)g(n)m(um)m(b)s(er)e(of)i(w)m(ords)f(bac)m(kw)m(ard)h(b)s (efore)f(\014nding)e(the)630 2949 y(\014rst)27 b(non-function)g(w)m (ord.)39 b(Uses)29 b(gp)s(os)e(to)i(de\014ne)e(con)m(ten)m(t/function)i (w)m(ord)f(distinction.)630 3059 y(This)h(also)h(w)m(orks)g(for)g(T)-8 b(ok)m(ens.)150 3218 y Fk(Word.word_break)630 3328 y Fo(The)34 b(break)f(lev)m(el)h(after)h(this)e(w)m(ord.)51 b(Non-phrase)34 b(\014nal)f(w)m(ords)g(return)g(1)i(Phrase)e(\014nal) 630 3437 y(w)m(ords)d(return)f(the)i(name)f(of)h(the)f(phrase)g(they)g (are)h(in.)150 3597 y Fk(Word.word_duration)630 3706 y Fo(The)21 b(duration)g(of)h(the)f(giv)m(en)h(stream)g(item.)38 b(This)20 b(is)h(de\014ned)f(as)i(the)g(end)f(of)h(last)g(segmen)m(t) 630 3816 y(in)h(the)h(last)h(syllable)d(\(via)i(the)g(SylStructure)f (relation\))g(min)m(us)g(the)h(segmen)m(t)i(immediate)630 3925 y(preceeding)k(the)g(\014rst)g(segmen)m(t)h(in)f(the)g(\014rst)g (syllable.)150 4085 y Fk(Word.word_end)630 4194 y Fo(The)g(end)g(time)g (of)g(the)h(giv)m(en)f(w)m(ord.)150 4354 y Fk(Word.word_numsyls)630 4463 y Fo(Returns)f(n)m(um)m(b)s(er)h(of)g(syllables)e(in)h(a)i(w)m (ord.)150 4623 y Fk(Word.word_start)630 4732 y Fo(The)f(start)h(time)f (of)g(the)h(giv)m(en)f(w)m(ord.)150 4892 y Fk(Word.words_out)630 5001 y Fo(Num)m(b)s(er)f(of)i(w)m(ords)f(to)h(end)e(of)i(this)e (phrase.)p eop %%Page: 160 162 160 161 bop 150 -116 a Fo(160)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 161 163 161 162 bop 150 -116 a Fo(Chapter)30 b(33:)41 b(V)-8 b(ariable)30 b(list)2472 b(161)150 299 y Fl(33)80 b(V)-13 b(ariable)55 b(list)275 557 y Fo(This)34 b(c)m(hapter)k(con)m(tains)f (a)g(list)e(of)i(v)-5 b(ariables)36 b(curren)m(tly)f(de\014ned)h (within)e(F)-8 b(estiv)j(al)37 b(a)m(v)-5 b(ailable)36 b(for)150 666 y(general)k(use.)70 b(This)39 b(list)g(is)g (automatically)h(generated)i(from)e(the)g(do)s(cumen)m(tation)g (strings)f(of)i(the)150 776 y(v)-5 b(ariables)29 b(as)i(they)f(are)h (de\014ned)e(within)f(the)i(system,)h(so)g(has)f(some)h(c)m(hance)g(in) e(b)s(eing)g(up-to-date.)275 918 y(Cross)g(references)i(to)g(sections)f (elsewhere)g(in)m(t)g(he)g(man)m(ual)g(are)h(giv)m(en)f(where)g (appropriate.)150 1089 y Fk(!)432 b Fo(In)34 b(in)m(teractiv)m(e)h(mo)s (de,)g(this)e(v)-5 b(ariable's)33 b(v)-5 b(alue)34 b(is)g(the)g(return) f(v)-5 b(alue)34 b(of)h(the)f(previously)630 1199 y(ev)-5 b(aluated)31 b(expression.)150 1366 y Fk(*module-descriptions*)630 1476 y Fo(An)f(asso)s(ciation)g(list)f(recording)h(the)g(description)f (ob)5 b(jects)31 b(for)f(pro)s(claimed)e(mo)s(dules.)150 1643 y Fk(*ostype*)96 b Fo(Con)m(tains)37 b(the)h(name)f(of)h(the)f(op) s(erating)g(system)h(t)m(yp)s(e)g(that)g(F)-8 b(estiv)j(al)38 b(is)e(running)f(on,)630 1753 y(e.g.)40 b(SunOS5,)25 b(F)-8 b(reeBSD,)27 b(lin)m(ux)c(etc.)41 b(The)24 b(v)-5 b(alue)25 b(is)g(tak)m(en)h(from)f(the)h(Mak)m(e\014le)g(v)-5 b(ariable)630 1862 y(OSTYPE)29 b(at)i(compile)f(time.)150 2029 y Fk(*properties*)630 2139 y Fo(Arra)m(y)h(for)f(holding)e(sym)m (b)s(ol)h(prop)s(ert)m(y)h(lists.)150 2306 y Fk(after_analysis_hooks) 630 2416 y Fo(List)g(of)g(functions)f(to)i(b)s(e)f(applied)e(after)j (analysis)e(and)h(b)s(efore)g(syn)m(thesis.)150 2583 y Fk(after_synth_hooks)630 2693 y Fo(List)35 b(of)h(functions)f(to)i(b) s(e)e(applied)f(after)i(all)f(syn)m(thesis)g(mo)s(dules)f(ha)m(v)m(e)k (b)s(een)d(applied.)630 2802 y(This)25 b(is)g(primarily)e(designed)i (to)i(allo)m(w)f(w)m(a)m(v)m(eform)i(manipulation,)d(particularly)f (resam-)630 2912 y(pling)k(and)i(v)m(olume)g(c)m(hanges.)150 3079 y Fk(auto-text-mode-alist)630 3189 y Fo(F)-8 b(ollo)m(wing)23 b(Emacs')h(auto-mo)s(de-alist)f(thios)g(pro)m(vides)f(a)i(mec)m(hanism) f(for)g(auto)h(selecting)630 3298 y(a)34 b(TTS)e(text)i(mo)s(de)f (based)f(on)i(the)f(\014lename)f(b)s(eing)g(analyzed.)49 b(Its)33 b(format)h(is)e(exactly)630 3408 y(the)43 b(same)g(as)f(Emacs) h(in)e(that)i(it)g(consists)f(of)g(an)h(alist)e(of)i(dotted)g(pairs)e (of)i(regular)630 3517 y(expression)29 b(and)h(text)h(mo)s(de)f(name.) 150 3685 y Fk(before_synth_hooks)630 3794 y Fo(List)g(of)g(functions)f (to)i(b)s(e)f(run)f(on)h(syn)m(thesised)f(utterances)i(b)s(efore)f(syn) m(thesis)g(starts.)150 3962 y Fk(default-voice-priority-l)o(ist)630 4071 y Fo(List)g(of)g(v)m(oice)h(names.)41 b(The)30 b(\014rst)g(of)g (them)g(a)m(v)-5 b(ailable)30 b(b)s(ecomes)h(the)f(default)g(v)m(oice.) 150 4238 y Fk(default_access_strategy)630 4348 y Fo(Ho)m(w)h(to)g (access)h(units)d(from)h(databases.)150 4515 y Fk (default_after_analysis_h)o(ooks)630 4625 y Fo(The)21 b(default)f(list)f(of)j(functions)d(to)j(b)s(e)e(run)g(on)h(all)f(syn)m (thesized)g(utterances)i(after)f(analysis)630 4734 y(but)30 b(b)s(efore)g(syn)m(thesis.)150 4902 y Fk(default_after_synth_hook)o(s) 630 5011 y Fo(The)48 b(default)g(list)g(of)g(functions)g(to)h(b)s(e)f (run)g(on)g(all)g(syn)m(thesized)g(utterances)h(after)630 5121 y(W)-8 b(a)m(v)m(e)p 847 5121 28 4 v 35 w(Syn)m(th.)79 b(This)42 b(will)e(normally)i(b)s(e)g(nil)g(but)g(if)g(for)h(some)h (reason)g(y)m(ou)f(need)g(to)630 5230 y(c)m(hange)34 b(the)f(gain)g(or)g(rescale)g(*all*)g(w)m(a)m(v)m(eforms)h(y)m(ou)f (could)f(set)i(the)f(function)f(here,)h(in)630 5340 y(y)m(our)d (siteinit.scm.)p eop %%Page: 162 164 162 163 bop 150 -116 a Fo(162)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk (default_before_synth_hoo)o(ks)630 408 y Fo(The)43 b(default)g(list)g (of)h(functions)e(to)j(b)s(e)e(run)g(on)h(all)e(syn)m(thesized)i (utterances)g(b)s(efore)630 518 y(syn)m(thesis)29 b(starts.)150 677 y Fk(diphone_module_hooks)630 787 y Fo(A)f(function)f(or)i(list)e (of)h(functions)f(that)i(will)c(b)s(e)j(applied)e(to)j(the)g(utterance) g(at)g(the)f(start)630 897 y(of)37 b(the)g(diphone)e(mo)s(dule.)59 b(It)37 b(can)g(b)s(e)g(used)f(to)i(map)e(segmen)m(t)i(names)f(to)h (those)f(that)630 1006 y(will)d(b)s(e)h(used)h(b)m(y)g(the)g(diphone)f (database)i(itself.)57 b(T)m(ypical)35 b(use)h(sp)s(eci\014es)p 3313 1006 28 4 v 104 w(and)g($)g(for)630 1116 y(consonan)m(t)26 b(clusters)d(and)i(syllable)d(b)s(oundaries,)i(mapping)f(to)i(dark)g (ll's)e(etc.)40 b(Reduction)630 1225 y(and)25 b(tap)g(t)m(yp)s(e)h (phenomena)e(should)g(probabaly)f(b)s(e)i(done)g(b)m(y)g(p)s(ost)g (lexical)f(rules)g(though)630 1335 y(the)31 b(distinction)d(is)h(not)i (a)f(clear)h(one.)150 1494 y Fk(duffint_params)630 1604 y Fo(Default)h(parameters)g(for)g(Default)g(\(du\013)7 b(\))32 b(in)m(tonation)f(target)j(generation.)46 b(This)30 b(is)h(an)630 1714 y(asso)s(c)26 b(list)f(of)h(parameters.)40 b(Tw)m(o)26 b(parameters)g(are)g(supp)s(orted)e(start)j(sp)s(eci\014es) d(the)i(start)630 1823 y(F0)31 b(in)e(Hertz)i(for)g(an)f(utterance,)h (and)f(end)g(sp)s(eci\014es)f(the)h(end.)150 1983 y Fk (editline_histsize)630 2092 y Fo(The)d(n)m(um)m(b)s(er)f(of)h(lines)e (to)j(b)s(e)f(sa)m(v)m(ed)h(in)e(the)h(users)f(history)g(\014le)h(when) f(a)h(F)-8 b(estiv)j(al)28 b(session)630 2202 y(ends.)50 b(The)34 b(hist\014le)e(is)h Fk(")p Fo(.festiv)-5 b(al)p 1823 2202 V 32 w(history)p Fk(")32 b Fo(in)h(the)h(users)f(home)h (directory)-8 b(.)51 b(Note)35 b(this)630 2311 y(v)-5 b(alue)20 b(is)g(only)g(c)m(hec)m(k)m(ed)j(when)c(the)i(command)g(in)m (terpreter)f(is)g(started,)j(hence)e(this)f(should)630 2421 y(b)s(e)32 b(set)i(in)d(a)i(user's)g Fk(")p Fo(.festiv)-5 b(alrc)p Fk(")31 b Fo(or)i(system)g(init)e(\014le.)47 b(Reseting)33 b(it)g(at)g(the)g(command)630 2531 y(in)m(terpreter)d (will)d(ha)m(v)m(e)32 b(no)e(e\013ect.)150 2690 y Fk(editline_no_echo) 630 2800 y Fo(When)j(running)d(under)i(Emacs)h(as)h(an)f(inferior)e (pro)s(cess,)j(w)m(e)f(don't)g(w)m(an)m(t)h(to)g(ec)m(ho)h(the)630 2909 y(con)m(ten)m(t)d(of)f(the)f(line,)f(only)h(the)g(prompt.)150 3068 y Fk(english_homographs)630 3178 y Fo(A)41 b(list)e(of)h(tok)m (ens)h(that)g(are)g(dealt)g(with)e(b)m(y)h(a)h(homograph)f(disam)m (biguation)e(tree)j(in)630 3288 y(english)p 910 3288 V 31 w(tok)m(en)p 1157 3288 V 34 w(p)s(os)p 1326 3288 V 32 w(cart)p 1514 3288 V 33 w(trees.)150 3447 y Fk (english_phr_break_params)630 3557 y Fo(P)m(arameters)32 b(for)e(English)e(phrase)h(break)i(statistical)f(mo)s(del.)150 3716 y Fk(eou_tree)96 b Fo(End)38 b(of)i(utterance)h(tree.)69 b(A)40 b(decision)e(tree)j(used)d(to)j(determine)e(if)f(the)i(giv)m(en) g(tok)m(en)630 3826 y(marks)35 b(the)g(end)f(of)i(an)f(utterance.)56 b(It)35 b(ma)m(y)h(lo)s(ok)e(one)i(tok)m(en)g(ahead)f(to)h(do)f(this.) 54 b([see)630 3935 y(Section)30 b(9.1)i([Utterance)g(c)m(h)m(unking],)e (page)h(31])150 4095 y Fk(etc-path)96 b Fo(A)39 b(list)e(of)i (directories)e(where)h(binaries)f(sp)s(eci\014c)g(to)i(F)-8 b(estiv)j(al)39 b(ma)m(y)g(b)s(e)f(lo)s(cated.)66 b(This)630 4204 y(v)-5 b(ariable)25 b(is)h(automatically)g(set)h(to)h (LIBDIR/etc/OSTYPE/)g(and)e(that)h(path)f(is)g(added)630 4314 y(to)31 b(the)g(end)e(of)i(the)f(UNIX)h(P)-8 b(A)g(TH)31 b(en)m(vironmen)m(t)f(v)-5 b(ariable.)150 4473 y Fk(festival_version) 630 4583 y Fo(A)30 b(string)g(con)m(taining)g(the)g(curren)m(t)g(v)m (ersion)g(n)m(um)m(b)s(er)f(of)i(the)f(system.)150 4742 y Fk(festival_version_number)630 4852 y Fo(A)38 b(list)e(of)h(ma)5 b(jor,)40 b(minor)c(and)h(subminor)e(v)m(ersion)i(n)m(um)m(b)s(ers)f (of)i(the)f(curren)m(t)h(system.)630 4961 y(e.g.)k(\(1)31 b(0)g(12\).)150 5121 y Fk(FP_duration)630 5230 y Fo(In)20 b(using)f(Fixed)p 1191 5230 V 32 w(Proso)s(dy)h(as)g(used)g(in)f (Phones)h(t)m(yp)s(e)h(utterances)g(and)f(hence)h(Sa)m(yPhones,)630 5340 y(this)29 b(is)h(the)g(\014x)g(v)-5 b(alue)30 b(in)f(ms)h(for)g (phone)g(durations.)p eop %%Page: 163 165 163 164 bop 150 -116 a Fo(Chapter)30 b(33:)41 b(V)-8 b(ariable)30 b(list)2472 b(163)150 299 y Fk(FP_F0)240 b Fo(In)20 b(using)f(Fixed)p 1191 299 28 4 v 32 w(Proso)s(dy)h(as)g (used)g(in)f(Phones)h(t)m(yp)s(e)h(utterances)g(and)f(hence)h(Sa)m (yPhones,)630 408 y(this)29 b(is)h(the)g(v)-5 b(alue)30 b(in)f(Hertz)i(for)g(the)f(monotone)h(F0.)150 565 y Fk(guess_pos)630 675 y Fo(An)36 b(asso)s(c-list)f(of)h(simple)e(part)i(of)g(sp)s(eec)m (h)g(tag)h(to)f(list)f(of)h(w)m(ords)f(in)g(that)i(class.)57 b(This)630 784 y(basically)34 b(only)g(con)m(tains)i(closed)f(class)g (w)m(ords)g(all)f(other)h(w)m(ords)g(ma)m(y)h(b)s(e)f(assumed)f(to)630 894 y(b)s(e)e(con)m(ten)m(t)j(w)m(ords.)47 b(This)31 b(w)m(as)i(built)e(from)h(information)f(in)h(the)h(f2b)f(database)i (and)e(is)630 1003 y(used)e(b)m(y)g(the)g(\013eature)h(gp)s(os.)150 1160 y Fk(home-directory)630 1270 y Fo(Place)g(lo)s(ok)m(ed)f(at)h(for) f(.festiv)-5 b(alrc)30 b(etc.)150 1426 y Fk(hush_startup)630 1536 y Fo(If)g(set)h(to)g(non-nil,)d(the)j(cop)m(yrigh)m(t)g(banner)e (is)g(not)i(displa)m(y)m(ed)e(at)i(start)g(up.)150 1692 y Fk(int_tilt_params)630 1802 y Fo(P)m(arameters)h(for)e(tilt)f(in)m (tonation)h(mo)s(del.)150 1958 y Fk(kal_diphone_dir)630 2068 y Fo(The)g(default)f(directory)h(for)g(the)h(k)-5 b(al)30 b(diphone)e(database.)150 2225 y Fk(lexdir)192 b Fo(The)30 b(directory)g(where)g(the)g(lexicon\(s\))g(are,)h(b)m(y)g (default.)150 2381 y Fk(libdir)192 b Fo(The)36 b(pathname)h(of)g(the)g (run-time)f(libary)f(directory)-8 b(.)60 b(Note)38 b(reseting)e(is)g (almost)h(de\014-)630 2491 y(nitely)g(not)i(what)f(y)m(ou)h(w)m(an)m(t) h(to)f(do.)65 b(This)37 b(v)-5 b(alue)38 b(is)f(automatically)i(set)g (at)g(start)g(up)630 2600 y(from)d(the)h(v)-5 b(alue)37 b(sp)s(ecifed)e(at)j(compile-time)e(or)h(the)g(v)-5 b(alue)36 b(sp)s(ecifed)f(with)h({lib)s(dir)d(on)630 2710 y(the)e(command)f (line.)39 b(A)30 b(n)m(um)m(b)s(er)f(of)i(other)f(v)-5 b(ariables)30 b(dep)s(end)e(on)i(this)g(v)-5 b(alue.)150 2866 y Fk(load-path)630 2976 y Fo(A)38 b(list)e(of)i(directories)f(con) m(taining)h(.scm)g(\014les.)62 b(Used)37 b(for)h(v)-5 b(arious)37 b(functions)f(suc)m(h)i(as)630 3086 y(load)p 802 3086 V 32 w(library)29 b(and)h(require.)41 b(F)-8 b(ollo)m(ws)30 b(the)h(same)h(use)e(as)h(EMA)m(CS.)g(By)g(default)f(it) h(is)e(set)630 3195 y(up)37 b(to)i(the)g(compile-time)e(library)f (directory)i(but)f(ma)m(y)i(b)s(e)f(c)m(hanged)h(b)m(y)f(the)h(user)e (at)630 3305 y(run)31 b(time,)i(b)m(y)g(adding)e(a)i(user's)f(o)m(wn)g (library)e(directory)i(or)h(ev)m(en)g(replacing)f(all)f(of)i(the)630 3414 y(standard)d(library)-8 b(.)38 b([see)32 b(Section)e(6.3)h([Site)f (initialization],)e(page)j(17])150 3571 y Fk(manual-browser)630 3680 y Fo(The)f(Unix)g(program)g(name)h(of)f(y)m(our)h(Netscap)s(e)h (Na)m(vigator)g(bro)m(wser.)41 b([see)31 b(Section)g(7.3)630 3790 y([Getting)g(some)g(help],)e(page)j(26])150 3947 y Fk(manual-url)630 4056 y Fo(The)h(default)g(URL)g(for)h(the)f(F)-8 b(estiv)j(al)34 b(Man)m(ual)g(in)e(h)m(tml)h(format.)51 b(Y)-8 b(ou)34 b(ma)m(y)g(reset)g(this)630 4166 y(to)h(a)g (\014le://.../...)55 b(t)m(yp)s(e)35 b(URL)f(on)g(y)m(ou're)h(lo)s(cal) f(mac)m(hine.)53 b([see)35 b(Section)g(7.3)g([Getting)630 4275 y(some)c(help],)e(page)i(26])150 4432 y Fk(mbrola_database)630 4542 y Fo(The)f(name)g(of)h(the)f(MBR)m(OLA)i(database)f(to)g(usde)f (during)e(MBR)m(OLA)j(Syn)m(thesis.)150 4698 y Fk(mbrola_progname)630 4808 y Fo(The)f(program)g(name)g(for)h(m)m(brola.)150 4964 y Fk(Param)240 b Fo(A)30 b(feature)h(set)g(for)f(arbitrary)f (parameters)i(for)f(mo)s(dules.)150 5121 y Fk(pbreak_ngram_dir)630 5230 y Fo(The)35 b(directory)h(con)m(taining)g(the)g(ngram)f(mo)s(dels) g(for)h(predicting)e(phrase)h(breaks.)58 b(By)630 5340 y(default)30 b(this)f(is)g(the)i(standard)e(library)f(directory)-8 b(.)p eop %%Page: 164 166 164 165 bop 150 -116 a Fo(164)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(phr_break_params) 630 408 y Fo(P)m(arameters)41 b(for)e(phrase)f(break)i(statistical)f (mo)s(del.)67 b(This)37 b(is)i(t)m(yp)s(cal)g(set)h(b)m(y)f(a)h(v)m (oice)630 518 y(selection)30 b(function)f(to)i(the)g(parameters)g(for)f (a)h(particular)d(mo)s(del.)150 664 y Fk(pos_map)144 b Fo(A)27 b(rev)m(erse)h(asso)s(c)g(list)e(of)h(predicted)f(p)s(os)h (tags)h(to)g(some)g(other)f(tag)i(set.)40 b(Note)28 b(using)e(this)630 774 y(c)m(hanges)32 b(the)g(p)s(os)f(tag)i(lo)s(osing)d(the)h(actual)h (predicted)f(v)-5 b(alue.)43 b(Rather)32 b(than)f(map)g(here)630 883 y(y)m(ou)g(ma)m(y)g(\014nd)e(it)h(more)h(appropriate)f(to)h(map)g (tags)g(sets)g(lo)s(cally)e(in)h(the)h(mo)s(dule)d(sthat)630 993 y(use)i(them)g(\(e.g.)43 b(phrasing)28 b(and)i(lexicons\).)150 1139 y Fk(pos_model_dir)630 1249 y Fo(The)c(directory)g(con)m(tains)g (the)h(v)-5 b(arious)26 b(mo)s(dels)f(for)h(the)g(POS)g(mo)s(dule.)38 b(By)26 b(default)g(this)630 1358 y(is)37 b(the)h(same)g(directory)g (as)g(lexdir.)62 b(The)37 b(directory)g(should)f(con)m(tain)j(t)m(w)m (o)g(mo)s(dels:)55 b(a)630 1468 y(part)37 b(of)g(sp)s(eec)m(h)h (lexicon)e(with)g(rev)m(erse)i(log)f(probabilities)d(and)i(an)h(ngram)g (mo)s(del)f(for)630 1577 y(the)31 b(same)f(part)h(of)f(sp)s(eec)m(h)g (tag)i(set.)150 1724 y Fk(pos_ngram_name)630 1833 y Fo(The)f(name)g(of) g(a)g(loaded)g(ngram)g(con)m(taining)g(the)g(a)g(p)s(osteriori)f(ngram) g(mo)s(del)g(for)h(pre-)630 1943 y(dicting)e(part)h(of)h(sp)s(eec)m(h.) 41 b(The)29 b(a)i(priori)d(mo)s(del)h(is)h(held)f(as)h(a)h(lexicon)f (call)f(p)s(oslex.)150 2089 y Fk(pos_p_start_tag)630 2198 y Fo(This)43 b(v)-5 b(ariable's)43 b(v)-5 b(alue)45 b(is)e(the)i(tag)h(most)f(lik)m(ely)e(to)i(app)s(ear)f(b)s(efore)h(the) g(start)g(of)g(a)630 2308 y(sen)m(tence.)40 b(It)24 b(is)f(used)g(when) h(lo)s(oking)e(for)i(p)s(os)g(con)m(text)i(b)s(efore)d(an)h(utterance.) 40 b(T)m(ypically)630 2418 y(it)30 b(should)e(b)s(e)i(some)h(t)m(yp)s (e)f(of)h(punctuation)e(tag.)150 2564 y Fk(pos_pp_start_tag)630 2673 y Fo(This)24 b(v)-5 b(ariable's)25 b(v)-5 b(alue)26 b(is)f(the)i(tag)g(most)g(lik)m(ely)d(to)j(app)s(ear)f(b)s(efore)g(p)s (os)p 3121 2673 28 4 v 32 w(p)p 3204 2673 V 32 w(start)p 3423 2673 V 33 w(tag)i(and)630 2783 y(an)m(y)g(p)s(osition)e(preceding) h(that.)40 b(It)28 b(is)f(t)m(ypically)g(some)h(t)m(yp)s(e)g(of)g(noun) f(tag.)41 b(This)26 b(is)h(used)630 2892 y(to)k(pro)m(vide)f(p)s(os)f (con)m(text)j(for)f(early)f(w)m(ords)f(in)h(an)g(utterance.)150 3039 y Fk(pos_supported)630 3148 y Fo(If)37 b(set)g(to)h(non-nil)c(use) j(part)g(of)g(sp)s(eec)m(h)g(prediction,)g(if)f(nil)f(just)h(get)i(p)s (os)f(information)630 3258 y(from)30 b(the)g(lexicon.)150 3404 y Fk(postlex_mrpa_r_cart_tree)630 3513 y Fo(F)-8 b(or)31 b(remo)m(v)m(e)h(\014nal)d(R)h(when)g(not)g(b)s(et)m(w)m(een)h (v)m(o)m(w)m(els.)150 3660 y Fk(postlex_rules_hooks)630 3769 y Fo(A)40 b(function)e(or)i(list)e(of)i(functions)e(whic)m(h)h (enco)s(de)g(p)s(ost)h(lexical)e(rules.)68 b(This)38 b(will)f(b)s(e)630 3879 y(v)m(oice)31 b(sp)s(eci\014c,)f(though)g(some) h(rules)d(will)g(b)s(e)i(shared)g(across)h(languages.)150 4025 y Fk(postlex_vowel_reduce_car)o(t_tr)o(ee)630 4134 y Fo(CAR)-8 b(T)30 b(tree)h(for)f(v)m(o)m(w)m(el)i(reduction.)150 4281 y Fk(postlex_vowel_reduce_car)o(t_tr)o(ee_h)o(and)630 4390 y Fo(A)e(CAR)-8 b(T)31 b(tree)g(for)f(v)m(o)m(w)m(el)h(reduction.) 40 b(This)29 b(is)g(hand-written.)150 4536 y Fk (postlex_vowel_reduce_tab)o(le)630 4646 y Fo(Mapping)23 b(of)h(v)m(o)m(w)m(els)g(to)h(their)e(reduced)g(form.)38 b(This)22 b(in)g(an)i(asso)s(c)g(list)e(of)i(phoneset)g(name)630 4755 y(to)31 b(an)f(asso)s(c)h(list)e(of)i(full)d(v)m(o)m(w)m(el)j(to)g (reduced)f(form.)150 4902 y Fk(provided)96 b Fo(List)28 b(of)g(\014le)g(names)g(\(omitting)g(.scm\))h(that)h(ha)m(v)m(e)f(b)s (een)f(pro)m(vided.)39 b(This)26 b(list)h(is)h(c)m(hec)m(k)m(ed)630 5011 y(b)m(y)h(the)h(require)e(function)g(to)i(\014nd)e(out)h(if)g(a)g (\014le)g(needs)g(to)h(b)s(e)e(loaded.)40 b(If)29 b(that)h(\014le)f(is) f(al-)630 5121 y(ready)23 b(in)g(this)f(list)h(it)g(is)f(not)i(loaded.) 38 b(T)m(ypically)22 b(a)i(\014le)e(will)f(ha)m(v)m(e)k(\(pro)m(vide)e ('MYNAME\))630 5230 y(at)31 b(its)g(end)f(so)h(that)g(a)g(call)f(to)h (\(require)f('MYNAME\))i(will)d(only)g(load)i(MYNAME.scm)630 5340 y(once.)p eop %%Page: 165 167 165 166 bop 150 -116 a Fo(Chapter)30 b(33:)41 b(V)-8 b(ariable)30 b(list)2472 b(165)150 299 y Fk(server_access_list)630 408 y Fo(If)48 b(non-nil)f(this)g(is)h(the)h(exhaustiv)m(e)g(list)e(of) i(mac)m(hines)f(and)h(domains)e(from)h(whic)m(h)630 518 y(clien)m(ts)33 b(ma)m(y)i(access)g(the)f(serv)m(er.)52 b(This)32 b(is)h(a)h(list)f(of)h(REGEXs)g(that)h(clien)m(t)e(host)h(m)m (ust)630 628 y(matc)m(h.)64 b(Remem)m(b)s(er)38 b(to)h(add)e(the)h(bac) m(kslashes)g(b)s(efore)f(the)h(dots.)64 b([see)39 b(Section)e(28.3)630 737 y([Serv)m(er/clien)m(t)31 b(API],)f(page)h(140])150 897 y Fk(server_deny_list)630 1006 y Fo(If)22 b(non-nil)e(this)i(is)g (a)h(list)e(of)i(mac)m(hines)f(whic)m(h)f(are)i(to)h(b)s(e)e(denied)f (access)j(to)f(the)g(serv)m(er)g(ab-)630 1116 y(solutely)-8 b(,)27 b(irresp)s(ectiv)m(e)f(of)i(an)m(y)f(other)g(con)m(trol)h (features.)39 b(The)27 b(list)f(is)g(a)h(list)f(of)h(REGEXs)630 1225 y(that)35 b(are)g(used)f(to)i(matc)m(hed)f(the)g(clien)m(t)f (hostname.)54 b(This)33 b(list)h(is)f(c)m(hec)m(k)m(ed)k(\014rst,)e (then)630 1335 y(serv)m(er)p 868 1335 28 4 v 33 w(access)p 1138 1335 V 34 w(list,)28 b(then)g(passwd.)39 b([see)30 b(Section)e(28.3)i([Serv)m(er/clien)m(t)f(API],)g(page)g(140])150 1494 y Fk(server_log_file)630 1604 y Fo(If)38 b(set)i(to)f(t)g(serv)m (er)g(log)g(information)e(is)h(prin)m(ted)g(to)h(standard)f(output)h (of)g(the)g(serv)m(er)630 1714 y(pro)s(cess.)g(If)27 b(set)h(to)f(nil)e(no)i(output)g(is)f(giv)m(en.)40 b(If)27 b(set)g(to)h(an)m(ything)f(else)g(the)g(v)-5 b(alue)27 b(is)f(used)630 1823 y(as)h(the)f(name)g(of)h(\014le)e(to)i(whic)m(h)e (serv)m(er)i(log)f(information)f(is)g(app)s(ended.)38 b(Note)27 b(this)e(v)-5 b(alue)630 1933 y(is)33 b(c)m(hec)m(k)m(ed)j (at)f(serv)m(er)f(start)h(time,)g(there)f(is)f(no)h(w)m(a)m(y)h(a)f (clien)m(t)g(ma)m(y)g(c)m(hange)i(this.)50 b([see)630 2042 y(Section)30 b(28.3)i([Serv)m(er/clien)m(t)f(API],)f(page)i(140]) 150 2202 y Fk(server_max_clients)630 2311 y Fo(In)38 b(serv)m(er)g(mo)s(de,)i(the)f(maxim)m(um)e(n)m(um)m(b)s(er)g(of)h (clien)m(ts)g(supp)s(orted)f(at)i(an)m(y)f(one)h(time.)630 2421 y(When)26 b(more)g(that)h(this)e(n)m(um)m(b)s(er)g(of)h(clien)m (ts)f(attac)m(h)j(sim)m(ulaneous)d(the)h(last)g(ones)g(are)h(de-)630 2531 y(nied)d(access.)41 b(Default)25 b(v)-5 b(alue)25 b(is)g(10.)40 b([see)26 b(Section)f(28.3)i([Serv)m(er/clien)m(t)f (API],)g(page)g(140])150 2690 y Fk(server_passwd)630 2800 y Fo(If)20 b(non-nil)e(clien)m(ts)i(m)m(ust)g(send)g(this)f (passwd)g(to)j(the)e(serv)m(er)h(follo)m(w)m(ed)f(b)m(y)g(a)h(newline)d (b)s(efore)630 2909 y(they)38 b(can)g(get)h(a)g(connection.)63 b(It)38 b(w)m(ould)f(b)s(e)g(normal)g(to)i(set)f(this)f(for)h(the)g (particular)630 3019 y(serv)m(er)31 b(task.)41 b([see)31 b(Section)f(28.3)i([Serv)m(er/clien)m(t)f(API],)g(page)g(140])150 3178 y Fk(server_port)630 3288 y Fo(In)f(serv)m(er)i(mo)s(de)e(the)h (inet)g(p)s(ort)f(n)m(um)m(b)s(er)g(the)h(serv)m(er)h(will)c(w)m(ait)j (for)g(connects)h(on.)42 b(The)630 3397 y(default)30 b(v)-5 b(alue)29 b(is)h(1314.)42 b([see)32 b(Section)e(28.3)i([Serv)m (er/clien)m(t)e(API],)h(page)g(140])150 3557 y Fk(sgml_parse_progname) 630 3666 y Fo(The)f(name)h(of)g(the)g(program)f(to)i(use)e(to)i(parse)e (SGML)h(\014les.)41 b(T)m(ypically)28 b(this)i(is)g(nsgml-)630 3776 y(1.0)i(from)e(the)h(sp)f(SGML)h(pac)m(k)-5 b(age.)43 b([see)32 b(Section)e(10.4)j([XML/SGML)e(requiremen)m(ts],)630 3885 y(page)g(41])150 4045 y Fk(sonority_glides)630 4154 y Fo(List)f(of)g(glides)f(\(only)h(go)s(o)s(d)g(w/)h(radio)p 1977 4154 V 32 w(sp)s(eec)m(h\))150 4314 y Fk(sonority_liq)630 4423 y Fo(List)f(of)g(liquids)d(\(only)j(go)s(o)s(d)g(w/)h(radio)p 2015 4423 V 32 w(sp)s(eec)m(h\))150 4583 y Fk(sonority_nas)630 4692 y Fo(List)f(of)g(nasals)g(\(only)g(go)s(o)s(d)g(w/)g(radio)p 1992 4692 V 32 w(sp)s(eec)m(h\))150 4852 y Fk(sonority_v_obst)630 4961 y Fo(List)24 b(of)h(v)m(oiced)h(obstruen)m(ts)e(for)h(use)g(in)e (sonorit)m(y)i(scaling)f(\(only)h(go)s(o)s(d)g(w/)g(radio)p 3430 4961 V 32 w(sp)s(eec)m(h\))150 5121 y Fk(sonority_vless_obst)630 5230 y Fo(List)67 b(of)g(v)m(oiceless)h(obstruen)m(ts)f(for)g(use)g(in) f(sonorit)m(y)h(scaling)g(\(only)g(go)s(o)s(d)g(w/)630 5340 y(radio)p 838 5340 V 32 w(sp)s(eec)m(h\))p eop %%Page: 166 168 166 167 bop 150 -116 a Fo(166)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(SynthTypes)630 408 y Fo(List)42 b(of)h(syn)m(thesis)f(t)m(yp)s(es)h(and)f(functions)g (used)g(b)m(y)g(the)i(utt.syn)m(th)e(function)g(to)i(call)630 518 y(appropriate)29 b(metho)s(ds)h(for)g(w)m(a)m(v)m(e)i(syn)m (thesis.)150 671 y Fk(system-voice-path)630 781 y Fo(Additional)23 b(directory)j(not)g(near)f(the)h(load)g(path)f(where)h(v)m(oices)g(can) g(b)s(e)f(found,)h(this)f(can)630 891 y(b)s(e)30 b(rede\014ned)f(in)g (lib/sitev)-5 b(ars.scm)29 b(if)g(desired.)150 1044 y Fk(tilt_accent_list)630 1154 y Fo(List)h(of)g(ev)m(en)m(ts)i(con)m (taining)e(accen)m(ts)i(in)d(tilt)h(mo)s(del.)150 1307 y Fk(tilt_boundary_list)630 1417 y Fo(List)g(of)g(ev)m(en)m(ts)i(con)m (taining)e(b)s(oundaries)e(in)h(tilt)g(mo)s(del.)150 1570 y Fk(tobi_support_yn_question)o(s)630 1680 y Fo(If)c(set)i(a)f (crude)f(\014nal)f(rise)h(will)e(b)s(e)i(added)g(at)h(utterance)h(that) f(are)h(judged)d(to)j(b)s(e)e(y)m(esy/no)630 1789 y(questions.)40 b(Namely)30 b(ending)f(in)g(a)i(?)40 b(and)30 b(not)h(starting)f(with)f (a)i(wh-for)e(w)m(ord.)150 1943 y Fk(token.letter_pos)630 2052 y Fo(The)41 b(part)h(of)g(sp)s(eec)m(h)f(tag)i(\(v)-5 b(alid)41 b(for)g(y)m(our)h(part)g(of)g(sp)s(eec)m(h)f(tagger\))j(for)e (individual)630 2162 y(letters.)e(When)29 b(the)f(tok)m(enizer)i (decide)d(to)j(pronounce)d(a)i(tok)m(en)h(as)f(a)g(list)e(of)h(letters) h(this)630 2271 y(tag)40 b(is)d(added)h(to)h(eac)m(h)h(letter)e(in)f (the)i(list.)64 b(Note)39 b(this)f(should)e(b)s(e)i(from)g(the)g(part)h (of)630 2381 y(sp)s(eec)m(h)30 b(set)g(used)e(in)h(y)m(our)g(tagger)i (whic)m(h)e(ma)m(y)h(not)g(b)s(e)f(the)g(same)h(one)g(that)g(app)s (ears)f(in)630 2491 y(the)j(actual)h(lexical)e(en)m(try)i(\(if)e(y)m (ou)i(map)e(them)i(afterw)m(ards\).)46 b(This)31 b(sp)s(eci\014cally)f (allo)m(ws)630 2600 y Fk(")p Fo(a)p Fk(")g Fo(to)h(come)h(out)e(as)h (ae)g(rather)f(than)g Fk(@)p Fo(.)150 2754 y Fk(token.prepunctuation) 630 2863 y Fo(A)j(string)f(of)g(c)m(haracters)j(whic)m(h)c(are)i(to)h (b)s(e)e(treated)i(as)f(preceding)e(punctuation)h(when)630 2973 y(tok)m(enizing)45 b(text.)85 b(Prepunctuation)44 b(sym)m(b)s(ols)g(will)e(b)s(e)i(remo)m(v)m(ed)i(from)f(the)g(text)h (of)630 3082 y(the)32 b(tok)m(en)h(and)e(made)g(a)m(v)-5 b(ailable)32 b(through)f(the)g Fk(")p Fo(prepunctuation)p Fk(")f Fo(feature.)45 b([see)32 b(Sec-)630 3192 y(tion)e(15.1)i([T)-8 b(ok)m(enizing],)31 b(page)g(75])150 3345 y Fk(token.punctuation)630 3455 y Fo(A)g(string)e(of)i(c)m(haracters)h(whic)m(h)e(are)h(to)g(b)s (e)f(treated)i(as)f(punctuation)e(when)h(tok)m(enizing)630 3565 y(text.)39 b(Punctuation)23 b(sym)m(b)s(ols)f(will)e(b)s(e)j(remo) m(v)m(ed)h(from)f(the)h(text)g(of)f(the)h(tok)m(en)g(and)f(made)630 3674 y(a)m(v)-5 b(ailable)41 b(through)g(the)h Fk(")p Fo(punctuation)p Fk(")e Fo(feature.)76 b([see)42 b(Section)g(15.1)h([T) -8 b(ok)m(enizing],)630 3784 y(page)31 b(75])150 3937 y Fk(token.singlecharsymbols)630 4047 y Fo(Characters)40 b(whic)m(h)e(ha)m(v)m(e)i(alw)m(a)m(ys)g(to)h(b)s(e)d(split)g(as)i(tok) m(ens.)68 b(This)38 b(w)m(ould)g(b)s(e)h(usual)f(is)630 4156 y(standard)j(text,)46 b(but)41 b(is)g(useful)g(in)f(parsing)h (some)h(t)m(yp)s(es)g(of)g(\014le.)75 b([see)43 b(Section)e(15.1)630 4266 y([T)-8 b(ok)m(enizing],)31 b(page)g(75])150 4419 y Fk(token.unknown_word_name)630 4529 y Fo(When)g(all)f(else)h(fails)f (and)g(a)i(pron)m(unciation)d(for)i(a)h(w)m(ord)f(or)g(c)m(haracter)i (can't)f(b)s(e)e(found)630 4639 y(this)25 b(w)m(ord)h(will)d(b)s(e)j (said)f(instead.)38 b(If)26 b(y)m(ou)g(mak)m(e)h(this)e Fk("")h Fo(them)g(the)g(unkno)m(wn)f(w)m(ord)h(will)630 4748 y(simple)33 b(b)s(e)i(omitted.)55 b(This)34 b(will)e(only)i (really)h(b)s(e)f(called)h(when)f(there)h(is)g(a)g(bug)g(in)f(the)630 4858 y(lexicon)c(and)h(c)m(haracters)i(are)f(missing)d(from)h(the)i (lexicon.)43 b(Note)32 b(this)e(w)m(ord)h(should)f(b)s(e)630 4967 y(in)f(the)i(lexicon.)150 5121 y Fk(token.whitespace)630 5230 y Fo(A)k(string)f(of)h(c)m(haracters)h(whic)m(h)e(are)h(to)g(b)s (e)g(treated)g(as)h(whitespace)e(when)g(tok)m(enizing)630 5340 y(text.)75 b(Whitespace)42 b(is)f(treated)h(as)g(a)g(separator)g (and)f(remo)m(v)m(ed)i(from)e(the)g(text)i(of)f(a)p eop %%Page: 167 169 167 168 bop 150 -116 a Fo(Chapter)30 b(33:)41 b(V)-8 b(ariable)30 b(list)2472 b(167)630 299 y(tok)m(en)34 b(and)e(made)h(a)m(v)-5 b(ailable)33 b(through)f(the)h Fk(")p Fo(whitespace)p Fk(")f Fo(feature.)49 b([see)34 b(Section)e(15.1)630 408 y([T)-8 b(ok)m(enizing],)31 b(page)g(75])150 573 y Fk(token_most_common)630 682 y Fo(A)43 b(list)e(of)i(\(English\))e(w)m(ords)h(whic)m(h)f(w)m(ere)i (found)f(to)h(b)s(e)f(most)h(common)g(in)e(an)i(text)630 792 y(database)31 b(and)f(are)h(used)e(as)i(discriminators)c(in)j(tok)m (en)h(analysis.)150 956 y Fk(token_pos_cart_trees)630 1066 y Fo(This)i(is)g(a)i(list)f(of)g(pairs)g(or)g(regex)h(plus)e(CAR) -8 b(T)34 b(tree.)54 b(T)-8 b(ok)m(ens)36 b(that)f(matc)m(h)g(the)g (regex)630 1176 y(will)30 b(ha)m(v)m(e)j(the)g(CAR)-8 b(T)32 b(tree)h(aplied,)e(setting)h(the)h(result)e(as)h(the)h(tok)m(en) p 3151 1176 28 4 v 34 w(p)s(os)e(feature)i(on)630 1285 y(the)28 b(tok)m(en.)41 b(The)28 b(list)f(is)g(c)m(hec)m(k)m(ed)j(in)d (order)h(and)g(only)f(the)h(\014rst)g(matc)m(h)h(will)c(b)s(e)j (applied.)150 1450 y Fk(tts_hooks)630 1559 y Fo(F)-8 b(unction)34 b(or)h(list)e(of)i(functions)e(to)i(b)s(e)f(called)g (during)f(text)i(to)h(sp)s(eec)m(h.)53 b(The)34 b(function)630 1669 y(tts)p 741 1669 V 33 w(\014le,)42 b(c)m(h)m(unks)e(data)h(in)m (to)f(Utterances)i(of)e(t)m(yp)s(e)g(T)-8 b(ok)m(en)41 b(and)f(applies)e(this)h(ho)s(ok)h(to)630 1778 y(the)30 b(utterance.)41 b(This)27 b(t)m(ypically)i(con)m(tains)g(the)h(utt.syn) m(th)f(function)f(and)h(utt.pla)m(y)-8 b(.)41 b([see)630 1888 y(Chapter)30 b(9)h([TTS],)e(page)j(31])150 2052 y Fk(tts_text_modes)630 2162 y Fo(An)d(a-list)f(of)i(text)g(mo)s(des)e (data)i(for)f(\014le)f(t)m(yp)s(e)i(sp)s(eci\014c)d(tts)j(functions.)39 b(See)29 b(the)h(man)m(ual)630 2271 y(for)g(an)g(example.)41 b([see)31 b(Section)f(9.2)i([T)-8 b(ext)31 b(mo)s(des],)f(page)h(32]) 150 2436 y Fk(UttTypes)96 b Fo(List)33 b(of)i(t)m(yp)s(es)f(and)f (functions)g(used)g(b)m(y)h(the)h(utt.syn)m(th)f(function)f(to)h(call)g (appropriate)630 2545 y(metho)s(ds.)150 2710 y Fk(var-docstrings)630 2819 y Fo(An)c(asso)s(c-list)g(of)g(v)-5 b(ariable)30 b(names)g(and)g(their)f(do)s(cumen)m(tation)h(strings.)150 2984 y Fk(voice-location-trace)630 3093 y Fo(Set)h(t)f(to)h(prin)m(t)e (v)m(oice)j(lo)s(cations)d(as)i(they)g(are)f(found)150 3258 y Fk(voice-locations)630 3367 y Fo(Asso)s(ciation)g(list)f (recording)g(where)h(v)m(oices)h(w)m(ere)g(found.)150 3532 y Fk(voice-path)630 3641 y Fo(List)36 b(of)h(places)f(to)i(lo)s (ok)e(for)h(v)m(oices.)60 b(If)36 b(not)h(set)g(it)g(is)e(initialised)e (from)k(load-path)f(b)m(y)630 3751 y(app)s(ending)28 b Fk(")p Fo(v)m(oices/)p Fk(")j Fo(to)g(eac)m(h)h(directory)d(with)h (system-v)m(oice-path)h(app)s(ended.)150 3915 y Fk(voice_default)630 4025 y Fo(A)41 b(v)-5 b(ariable)39 b(whose)h(v)-5 b(alue)40 b(is)g(a)h(function)e(name)i(that)g(is)f(called)f(on)i(start)g(up)e(to) j(the)630 4134 y(default)30 b(v)m(oice.)41 b([see)31 b(Section)g(6.3)g([Site)f(initialization],)e(page)j(17])150 4299 y Fk(Internal)d(variable)g(containing)g(list)h(of)h(voice)f (descriptions)e(as)630 4408 y Fo(decrib)s(ed)h(b)m(y)j(pro)s(claim)p 1476 4408 V 31 w(v)m(oice.)150 4573 y Fk(xml_dtd_dir)630 4682 y Fo(The)f(directory)g(holding)e(standard)i(DTD)g(form)g(the)h (xml)e(parser.)150 4847 y Fk(xxml_elements)630 4956 y Fo(List)h(of)g(Sc)m(heme)h(actions)f(to)i(p)s(erform)d(on)h(\014nding)e (xxML)i(tags.)150 5121 y Fk(xxml_hooks)630 5230 y Fo(F)-8 b(unction)36 b(or)h(list)f(of)h(functions)e(to)j(b)s(e)e(applied)e(to)k (an)f(utterance)g(when)f(parsed)g(with)630 5340 y(xxML,)31 b(b)s(efore)f(tts)p 1306 5340 V 33 w(ho)s(oks.)p eop %%Page: 168 170 168 169 bop 150 -116 a Fo(168)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(xxml_token_hooks) 630 408 y Fo(F)-8 b(unctions)30 b(to)h(apply)e(to)i(eac)m(h)h(tok)m (en.)150 568 y Fk(xxml_word_features)630 677 y Fo(An)h(asso)s(c)h(list) e(of)i(features)g(to)g(b)s(e)f(added)g(to)i(the)e(curren)m(t)h(w)m(ord) f(when)f(in)h(xxml)f(parse)630 787 y(mo)s(de.)p eop %%Page: 169 171 169 170 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(169)150 299 y Fl(34)80 b(F)-13 b(unction)53 b(list)275 522 y Fo(This)33 b(c)m(hapter)j(con)m(tains)g (a)g(list)e(of)i(functions)e(curren)m(tly)g(de\014ned)h(within)e(F)-8 b(estiv)j(al)35 b(a)m(v)-5 b(ailable)35 b(for)150 631 y(general)40 b(use.)70 b(This)39 b(list)g(is)g(automatically)h (generated)i(from)e(the)g(do)s(cumen)m(tation)g(strings)f(of)i(the)150 741 y(functions)29 b(as)i(they)f(are)h(de\014ned)e(within)f(the)i (system,)h(so)g(has)f(some)h(c)m(hance)g(in)e(b)s(eing)g(up-to-date.) 275 873 y(Note)k(some)g(of)f(the)h(functions)d(whic)m(h)h(ha)m(v)m(e)j (origins)c(in)h(the)i(SIOD)f(system)g(itself)f(are)i(little)e(used)150 983 y(in)e(F)-8 b(estiv)j(al)31 b(and)e(ma)m(y)i(not)g(w)m(ork)f(fully) -8 b(,)29 b(particularly)-8 b(,)29 b(the)h(arra)m(ys.)275 1115 y(Cross)f(references)i(to)g(sections)f(elsewhere)g(in)f(the)i(man) m(ual)f(are)g(giv)m(en)h(where)f(appropriate.)150 1270 y Fk(\(\045\045closure)e(ENVIRONMENT)f(CODE\))630 1380 y Fo(Mak)m(e)32 b(a)f(closure)e(from)h(giv)m(en)h(en)m(vironmen)m(t)f (and)g(co)s(de.)150 1535 y Fk(\(\045\045closure-code)c(CLOSURE\))630 1644 y Fo(Return)k(co)s(de)g(part)g(of)h(closure.)150 1799 y Fk(\(\045\045closure-env)26 b(CLOSURE\))630 1909 y Fo(Return)k(en)m(vironmen)m(t)g(part)g(of)g(closure.)150 2064 y Fk(\(\045\045stack-limit)c(AMOUNT)j(SILENT\))630 2173 y Fo(Set)i(stac)m(ksize)g(to)g(AMOUNT,)g(if)f(SILENT)f(is)g(non)h (nil)e(do)i(it)g(silen)m(tly)-8 b(.)150 2328 y Fk(\(*)30 b(NUM1)f(NUM2)g(...\))630 2438 y Fo(Returns)d(the)g(pro)s(duct)g(of)g (NUM1)i(and)e(NUM2)i(...)40 b(An)26 b(error)g(is)f(giv)m(en)i(is)f(an)m (y)g(argumen)m(t)630 2547 y(is)j(not)i(a)g(n)m(um)m(b)s(er.)150 2702 y Fk(\(*catch)d(TAG)i(.)g(BODY\))630 2812 y Fo(Ev)-5 b(aluate)35 b(BOD)m(Y,)i(if)c(a)j(*thro)m(w)f(o)s(ccurs)g(with)f(T)-8 b(A)m(G)36 b(then)e(return)g(v)-5 b(alue)35 b(sp)s(eci\014ed)e(b)m(y) 630 2921 y(*thro)m(w.)150 3076 y Fk(\(*throw)28 b(TAG)i(VALUE\))630 3186 y Fo(Jump)f(to)i(*catc)m(h)h(with)d(T)-8 b(A)m(G,)32 b(causing)e(*catc)m(h)i(to)f(return)e(V)-10 b(ALUE.)150 3341 y Fk(\(+)30 b(NUM1)f(NUM2)g(...\))630 3451 y Fo(Returns)h(the)h (sum)f(of)g(NUM1)i(and)e(NUM2)i(...)43 b(An)30 b(error)g(is)g(giv)m(en) h(is)f(an)m(y)h(argumen)m(t)g(is)630 3560 y(not)g(a)f(n)m(um)m(b)s(er.) 150 3715 y Fk(\(-)g(NUM1)f(NUM2\))630 3825 y Fo(Returns)38 b(the)i(di\013erence)e(b)s(et)m(w)m(een)i(NUM1)g(and)f(NUM2.)68 b(An)39 b(error)g(is)f(giv)m(en)h(is)g(an)m(y)630 3934 y(argumen)m(t)31 b(is)e(not)i(a)g(n)m(um)m(b)s(er.)150 4089 y Fk(\(/)f(NUM1)f(NUM2\))630 4199 y Fo(Returns)h(the)i(quotien)m (t)f(of)g(NUM1)i(and)d(NUM2.)45 b(An)30 b(error)h(is)f(giv)m(en)i(is)e (an)m(y)h(argumen)m(t)630 4308 y(is)e(not)i(a)g(n)m(um)m(b)s(er.)150 4463 y Fk(\(:backtrace)c([FRAME]\))630 4573 y Fo(This)37 b(function)g(called)g(*immediately*)h(after)g(an)h(error)f(will)d (displa)m(y)i(a)h(bac)m(ktrace)j(of)630 4682 y(the)35 b(functions)f(ev)-5 b(aluated)35 b(b)s(efore)g(the)g(error.)54 b(With)35 b(no)g(argumen)m(ts)g(it)g(lists)f(all)f(stac)m(k)630 4792 y(frames,)h(with)e(the)h(\(p)s(ossibly)d(shortened\))j(forms)g (that)h(w)m(ere)f(ev)-5 b(aluated)33 b(at)h(that)g(lev)m(el.)630 4902 y(With)22 b(a)i(n)m(umeric)d(argumen)m(t)j(it)e(displa)m(ys)f(the) i(form)g(at)g(that)h(lev)m(el)f(in)e(full.)36 b(This)21 b(function)630 5011 y(only)j(w)m(orks)h(at)h(top)g(lev)m(el)f(in)e(the) j(read-ev)-5 b(al-prin)m(t)24 b(lo)s(op)h(\(command)g(in)m (terpreter\).)39 b(Note)630 5121 y(that)34 b(an)m(y)g(v)-5 b(alid)32 b(command)h(will)e(lea)m(v)m(e)j(the)g(bac)m(ktrace)h(stac)m (k)g(empt)m(y)-8 b(.)51 b(Also)33 b(note)h(that)630 5230 y(bac)m(ktrace)26 b(itself)e(do)s(es)g(not)g(reset)h(the)g(bac)m (ktrace,)j(unless)23 b(y)m(ou)h(mak)m(e)i(an)e(error)g(in)f(calling)630 5340 y(it.)p eop %%Page: 170 172 170 171 bop 150 -116 a Fo(170)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(<)h(NUM1)f (NUM2\))630 408 y Fo(Returns)d(t)h(if)e(NUM1)j(is)e(less)f(than)i (NUM2,)i(nil)24 b(otherwise.)39 b(An)26 b(error)h(is)e(giv)m(en)i(is)e (either)630 518 y(argumen)m(t)31 b(is)e(not)i(a)g(n)m(um)m(b)s(er.)150 687 y Fk(\(<=)e(NUM1)h(NUM2\))630 796 y Fo(Returns)k(t)g(if)g(NUM1)h (is)f(less)g(than)g(or)h(equal)f(to)h(NUM2,)i(nil)32 b(otherwise.)53 b(An)34 b(error)g(is)630 906 y(giv)m(en)c(is)g(either)g (argumen)m(t)g(is)g(not)g(a)h(n)m(um)m(b)s(er.)150 1074 y Fk(\(>)f(NUM1)f(NUM2\))630 1184 y Fo(Returns)k(t)i(if)e(NUM1)j(is)d (greater)j(than)e(NUM2,)i(nil)c(otherwise.)52 b(An)34 b(error)g(is)g(giv)m(en)g(is)630 1294 y(either)c(argumen)m(t)h(is)e (not)i(a)f(n)m(um)m(b)s(er.)150 1462 y Fk(\(>=)f(NUM1)h(NUM2\))630 1572 y Fo(Returns)h(t)h(if)e(NUM1)j(is)e(greater)i(than)e(or)h(equal)f (to)i(NUM2,)g(nil)d(otherwise.)44 b(An)31 b(error)630 1681 y(is)e(giv)m(en)i(is)e(either)h(argumen)m(t)h(is)e(not)i(a)g(n)m (um)m(b)s(er.)150 1850 y Fk(\(acost:build_disttabs)25 b(UTTTYPES)j(PARAMS\))630 1960 y Fo(Built)23 b(matrices)h(of)h (distances)e(b)s(et)m(w)m(een)i(eac)m(h)h(ling)p 2391 1960 28 4 v 31 w(item)e(in)f(eac)m(h)i(eac)m(h)h(list)d(of)h(ling)p 3511 1960 V 31 w(items)630 2069 y(in)30 b(utt)m(yp)s(es.)42 b(Uses)31 b(acoustic)g(w)m(eigh)m(ts)g(in)f(P)-8 b(ARAMS)31 b(and)f(sa)m(v)m(e)j(the)e(result)e(as)i(a)h(matrix)630 2179 y(for)e(later)h(use.)150 2347 y Fk(\(acost:file_difference)24 b(FILENAME1)k(FILENAME2)g(PARAMS\))630 2457 y Fo(Load)f(in)f(the)h(t)m (w)m(o)i(named)e(trac)m(ks)h(and)e(\014nd)g(the)h(acoustic)h (di\013erence)f(o)m(v)m(er)h(all)e(based)h(on)630 2567 y(the)k(w)m(eigh)m(ts)f(in)f(P)-8 b(ARAMS.)150 2735 y Fk(\(acost:utt.load_coeffs)24 b(UTT)30 b(PARAMS\))630 2845 y Fo(Load)h(in)f(the)h(acoustic)h(co)s(e\016cien)m(ts)g(in)m(to)f (UTT)f(and)h(set)g(the)g(Acoustic)p 3172 2845 V 34 w(Co)s(e\013s)f (feature)630 2954 y(for)g(eac)m(h)i(segmen)m(t)f(in)e(UTT.)150 3123 y Fk(\(add-doc-var)e(VARNAME)h(DOCSTRING\))630 3232 y Fo(Add)d(do)s(cumen)m(t)h(string)f(DOCSTRING)h(to)h(V)-10 b(ARNAME.)27 b(If)e(DOCSTRING)h(is)f(nil)f(this)630 3342 y(has)41 b(no)g(e\013ect.)74 b(If)40 b(V)-10 b(ARNAME)42 b(already)e(has)h(a)g(do)s(cumen)m(t)g(string)f(replace)h(it)f(with)630 3452 y(DOCSTRING.)150 3620 y Fk(\(and)29 b(CONJ1)g(CONJ2)g(...)h (CONJN\))630 3730 y Fo(Ev)-5 b(aluate)26 b(eac)m(h)h(conjunction)e (CONJn)g(in)g(turn)f(un)m(til)h(one)h(ev)-5 b(aluates)26 b(to)h(nil.)37 b(Otherwise)630 3839 y(return)29 b(v)-5 b(alue)30 b(of)h(CONJN.)150 4008 y Fk(\(append)d(L0)i(L1)g(...\))630 4118 y Fo(App)s(end)e(eac)m(h)k(list)d(to)i(the)g(\014rst)e(list)g(in)g (turn.)150 4286 y Fk(\(append)f(LIST1)h(LIST2\))630 4396 y Fo(Returns)g(LIST2)h(app)s(ended)f(to)i(LIST1,)f(LIST1)f(is)h(distro) m(y)m(ed.)150 4564 y Fk(\(apply)f(FUNC)g(ARGS\))630 4674 y Fo(Call)g(FUNC)i(with)e(AR)m(GS)h(as)h(argumen)m(ts.)150 4843 y Fk(\(apply_hooks)c(HOOK)i(OBJ\))630 4952 y Fo(Apply)d(HOOK\(s\)) h(to)h(OBJ.)g(HOOK)e(is)h(a)g(function)g(or)g(list)f(of)i(functions)e (that)i(tak)m(e)h(one)630 5062 y(argumen)m(t.)150 5230 y Fk(\(apply_method)e(METHOD)h(UTT\))630 5340 y Fo(Apply)h(the)h (appropriate)g(function)f(to)i(utt)f(de\014ned)g(in)f(parameter.)p eop %%Page: 171 173 171 172 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(171)150 299 y Fk(\(approx-equal?)26 b(a)31 b(b)f(diff\))630 408 y Fo(T)-8 b(rue)25 b(is)f(the)i (di\013erence)e(b)s(et)m(w)m(een)i(a)g(b)f(is)f(less)h(than)g(di\013.) 37 b(This)24 b(allo)m(ws)g(equalit)m(y)h(b)s(et)m(w)m(een)630 518 y(\015oats)39 b(whic)m(h)e(ma)m(y)i(ha)m(v)m(e)g(b)s(een)f(written) f(out)i(and)f(read)g(in)f(and)h(hence)g(ha)m(v)m(e)i(sligh)m(tly)630 628 y(di\013eren)m(t)30 b(precision.)150 783 y Fk(\(aref)f(ARRAY)g (INDEX\))630 892 y Fo(Return)h(ARRA)-8 b(Y[INDEX])150 1048 y Fk(\(aset)29 b(ARRAY)g(INDEX)g(VAL\))630 1157 y Fo(Set)i(ARRA)-8 b(Y[INDEX])32 b(=)e(V)-10 b(AL)150 1313 y Fk(\(assoc)29 b(KEY)g(A-LIST\))630 1422 y Fo(Return)h(pair)f (with)g(KEY)h(in)f(A-LIST)h(or)g(nil.)150 1577 y Fk(\(assoc_string)d (key)i(alist\))630 1687 y Fo(Lo)s(ok)37 b(up)e(k)m(ey)i(in)e(alist)h (using)f(string-equal.)58 b(This)34 b(allo)m(w)i(indexing)e(b)m(y)j (string)e(rather)630 1797 y(than)30 b(just)g(sym)m(b)s(ols.)150 1952 y Fk(\(assq)f(ITEM)g(ALIST\))630 2061 y Fo(Returns)g(pairs)f(from) h(ALIST)g(whose)g(car)h(is)f(ITEM)g(or)h(nil)d(if)i(ITEM)g(is)g(not)g (in)g(ALIST.)150 2217 y Fk(\(atom)g(X\))115 b Fo(T)-8 b(rue)30 b(if)f(X)i(is)e(not)i(a)g(cons)f(cells,)g(nil)e(otherwise.)150 2372 y Fk(\(audio_mode)f(MODE\))630 2482 y Fo(Con)m(trol)33 b(audio)f(sp)s(eci\014c)g(mo)s(des.)48 b(Fiv)m(e)33 b(sub)s(commands)e (are)i(supp)s(orted.)47 b(If)33 b(MODE)g(is)630 2591 y(async,)d(start)h(the)f(audio)e(sp)s(o)s(oler)h(so)h(that)g(F)-8 b(estiv)j(al)30 b(need)f(not)h(w)m(ait)g(for)g(a)g(w)m(a)m(v)m(eform)h (to)630 2701 y(complete)25 b(pla)m(ying)f(b)s(efore)g(con)m(tin)m (uing.)38 b(If)24 b(MODE)h(is)f(sync)g(w)m(ait)h(for)g(the)g(audio)e (sp)s(o)s(oler)630 2810 y(to)40 b(empt)m(y)-8 b(,)43 b(if)c(running,)g(and)g(they)h(cause)g(future)f(pla)m(ys)g(to)h(w)m (ait)g(for)f(the)h(pla)m(ying)e(to)630 2920 y(complete)27 b(b)s(efore)g(con)m(tin)m(uing.)39 b(Other)26 b(MODEs)h(are,)i(close)e (whic)m(h)f(w)m(aits)h(for)g(the)g(audio)630 3029 y(sp)s(o)s(oler)37 b(to)j(\014nish)d(an)m(y)i(w)m(a)m(v)m(eforms)h(in)e(the)h(queue)f(and) h(then)f(closes)h(the)h(sp)s(o)s(oler)d(\(it)630 3139 y(will)28 b(restart)k(on)e(the)h(next)g(pla)m(y\),)g(sh)m(utup,)f (stops)h(the)g(curren)m(t)g(w)m(a)m(v)m(eform)h(pla)m(ying)e(and)630 3249 y(empties)c(the)i(queue,)f(and)g(query)f(whic)m(h)g(lists)g(the)h (\014les)f(in)f(the)j(queue.)39 b(The)27 b(queue)f(ma)m(y)630 3358 y(b)s(e)k(up)f(to)i(\014v)m(e)g(w)m(a)m(v)m(eforms)h(long.)40 b([see)31 b(Chapter)f(23)h([Audio)f(output],)g(page)h(103])150 3513 y Fk(\(backquote)d(FORM\))630 3623 y Fo(Bac)m(kquote)33 b(function)c(for)h(expanding)f(forms)h(in)f(macros.)150 3778 y Fk(\(basename)f(PATH)h(SUFFIX\))630 3888 y Fo(Return)36 b(a)h(string)e(with)g(directory)h(remo)m(v)m(ed)i(from)e(basename.)59 b(If)36 b(SUFFIX)h(is)f(sp)s(eci-)630 3998 y(\014ed)31 b(remo)m(v)m(e)i(that)f(from)f(end)g(of)g(P)-8 b(A)g(TH.)33 b(Basically)d(the)i(same)g(function)e(as)i(the)g(UNIX)630 4107 y(command)e(of)h(the)f(same)h(name.)150 4262 y Fk(\(begin)e(.)h (BODY\))630 4372 y Fo(Ev)-5 b(aluate)31 b(s-expressions)e(in)g(BOD)m(Y) i(returning)e(v)-5 b(alue)30 b(of)g(from)g(last)g(expression.)150 4527 y Fk(\(english_token_to_words)24 b(TOKENSTREAM)j(TOKENNAME\))630 4637 y Fo(Returns)h(a)h(list)f(of)h(w)m(ords)f(expanded)g(from)g (TOKENNAME.)h(Note)h(that)g(as)f(this)f(func-)630 4746 y(tion)38 b(ma)m(y)i(b)s(e)e(called)g(recursiv)m(ely)f(TOKENNAME)i(ma)m (y)g(not)g(b)s(e)f(the)h(name)g(of)g(TO-)630 4856 y(KENSTREAM.)150 5011 y Fk(\(Builtin_PostLex)26 b(UTT\))630 5121 y Fo(P)m(ost-lexical)34 b(rules.)48 b(Curren)m(tly)32 b(only)h(v)m(o)m(w)m(el)h(reduction)f (applied)e(to)j(eac)m(h)h(syllable)c(us-)630 5230 y(ing)40 b(p)s(ostlex)p 1081 5230 28 4 v 32 w(v)m(o)m(w)m(el)p 1329 5230 V 34 w(reduce)p 1621 5230 V 33 w(cart)p 1810 5230 V 33 w(tree,)45 b(and)c(the)g(table)h(of)f(v)m(o)m(w)m(el)h (reduction)e(pairs)g(in)630 5340 y(p)s(ostlex)p 919 5340 V 32 w(v)m(o)m(w)m(el)p 1167 5340 V 34 w(reduce)p 1459 5340 V 33 w(table.)p eop %%Page: 172 174 172 173 bop 150 -116 a Fo(172)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(caar)g(X\))115 b Fo(Return)30 b(the)g(\(car)h(\(car)g(X\)\).)150 450 y Fk(\(caddr)e(X\))67 b Fo(Return)30 b(the)g(\(car)h(\(cdr)f(\(cdr)h (X\)\)\).)150 600 y Fk(\(cadr)e(X\))115 b Fo(Return)30 b(the)g(\(car)h(\(cdr)f(X\)\).)150 751 y Fk(\(car)f(DATA1\))630 861 y Fo(Returns)g(car)i(of)g(D)m(A)-8 b(T)g(A1.)43 b(If)30 b(D)m(A)-8 b(T)g(A1)32 b(is)e(nil)e(or)i(a)h(sym)m(b)s(ol,)e(return)h (nil.)150 1011 y Fk(\(cd)f(DIRNAME\))630 1121 y Fo(Change)39 b(directory)f(to)h(DIRNAME,)g(if)f(DIRNAME)h(is)f(nil)e(or)j(not)g(sp)s (eci\014ed)e(c)m(hange)630 1230 y(directory)30 b(to)h(user's)f(HOME)g (directory)-8 b(.)150 1381 y Fk(\(cdar)29 b(X\))115 b Fo(Return)30 b(the)g(\(cdr)g(\(car)h(X\)\).)150 1532 y Fk(\(cdddr)e(X\))67 b Fo(Return)30 b(the)g(\(cdr)g(\(cdr)h(\(cdr)f (X\)\)\).)150 1682 y Fk(\(cddr)f(X\))115 b Fo(Return)30 b(the)g(\(cdr)g(\(cdr)h(X\)\).)150 1833 y Fk(\(cdr)e(DATA1\))630 1943 y Fo(Returns)g(cdr)h(of)h(D)m(A)-8 b(T)g(A1.)43 b(If)30 b(D)m(A)-8 b(T)g(A1)32 b(is)e(nil)e(or)i(a)h(sym)m(b)s(ol,)e (return)h(nil.)150 2093 y Fk(\(cl_mapping)d(UTT)j(PARAMS\))630 2203 y Fo(Imp)s(ose)g(proso)s(dy)f(upto)h(some)h(p)s(ercen)m(tage,)h (and)e(not)g(absolutely)-8 b(.)150 2354 y Fk(\(Pauses)28 b(UTT\))630 2463 y Fo(Predict)i(pause)g(insertion.)150 2614 y Fk(\(Classic_Phrasify)c(UTT\))630 2724 y Fo(Creates)32 b(phrases)f(from)g(w)m(ords,)g(if)g(p)s(os)p 2014 2724 28 4 v 32 w(supp)s(orted)e(is)i(non-nil,)f(a)i(more)f(elab)s(orate)h (sys-)630 2833 y(tem)41 b(of)g(prediction)e(is)h(used.)72 b(Here)41 b(probabilit)m(y)d(mo)s(dels)i(based)g(on)h(part)g(of)g(sp)s (eec)m(h)630 2943 y(and)32 b(B/NB)h(distribution)c(are)j(used)g(to)g (predict)g(breaks.)45 b(This)31 b(system)h(uses)g(standard)630 3052 y(Viterbi)42 b(deco)s(ding)g(tec)m(hniques.)78 b(If)43 b(p)s(os)p 2110 3052 V 32 w(supp)s(orted)e(is)h(nil,)j(a)e(simple)e (CAR)-8 b(T-based)630 3162 y(prediction)29 b(mo)s(del)g(is)g(used.)40 b([see)31 b(Chapter)f(17)h([Phrase)g(breaks],)f(page)h(81])150 3313 y Fk(\(Classic_POS)c(UTT\))630 3422 y Fo(Predict)49 b(part)g(of)h(sp)s(eec)m(h)g(tags)g(for)g(the)g(existing)e(w)m(ord)h (stream.)99 b(If)49 b(the)h(v)-5 b(ariable)630 3532 y(p)s(os)p 770 3532 V 32 w(lex)p 916 3532 V 32 w(name)45 b(is)e(nil)f(nothing)h (happ)s(ens,)j(otherwise)e(it)g(is)f(assumed)g(to)i(p)s(oin)m(t)f(to)h (a)630 3641 y(lexicon)34 b(\014le)f(giving)h(part)g(of)h(sp)s(eec)m(h)g (distribution)c(for)j(w)m(ords.)53 b(An)34 b(ngram)g(mo)s(del)g(\014le) 630 3751 y(should)42 b(b)s(e)h(in)g(p)s(os)p 1329 3751 V 32 w(ngram)p 1614 3751 V 32 w(name.)82 b(The)43 b(system)h(uses)g (standard)f(Viterbi)f(deco)s(ding)630 3861 y(tec)m(hniques.)e([see)32 b(Chapter)d(16)j([POS)d(tagging],)j(page)f(79])150 4011 y Fk(\(Classic_PostLex)26 b(utt\))630 4121 y Fo(Apply)112 b(p)s(ost)h(lexical)g(rules)f(\(b)s(oth)h(builtin)d(and)j(those)h(sp)s (eci\014ed)e(in)630 4230 y(p)s(ostlex)p 919 4230 V 32 w(rules)p 1140 4230 V 31 w(ho)s(oks\).)150 4381 y Fk(\(Classic_Word)27 b(UTT\))630 4491 y Fo(Build)j(the)i(syllable/segmen)m(t/SylStructure)e (from)i(the)g(giv)m(en)h(w)m(ords)e(using)g(the)h(Lexi-)630 4600 y(con.)41 b(Uses)31 b(part)f(of)g(sp)s(eec)m(h)h(information)d(in) i(the)g(lexicon)g(lo)s(ok)g(up)f(if)g(presen)m(t.)150 4751 y Fk(\(clunits:list\))630 4861 y Fo(List)h(names)g(of)g(curren)m (tly)g(loaded)g(cluster)f(databases.)150 5011 y Fk (\(clunits:load_all_coefs)24 b(FILEIDLIST\))630 5121 y Fo(Load)35 b(in)e(co)s(e\016cien)m(ts,)k(signal)d(and)g(join)g(co)s (e\016cien)m(ts)h(for)g(eac)m(h)h(named)e(\014leid.)52 b(This)33 b(is)630 5230 y(can)k(b)s(e)f(called)g(at)i(startup)e(to)i (to)g(reduce)e(the)h(load)g(time)f(during)f(syn)m(thesis)h(\(though)630 5340 y(ma)m(y)31 b(mak)m(e)g(the)g(image)g(large\).)p eop %%Page: 173 175 173 174 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(173)150 299 y Fk(\(clunits:load_db)26 b(PARAMS\))630 408 y Fo(Load)31 b(index)d(\014le)i(for)g(cluster)g (database)h(and)f(set)h(up)e(params,)h(and)g(select)h(it.)150 552 y Fk(\(clunits:select)26 b(NAME\))630 662 y Fo(Select)31 b(a)f(previously)e(loaded)i(cluster)g(database.)150 806 y Fk(\(Clunits_Get_Units)25 b(UTT\))630 915 y Fo(Construct)36 b(Unit)g(relation)f(from)h(the)h(selected)g(units)e(in)g(Segmen)m(t)i (and)f(extract)i(their)630 1025 y(parameters)31 b(from)f(the)g(clunit)f (db.)150 1169 y Fk(\(Clunits_Select)d(UTT\))630 1278 y Fo(Select)31 b(units)d(from)i(curren)m(t)g(databases)i(using)c (cluster)i(selection)g(metho)s(d.)150 1422 y Fk(\(Clunits_Simple_Wave) 25 b(UTT\))630 1532 y Fo(Naiv)m(ely)30 b(concatenate)j(signals)c (together)j(in)m(to)e(a)h(single)e(w)m(a)m(v)m(e)j(\(for)f (debugging\).)150 1676 y Fk(\(Clunits_SmoothedJoin_Wa)o(ve)24 b(UTT\))630 1785 y Fo(smo)s(othed)30 b(join.)150 1929 y Fk(\(Clunits_Windowed_Wave)24 b(UTT\))630 2039 y Fo(Use)g(hamming)e (windo)m(w)g(o)m(v)m(er)i(edges)g(of)g(units)e(to)i(join)e(them,)j(no)f (proso)s(dic)e(mo)s(di\014cation)630 2148 y(though.)150 2292 y Fk(\(cmu_lts_function)k(word)j(feats\))630 2402 y Fo(F)-8 b(unction)38 b(called)g(for)h(CMULEX)f(when)g(w)m(ord)g(is)g (not)g(found)g(in)f(lexicon.)65 b(Uses)39 b(L)-8 b(TS)630 2511 y(rules)29 b(trained)g(from)h(the)h(original)d(lexicon,)i(and)g (lexical)f(stress)h(prediction)f(rules.)150 2655 y Fk (\(cmulex_addenda\))630 2765 y Fo(Add)39 b(en)m(tries)g(to)i(the)e (curren)m(t)h(lexicon)f(\(radio/darpa\).)68 b(These)39 b(are)h(basically)e(w)m(ords)630 2874 y(that)31 b(are)g(not)f(in)f(the) i(CMU)f(lexicon.)150 3018 y Fk(Join)f(all)h(the)f(waves)g(together)f (into)h(the)h(desired)e(output)h(file)630 3128 y Fo(and)h(delete)g(the) h(in)m(termediate)f(ones.)150 3271 y Fk(\(compile-file)d(FILENAME\))630 3381 y Fo(Compile)i(lisp)f(forms)i(in)f(FILENAME.scm)i(to)g (FILENAME.bin.)150 3525 y Fk(\(compile_library\))630 3634 y Fo(Compile)e(all)g(the)h(sc)m(heme)i(\014les)d(in)g(the)h (library)e(directory)-8 b(.)150 3778 y Fk(\(cons)29 b(DATA1)g(DATA2\)) 630 3888 y Fo(Construct)h(cons)h(pair)e(whose)h(car)h(is)e(D)m(A)-8 b(T)g(A1)33 b(and)c(cdr)h(is)g(D)m(A)-8 b(T)g(A2.)150 4032 y Fk(\(cons-array)27 b(DIM)j(KIND\))630 4141 y Fo(Construct)43 b(arra)m(y)g(of)g(size)g(DIM)h(and)e(t)m(yp)s(e)i(KIND.)f(Where)g(KIND) g(ma)m(y)h(b)s(e)e(one)i(of)630 4251 y(double,)29 b(long,)h(string)g (or)g(lisp.)150 4395 y Fk(\(copy-list)e(LIST\))630 4504 y Fo(Return)i(new)f(list)g(with)h(same)g(mem)m(b)s(ers)g(as)h(LIST.)150 4648 y Fk(\(debug_output)c(ARG\))630 4758 y Fo(If)35 b(AR)m(G)h(is)f(non-nil)e(cause)j(all)e(future)h(debug)f(output)h(to)i (b)s(e)d(sen)m(t)i(to)h(cerr,)g(otherwise)630 4867 y(discard)29 b(it)h(\(send)g(it)g(to)h(/dev/n)m(ull\).)150 5011 y Fk(\(def_feature_docstring)24 b(FEATURENAME)k(FEATUREDOC\))630 5121 y Fo(As)23 b(some)h(feature)g(are)g(used)f(directly)f(of)h(stream) h(items)f(with)f(no)i(accompan)m(ying)f(feature)630 5230 y(function,)g(the)g(features)g(are)h(just)e(v)-5 b(alues)22 b(on)h(the)g(feature)g(list.)37 b(This)21 b(function)h(also)g(those)630 5340 y(features)31 b(to)g(ha)m(v)m(e)g(an)g(accompan)m(ying)g(do)s (cumen)m(tation)f(string.)p eop %%Page: 174 176 174 175 bop 150 -116 a Fo(174)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(define)f (\(FUNCNAME)g(ARG1)h(ARG2)h(...\))f(.)h(BODY\))630 408 y Fo(De\014ne)f(a)g(new)f(function)f(call)h(FUNCNAME)i(with)d(argumen)m (ts)i(AR)m(G1,)i(AR)m(G2)f(...)41 b(and)630 518 y(BOD)m(Y.)150 673 y Fk(\(defmac-macro)27 b(MACRONAME)h(FORM\))630 783 y Fo(De\014ne)j(a)f(macro.)42 b(Macro)31 b(expand)f(F)m(ORM)h(in-line.) 150 938 y Fk(\(defPhoneSet)c(PHONESETNAME)g(FEATURES)h(PHONEDEFS\))630 1048 y Fo(De\014ne)42 b(a)g(new)f(phoneset)g(named)g(PHONESETNAME.)g (Eac)m(h)i(phone)d(is)h(describ)s(ed)630 1157 y(with)30 b(a)h(set)g(of)g(features)g(as)g(describ)s(ed)e(in)h(FEA)-8 b(TURES.)31 b(Some)g(of)g(these)g(FEA)-8 b(TURES)630 1267 y(ma)m(y)30 b(b)s(e)f(signi\014can)m(t)f(in)g(v)-5 b(arious)29 b(parts)g(of)h(the)f(system.)41 b(Cop)m(ying)28 b(an)i(existing)e(descrip-)630 1377 y(tion)i(is)f(a)i(go)s(o)s(d)f (start.)42 b([see)31 b(Chapter)f(12)h([Phonesets],)g(page)g(45])150 1532 y Fk(\(defSynthType)c(TYPE)i(.)h(BODY\))630 1641 y Fo(De\014ne)i(a)f(new)g(w)m(a)m(v)m(e)i(syn)m(thesis)e(t)m(yp)s(e.)44 b(TYPE)31 b(is)f(an)h(atomic)h(t)m(yp)s(e)g(that)g(iden)m(ti\014es)e (the)630 1751 y(t)m(yp)s(e)39 b(of)g(syn)m(thesis.)64 b(BOD)m(Y)40 b(is)d(ev)-5 b(aluated)39 b(with)e(argumen)m(t)j(utt,)h (when)c(utt.syn)m(th)i(is)630 1861 y(called)h(with)f(an)i(utterance)g (of)g(t)m(yp)s(e)g(TYPE.)g([see)g(Section)g(14.2)h([Utterance)g(t)m(yp) s(es],)630 1970 y(page)31 b(65])150 2125 y Fk(\(defUttType)c(TYPE)j(.)g (BODY\))630 2235 y Fo(De\014ne)i(a)h(new)f(utterance)h(t)m(yp)s(e.)47 b(TYPE)32 b(is)f(an)h(atomic)h(t)m(yp)s(e)f(that)h(is)f(sp)s(eci\014ed) e(as)j(the)630 2345 y(\014rst)i(argumen)m(t)h(to)g(the)g(function)e (Utterance.)58 b(BOD)m(Y)37 b(is)d(ev)-5 b(aluated)36 b(with)e(argumen)m(t)630 2454 y(utt,)46 b(when)c(utt.syn)m(th)h(is)f (called)g(with)g(an)h(utterance)h(of)f(t)m(yp)s(e)g(TYPE.)f(Y)-8 b(ou)44 b(almost)630 2564 y(alw)m(a)m(ys)33 b(require)d(the)j(function) e(Initialize)f(\014rst.)45 b([see)33 b(Section)f(14.2)h([Utterance)h(t) m(yp)s(es],)630 2673 y(page)d(65])150 2829 y Fk(\(delete-file)c (FILENAME\))630 2938 y Fo(Delete)32 b(named)d(\014le.)150 3093 y Fk(\(delq)g(ITEM)g(LIST\))630 3203 y Fo(Destructiv)m(ely)39 b(delete)g(ITEM)f(from)h(LIST,)e(returns)h(LIST,)f(if)h(ITEM)h(is)e (not)i(\014rst)f(in)630 3313 y(LIST,)e(cdr)h(of)g(LIST)f(otherwise.)61 b(If)36 b(ITEM)h(is)f(not)i(in)d(LIST,)i(LIST)e(is)i(returned)f(un-)630 3422 y(c)m(hanged.)150 3577 y Fk(\(describe_all_modules\))630 3687 y Fo(Prin)m(t)29 b(descriptions)g(of)h(all)f(pro)s(claimed)g(mo)s (dules)150 3842 y Fk(\(describe_module)d(MOD\))630 3952 y Fo(Describ)s(e)k(the)g(mo)s(dule)f(named)h(b)m(y)g(the)h(sym)m(b)s (ol)e(MOD.)150 4107 y Fk(\(directory-entries)c(DIRECTORY)j(&opt)h (NOFLAGDIR\))630 4217 y Fo(Return)i(a)h(list)e(of)h(the)h(en)m(tries)f (in)g(the)g(directory)-8 b(.)44 b(If)31 b(NOFLA)m(GDIR)i(is)e(non-n)m (ull)e(don't)630 4326 y(c)m(hec)m(k)j(to)f(see)g(whic)m(h)e(are)i (directories.)150 4482 y Fk(\(display)d(utt\))630 4591 y Fo(Displa)m(y)37 b(an)g(utterance's)h(w)m(a)m(v)m(eform,)j(F0)d(and)f (segmen)m(t)i(lab)s(els)c(in)h(Xw)m(a)m(v)m(es.)64 b(Xw)m(a)m(v)m(es) 630 4701 y(m)m(ust)30 b(b)s(e)g(running)e(on)i(the)g(curren)m(t)h(mac)m (hine,)f(with)f(a)i(lab)s(eller)d(for)i(this)f(to)i(w)m(ork.)150 4856 y Fk(\(doc)e(SYMBOL\))630 4966 y Fo(Return)h(do)s(cumen)m(tation)g (for)g(SYMBOL.)150 5121 y Fk(\(Donovan_Init)d(PARAMS\))630 5230 y Fo(Initialize)43 b(the)j(Dono)m(v)-5 b(an)46 b(LPC)f(diphone)e (database.)87 b(P)-8 b(ARAMS)45 b(are)h(an)f(asso)s(c)h(list)630 5340 y(of)f(parameter)g(name)g(and)f(v)-5 b(alue.)83 b(The)44 b(t)m(w)m(o)i(parameters)f(are)g(index)p 3217 5340 28 4 v 32 w(\014le)e(\(v)-5 b(alue)45 b(is)p eop %%Page: 175 177 175 176 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(175)630 299 y(a)52 b(pathname)f(for)g Fk(")p Fo(diphlo)s(cs.txt)p Fk(")p Fo(\))e(and)i(diphone)p 2502 299 28 4 v 31 w(\014le)g(\(v)-5 b(alue)51 b(is)f(a)i(pathname)f (for)630 408 y Fk(")p Fo(lp)s(cdiphs.bin)p Fk(")p Fo(\).)35 b([see)d(Section)e(22.1)i([LPC)e(diphone)e(syn)m(thesizer],)i(page)h (101])150 591 y Fk(\(Donovan_Synthesize)25 b(UTT\))630 701 y Fo(Syn)m(thesize)38 b(a)g(w)m(a)m(v)m(eform)i(using)c(the)j(Dono) m(v)-5 b(an)39 b(LPC)e(diphone)f(syn)m(thesizer.)64 b(This)36 b(is)630 810 y(called)26 b(from)h(Syn)m(thesize)f(when)h(the)g(Syn)m (th)p 2163 810 V 32 w(Metho)s(d)g(P)m(arameter)h(has)f(the)g(v)-5 b(alue)27 b(Dono-)630 920 y(v)-5 b(an.)41 b([see)31 b(Section)f(22.1)i ([LPC)e(diphone)e(syn)m(thesizer],)j(page)g(101])150 1103 y Fk(\(downcase)d(SYMBOL\))630 1212 y Fo(Returns)h(a)i(string)f (with)f(the)h(do)m(wncased)h(v)m(ersion)f(of)g(SYMBOL's)g(prin)m (tname.)150 1395 y Fk(\(Duration)e(utt\))630 1504 y Fo(Predict)46 b(segmen)m(tal)h(durations)e(using)g(Duration)p 2442 1504 V 32 w(Metho)s(d)i(de\014ned)e(in)h(P)m(arameters.)630 1614 y(F)-8 b(our)30 b(metho)s(ds)g(are)g(curren)m(tly)f(a)m(v)-5 b(ailable:)40 b(a)m(v)m(erages,)33 b(Klatt)d(rules,)f(CAR)-8 b(T)30 b(tree)h(based,)630 1724 y(and)f(\014xed)f(duration.)150 1906 y Fk(\(Duration_Averages)c(UTT\))630 2016 y Fo(Lab)s(el)42 b(all)f(segmen)m(ts)j(with)d(their)h(a)m(v)m(erage)j(duration)d(found)f (from)h(the)h(asso)s(c)g(list)f(of)630 2125 y(phone)27 b(names)h(to)h(a)m(v)m(erages)h(in)d(phoneme)p 2102 2125 V 32 w(durations.)39 b(This)26 b(mo)s(dule)g(is)h(called)h(through)630 2235 y(the)f(mo)s(dule)e(Duration)h(when)f(the)i(P)m(arameter)h (Duration)p 2673 2235 V 32 w(Metho)s(d)f(is)e(set)j(to)f(Av)m(erages.) 630 2345 y([see)k(Section)f(19.2)i([Av)m(erage)h(durations],)c(page)i (87])150 2527 y Fk(\(Duration_Default)26 b(UTT\))630 2637 y Fo(Lab)s(el)19 b(all)g(segmen)m(ts)j(with)d(a)h(\014xed)g (duration)f(of)h(100ms.)39 b(This)18 b(mo)s(dule)h(is)g(called)h (through)630 2746 y(the)32 b(mo)s(dule)f(Duration)h(when)f(the)h(P)m (arameter)i(Duration)p 2707 2746 V 32 w(Metho)s(d)e(is)f(unset)h(or)g (set)h(to)630 2856 y(Default.)41 b([see)31 b(Section)f(19.1)i([Default) f(durations],)e(page)i(87])150 3039 y Fk(\(duration_find_stretch)24 b(utt)30 b(seg\))630 3148 y Fo(Find)f(an)m(y)i(rela)m(v)-5 b(an)m(t)31 b(duration)e(stretc)m(h.)150 3331 y Fk(\(Duration_Klatt)d (UTT\))630 3440 y Fo(This)32 b(uses)i(an)g(implemen)m(tation)f(of)h (the)h(Klatt)f(Duration)g(rules)e(to)j(predict)f(durations)630 3550 y(for)c(eac)m(h)h(segmen)m(t)g(in)e(UTT.)g(It)h(uses)g(the)g (information)e(in)h(duration)p 3074 3550 V 31 w(klatt)p 3294 3550 V 34 w(params)g(for)630 3660 y(mean)44 b(and)f(lo)m(w)m(er)h (b)s(ound)e(for)i(eac)m(h)h(phone.)80 b(This)42 b(mo)s(dule)h(is)f (called)i(through)f(the)630 3769 y(mo)s(dule)33 b(Duration)g(when)g (the)i(P)m(arameter)g(Duration)p 2558 3769 V 33 w(Metho)s(d)f(is)f(set) i(to)g(Klatt.)52 b(This)630 3879 y(metho)s(d)43 b(mo)s(di\014es)e(its)i (predicted)f(durations)f(b)m(y)i(the)h(factor)g(set)f(in)f(the)i(P)m (arameter)630 3988 y(Duration)p 993 3988 V 32 w(Stretc)m(h)31 b(\(if)f(set\).)42 b([see)31 b(Section)f(19.3)i([Klatt)f(durations],)e (page)i(87])150 4171 y Fk(\(Duration_LogZScores)25 b(utt\))630 4281 y Fo(Predicts)31 b(duration)g(to)i(segmen)m(ts)g(using)d(the)j (CAR)-8 b(T)31 b(tree)i(in)e(duration)p 3185 4281 V 31 w(logzscore)p 3569 4281 V 34 w(tree)630 4390 y(and)25 b(duration)p 1147 4390 V 31 w(logzscore)p 1531 4390 V 34 w(tree)p 1716 4390 V 34 w(silence)f(whic)m(h)g(pro)s(duces)g(a)i (zscore)g(of)g(the)g(log)f(duration.)630 4500 y(The)33 b(v)-5 b(ariable)32 b(duration)p 1509 4500 V 31 w(logzscore)p 1893 4500 V 34 w(ph)p 2029 4500 V 32 w(info)g(con)m(tains)i(\(log\))g (means)f(and)g(std)g(for)g(eac)m(h)630 4609 y(phone)d(in)f(the)h(set.) 150 4792 y Fk(\(Duration_Tree)c(UTT\))630 4902 y Fo(Uses)f(the)g(CAR)-8 b(T)24 b(tree)h(in)e(duration)p 1890 4902 V 32 w(cart)p 2078 4902 V 33 w(tree)i(to)h(predict)d(absolute)h(durations)f(for)i (eac)m(h)630 5011 y(segmen)m(t)j(in)e(UTT.)g(This)f(mo)s(dule)g(is)h (called)g(through)g(the)h(mo)s(dule)f(Duration)g(when)g(the)630 5121 y(P)m(arameter)j(Duration)p 1434 5121 V 32 w(Metho)s(d)e(is)g(set) h(to)g(T)-8 b(ree.)40 b(This)26 b(metho)s(d)h(mo)s(di\014es)e(its)i (predicted)630 5230 y(durations)40 b(b)m(y)h(the)h(factor)g(set)g(in)f (the)g(P)m(arameter)i(Duration)p 2878 5230 V 32 w(Stretc)m(h)f(\(if)f (set\).)75 b([see)630 5340 y(Section)30 b(19.4)i([CAR)-8 b(T)30 b(durations],)g(page)h(88])p eop %%Page: 176 178 176 177 bop 150 -116 a Fo(176)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk (\(Duration_Tree_ZScores)24 b(UTT\))630 408 y Fo(Uses)37 b(the)g(CAR)-8 b(T)36 b(tree)i(in)d(duration)p 1951 408 28 4 v 31 w(cart)p 2138 408 V 34 w(tree)i(to)h(predict)d(z)i(scores)g (duration)f(v)-5 b(alues)630 518 y(for)34 b(eac)m(h)i(segmen)m(t)g(in)d (UTT.)i(The)f(z)h(scores)g(are)g(con)m(v)m(erted)h(bac)m(k)g(to)f (absolute)g(v)-5 b(alues)630 628 y(b)m(y)37 b(the)h(asso)s(c)g(list)e (of)h(phones)g(to)h(means)f(and)g(standard)f(deviations)h(in)f(the)h(v) -5 b(ariable)630 737 y(duration)p 975 737 V 31 w(ph)p 1108 737 V 32 w(info.)69 b(This)38 b(mo)s(dule)h(is)g(called)g(through) h(the)g(mo)s(dule)e(Duration)i(when)630 847 y(the)31 b(P)m(arameter)h(Duration)p 1594 847 V 33 w(Metho)s(d)e(is)g(set)i(to)f (T)-8 b(ree)p 2485 847 V 33 w(ZScores.)42 b(This)29 b(metho)s(d)i(mo)s (di\014es)630 956 y(its)f(predicted)g(durations)f(b)m(y)h(the)h(factor) h(set)f(in)e(the)i(P)m(arameter)h(Duration)p 3318 956 V 32 w(Stretc)m(h)g(\(if)630 1066 y(set\).)42 b([see)31 b(Section)f(19.4)i([CAR)-8 b(T)30 b(durations],)g(page)h(88])150 1218 y Fk(\(duration_unzscore)25 b(phname)k(zscore)g(table\))630 1327 y Fo(Lo)s(ok)i(up)e(phname)g(in)g(table)i(and)e(con)m(v)m(ert)j (xscore)f(bac)m(k)g(to)h(absolute)e(domain.)150 1479 y Fk(\(english_token_to_words)24 b(TOKEN)29 b(NAME\))630 1589 y Fo(Returns)i(a)i(list)e(of)i(w)m(ords)f(for)g(NAME)h(from)f (TOKEN.)f(This)g(allo)m(ws)h(the)g(user)g(to)h(cus-)630 1698 y(tomize)d(v)-5 b(arious)29 b(non-lo)s(cal,)g(m)m(ulti-w)m(ord,)f (con)m(text)j(dep)s(enden)m(t)e(translations)f(of)i(tok)m(ens)630 1808 y(in)m(to)24 b(w)m(ords.)38 b(If)24 b(this)e(function)h(is)g (unset)h(only)f(the)h(builtin)c(translation)j(rules)g(are)h(used,)h(if) 630 1917 y(this)e(is)g(set)h(the)g(builtin)d(rules)h(are)i(not)g(used)g (unless)e(explicitly)f(called.)38 b([see)25 b(Section)e(15.2)630 2027 y([T)-8 b(ok)m(en)31 b(to)h(w)m(ord)e(rules],)f(page)i(75])150 2179 y Fk(\(env-lookup)c(VARNAME)i(ENVIRONMENT\))630 2288 y Fo(Return)h(v)-5 b(alue)29 b(of)i(V)-10 b(ARNAME)31 b(in)e(ENVIR)m(ONMENT.)150 2440 y Fk(\(eof_val\))630 2550 y Fo(Returns)h(sym)m(b)s(ol)g(used)h(to)h(indicate)e(end)g(of)i (\014le.)42 b(Ma)m(y)33 b(b)s(e)d(used)h(\(with)f(eq?\))43 b(to)32 b(deter-)630 2659 y(mine)d(when)h(end)f(of)i(\014le)e(o)s (ccurs)h(while)f(reading)g(\014les.)150 2811 y Fk(\(eq?)g(DATA1)g (DATA2\))630 2921 y Fo(Returns)g(t)i(if)e(D)m(A)-8 b(T)g(A1)33 b(and)d(D)m(A)-8 b(T)g(A2)32 b(are)f(the)g(same)f(ob)5 b(ject.)150 3072 y Fk(\(equal?)28 b(A)i(B\))630 3182 y Fo(t)h(if)e(s-expressions)g(A)i(and)e(B)i(are)g(recursiv)m(ely)e (equal,)h(nil)e(otherwise.)150 3334 y Fk(\(eqv?)h(DATA1)g(DATA2\))630 3443 y Fo(Returns)g(t)i(if)e(D)m(A)-8 b(T)g(A1)33 b(and)d(D)m(A)-8 b(T)g(A2)32 b(are)f(the)g(same)f(ob)5 b(ject)32 b(or)e(equal)g(n)m(um)m (b)s(ers.)150 3595 y Fk(\(error)f(MESSAGE)f(DATA\))630 3705 y Fo(Prin)m(ts)h(MESSA)m(GE)i(ab)s(out)f(D)m(A)-8 b(T)g(A)32 b(and)e(thro)m(ws)g(an)g(error.)150 3856 y Fk(\(eval)f(DATA\))630 3966 y Fo(Ev)-5 b(aluate)31 b(D)m(A)-8 b(T)g(A)32 b(and)d(return)h(result.)150 4118 y Fk(\(exit)f([RCODE]\)) 630 4227 y Fo(Exit)d(from)f(program,)i(if)e(R)m(CODE)h(is)g(giv)m(en)g (it)f(is)h(giv)m(en)g(as)g(an)g(argumen)m(t)h(to)f(the)h(system)630 4337 y(call)j(exit.)150 4489 y Fk(\(exp)f(NUM\))67 b Fo(Return)30 b(e**NUM.)150 4640 y Fk(\(extract_tokens)c(FILE)j(TOKENS)g (OUTFILE\))630 4750 y Fo(Find)h(all)h(o)s(ccurences)h(of)f(TOKENS)g(in) f(FILE)h(and)g(output)h(sp)s(eci\014ed)d(con)m(text)34 b(around)630 4859 y(the)28 b(tok)m(en.)41 b(Results)27 b(are)h(app)s(ended)e(to)i(OUTFILE,)f(if)g(OUTFILE)g(is)g(nil,)f (output)h(go)s(es)630 4969 y(to)k(stdout.)150 5121 y Fk(\(f2b_lts)d(WORD)h(FEATURES\))630 5230 y Fo(Letter)41 b(to)h(sound)d(rule)g(system)i(for)f(f2b)h(\(American)f(English\),)h (uses)f(the)h(NRL)g(L)-8 b(TS)630 5340 y(ruleset)30 b(and)f(maps)h(the) h(result)e(to)i(the)g(radio)e(phone)h(set.)p eop %%Page: 177 179 177 178 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(177)150 299 y Fk(\(fasdump)28 b(FILENAME)g(FORMS\))630 408 y Fo(F)-8 b(ast)32 b(dump)c(F)m(ORMS)j(in) m(to)f(FILENAME.)150 562 y Fk(\(fasl-close)d(TABLE\))630 671 y Fo(Close)j(fasl)g(table.)150 825 y Fk(\(fasl-open)e(FILENAME)g (MODE\))630 934 y Fo(Op)s(en)h(fasl)h(FILENAME)g(as)h(MODE.)g(Returns)e (a)i(fasl-table.)150 1088 y Fk(\(fasload)d(FILENAME)g(ARGS\))630 1198 y Fo(F)-8 b(ast)32 b(load)e(FILENAME.)150 1351 y Fk(\(fasload_library)c(FILENAME\))630 1461 y Fo(Load)31 b(binary)d(\014le)i(from)g(library)150 1614 y Fk(\(fast-print)d(P)j (TABLE\))150 1745 y(\(fast-read)e(TABLE\))150 1877 y(\(fclose)g (FILEP\))630 1987 y Fo(Close)i(\014lep)s(oin)m(t)e(FILEP)-8 b(.)150 2140 y Fk(\(feats.get)28 b(FEATS)h(FEATNAME\))630 2250 y Fo(Return)g(v)-5 b(alue)29 b(of)h(FEA)-8 b(TNAME)30 b(\(whic)m(h)f(ma)m(y)h(b)s(e)f(a)h(simple)e(feature)i(name)f(or)h(a)g (path-)630 2359 y(name\))h(in)e(FEA)-8 b(TS.)30 b(If)g(FEA)-8 b(TS)31 b(is)e(nil)f(a)j(new)f(feature)h(set)g(is)e(created)150 2513 y Fk(\(feats.make\))630 2622 y Fo(Return)h(an)g(new)g(empt)m(y)h (features)f(ob)5 b(ject.)150 2776 y Fk(\(feats.present)26 b(FEATS)j(FEATNAME\))630 2885 y Fo(Return)h(t)g(is)g(FEA)-8 b(TNAME)31 b(is)e(presen)m(t)i(in)e(FEA)-8 b(TS,)30 b(nil)f(otherwise.) 150 3039 y Fk(\(feats.remove)e(FEATS)i(FEATNAME\))630 3148 y Fo(Remo)m(v)m(e)j(feature)f(names)f(FEA)-8 b(TNAME)32 b(from)e(FEA)-8 b(TS.)150 3302 y Fk(\(feats.set)28 b(FEATS)h(FEATNAME)f (VALUE\))630 3411 y Fo(Set)j(FEA)-8 b(TNAME)31 b(to)g(V)-10 b(ALUE)30 b(in)g(FEA)-8 b(TS.)150 3565 y Fk(\(feats.tolisp)27 b(FEATS\))630 3674 y Fo(Giv)m(es)i(a)h(lisp)d(represen)m(tation)i(of)h (the)f(features,)h(this)e(is)g(a)i(debug)f(function)f(and)g(ma)m(y)i (or)630 3784 y(ma)m(y)h(not)g(exist)f(tomorro)m(w.)150 3937 y Fk(\(feats.value_sort)c(FEATURES)i(NAME\))150 4069 y(\(festival_warranty\))630 4178 y Fo(Displa)m(y)i(F)-8 b(estiv)j(al's)30 b(cop)m(yrigh)m(t)h(and)f(w)m(arran)m(t)m(y)-8 b(.)42 b([see)31 b(Chapter)f(2)h([Cop)m(ying],)f(page)h(3])150 4332 y Fk(\(fflush)d(FILEP\))630 4441 y Fo(Flush)h(FILEP)-8 b(.)30 b(If)g(FILEP)g(is)g(nil,)e(then)i(\015ush)f(stdout.)150 4595 y Fk(\(find_month_from_number)24 b(token)29 b(string-number\))630 4704 y Fo(Find)g(the)h(textual)h(represen)m(tation)g(of)f(the)h(mon)m (th)f(from)g(the)g(giv)m(en)h(string)e(n)m(um)m(b)s(er)150 4858 y Fk(find_peak_seg_anchor)c(ie)30 b(pk_pos)630 4967 y Fo(P)m(art)h(of)g(the)f(w)m(orkings)g(of)g(p)s(eak)p 1771 4967 28 4 v 33 w(segmen)m(t)p 2124 4967 V 34 w(anc)m(hor.)150 5121 y Fk(\(Fixed_Prosody)c(UTT\))630 5230 y Fo(Add)d(\014xed)g (duration)f(and)h(\014xed)g(monotone)i(F0)g(to)f(the)g(sgemen)m(ts)h (in)d(UTT.)i(Uses)g(v)-5 b(alues)630 5340 y(of)31 b(FP)p 860 5340 V 32 w(duration)e(and)h(FP)p 1559 5340 V 33 w(F0)h(as)g(\014xed)f(v)-5 b(alues.)p eop %%Page: 178 180 178 179 bop 150 -116 a Fo(178)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(flatten)f(LIST\)) 630 408 y Fo(Return)i(\015atend)g(list)f(\(list)g(of)i(all)e(atoms)i (in)e(LIST\).)150 573 y Fk(\(fopen)g(FILENAME)f(HOW\))630 682 y Fo(Return)i(\014le)f(p)s(oin)m(ter)g(for)i(FILENAME)f(op)s(ened)g (in)f(mo)s(de)h(HO)m(W.)150 847 y Fk(\(format)e(FD)i(FORMATSTRING)d (ARG0)i(ARG1)h(...\))630 956 y Fo(Output)41 b(AR)m(Gs)j(to)f(FD)h (using)d(FR)m(OMA)-8 b(TSTRING.)43 b(F)m(ORMA)-8 b(TSTRING)43 b(is)f(lik)m(e)g(a)630 1066 y(prin)m(tf)34 b(formatstrng.)56 b(FD)37 b(ma)m(y)f(b)s(e)f(a)g(\014ledescriptor,)h(or)f(t)h(\(standard) f(output\))g(or)h(nil)630 1176 y(\(return)d(as)h(a)g(string\).)50 b(Note)36 b(not)e(all)e(prin)m(tf)g(format)j(directiv)m(e)e(are)h(supp) s(orted.)49 b(\045l)33 b(is)630 1285 y(additionally)28 b(supp)s(ort)g(for)i(Lisp)f(ob)5 b(jects.)41 b([see)32 b(Section)e(8.4)h([Sc)m(heme)g(I/O],)g(page)g(29])150 1450 y Fk(\(fread)e(BUFFER)f(FILE\))630 1559 y Fo(BUFFER)j(is)f(a)h (string)e(of)h(length)g(N,)h(N)f(b)m(ytes)h(are)g(read)f(from)g(FILE)g (in)m(to)h(BUFFER.)150 1724 y Fk(\(fringe_command)26 b(SERVER)j(PACKAGE)f(OPERATION)g(ARGS\))630 1833 y Fo(Send)j(command)h (to)h(the)f(fringe)f(serv)m(er)i(SER)-10 b(VER.)31 b(AR)m(GS)i(should)d (b)s(e)h(an)h(asso)s(ciation)630 1943 y(list)d(of)i(k)m(ey-v)-5 b(alue)31 b(pairs.)150 2107 y Fk(\(fringe_command_string)24 b(SERVER)29 b(COMMAND\))630 2217 y Fo(Send)g(COMMAND)i(to)g(the)g (fringe)e(serv)m(er)i(SER)-10 b(VER.)150 2381 y Fk(\(fringe_connect)26 b(SERVER\))630 2491 y Fo(Re-op)s(en)k(the)h(connection)f(to)i(the)e (serv)m(er.)150 2655 y Fk(\(fringe_disconnect)25 b(SERVER\))630 2765 y Fo(Close)30 b(the)g(connection)h(to)g(the)g(serv)m(er.)150 2929 y Fk(\(fringe_read_server_tabl)o(e)24 b(&opt)30 b(FILENAME\))630 3039 y Fo(Read)h(the)f(users)g(table)g(of)g(fringe)g (serv)m(ers,)h(or)f(the)g(table)h(in)e(FILENAME)i(if)e(giv)m(en.)150 3203 y Fk(\(fringe_server)d(&opt)k(NAME\))630 3313 y Fo(Return)d(a)h(connection)g(to)g(a)g(fringe)e(serv)m(er)i(with)e(the)i (giv)m(en)g(name.)40 b(If)27 b(name)g(is)g(omitted)630 3422 y(it)j(defaults)f(to)i Fk(")p Fo(fringe)p Fk(")p Fo(.)150 3587 y Fk(\(fringe_servers\))630 3696 y Fo(Returns)e(a)h(list) f(of)h(the)h(kno)m(w)f(fringe)e(serv)m(ers.)41 b(This)28 b(do)s(esn't)i(guaran)m(tee)i(that)e(they)h(are)630 3806 y(still)d(running.)150 3970 y Fk(\(fseek)h(FILEP)g(OFFSET)f (DIRECTION\))630 4080 y Fo(P)m(osition)i(FILEP)f(to)i(OFFSET.)f(If)g (DIRECTION)f(is)g(0)i(o\013set)g(is)e(from)h(start)g(of)h(\014le.)39 b(If)630 4189 y(DIRECTION)29 b(is)g(1,)i(o\013set)f(is)f(from)h(curren) m(t)g(p)s(osition.)38 b(If)30 b(DIRECTION)f(is)g(2)h(o\013set)h(is)630 4299 y(from)f(end)g(of)g(\014le.)150 4463 y Fk(\(ftell)f(FILEP\))630 4573 y Fo(Returns)g(p)s(osition)g(in)g(\014le)g(FILEP)h(is)g(curren)m (tly)f(p)s(oin)m(ting)g(at.)150 4737 y Fk(\(fwarning)f(MODE\))630 4847 y Fo(F)-8 b(or)44 b(con)m(trolling)e(v)-5 b(arious)42 b(lev)m(els)h(of)g(w)m(arning)f(messages.)81 b(If)42 b(MODE)i(is)e(nil,)j(or)e(not)630 4956 y(sp)s(eci\014ed)c(stop)h(all)g (w)m(arning)f(messages)i(from)f(b)s(eing)f(displa)m(y)m(ed.)70 b(If)40 b(MODE)h(displa)m(y)630 5066 y(w)m(arning)29 b(messages.)150 5230 y Fk(\(fwrite)f(BUFFER)h(FILE\))630 5340 y Fo(W)-8 b(rite)31 b(BUFFER)g(in)m(to)f(FILE.)p eop %%Page: 179 181 179 180 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(179)150 299 y Fk(\(gc\))288 b Fo(Collect)30 b(garbage)i(no)m(w,)e(where)g(gc)h(metho)s(d)f(supp)s (orts)f(it.)150 469 y Fk(\(gc-status)f(OPTION\))630 579 y Fo(Con)m(trol)i(summary)f(information)f(during)g(garbage)k (collection.)40 b(If)29 b(OPTION)g(is)h(t,)g(out-)630 688 y(put)g(information)e(at)j(eac)m(h)h(garbage)g(collection,)e(if)f (nil)g(do)h(gc)h(silen)m(tly)-8 b(.)150 858 y Fk(\(Gen_Viterbi)27 b(UTT\))630 968 y Fo(Applies)37 b(viterbi)g(searc)m(h)i(algorithm)f (based)g(on)h(the)g(parameters)g(in)f(gen)p 3267 968 28 4 v 33 w(vit)p 3409 968 V 32 w(params.)630 1077 y(Basically)30 b(allo)m(ws)f(user)h(candidate)g(selection)g(function)f(com)m(bined)h (with)f(ngrams.)150 1247 y Fk(\(get)g(SYM)h(KEY\))630 1357 y Fo(Get)h(prop)s(ert)m(y)f(named)g(KEY)g(for)g(SYM.)150 1527 y Fk(Gets)f(the)h(c/v)f(value)g(of)h(the)f(segment)g(within)f(a)i (syllable.)150 1667 y(\(get_param)e(name)h(params)f(default\))630 1776 y Fo(Get)j(named)f(parameters)h(in)e(params)h(returning)f(default) g(if)g(its)h(not)h(presen)m(t.)150 1946 y Fk(\(get_url)d(URL)i (OUTFILE\))630 2056 y Fo(Get)40 b(URL)f(and)f(put)g(con)m(ten)m(ts)j (in)c(OUTFILE.)i(Curren)m(tly)e(only)h(h)m(ttp,)j(and)e(\014le)f(t)m (yp)s(e)630 2166 y(URLs)30 b(are)h(supp)s(orted.)150 2336 y Fk(\(getc)e(FILEP\))630 2445 y Fo(Get)j(next)e(c)m(haracter)i (from)f(FILEP)-8 b(.)30 b(Character)h(is)f(returned)f(as)i(a)g(n)m(um)m (b)s(er.)40 b(If)30 b(FILEP)630 2555 y(is)f(nil,)g(or)h(not)h(sp)s (eci\014ed)e(input)f(comes)j(from)f(stdin.)150 2725 y Fk(\(getenv)e(VARNAME\))630 2835 y Fo(Returns)f(v)-5 b(alue)27 b(of)h(UNIX)g(en)m(vironmen)m(t)f(v)-5 b(ariable)27 b(V)-10 b(ARNAME,)28 b(or)g(nil)e(if)g(V)-10 b(ARNAME)630 2944 y(is)29 b(unset.)150 3114 y Fk(\(getpid\))96 b Fo(Return)30 b(pro)s(cess)g(id.)150 3284 y Fk(\(href)f(TABLE)g(KEY\))630 3394 y Fo(Return)h(v)-5 b(alue)29 b(in)h(hash)f(table)h(T)-8 b(ABLE)31 b(with)e(KEY.)150 3564 y Fk(\(hset)g(TABLE)g(KEY)g(VALUE\)) 630 3673 y Fo(Set)i(hash)e(table)h(T)-8 b(ABLE)31 b(KEY)f(to)h(V)-10 b(ALUE.)150 3844 y Fk(\(if)29 b(COND)h(TRUEPART)e(FALSEPART\))630 3953 y Fo(If)21 b(COND)g(ev)-5 b(aluates)22 b(to)g(non-nil)d(ev)-5 b(aluate)22 b(TR)m(UEP)-8 b(AR)g(T)22 b(and)f(return)f(result,)j (otherwise)630 4063 y(ev)-5 b(aluate)32 b(and)f(return)f(F)-10 b(ALSEP)i(AR)g(T.)31 b(If)g(COND)g(is)g(nil)e(and)i(F)-10 b(ALSEP)i(AR)g(T)31 b(is)f(nil,)g(nil)630 4172 y(is)f(returned.)150 4342 y Fk(\(Initialize)e(UTT\))630 4452 y Fo(This)41 b(mo)s(dule)g(should)f(b)s(e)i(called)g(\014rst)f(on)i(all)e (utterances)i(it)f(do)s(es)h(some)g(necessary)630 4562 y(initialization)27 b(of)j(the)g(utterance)h(and)f(loads)f(the)h(base)g (streams)h(with)d(the)j(information)630 4671 y(from)f(the)g(input)f (form.)150 4841 y Fk(\(insert_initial_pause)c(UTT\))630 4951 y Fo(Alw)m(a)m(ys)38 b(ha)m(v)m(e)i(an)d(initial)f(silence)h(if)g (the)h(utterance)h(is)e(non-empt)m(y)-8 b(.)64 b(Insert)38 b(a)g(silence)630 5060 y(segmen)m(t)32 b(after)e(the)h(last)f(segmen)m (t)i(in)d(W)m(ORDITEM)i(in)e(UTT.)150 5230 y Fk(\(insert_pause)e(UTT)i (WORDITEM\))630 5340 y Fo(Insert)h(a)h(silence)e(segmen)m(t)j(after)e (the)h(last)f(segmen)m(t)i(in)d(W)m(ORDITEM)i(in)e(UTT.)p eop %%Page: 180 182 180 181 bop 150 -116 a Fo(180)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(Int_Targets)e (utt\))630 408 y Fo(The)36 b(second)h(stage)h(in)d(F0)j(prediction.)58 b(This)34 b(generates)39 b(F0)e(targets)h(related)f(to)g(seg-)630 518 y(men)m(ts)24 b(using)f(one)i(of)f(three)g(metho)s(ds,)h(a)g (simple)d(hat,)k(linear)d(regression)g(based)h(on)g(T)-8 b(oBI)630 628 y(markings,)30 b(and)g(a)h(simple)e(declining)g(slop)s (e.)41 b(This)29 b(second)i(part)f(deals)g(with)g(actual)h(F0)630 737 y(v)-5 b(alues)37 b(and)h(durations,)h(while)d(the)i(previous)e (section)j(only)e(deals)g(with)g(accen)m(t)j(\(and)630 847 y(b)s(oundary)28 b(tone\))k(assignmen)m(t.)40 b([see)31 b(Chapter)f(18)h([In)m(tonation],)h(page)f(83])150 1000 y Fk(\(Int_Targets_Default)25 b(UTT\))630 1110 y Fo(This)40 b(mo)s(dule)g(creates)k(t)m(w)m(o)f(T)-8 b(argets)43 b(causing)e(a)h(simple)e(do)m(wn)m(w)m(ard)i(con)m(tin)m(uous)f(F0)630 1219 y(through)33 b(the)h(whole)f(utterance.)51 b(The)33 b(co)s(de)h(is)e(in)h(an)g(appropriate)g(named)g(\014le)g(called)630 1329 y(du\016n)m(t.)39 b(This)27 b(mo)s(dule)f(is)h(called)h(when)f (the)i(P)m(arameter)g(In)m(t)p 2776 1329 28 4 v 33 w(Metho)s(d)f(is)g (not)g(set)h(or)f(set)630 1439 y(to)38 b(Default.)60 b(This)35 b(mo)s(dule)g(is)h(called)h(through)f(the)h(In)m(t)p 2665 1439 V 33 w(T)-8 b(argets)38 b(mo)s(dule.)59 b(Optional)630 1548 y(parameters)32 b(for)g(a)h(start)f(v)-5 b(alue)32 b(\(default)f(130\))j(and)e(end)f(v)-5 b(alue)32 b(\(default)f(110\))j (ma)m(y)f(b)s(e)630 1658 y(set)39 b(in)d(the)j(v)-5 b(ariable)36 b(di\016n)m(t)p 1647 1658 V 32 w(params.)63 b(This)36 b(can)j(b)s(e)e(used)g(to)i(generate)h(a)e(monotone)630 1767 y(in)m(tonation)i(with)f(a)i(setting)f(lik)m(e)g(\(set!)72 b(du\016n)m(t)p 2374 1767 V 31 w(params)40 b('\(\(start)i(100\))g (\(end)e(100\)\)\).)630 1877 y([see)31 b(Section)f(18.1)i([Default)f (in)m(tonation],)f(page)i(83])150 2030 y Fk(\(Int_Targets_General)25 b(UTT\))630 2140 y Fo(Add)f(targets)j(based)d(on)h(the)g(functions)f (de\014ned)g(in)g(in)m(t)p 2552 2140 V 32 w(general)p 2867 2140 V 33 w(params.)38 b(This)23 b(metho)s(d)630 2250 y(allo)m(ws)i(quite)h(detailed)f(con)m(trol)i(o)m(v)m(er)g(the)g (general)f(of)g(targets)i(p)s(er)d(syllable,)g(see)i(man)m(ual)630 2359 y(for)22 b(details)f(and)h(examples.)38 b(This)20 b(mo)s(dule)h(is)g(called)h(when)f(the)h(P)m(arameter)i(In)m(t)p 3414 2359 V 33 w(Metho)s(d)630 2469 y(is)33 b(set)h(to)g(General.)50 b(This)32 b(mo)s(dule)f(is)i(called)g(through)f(the)i(In)m(t)p 2885 2469 V 33 w(T)-8 b(argets)35 b(mo)s(dule.)48 b([see)630 2578 y(Section)30 b(18.5)i([General)f(in)m(tonation],)f(page)h(84])150 2732 y Fk(\(Int_Targets_LR)26 b(UTT\))630 2841 y Fo(Predict)38 b(T)-8 b(arget)39 b(F0)g(p)s(oin)m(ts)e(using)g(linear)g(regression)g (from)h(factors)h(suc)m(h)f(as)h(accen)m(t,)630 2951 y(tone,)27 b(stress,)g(p)s(osition)c(in)h(phrase)g(etc.)40 b(This)24 b(utterance)i(mo)s(dule)d(is)i(called)f(through)h(the)630 3061 y(mo)s(dule)c(In)m(t)p 1064 3061 V 33 w(T)-8 b(argets)23 b(when)f(the)h(P)m(arameter)g(In)m(t)p 2345 3061 V 33 w(Metho)s(d)g(is)e(set)i(to)h(T)-8 b(oBI,)23 b(ev)m(en)g(though)630 3170 y(this)31 b(tec)m(hnique)g(is)g(not)i(restricted)e(to)i(the)f(T)-8 b(oBI)33 b(lab)s(elling)28 b(system.)46 b([see)33 b(Section)e(18.3)630 3280 y([T)-8 b(ree)31 b(in)m(tonation],)f(page)i(84])150 3433 y Fk(\(Int_Targets_Relation)25 b(UTT\))150 3565 y(\(Int_Targets_Simple)g(UTT\))630 3674 y Fo(Naiv)m(ely)43 b(add)g(targets)h(for)f(hat)h(shap)s(ed)e(accen)m(ts)j(for)e(eac)m(h)h (accen)m(t)h(in)d(the)i(In)m(tEv)m(en)m(t)630 3784 y(stream.)c(This)23 b(mo)s(dule)h(is)h(called)g(when)f(the)i(P)m(arameter)h(In)m(t)p 2765 3784 V 33 w(Metho)s(d)f(is)f(set)h(to)g(Simple.)630 3893 y(This)c(mo)s(dule)h(is)g(called)g(through)h(the)g(In)m(t)p 2091 3893 V 33 w(T)-8 b(argets)25 b(mo)s(dule.)37 b([see)25 b(Section)f(18.2)i([Simple)630 4003 y(in)m(tonation],)k(page)h(83])150 4156 y Fk(\(Int_Targets_Tilt)26 b(utt\))630 4266 y Fo(Assign)h(Tilt)f (parameters)h(to)i(eac)m(h)f(In)m(tEv)m(en)m(t)h(and)e(then)g(generate) i(the)f(F0)g(con)m(tour)h(and)630 4376 y(assign)h(targets.)150 4529 y Fk(\(intern)e(ATOM\))630 4639 y Fo(In)m(tern)i(A)-8 b(TOM)31 b(on)f(the)g(oblist.)150 4792 y Fk(\(Intonation)d(utt\))630 4902 y Fo(Select)58 b(b)s(et)m(w)m(een)h(di\013eren)m(t)e(in)m (tonation)h(mo)s(dules)e(dep)s(ending)g(on)h(the)i(P)m(arameter)630 5011 y(In)m(t)p 751 5011 V 33 w(Metho)s(d.)49 b(Curren)m(tly)32 b(o\013ers)i(three)f(t)m(yp)s(es:)47 b(Simple,)32 b(hats)h(on)g(eac)m (h)i(con)m(ten)m(t)g(w)m(ord;)630 5121 y(T)-8 b(oBI,)44 b(a)g(tree)g(metho)s(d)e(for)h(predicting)f(T)-8 b(oBI)43 b(accen)m(ts;)52 b(and)43 b(Default)g(a)g(really)g(bad)630 5230 y(metho)s(d)37 b(with)g(a)i(simple)d(do)m(wn)m(w)m(ard)h(sloping)g (F0.)64 b(This)36 b(is)i(the)g(\014rst)f(of)h(a)h(t)m(w)m(o-stage)630 5340 y(in)m(tonation)52 b(prediction)f(pro)s(cess.)108 b(This)51 b(adds)h(accen)m(t-lik)m(e)i(features)f(to)h(syllables,)p eop %%Page: 181 183 181 182 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(181)630 299 y(the)53 b(second,)59 b(In)m(t)p 1277 299 28 4 v 33 w(T)-8 b(argets)53 b(generates)i(the)e (F0)g(con)m(tour)h(itself.)106 b([see)54 b(Chapter)e(18)630 408 y([In)m(tonation],)31 b(page)g(83])150 573 y Fk (\(Intonation_Default)25 b(UTT\))630 682 y Fo(this)31 b(metho)s(d)h(is)f(suc)m(h)h(a)g(bad)g(in)m(tonation)g(mo)s(dule)e (that)j(it)f(do)s(es)g(nothing)f(at)i(all.)45 b(This)630 792 y(utterance)31 b(mo)s(dule)d(is)h(called)g(when)f(the)i(P)m (arameter)h(In)m(t)p 2658 792 V 33 w(Metho)s(d)f(is)f(not)h(set)g(or)g (set)g(to)630 902 y(Default.)38 b(This)22 b(mo)s(dule)f(is)h(called)h (through)f(the)i(In)m(tonation)f(mo)s(dule.)36 b([see)24 b(Section)f(18.1)630 1011 y([Default)31 b(in)m(tonation],)f(page)h(83]) 150 1176 y Fk(\(Intonation_Simple\))630 1285 y Fo(Assign)f(accen)m(ts)i (to)f(eac)m(h)h(con)m(ten)m(t)g(w)m(ord,)e(creating)h(an)g(In)m(tEv)m (en)m(t)g(stream.)42 b(This)28 b(utter-)630 1395 y(ance)36 b(mo)s(dule)d(is)h(called)g(when)g(the)h(P)m(arameter)h(In)m(t)p 2497 1395 V 33 w(Metho)s(d)f(is)f(set)h(to)h(Simple.)52 b(This)630 1504 y(mo)s(dule)32 b(is)g(called)g(through)h(the)h(In)m (tonation)f(mo)s(dule.)48 b([see)34 b(Section)f(18.2)i([Simple)c(in-) 630 1614 y(tonation],)g(page)g(83])150 1778 y Fk(\(Intonation_Tilt)26 b(utt\))630 1888 y Fo(Assign)k(accen)m(t)k(and)c(b)s(oundary)g(In)m (tEv)m(en)m(ts)i(to)g(eac)m(h)h(syllable,)c(and)i(\014ll)e(in)h(spaces) i(with)630 1998 y(silence)d(and)h(connections.)150 2162 y Fk(\(Intonation_Tree)c(UTT\))630 2271 y Fo(Use)32 b(the)f(CAR)-8 b(T)32 b(trees)g(in)e(in)m(t)p 1694 2271 V 32 w(tone)p 1897 2271 V 34 w(cart)p 2087 2271 V 33 w(tree)i(and)f(in)m(t)p 2590 2271 V 32 w(accen)m(t)p 2870 2271 V 35 w(cart)p 3061 2271 V 34 w(tree)h(to)g(create)h(an)630 2381 y(In)m(tEv)m(en)m(t) 27 b(stream)g(of)f(tones)g(and)g(accen)m(ts)h(related)f(to)h (syllables.)37 b(This)24 b(mo)s(dule)h(is)g(called)630 2491 y(through)g(the)h(In)m(tonation)g(mo)s(dule)e(and)h(is)f(selected) j(when)d(the)i(P)m(arameter)h(In)m(t)p 3414 2491 V 33 w(Metho)s(d)630 2600 y(is)i(T)-8 b(oBI.)32 b([see)f(Section)f(18.3)i ([T)-8 b(ree)31 b(in)m(tonation],)f(page)i(84])150 2765 y Fk(\(intro\))144 b Fo(Syn)m(thesize)30 b(an)g(in)m(tro)s(duction)f (to)i(the)f(F)-8 b(estiv)j(al)31 b(Sp)s(eec)m(h)f(Syn)m(thesis)f (System.)150 2929 y Fk(\(intro-spanish\))630 3039 y Fo(Syn)m(thesize)f (an)h(in)m(tro)s(duction)e(to)i(the)g(F)-8 b(estiv)j(al)29 b(Sp)s(eec)m(h)f(Syn)m(thesis)g(System)g(in)g(spanish.)630 3148 y(Spanish)g(v)m(oice)j(m)m(ust)f(already)g(b)s(e)g(selected)h(for) f(this.)150 3313 y Fk(\(item.add_link)c(ITEMFROM)j(ITEMTO\))630 3422 y Fo(Add)g(a)i(link)e(from)g(ITEMFR)m(OM)i(to)g(ITEMTO)f(is)f(the) i(relation)e(ITEMFR)m(OM)i(is)e(in.)150 3587 y Fk (\(item.append_daughter)c(ITEM1)k(ITEM2\))630 3696 y Fo(Add)24 b(a)g(ITEM2)h(a)g(new)f(daugh)m(ter)g(\(righ)m(t-most\))i(to) f(ITEM1)g(in)e(the)h(relation)g(of)h(ITEM1.)630 3806 y(If)31 b(ITEM2)h(is)e(of)i(t)m(yp)s(e)g(item)f(then)g(it)g(is)g(added) g(directly)f(otherwise)h(ITEM2)g(is)g(treated)630 3915 y(as)37 b(a)f(description)f(of)h(an)h(item)f(and)g(a)g(one)h(is)f (created)h(with)e(that)i(description)e(\(name)630 4025 y(features\).)150 4189 y Fk(\(item.daughter1)26 b(ITEM\))630 4299 y Fo(Return)k(the)g(\014rst)g(daugh)m(ter)g(of)h(ITEM,)f(or)g(nil) f(if)g(there)i(is)e(none.)150 4463 y Fk(\(item.daughter1_to)c(s)30 b(relname\))630 4573 y Fo(F)-8 b(ollo)m(w)30 b(daugh)m(ter1)g(links)d (of)j(s)f(in)f(its)h(curren)m(t)g(relation)g(un)m(til)f(an)h(item)g(is) g(found)f(that)i(is)630 4682 y(also)e(in)f(relname,)h(is)g(s)g(is)f(in) g(relname)h(it)g(is)f(returned.)39 b(The)28 b(return)f(item)h(is)f (returned)g(in)630 4792 y(relation)j(relname,)g(or)g(nil)e(if)i(there)g (is)g(nothing)f(in)g(relname.)150 4956 y Fk(\(item.daughter2)d(ITEM\)) 630 5066 y Fo(Return)k(the)g(second)h(daugh)m(ter)f(of)h(ITEM,)f(or)g (nil)f(if)g(there)i(is)e(none.)150 5230 y Fk(\(item.daughtern)d(ITEM\)) 630 5340 y Fo(Return)k(the)g(last)g(daugh)m(ter)h(of)f(ITEM,)h(or)f (nil)e(if)i(there)g(is)g(none.)p eop %%Page: 182 184 182 183 bop 150 -116 a Fo(182)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk (\(item.daughter1_to)c(s)30 b(relname\))630 408 y Fo(F)-8 b(ollo)m(w)29 b(daugh)m(tern)g(links)e(of)i(s)g(in)f(its)h(curren)m(t)g (relation)f(un)m(til)f(an)i(item)g(is)f(found)g(that)i(is)630 518 y(also)e(in)f(relname,)h(is)g(s)g(is)f(in)g(relname)h(it)g(is)f (returned.)39 b(The)28 b(return)f(item)h(is)f(returned)g(in)630 628 y(relation)j(relname,)g(or)g(nil)e(if)i(there)g(is)g(nothing)f(in)g (relname.)150 788 y Fk(\(item.daughters)d(parent\))630 897 y Fo(Return)k(a)g(list)f(of)i(all)e(daugh)m(ters)i(of)f(paren)m(t.) 150 1058 y Fk(\(item.delete)d(ITEM\))630 1167 y Fo(Remo)m(v)m(e)32 b(this)d(item)i(from)e(all)h(relations)f(it)h(is)f(in)h(and)f(delete)i (it.)150 1327 y Fk(\(item.down)d(ITEM\))630 1437 y Fo(Return)i(the)g (item)g(b)s(elo)m(w)g(ITEM,)g(or)g(nil)f(if)g(there)i(is)e(none.)150 1597 y Fk(\(item.exchange_tree)c(FROM)k(TO\))630 1707 y Fo(Exc)m(hanged)39 b(con)m(ten)m(ts)i(of)e(FR)m(OM)h(and)e(TO,)h(and) f(descenden)m(ts)h(of)g(FR)m(OM)h(and)e(TO.)630 1816 y(Returns)29 b(t)i(if)e(successful,)h(or)g(nil)f(if)g(FR)m(OM)i(or)f (TO)g(con)m(tain)h(eac)m(h)g(other.)150 1976 y Fk(\(item.feat)d(ITEM)h (FEATNAME\))630 2086 y Fo(Return)g(v)-5 b(alue)29 b(of)h(FEA)-8 b(TNAME)30 b(\(whic)m(h)f(ma)m(y)h(b)s(e)f(a)h(simple)e(feature)i(name) f(or)h(a)g(path-)630 2196 y(name\))h(of)f(ITEM.)150 2356 y Fk(\(item.features)c(ITEM)k(EVALUATE_FEATURES\)\))630 2465 y Fo(Returns)f(all)h(features)g(in)f(ITEM)h(as)h(an)f(asso)s(c)h (list.)150 2626 y Fk(\(item.first_leaf)26 b(ITEM\))630 2735 y Fo(Returns)34 b(he)g(left)g(most)h(leaf)g(in)e(the)i(tree)g (dominated)f(b)m(y)h(ITEM.)f(This)f(is)h(lik)m(e)f(calling)630 2845 y(item.daugh)m(ter1)e(recursiv)m(ely)e(un)m(til)g(an)h(item)g (with)f(no)h(daugh)m(ters)h(is)e(found.)150 3005 y Fk(\(item.get_utt)e (ITEM\))630 3114 y Fo(Get)k(utterance)h(from)e(giv)m(en)g(ITEM)g(\(if)g (p)s(ossible\).)150 3275 y Fk(\(item.insert)d(ITEM1)i(ITEM2)g (DIRECTION\))630 3384 y Fo(Insert)79 b(ITEM2)h(in)e(ITEM1's)h(relation) g(with)f(repsect)i(to)h(DIRECTION.)d(If)630 3494 y(DIRECTION)59 b(is)f(unsp)s(eci\014ed,)64 b(after,)k(is)59 b(assumed.)127 b(V)-8 b(alid)59 b(DIRECTIONS)f(as)630 3603 y(b)s(efore,)e(after,)i(ab) s(o)m(v)m(e)52 b(and)f(b)s(elo)m(w.)103 b(Use)52 b(the)f(functions)f (item.insert)p 3270 3603 28 4 v 32 w(paren)m(t)i(and)630 3713 y(item.app)s(end)p 1129 3713 V 31 w(daugh)m(ter)44 b(for)f(sp)s(eci\014c)f(tree)j(adjoining.)78 b(If)43 b(ITEM2)g(is)g(of)h(t)m(yp)s(e)f(item)630 3823 y(then)29 b(it)f(is)g(added)g(directly)-8 b(,)29 b(otherwise)f(it)g(is)g(treated) i(as)f(a)g(description)e(of)i(an)g(item)g(and)630 3932 y(new)h(one)h(is)e(created.)150 4092 y Fk(\(item.insert_parent)c(ITEM1) k(ITEM2\))630 4202 y Fo(Insert)f(a)i(new)e(paren)m(t)h(b)s(et)m(w)m (een)h(this)e(ITEM1)h(and)f(its)h(paren)m(tm)g(in)e(ITEM1's)i (relation.)630 4312 y(If)j(ITEM2)h(is)f(of)h(t)m(yp)s(e)g(item)g(then)f (it)g(is)g(added)g(directly)-8 b(,)33 b(otherwise)f(it)h(is)f(treated)h (as)h(a)630 4421 y(description)24 b(of)i(an)g(item)f(and)g(one)h(is)f (created)i(with)e(that)h(description)e(\(name)i(features\).)150 4581 y Fk(\(item.last_leaf)g(ITEM\))630 4691 y Fo(Returns)j(he)h(righ)m (t)g(most)h(leaf)f(in)f(the)h(tree)h(dominated)f(b)m(y)g(ITEM.)g(This)f (is)g(lik)m(e)g(calling)630 4800 y(item.daugh)m(tern)h(recursiv)m(ely)f (un)m(til)g(an)h(item)g(with)f(no)h(daugh)m(ters)h(is)e(found.)150 4961 y Fk(\(item.relation.leafs)c(item)k(relname\))630 5070 y Fo(Return)h(a)g(list)f(of)i(the)f(leafs)h(of)f(this)f(item)h(in) f(this)h(relation.)150 5230 y Fk(\(item.link1)d(ITEM\))630 5340 y Fo(Return)j(\014rst)f(item)h(link)m(ed)f(to)i(ITEM)f(in)f (curren)m(t)h(relation.)p eop %%Page: 183 185 183 184 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(183)150 299 y Fk(\(item.link2)27 b(ITEM\))630 408 y Fo(Return)j(second)g(item)g(link)m(ed)f(to)i(ITEM)f (in)f(curren)m(t)h(relation.)150 557 y Fk(\(item.linkedfrom)c(ITEM\)) 630 667 y Fo(Return)k(the)g(item)g(th)m(t)h(is)f(link)m(ed)e(to)j (ITEM.)150 816 y Fk(\(item.linkn)c(ITEM\))630 925 y Fo(Return)j(last)g (item)g(link)m(ed)f(to)i(ITEM)f(in)f(curren)m(t)h(relation.)150 1074 y Fk(\(item.merge)d(FROM)j(TO\))630 1183 y Fo(Merge)d(FR)m(OM)f (in)m(to)g(TO)f(making)g(them)h(the)g(same)g(items.)39 b(All)24 b(features)j(in)d(FR)m(OM)j(are)630 1293 y(merged)j(in)m(to)h (TO)e(and)h(all)f(references)i(to)g(FR)m(OM)g(are)g(made)g(to)g(p)s (oin)m(t)e(to)i(TO.)150 1442 y Fk(\(item.move_tree)26 b(FROM)j(TO\))630 1551 y Fo(Mo)m(v)m(e)42 b(con)m(ten)m(ts,)i(and)c (descenden)m(ts)g(of)g(FR)m(OM)h(to)f(TO.)g(Old)e(daugh)m(ters)i(of)g (TO)g(are)630 1661 y(deleted.)77 b(FR)m(OM)43 b(will)d(b)s(e)i(deleted) g(to)s(o)h(if)f(it)g(is)f(b)s(eing)g(view)m(ed)h(as)h(the)g(same)g (same)630 1771 y(relation)31 b(as)g(TO.)g(FR)m(OM)h(will)d(b)s(e)i (deleted)g(from)g(its)g(curren)m(t)g(place)h(in)e(TO's)g(relation.)630 1880 y(Returns)f(t)i(if)e(successful,)h(returns)f(nil)f(if)i(TO)f(is)h (within)e(FR)m(OM.)150 2029 y Fk(\(item.name)g(ITEM\))630 2138 y Fo(Returns)d(the)g(name)h(of)g(ITEM.)f([see)i(Section)e(14.5)i ([Accessing)f(an)g(utterance],)i(page)e(68])150 2287 y Fk(\(item.next)i(ITEM\))630 2397 y Fo(Return)i(the)g(next)h(ITEM)f (in)f(the)h(curren)m(t)g(relation,)g(or)h(nil)d(if)h(there)i(is)e(no)i (next.)150 2545 y Fk(\(item.next_item)26 b(ITEM\))630 2655 y Fo(Will)i(giv)m(e)j(next)g(item)f(in)f(this)g(relation)h (visiting)e(ev)m(ery)j(item)f(in)f(the)i(relation)e(un)m(til)g(the)630 2765 y(end.)40 b(T)-8 b(ra)m(v)m(erses)32 b(in)d(pre-order,)h(ro)s(ot)g (follo)m(w)m(ed)g(b)m(y)h(daugh)m(ters)f(\(then)g(siblings\).)150 2913 y Fk(\(item.next_leaf)c(ITEM\))630 3023 y Fo(Return)35 b(the)g(next)h(leaf)f(item)g(\(i.e.)57 b(one)35 b(with)g(no)g(daugh)m (ters\))h(in)e(this)g(relation.)56 b(Note)630 3133 y(this)29 b(ma)m(y)i(tra)m(v)m(erse)h(up)d(and)h(do)m(wn)g(the)h(relation)e(tree) i(signi\014can)m(tly)e(to)i(\014nd)e(it.)150 3281 y Fk (\(item.next_link)d(ITEM\))630 3391 y Fo(Return)k(next)g(item)g(lic)m (k)m(ed)g(to)h(the)g(same)g(item)f(ITEM)g(is)f(link)m(ed)g(to.)150 3540 y Fk(\(item.parent)e(ITEM\))630 3649 y Fo(Return)j(the)g(item)g (of)h(ITEM,)f(or)g(nil)f(if)g(there)i(is)e(none.)150 3798 y Fk(\(item.parent_to)d(s)k(relname\))630 3907 y Fo(Find)j(the)h(\014rst)f(ancestor)i(of)f(s)g(in)f(its)g(curren)m(t)h (relation)f(that)i(is)e(also)h(in)e(relname.)51 b(s)34 b(is)630 4017 y(treated)29 b(as)g(an)g(ancestor)g(of)g(itself)e(so)i (if)e(s)h(is)g(in)f(relname)h(it)g(is)f(returned.)39 b(The)28 b(returned)630 4127 y(v)-5 b(alue)30 b(is)f(in)g(will)f(b)s(e) i(in)f(relation)g(relname)h(or)g(nil)f(if)g(there)i(isn't)e(one.)150 4275 y Fk(\(item.prepend_daughter)24 b(ITEM1)29 b(ITEM2\))630 4385 y Fo(Add)f(a)i(ITEM2)f(a)g(new)g(daugh)m(ter)g(\(left-most\))i(to) f(ITEM1)f(in)f(the)h(relation)f(of)i(ITEM1.)630 4495 y(If)h(ITEM2)h(is)e(of)i(t)m(yp)s(e)g(item)f(then)g(it)g(is)g(added)g (directly)f(otherwise)h(ITEM2)g(is)g(treated)630 4604 y(as)37 b(a)f(description)f(of)h(an)h(item)f(and)g(a)g(one)h(is)f (created)h(with)e(that)i(description)e(\(name)630 4714 y(features\).)150 4862 y Fk(\(item.prev)28 b(ITEM\))630 4972 y Fo(Return)e(the)h(previous)e(ITEM)h(in)f(the)i(curren)m(t)f (relation,)h(or)f(nil)f(if)g(there)i(is)f(no)g(previous.)150 5121 y Fk(\(item.raw_feat)g(ITEM)k(FEATNAME\))630 5230 y Fo(Return)42 b(v)-5 b(alue)42 b(of)h(FEA)-8 b(TNAME)43 b(as)g(nativ)m(e)g(features)g(structure)g(\(whic)m(h)e(ma)m(y)j(b)s(e)e (a)630 5340 y(simple)28 b(feature)j(name)g(or)f(a)h(pathname\))f(of)h (ITEM.)p eop %%Page: 184 186 184 185 bop 150 -116 a Fo(184)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(item.relation)d (ITEM)k(RELATIONNAME\))630 408 y Fo(Return)i(the)i(item)f(suc)m(h)g (whose)g(relation)f(is)g(RELA)-8 b(TIONNAME.)34 b(If)f(ITEM)g(is)f(not) h(in)630 518 y(RELA)-8 b(TIONNAME)30 b(then)h(nil)d(is)h(return.)150 679 y Fk(\(item.relation.append_da)o(ught)o(er)24 b(parent)29 b(relname)f(daughter\))630 788 y Fo(Mak)m(e)k(add)e(daugh)m(ter)g(to)h (paren)m(t)g(as)g(a)f(new)g(daugh)m(ter)h(in)e(relname.)150 949 y Fk(\(item.relation.daughter1)24 b(item)29 b(relname\))630 1059 y Fo(Return)h(the)g(\014rst)g(daugh)m(ter)g(of)h(this)e(item)h(in) f(this)h(relation.)150 1219 y Fk(\(item.relation.daughter2)24 b(item)29 b(relname\))630 1329 y Fo(Return)h(the)g(second)h(daugh)m (ter)f(of)h(this)e(item)h(in)f(this)g(relation.)150 1490 y Fk(\(item.relation.daughtern)24 b(item)29 b(relname\))630 1599 y Fo(Return)h(the)g(\014nal)f(daugh)m(ter)i(of)f(this)g(item)g(in) f(this)g(relation.)150 1760 y Fk(\(item.relation.daughters)24 b(parent)k(relname\))630 1870 y Fo(Return)i(a)g(list)f(of)i(all)e (daugh)m(ters)i(of)f(paren)m(t)h(b)m(y)f(relname.)150 2030 y Fk(\(item.relation.first)25 b(item)k(relname\))630 2140 y Fo(Return)h(the)g(most)h(previous)e(item)h(from)g(this)f(item)h (in)f(this)g(relation.)150 2301 y Fk(\(item.relation.insert)c(si)k (relname)g(newsi)g(direction\))630 2410 y Fo(Insert)35 b(newsi)f(in)g(relation)h(relname)g(with)f(resp)s(ect)h(to)h (direction.)55 b(If)35 b(direction)f(is)g(om-)630 2520 y(mited)25 b(after)h(is)f(assumed,)h(v)-5 b(alid)25 b(directions)f(are) i(after)g(b)s(efore,)h(ab)s(o)m(v)m(e)g(and)e(b)s(elo)m(w.)39 b(Note)630 2629 y(y)m(ou)31 b(should)e(use)i(item.relation.app)s(end)p 2077 2629 28 4 v 31 w(daugh)m(ter)g(for)g(tree)h(adjoining.)40 b(newsi)30 b(ma)m(yb)s(e)630 2739 y(a)h(item)f(itself)f(of)i(a)f(LISP)g (description)e(of)j(one.)150 2900 y Fk(\(item.relation.leafs)25 b(item)k(relname\))630 3009 y Fo(Return)h(a)g(list)f(of)i(the)f(leafs)h (of)f(this)f(item)h(in)f(this)h(relation.)150 3170 y Fk(\(item.relation.name)25 b(ITEM\))630 3280 y Fo(Return)30 b(the)g(name)h(of)f(the)h(relation)e(this)h(ITEM)g(is)f(curren)m(tly)g (b)s(eing)g(view)m(ed)h(through.)150 3440 y Fk(\(item.relation.next)25 b(item)k(relname\))630 3550 y Fo(Return)h(the)g(next)h(item)f(in)f (this)g(relation.)150 3711 y Fk(\(item.relation.parent)c(item)k (relname\))630 3820 y Fo(Return)h(the)g(paren)m(t)h(of)f(this)g(item)g (in)f(this)g(relation.)150 3981 y Fk(\(item.relation.prev)c(item)k (relname\))630 4091 y Fo(Return)h(the)g(previous)f(item)h(in)f(this)g (relation.)150 4251 y Fk(\(item.relation.remove)c(ITEM)k (RELATIONNAME\))630 4361 y Fo(Remo)m(v)m(e)44 b(this)d(item)h(from)g (Relation,)j(if)c(it)h(ap)s(ears)f(in)g(no)h(other)h(relation)e(it)h (will)e(b)s(e)630 4471 y(deleted)25 b(to)s(o,)i(in)e(con)m(trast)h (item.delete)g(will)d(remo)m(v)m(e)k(an)e(item)g(from)g(all)f(other)i (relations,)630 4580 y(while)40 b(this)g(just)h(remo)m(v)m(es)i(it)e (from)h(this)e(relation.)74 b(Note)43 b(this)d(will)f(also)j(remo)m(v)m (e)h(all)630 4690 y(daugh)m(ters)30 b(of)h(this)e(item)h(in)f(this)h (relation)f(from)h(this)f(relation.)150 4850 y Fk(\(item.relations)d (ITEM\))630 4960 y Fo(Return)k(a)g(list)f(of)i(names)f(of)h(the)f (relations)g(this)f(item)h(is)f(in.)150 5121 y Fk (\(item.remove_feature)c(ITEM)k(FNAME\))630 5230 y Fo(Remo)m(v)m(e)j (feature)f(named)f(FNAME)h(from)f(ITEM.)g(Returns)f(t)i(is)e (successfully)f(remo)m(v)m(e,)630 5340 y(nil)g(if)i(not)g(found.)p eop %%Page: 185 187 185 186 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(185)150 299 y Fk(\(item.root)28 b(s\))630 408 y Fo(F)-8 b(ollo)m(w)31 b(paren)m(t)f(link)f(un)m(til)f (s)i(has)g(no)h(paren)m(t.)150 566 y Fk(\(item.set_feat)26 b(ITEM)k(FEATNAME)e(VALUE\))630 676 y Fo(Set)j(FEA)-8 b(TNAME)31 b(to)g(V)-10 b(ALUE)30 b(in)g(ITEM.)150 833 y Fk(\(item.set_function)25 b(ITEM)30 b(FEATNAME)e(FEATFUNCNAME\))630 943 y Fo(Set)j(FEA)-8 b(TNAME)31 b(to)g(feature)g(function)e(name)h (FEA)-8 b(TFUNCNAME)32 b(in)d(ITEM.)150 1100 y Fk(\(item.set_name)d (ITEM)k(NAME\))630 1210 y Fo(Sets)54 b(ITEM's)f(name)g(to)h(NAME.)h ([see)f(Section)f(14.5)i([Accessing)f(an)g(utterance],)630 1319 y(page)31 b(68])150 1477 y Fk(\(item.up)d(ITEM\))630 1587 y Fo(Return)i(the)g(item)g(ab)s(o)m(v)m(e)i(ITEM,)e(or)g(nil)f(if) g(there)i(is)e(none.)150 1744 y Fk(\(kal_diphone_const_clust)o(ers)24 b(UTT\))630 1854 y Fo(Iden)m(tify)g(consonan)m(t)i(clusters,)f(dark)g (ls)f(etc)i(in)e(the)h(segmen)m(t)h(stream)f(ready)g(for)g(diphone)630 1963 y(resyn)m(thesis.)37 b(This)22 b(ma)m(y)h(b)s(e)g(called)f(as)i(a) f(p)s(ost)g(lexical)f(rule)g(through)h(p)s(oslex)p 3286 1963 28 4 v 31 w(rule)p 3470 1963 V 32 w(ho)s(oks.)150 2121 y Fk(\(kal_diphone_fix_phone_n)o(ame)h(UTT)29 b(SEG\))630 2230 y Fo(Add)38 b(the)h(feature)g(diphone)p 1637 2230 V 31 w(phone)p 1906 2230 V 32 w(name)g(to)h(giv)m(en)e(segmen)m(t)i (with)e(the)h(appropriate)630 2340 y(name)34 b(for)g(constructing)g(a)g (diphone.)50 b(Basically)34 b(adds)p 2624 2340 V 100 w(if)f(either)g(side)g(is)h(part)f(of)i(the)630 2450 y(same)40 b(consonan)m(t)h(cluster,)h(adds)d($)h(either)f(side)g(if)g (in)f(di\013eren)m(t)i(syllable)d(for)j(preced-)630 2559 y(ing/succeeding)30 b(v)m(o)m(w)m(el)h(syllable.)150 2717 y Fk(\(lambda)d(\(ARG1)h(ARG2)h(...\))f(.)h(BODY\))630 2826 y Fo(Create)42 b(closure)f(\(anon)m(ymous)h(function\))e(with)g (argumen)m(ts)i(AR)m(G1,)k(AR)m(G2)c(...)75 b(and)630 2936 y(BOD)m(Y.)150 3093 y Fk(\(language_american_engli)o(sh\))630 3203 y Fo(Set)31 b(up)e(language)i(parameters)f(for)h(Aemerican)f (English.)150 3361 y Fk(\(language_british_englis)o(h\))630 3470 y Fo(Set)h(up)e(language)i(parameters)f(for)h(British)d(English.) 150 3628 y Fk(\(language_spanish\))630 3737 y Fo(Set)j(up)e(language)i (parameters)f(for)h(Castillian)c(Spanish.)150 3895 y Fk(\(language_british_englis)o(h\))630 4004 y Fo(Set)k(up)e(language)i (parameters)f(for)h(British)d(English.)150 4162 y Fk (\(language_scots_gaelic\))630 4271 y Fo(Set)j(up)e(language)i (parameters)f(for)h(Scots)f(Gaelic.)150 4429 y Fk(\(language_welsh\)) 630 4539 y Fo(Set)h(up)e(language)i(parameters)f(for)h(W)-8 b(elsh.)150 4696 y Fk(\(last)29 b(A\))115 b Fo(Last)31 b(\(cdr\))f(elemen)m(t)h(in)e(list)g(A.)150 4854 y Fk(\(lastline)f (STRING\))630 4963 y Fo(Returns)33 b(the)i(part)f(of)h(the)f(string)g (whic)m(h)f(b)s(et)m(w)m(een)i(the)f(last)g(newline)f(and)h(the)g(end)g (of)630 5073 y(string.)150 5230 y Fk(\(length)28 b(LIST\))630 5340 y Fo(Return)i(length)f(of)i(LIST,)e(or)i(0)f(if)g(LIST)f(is)g(not) i(a)g(list.)p eop %%Page: 186 188 186 187 bop 150 -116 a Fo(186)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(let-internal)e (STUFF\))630 408 y Fo(In)m(ternal)j(function)f(used)g(to)i(implemen)m (t)e(let.)150 568 y Fk(\(let)g(\(\(VAR1)g(VAL1\))g(\(VAR2)g(VAL2\))g (...\))g(.)h(BODY\))630 677 y Fo(Ev)-5 b(aluate)35 b(BOD)m(Y)g(in)e(an) i(en)m(vironmen)m(t)f(where)g(V)-10 b(AR1)35 b(is)e(set)i(to)h(V)-10 b(AL1,)36 b(V)-10 b(AR2)35 b(is)e(set)630 787 y(to)e(V)-10 b(AL2)31 b(etc.)150 946 y Fk(\(lex.add.entry)26 b(ENTRY\))630 1056 y Fo(Add)h(ENTR)-8 b(Y)28 b(to)h(the)f(addenda)f(of)h(the)g (curren)m(t)g(lexicon.)39 b(As)28 b(the)g(addenda)f(is)g(c)m(hec)m(k)m (ed)630 1166 y(b)s(efore)j(the)h(compiled)e(lexicon)h(or)h(letter)f(to) i(sound)d(rules,)h(this)f(will)f(cause)j(ENTR)-8 b(Y)31 b(to)630 1275 y(b)s(e)37 b(found)g(b)s(efore)h(all)f(others.)64 b(If)37 b(a)i(w)m(ord)e(already)h(in)f(the)h(addenda)f(is)h(added)f (again)630 1385 y(the)28 b(most)f(recen)m(t)i(addition)c(will)g(b)s(e)i (found)f(\(part)h(of)h(sp)s(eec)m(h)f(tags)i(are)e(resp)s(ected)h(in)e (the)630 1494 y(lo)s(ok)k(up\).)40 b([see)31 b(Section)f(13.1)i ([Lexical)e(en)m(tries],)h(page)g(47])150 1654 y Fk(\(lex.compile)c (ENTRYFILE)h(COMPILEFILE\))630 1763 y Fo(Compile)e(the)h(list)f(of)i (lexical)e(en)m(tries)h(in)f(ENTR)-8 b(YFILE)28 b(in)m(to)f(a)h (compiled)d(\014le)i(in)f(COM-)630 1873 y(PILEFILE.)k([see)h(Section)f (13.2)i([De\014ning)e(lexicons],)g(page)h(48])150 2032 y Fk(\(lex.create)c(LEXNAME\))630 2142 y Fo(Create)36 b(a)g(new)f(lexicon)g(of)h(name)f(LEXNAME.)i(If)e(it)g(already)g (exists,)i(the)e(old)g(one)h(is)630 2252 y(deleted)30 b(\014rst.)40 b([see)31 b(Section)g(13.2)g([De\014ning)f(lexicons],)g (page)h(48])150 2411 y Fk(\(lex.entrycount)26 b(WORD\))630 2521 y Fo(Return)38 b(the)i(n)m(um)m(b)s(er)e(of)h(en)m(tries)g(in)f (the)i(compiled)d(lexicon)i(that)h(matc)m(h)g(this)e(w)m(ord.)630 2630 y(This)29 b(is)g(used)h(in)f(detecting)i(homographs.)150 2790 y Fk(\(lex.list\))630 2899 y Fo(List)f(names)g(of)g(all)g(curren)m (tly)f(de\014ned)g(lexicons.)150 3059 y Fk(\(lex.lookup)e(WORD)j (FEATURES\))630 3168 y Fo(Lo)s(okup)h(w)m(ord)h(in)f(curren)m(t)h (lexicon.)45 b(The)32 b(addenda)f(is)h(c)m(hec)m(k)m(ed)i(\014rst,)e (if)f(W)m(ORD)i(with)630 3278 y(matc)m(hing)g(FEA)-8 b(TURES)32 b(\(so)h(far)f(this)f(is)h(only)f(the)i(part)f(of)h(sp)s (eec)m(h)f(tag\))i(is)e(not)g(found)630 3387 y(the)c(compiled)e (lexicon)g(is)h(c)m(hec)m(k)m(ed.)42 b(Only)26 b(if)g(the)i(w)m(ord)f (is)f(still)g(not)i(found)e(the)h(letter)h(to)630 3497 y(sound)j(rules)g(\(or)h(whatev)m(er)h(metho)s(d)f(sp)s(eci\014ed)e(b)m (y)i(the)g(curren)m(t)g(lexicon's)g(lts.metho)s(d)630 3606 y(is)d(used\).)41 b([see)31 b(Section)f(13.3)i([Lo)s(okup)e(pro)s (cess],)g(page)h(49])150 3766 y Fk(\(lex.lookup_all)26 b(WORD\))630 3875 y Fo(Return)32 b(list)f(of)h(all)f(en)m(tries)i(in)e (the)h(addenda)g(and)f(compiled)g(lexicon)h(that)h(matc)m(h)g(this)630 3985 y(w)m(ord.)67 b(The)39 b(letter)g(to)h(sound)e(rules)g(and)h(user) f(de\014ned)g(unkno)m(wn)g(w)m(ord)h(function)f(is)630 4095 y(ignored.)150 4254 y Fk(\(lex.select)27 b(LEXNAME\))630 4364 y Fo(Select)44 b(LEXNAME)f(as)h(curren)m(t)f(lexicon.)80 b(The)42 b(name)i(of)g(the)f(previously)e(selected)630 4473 y(lexicon)30 b(is)f(returned.)150 4633 y Fk (\(lex.set.compile.file)c(COMPFILENAME\))630 4742 y Fo(Set)d(the)g (curren)m(t)f(lexicon's)g(compile)f(\014le)h(to)h(COMPFILENAME.)g (COMPFILENAME)630 4852 y(is)39 b(a)h(compiled)f(lexicon)g(\014le)g (created)i(b)m(y)f(lex.compile.)68 b([see)41 b(Section)f(13.2)i ([De\014ning)630 4961 y(lexicons],)30 b(page)h(48])150 5121 y Fk(\(lex.set.lts.method)25 b(METHOD\))630 5230 y Fo(Set)31 b(the)g(curren)m(t)g(lexicon's)f(letter-to-sound)h(metho)s (d)g(to)g(METHOD.)h(METHOD)f(can)630 5340 y(tak)m(e)j(an)m(y)f(of)f (the)h(follo)m(wing)e(v)-5 b(alues:)44 b(Error)31 b(\(the)i(default\))f (signal)f(a)i(festiv)-5 b(al)31 b(error)h(if)g(a)p eop %%Page: 187 189 187 188 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(187)630 299 y(w)m(ord)25 b(is)g(not)h(found) e(in)g(the)i(lexicon;)g(lts)p 2026 299 28 4 v 33 w(rules)e(use)h(the)h (letter)f(to)i(sound)d(rule)g(set)i(named)630 408 y(b)m(y)37 b(lts)p 865 408 V 32 w(ruleset;)j(none)d(return)f(simply)f(nil)g(in)h (the)i(pron)m(unciation)d(\014eld;)k(function)d(use)630 518 y(call)23 b(the)h(t)m(w)m(o)h(argumen)m(t)g(function)d(lex)p 1974 518 V 32 w(user)p 2169 518 V 33 w(unkno)m(wn)p 2562 518 V 31 w(w)m(ord)h(\(as)i(set)f(b)m(y)g(the)g(user\))f(with)630 628 y(the)35 b(w)m(ord)g(and)f(features)h(to)h(pro)m(vide)e(an)h(en)m (try)-8 b(.)55 b([see)35 b(Section)g(13.4)i([Letter)f(to)f(sound)630 737 y(rules],)29 b(page)j(51])150 924 y Fk(\(lex.set.lts.ruleset)25 b(RULESETNAME\))630 1033 y Fo(Set)j(the)f(curren)m(t)h(lexicon's)e (letter-to-sound)i(ruleset)f(to)h(R)m(ULESETNAME.)g(A)g(ruleset)630 1143 y(of)43 b(that)h(name)f(m)m(ust)g(already)f(b)s(e)h(de\014ned.)77 b(This)41 b(is)h(used)g(if)g(lts.metho)s(d)h(is)f(set)h(to)630 1252 y(lts)p 732 1252 V 32 w(rules.)c([see)32 b(Section)e(13.4)i ([Letter)f(to)g(sound)f(rules],)f(page)i(51])150 1439 y Fk(\(lex.set.phoneset)26 b(PHONESETNAME\))630 1548 y Fo(Set)48 b(curren)m(t)g(lexicon's)f(phone)h(set)g(to)h (PHONESETNAME.)f(PHONESETNAME)630 1658 y(m)m(ust)24 b(b)s(e)g(a)h (curren)m(tly)e(de\014ned)g(\(and,)j(of)e(course,)i(loaded\))e(phone)g (set.)39 b([see)25 b(Section)f(13.2)630 1767 y([De\014ning)30 b(lexicons],)g(page)h(48])150 1954 y Fk(\(lex.set.pos.map)26 b(POSMAP\))630 2063 y Fo(A)36 b(rev)m(erse)g(asso)s(c-list)f(mapping)f (part)h(of)h(sp)s(eec)m(h)g(tags)g(to)h(the)e(lexical)g(part)g(of)h(sp) s(eec)m(h)630 2173 y(tag)c(set.)41 b([see)31 b(Section)f(13.1)i ([Lexical)e(en)m(tries],)h(page)g(47])150 2359 y Fk (\(lex.set.post_hooks)25 b(HOOKS\))630 2469 y Fo(Set)43 b(a)f(function)g(or)g(list)f(of)i(functions)e(that)i(are)g(to)g(b)s(e)f (applied)e(to)j(the)g(en)m(try)f(after)630 2578 y(lo)s(okup.)d(Returns) 30 b(previous)f(v)-5 b(alue)30 b([see)h(Section)f(13.1)i([Lexical)e(en) m(tries],)h(page)g(47])150 2765 y Fk(\(lex.set.pre_hooks)25 b(HOOKS\))630 2874 y Fo(Set)39 b(a)g(function)e(or)i(list)e(of)i (functions)e(that)i(are)g(to)g(b)s(e)f(applied)e(to)k(the)e(en)m(try)h (b)s(efore)630 2984 y(lo)s(okup.)g(Returns)30 b(previous)f(v)-5 b(alue)30 b([see)h(Section)f(13.1)i([Lexical)e(en)m(tries],)h(page)g (47])150 3170 y Fk(\(lex.syllabify.phstress)24 b(PHONELIST\))630 3280 y Fo(Syllabify)40 b(the)k(giv)m(en)g(phone)e(list)g(\(if)h(curren) m(t)h(phone)e(set\).)81 b(V)-8 b(o)m(w)m(els)45 b(ma)m(y)f(ha)m(v)m(e)h (the)630 3389 y(n)m(umerals)28 b(0,)j(1,)f(or)g(2)g(as)g(su\016xes,)f (if)f(so)i(these)g(are)g(tak)m(en)h(to)f(b)s(e)f(stress)h(for)f(the)h (syllable)630 3499 y(they)g(are)g(in.)39 b(This)28 b(format)i(is)f (similar)e(to)k(the)f(en)m(try)g(format)g(in)e(the)i(CMU)g(and)f(BEEP) 630 3608 y(lexicons.)40 b([see)31 b(Section)f(13.2)i([De\014ning)e (lexicons],)g(page)h(48])150 3795 y Fk(\(lex_user_unknown_word)24 b(WORD)30 b(FEATS\))630 3904 y Fo(F)-8 b(unction)29 b(called)g(b)m(y)h (lexicon)f(when)g('function)g(t)m(yp)s(e)h(letter)g(to)g(sound)f(rules) f(is)h(de\014ned.)630 4014 y(It)23 b(is)f(the)i(user's)e(resp)s (onsibilit)m(y)e(to)j(de\014ned)f(this)g(function)g(themselv)m(es)i (when)e(they)h(w)m(an)m(t)630 4124 y(to)31 b(deal)f(with)f(unkno)m(wn)g (w)m(ords)h(themselv)m(es.)150 4310 y Fk(\(library_expand_filename)24 b(FILENAME\))630 4419 y Fo(Searc)m(h)38 b(for)f(\014lename)f(b)m(y)h (app)s(ending)e(FILENAME)j(to)g(eac)m(h)g(mem)m(b)s(er)f(of)g (load-path.)630 4529 y(F)-8 b(ull)29 b(expanded)h(pathname)h(is)e (returned.)41 b(If)30 b(not)h(found)e(in)h(load-path)g(FILENAME)h(is) 630 4639 y(returned.)150 4825 y Fk(\(linear_regression)25 b(ITEM)30 b(MODEL\))630 4934 y Fo(Use)g(linear)f(regression)g(MODEL)h (on)g(ITEM.)g(MODEL)g(consists)f(of)h(a)h(list)d(of)i(features,)630 5044 y(w)m(eigh)m(ts)25 b(and)e(optional)h(map)g(list.)37 b(E.g.)i(\(\(In)m(tercept)26 b(100\))g(\(tobi)p 2890 5044 V 32 w(accen)m(t)h(10)e(\(H*)g(!H*\)\)\).)150 5230 y Fk(\(list)k(A0)h(A1)f(...\))630 5340 y Fo(Return)h(list)f(con)m (taining)h(A0)g(A1)h(...)p eop %%Page: 188 190 188 189 bop 150 -116 a Fo(188)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(load)g(FILENAME)f (OPTION\))630 408 y Fo(Load)38 b(s-expressions)f(in)g(FILENAME.)i(If)f (OPTION)f(is)g(nil)f(or)j(unsp)s(eci\014ed)c(ev)-5 b(aluate)630 518 y(eac)m(h)40 b(s-expression)e(in)f(FILENAME)j(as)f(it)f(is)g(read,) j(if)d(OPTION)g(is)g(t,)j(return)d(them)630 628 y(unev)-5 b(aluated)30 b(in)f(a)h(list.)150 783 y Fk(\(load_library)d(FILENAME\)) 630 892 y Fo(Load)33 b(\014le)g(from)f(library)-8 b(,)32 b(app)s(ends)g(FILENAME)h(to)h(eac)m(h)g(path)f(in)f(load-path)h(un)m (til)f(a)630 1002 y(v)-5 b(alid)29 b(\014le)g(is)h(found.)39 b(If)30 b(none)g(found)f(loads)h(name)g(itself)150 1157 y Fk(\(log)f(NUM\))67 b Fo(Return)30 b(natural)f(log)h(of)h(NUM.)150 1313 y Fk(\(lr_predict)c(ITEM)j(LRMODEL\))630 1422 y Fo(Apply)h(the)h(linear)f(regression)h(mo)s(del)f(LRMODEL)h(to)h(ITEM)f (in.)46 b(This)30 b(returns)h(\015oat)630 1532 y(v)-5 b(alue)42 b(b)m(y)h(summing)e(the)h(pro)s(duct)g(of)h(the)g(co)s (e\016en)m(ts)g(and)g(v)-5 b(alues)42 b(returned)f(b)m(y)i(the)630 1641 y(sp)s(eci\014ced)29 b(features)i(in)e(ITEM.)h([see)h(Section)f (25.5)i([Linear)e(regression],)g(page)h(123])150 1797 y Fk(\(lts.apply)d(WORD)h(RULESETNAME\))630 1906 y Fo(Apply)h(lts)g (ruleset)h(R)m(ULESETNAME)f(to)i(w)m(ord)f(returning)e(result.)42 b([see)32 b(Section)f(13.4)630 2016 y([Letter)g(to)h(sound)d(rules],)g (page)i(51])150 2171 y Fk(\(lts.in.alphabet)26 b(WORD)j(RULESETNAME\)) 630 2281 y Fo(Returns)i(t)h(is)f(all)f(c)m(haracters)k(in)c(sym)m(b)s (ol)g(w)m(ord)i(\(or)g(items)f(in)g(list)f(W)m(ORD\))j(are)f(in)f(the) 630 2390 y(alphab)s(et)f(of)h(letter)g(to)h(sound)e(ruleset)g(name)h(R) m(ULESETNAME.)g(nil)e(otherwise.)42 b([see)630 2500 y(Section)30 b(13.4)i([Letter)g(to)f(sound)e(rules],)g(page)i(51])150 2655 y Fk(\(lts.list\))630 2765 y Fo(Return)f(list)f(of)h(all)f(curren) m(t)i(de\014ned)e(L)-8 b(TS)29 b(rulesets.)150 2920 y Fk(\(lts.ruleset)e(NAME)i(RULES)g(SETS\))630 3029 y Fo(De\014ne)39 b(a)g(new)f(set)i(of)f(letter)g(to)g(sound)f(rules.)64 b([see)40 b(Section)e(13.4)j([Letter)f(to)f(sound)630 3139 y(rules],)29 b(page)j(51])150 3294 y Fk(\(make-a-doc)27 b(FILENAME)h(DOCLIST\))630 3404 y Fo(Mak)m(e)42 b(a)f(texinfo)g(do)s (cumen)m(t)f(in)f(FILENAME)i(as)g(a)g(texinfo)g(table,)i(items)d(are)h (from)630 3513 y(DOCLIST.)32 b(DOCLIST)f(names)i(whic)m(h)e(do)s(clist) h(to)h(use,)h(it)e(ma)m(y)h(b)s(e)g(one)g(of)g('function,)630 3623 y('features)e(or)f('v)-5 b(ars.)150 3778 y Fk(\(make-doc\))630 3888 y Fo(Find)32 b(function)h(and)g(v)-5 b(ariable)33 b(do)s(cumen)m(t)g(strings)g(and)g(sa)m(v)m(e)j(them)e(in)e(texinfo)i (format)630 3998 y(to)d(resp)s(ectiv)m(e)g(\014les.)150 4153 y Fk(\(make-list)d(SIZE)h(VALUE\))630 4262 y Fo(Return)h(list)f (of)h(SIZE)f(with)g(eac)m(h)j(mem)m(b)s(er)e(V)-10 b(ALUE.)150 4418 y Fk(\(make_tmp_filename\))630 4527 y Fo(Return)30 b(name)g(of)h(temp)s(orary)f(\014le.)150 4682 y Fk(\(manual)e (SECTION\))630 4792 y Fo(Displa)m(y)33 b(SECTION)e(in)h(the)i(man)m (ual.)49 b(SECTION)31 b(is)i(a)h(string)e(iden)m(tifying)f(a)j(man)m (ual)630 4902 y(section)d(\(it)g(could)g(b)s(e)f(an)h(initial)e (substring.)41 b(If)30 b(SECTION)g(is)g(nil)f(or)i(unsp)s(ecifed)e (then)630 5011 y(the)38 b(Man)m(ual)g(table)f(of)h(con)m(ten)m(ts)i(is) c(displa)m(y)m(ed.)62 b(This)36 b(uses)h(netscap)s(e)h(to)h(displa)m(y) d(the)630 5121 y(man)m(ual)25 b(page)h(so)g(y)m(ou)g(m)m(ust)g(ha)m(v)m (e)g(that)h(\(use)e(v)-5 b(ariable)25 b(man)m(ual-bro)m(wser)g(to)h (iden)m(tify)e(it\))630 5230 y(and)30 b(the)h(v)-5 b(ariable)29 b(man)m(ual-url)g(p)s(oin)m(ting)f(to)k(a)f(cop)m(y)g(of)g(the)f(man)m (ual.)41 b([see)31 b(Section)g(7.3)630 5340 y([Getting)g(some)g(help],) e(page)j(26])p eop %%Page: 189 191 189 190 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(189)150 299 y Fk(\(manual-sym)27 b(SYMBOL\))630 408 y Fo(Displa)m(y)32 b(the)h(section)h(in)d(the)j(man) m(ual)e(that)i(SYMBOL's)f(do)s(cstring)f(has)h(iden)m(ti\014ed)e(as)630 518 y(the)37 b(most)f(relev)-5 b(an)m(t.)59 b(The)36 b(section)h(is)e(named)h(on)g(the)h(last)f(line)f(of)h(a)h(do)s(cumen)m (tation)630 628 y(string)e(with)g(no)h(newlines)f(within)e(it)j (pre\014xed)f(b)m(y)i Fk(")p Fo([see)f Fk(")g Fo(with)f(a)i Fk(")p Fo(])p Fk(")f Fo(just)g(immedi-)630 737 y(ately)31 b(b)s(efore)f(the)h(end)f(of)h(the)g(do)s(cumen)m(tation)f(string.)41 b(The)30 b(man)m(ual)g(section)h(name)g(is)630 847 y(translated)c(to)g (the)h(section)f(in)f(the)h(HTML)g(v)m(ersion)f(of)h(the)g(man)m(ual)g (and)f(a)i(URL)e(is)h(and)630 956 y(sen)m(t)k(to)g(Netscap)s(e)g(for)g (displa)m(y)-8 b(.)39 b([see)31 b(Section)f(7.3)i([Getting)f(some)g (help],)e(page)i(26])150 1121 y Fk(\(map_to_relation)26 b(UTT)j(Source_relation)e(Target_relation)f(new_relation\))630 1230 y Fo(F)-8 b(rom)30 b(the)f(F0)g(con)m(tour)h(in)e(F0)p 1700 1230 28 4 v 33 w(relation,)h(create)i(a)e(set)h(of)f(pitc)m (hmarks)f(in)g(PM)p 3394 1230 V 32 w(relation.)630 1340 y(If)22 b(END)p 917 1340 V 33 w(TIME)h(is)e(not)i(nil,)g(Extra)f(pitc)m (hmarks)g(will)e(b)s(e)i(created)i(at)f(the)g(default)f(in)m(terv)-5 b(al)630 1450 y(up)29 b(to)i(this)f(p)s(oin)m(t)150 1614 y Fk(\(mapcar)e(FUNCTION)h(ARGS)g([ARGS2]\))630 1724 y Fo(Apply)f(FUNCTION)g(to)i(eac)m(h)h(mem)m(b)s(er)d(of)i(AR)m(GS)f (\(and)g([AR)m(GS2]\),)j(returning)27 b(list)h(of)630 1833 y(return)h(v)-5 b(alues.)150 1998 y Fk(\(MBROLA_Synth)27 b(UTT\))630 2107 y Fo(Syn)m(thesize)k(using)g(MBR)m(OLA)h(as)g (external)g(mo)s(dule.)43 b(Basically)31 b(dump)f(the)i(info)e(from)630 2217 y(this)40 b(utterance.)72 b(Call)39 b(MBR)m(OLA)j(and)e(reload)g (the)h(w)m(a)m(v)m(eform)h(in)m(to)f(utt.)72 b([see)41 b(Sec-)630 2326 y(tion)30 b(22.2)i([MBR)m(OLA],)g(page)f(101])150 2491 y Fk(\(member)d(ITEM)i(LIST\))630 2600 y Fo(Returns)f(subset)h(of) h(LIST)e(whose)h(car)h(is)e(ITEM)h(if)g(it)f(exists,)i(nil)d (otherwise.)150 2765 y Fk(\(member_string)e(STRING)j(LIST\))630 2874 y Fo(Returns)g(subset)h(of)h(LIST)e(whose)h(car)h(is)e(STRING)h (if)f(it)h(exists,)g(nil)f(otherwise.)150 3039 y Fk (\(module_description)c(MOD\))630 3148 y Fo(Returns)k(the)i (description)d(record)j(of)f(the)h(mo)s(dule)e(named)g(b)m(y)i(sym)m(b) s(ol)e(MOD)150 3313 y Fk(\(month_range)e(SC\))630 3422 y Fo(1)k(if)e(SC's)h(name)g(is)g Fk(>)g Fo(0)g(and)g Fk(<)g Fo(32,)i(0)e(otherwise.)150 3587 y Fk(\(mt_accent)e(syl\))630 3696 y Fo(Accen)m(t)k(or)e(0)h(if)e(none.)150 3861 y Fk(\(mt_break)f(syl\))630 3970 y Fo(Break)j(or)g(0)f(if)g(none.)150 4134 y Fk(\(mt_close)e(n\))630 4244 y Fo(The)h(n)m(um)m(b)s(er)g(of)h (consituen)m(ts)g(this)f(is)g(the)h(end)f(of,)i(E\013ectiv)m(ely)f(the) g(n)m(um)m(b)s(er)f(of)h(closing)630 4354 y(brac)m(k)m(ets)i(after)f (this)e(w)m(ord.)150 4518 y Fk(\(mt_fssw)f(s\))630 4628 y Fo(1)j(if)e(\014rst)h(stressed)g(syllable)e(in)h(w)m(ord,)h(0)h (otherwise.)150 4792 y Fk(\(mt_lssp)d(s\))630 4902 y Fo(1)j(if)e(last)h(stressed)g(syllable)f(in)g(phrase,)h(0)g(otherwise.) 150 5066 y Fk(\(nfssw)f(s\))67 b Fo(1)31 b(if)e(second)i(or)f(later)g (stressed)g(syllable)f(in)g(w)m(ord,)h(0)h(otherwise.)150 5230 y Fk(\(mt_num_s)d(s\))630 5340 y Fo(The)i(n)m(um)m(b)s(er)f(of)h (s)h(MetricalV)-8 b(alues)30 b(from)g(here)g(to)h(a)g(w)f(or)g(top.)p eop %%Page: 190 192 190 191 bop 150 -116 a Fo(190)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(mt_num_w)f(s\)) 630 408 y Fo(The)i(n)m(um)m(b)s(er)f(of)h(w)g(MetricalV)-8 b(alues)31 b(from)f(here)g(to)h(a)g(s)f(or)g(top.)150 571 y Fk(\(mt_open)e(n\))630 681 y Fo(The)23 b(n)m(um)m(b)s(er)e(of)i (consituen)m(ts)g(this)f(is)g(the)h(start)h(of,)h(E\013ectiv)m(ely)e (the)h(n)m(um)m(b)s(er)d(of)i(op)s(ening)630 790 y(brac)m(k)m(ets)32 b(b)s(efore)e(this)f(w)m(ord.)150 953 y Fk(\(mt_postype)e(syl\))630 1063 y Fo(Returns)i(single,)h(initial,)e(\014nal)h(or)h(middle.)150 1225 y Fk(\(mt_strong)e(s\))630 1335 y Fo(1)j(if)e(all)g(MetricalV)-8 b(alues)31 b(a)g(s)f(to)h(a)g(w)m(ord,)f(0)h(otherwise.)150 1498 y Fk(\(MultiProbParse)26 b(UTT\))630 1607 y Fo(P)m(arse)h(part)f (of)h(sp)s(eec)m(h)f(tags)i(in)d(W)-8 b(ord)27 b(relation.)38 b(Unlik)m(e)26 b(ProbP)m(arse)g(this)f(allo)m(ws)h(m)m(ulti-)630 1717 y(ple)e(sen)m(tences)i(to)f(app)s(ear)g(in)e(the)i(one)g (utterance.)40 b(The)24 b(CAR)-8 b(T)25 b(tree)g(in)f(eos)p 3282 1717 28 4 v 33 w(tree)i(is)e(used)630 1826 y(to)k(de\014ne)e(end)h (of)g(sen)m(tence.)41 b(Loads)27 b(the)g(grammar)h(from)e(scfg)p 2828 1826 V 33 w(grammar)p 3220 1826 V 33 w(\014lename)h(and)630 1936 y(sa)m(v)m(es)32 b(the)e(b)s(est)g(parse)g(in)g(the)g(Syn)m(tax)h (Relation.)150 2099 y Fk(\(play_wave)d(FILENAME\))630 2208 y Fo(Pla)m(y)i(giv)m(en)h(w)m(a)m(v)m(e\014le)150 2371 y Fk(\(nconc)e(A)h(B\))630 2481 y Fo(Destructiv)m(ely)h(app)s(end) d(B)j(to)g(A,)g(if)e(A)i(is)e(nil)f(return)i(B.)150 2643 y Fk(\(ngram.load)d(NAME)j(FILENAME\))630 2753 y Fo(Load)h(an)f(ngram)g (from)g(FILENAME)h(and)e(store)i(it)f(named)g(NAME)h(for)f(later)g (access.)150 2916 y Fk(\(nint)f(NUMBER\))630 3025 y Fo(Returns)g (nearest)i(in)m(t)f(to)h(NUMBER.)150 3188 y Fk(\(not)e(DATA\))630 3298 y Fo(Returns)g(t)i(if)e(D)m(A)-8 b(T)g(A)33 b(is)c(nil,)g(nil)f (otherwise.)150 3460 y Fk(\(nth)h(N)h(LIST\))630 3570 y Fo(Returns)f(n)m(th)i(car)f(of)h(LIST,)e(0)i(is)e(car.)150 3733 y Fk(\(nth_cdr)f(N)i(LIST\))630 3842 y Fo(Returns)f(n)m(th)i(cdr)e (of)i(LIST,)e(0)i(is)e(LIST.)150 4005 y Fk(\(null?)g(DATA\))630 4115 y Fo(Returns)g(t)i(if)e(D)m(A)-8 b(T)g(A)33 b(is)c(nil,)g(nil)f (otherwise.)150 4277 y Fk(\(num_digits)f(SC\))630 4387 y Fo(Returns)i(n)m(um)m(b)s(er)h(of)g(digits)f(\(actually)h(c)m(hars\)) h(is)f(SC's)f(name.)150 4550 y Fk(Finds)g(the)g(number)g(of)h (postvocalic)d(consonants)h(in)h(a)h(syllable.)150 4686 y(\(number?)e(DATA\))630 4795 y Fo(Returns)h(t)i(if)e(D)m(A)-8 b(T)g(A)33 b(is)c(a)i(n)m(um)m(b)s(er,)e(nil)f(otherwise.)150 4958 y Fk(\(oblist\))96 b Fo(Return)30 b(oblist.)150 5121 y Fk(\(or)f(DISJ1)g(DISJ2)g(...\))630 5230 y Fo(Ev)-5 b(aluate)30 b(eac)m(h)g(disjunction)d(DISJn)i(in)f(turn)g(un)m(til)g (one)i(ev)-5 b(aluates)30 b(to)g(non-nil.)38 b(Other-)630 5340 y(wise)29 b(return)h(nil.)p eop %%Page: 191 193 191 192 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(191)150 299 y Fk(\(pair?)29 b(DATA\))630 408 y Fo(Returns)g(t)i(if)e(D)m(A)-8 b(T)g(A)33 b(is)c(a)i(cons)f(cell,)g(nil)e(otherwise.)150 566 y Fk(\(Param.def)g(NAME)h(VAL\))630 676 y Fo(Set)i(parameter)f(NAME)h(to) g(V)-10 b(AL)31 b(if)e(not)i(already)f(set)150 833 y Fk(\(Param.get)e(NAME\))630 943 y Fo(Get)j(parameter)g(NAME's)g(v)-5 b(alue)30 b(\(nil)f(if)g(unset\))150 1100 y Fk(\(Param.set)f(NAME)h (VAL\))630 1210 y Fo(Set)i(parameter)f(NAME)h(to)g(V)-10 b(AL)31 b(\(deleting)f(an)m(y)g(previous)f(setting\))150 1367 y Fk(\(Parameter.def)d(NAME)k(VAL\))630 1477 y Fo(Set)g(parameter) h(NAME)g(to)g(V)-10 b(AL)30 b(if)g(not)g(already)g(set.)41 b(This)29 b(is)g(an)h(OLD)h(function)e(y)m(ou)630 1587 y(shold)g(use)h(P)m(aram.def)h(instead.)150 1744 y Fk(\(Parameter.get) 26 b(NAME\))630 1854 y Fo(Get)44 b(parameter)g(NAME's)g(v)-5 b(alue)43 b(\(nil)e(if)i(unset\).)79 b(This)42 b(is)g(an)h(OLD)h (function)e(and)630 1963 y(ma)m(y)31 b(not)f(exist)g(in)e(later)i(v)m (ersions)g(\(or)g(c)m(hange)h(functionalit)m(y\).)39 b(This)29 b(function)f(\(unlik)m(e)630 2073 y(P)m(aram.get\))39 b(ma)m(y)e(return)e(sylb)s(ols)f(\(rather)j(than)f(strings)f(if)h(the)g (v)-5 b(al)36 b(do)s(esn't)h(con)m(tain)630 2182 y(whitespace)30 b(\(to)i(allo)m(w)d(older)h(functions)f(to)i(still)d(w)m(ork.)150 2340 y Fk(\(Parameter.set)e(NAME)k(VAL\))630 2450 y Fo(Set)35 b(parameter)h(NAME)f(to)h(V)-10 b(AL)35 b(\(deleting)f(an)m(y)h (previous)f(setting\).)55 b(This)33 b(is)h(an)h(old)630 2559 y(function)29 b(and)h(y)m(ou)h(should)d(use)i(P)m(aram.set)i (instead.)150 2717 y Fk(\(parse-number)27 b(SYMBOL\))630 2826 y Fo(Returns)i(a)i(n)m(um)m(b)s(er)e(form)h(a)h(sym)m(b)s(ol)e(or) h(string)g(whose)g(prin)m(t)f(name)h(is)g(a)h(n)m(um)m(b)s(er.)150 2984 y Fk(\(parse_url)d(URL\))630 3093 y Fo(Split)g(URL)i(in)m(to)h(a)f (list)g(\(proto)s(col)g(host)h(p)s(ort)e(path\))i(suitable)e(for)h (giving)f(to)i(fop)s(en.)150 3251 y Fk(\(path-append)c(DIRECTORY-PATH)g (ADDITION1)g(ADDITION2)h(...\))630 3361 y Fo(Return)i(a)g(the)h(path)f (for)g(ADDITION)h(in)e(DIRECTOR)-8 b(Y.)150 3518 y Fk (\(path-as-directory)25 b(PATHNAME\))630 3628 y Fo(Return)30 b(P)-8 b(A)g(TH)31 b(as)f(a)h(directory)f(name.)150 3785 y Fk(\(path-as-file)d(PATHNAME\))630 3895 y Fo(Return)j(P)-8 b(A)g(TH)31 b(as)f(a)h(non-directory)f(name.)150 4052 y Fk(\(path-basename)c(PATHNAME\))630 4162 y Fo(Return)k(name)g(part)g (of)h(P)-8 b(A)g(TH.)150 4319 y Fk(\(path-is-dirname)26 b(PATHNAME\))630 4429 y Fo(Is)k(P)-8 b(A)g(TH)31 b(a)g(directory)f (name.)150 4587 y Fk(\(path-is-filename)c(PATHNAME\))630 4696 y Fo(Is)k(P)-8 b(A)g(TH)31 b(a)g(non-directory)e(name.)150 4854 y Fk(\(Pauses)f(utt\))630 4963 y Fo(Insert)i(pauses)g(where)g (required.)150 5121 y Fk(peak_segment_anchor)25 b(ie)630 5230 y Fo(Determines)37 b(what)g(segmen)m(t)h(acts)g(as)f(the)h(anc)m (hor)f(for)g(a)g(p)s(eak.)61 b(Returns)36 b(n)m(um)m(b)s(er)g(of)630 5340 y(segmen)m(ts)31 b(from)f(start)h(of)g(accen)m(ted)h(syllable)c (to)j(p)s(eak.)p eop %%Page: 192 194 192 193 bop 150 -116 a Fo(192)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(peak_wi_seg)e (segment)i(pk_pos)630 408 y Fo(Finds)g(if)g(a)i(p)s(eak)f(o)s(ccurs)g (w/i)g(a)h(segmen)m(t)150 562 y Fk(\(phone_feature)26 b(phone)j(feat\))630 671 y Fo(Return)e(the)h(feature)g(for)f(giv)m(en)h (phone)f(in)f(curren)m(t)h(phone)g(set,)i(or)f(0)g(if)e(it)h(do)s (esn't)h(exist.)150 825 y Fk(\(Phoneset.description)d(OPTIONS\))630 934 y Fo(Returns)40 b(a)i(lisp)d(for)h(of)i(the)f(curren)m(t)g(phoneme) f(set.)74 b(Options)39 b(is)i(a)g(list)f(of)h(parts)g(of)630 1044 y(the)c(de\014nition)d(y)m(ou)i(require.)58 b(OPTIONS)34 b(ma)m(y)j(include,)f(silences,)h(phones,)h(features)630 1154 y(and/or)30 b(name.)41 b(If)30 b(nil)e(all)i(are)g(returned.)150 1307 y Fk(\(Phoneset.list\))630 1417 y Fo(List)g(the)g(names)g(of)h (all)e(curren)m(tly)h(de\014ned)f(Phonesets.)150 1570 y Fk(\(PhoneSet.select)d(PHONESETNAME\))630 1680 y Fo(Select)38 b(PHONESETNAME)f(as)h(curren)m(t)g(phoneset.)63 b([see)39 b(Chapter)e(12)i([Phonesets],)630 1789 y(page)31 b(45])150 1943 y Fk(\(PhoneSet.silences)25 b(LIST\))630 2052 y Fo(Declare)33 b(LIST)e(of)i(phones)f(as)g(silences.)46 b(The)32 b(\014rst)g(in)f(the)h(list)f(should)g(b)s(e)h(the)g Fk(")p Fo(most)p Fk(")630 2162 y Fo(silen)m(t.)40 b([see)31 b(Chapter)f(12)h([Phonesets],)g(page)g(45])150 2315 y Fk(\(Phrasify)d(utt\))630 2425 y Fo(Construct)i(phrasify)e(o)m(v)m(er)k (W)-8 b(ords)31 b(mo)s(dule.)150 2578 y Fk(\(POS)e(utt\))67 b Fo(Apply)29 b(part)h(of)g(sp)s(eec)m(h)h(tagging)g(\(and)f(p)s (ossible)e(parsing)h(to)s(o\))j(to)f(W)-8 b(ord)30 b(relation.)150 2732 y Fk(\(position)e(thing)h(l\))630 2841 y Fo(What)i(p)s(osition)e (is)g(thing)g(in)g(l,)h(-1)h(if)f(it)f(do)s(esn't)i(exist.)150 2995 y Fk(\(PostLex)d(utt\))630 3104 y Fo(Apply)38 b(p)s(ost)h(lexical) f(rules)g(to)j(segmen)m(t)f(stream.)69 b(These)39 b(ma)m(y)h(b)s(e)f (almost)g(arbitrary)630 3214 y(rules)c(as)h(sp)s(eci\014ed)e(b)m(y)i (the)g(particular)f(v)m(oice,)j(through)e(the)g(p)s(ostlex)p 3123 3214 28 4 v 32 w(ho)s(oks)g(v)-5 b(ariable.)630 3324 y(A)35 b(n)m(um)m(b)s(er)e(of)i(standard)f(p)s(ost)h(lexical)e (rule)h(sets)h(are)g(pro)m(vided)e(including)f(reduction,)630 3433 y(p)s(osessiv)m(es)c(etc.)42 b(These)28 b(rules)g(are)h(also)g (used)g(to)g(mark)g(standard)f(segmen)m(ts)i(with)e(their)630 3543 y(cluster)i(information)e(used)i(in)f(creating)i(diphone)d(names.) 150 3696 y Fk(\(postlex_apos_s_check)d(UTT\))630 3806 y Fo(Deal)37 b(with)d(p)s(ossesiv)m(e)i(s)g(for)g(English)d(\(American) j(and)g(British\).)56 b(Delete)37 b(sc)m(h)m(w)m(a)h(of)e('s)630 3915 y(if)f(previous)f(is)g(not)i(a)g(fricativ)m(e)g(or)f(a\013ricativ) m(e,)j(and)d(c)m(hange)i(v)m(oiced)f(to)g(un)m(v)m(oiced)g(s)f(if)630 4025 y(previous)29 b(is)g(not)i(v)m(oiced.)150 4178 y Fk(\(pow)e(X)h(Y\))85 b Fo(Return)30 b(X**Y.)150 4332 y Fk(\(pprintf)e(EXP)i([FD]\))630 4441 y Fo(Prett)m(y)h(prin)m(t)e(EXP) i(to)g(FD,)g(if)e(FD)i(is)f(nil)e(prin)m(t)h(to)i(the)g(screen.)150 4595 y Fk(\(print)e(DATA\))630 4704 y Fo(Prin)m(t)g(D)m(A)-8 b(T)g(A)32 b(to)g(stdout)e(if)f(textual)i(form.)40 b(Not)31 b(a)g(prett)m(y)g(prin)m(ter.)150 4858 y Fk(\(print_string)c(DATA\))630 4967 y Fo(Returns)i(a)i(string)f(represen)m(ting)f(the)i(prin)m(ting)d (of)i(D)m(A)-8 b(T)g(A.)150 5121 y Fk(\(printfp)28 b(DATA)h(FILEP\))630 5230 y Fo(Prin)m(t)23 b(D)m(A)-8 b(T)g(A)26 b(to)f(\014le)e(indicated)g (b)m(y)h(\014le)f(p)s(oin)m(ter)h(FILEP)-8 b(.)24 b(File)g(p)s(oin)m (ters)f(are)h(are)h(created)630 5340 y(b)m(y)30 b(fop)s(en.)p eop %%Page: 193 195 193 194 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(193)150 299 y Fk(\(probe_file)27 b(FILENAME\))630 408 y Fo(Returns)i(t)i(if)e(FILENAME)i(exists)f(and)g (is)f(readable,)i(nil)d(otherwise.)150 566 y Fk(\(ProbParse)g(UTT\))630 676 y Fo(P)m(arse)60 b(part)f(of)g(sp)s(eec)m(h)g(tags)h(in)e(W)-8 b(ord)60 b(relation.)126 b(Loads)59 b(the)g(grammar)g(from)630 785 y(scfg)p 784 785 28 4 v 33 w(grammar)p 1176 785 V 33 w(\014lename)30 b(and)f(sa)m(v)m(es)j(the)f(b)s(est)f(parse)g(in)f (the)h(Syn)m(tax)h(Relation.)150 943 y Fk(\(proclaim_voice)26 b(NAME)j(DESCRIPTION\))630 1052 y Fo(Describ)s(e)23 b(a)h(v)m(oice)h (to)f(the)g(systen.)38 b(NAME)25 b(should)c(b)s(e)i(atomic)i(name,)g (that)f(con)m(v)m(en)m(tion-)630 1162 y(ally)g(will)e(ha)m(v)m(e)k(v)m (oice)p 1370 1162 V 59 w(prep)s(ended)c(to)k(name)f(the)g(basic)f (selection)h(function.)38 b(OPTIONS)630 1271 y(is)23 b(an)h(asso)s(c)g(list)f(of)h(feature)g(and)g(v)-5 b(alue)23 b(and)g(m)m(ust)h(ha)m(v)m(e)h(at)g(least)f(features)h(for)e(language,) 630 1381 y(gender,)35 b(dialect)e(and)g(description.)49 b(The)33 b(\014rst)g(there)h(of)g(these)g(are)h(atomic,)g(while)d(the) 630 1491 y(description)c(is)i(a)h(text)g(string)e(describing)f(the)j(v) m(oice.)150 1648 y Fk(\(provide)d(FILENAME\))630 1758 y Fo(Adds)f(FNAME)i(to)g(the)f(v)-5 b(ariable)27 b(pro)m(vided)f(\(if)i (not)g(already)g(there\).)40 b(This)26 b(means)i(that)630 1867 y(future)22 b(calls)f(to)i(\(require)f(FILENAME\))h(will)d(not)j (cause)g(FILENAME)g(to)g(b)s(e)f(re-loaded.)150 2025 y Fk(\(putc)29 b(ECHAR)g(FILEP\))630 2134 y Fo(Put)21 b(ECHAR)g(\(a)g(n)m(um)m(b)s(er\))g(as)g(a)h(c)m(haracter)g(to)g(FILEP) -8 b(.)22 b(If)e(FILEP)h(is)f(nil)f(or)i(not)h(sp)s(eci\014ed)630 2244 y(output)30 b(go)s(es)h(to)g(stdout.)150 2402 y Fk(\(putprop)d(SYM)i(VAL)f(KEY\))630 2511 y Fo(Put)h(prop)s(ert)m(y)g (V)-10 b(AL)30 b(named)g(KEY)g(for)g(SYM.)150 2669 y Fk(\(puts)f(STRING)g(FILEP\))630 2778 y Fo(W)-8 b(rite)22 b(STRING)e(\(prin)m(t)g(name)h(of)h(sym)m(b)s(ol\))e(to)i(FILEP)-8 b(.)21 b(If)g(FILEP)g(is)f(nil)f(or)i(not)h(sp)s(eci\014ed)630 2888 y(output)30 b(go)s(es)h(to)g(stdout.)150 3045 y Fk(\(pwd\))240 b Fo(Returns)29 b(curren)m(t)i(directory)e(as)i(a)g (string.)150 3203 y Fk(\(quit\))192 b Fo(Exit)30 b(from)g(program,)g (do)s(es)g(not)h(return.)150 3361 y Fk(\(quote)e(DATA\))630 3470 y Fo(Return)h(data)h(\(unev)-5 b(aluated\).)150 3628 y Fk(\(rand\))192 b Fo(Returns)29 b(a)i(pseudo)f(random)f(n)m(um)m (b)s(er)g(b)s(et)m(w)m(een)i(0)g(and)f(1)h(using)e(the)h(lib)s(c)e (rand\(\))j(func-)630 3737 y(tion.)150 3895 y Fk(\(read\))192 b Fo(Read)31 b(next)f(s-expression)f(from)h(stdin)f(and)h(return)f(it.) 150 4052 y Fk(\(read-from-string)d(SYMBOL\))630 4162 y Fo(Return)k(\014rst)f(s-expression)h(in)f(prin)m(t)g(name)h(of)h (SYMBOL.)150 4319 y Fk(\(readfp)d(FILEP\))630 4429 y Fo(Read)39 b(and)f(return)f(next)i(s-expression)f(from)g(\014le)g (indicated)f(b)m(y)h(\014le)g(p)s(oin)m(ter)g(FILEP)-8 b(.)630 4539 y(File)30 b(p)s(oin)m(ters)f(are)i(created)g(b)m(y)f(fop)s (en.)150 4696 y Fk(\(remove)e(ITEM)i(LIST\))630 4806 y Fo(\(Non-destructiv)m(ely\))h(remo)m(v)m(e)h(ITEM)e(from)g(LIST.)150 4963 y Fk(\(remove-duplicates)25 b(LIST\))630 5073 y Fo(Remo)m(v)m(e)32 b(duplicate)d(items)h(in)f(LIST.)150 5230 y Fk(\(remove_leading_zeros)c(name\))630 5340 y Fo(Remo)m(v)m(e)32 b(leading)d(zeros)i(from)f(giv)m(en)h(string.)p eop %%Page: 194 196 194 195 bop 150 -116 a Fo(194)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(replace)f(BEFORE) h(AFTER\))630 408 y Fo(Destructiv)m(ely)i(replace)f(con)m(ten)m(ts)i (of)f(cons)f(cell)g(BEF)m(ORE)h(with)e(those)i(of)f(AFTER.)150 573 y Fk(\(request)e(FILENAME\))630 682 y Fo(Chec)m(ks)c(if)e(FNAME)i (is)e(already)h(pro)m(vided)f(\(mem)m(b)s(er)h(of)g(v)-5 b(ariable)22 b(pro)m(vided\))h(if)f(not)i(tries)630 792 y(to)k(loads)e(it,)h(app)s(ending)e Fk(")p Fo(.scm)p Fk(")h Fo(to)i(FILENAME.)g(Uses)f(load)p 2850 792 28 4 v 32 w(library)e(to)i(\014nd)e(the)j(\014le.)630 902 y(Unlik)m(e)h(require,)h(fname)g(isn't)f(found)g(no)i(error)f(o)s (ccurs)150 1066 y Fk(\(require)e(FILENAME\))630 1176 y Fo(Chec)m(ks)41 b(if)f(FNAME)i(is)e(already)h(pro)m(vided)f(\(mem)m (b)s(er)g(of)i(v)-5 b(ariable)40 b(pro)m(vided\))g(if)g(not)630 1285 y(loads)30 b(it,)g(app)s(ending)e Fk(")p Fo(.scm)p Fk(")i Fo(to)h(FILENAME.)g(Uses)g(load)p 2766 1285 V 32 w(library)d(to)j(\014nd)e(the)h(\014le.)150 1450 y Fk(\(require_module)c(l\))630 1559 y Fo(Chec)m(k)40 b(that)h(certain)f (compile-time)f(mo)s(dules)f(are)i(included)e(in)g(this)h (installation.)68 b(l)630 1669 y(ma)m(y)26 b(b)s(e)f(a)h(single)e(atom) i(or)f(list)f(of)i(atoms.)40 b(Eac)m(h)26 b(item)f(in)f(l)h(m)m(ust)g (app)s(ear)g(in)f(*mo)s(dules*)630 1778 y(otherwise)30 b(an)g(error)g(is)f(thro)m(w.)150 1943 y Fk(\(reverse)f(LIST\))630 2052 y Fo(Returns)h(destructiv)m(ely)h(rev)m(ersed)h(LIST.)150 2217 y Fk(\(replacd)d(A)i(B\))630 2326 y Fo(Destructiv)m(ely)h(replace) f(the)g(cdr)g(of)h(A)f(with)f(B.)150 2491 y Fk(\(save-forms)e(FILENAME) h(FORMS)h(HOW\))630 2600 y Fo(Sa)m(v)m(e)e(F)m(ORMS)f(in)f(FILENAME.)h (If)g(HO)m(W)g(is)f(a)h(app)s(ending)e(F)m(ORMS)i(to)g(FILENAME,)630 2710 y(or)k(if)g(HO)m(W)h(is)e(w)h(start)h(from)f(the)h(b)s(eginning)c (of)k(FILENAME.)150 2874 y Fk(Saves)e(the)g(waveform)g(and)g(records)f (its)i(so)g(it)f(can)h(be)g(joined)e(into)i(a)630 2984 y Fo(a)h(single)e(w)m(a)m(v)m(eform)j(at)f(the)f(end.)150 3148 y Fk(\(save_seg_mbrola_entry)24 b(ENTRY)29 b(NAME)g(START)g(DUR)h (TARGS)f(FD\))630 3258 y Fo(En)m(try)h(con)m(tains,)h(\(name)g (duration)e(n)m(um)p 2098 3258 V 32 w(targs)i(start)g(1st)p 2692 3258 V 33 w(targ)p 2886 3258 V 34 w(p)s(os)e(1st)p 3200 3258 V 34 w(targ)p 3395 3258 V 33 w(v)-5 b(al\).)150 3422 y Fk(\(save_segments_mbrola)25 b(UTT)k(FILENAME\))630 3532 y Fo(Sa)m(v)m(e)23 b(segmen)m(t)h(information)c(in)h(MBR)m(OLA)i (format)f(in)f(\014lename.)37 b(The)22 b(format)g(is)g(phone)630 3641 y(duration)27 b(\(ms\))i([\045)g(p)s(osition)d(F0)k(target]*.)42 b([see)29 b(Section)g(22.2)h([MBR)m(OLA],)g(page)f(101])150 3806 y Fk(\(save_waves_during_tts\))630 3915 y Fo(Sa)m(v)m(e)39 b(eac)m(h)f(w)m(a)m(v)m(eform)h(in)d(the)i(curren)m(t)f(directory)g(in) f(\014les)h Fk(")p Fo(tts)p 2928 3915 V 33 w(\014le)p 3078 3915 V 32 w(XXX.w)m(a)m(v)p Fk(")p Fo(.)63 b(use)630 4025 y(\(sa)m(v)m(e)p 833 4025 V 35 w(w)m(a)m(v)m(es)p 1094 4025 V 34 w(during)p 1388 4025 V 31 w(tts)p 1525 4025 V 33 w(STOP\))29 b(to)j(stop)e(sa)m(ving)g(w)m(a)m(v)m(eforms)150 4189 y Fk(\(save_waves_during_tts_S)o(TOP\))630 4299 y Fo(Stop)g(sa)m(ving)g(w)m(a)m(v)m(eforms)i(when)d(doing)h(tts.)150 4463 y Fk(\(SayPhones)e(PHONES\))630 4573 y Fo(PHONES)e(is)f(a)i(list)e (of)h(phonemes.)39 b(This)24 b(uses)i(the)h(Phones)f(t)m(yp)s(e)g (utterance)i(to)f(syn)m(the-)630 4682 y(size)36 b(and)g(pla)m(y)g(the)g (giv)m(en)g(phones.)58 b(Fixed)35 b(duration)g(sp)s(eci\014ed)g(in)g (FP)p 3201 4682 V 33 w(duration)g(and)630 4792 y(\014xed)30 b(monotone)h(duration)e(\(FP)p 1799 4792 V 33 w(F0\))j(are)e(used)g(to) h(generate)h(proso)s(dy)-8 b(.)150 4956 y Fk(\(SayText)28 b(TEXT\))630 5066 y Fo(TEXT,)i(a)h(string,)e(is)h(rendered)f(as)i(sp)s (eec)m(h.)150 5230 y Fk(\(search-for-voices\))630 5340 y Fo(Searc)m(h)g(do)m(wn)f(v)m(oice-path)h(to)g(lo)s(cate)g(v)m(oices.) p eop %%Page: 195 197 195 196 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(195)150 299 y Fk(\(segment_dpitch)26 b(UTT)k(SEG\))630 408 y Fo(Returns)f(delta)i(pitc)m(h,)f(this)f(pitc)m (h)h(min)m(us)f(previous)f(pitc)m(h.)150 560 y Fk(segs_to_peak)f (sylSyl)i(pk_pos)630 670 y Fo(Determines)24 b(the)h(n)m(um)m(b)s(er)e (of)i(segmen)m(ts)g(from)f(the)h(start)g(of)g(a)g(syllable)d(to)j(an)f (in)m(tonation)630 779 y(p)s(eak)150 931 y Fk(\(send-url-to-netscape)h (URL\))630 1041 y Fo(Send)g(giv)m(en)i(URL)g(to)g(netscap)s(e)g(for)f (displa)m(y)-8 b(.)38 b(This)25 b(is)h(primarily)d(used)j(to)h(displa)m (y)e(parts)630 1150 y(of)31 b(the)f(man)m(ual)g(referenced)g(in)f(do)s (cumen)m(tation)h(strings.)150 1302 y Fk(\(send_sexpr_to_client)25 b(SEXPR\))630 1412 y Fo(Sends)k(giv)m(en)h(sexpression)f(to)j(curren)m (tly)d(connected)i(clien)m(t.)150 1563 y Fk(\(set!)e(SYMBOL)g(VAL\))630 1673 y Fo(Set)i(SYMBOL)f(to)h(ha)m(v)m(e)h(v)-5 b(alue)29 b(V)-10 b(AL,)31 b(returns)e(V)-10 b(AL.)150 1825 y Fk(\(set-car!)28 b(CONS1)h(DATA1\))630 1934 y Fo(Set)e(car)g(of)f(CONS1)g(to)i(b)s(e)e (D)m(A)-8 b(T)g(A1.)41 b(Returns)26 b(CONS1.)39 b(If)26 b(CONS1)g(not)h(of)g(t)m(yp)s(e)f(consp)630 2044 y(an)k(error)g(is)g (is)f(giv)m(en.)41 b(This)28 b(is)i(a)h(destructiv)m(e)f(op)s(eration.) 150 2196 y Fk(\(set-cdr!)e(CONS1)h(DATA1\))630 2305 y Fo(Set)d(cdr)g(of)g(CONS1)g(to)h(b)s(e)e(D)m(A)-8 b(T)g(A1.)42 b(Returns)25 b(CONS1.)39 b(If)26 b(CONS1)f(not)i(of)f(t)m(yp)s(e)g (consp)630 2415 y(an)k(error)g(is)g(is)f(giv)m(en.)41 b(This)28 b(is)i(a)h(destructiv)m(e)f(op)s(eration.)150 2567 y Fk(\(set-symbol-value!)25 b(SYMBOLNAME)j(VALUE\))630 2676 y Fo(Set)33 b(SYMBOLNAME's)h(v)-5 b(alue)32 b(to)i(V)-10 b(ALUE,)33 b(this)f(is)g(m)m(uc)m(h)h(faster)h(than)f(set!)49 b(but)32 b(use)630 2786 y(with)d(caution.)150 2937 y Fk(\(set_backtrace)d(arg\))630 3047 y Fo(If)32 b(arg)i(is)e(non-nil)e (a)k(bac)m(ktrace)g(will)d(b)s(e)h(displa)m(y)f(automatically)i(after)g (errors)g(if)f(arg)h(is)630 3157 y(nil,)24 b(a)h(bac)m(ktrace)h(will)c (not)j(automatically)f(b)s(e)g(displa)m(y)m(ed)f(\(use)h(\(:bac)m (ktrace\))k(for)c(displa)m(y)630 3266 y(explicitly)-8 b(.)150 3418 y Fk(\(set_module_description)24 b(MOD)30 b(DESC\))630 3528 y Fo(Set)h(the)f(description)f(for)h(the)g(mo)s(dule) f(named)h(MOD.)150 3679 y Fk(\(set_server_safe_functio)o(ns)24 b(LIST\))630 3789 y Fo(Sets)i(restricted)g(list)e(to)j(LIST.)e(When)h (restricted)f(list)g(is)g(non-nil)f(only)h(functions)f(whose)630 3898 y(names)i(app)s(ear)f(in)g(this)g(list)g(ma)m(y)h(b)s(e)g (executed.)40 b(This)24 b(is)h(used)h(so)g(that)g(clien)m(ts)g(in)f (serv)m(er)630 4008 y(mo)s(de)j(ma)m(y)h(b)s(e)e(restricted)h(to)h(a)f (small)f(n)m(um)m(b)s(er)g(of)h(safe)h(commands.)39 b([see)29 b(Section)f(28.3)630 4118 y([Serv)m(er/clien)m(t)j(API],)f(page)h(140]) 150 4269 y Fk(\(setenv)d(VARNAME)h(VALUE\))630 4379 y Fo(Set)i(the)f(UNIX)h(en)m(vironmen)m(t)f(v)-5 b(ariable)29 b(V)-10 b(ARNAME)31 b(to)g(V)-10 b(ALUE.)150 4531 y Fk (\(setup_beep_lex\))630 4640 y Fo(Lexicon)42 b(deriv)m(ed)g(from)g(the) g(British)f(English)f(Example)h(Pron)m(unciation)g(dictionary)630 4750 y(\(BEEP\))31 b(from)f(T)-8 b(on)m(y)31 b(Robinson)d(a)5 b(jr)p Fk(@)p Fo(eng.cam.ac.uk.)43 b(Around)29 b(160,000)k(en)m(tries.) 150 4902 y Fk(\(setup_cmu6_lex\))630 5011 y Fo(Lexicon)g(deriv)m(ed)g (from)g(the)g(CMU)h(lexicon)f(\(cm)m(udict-0.6\),)j(around)c(100,000)37 b(en)m(tries,)630 5121 y(in)31 b(the)i(radio)f(phoneset)h(\(sort)g(of)g (darpa-lik)m(e\).)48 b(Includes)31 b(letter)i(to)g(sound)f(rule)f(mo)s (del)630 5230 y(trained)39 b(from)g(this)g(data,)k(the)d(format)g(of)g (this)f(lexicon)f(is)h(suitable)g(for)g(the)h(UniSyn)630 5340 y(metrical)30 b(phonology)g(mo)s(dules.)39 b(That)30 b(is)f(the)i(en)m(tries)f(are)h(not)f(syllabi\014ed,)p eop %%Page: 196 198 196 197 bop 150 -116 a Fo(196)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(setup_cmu_lex\)) 630 408 y Fo(Lexicon)k(deriv)m(ed)g(from)g(the)g(CMU)h(lexicon)f(\(cm)m (udict-0.4\),)j(around)c(100,000)37 b(en)m(tries,)630 518 y(in)31 b(the)i(radio)f(phoneset)h(\(sort)g(of)g(darpa-lik)m(e\).) 48 b(Includes)31 b(letter)i(to)g(sound)f(rule)f(mo)s(del)630 628 y(trained)e(from)h(this)g(data,)h(and)f(uses)g(the)g(lexical)f (stress)i(predictor)e(from)h(O)m(ALD.)150 798 y Fk(\(setup_cmumt_lex\)) 630 908 y Fo(Lexicon)j(deriv)m(ed)g(from)g(the)g(CMU)h(lexicon)f(\(cm)m (udict-0.4\),)j(around)c(100,000)37 b(en)m(tries,)630 1017 y(in)31 b(the)i(radio)f(phoneset)h(\(sort)g(of)g(darpa-lik)m(e\).) 48 b(Includes)31 b(letter)i(to)g(sound)f(rule)f(mo)s(del)630 1127 y(trained)e(from)h(this)g(data,)h(and)f(uses)g(the)g(lexical)f (stress)i(predictor)e(from)h(O)m(ALD.)150 1297 y Fk (\(setup_cstr_lexicon\))630 1407 y Fo(De\014ne)23 b(and)g(setup)g(the)h (CSTR)d(lexicon.)38 b(The)23 b(CSTR)f(lexicon)g(consists)h(of)g(ab)s (out)g(25,000)630 1517 y(en)m(tries)30 b(in)g(the)g(mrpa)g(phone)g (set.)42 b(A)30 b(large)h(n)m(um)m(b)s(er)e(of)i(sp)s(eci\014c)e(lo)s (cal)h(en)m(tries)g(are)h(also)630 1626 y(added)f(to)h(the)f(addenda.) 150 1797 y Fk(\(setup_moby_lexicon\))630 1906 y Fo(De\014ne)k(and)f (setup)h(the)g(MOBY)h(lexicon.)50 b(This)32 b(is)h(deriv)m(ed)g(from)h (the)g(public)d(domain)630 2016 y(v)m(ersion)i(of)h(the)g(Mob)m(y)h (\(TM\))g(Pron)m(unciator)e(I)s(I)g(lexicon.)50 b(It)34 b(can)g(b)s(e)g(con)m(v)m(erted)h(auto-)630 2125 y(matically)d(to)h (British)e(English)f(mrpa)i(phoneset)h(whic)m(h)e(of)i(course)g(is)f (sub-optimal.)46 b(It)630 2235 y(con)m(tains)33 b(around)f(120,000)k (en)m(tries)d(and)f(has)h(part)f(of)i(sp)s(eec)m(h)f(information)e(for) i(homo-)630 2345 y(graphs.)150 2515 y Fk(\(setup_oald_lexicon\))630 2625 y Fo(De\014ne)h(and)f(setup)g(the)g(CUV)m(O)m(ALD)i(lexicon.)49 b(This)32 b(is)g(deriv)m(ed)h(from)g(the)h(Computer)630 2734 y(Users)25 b(V)-8 b(ersion)25 b(of)h(the)f(Oxford)g(Adv)-5 b(anced)25 b(Learners')g(Dictionary)g(of)h(Curren)m(t)e(English.)630 2844 y(This)h(v)m(ersion)h(includes)e(a)k(trained)d(set)j(of)e(letter)h (to)h(sound)d(rules)h(whic)m(h)f(ha)m(v)m(e)j(also)f(b)s(een)630 2953 y(used)g(to)i(reduce)e(the)h(actual)g(lexicon)f(size)h(b)m(y)g(o)m (v)m(er)h(half,)f(for)f(those)h(en)m(tries)g(that)h(the)f(lts)630 3063 y(mo)s(del)h(gets)j(exactly)f(the)f(same.)150 3233 y Fk(\(socket_open)d(HOST)i(PORT)g(HOW\))630 3343 y Fo(Op)s(en)35 b(a)i(\014le)f(descriptor)f(to)i(the)g(BSD)g(so)s(c)m(k)m(et)h(on)e (HOST)g(at)h(POR)-8 b(T.)36 b(HO)m(W)h(ma)m(y)h(b)s(e)630 3453 y Fk(")p Fo(r)p Fk(")32 b Fo(or)h Fk(")p Fo(w)p Fk(")e Fo(for)i(a)g(read)g(only)f(or)h(write)f(only)g (\014ledescriptor.)46 b(If)32 b(HO)m(W)i(is)e(unsp)s(eci\014ed)630 3562 y(or)i(NIL,)g Fk(")p Fo(w)p Fk(")f Fo(is)g(assumed.)51 b(If)33 b(HO)m(W)i(is)e Fk(")p Fo(rw)p Fk(")f Fo(then)i(a)g(list)f(of)h (t)m(w)m(o)h(\014le)e(descriptors)g(is)630 3672 y(returned,)27 b(the)h(\014rst)f(for)h(reading)e(the)i(second)g(for)f(writing.)38 b(T)-8 b(ak)m(e)29 b(care)g(when)e(using)f(the)630 3781 y(bidiectional)i(so)s(c)m(k)m(et)k(that)f(deadlo)s(c)m(k)f(do)s(esn't)h (o)s(ccur.)150 3952 y Fk(\(sort-and-dump-docstring)o(s)24 b(DOCSTRINGS)k(FILEFP\))630 4061 y Fo(DOCSTRINGS)h(is)h(an)h(asso)s(c)g (list)e(of)i(name)g(and)f(do)s(cumen)m(t)h(string)e(v)-5 b(ar-do)s(cstrings)30 b(or)630 4171 y(func-do)s(cstrings.)41 b(This)29 b(v)m(ery)j(individual)26 b(function)k(sorts)h(the)h(list)d (and)i(prin)m(ts)e(out)j(the)630 4281 y(do)s(cumen)m(tation)e(strings)f (as)i(texinfo)f(list)f(mem)m(b)s(ers)h(to)h(FILEFP)-8 b(.)150 4451 y Fk(\(sqrt)29 b(NUM\))630 4561 y Fo(Return)h(square)g(ro) s(ot)g(of)h(NUM.)150 4731 y Fk(\(rand)e(SEED\))630 4841 y Fo(Seeds)h(the)h(lib)s(c)d(pseudo)h(random)h(n)m(um)m(b)s(er)f (generator)j(with)d(the)h(in)m(teger)h(SEED.)150 5011 y Fk(\(string-after)c(ATOM)i(AFTER\))630 5121 y Fo(Returns)23 b(an)g(atom)i(whose)e(prin)m(tname)f(is)h(the)h(substring)d(of)j(A)-8 b(TOM's)24 b(prin)m(tname)e(whic)m(h)630 5230 y(app)s(ears)29 b(after)i(AFTER.)f(This)e(is)h(a)h(wraparound)e(for)i(the)g(EST)p 2915 5230 28 4 v 32 w(String.after)f(function)630 5340 y(in)g(C)p Fk(++)p Fo(,)h(and)f(hence)i(has)f(the)h(same)f(conditions)f (for)h(b)s(oundary)f(cases.)p eop %%Page: 197 199 197 198 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(197)150 299 y Fk(\(string-append)26 b(STR1)k(STR2)f(...\))630 408 y Fo(Return)24 b(a)h(string)f(made)h (from)f(the)h(concatenation)h(of)f(the)g(prin)m(t)f(names)g(of)h(STR1)f (STR2)630 518 y(...)150 682 y Fk(\(string-before)i(ATOM)k(BEFORE\))630 792 y Fo(Returns)23 b(an)g(atom)i(whose)e(prin)m(tname)f(is)h(the)h (substring)d(of)j(A)-8 b(TOM's)24 b(prin)m(tname)e(whic)m(h)630 902 y(app)s(ears)i(b)s(efore)h(BEF)m(ORE.)g(This)e(is)h(a)i(wraparound) d(for)h(the)h(EST)p 2988 902 28 4 v 32 w(String.b)s(efore)f(func-)630 1011 y(tion)30 b(in)f(C)p Fk(++)p Fo(,)h(and)f(hence)i(has)f(the)h (same)f(conditions)f(for)h(b)s(oundary)f(cases.)150 1176 y Fk(\(string-equal)e(ATOM1)i(ATOM2\))630 1285 y Fo(Returns)k(t)h(if)f (A)-8 b(TOM's)35 b(prin)m(tname)d(is)h(equal)h(to)h(A)-8 b(TOM's)34 b(prin)m(t)f(name,)i(otherwise)e(it)630 1395 y(returns)c(nil.)150 1559 y Fk(\(string-length)d(SYMBOL\))630 1669 y Fo(Return)k(the)g(n)m(um)m(b)s(er)f(of)i(c)m(haracters)h(in)d (the)h(prin)m(t)f(name)i(of)f(SYMBOL.)150 1833 y Fk(\(string-matches)c (ATOM)j(REGEX\))630 1943 y Fo(Returns)i(t)h(if)f(A)-8 b(TOM's)32 b(prin)m(tname)f(matc)m(hes)i(the)f(regular)f(expression)f (REGEX,)i(oth-)630 2052 y(erwise)d(it)h(returns)g(nil.)150 2217 y Fk(\(sub_utt)e(ITEM\))630 2326 y Fo(Return)c(a)g(new)g (utterance)i(that)f(con)m(tains)f(a)h(cop)m(y)g(of)g(this)e(item)h(and) g(all)f(its)h(descenden)m(ts)630 2436 y(and)30 b(related)g(descenden)m (ts.)150 2600 y Fk(\(substring)e(STRING)g(START)h(LENGTH\))630 2710 y Fo(Return)h(a)g(substring)f(of)h(STRING)g(starting)g(at)h(ST)-8 b(AR)g(T)30 b(of)h(length)e(LENGTH.)150 2874 y Fk(\(sxhash)f(OBJ)i(N\)) 630 2984 y Fo(Return)g(hashing)e(v)-5 b(alue)30 b(for)g(OBJ,)h(in)e (range)i(n.)150 3148 y Fk(\(syl_yn_question)26 b(utt)j(syl\))630 3258 y Fo(Return)37 b(1)i(if)e(this)g(is)h(the)g(last)g(syllable)e(in)h (a)i(y)m(es-no)g(question.)63 b(Basically)38 b(if)f(it)h(ends)630 3367 y(in)f(question)g(mark)h(and)g(do)s(esn't)g(start)g(with)f(a)i (wh-w)m(o)s(erd.)63 b(This)36 b(isn't)h(righ)m(t)h(but)f(it)630 3477 y(dep)s(ends)29 b(on)h(ho)m(w)g(m)m(uc)m(h)h(y)m(ou)f(w)m(an)m(t)i (rising)c(in)m(tonation.)150 3641 y Fk(\(symbol-bound?)e(VARNAME\))630 3751 y Fo(Return)k(t)g(is)g(V)-10 b(ARNAME)31 b(has)f(a)h(v)-5 b(alue,)30 b(nil)e(otherwise.)150 3915 y Fk(\(symbol-value)f (SYMBOLNAME\))630 4025 y Fo(Returns)d(the)h(v)-5 b(alue)25 b(of)g(SYMBOLNAME,)h(an)f(error)g(is)f(giv)m(en)h(SYMBOLNAME)h(is)e (not)630 4134 y(a)31 b(b)s(ound)d(sym)m(b)s(ol.)150 4299 y Fk(\(symbol?)g(DATA\))630 4408 y Fo(Returns)h(t)i(if)e(D)m(A)-8 b(T)g(A)33 b(is)c(a)i(sym)m(b)s(ol,)e(nil)f(otherwise.)150 4573 y Fk(\(symbolconc)f(SYMBOL1)i(SYMBOL2)f(...\))630 4682 y Fo(F)-8 b(orm)38 b(new)g(sym)m(b)s(ol)e(b)m(y)i(concatenation)h (of)f(the)g(prin)m(t)f(forms)g(of)h(eac)m(h)h(of)f(SYMBOL1)630 4792 y(SYMBOL2)31 b(etc.)150 4956 y Fk(\(symbolexplode)26 b(SYMBOL\))630 5066 y Fo(Returns)j(list)g(of)i(atoms)g(one)g(for)f(eac) m(h)i(c)m(haracter)g(in)d(the)h(prin)m(t)f(name)i(of)f(SYMBOL.)150 5230 y Fk(\(SynthText)e(TEXT\))630 5340 y Fo(TEXT,)i(a)h(string,)e(is)h (rendered)f(as)i(sp)s(eec)m(h.)p eop %%Page: 198 200 198 199 bop 150 -116 a Fo(198)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(system)f (COMMAND\))630 408 y Fo(Execute)j(COMMAND)g(\(a)g(string\))f(with)f (the)i(UNIX)f(shell.)150 569 y Fk(\(targets_to_f0)c(UTT\))630 678 y Fo(Mak)m(e)g(f0)e(relation,)h(and)f(place)g(an)h(f0)f(con)m(tour) h(in)e(it,)j(using)c(F0)j(targets)h(from)e(the)h(T)-8 b(arget)630 788 y(Relation)150 948 y Fk(\(terpri)28 b(FILEP\))630 1058 y Fo(Prin)m(t)h(newline)f(to)j(FILEP)-8 b(,)30 b(is)f(FILEP)h(is)f (nil)f(or)i(not)g(sp)s(eci\014ed)e(a)j(newline)d(it)h(is)g(prin)m(ted) 630 1167 y(to)i(stdout.)150 1327 y Fk(\(Text)e(UTT\))630 1437 y Fo(F)-8 b(rom)31 b(string)e(in)g(input)g(form)h(tok)m(enize)h (and)f(create)i(a)f(tok)m(en)g(stream.)150 1597 y Fk (\(the-environment\))630 1707 y Fo(Returns)e(the)i(curren)m(t)f (\(SIOD\))h(en)m(vironmen)m(t.)150 1867 y Fk(\(tilt_add_intevent)25 b(utt)30 b(syl)f(name\))630 1976 y Fo(Add)g(a)i(new)f(In)m(tEv)m(en)m (t)i(related)e(to)h(syl)e(with)h(name.)150 2137 y Fk (\(tilt_assign_parameters)24 b(utt\))630 2246 y Fo(Assigned)g(tilt)f (parameters)i(to)h(In)m(tEv)m(en)m(ts,)h(dep)s(ending)22 b(on)i(the)h(v)-5 b(alue)24 b(of)h(the)g(P)m(arameter)630 2356 y(tilt)p 757 2356 28 4 v 32 w(metho)s(d)30 b(uses)g(w)m(agon)h (trees)g(\(cart\))h(or)e(linear)f(regression)h(mo)s(dels)f(\(lr\).)150 2516 y Fk(\(tilt_assign_parameters_)o(lr)24 b(utt\))630 2626 y Fo(Assing)39 b(parameters)h(\(start)p 1638 2626 V 34 w(f0,)i(tilt,)g(amplitude,)e(p)s(eak)p 2654 2626 V 32 w(p)s(os)f(and)h(duration\))e(to)j(eac)m(h)630 2735 y(In)m(tEv)m(en)m(t.)h(Prediction)29 b(b)m(y)h(linear)f(regression)h (mo)s(dels)150 2895 y Fk(\(tilt_assign_parameters_)o(wago)o(n)24 b(utt\))630 3005 y Fo(Assing)39 b(parameters)h(\(start)p 1638 3005 V 34 w(f0,)i(tilt,)g(amplitude,)e(p)s(eak)p 2654 3005 V 32 w(p)s(os)f(and)h(duration\))e(to)j(eac)m(h)630 3114 y(In)m(tEv)m(en)m(t.)h(Uses)30 b(W)-8 b(agon)33 b(trees)d(to)i(predict)d(v)-5 b(alues)150 3275 y Fk (\(tilt_assign_params_lr)24 b(ie)30 b(lrmodels\))630 3384 y Fo(Assign)f(the)i(names)f(parameters)h(to)g(ie)f(using)f(the)h (trees)h(and)f(names)g(in)g(trees.)150 3544 y Fk (\(tilt_assign_params_wago)o(n)24 b(ie)30 b(trees\))630 3654 y Fo(Assign)f(the)i(names)f(parameters)h(to)g(ie)f(using)f(the)h (trees)h(and)f(names)g(in)g(trees.)150 3814 y Fk(\(tilt_map_f0_range)25 b(utt\))630 3924 y Fo(In)37 b(order)f(fo)i(b)s(etter)f(trained)g(mo)s (dels)f(to)i(b)s(e)e(used)h(for)g(v)m(oices)h(whic)m(h)e(don't)h(ha)m (v)m(e)i(the)630 4033 y(necessary)32 b(data)g(to)g(train)e(mo)s(dels)h (from)f(the)i(targets)h(ma)m(y)f(b)s(e)f(mapp)s(ed)f(to)i(a)f (di\013eren)m(t)630 4143 y(pitc)m(h)38 b(range.)66 b(Note)40 b(this)e(is)f(not)i(optimal)f(as)h(pitc)m(h)f(ranges)h(don't)g(map)f (that)h(easily)-8 b(,)630 4253 y(but)41 b(the)i(the)f(results)f(can)h (sometimes)g(b)s(e)g(b)s(etter)g(than)f(using)g(a)h(less)g (sophisticated)630 4362 y(F0)e(generation)f(mo)s(del.)65 b(The)38 b(metho)s(d)h(used)f(is)g(to)h(de\014ne)f(the)i(mean)e(and)h (standard)630 4472 y(deviation)29 b(of)h(the)g(sp)s(eak)m(er)g(the)g (mo)s(del)f(w)m(as)h(trained)f(on)h(and)f(the)h(mean)g(and)g(standard) 630 4581 y(deciation)f(of)h(the)f(desired)f(sp)s(eak)m(er.)41 b(Mapping)28 b(is)h(b)m(y)g(con)m(v)m(erting)i(the)e(actual)h(F0)g(v)-5 b(alue)630 4691 y(to)35 b(zscores)h(\(distance)e(from)g(mean)h(in)e(n)m (um)m(b)s(er)g(of)i(stddev\))f(and)g(bac)m(k)h(in)m(to)g(the)g(other) 630 4800 y(domain.)40 b(The)29 b(v)-5 b(ariable)30 b(in)m(t)p 1631 4800 V 32 w(tilt)p 1785 4800 V 32 w(params)g(is)f(used)h(to)h (\014nd)e(the)h(v)-5 b(alues.)150 4961 y Fk(\(tilt_validate)26 b(utt\))630 5070 y Fo(Chec)m(ks)h(that)g(the)g(predicted)f(tilt)g (parameter)h(fall)f(with)f(reasonable)i(limits)e(and)h(mo)s(dify)630 5180 y(them)k(where)g(p)s(ossible)e(to)j(b)s(e)f(more)g(reasonable.)150 5340 y Fk(\(time\))192 b Fo(Returns)29 b(n)m(um)m(b)s(er)h(of)g (seconds)g(since)g(start)h(of)g(ep)s(o)s(c)m(h)f(\(if)f(OS)h(p)s (ermits)e(it)i(coun)m(table\).)p eop %%Page: 199 201 199 200 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(199)150 299 y Fk(\(time_to_next_vowel)25 b(syl\))630 408 y Fo(The)30 b(time)g(from)g(v)m(o)m(w)m(el)p 1460 408 28 4 v 34 w(start)h(to)g(next)f(v)m(o)m(w)m(el)p 2243 408 V 34 w(start)150 557 y Fk(\(tok_allcaps)d(sc\))630 667 y Fo(Returns)i(1)i(if)f(sc's)g(name)h(is)e(all)g(capitals,)h(0)h (otherwise)150 816 y Fk(\(tok_rex)d(sc\))630 925 y Fo(Returns)h(1)i(if) f(King)f(lik)m(e)g(title)h(is)g(within)e(3)i(tok)m(ens)i(b)s(efore)e (or)g(2)h(after.)150 1074 y Fk(\(tok_rex)d(sc\))630 1183 y Fo(Returns)h(1)i(if)f(this)f(is)g(a)i(King-lik)m(e)e(name.)150 1332 y Fk(\(tok_roman_to_numstring)24 b(ROMAN\))630 1442 y Fo(T)-8 b(ak)m(es)28 b(a)f(string)e(of)i(roman)f(n)m(umerals)f(and)h (con)m(v)m(erts)i(it)e(to)i(a)f(n)m(um)m(b)s(er)e(and)h(then)g(returns) 630 1551 y(the)31 b(prin)m(ted)d(string)i(of)g(that.)42 b(Only)28 b(deals)i(with)f(n)m(um)m(b)s(ers)g(up)g(to)j(50.)150 1700 y Fk(\(tok_section_name)26 b(sc\))630 1810 y Fo(Returns)j(1)i(if)f (sc's)g(name)h(is)e(in)g(list)g(of)i(things)e(that)i(are)g(section/c)m (hapter)g(lik)m(e.)150 1958 y Fk(\(tok_string_as_letters)24 b(NAME\))630 2068 y Fo(Return)f(list)g(of)i(letters)f(mark)m(ed)g(as)h (letter)f(part)g(of)h(sp)s(eec)m(h)f(made)g(b)m(y)g(explo)s(ding)e (NAME.)150 2217 y Fk(\(Token)29 b(UTT\))630 2326 y Fo(Build)d(a)i(W)-8 b(ord)28 b(stream)g(from)f(the)h(T)-8 b(ok)m(en)29 b(stream,)g (analyzing)e(comp)s(ound)f(w)m(ords)h(n)m(um-)630 2436 y(b)s(ers)h(etc)j(as)e(tok)m(ens)h(in)m(to)g(w)m(ords.)39 b(Resp)s(ects)30 b(the)f(P)m(arameter)i(Language)f(to)g(c)m(ho)s(ose)h (the)630 2545 y(appropriate)e(tok)m(en)j(to)f(w)m(ord)f(mo)s(dule.)150 2694 y Fk(\(Token_Any)e(UTT\))630 2804 y Fo(Build)j(a)j(W)-8 b(ord)34 b(stream)g(from)f(the)h(T)-8 b(ok)m(en)34 b(stream,)h(in)d(a)i (language)g(indep)s(enden)m(t)d(w)m(a)m(y)-8 b(,)630 2913 y(whic)m(h)37 b(means)i(that)g(all)e(simple)f(tok)m(ens)k(should)c (b)s(e)i(in)f(the)i(lexicon,)h(or)e(analysed)g(b)m(y)630 3023 y(letter)31 b(to)g(sound)e(rules.)150 3172 y Fk(\(token_end_punc)d (UTT)k(WORD\))630 3281 y Fo(If)40 b(punctuation)e(at)j(end)f(of)g (related)g(T)-8 b(ok)m(en)41 b(and)e(if)g(W)m(ORD)i(is)f(last)g(w)m (ord)f(in)g(T)-8 b(ok)m(en)630 3391 y(return)29 b(punc,)h(otherwise)g (0.)150 3540 y Fk(\(Token_English)c(UTT\))630 3649 y Fo(Build)c(a)i(W)-8 b(ord)25 b(stream)f(from)g(the)g(T)-8 b(ok)m(en)25 b(stream,)h(for)e(English)d(\(American)j(and)g(British)630 3759 y(English\),)29 b(analyzing)g(comp)s(ound)g(w)m(ords,)h(n)m(um)m (b)s(ers,)f(etc.)42 b(as)31 b(tok)m(ens)g(in)m(to)f(w)m(ords.)150 3907 y Fk(\(token_money_expand)25 b(type\))630 4017 y Fo(Con)m(v)m(ert)31 b(shortened)f(form)g(of)h(money)f(iden)m(ti\014er)f (to)i(w)m(ords)e(if)h(of)g(a)h(kno)m(wn)f(t)m(yp)s(e.)150 4166 y Fk(\(token_no_starting_quote)24 b(TOKEN\))630 4275 y Fo(Chec)m(k)29 b(to)g(see)g(if)f(a)g(single)g(quote)h(\(or)f (bac)m(kquote\))j(app)s(ears)c(as)i(prepunctuation)e(in)g(this)630 4385 y(tok)m(en)d(or)e(an)m(y)h(previous)e(one)i(in)e(this)h (utterance.)39 b(This)21 b(is)g(used)h(to)i(disam)m(biguate)d(ending) 630 4495 y(single)29 b(quote)i(as)g(p)s(ossessiv)m(e)e(or)i(end)e (quote.)150 4643 y Fk(\(Token_POS)f(UTT\))630 4753 y Fo(Assign)41 b(feature)h(tok)m(en)p 1471 4753 V 34 w(p)s(os)f(to)h(tok) m(ens)h(thats)f(matc)m(h)h(CAR)-8 b(T)41 b(trees)i(in)d(the)i(v)-5 b(ariable)630 4862 y(tok)m(en)p 851 4862 V 34 w(p)s(os)p 1020 4862 V 32 w(cart)p 1208 4862 V 34 w(trees.)40 b(These)27 b(are)h(used)f(for)g(gross)h(lev)m(el)f(p)s(os)g(suc)m(h)g(as)h(iden)m (tifying)d(ho)m(w)630 4972 y(n)m(um)m(b)s(ers)k(should)f(b)s(e)i(pron)m (unced.)150 5121 y Fk(\(tok_pos)e(sc\))630 5230 y Fo(Returns)20 b(a)i(general)f(p)s(os)f(for)h(sc's)g(name.)38 b(n)m(umeric)20 b(All)f(digits)h(n)m(um)m(b)s(er)g(\015oat)h(or)g(comma'd)630 5340 y(n)m(umeric)32 b(sym)g(Con)m(tains)g(at)i(least)f(one)g(non)f (alphan)m(umeric)f(mon)m(th)i(has)f(mon)m(th)h(name)p eop %%Page: 200 202 200 201 bop 150 -116 a Fo(200)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)630 299 y(\(or)42 b(abbrev\))g(da)m(y)g(has)g(da)m(y)g(name)g(\(or)h(abbrev\))e(ro)s (otname)i(else)e(do)m(wncased)i(alpha-)630 408 y(b)s(etic.)d(Note)30 b(this)e(can)h(b)s(e)f(used)h(to)g(\014nd)f(tok)m(en)p 2289 408 28 4 v 34 w(p)s(os)g(but)g(isn't)g(used)g(directly)g(as)h(its) g(not)630 518 y(disciminatory)f(enough.)150 664 y Fk(\(Token_Spanish)e (UTT\))630 774 y Fo(Build)i(a)i(W)-8 b(ord)31 b(stream)f(from)g(the)g (T)-8 b(ok)m(en)31 b(stream,)g(for)f(Castillian)d(Spanish,)h(analyzing) 630 883 y(comp)s(ound)h(w)m(ords,)h(n)m(um)m(b)s(ers)f(etc)i(as)g(tok)m (ens)g(in)m(to)g(w)m(ords.)150 1029 y Fk(\(english_token_to_words)24 b(TOKEN)29 b(NAME\))630 1139 y Fo(Returns)i(a)i(list)e(of)i(w)m(ords)f (for)g(NAME)h(from)f(TOKEN.)f(This)g(allo)m(ws)h(the)g(user)g(to)h (cus-)630 1249 y(tomize)d(v)-5 b(arious)29 b(non-lo)s(cal,)g(m)m (ulti-w)m(ord,)f(con)m(text)j(dep)s(enden)m(t)e(translations)f(of)i (tok)m(ens)630 1358 y(in)m(to)24 b(w)m(ords.)38 b(If)24 b(this)e(function)h(is)g(unset)h(only)f(the)h(builtin)c(translation)j (rules)g(are)h(used,)h(if)630 1468 y(this)e(is)g(set)h(the)g(builtin)d (rules)h(are)i(not)g(used)g(unless)e(explicitly)f(called.)38 b([see)25 b(Section)e(15.2)630 1577 y([T)-8 b(ok)m(en)31 b(to)h(w)m(ord)e(rules],)f(page)i(75])150 1724 y Fk(\(Token_Welsh)c (UTT\))630 1833 y Fo(Build)k(a)j(W)-8 b(ord)34 b(stream)g(from)f(the)g (T)-8 b(ok)m(en)34 b(stream,)h(for)f(W)-8 b(elsh,)34 b(analyzing)e(comp)s(ound)630 1943 y(w)m(ords,)e(n)m(um)m(b)s(ers)f (etc)i(as)g(tok)m(ens)g(in)m(to)g(w)m(ords.)150 2089 y Fk(\(zerostart)d(sc\))630 2198 y Fo(Returns,)i(1)g(if)g(\014rst)f(c)m (har)i(of)g(sc's)f(name)h(is)e(0,)i(0)g(otherwise.)150 2345 y Fk(\(track.copy)c(TRACK\))630 2454 y Fo(Return)j(a)g(cop)m(y)h (of)g(TRA)m(CK.)150 2600 y Fk(\(track.load)c(FILENAME)h(FILETYPE)h (ISHIFT\))630 2710 y Fo(Load)40 b(and)g(return)e(a)j(trac)m(k)g(from)e (FILENAME.)i(Resp)s(ect)f(FILETYPE)g(is)f(sp)s(eci\014ed)630 2819 y(and)30 b(ISHIFT)f(if)h(sp)s(eci\014ed.)150 2966 y Fk(\(track.save)d(TRACK)i(FILENAME)f(FILETYPE\))630 3075 y Fo(Sa)m(v)m(e)h(TRA)m(CK)f(in)e(FILENAME,)j(in)d(formar)i (FILETYPE,)f(est)i(is)e(used)g(if)g(FILETYPE)630 3185 y(is)i(unsp)s(eci\014ed)f(or)i(nil.)150 3331 y Fk(\(tts)f(FILE)g (MODE\))630 3440 y Fo(Con)m(v)m(ert)i(FILE)f(to)h(sp)s(eec)m(h.)41 b(MODE)30 b(iden)m(ti\014es)f(an)m(y)i(sp)s(ecial)e(treatmen)m(t)i (necessary)g(for)630 3550 y(FILE.)f(This)e(is)i(simply)d(a)k(fron)m(t)f (end)f(to)i(tts)p 2176 3550 V 33 w(\014le)f(but)f(puts)g(the)i(system)f (in)f(async)h(audio)630 3660 y(mo)s(de)g(\014rst.)40 b([see)31 b(Chapter)f(9)h([TTS],)f(page)h(31])150 3806 y Fk(\(tts_file)d(FILE)h(MODE\))630 3915 y Fo(Lo)m(w)22 b(lev)m(el)g(access)h(to)g(tts)f(function,)h(y)m(ou)f(probably)e(w)m (an)m(t)j(to)f(use)g(the)g(function)f(tts)h(rather)630 4025 y(than)41 b(this)e(one.)73 b(Render)40 b(data)h(in)f(FILE)g(as)h (sp)s(eec)m(h.)72 b(Resp)s(ect)41 b(MODE.)h(Curren)m(tly)630 4134 y(mo)s(des)30 b(are)h(de\014ned)e(through)g(the)i(v)-5 b(ariable)29 b(tts)p 2328 4134 V 33 w(text)p 2519 4134 V 34 w(mo)s(des.)150 4281 y Fk(\(tts_file_xml)e(FILE\))630 4390 y Fo(Lo)m(w)33 b(lev)m(el)f(tts)i(pro)s(cessor)e(for)h(XML)g (\014les.)46 b(This)31 b(assumes)i(that)g(elemen)m(t)g(instructions)630 4500 y(are)e(set)g(up)e(in)g(the)i(v)-5 b(ariable)29 b(xxml)p 1862 4500 V 31 w(elemen)m(ts.)150 4646 y Fk(\(find_text_mode)d (FILE)j(ALIST\))630 4755 y Fo(Searc)m(h)g(through)e(ALIST)g(for)i(one)f (that)h(matc)m(hes)h(FILE.)e(Returns)f(nil)g(if)g(nothing)g(mac-)630 4865 y(thes.)150 5011 y Fk(\(tts_return_to_client\))630 5121 y Fo(This)52 b(function)g(is)h(called)f(b)m(y)i(clien)m(ts)f(who)g (wish)f(to)i(return)e(w)m(a)m(v)m(eforms)j(of)f(their)630 5230 y(text)67 b(samples)d(async)m(hronously)-8 b(.)146 b(This)64 b(replaces)h(utt.pla)m(y)h(in)f(tts)p 3252 5230 V 33 w(ho)s(oks)g(with)630 5340 y(utt.send.w)m(a)m(v)m(e.clien)m (t.)p eop %%Page: 201 203 201 202 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(201)150 299 y Fk(\(tts_text)28 b(STRING)h(mode\))630 408 y Fo(Apply)46 b(tts)i(on)g(giv)m(en)f (string.)92 b(That)47 b(is,)k(segmen)m(t)e(it)e(in)m(to)h(utterances)g (and)f(apply)630 518 y(tts)p 741 518 28 4 v 33 w(ho)s(oks)41 b(to)h(eac)m(h)h(utterance.)74 b(This)40 b(is)g(naiv)m(ely)h(done)g(b)m (y)g(sa)m(ving)h(the)f(string)f(to)j(a)630 628 y(\014le)30 b(and)g(calling)f(tts)p 1353 628 V 34 w(\014le)h(on)g(that)i(\014le.)41 b(This)29 b(di\013ers)g(from)h(Sa)m(yT)-8 b(ext)32 b(whic)m(h)e (constructs)630 737 y(a)h(single)e(utterance)i(for)f(the)h(whole)e(giv) m(en)i(text.)150 889 y Fk(\(tts_textall)c(STRING)i(MODE\))630 999 y Fo(Apply)34 b(tts)j(to)g(STRING.)e(This)g(function)g(is)g(sp)s (eci\014cally)e(designed)i(for)h(use)g(in)f(serv)m(er)630 1108 y(mo)s(de)f(so)h(a)g(single)e(function)g(call)h(ma)m(y)h(syn)m (thesize)g(the)g(string.)52 b(This)33 b(function)g(name)630 1218 y(ma)m(yb)s(e)d(added)g(to)h(the)g(serv)m(er)f(safe)h(functions.) 150 1369 y Fk(\(typeof)d(OBJ\))630 1479 y Fo(Returns)h(t)m(yp)s(eof)i (of)g(giv)m(en)f(ob)5 b(ject.)150 1631 y Fk(\(UniSyn_Duration)26 b(utt\))630 1740 y Fo(predicts)i(Segmen)m(t)i(durations)e(is)g(some)h (sp)s(e\014cied)f(w)m(a)m(y)i(but)e(holds)g(the)h(result)g(in)e(a)j(w)m (a)m(y)630 1850 y(necessary)h(for)f(other)h(Unisyn)d(co)s(de.)150 2002 y Fk(\(Unisyn_Pauses)e(UTT\))630 2111 y Fo(Predict)k(pause)g (insertion)e(in)h(a)i(Unisyn)e(utterance)i(structure.)150 2263 y Fk(\(unwind_protect)26 b(NORMALFORM)i(ERRORFORM\))630 2373 y Fo(If)23 b(an)g(error)g(is)f(found)g(while)f(ev)-5 b(aluating)23 b(NORMALF)m(ORM)h(catc)m(h)h(it)d(and)h(ev)-5 b(aluate)24 b(ER-)630 2482 y(R)m(ORF)m(ORM)h(and)e(con)m(tin)m(ue.)39 b(If)23 b(an)h(error)g(o)s(ccurs)g(while)e(ev)-5 b(aluating)23 b(NORMALF)m(ORM)630 2592 y(all)h(\014le)g(op)s(en)h(ev)-5 b(aluating)24 b(NORMALF)m(ORM)i(up)e(to)i(the)g(error)e(while)g(b)s(e)g (automatically)630 2701 y(closed.)41 b(Note)31 b(in)m(terrupts)e (\(ctrl-c\))i(is)f(not)g(caugh)m(t)i(b)m(y)e(this)f(function.)150 2853 y Fk(\(upcase)f(SYMBOL\))630 2963 y Fo(Returns)h(a)i(string)f (with)f(the)h(up)s(cased)g(v)m(ersion)f(of)i(SYMBOL's)f(prin)m(tname.) 150 3114 y Fk(\(us_db_params\))630 3224 y Fo(Return)g(parameters)g(of)h (curren)m(t)f(UniSyn)e(database.)150 3376 y Fk(\(us_db_select)f(NAME\)) 630 3485 y Fo(Select)k(named)f(UniSyn)e(database.)150 3637 y Fk(\(us_diphone_init)e(DIPHONE_NAME\))630 3747 y Fo(Initialise)i(UniSyn)g(diphone)g(syn)m(thesizer)i(with)f(database)j (DIPHONE)p 3159 3747 V 32 w(NAME.)150 3898 y Fk(\(us_ps_synthesis)26 b(UTT)j(SIGPR\))630 4008 y Fo(Syn)m(thesize)43 b(utterance)i(UTT)e (using)f(signal)g(pro)s(cessing)g(tec)m(hnique)h(SIGPR)g(for)h(the)630 4118 y(UniSyn)28 b(pitc)m(h-sync)m(hronous)h(syn)m(thesizer.)150 4269 y Fk(\(us_f0_to_pitchmarks)c(UTT)k(F0_relation)f(PM_relation)f (END_TIME\))630 4379 y Fo(F)-8 b(rom)30 b(the)f(F0)g(con)m(tour)h(in)e (F0)p 1700 4379 V 33 w(relation,)h(create)i(a)e(set)h(of)f(pitc)m (hmarks)f(in)g(PM)p 3394 4379 V 32 w(relation.)630 4489 y(If)22 b(END)p 917 4489 V 33 w(TIME)h(is)e(not)i(nil,)g(Extra)f(pitc)m (hmarks)g(will)e(b)s(e)i(created)i(at)f(the)g(default)f(in)m(terv)-5 b(al)630 4598 y(up)29 b(to)i(this)f(p)s(oin)m(t)150 4750 y Fk(\(us_ps_synthesis)c(UTT)j(SIGPR\))630 4859 y Fo(Syn)m(thesize)43 b(utterance)i(UTT)e(using)f(signal)g(pro)s(cessing)g(tec)m(hnique)h (SIGPR)g(for)h(the)630 4969 y(UniSyn)28 b(pitc)m(h-sync)m(hronous)h (syn)m(thesizer.)150 5121 y Fk(\(us_td_synthesis)d(UTT)j(FILTER_METHOD) e(OLA_METHOD\))630 5230 y Fo(Syn)m(thesize)43 b(utterance)i(UTT)e (using)f(signal)g(pro)s(cessing)g(tec)m(hnique)h(SIGPR)g(for)h(the)630 5340 y(UniSyn)28 b(pitc)m(h-sync)m(hronous)h(syn)m(thesizer.)p eop %%Page: 202 204 202 203 bop 150 -116 a Fo(202)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(warp_utterance)d (UTT)k(\(Wavefile)e(Pitchmark_file\)\))630 408 y Fo(Change)i(w)m(a)m(v) m(eform)i(to)f(matc)m(h)g(proso)s(dic)e(sp)s(eci\014cation)h(of)g (utterance.)150 567 y Fk(\(us_get_synthesis)c(UTT\))630 676 y Fo(Construct)d(a)i(unit)d(stream)i(in)e(UTT)i(comprising)d (suitable)i(diphones.)36 b(The)23 b(unit)g(stream)630 786 y(pro)s(duced)29 b(is)g(suitable)g(for)h(immediate)g(use)g(in)f(us) p 2396 786 28 4 v 32 w(ps)p 2515 786 V 32 w(syn)m(thesis.)150 944 y Fk(\(us_insert_initial_pause)24 b(UTT\))630 1054 y Fo(Alw)m(a)m(ys)38 b(ha)m(v)m(e)i(an)d(initial)f(silence)h(if)g(the)h (utterance)h(is)e(non-empt)m(y)-8 b(.)64 b(Insert)38 b(a)g(silence)630 1163 y(segmen)m(t)32 b(after)e(the)h(last)f(segmen)m (t)i(in)d(W)m(ORDITEM)i(in)e(UTT.)150 1322 y Fk(\(us\)insert_pause)d (UTT)j(WORDITEM\))630 1431 y Fo(Insert)h(a)h(silence)e(segmen)m(t)j (after)e(the)h(last)f(segmen)m(t)i(in)d(W)m(ORDITEM)i(in)e(UTT.)150 1590 y Fk(\(us_list_dbs\))630 1699 y Fo(List)h(names)g(of)g(UniSyn)f (databases)i(curren)m(tly)e(loaded.)150 1857 y Fk(\(us_make_group_file) c(FILENAME)j(PARAMS\))630 1967 y Fo(Mak)m(e)42 b(a)e(group)g(\014le)f (from)h(the)g(curren)m(tly)g(sp)s(eci\014ed)e(diphone)g(set.)71 b(P)-8 b(ARAMS)41 b(is)e(an)630 2077 y(optional)48 b(asso)s(c)h(list)e (and)g(allo)m(ws)h(sp)s(eci\014cation)f(of)i(the)g(trac)m(k)p 2948 2077 V 34 w(\014le)p 3099 2077 V 32 w(format)f(\(default)630 2186 y(est)p 746 2186 V 33 w(binary\),)d(sig)p 1248 2186 V 32 w(\014le)p 1397 2186 V 32 w(format)e(\(default)f(snd\))g(and)g (sig)p 2601 2186 V 33 w(sample)p 2908 2186 V 32 w(format)h(\(default)f (m)m(u-)630 2296 y(la)m(w\).)55 b(This)33 b(is)i(recommended)f(for)h (LPC)g(databases.)55 b(F)-8 b(or)36 b(PSOLA)e(based)h(databases)630 2405 y(the)c(sig)p 899 2405 V 32 w(sample)p 1205 2405 V 32 w(format)g(should)d(probably)g(b)s(e)i(set)h(to)g(short.)150 2564 y Fk(\(us_mapping)c(UTT)j(method\))630 2673 y Fo(Syn)m(thesize)43 b(utterance)i(UTT)e(using)f(signal)g(pro)s(cessing)g(tec)m(hnique)h (SIGPR)g(for)h(the)630 2783 y(UniSyn)28 b(pitc)m(h-sync)m(hronous)h (syn)m(thesizer.)150 2941 y Fk(\(us_unit_concat)d(UTT\))630 3051 y Fo(Concat)g(co)s(ef)h(and)e(w)m(a)m(v)m(e)i(information)d(in)h (unit)f(stream)i(in)m(to)g(a)g(single)e(F)-8 b(rames)26 b(structure)630 3160 y(storing)k(the)g(result)g(in)f(the)h(F)-8 b(rame)32 b(relation)150 3319 y Fk(\(us_init_raw_concat)25 b(UTT\).)150 3453 y(\(utt.copy_relation)g(UTT)30 b(FROM)f(TO\))630 3562 y Fo(cop)m(y)h(relation)f Fk(")p Fo(from)p Fk(")g Fo(to)h(a)g(new)f(relation)g Fk(")p Fo(to)p Fk(")p Fo(.)41 b(Note)31 b(that)f(items)f(are)h(NOT)f(copied,)630 3672 y(simply)f(link)m(ed)h(in)m(to)h(the)g(new)g(relation)150 3830 y Fk(\(utt.copy_relation_and_i)o(tems)24 b(UTT)29 b(FROM)g(TO\))630 3940 y Fo(cop)m(y)i(relation)f(and)f(con)m(ten)m(ts)k (of)d(items)g Fk(")p Fo(from)p Fk(")f Fo(to)i(a)g(new)f(relation)g Fk(")p Fo(to)p Fk(")150 4098 y(\(utt.evaluate)d(UTT\))630 4208 y Fo(ev)-5 b(aluate)30 b(all)e(the)h(features)h(in)e(UTT,)g (replacing)g(feature)i(functions)e(with)f(their)i(ev)-5 b(alua-)630 4317 y(tion.)150 4475 y Fk(\(utt.evaluate.relation)24 b(UTT\))630 4585 y Fo(ev)-5 b(aluate)41 b(all)f(the)g(features)h(in)f (RELA)-8 b(TION)40 b(in)f(UTT,)h(replacing)f(feature)i(functions)630 4695 y(with)29 b(their)g(ev)-5 b(aluation.)150 4853 y Fk(\(utt.feat)28 b(UTT)h(FEATNAME\))630 4963 y Fo(Return)h(v)-5 b(alue)29 b(of)i(feature)g(name)f(in)f(UTT.)150 5121 y Fk(\(utt.features)e(UTT)i(RELATIONNAME)e(FUNCLIST\))630 5230 y Fo(Get)k(v)m(ectors)h(of)e(feature)h(v)-5 b(alues)30 b(for)g(eac)m(h)h(item)f(in)f(RELA)-8 b(TIONNAME)30 b(in)f(UTT.)h([see) 630 5340 y(Section)g(14.6)i([F)-8 b(eatures],)33 b(page)e(71])p eop %%Page: 203 205 203 204 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(203)150 299 y Fk(\(utt.id)28 b(UTT)i(id_number\))630 408 y Fo(Return)g(the)g(item)g(in)f(UTT)h (whose)g(id)f(matc)m(hes)j(id)p 2447 408 28 4 v 31 w(n)m(um)m(b)s(er.) 150 565 y Fk(\(utt.import.track)26 b(UTT)j(FILENAME)f(RELATION)g (FEATURE_NAME\))630 675 y Fo(Load)22 b(trac)m(k)i(in)c(FILENAME)j(in)m (to)f(UTT)g(in)e(R:RELA)-8 b(TION.\014rst.FEA)g(TURE)p 3415 675 V 33 w(NAME.)630 784 y(Deletes)41 b(RELA)-8 b(TION)40 b(if)e(it)i(already)g(exists.)69 b(\(y)m(ou)41 b(ma)m(yb)s(e)f(w)m(an)m(t)g(to)h(use)f(trac)m(k.load)630 894 y(directly)29 b(rather)h(than)g(this)g(legacy)h(function.)150 1050 y Fk(\(utt.import.wave)26 b(UTT)j(FILENAME)g(APPEND\))630 1160 y Fo(Load)g(w)m(a)m(v)m(eform)i(in)d(FILENAME)i(in)m(to)f(UTT)g (in)f(R:W)-8 b(a)m(v)m(e.\014rst.w)m(a)m(v)m(e.)44 b(If)29 b(APPEND)h(is)630 1270 y(sp)s(eci\014ed)f(and)g(non-nil)g(app)s(end)f (this)h(to)j(the)e(curren)m(t)g(w)m(a)m(v)m(eform.)150 1426 y Fk(\(utt.load)e(UTT)h(FILENAME\))630 1536 y Fo(Loads)h(UTT)g (with)e(the)i(streams)h(and)e(stream)i(items)e(describ)s(ed)f(in)h (FILENAME.)h(The)630 1645 y(format)40 b(is)e(Xlab)s(el-lik)m(e)g(as)i (sa)m(v)m(ed)h(b)m(y)e(utt.sa)m(v)m(e.)70 b(If)39 b(UTT)g(is)g(nil)e(a) j(new)f(utterance)i(is)630 1755 y(created,)28 b(loaded)e(and)g (returned.)38 b(If)26 b(FILENAME)h(is)e Fk(")p Fo(-)p Fk(")h Fo(the)h(data)g(is)e(read)h(from)g(stdin.)150 1911 y Fk(\(utt.play)i(UTT\))630 2021 y Fo(Pla)m(y)i(w)m(a)m(v)m(eform) i(in)d(utt)i(b)m(y)f(curren)m(t)g(audio)g(metho)s(d.)150 2178 y Fk(\(utt.relation)d(UTT)i(RELATIONNAME\))630 2287 y Fo(Return)h(ro)s(ot)g(item)g(of)h(relation)e(RELA)-8 b(TIONNAME)31 b(in)e(UTT.)150 2444 y Fk(\(utt.relation.append)c(UTT)k (RELATIONNAME)e(ITEM\))630 2553 y Fo(App)s(end)42 b(ITEM)h(to)h(top)g (of)g(RELA)-8 b(TIONNAM)44 b(in)e(UTT.)h(ITEM)h(ma)m(y)g(b)s(e)f(a)h (LISP)630 2663 y(description)28 b(of)j(an)f(item)g(or)h(an)f(item)g (itself.)150 2819 y Fk(\(utt.relation.create)25 b(UTT)k(RELATIONNAME\)) 630 2929 y Fo(Create)i(new)f(relation)g(called)f(RELA)-8 b(TIONNAME)31 b(in)e(UTT.)150 3086 y Fk(\(utt.relation.delete)c(UTT)k (RELATIONNAME\))630 3195 y Fo(Delete)40 b(relation)d(from)h(utt,)j(it)d (the)g(stream)h(items)f(are)h(not)f(link)m(ed)f(elsewhere)h(in)f(the) 630 3305 y(utterance)31 b(they)g(will)d(b)s(e)h(deleted)h(to)s(o.)150 3461 y Fk(\(utt.relation.feat)25 b(UTT)30 b(RELNAME)e(FEATNAME\))630 3571 y Fo(Return)i(v)-5 b(alue)29 b(of)i(FEA)-8 b(TNAME)31 b(on)g(relation)e(RELNAME)i(in)e(UTT.)150 3727 y Fk (\(utt.relation.first)c(UTT)30 b(RELATIONNAME\))630 3837 y Fo(Returns)f(a)i(the)g(\014rst)e(item)h(in)g(this)f(relation.)150 3994 y Fk(\(utt.relation.items)c(UTT)30 b(RELATIONNAME\))630 4103 y Fo(Return)h(a)g(list)f(of)i(stream)f(items)g(in)f(RELA)-8 b(TIONNAME)31 b(in)f(UTT.)h(If)g(this)f(relation)h(is)630 4213 y(a)g(tree,)g(the)g(paren)m(t)f(streamitem)h(is)e(listed)g(b)s (efore)h(its)g(daugh)m(ters.)150 4369 y Fk(\(utt.relation.last)25 b(UTT)30 b(RELATIONNAME\))630 4479 y Fo(Returns)f(a)i(the)g(last)f (item)g(in)f(this)g(relation.)150 4635 y Fk(\(utt.relation.leafs)c(UTT) 30 b(RELATIONNAME\))630 4745 y Fo(Returns)f(a)i(list)e(of)i(all)e(the)i (leafs)f(in)f(this)g(relation.)150 4902 y Fk(\(utt.relation.load)c(UTT) 30 b(RELATIONNAME)d(FILENAME\))630 5011 y Fo(Loads)42 b(\(and)f(creates\))j(RELA)-8 b(TIONNAME)41 b(from)h(FILENAME)g(in)m (to)f(UTT.)h(FILE-)630 5121 y(NAME)34 b(should)d(con)m(tain)i(simple)f (Xlab)s(el)f(format)j(information.)47 b(The)33 b(lab)s(el)e(part)i(ma)m (y)630 5230 y(con)m(tain)g(the)f(lab)s(el)f(prop)s(er)g(follo)m(w)m(ed) h(b)m(y)g(semi-colon)g(separated)g(pairs)f(of)i(feature)g(and)630 5340 y(v)-5 b(alue.)p eop %%Page: 204 206 204 205 bop 150 -116 a Fo(204)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk (\(utt.relation.present)c(UTT)k(RELATIONNAME\))630 408 y Fo(Returns)e(t)h(if)f(UTT)g(caon)m(tains)i(a)f(relation)f(called)g (RELA)-8 b(TIONNAME,)28 b(nil)e(otherwise.)150 559 y Fk(\(utt.relation.print)f(UTT)30 b(NAME\))630 669 y Fo(prin)m(t)f(con)m (ten)m(ts)j(of)f(relation)e(NAME)150 819 y Fk (\(utt.relation.remove_fea)o(t)24 b(UTT)30 b(RELNAME)e(FEATNAME\))630 929 y Fo(Remo)m(v)m(e)k(FEA)-8 b(TNAME)32 b(on)e(relation)f(RELNAME)i (in)e(UTT.)150 1080 y Fk(\(utt.relation.remove_ite)o(m_fe)o(at)24 b(UTT)30 b(RELNAME)e(FEATNAME\))630 1189 y Fo(Remo)m(v)m(e)k(FEA)-8 b(TNAME)32 b(on)e(ev)m(ery)h(item)f(in)f(relation)h(RELNAME)g(in)f (UTT.)150 1340 y Fk(\(utt.relation.set_feat)24 b(UTT)30 b(RELNAME)e(FEATNAME)g(VALUE\))630 1450 y Fo(Set)j(FEA)-8 b(TNAME)31 b(to)g(V)-10 b(ALUE)30 b(on)h(relation)e(RELNAME)i(in)e (UTT.)150 1600 y Fk(\(utt.relation_tree)c(UTT)30 b(RELATIONNAME\))630 1710 y Fo(Return)i(a)h(tree)h(of)f(stream)g(items)g(in)f(RELA)-8 b(TIONNAME)33 b(in)e(UTT.)i(This)e(will)f(giv)m(e)k(a)630 1819 y(simple)g(list)g(if)g(the)i(relation)f(has)g(no)h(ups)e(and)h(do) m(wns.)56 b([see)36 b(Section)f(14.5)i([Accessing)630 1929 y(an)30 b(utterance],)i(page)f(68])150 2080 y Fk (\(utt.relationnames)25 b(UTT\))630 2189 y Fo(List)30 b(of)g(all)f(relations)h(in)f(this)g(utterance.)150 2340 y Fk(\(utt.resynth)e(LABFILE)h(F0FILE\))630 2450 y Fo(Resyn)m(thesize)d (an)g(utterance)h(from)f(a)g(lab)s(el)f(\014le)g(and)g(F0)i(\014le)e (\(in)g(an)m(y)h(format)h(supp)s(orted)630 2559 y(b)m(y)k(the)h(Sp)s (eec)m(h)f(T)-8 b(o)s(ol)30 b(Library\).)39 b(This)29 b(loads,)h(syn)m(thesizes)g(and)g(pla)m(ys)g(the)g(utterance.)150 2710 y Fk(\(utt.save)e(UTT)h(FILENAME)f(TYPE\))630 2819 y Fo(Sa)m(v)m(e)j(UTT)f(in)e(FILENAME)j(in)d(an)i(Xlab)s(el-lik)m(e)f (format.)41 b(If)29 b(FILENAME)h(is)g Fk(")p Fo(-)p Fk(")f Fo(then)630 2929 y(prin)m(t)g(output)h(to)h(stdout.)41 b(TYPE)30 b(ma)m(y)h(b)s(e)e(nil)g(or)h(est)p 2550 2929 28 4 v 33 w(ascii)150 3080 y Fk(\(utt.save.f0)d(UTT)j(FILENAME\))630 3189 y Fo(Sa)m(v)m(e)i(F0)f(of)f(UTT)g(as)h(esps)f(trac)m(k)h(\014le)f (in)f(FILENAME.)150 3340 y Fk(\(utt.save)f(UTT)h(RELATIONNAME)e (FILENAME)h(EVALUATE_FEATURES\))630 3450 y Fo(Sa)m(v)m(e)38 b(relation)f(RELA)-8 b(TIONNAME)37 b(in)f(FILENAME)h(in)f(an)h(Xlab)s (el-lik)m(e)e(format.)61 b(If)630 3559 y(FILENAME)31 b(is)e Fk(")p Fo(-)p Fk(")h Fo(then)g(prin)m(t)f(output)h(to)h(stdout.) 150 3710 y Fk(\(utt.save.segs)26 b(UTT)k(FILE\))630 3819 y Fo(Sa)m(v)m(e)i(segmen)m(ts)f(of)g(UTT)e(in)g(a)i(FILE)f(in)f(xlab)s (el)g(format.)150 3970 y Fk(\(utt.save.til_events)c(UTT)k(FILENAME\)) 630 4080 y Fo(Sa)m(v)m(e)j(tilt)d(ev)m(en)m(ts)j(in)d(UTT)h(to)h (FILENAME)g(in)e(a)h(format)h(suitable)e(for)h(ev)p 3285 4080 V 33 w(syn)m(th.)150 4230 y Fk(\(utt.save.track)c(utt)k(filename)e (relation)g(feature\))630 4340 y Fo(DEPRICA)-8 b(TED)30 b(use)h(trace.sa)m(v)m(e)i(instead.)150 4491 y Fk(\(utt.save.wave)26 b(UTT)k(FILENAME)e(FILETYPE\))630 4600 y Fo(Sa)m(v)m(e)j(w)m(a)m(v)m (eform)g(in)e(UTT)g(in)f(FILENAME)j(with)d(FILETYPE)h(\(if)g(sp)s (eci\014ed\))g(or)g(using)630 4710 y(global)h(parameter)h(W)-8 b(a)m(v)m(e\014let)m(yp)s(e.)150 4861 y Fk(\(utt.save.words)26 b(UTT)k(FILE\))630 4970 y Fo(Sa)m(v)m(e)i(w)m(ords)d(of)i(UTT)f(in)f(a) i(FILE)f(in)f(xlab)s(el)g(format.)150 5121 y Fk(\(utt.send.wave.client) c(UTT\))630 5230 y Fo(Sends)37 b(w)m(a)m(v)m(e)i(in)e(UTT)g(to)i(clien) m(t.)62 b(If)38 b(not)g(in)f(serv)m(er)h(mo)s(de)f(giv)m(es)h(an)g (error)g(Note)h(the)630 5340 y(clien)m(t)30 b(m)m(ust)g(b)s(e)g(exp)s (ecting)g(to)h(receiv)m(e)g(the)g(w)m(a)m(v)m(eform.)p eop %%Page: 205 207 205 206 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(205)150 299 y Fk(\(utt.set_feat)27 b(UTT)i(FEATNAME)f(VALUE\))630 408 y Fo(Set)j(feature)f(FEA)-8 b(TNAME)32 b(with)d(V)-10 b(ALUE)30 b(in)f(UTT.)150 555 y Fk(\(utt.synth)f(UTT\))630 664 y Fo(The)33 b(main)f(syn)m(thesis)g (function.)49 b(Giv)m(en)33 b(UTT)g(it)g(will)d(apply)i(the)i (functions)e(sp)s(eci\014ed)630 774 y(for)e(UTT's)g(t)m(yp)s(e,)h(as)g (de\014ned)e(with)h(de\013UttT)m(yp)s(e)h(and)f(then)g(those)h (demanded)e(b)m(y)i(the)630 883 y(v)m(oice.)41 b(After)30 b(mo)s(dules)e(ha)m(v)m(e)j(b)s(een)e(applied)e(syn)m(th)p 2448 883 28 4 v 32 w(ho)s(oks)j(are)g(applied)d(to)j(allo)m(w)f(extra) 630 993 y(manipulation.)38 b([see)31 b(Section)f(14.2)i([Utterance)g(t) m(yp)s(es],)f(page)g(65])150 1139 y Fk(\(utt.type)d(UTT\))630 1249 y Fo(Returns)h(the)i(t)m(yp)s(e)g(of)f(UTT.)150 1395 y Fk(\(utt.wave)e(UTT\))630 1504 y Fo(Get)j(w)m(a)m(v)m(eform)h (from)e(w)m(a)m(v)m(e)i(\(R:W)-8 b(a)m(v)m(e.\014rst.w)m(a)m(v)m(e\).) 150 1650 y Fk(\(utt.wave.resample)25 b(UTT)30 b(RATE\))630 1760 y Fo(Resample)k(w)m(a)m(v)m(eform)h(in)e(UTT)h(to)h(RA)-8 b(TE)34 b(\(if)f(it)h(is)f(already)h(at)h(that)g(rate)f(it)g(remains) 630 1870 y(unc)m(hanged\).)150 2016 y Fk(\(utt.wave.rescale)26 b(UTT)j(FACTOR)g(NORMALIZE\))630 2125 y Fo(Mo)s(dify)23 b(the)h(gain)f(of)h(the)g(w)m(a)m(v)m(eform)h(in)e(UTT)g(b)m(y)h(GAIN.) g(If)g(NORMALIZE)f(is)g(sp)s(eci\014ed)630 2235 y(and)30 b(non-nil)e(the)i(w)m(a)m(v)m(eform)i(is)e(maximized)f(\014rst.)150 2381 y Fk(\(Utterance)f(TYPE)h(DATA\))630 2491 y Fo(Build)d(an)j (utterance)g(of)g(t)m(yp)s(e)g(TYPE)f(from)g(D)m(A)-8 b(T)g(A.)31 b(Di\013eren)m(t)e(TYPEs)f(require)f(di\013er-)630 2600 y(en)m(t)k(t)m(yp)s(es)f(of)g(data.)41 b(New)30 b(t)m(yp)s(es)g(ma)m(y)g(b)s(e)g(de\014ned)e(b)m(y)i(defUttT)m(yp)s(e.) 41 b([see)31 b(Section)e(14.2)630 2710 y([Utterance)j(t)m(yp)s(es],)f (page)g(65])150 2856 y Fk(\(voice-location)26 b(NAME)j(DIR)h (DOCSTRING\))630 2966 y Fo(Record)g(the)g(lo)s(cation)g(of)g(a)g(v)m (oice.)42 b(Called)28 b(for)i(eac)m(h)h(v)m(oice)f(found)f(on)h(v)m (oice-path.)41 b(Can)630 3075 y(b)s(e)30 b(called)f(in)g(site-init)g (or)i(.festiv)-5 b(alrc)29 b(for)i(additional)d(v)m(oices)j(whic)m(h)e (exist)h(elsewhere.)150 3221 y Fk(\(voice.describe)c(NAME\))630 3331 y Fo(Describ)s(e)43 b(v)m(oice)i(NAME)g(b)m(y)f(sa)m(ying)g(its)f (description.)80 b(Unfortunately)43 b(although)g(it)630 3440 y(w)m(ould)29 b(b)s(e)h(nice)g(to)i(sa)m(y)f(that)g(v)m(oice's)h (description)d(in)g(the)i(v)m(oice)g(itself)f(its)g(not)h(going)f(to) 630 3550 y(w)m(ork)37 b(cross)g(language.)60 b(So)36 b(this)g(just)g(uses)g(the)h(curren)m(t)f(v)m(oice.)61 b(So)36 b(here)h(w)m(e)g(assume)630 3660 y(v)m(oices)42 b(describ)s(e)d(themselv)m(es)i(in)e(English)f(whic)m(h)i(is)g(prett)m (y)h(anglo-cen)m(tric,)j(shitsurei)630 3769 y(shimasu.)150 3915 y Fk(\(voice.description)25 b(NAME\))630 4025 y Fo(Output)33 b(description)f(of)i(named)g(v)m(oice.)53 b(If)34 b(the)g(named)g(v)m(oice)h(is)e(not)h(y)m(et)i(loaded)d(it)h (is)630 4134 y(loaded.)150 4281 y Fk(\(voice.list\))630 4390 y Fo(List)f(of)h(all)f(\(p)s(oten)m(tial\))h(v)m(oices)h(in)d(the) i(system.)52 b(This)32 b(c)m(hec)m(ks)j(the)g(v)m(oice-lo)s(cation)f (list)630 4500 y(of)j(p)s(oten)m(tial)f(v)m(oices)h(found)e(b)s(e)h (scanning)f(the)i(v)m(oice-path)g(at)g(start)g(up)f(time.)58 b(These)630 4609 y(names)30 b(can)h(b)s(e)f(used)f(as)i(argumen)m(ts)g (to)g(v)m(oice.description)e(and)h(v)m(oice.describ)s(e.)150 4755 y Fk(\(voice.select)d(NAME\))630 4865 y Fo(Call)21 b(function)g(to)i(set)g(up)f(v)m(oice)h(NAME.)g(This)e(is)g(normally)g (done)h(b)m(y)h(prep)s(ending)c(v)m(oice)p 3721 4865 V 630 4975 a(to)31 b(NAME)g(and)f(call)f(it)h(as)h(a)g(function.)150 5121 y Fk(\(voice_kal_diphone\))630 5230 y Fo(Set)h(up)e(the)i(curren)m (t)f(v)m(oice)i(to)f(b)s(e)f(male)g(American)g(English)f(\(Kevin\))h (using)f(the)i(stan-)630 5340 y(dard)d(diphone)g(co)s(de.)p eop %%Page: 206 208 206 207 bop 150 -116 a Fo(206)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fk(\(voice_reset\))630 408 y Fo(This)36 b(resets)h(all)g(v)-5 b(ariables)36 b(bac)m(k)i(to)g(acceptable)g(v)-5 b(alues)37 b(that)h(ma)m(y)g (a\013ect)h(v)m(oice)f(gen-)630 518 y(eration.)76 b(This)41 b(function)f(should)h(alw)m(a)m(ys)h(b)s(e)g(called)f(at)i(the)g(start) f(of)h(an)m(y)f(function)630 628 y(de\014ning)35 b(a)j(v)m(oice.)62 b(In)37 b(addition)e(to)j(reseting)f(standard)g(v)-5 b(ariables)36 b(the)h(function)f(cur-)630 737 y(ren)m(t)p 794 737 28 4 v 33 w(v)m(oice)p 1023 737 V 34 w(reset)27 b(will)d(b)s(e)h(called.)39 b(This)25 b(should)f(alw)m(a)m(ys)j(b)s(e)f (set)h(b)m(y)f(the)h(v)m(oice)g(de\014nition)630 847 y(function)f(\(ev)m(en)i(if)e(it)g(do)s(es)h(nothing\).)38 b(This)26 b(allo)m(ws)g(v)m(oice)i(sp)s(eci\014c)d(c)m(hanges)j(to)g(b) s(e)e(reset)630 956 y(when)j(a)i(new)f(v)m(oice)h(is)f(selection.)40 b(Unfortunately)30 b(I)g(can't)h(force)g(this)e(to)j(b)s(e)d(used.)150 1116 y Fk(\(wagon)g(ITEM)g(TREE\))630 1225 y Fo(Apply)35 b(the)i(CAR)-8 b(T)36 b(tree)i(TREE)e(to)h(ITEM.)g(This)e(returns)g (the)i(full)e(predicted)g(form,)630 1335 y(y)m(ou)g(need)f(to)h (extract)h(the)e(v)-5 b(alue)34 b(from)g(the)g(returned)g(form)g (itself.)51 b([see)35 b(Section)f(25.2)630 1445 y([CAR)-8 b(T)30 b(trees],)i(page)f(120])150 1604 y Fk(\(wagon_predict)26 b(ITEM)k(TREE\))630 1714 y Fo(Predict)35 b(with)f(giv)m(en)h(ITEM)g (and)f(CAR)-8 b(T)35 b(tree)h(and)f(return)f(the)i(prediction)d(\(the)j (last)630 1823 y(item\))30 b(rather)h(than)f(whole)f(probabilit)m(y)f (distribution.)150 1983 y Fk(\(wave.copy)g(WAVE1)h(WAVE2\))630 2092 y Fo(Destuctiv)m(ely)i(app)s(end)e(W)-10 b(A)g(VE2)31 b(to)g(W)-10 b(A)g(VE1)31 b(and)f(return)f(W)-10 b(A)g(VE1.)150 2252 y Fk(\(wave.copy)28 b(WAVE\))630 2361 y Fo(Return)i(a)g(cop)m(y)h (of)g(W)-10 b(A)g(VE.)150 2521 y Fk(\(wave.info)28 b(WAVE\))630 2630 y Fo(Returns)h(asso)s(c)i(list)e(of)i(info)e(ab)s(out)h(this)g(w)m (a)m(v)m(e.)150 2790 y Fk(\(wave.load)e(FILENAME)g(FILETYPE)g (SAMPLETYPE)f(SAMPLERATE\))630 2899 y Fo(Load)41 b(and)g(return)e(a)j (w)m(a)m(v)m(e)h(from)d(FILENAME.)i(Resp)s(ect)f(FILETYPE)g(is)f(sp)s (eci\014ed)630 3009 y(if)g(not)i(sp)s(eci\014ed)d(resp)s(ect)j(whatev)m (er)g(header)f(is)f(on)h(the)h(\014le.)72 b(SAMPLETYPE)41 b(and)630 3118 y(SAMPLERA)-8 b(TE)30 b(are)h(only)e(used)h(if)f (FILETYPE)h(is)f(ra)m(w.)150 3278 y Fk(\(wave.play)f(WAVE\))630 3387 y Fo(Pla)m(y)i(w)m(a)m(v)m(e)j(of)d(selected)h(audio)150 3547 y Fk(\(wave.resample)26 b(WAVE)k(NEWRATE\))630 3656 y Fo(Resamples)g(W)-10 b(A)g(VE)30 b(to)i(NEWRA)-8 b(TE.)150 3816 y Fk(\(wave.rescale)27 b(WAVE)i(GAIN)g(NORMALIZE\))630 3925 y Fo(If)k(NORMALIZE)f(is)h(sp)s(eci\014ed)e(and)i(non-nil,)f (maximizes)h(the)g(w)m(a)m(v)m(eform)i(\014rst)d(b)s(efore)630 4035 y(applying)c(the)j(gain.)150 4194 y Fk(\(wave.save)d(WAVE)h (FILENAME)f(FILETYPE)g(SAMPLETYPE\))630 4304 y Fo(Sa)m(v)m(e)47 b(W)-10 b(A)g(VE)46 b(in)f(FILENAME,)h(resp)s(ecting)f(FILETYPE)g(and)g (SAMPLETYPE)g(if)630 4413 y(sp)s(ecifed)21 b(if)h(these)h(last)f(t)m(w) m(o)i(argumen)m(ts)f(are)g(unsp)s(eci\014ed)d(the)i(global)g (parameters)h(W)-8 b(a)m(v)m(e-)630 4523 y(\014let)m(yp)s(e)34 b(and)f(W)-8 b(a)m(v)m(esamplet)m(yp)s(e)37 b(are)d(used.)52 b(Returns)33 b(t)i(is)e(successful)g(and)h(thro)m(ws)g(an)630 4633 y(error)c(if)f(not.)150 4792 y Fk(\(Wave_Synth)e(UTT\))630 4902 y Fo(Generate)54 b(w)m(a)m(v)m(eform)g(from)e(information)e(in)i (UTT,)g(at)h(least)g(a)f(Segmen)m(t)i(stream)630 5011 y(m)m(ust)48 b(exist.)92 b(The)47 b(actual)h(form)g(of)g(syn)m(thesis)e (used)h(dep)s(ends)f(on)i(the)g(P)m(arameter)630 5121 y(Syn)m(th)p 868 5121 V 32 w(Metho)s(d.)53 b(If)34 b(it)g(is)f(a)i (function)e(that)i(is)e(applied.)51 b(If)34 b(it)g(is)f(atom)i(it)f (should)f(b)s(e)h(a)630 5230 y(Syn)m(thT)m(yp)s(e)43 b(as)i(de\014ned)e(b)m(y)h(defSyn)m(thT)m(yp)s(e)f([see)i(Section)f (14.2)i([Utterance)g(t)m(yp)s(es],)630 5340 y(page)31 b(65])p eop %%Page: 207 209 207 208 bop 150 -116 a Fo(Chapter)30 b(34:)41 b(F)-8 b(unction)30 b(list)2451 b(207)150 299 y Fk(\(wfst.load)28 b(NAME)h(FILENAME\))630 408 y Fo(Load)i(a)f(WFST)h(from)e(FILENAME)i (and)f(store)h(it)f(named)g(NAME)h(for)f(later)g(access.)150 568 y Fk(\(wfst.trasduce)c(WFSTNAME)j(INPUT\))630 677 y Fo(T)-8 b(ransduce)28 b(list)e(INPUT)i(\(or)h(explo)s(ded)e(INPUT)h (if)f(its)g(an)i(atom\))g(to)g(a)g(list)e(of)h(outputs.)630 787 y(The)i(atom)h(F)-10 b(AILED)31 b(is)e(return)h(if)f(the)h (transduction)g(fails.)150 946 y Fk(\(while)f(COND)g(.)h(BODY\))630 1056 y Fo(While)f(COND)h(ev)-5 b(aluates)31 b(to)g(non-nil)e(ev)-5 b(aluate)31 b(BOD)m(Y.)150 1215 y Fk(\(Word)e(utt\))630 1325 y Fo(Construct)h(\(syn)m(thesis)g(sp)s(eci\014c\))g (syllable/segmen)m(ts)h(from)f(W)-8 b(ord)31 b(relation)f(using)f(cur-) 630 1435 y(ren)m(t)i(lexicon)e(and)h(sp)s(eci\014c)f(mo)s(dule.)150 1594 y Fk(\(xml_register_id)d(PATTERN)i(RESULT\))630 1704 y Fo(Add)38 b(a)h(rule)f(for)g(where)g(to)i(\014nd)d(XML)i(en)m (tities)g(suc)m(h)f(as)h(DTDs.)67 b(The)38 b(pattern)h(is)f(a)630 1813 y(regular)32 b(expression,)h(the)h(result)e(is)g(a)i(string)e (with)g(substitutions.)47 b(If)32 b(the)i(P)-8 b(A)g(TTERN)630 1923 y(matc)m(hes)30 b(the)g(a)g(PUBLIC)f(or)g(SYSTEM)f(iden)m (ti\014er)g(of)h(an)h(XML)f(en)m(tit)m(y)-8 b(,)31 b(the)f(RESUL)-8 b(T)630 2032 y(is)29 b(expanded)h(and)g(then)g(used)f(as)i(a)g (\014lename.)150 2192 y Fk(\(xml_registered_ids\))630 2301 y Fo(Return)f(the)g(curren)m(t)g(list)f(of)i(places)f(to)h(lo)s (ok)f(for)g(XML)h(en)m(tities.)150 2461 y Fk(\(xxml_attval)c(ATTNAME)h (ATTLIST\))630 2570 y Fo(Returns)h(attribute)i(v)-5 b(alue)29 b(of)i(A)-8 b(TTNAME)31 b(in)e(A)-8 b(TTLIST)29 b(or)h(nil)e(if)i(it)g (do)s(esn't)g(exists.)150 2730 y Fk(\(xxml_synth)d(UTT\))630 2839 y Fo(This)k(applies)g(the)i(xxml)p 1508 2839 28 4 v 31 w(ho)s(oks)g(\(mo)s(de)g(sp)s(eci\014c\))e(and)i(tts)p 2722 2839 V 33 w(ho)s(oks)f(to)i(the)f(giv)m(en)f(utter-)630 2949 y(ance.)42 b(This)28 b(function)i(should)e(b)s(e)i(called)g(from)g (xxml)f(elemen)m(t)i(de\014nitions)d(that)j(signal)630 3059 y(an)f(utterance)i(b)s(oundary)-8 b(.)p eop %%Page: 208 210 208 209 bop 150 -116 a Fo(208)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: 209 211 209 210 bop 150 -116 a Fo(Index)3241 b(209)150 299 y Fl(Index)150 623 y Fn(.)150 771 y Fd(`)p Fc(.festivalrc)p Fd(')17 b Fb(.)f(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(19)150 1079 y Fn(/)150 1227 y Fd(`)p Fc(/dev/audio)p Fd(')18 b Fb(.)d(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(103)150 1334 y(`)p Fc(/dev/dsp)p Fd(')23 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)47 b Fd(103)150 1642 y Fn(A)150 1790 y Fd(access)27 b(strategies)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fd(99)150 1897 y(accessing)27 b(Lisp)f(v)l(ariables)d Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)48 b Fd(132)150 2003 y(ac)n(kno)n(wledgemen)n(ts)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(5)150 2110 y(addenda)22 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(48)150 2217 y(adding)26 b(new)g(directories)c Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)47 b Fd(135)150 2323 y(adding)26 b(new)g(LISP)f(ob)t(jects)13 b Fb(.)h(.)e(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(136)150 2430 y(adding)26 b(new)g(mo)r(dules)19 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(132)150 2537 y(adding)26 b(new)g(v)n(oices)d Fb(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fd(117)150 2643 y Fc(after_analysis_hooks)7 b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)33 b Fd(66)150 2750 y Fc(after_synth_hooks)12 b Fb(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(66)150 2857 y(alternate)26 b(diphones)17 b Fb(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) 43 b Fd(91)150 2963 y(ap)r(ostrophe)26 b(s)e Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(60)150 3070 y(async)n(hronous)26 b(syn)n(thesis)11 b Fb(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)37 b Fd(105)150 3177 y Fc(atof)13 b Fb(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)38 b Fd(30)150 3283 y(audio)26 b(command)21 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(104)150 3390 y(audio)26 b(command)e(output)7 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)33 b Fd(18)150 3497 y(audio)26 b(devices)12 b Fb(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fd(104)150 3604 y(audio)26 b(hardw)n(are)13 b Fb(.)g(.)g(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(14)150 3710 y(audio)26 b(output)18 b Fb(.)11 b(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) 44 b Fd(103)150 3817 y(audio)26 b(output)f(\014let)n(yp)r(e)10 b Fb(.)i(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(18)150 3924 y(audio)26 b(output)f(rate)12 b Fb(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fd(18)150 4030 y(audio)26 b(problems)16 b Fb(.)c(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(19)150 4137 y(audio)26 b(sp)r(o)r(oler)11 b Fb(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)37 b Fd(105)150 4244 y Fc(auto-text-mode-alist)7 b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(33)150 4350 y(automatic)26 b(selection)h(of)f(text)f(mo)r(de)11 b Fb(.)h(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fd(33)150 4457 y(automoun)n(ter)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(15)150 4765 y Fn(B)150 4913 y Fd(bac)n(ktrace)22 b Fb(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)47 b Fd(28)150 5020 y(batc)n(h)25 b(mo)r(de)c Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(23)150 5127 y(BEEP)27 b(lexicon)12 b Fb(.)h(.)f(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)39 b Fd(49,)26 b(59)150 5233 y Fc(before_synth_hooks)10 b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(66)150 5340 y(bug)25 b(rep)r(orts)6 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fd(26)2025 623 y Fn(C)2025 755 y Fd(C)26 b(in)n(terface)15 b Fb(.)f(.)e(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fd(145)2025 855 y(C)p Fc(++)25 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(13)2025 955 y(CAR)-6 b(T)25 b(trees)8 b Fb(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)34 b Fd(72,)27 b(120)2025 1054 y(Cascading)g(st)n(yle)f (sheets)7 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(37)2025 1154 y(catc)n(hing)26 b(errors)e Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)49 b Fd(29)2025 1254 y(catc)n(hing)26 b(errors)g(in)g(Sc)n(heme)21 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(28)2025 1353 y(c)n(hange)26 b(lib)r(dir)g(at)g(run-time)13 b Fb(.)e(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)39 b Fd(17)2025 1453 y(clien)n(t)17 b Fb(.)c(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)44 b Fd(142)2025 1553 y(clien)n(t/serv)n(er)26 b(proto)r(col)d Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(143)2025 1652 y(CMU)26 b(lexicon)8 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)34 b Fd(49,)27 b(59)2025 1752 y(command)d(line)i(options)12 b Fb(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fd(23)2025 1852 y(command)24 b(mo)r(de)7 b Fb(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(23)2025 1951 y(compiled)25 b(lexicons)15 b Fb(.)f(.)e(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)41 b Fd(49)2025 2051 y(compiling)26 b(a)g(lexicon)c Fb(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(48)2025 2151 y(compressing)26 b(the)f(lexicon)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)45 b Fd(58)2025 2250 y(`)p Fc(config/config)p Fd(')14 b Fb(.)i(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fd(15)2025 2350 y(con\014guration)16 b Fb(.)d(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fd(15)2025 2450 y(consonan)n(t)26 b(clusters)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(99)2025 2549 y(con)n(v)n(ert)25 b(string)h(to)g(n)n(um)n(b)r(er)17 b Fb(.)11 b(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)43 b Fd(30)2025 2649 y(creating)26 b(a)g(lexicon)13 b Fb(.)h(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fd(48)2025 2749 y(creating)26 b(utterances)e Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fd(126)2025 2848 y(CSLU)6 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)32 b Fd(108)2025 2948 y(CSS)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)46 b Fd(37)2025 3048 y(curren)n(t)25 b(v)n(oice)19 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)45 b Fd(117)2025 3147 y(CUV)n(O)n(ALD)24 b(lexicon)d Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(59)2025 3413 y Fn(D)2025 3546 y Fd(dark)25 b(l's)c Fb(.)13 b(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(99)2025 3646 y(database)26 b(lab)r(elling)g Fb(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fd(125)2025 3745 y(databases)18 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)44 b Fd(125)2025 3845 y(debugging)26 b(Sc)n(heme)e(errors)19 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)44 b Fd(28)2025 3945 y(debugging)26 b(scripts)16 b Fb(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)42 b Fd(28)2025 4044 y(declaring)26 b(text)f(mo)r(des)13 b Fb(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fd(35)2025 4144 y(default)26 b(diphone)11 b Fb(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)37 b Fd(91)2025 4244 y(default)26 b(v)n(oice)e Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(18)2025 4343 y Fc(defSynthType)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(65)2025 4443 y Fc(defUttType)24 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(65)2025 4543 y(dictionary)12 b Fb(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fd(47)2025 4642 y(diphone)25 b(alternates)17 b Fb(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 43 b Fd(91)2025 4742 y(diphone)25 b(group)h(\014les)9 b Fb(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fd(92)2025 4842 y(diphone)25 b(index)18 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)44 b Fd(90)2025 4941 y(diphone)25 b(names)d Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(99)2025 5041 y(diphone)25 b(selection)d Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fd(93)2025 5141 y(diphone)25 b(syn)n(thesis)6 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 32 b Fd(89,)27 b(95)2025 5240 y Fc(diphone_module_hooks)7 b Fb(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(99)2025 5340 y Fc(diphone_phone_name)10 b Fb(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(99)p eop %%Page: 210 212 210 211 bop 150 -116 a Fo(210)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fd(directory)d (structure)11 b Fb(.)h(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fd(129)150 403 y(displa)n(y)10 b Fb(.)i(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)35 b Fd(73)150 506 y(do)r(cumen)n(tation)22 b Fb(.)13 b(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(14)150 610 y(DSSSL)10 b Fb(.)h(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)35 b Fd(37)150 714 y(du\013)25 b(in)n(tonation)e Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(83)150 817 y(duration)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(87)150 921 y(duration)26 b(stretc)n(h)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)46 b Fd(87)150 1211 y Fn(E)150 1353 y Fd(Edin)n(burgh)25 b(Sp)r(eec)n(h)g(T)-6 b(o)r(ols)27 b(Library)19 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)45 b Fd(6)150 1457 y(editline)22 b Fb(.)13 b(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)47 b Fd(14)150 1560 y(Emacs)26 b(in)n(terface)7 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(43)150 1664 y(email)26 b(mo)r(de)7 b Fb(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(34)150 1768 y Fc(eou_tree)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)32 b Fd(31)150 1871 y(errors)27 b(in)e(Sc)n(heme)12 b Fb(.)f(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(28)150 1975 y(exiting)26 b(F)-6 b(estiv)l(al)18 b Fb(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fd(25)150 2079 y(extracting)26 b(features)12 b Fb(.)h(.)g(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)38 b Fd(126)150 2369 y Fn(F)150 2511 y Fd(F0)26 b(generation)e Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)48 b Fd(83)150 2614 y Fc(fclose)10 b Fb(.)j(.)g(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(29)150 2718 y(feature)26 b(extraction)9 b Fb(.)k(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)35 b Fd(126)150 2822 y(features)15 b Fb(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(71,)27 b(121,)g(153)150 2925 y(F)-6 b(estiv)l(al)26 b(relations)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)33 b Fd(64)150 3029 y(F)-6 b(estiv)l(al)26 b(script)g(\014les)15 b Fb(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)41 b Fd(23)150 3133 y(`)p Fc(festival.el)p Fd(')17 b Fb(.)f(.)c(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)43 b Fd(43)150 3236 y(festiv)l(al)p 389 3236 24 4 v 29 w(clien)n(t)13 b Fb(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)39 b Fd(142)150 3340 y(festiv)l(al)p 389 3340 V 29 w(clien)n(t.c)22 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)48 b Fd(145)150 3444 y(\014le)26 b(i/o)g(in)g(Sc)n(heme)16 b Fb(.)11 b(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(29)150 3547 y(\014xed)25 b(durations)d Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)47 b Fd(87)150 3651 y Fc(fopen)11 b Fb(.)j(.)e(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)37 b Fd(29)150 3755 y Fc(format)10 b Fb(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(29)150 3859 y(formatted)25 b(output)18 b Fb(.)12 b(.)g(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)43 b Fd(29)150 3962 y(F)-6 b(reeBSD)14 b Fb(.)e(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)40 b Fd(103)150 4253 y Fn(G)150 4394 y Fd(g)p Fc(++)14 b Fb(.)g(.)e(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)40 b Fd(13)150 4498 y(garbage)27 b(collection)7 b Fb(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(148)150 4601 y(GC)14 b Fb(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(148)150 4705 y(GNU)25 b(g)p Fc(++)f Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(13)150 4809 y(GNU)25 b(readline)d Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 47 b Fd(14)150 4912 y(group)26 b(\014les)20 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(92,)26 b(97)150 5016 y(group)r(ed)g(diphones)13 b Fb(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(89)2025 299 y Fn(H)2025 431 y Fd(heap)25 b(size)12 b Fb(.)h(.)g(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fd(24)2025 531 y(hello)26 b(w)n(orld)15 b Fb(.)f(.)e(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(24)2025 631 y(help)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fd(26)2025 730 y(homographs)8 b Fb(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) 33 b Fd(47,)27 b(76)2025 830 y(ho)r(oks)13 b Fb(.)f(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(28)2025 1096 y Fn(I)2025 1229 y Fd(i/o)26 b(in)g(Sc)n(heme)c Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fd(29)2025 1328 y(`)p Fc(init.scm)p Fd(')24 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(17)2025 1428 y(initialization)7 b Fb(.)14 b(.)f(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(17)2025 1528 y Fc(Initialize)24 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)48 b Fd(65)2025 1627 y(installation)27 b(initialization)g Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(17)2025 1727 y Fc(int_accent_cart_tree)7 b Fb(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(83)2025 1827 y(in)n(teractiv)n(e)26 b(mo)r(de)11 b Fb(.)g(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)37 b Fd(23)2025 1926 y(In)n(tEv)n(en)n(t)24 b(lab)r(elling)7 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(125)2025 2026 y(in)n(tonation)10 b Fb(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(83)2025 2126 y(IRIX)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)49 b Fd(104)2025 2225 y Fc(item)26 b Fd(functions)10 b Fb(.)k(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)36 b Fd(68)2025 2325 y(Items)16 b Fb(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(64)2025 2591 y Fn(J)2025 2724 y Fd(Ja)n(v)l(a)15 b Fb(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)41 b Fd(145)2025 2823 y(JSAPI)16 b Fb(.)c(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)43 b Fd(145)2025 3090 y Fn(K)2025 3222 y Fd(Klatt)26 b(duration)f(rules)8 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)34 b Fd(87)2025 3488 y Fn(L)2025 3621 y Fd(lab)r(elling)22 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)47 b Fd(125)2025 3721 y(language)27 b(sp)r(eci\014cation)15 b Fb(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)41 b Fd(23)2025 3820 y(laryngograph)15 b Fb(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(89)2025 3920 y(letter)26 b(to)g(sound)f(rules)19 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(48,)26 b(51,)h(52,)g(110)2025 4020 y(lexical)g(en)n(tries)8 b Fb(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fd(47)2025 4119 y(lexical)27 b(stress)7 b Fb(.)13 b(.)f(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(47)2025 4219 y(lexicon)14 b Fb(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)41 b Fd(13,)26 b(47,)h(59)2025 4319 y(lexicon)f(addenda)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(48)2025 4418 y(lexicon)26 b(compression)13 b Fb(.)g(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)39 b Fd(58)2025 4518 y(lexicon)26 b(creation)8 b Fb(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fd(110)2025 4618 y(lexicon)26 b(ho)r(oks)11 b Fb(.)i(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fd(49)2025 4717 y(lexicon)26 b(requiremen)n(ts)18 b Fb(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 44 b Fd(58)2025 4817 y(linear)26 b(regression)11 b Fb(.)j(.)e(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)37 b Fd(72,)27 b(123)2025 4917 y(Lin)n(ux)21 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) 48 b Fd(16,)27 b(103)2025 5016 y Fc(load-path)e Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(17)p eop %%Page: 211 213 211 212 bop 150 -116 a Fo(Index)3241 b(211)150 299 y Fd(loading)27 b(a)f(w)n(a)n(v)n(eform)20 b Fb(.)12 b(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)45 b Fd(73)150 399 y(loading)27 b(data)f(from)f(\014les)f Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(30)150 499 y(lo)r(cal)27 b(duration)f(stretc)n(h)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(87)150 599 y(lo)r(okup)26 b(ho)r(oks)14 b Fb(.)f(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(49)150 700 y(LPC)26 b(analysis)14 b Fb(.)g(.)e(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)39 b Fd(89)150 800 y(LPC)26 b(residual)15 b Fb(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fd(89)150 900 y(L)-6 b(TS)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(52)150 1169 y Fn(M)150 1303 y Fc(manual)10 b Fb(.)j(.)g(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(26)150 1403 y(mapping)25 b(b)r(et)n(w)n(een)g(phones)14 b Fb(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)40 b Fd(45)150 1503 y(MBR)n(OLA)9 b Fb(.)i(.)i(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fd(101)150 1603 y(minimal)25 b(system)9 b Fb(.)i(.)h(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)34 b Fd(17)150 1704 y(MOBY)26 b(lexicon)d Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(59)150 1804 y(mo)r(dules)8 b Fb(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(67)150 1904 y(monotone)18 b Fb(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)43 b Fd(83)150 2004 y(mrpa)25 b(lexicon)20 b Fb(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)45 b Fd(59)150 2104 y(m)n(ultiple)25 b(lexical)i(en)n(tries)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)46 b Fd(50)150 2374 y Fn(N)150 2507 y Fd(NAS)11 b Fb(.)g(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fd(103)150 2607 y(netaudio)18 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)43 b Fd(103)150 2708 y(new)26 b(mo)r(dules)18 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fd(132)150 2808 y(NFS)16 b Fb(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fd(15)150 2908 y(ngrams)22 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(121)150 3008 y(NO)25 b(digits)18 b Fb(.)c(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)44 b Fd(59)150 3108 y(`)p Fc(nsgmls)p Fd(')6 b Fb(.)15 b(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fd(41)150 3378 y Fn(O)150 3511 y Fd(o\017ine)26 b(TTS)10 b Fb(.)j(.)f(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)36 b Fd(25)150 3611 y(OTHER)p 437 3611 24 4 v 27 w(DIRS)7 b Fb(.)k(.)h(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)33 b Fd(15)150 3712 y(output)25 b(\014le)g(t)n(yp)r(e)11 b Fb(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)37 b Fd(18)150 3812 y(output)25 b(sample)g(rate)7 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(18)150 3912 y(o)n(v)n(erriding)26 b(diphone)f(names)e Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)49 b Fd(99)150 4012 y(Oxford)25 b(Adv)l(anced)g(Learners')h (Dictionary)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(59)150 4281 y Fn(P)150 4415 y Fd(P)n(aradigm)26 b(Asso)r(ciates)17 b Fb(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(5)150 4515 y(P)n(arameters)10 b Fb(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(67)150 4615 y Fc(parse-number)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)45 b Fd(30)150 4716 y(part)26 b(of)g(sp)r(eec)n(h)g(map)d Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fd(47)150 4816 y(part)26 b(of)g(sp)r(eec)n(h)g(tag)7 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(47)150 4916 y(part)26 b(of)g(sp)r(eec)n(h)g(tagging)9 b Fb(.)k(.)g(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)34 b Fd(79)150 5016 y(p)r(erl)7 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(143)2025 299 y(p)r(ersonal)26 b(text)f(mo)r(des)7 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(33)2025 399 y(phone)25 b(maps)17 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)43 b Fd(45)2025 499 y(phoneme)24 b(de\014nitions)10 b Fb(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(45)2025 600 y Fc(Phones)27 b Fd(utterance)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(67)2025 700 y(phoneset)25 b(de\014nitions)11 b Fb(.)i(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 37 b Fd(109)2025 800 y(phonesets)19 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fd(45)2025 900 y(phrase)26 b(breaks)6 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)32 b Fd(81)2025 1001 y(pitc)n(hmarking)14 b Fb(.)d(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fd(89)2025 1101 y(pla)n(ying)26 b(an)f(utterance)18 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fd(25)2025 1201 y(POS)14 b Fb(.)d(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(47)2025 1301 y(POS)25 b(example)7 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)34 b Fd(147)2025 1402 y(POS)25 b(tagging)f Fb(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(79)2025 1502 y(p)r(ossessiv)n(es)11 b Fb(.)j(.)e(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fd(58,)27 b(60)2025 1602 y(p)r(ost-lexical)g(rules)9 b Fb(.)j(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)34 b Fd(60)2025 1702 y(p)r(ost)p 2173 1702 V 28 w(ho)r(oks)18 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)44 b Fd(50)2025 1803 y(p)r(o)n(w)n(er)26 b(normalisation)e Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(89)2025 1903 y(pre)p 2137 1903 V 27 w(ho)r(oks)18 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)44 b Fd(50)2025 2003 y(predicting)26 b(stress)17 b Fb(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(58)2025 2103 y(prett)n(y)24 b(prin)n(ting)g Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(30)2025 2204 y Fc(proclaim_voice)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)41 b Fd(118)2025 2304 y(programming)11 b Fb(.)g(.)i(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)37 b Fd(129)2025 2404 y(pron)n(unciation)23 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fd(47)2025 2505 y(PSOLA)15 b Fb(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(93)2025 2605 y(punctuation)15 b Fb(.)d(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)41 b Fd(75)2025 2875 y Fn(Q)2025 3008 y Fc(quit)13 b Fb(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(25)2025 3278 y Fn(R)2025 3412 y Fd(read-ev)l(al-prin)n(t)24 b(lo)r(op)15 b Fb(.)f(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(24)2025 3512 y(reading)26 b(from)g(\014les)17 b Fb(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)43 b Fd(30)2025 3613 y(readline)13 b Fb(.)g(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(14)2025 3713 y(redistribution)9 b Fb(.)j(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(3)2025 3813 y(reducing)25 b(the)h(lexicon)7 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(58)2025 3913 y(regex)20 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(119)2025 4014 y(regular)26 b(expressions)8 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)34 b Fd(119)2025 4114 y(Relations)17 b Fb(.)c(.)f(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(64,)27 b(134)2025 4214 y(remote)e(audio)15 b Fb(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)42 b Fd(105)2025 4314 y(requiremen)n(ts)19 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(13)2025 4415 y(resampling)18 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fd(73)2025 4515 y(rescaling)27 b(a)f(w)n(a)n(v)n(eform)14 b Fb(.)f(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)40 b Fd(73)2025 4615 y(reseting)26 b(globals)13 b Fb(.)h(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fd(116)2025 4715 y(residual)15 b Fb(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fd(89)2025 4816 y(restrictions)15 b Fb(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)41 b Fd(3)2025 4916 y(resyn)n(thesis)18 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(73)2025 5016 y(run-time)24 b(con\014guration)e Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)48 b Fd(17)p eop %%Page: 212 214 212 213 bop 150 -116 a Fo(212)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 299 y Fd(rxp)16 b Fb(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(41)150 569 y Fn(S)150 703 y Fd(Sable)20 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fd(37)150 803 y(SABLE)25 b(DTD)10 b Fb(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)35 b Fd(38)150 904 y(Sable)26 b(tags)11 b Fb(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)36 b Fd(38)150 1004 y(Sable)26 b(using)10 b Fb(.)i(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fd(41)150 1104 y(`)p Fc(Sable.v0_2.dtd)p Fd(')13 b Fb(.)j(.)c(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)38 b Fd(38)150 1205 y(sa)n(ving)26 b(relations)12 b Fb(.)i(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(73)150 1305 y(sa)n(ving)26 b(Sable)g(w)n(a)n(v)n(eforms)e Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)49 b Fd(41)150 1405 y(sa)n(ving)26 b(segmen)n(ts)c Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(73)150 1505 y(sa)n(ving)26 b(the)f(w)n(a)n(v)n(eform)c Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(73)150 1606 y(sa)n(ving)26 b(TTS)g(w)n(a)n(v)n(eforms)18 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)44 b Fd(41)150 1706 y Fc(say-minor-mode)16 b Fb(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(43)150 1806 y Fc(SayPhones)25 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(67)150 1907 y Fc(SayText)8 b Fb(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fd(25)150 2007 y(Sc)n(heme)14 b Fb(.)d(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)40 b Fd(5,)26 b(24)150 2107 y(Sc)n(heme)e(heap)i(size)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fd(24)150 2208 y(Sc)n(heme)24 b(in)n(tro)r(duction)19 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fd(27)150 2308 y(Sc)n(heme)24 b(programming)18 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(139)150 2408 y(Sc)n(heme)24 b(references)8 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)33 b Fd(27)150 2509 y(script)26 b(\014les)11 b Fb(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)36 b Fd(23)150 2609 y(script)26 b(programming)13 b Fb(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fd(147)150 2709 y(scripts)17 b Fb(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)43 b Fd(139)150 2809 y(securit)n(y)14 b Fb(.)e(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)40 b Fd(140)150 2910 y Fc(SegF0)27 b Fd(utterance)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(67)150 3010 y(Segmen)n(t)24 b(lab)r(elling)11 b Fb(.)k(.)d(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)37 b Fd(125)150 3110 y Fc(Segments)27 b Fd(utterance)18 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fd(67)150 3211 y(selecting)27 b(a)f(phoneset)10 b Fb(.)i(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)35 b Fd(45)150 3311 y(selection)27 b(of)f(diphones)16 b Fb(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(93)150 3411 y(selection-based) 27 b(syn)n(thesis)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(101)150 3512 y(separate)27 b(diphones)10 b Fb(.)h(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h (.)35 b Fd(89)150 3612 y(serv)n(er)26 b(mo)r(de)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(140)150 3712 y(serv)n(er)26 b(securit)n(y)12 b Fb(.)f(.)i(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(140)150 3812 y(serv)n(er/clien)n(t)26 b(proto)r(col)d Fb(.)13 b(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(143)150 3913 y(SGI)6 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(104)150 4013 y(SGML)17 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fd(37)150 4113 y(SGML)26 b(parser)10 b Fb(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)35 b Fd(41)150 4214 y(shell)26 b(programming)14 b Fb(.)e(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fd(140)150 4314 y(silences)13 b Fb(.)h(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)38 b Fd(45,)27 b(110)150 4414 y(SIOD)16 b Fb(.)11 b(.)h(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)g(.)h(.)f(.)42 b Fd(5)150 4515 y(`)p Fc(siteinit.scm)p Fd(')16 b Fb(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fd(17)150 4615 y(smaller)26 b(system)7 b Fb(.)12 b(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(17)150 4715 y(snac)n(k)16 b Fb(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)42 b Fd(105)150 4816 y(source)22 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)47 b Fd(129)150 4916 y(spanish)26 b(v)n(oice)15 b Fb(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(109)150 5016 y(Sp)r(ok)n(en)25 b(T)-6 b(ext)25 b(Mark-up)g (Language)e Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)47 b Fd(37)2025 299 y(SSML)7 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(37)2025 399 y(STML)19 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(37)2025 499 y(stress)26 b(assignmen)n(t)19 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)44 b Fd(58)2025 600 y(string)26 b(to)g(n)n(um)n(b)r(er)8 b Fb(.)i(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fd(30)2025 700 y(sun16)12 b Fb(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fd(103)2025 800 y(sunaudio)13 b Fb(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)39 b Fd(103)2025 900 y(SunOS)12 b Fb(.)f(.)h(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)38 b Fd(16)2025 1001 y(syllabi\014cation)24 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(49)2025 1101 y(Syllable)26 b(lab)r(elling)e Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(125)2025 1201 y(syn)n(thesis)25 b(ho)r(oks)14 b Fb(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)39 b Fd(66)2025 1301 y(syn)n(thesis)25 b(of)i(natural)f(utterances)13 b Fb(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(73)2025 1402 y(syn)n(thesizing)26 b(an)f(utterance)9 b Fb(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)35 b Fd(25)2025 1502 y(Syn)n(thT)n(yp)r(es)18 b Fb(.)11 b(.)h(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)44 b Fd(65)2025 1772 y Fn(T)2025 1906 y Fd(tagging)23 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(79)2025 2006 y(talking)26 b(head)10 b Fb(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)36 b Fd(66)2025 2106 y(T)-6 b(arget)26 b(lab)r(elling)7 b Fb(.)14 b(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(125)2025 2206 y(TD-PSOLA)18 b Fb(.)11 b(.)h(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(93)2025 2307 y(`)p Fc(texi2html)p Fd(')23 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)46 b Fd(14)2025 2407 y(text)25 b(mo)r(des)7 b Fb(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 b Fd(31,)27 b(32)2025 2507 y(text)e(to)h(sp)r(eec)n(h)18 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fd(25)2025 2607 y(text)25 b(to)h(w)n(a)n(v)n(e)10 b Fb(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(25)2025 2708 y Fc(Text)26 b Fd(utterance)e Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(66)2025 2808 y(text-to-sp)r(eec)n(h)24 b(mo)r(de)g Fb(.)12 b(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)50 b Fd(23)2025 2908 y(text2w)n(a)n(v)n(e)14 b Fb(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) 40 b Fd(25)2025 3008 y(thanks)16 b Fb(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fd(5)2025 3109 y(tok)n(enizing)11 b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fd(75)2025 3209 y(tok)n(ens)25 b(to)h(w)n(ords)9 b Fb(.)k(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)34 b Fd(75)2025 3309 y Fc(Tokens)27 b Fd(utterance)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(67)2025 3409 y(to)r(ols)10 b Fb(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(119)2025 3510 y(TTS)14 b Fb(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fd(25)2025 3610 y(tts)25 b(mo)r(de)15 b Fb(.)d(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fd(23)2025 3710 y(TTS)26 b(pro)r(cesses)12 b Fb(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)37 b Fd(63)2025 3980 y Fn(U)2025 4114 y Fd(ungroup)r(ed)25 b(diphones)7 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) g(.)33 b Fd(89)2025 4214 y(UniSyn)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(89)2025 4314 y(unkno)n(wn)24 b(w)n(ords)f Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)47 b Fd(51,)27 b(59)2025 4415 y Fc(unwind-protect)9 b Fb(.)15 b(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)34 b Fd(28,)27 b(29)2025 4515 y Fc(us_diphone_init)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(91)2025 4615 y(user)26 b(initialization)16 b Fb(.)f(.)d(.)g(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)42 b Fd(19)2025 4715 y(using)26 b(Sable)10 b Fb(.)i(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(41)2025 4816 y Fc(utt.import.wave)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)40 b Fd(73)2025 4916 y Fc(utt.load)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)32 b Fd(73)2025 5016 y Fc(utt.relation)c Fd(functions)17 b Fb(.)c(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)43 b Fd(68)p eop %%Page: 213 215 213 214 bop 150 -116 a Fo(Index)3241 b(213)150 299 y Fc(utt.save)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)32 b Fd(73)150 409 y Fc(utt.save.segs)18 b Fb(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fd(73)150 520 y Fc(utt.save.wave)18 b Fb(.)d(.)d(.)h(.)f(.)g(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)43 b Fd(73)150 631 y Fc(utt.synth)25 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) 49 b Fd(65)150 741 y(utterance)16 b Fb(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(24,)26 b(63)150 852 y(utterance)g(c)n (h)n(unking)c Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)50 b Fd(31)150 962 y(utterance)26 b(examples)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fd(66)150 1073 y(Utterance)25 b(structure)15 b Fb(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b Fd(64)150 1184 y(utterance)26 b(t)n(yp)r(es)13 b Fb(.)e(.)i(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)39 b Fd(65)150 1515 y Fn(V)150 1672 y Fd(Visual)26 b(C)p Fc(++)14 b Fb(.)g(.)e(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)40 b Fd(16)150 1783 y(Viterbi)26 b(deco)r(der)11 b Fb(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)37 b Fd(122)150 1893 y Fc(voice-path)23 b Fb(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(117)150 2004 y Fc(voice_reset)22 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(116)150 2114 y(v)n(oices)10 b Fb(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)36 b Fd(107)150 2225 y(v)n(o)n(xw)n(are)9 b Fb(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)35 b Fd(103)2025 299 y Fn(W)2025 431 y Fd(w)n(agon)12 b Fb(.)i(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(120,)27 b(127)2025 531 y Fc(Wave)f Fd(utterance)e Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(67)2025 631 y(w)n(a)n(v)n(eform)25 b(syn)n(thesis)f Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(89)2025 730 y(whitespace)18 b Fb(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)44 b Fd(75)2025 830 y(wild)26 b(card)g(matc)n(hing) 20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fd(119)2025 930 y(Windo)n(ws)26 b(95)g(audio)17 b Fb(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)43 b Fd(104)2025 1029 y(Windo)n(ws)26 b(NT)g(audio)17 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(104)2025 1129 y(Windo)n(ws)26 b(NT/95)10 b Fb(.)k(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)36 b Fd(14)2025 1229 y(W)-6 b(ord)25 b(lab)r(elling)7 b Fb(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(125)2025 1328 y Fc(Words)26 b Fd(utterance)c Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(66)2025 1594 y Fn(X)2025 1727 y Fd(XML)14 b Fb(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(37,)27 b(41)2025 1826 y(Xw)n(a)n(v)n(es)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(73)2025 2092 y Fn(Y)2025 2225 y Fd(Y2K)13 b Fb(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(20)p eop %%Page: 214 216 214 215 bop 150 -116 a Fo(214)2144 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Page: -1 217 -1 216 bop 3725 -116 a Fo(i)150 299 y Fl(T)-13 b(able)54 b(of)g(Con)l(ten)l(ts)150 641 y Fn(1)135 b(Abstract)35 b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) 79 b Fn(1)150 911 y(2)135 b(Cop)l(ying)18 b Fa(.)i(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)62 b Fn(3)150 1181 y(3)135 b(Ac)l(kno)l(wledgemen)l(ts)15 b Fa(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)59 b Fn(5)449 1318 y Fo(3.1)92 b(SIOD)8 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)38 b Fo(5)449 1427 y(3.2)92 b(editline)16 b Fi(.)d(.)i(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fo(6)449 1537 y(3.3)92 b(Edin)m(burgh)27 b(Sp)s(eec)m(h)j(T)-8 b(o)s(ols)30 b(Library)12 b Fi(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fo(6)449 1646 y(3.4)92 b(Others)28 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)h(.)58 b Fo(6)150 1889 y Fn(4)135 b(What)45 b(is)g(new)13 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)g(.)58 b Fn(9)150 2159 y(5)135 b(Ov)l(erview)14 b Fa(.)20 b(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)58 b Fn(11)449 2296 y Fo(5.1)92 b(Philosoph)m(y)8 b Fi(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)37 b Fo(11)449 2405 y(5.2)92 b(F)-8 b(uture)8 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)37 b Fo(12)150 2648 y Fn(6)135 b(Installation)18 b Fa(.)k(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)63 b Fn(13)449 2785 y Fo(6.1)92 b(Requiremen)m(ts)20 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)49 b Fo(13)449 2894 y(6.2)92 b(Con\014guration)18 b Fi(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fo(15)449 3004 y(6.3)92 b(Site)30 b(initialization)14 b Fi(.)e(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)44 b Fo(17)449 3113 y(6.4)92 b(Chec)m(king)30 b(an)g(installation)21 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)53 b Fo(19)449 3223 y(6.5)92 b(Y2K)27 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fo(20)150 3465 y Fn(7)135 b(Quic)l(k)45 b(start)20 b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)65 b Fn(23)449 3602 y Fo(7.1)92 b(Basic)31 b(command)f(line)e(options)13 b Fi(.)h(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fo(23)449 3712 y(7.2)92 b(Sample)29 b(command)h(driv)m(en)f(session)17 b Fi(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fo(24)449 3822 y(7.3)92 b(Getting)31 b(some)g(help)13 b Fi(.)g(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fo(26)150 4064 y Fn(8)135 b(Sc)l(heme)38 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)83 b Fn(27)449 4201 y Fo(8.1)92 b(Sc)m(heme)31 b(references)20 b Fi(.)15 b(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fo(27)449 4311 y(8.2)92 b(Sc)m(heme)31 b(fundamen)m(tals)13 b Fi(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)42 b Fo(27)449 4420 y(8.3)92 b(Sc)m(heme)31 b(F)-8 b(estiv)j(al)30 b(sp)s(eci\014cs)16 b Fi(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fo(28)449 4530 y(8.4)92 b(Sc)m(heme)31 b(I/O)10 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fo(29)150 4772 y Fn(9)135 b(TTS)32 b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)78 b Fn(31)449 4909 y Fo(9.1)92 b(Utterance)32 b(c)m(h)m(unking)9 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)39 b Fo(31)449 5019 y(9.2)92 b(T)-8 b(ext)31 b(mo)s(des)16 b Fi(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fo(32)449 5128 y(9.3)92 b(Example)29 b(text)j(mo)s(de)d Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)58 b Fo(34)p eop %%Page: -2 218 -2 217 bop 150 -116 a Fo(ii)2227 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 90 y Fn(10)135 b(XML/SGML)43 b(mark-up)38 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)83 b Fn(37)449 227 y Fo(10.1)92 b(Sable)30 b(example)d Fi(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fo(37)449 336 y(10.2)92 b(Supp)s(orted)29 b(Sable)g(tags)17 b Fi(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fo(38)449 446 y(10.3)92 b(Adding)29 b(Sable)h(tags)13 b Fi(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)42 b Fo(40)449 555 y(10.4)92 b(XML/SGML)31 b(requiremen)m(ts)19 b Fi(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) 48 b Fo(41)449 665 y(10.5)92 b(Using)30 b(Sable)13 b Fi(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fo(41)150 907 y Fn(11)135 b(Emacs)45 b(in)l(terface)10 b Fa(.)22 b(.)d(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)55 b Fn(43)150 1177 y(12)135 b(Phonesets)23 b Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)68 b Fn(45)150 1447 y(13)135 b(Lexicons)35 b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)79 b Fn(47)449 1584 y Fo(13.1)92 b(Lexical)30 b(en)m(tries)25 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fo(47)449 1694 y(13.2)92 b(De\014ning)30 b(lexicons)17 b Fi(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)47 b Fo(48)449 1803 y(13.3)92 b(Lo)s(okup)30 b(pro)s(cess)24 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fo(49)449 1913 y(13.4)92 b(Letter)32 b(to)f(sound)e(rules)22 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)51 b Fo(51)449 2022 y(13.5)92 b(Building)28 b(letter)j(to)g(sound)e(rules) c Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fo(53)449 2132 y(13.6)92 b(Lexicon)31 b(requiremen)m(ts)16 b Fi(.)e(.)h(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fo(58)449 2242 y(13.7)92 b(Av)-5 b(ailable)29 b(lexicons)21 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)50 b Fo(59)449 2351 y(13.8)92 b(P)m(ost-lexical)31 b(rules)17 b Fi(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)46 b Fo(60)150 2594 y Fn(14)135 b(Utterances)32 b Fa(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) 75 b Fn(63)449 2731 y Fo(14.1)92 b(Utterance)32 b(structure)c Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)57 b Fo(63)449 2840 y(14.2)92 b(Utterance)32 b(t)m(yp)s(es)17 b Fi(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)46 b Fo(65)449 2950 y(14.3)92 b(Example)30 b(utterance)h(t)m(yp)s(es)9 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)38 b Fo(66)449 3059 y(14.4)92 b(Utterance)32 b(mo)s(dules)23 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(67)449 3169 y(14.5)92 b(Accessing)31 b(an)f(utterance)e Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)56 b Fo(68)449 3279 y(14.6)92 b(F)-8 b(eatures)14 b Fi(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fo(71)449 3388 y(14.7)92 b(Utterance)32 b(I/O)26 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)55 b Fo(73)150 3631 y Fn(15)135 b(T)-11 b(ext)45 b(analysis)27 b Fa(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) h(.)f(.)72 b Fn(75)449 3768 y Fo(15.1)92 b(T)-8 b(ok)m(enizing)12 b Fi(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b Fo(75)449 3877 y(15.2)92 b(T)-8 b(ok)m(en)32 b(to)f(w)m(ord)f(rules)22 b Fi(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)51 b Fo(75)449 3987 y(15.3)92 b(Homograph)31 b(disam)m(biguation)21 b Fi(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fo(76)748 4096 y(15.3.1)93 b(Using)30 b(disam)m(biguators)21 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fo(77)748 4206 y(15.3.2)93 b(Building)27 b(disam)m(biguators)8 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)38 b Fo(77)150 4448 y Fn(16)135 b(POS)44 b(tagging)e Fa(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)85 b Fn(79)150 4718 y(17)135 b(Phrase)45 b(breaks)30 b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)74 b Fn(81)p eop %%Page: -3 219 -3 218 bop 3674 -116 a Fo(iii)150 83 y Fn(18)135 b(In)l(tonation)12 b Fa(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)57 b Fn(83)449 220 y Fo(18.1)92 b(Default)31 b(in)m(tonation)10 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)39 b Fo(83)449 330 y(18.2)92 b(Simple)28 b(in)m(tonation)23 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fo(83)449 439 y(18.3)92 b(T)-8 b(ree)31 b(in)m(tonation)c Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fo(84)449 549 y(18.4)92 b(Tilt)29 b(in)m(tonation)17 b Fi(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)46 b Fo(84)449 658 y(18.5)92 b(General)31 b(in)m(tonation)23 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)h(.)53 b Fo(84)449 768 y(18.6)92 b(Using)30 b(T)-8 b(oBI)18 b Fi(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fo(85)150 1010 y Fn(19)135 b(Duration)22 b Fa(.)e(.)g(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)67 b Fn(87)449 1147 y Fo(19.1)92 b(Default)31 b(durations)25 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)55 b Fo(87)449 1257 y(19.2)92 b(Av)m(erage)33 b(durations)13 b Fi(.)g(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)42 b Fo(87)449 1367 y(19.3)92 b(Klatt)31 b(durations)22 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)53 b Fo(87)449 1476 y(19.4)92 b(CAR)-8 b(T)31 b(durations)22 b Fi(.)13 b(.)i(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(88)150 1719 y Fn(20)135 b(UniSyn)45 b(syn)l(thesizer)34 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)79 b Fn(89)449 1856 y Fo(20.1)92 b(UniSyn)29 b(database)i(format)21 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)50 b Fo(89)748 1965 y(20.1.1)93 b(Generating)31 b(pitc)m(hmarks)15 b Fi(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)44 b Fo(89)748 2075 y(20.1.2)93 b(Generating)31 b(LPC)e(co)s(e\016cien)m(ts)21 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)50 b Fo(89)449 2184 y(20.2)92 b(Generating)31 b(a)g(diphone)d(index)17 b Fi(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) 46 b Fo(90)449 2294 y(20.3)92 b(Database)33 b(declaration)21 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) 50 b Fo(90)449 2403 y(20.4)92 b(Making)31 b(group\014les)22 b Fi(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)51 b Fo(92)449 2513 y(20.5)92 b(UniSyn)29 b(mo)s(dule)f(selection)13 b Fi(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)43 b Fo(92)449 2623 y(20.6)92 b(Diphone)30 b(selection)25 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fo(93)150 2865 y Fn(21)135 b(Diphone)45 b(syn)l(thesizer)37 b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.) h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)81 b Fn(95)449 3002 y Fo(21.1)92 b(Diphone)30 b(database)h(format)23 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(95)449 3112 y(21.2)92 b(LPC)30 b(databases)11 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)41 b Fo(96)449 3221 y(21.3)92 b(Group)30 b(\014les)e Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fo(97)449 3331 y(21.4)92 b(Diphone)p 1039 3331 28 4 v 32 w(Init)14 b Fi(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fo(97)449 3440 y(21.5)92 b(Access)32 b(strategies)21 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)50 b Fo(99)449 3550 y(21.6)92 b(Diphone)30 b(selection)25 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)54 b Fo(99)150 3792 y Fn(22)135 b(Other)45 b(syn)l(thesis)h(metho)t(ds)23 b Fa(.)c(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)67 b Fn(101)449 3929 y Fo(22.1)92 b(LPC)30 b(diphone)e(syn)m(thesizer)g Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)58 b Fo(101)449 4039 y(22.2)92 b(MBR)m(OLA)20 b Fi(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fo(101)449 4149 y(22.3)92 b(Syn)m(thesizers)30 b(in)f(dev)m(elopmen)m(t)8 b Fi(.)15 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fo(101)150 4391 y Fn(23)135 b(Audio)44 b(output)11 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) f(.)g(.)h(.)55 b Fn(103)p eop %%Page: -4 220 -4 219 bop 150 -116 a Fo(iv)2205 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)150 83 y Fn(24)135 b(V)-11 b(oices)38 b Fa(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)g(.)82 b Fn(107)449 220 y Fo(24.1)92 b(Curren)m(t)30 b(v)m(oices)23 b Fi(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)52 b Fo(107)449 330 y(24.2)92 b(Building)28 b(a)j(new)e(v)m(oice)e Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fo(109)748 439 y(24.2.1)93 b(Phoneset)9 b Fi(.)16 b(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b Fo(109)748 549 y(24.2.2)93 b(Lexicon)30 b(and)g(L)-8 b(TS)22 b Fi(.)14 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(110)748 658 y(24.2.3)93 b(Phrasing)14 b Fi(.)g(.)h(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fo(112)748 768 y(24.2.4)93 b(In)m(tonation)26 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fo(113)748 878 y(24.2.5)93 b(Duration)11 b Fi(.)j(.)h(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b Fo(113)748 987 y(24.2.6)93 b(W)-8 b(a)m(v)m(eform)33 b(syn)m(thesis)12 b Fi(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fo(114)748 1097 y(24.2.7)93 b(V)-8 b(oice)31 b(selection)g(function) 22 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(114)748 1206 y(24.2.8)93 b(Last)31 b(remarks)15 b Fi(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)45 b Fo(115)748 1316 y(24.2.9)93 b(Resetting)31 b(globals)22 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(116)449 1425 y(24.3)92 b(De\014ning)30 b(a)h(new)e(v)m(oice)g Fi(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fo(117)150 1668 y Fn(25)135 b(T)-11 b(o)t(ols)35 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) 79 b Fn(119)449 1805 y Fo(25.1)92 b(Regular)30 b(expressions)25 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) 55 b Fo(119)449 1914 y(25.2)92 b(CAR)-8 b(T)31 b(trees)e Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fo(120)449 2024 y(25.3)92 b(Ngrams)28 b Fi(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)57 b Fo(121)449 2134 y(25.4)92 b(Viterbi)29 b(deco)s(der)23 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)53 b Fo(122)449 2243 y(25.5)92 b(Linear)30 b(regression)16 b Fi(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fo(123)150 2486 y Fn(26)135 b(Building)45 b(mo)t(dels)g(from)h(databases)29 b Fa(.)21 b(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)73 b Fn(125)449 2623 y Fo(26.1)92 b(Lab)s(elling)28 b(databases)f Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fo(125)449 2732 y(26.2)92 b(Extracting)31 b(features)13 b Fi(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)43 b Fo(126)449 2842 y(26.3)92 b(Building)28 b(mo)s(dels)10 b Fi(.)j(.)i(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)40 b Fo(127)150 3084 y Fn(27)135 b(Programming)39 b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f (.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)82 b Fn(129)449 3221 y Fo(27.1)92 b(The)30 b(source)h(co)s(de)9 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)39 b Fo(129)449 3331 y(27.2)92 b(W)-8 b(riting)30 b(a)h(new)f(mo)s(dule)17 b Fi(.)c(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)47 b Fo(132)748 3440 y(27.2.1)93 b(Example)30 b(1:)41 b(adding)29 b(new)g(mo)s(dules)13 b Fi(.)h(.)h(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fo(132)748 3550 y(27.2.2)93 b(Example)30 b(2:)41 b(accessing)31 b(the)f(utterance)23 b Fi(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fo(134)748 3660 y(27.2.3)93 b(Example)30 b(3:)41 b(adding)29 b(new)g(directories)14 b Fi(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)44 b Fo(135)748 3769 y(27.2.4)93 b(Example)30 b(4:)41 b(adding)29 b(new)g(LISP)h(ob)5 b(jects)28 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fo(136)150 4012 y Fn(28)135 b(API)37 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)82 b Fn(139)449 4149 y Fo(28.1)92 b(Sc)m(heme)31 b(API)23 b Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fo(139)449 4258 y(28.2)92 b(Shell)29 b(API)10 b Fi(.)k(.)h(.)g(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)h(.)f(.)39 b Fo(140)449 4368 y(28.3)92 b(Serv)m(er/clien)m(t)31 b(API)23 b Fi(.)15 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)h(.)53 b Fo(140)748 4477 y(28.3.1)93 b(Serv)m(er)30 b(access)i(con)m(trol)15 b Fi(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fo(140)748 4587 y(28.3.2)93 b(Clien)m(t)29 b(con)m(trol)c Fi(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fo(142)748 4697 y(28.3.3)93 b(Serv)m(er/clien)m(t)30 b(proto)s(col)16 b Fi(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fo(143)449 4806 y(28.4)92 b(C/C)p Fk(++)30 b Fo(API)13 b Fi(.)h(.)i(.)f(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)42 b Fo(144)449 4916 y(28.5)92 b(C)30 b(only)g(API)16 b Fi(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fo(145)449 5025 y(28.6)92 b(Ja)m(v)-5 b(a)32 b(and)e(JSAPI)9 b Fi(.)k(.)i(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b Fo(145)p eop %%Page: -5 221 -5 220 bop 3702 -116 a Fo(v)150 83 y Fn(29)135 b(Examples)35 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)78 b Fn(147)449 220 y Fo(29.1)92 b(POS)30 b(Example)8 b Fi(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)38 b Fo(147)150 462 y Fn(30)135 b(Problems)40 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) 83 b Fn(149)150 732 y(31)135 b(References)34 b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)76 b Fn(151)150 1002 y(32)135 b(F)-11 b(eature)45 b(functions)23 b Fa(.)c(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) f(.)67 b Fn(153)150 1272 y(33)135 b(V)-11 b(ariable)46 b(list)22 b Fa(.)e(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)66 b Fn(161)150 1542 y(34)135 b(F)-11 b(unction)44 b(list)d Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)84 b Fn(169)150 1812 y(Index)34 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)79 b Fn(209)p eop %%Page: -6 222 -6 221 bop 150 -116 a Fo(vi)2205 b(F)-8 b(estiv)j(al)30 b(Sp)s(eec)m(h)g(Syn)m(thesis)f(System)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF festdoc-1.4.2/festival/html/0040755001741100001440000000000007327532411014427 5ustar awbusersfestdoc-1.4.2/festival/html/festival_toc.html0100644001741100001440000002722307332366671020013 0ustar awbusers Festival Speech Synthesis System - Table of Contents

The Festival Speech Synthesis System

System documentation

Edition 1.4, for Festival Version 1.4.2

25th July 2001

by Alan W Black, Paul Taylor and Richard Caley.



This document was generated on 2 August 2001 using the texi2html translator version 1.52.

festdoc-1.4.2/festival/html/festival_1.html0100644001741100001440000000333307332366671017362 0ustar awbusers Festival Speech Synthesis System - 1 Abstract Go to the first, previous, next, last section, table of contents.


1 Abstract

This document provides a user manual for the Festival Speech Synthesis System, version 1.4.2.

Festival offers a general framework for building speech synthesis systems as well as including examples of various modules. As a whole it offers full text to speech through a number APIs: from shell level, though a Scheme command interpreter, as a C++ library, and an Emacs interface. Festival is multi-lingual, we have develeoped voices in many languages including English (UK and US), Spanish and Welsh, though English is the most advanced.

The system is written in C++ and uses the Edinburgh Speech Tools for low level architecture and has a Scheme (SIOD) based command interpreter for control. Documentation is given in the FSF texinfo format which can generate a printed manual, info files and HTML.

The latest details and a full software distribution of the Festival Speech Synthesis System are available through its home page which may be found at

http://www.cstr.ed.ac.uk/projects/festival.html


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_2.html0100644001741100001440000001042107332366671017357 0ustar awbusers Festival Speech Synthesis System - 2 Copying Go to the first, previous, next, last section, table of contents.


2 Copying

As we feeel the core system has reached an acceptable level of maturity from 1.4.0 the basic system is released under a free lience, without the commercial restrictions we imposed on early versions. The basic system has been placed under an X11 type licence which as free licences go is pretty free. No GPL code is included in festival or the speech tools themselves (though some auxiliary files are GPL'd e.g. the Emacs mode for Festival). We have deliberately choosen a licence that should be compatible with our commercial partners and our free software users.

However although the code is free, we still offer no warranties and no maintenance. We will continue to endeavor to fix bugs and answer queries when can, but are not in a position to guarantee it. We will consider maintenance contracts and consultancy if desired, please contacts us for details.

Also note that not all the voices and lexicons we distribute with festival are free. Particularly the British English lexicon derived from Oxford Advanced Learners' Dictionary is free only for non-commercial use (we will release an alternative soon). Also the Spanish diphone voice we relase is only free for non-commercial use.

If you are using Festival or the speech tools in commercial environment, even though no licence is required, we would be grateful if you let us know as it helps justify ourselves to our various sponsors.

The current copyright on the core system is

          The Festival Speech Synthesis System: version 1.4.2
                Centre for Speech Technology Research                  
                     University of Edinburgh, UK                       
                      Copyright (c) 1996-2001                            
                        All Rights Reserved.                           
                                                                       
  Permission is hereby granted, free of charge, to use and distribute 
  this software and its documentation without restriction, including  
  without limitation the rights to use, copy, modify, merge, publish, 
  distribute, sublicense, and/or sell copies of this work, and to     
  permit persons to whom this work is furnished to do so, subject to  
  the following conditions:                                           
   1. The code must retain the above copyright notice, this list of   
      conditions and the following disclaimer.                        
   2. Any modifications must be clearly marked as such.               
   3. Original authors' names are not deleted.                        
   4. The authors' names are not used to endorse or promote products  
      derived from this software without specific prior written       
      permission.                                                     
                                                                       
  THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK        
  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      
  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   
  SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE     
  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    
  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   
  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          
  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       
  THIS SOFTWARE.                                                       


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_3.html0100644001741100001440000002240107332366671017361 0ustar awbusers Festival Speech Synthesis System - 3 Acknowledgements Go to the first, previous, next, last section, table of contents.


3 Acknowledgements

The code in this system was primarily written by Alan W Black, Paul Taylor and Richard Caley. Festival sits on top of the Edinburgh Speech Tools Library, and uses much of its functionality.

Amy Isard wrote a synthesizer for her MSc project in 1995, which first used the Edinburgh Speech Tools Library. Although Festival doesn't contain any code from that system, her system was used as a basic model.

Much of the design and philosophy of Festival has been built on the experience both Paul and Alan gained from the development of various previous synthesizers and software systems, especially CSTR's Osprey and Polyglot systems taylor91 and ATR's CHATR system black94.

However, it should be stated that Festival is fully developed at CSTR and contains neither proprietary code or ideas.

Festival contains a number of subsystems integrated from other sources and we acknowledge those systems here.

3.1 SIOD

The Scheme interpreter (SIOD -- Scheme In One Defun 3.0) was written by George Carrett (gjc@mitech.com, gjc@paradigm.com) and offers a basic small Scheme (Lisp) interpreter suitable for embedding in applications such as Festival as a scripting language. A number of changes and improvements have been added in our development but it still remains that basic system. We are grateful to George and Paradigm Associates Incorporated for providing such a useful and well-written sub-system.

                       Scheme In One Defun (SIOD)
                       COPYRIGHT (c) 1988-1994 BY 
        PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS.
                           ALL RIGHTS RESERVED

Permission to use, copy, modify, distribute and sell this software
and its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all copies
and that both that copyright notice and this permission notice appear
in supporting documentation, and that the name of Paradigm Associates
Inc not be used in advertising or publicity pertaining to distribution
of the software without specific, written prior permission.

PARADIGM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
PARADIGM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.

3.2 editline

Because of conflicts between the copyright for GNU readline, for which an optional interface was included in earlier versions, we have replace the interface with a complete command line editing system based on `editline'. `Editline' was posted to the USENET newsgroup `comp.sources.misc' in 1992. A number of modifications have been made to make it more useful to us but the original code (contained within the standard speech tools distribution) and our modifications fall under the following licence.

Copyright 1992 Simmule Turner and Rich Salz.  All rights reserved.       
                                                                         
This software is not subject to any license of the American Telephone    
and Telegraph Company or of the Regents of the University of California. 
                                                                         
Permission is granted to anyone to use this software for any purpose on  
any computer system, and to alter it and redistribute it freely, subject 
to the following restrictions:                                           
1. The authors are not responsible for the consequences of use of this   
   software, no matter how awful, even if they arise from flaws in it.   
2. The origin of this software must not be misrepresented, either by     
   explicit claim or by omission.  Since few users ever read sources,    
   credits must appear in the documentation.                             
3. Altered versions must be plainly marked as such, and must not be      
   misrepresented as being the original software.  Since few users       
   ever read sources, credits must appear in the documentation.          
4. This notice may not be removed or altered.                            

3.3 Edinburgh Speech Tools Library

The Edinburgh Speech Tools lies at the core of Festival. Although developed separately, much of the development of certain parts of the Edinburgh Speech Tools has been directed by Festival's needs. In turn those who have contributed to the Speech Tools make Festival a more usable system.

See section `Acknowledgements' in Edinburgh Speech Tools Library Manual.

Online information about the Edinburgh Speech Tools library is available through

http://www.cstr.ed.ac.uk/projects/speech_tools.html

3.4 Others

Many others have provided actual code and support for Festival, for which we are grateful. Specifically,

  • Alistair Conkie: various low level code points and some design work, Spanish synthesis, the old diphone synthesis code.
  • Steve Isard: directorship and LPC diphone code, design of diphone schema.
  • EPSRC: who fund Alan Black and Paul Taylor.
  • Sun Microsystems Laboratories: for supporting the project and funding Richard.
  • AT&T Labs - Research: for supporting the project.
  • Paradigm Associates and George Carrett: for Scheme in one defun.
  • Mike Macon: Improving the quality of the diphone synthesizer and LPC analysis.
  • Kurt Dusterhoff: Tilt intonation training and modelling.
  • Amy Isard: for her SSML project and related synthesizer.
  • Richard Tobin: for answering all those difficult questions, the socket code, and the XML parser.
  • Simmule Turner and Rich Salz: command line editor (editline)
  • Borja Etxebarria: Help with the Spanish synsthesis
  • Briony Williams: Welsh synthesis
  • Jacques H. de Villiers: `jacques@cse.ogi.edu' from CSLU at OGI, for the TCL interface, and other usability issues
  • Kevin Lenzo: `lenzo@cs.cmu.edu' from CMU for the PERL interface.
  • Rob Clarke: for support under Linux.
  • Samuel Audet `guardia@cam.org': OS/2 support
  • Mari Ostendorf: For providing access to the BU FM Radio corpus from which some modules were trained.
  • Melvin Hunt: from whose work we based our residual LPC synthesis model on
  • Oxford Text Archive: For the computer users version of Oxford Advanced Learners' Dictionary (redistributed with permission).
  • Reading University: for access to MARSEC from which the phrase break model was trained.
  • LDC & Penn Tree Bank: from which the POS tagger was trained, redistribution of the models is with permission from the LDC.
  • Roger Burroughes and Kurt Dusterhoff: For letting us capture their voices.
  • ATR and Nick Campbell: for first getting Paul and Alan to work together and for the experience we gained.
  • FSF: for G++, make, ....
  • Center for Spoken Language Understanding: CSLU at OGI, particularly Ron Cole and Mike Macon, have acted as significant users for the system giving significant feedback and allowing us to teach courses on Festival offering valuable real-use feedback.
  • Our beta testers: Thanks to all the people who put up with previous versions of the system and reported bugs, both big and small. These comments are very important to the constant improvements in the system. And thanks for your quick responses when I had specific requests.
  • And our users ... Many people have downloaded earlier versions of the system. Many have found problems with installation and use and have reported it to us. Many of you have put up with multiple compilations trying to fix bugs remotely. We thank you for putting up with us and are pleased you've taken the time to help us improve our system. Many of you have come up with uses we hadn't thought of, which is always rewarding. Even if you haven't actively responded, the fact that you use the system at all makes it worthwhile.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_4.html0100644001741100001440000000555507332366671017375 0ustar awbusers Festival Speech Synthesis System - 4 What is new Go to the first, previous, next, last section, table of contents.


4 What is new

Compared to the the previous major release (1.3.0 release Aug 1998) 1.4.0 is not functionally so different from its previous versions. This release is primarily a consolidation release fixing and tidying up some of the lower level aspects of the system to allow better modularity for some of our future planned modules.

  • Copyright change: The system is now free and has no commercial restriction. Note that currently on the US voices (ked and kal) are also now unrestricted. The UK English voices depend on the Oxford Advanced Learners' Dictionary of Current English which cannot be used for commercial use without permission from Oxford University Press.
  • Architecture tidy up: the interfaces to lower level part parts of the system have been tidied up deleting some of the older code that was supported for compatibility reasons. This is a much higher dependence of features and easier (and safer) ways to register new objects as feature values and Scheme objects. Scheme has been tidied up. It is no longer "in one defun" but "in one directory".
  • New documentation system for speech tools: A new docbook based documentation system has been added to the speech tools. Festival's documentation will will move over to this sometime soon too.
  • initial JSAPI support: both JSAPI and JSML (somewhat similar to Sable) now have initial impelementations. They of course depend on Java support which so far we have only (successfully) investgated under Solaris and Linux.
  • Generalization of statistical models: CART, ngrams, and WFSTs are now fully supported from Lisp and can be used with a generalized viterbi function. This makes adding quite complex statistical models easy without adding new C++.
  • Tilt Intonation modelling: Full support is now included for the Tilt intomation models, both training and use.
  • Documentation on Bulding New Voices in Festival: documentation, scripts etc. for building new voices and languages in the system, see
    http://www.cstr.ed.ac.uk/projects/festival/docs/festvox/
    


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_5.html0100644001741100001440000001654407332366671017376 0ustar awbusers Festival Speech Synthesis System - 5 Overview Go to the first, previous, next, last section, table of contents.


5 Overview

Festival is designed as a speech synthesis system for at least three levels of user. First, those who simply want high quality speech from arbitrary text with the minimum of effort. Second, those who are developing language systems and wish to include synthesis output. In this case, a certain amount of customization is desired, such as different voices, specific phrasing, dialog types etc. The third level is in developing and testing new synthesis methods.

This manual is not designed as a tutorial on converting text to speech but for documenting the processes and use of our system. We do not discuss the detailed algorithms involved in converting text to speech or the relative merits of multiple methods, though we will often give references to relevant papers when describing the use of each module.

For more general information about text to speech we recommend Dutoit's `An introduction to Text-to-Speech Synthesis' dutoit97. For more detailed research issues in TTS see sproat98 or vansanten96.

5.1 Philosophy

One of the biggest problems in the development of speech synthesis, and other areas of speech and language processing systems, is that there are a lot of simple well-known techniques lying around which can help you realise your goal. But in order to improve some part of the whole system it is necessary to have a whole system in which you can test and improve your part. Festival is intended as that whole system in which you may simply work on your small part to improve the whole. Without a system like Festival, before you could even start to test your new module you would need to spend significant effort to build a whole system, or adapt an existing one before you could start working on your improvements.

Festival is specifically designed to allow the addition of new modules, easily and efficiently, so that development need not get bogged down in re-implementing the wheel.

But there is another aspect of Festival which makes it more useful than simply an environment for researching into new synthesis techniques. It is a fully usable text-to-speech system suitable for embedding in other projects that require speech output. The provision of a fully working easy-to-use speech synthesizer in addition to just a testing environment is good for two specific reasons. First, it offers a conduit for our research, in that our experiments can quickly and directly benefit users of our synthesis system. And secondly, in ensuring we have a fully working usable system we can immediately see what problems exist and where our research should be directed rather where our whims take us.

These concepts are not unique to Festival. ATR's CHATR system (black94) follows very much the same philosophy and Festival benefits from the experiences gained in the development of that system. Festival benefits from various pieces of previous work. As well as CHATR, CSTR's previous synthesizers, Osprey and the Polyglot projects influenced many design decisions. Also we are influenced by more general programs in considering software engineering issues, especially GNU Octave and Emacs on which the basic script model was based.

Unlike in some other speech and language systems, software engineering is considered very important to the development of Festival. Too often research systems consist of random collections of hacky little scripts and code. No one person can confidently describe the algorithms it performs, as parameters are scattered throughout the system, with tricks and hacks making it impossible to really evaluate why the system is good (or bad). Such systems do not help the advancement of speech technology, except perhaps in pointing at ideas that should be further investigated. If the algorithms and techniques cannot be described externally from the program such that they can reimplemented by others, what is the point of doing the work?

Festival offers a common framework where multiple techniques may be implemented (by the same or different researchers) so that they may be tested more fairly in the same environment.

As a final word, we'd like to make two short statements which both achieve the same end but unfortunately perhaps not for the same reasons:

Good software engineering makes good research easier

But the following seems to be true also

If you spend enough effort on something it can be shown to be better than its competitors.

5.2 Future

Festival is still very much in development. Hopefully this state will continue for a long time. It is never possible to complete software, there are always new things that can make it better. However as time goes on Festival's core architecture will stabilise and little or no changes will be made. Other aspects of the system will gain greater attention such as waveform synthesis modules, intonation techniques, text type dependent analysers etc.

Festival will improve, so don't expected it to be the same six months from now.

A number of new modules and enhancements are already under consideration at various stages of implementation. The following is a non-exhaustive list of what we may (or may not) add to Festival over the next six months or so.

  • Selection-based synthesis: Moving away from diphone technology to more generalized selection of units for speech database.
  • New structure for linguistic content of utterances: Using techniques for Metrical Phonology we are building more structure representations of utterances reflecting there linguistic significance better. This will allow improvements in prosody and unit selection.
  • Non-prosodic prosodic control: For language generation systems and custom tasks where the speech to be synthesized is being generated by some program, more information about text structure will probably exist, such as phrasing, contrast, key items etc. We are investigating the relationship of high-level tags to prosodic information through the Sole project http://www.cstr.ed.ac.uk/projects/sole.html
  • Dialect independent lexicons: Currently for each new dialect we need a new lexicon, we are currently investigating a form of lexical specification that is dialect independent that allows the core form to be mapped to different dialects. This will make the generation of voices in different dialects much easier.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_6.html0100644001741100001440000006437607332366671017405 0ustar awbusers Festival Speech Synthesis System - 6 Installation Go to the first, previous, next, last section, table of contents.


6 Installation

This section describes how to install Festival from source in a new location and customize that installation.

6.1 Requirements

In order to compile Festival you first need the following source packages

festival-1.4.2.tar.gz
Festival Speech Synthesis System source
speech_tools-1.2.2.tar.gz
The Edinburgh Speech Tools Library
festlex_NAME.tar.gz
The lexicon distribution, where possible, includes the lexicon input file as well as the compiled form, for your convenience. The lexicons have varying distribution policies, but are all free except OALD, which is only free for non-commercial use (we are working on a free replacement). In some cases only a pointer to an ftp'able file plus a program to convert that file to the Festival format is included.
festvox_NAME.tar.gz
You'll need a speech database. A number are available (with varying distribution policies). Each voice may have other dependencies such as requiring particular lexicons
festdoc_1.4.2.tar.gz
Full postscript, info and html documentation for Festival and the Speech Tools. The source of the documentation is available in the standard distributions but for your conveniences it has been pre-generated.

In addition to Festival specific sources you will also need

A UNIX machine
Currently we have compiled and tested the system under Solaris (2.5(.1), 2.6, 2.7 and 2.8), SunOS (4.1.3), FreeBSD 3.x, 4.x Linux (Redhat 4.1, 5.0, 5.1, 5.2, 6.[012], 7.[01] and other Linux distributions), and it should work under OSF (Dec Alphas) SGI (Irix), HPs (HPUX). But any standard UNIX machine should be acceptable. We have now successfully ported this version to Windows NT nad Windows 95 (using the Cygnus GNU win32 environment). This is still a young port but seems to work.
A C++ compiler
Note that C++ is not very portable even between different versions of the compiler from the same vendor. Although we've tried very hard to make the system portable, we know it is very unlikely to compile without change except with compilers that have already been tested. The currently tested systems are
  • Sun Sparc Solaris 2.5, 2.5.1, 2.6, 2.7: GCC 2.7.2, egcs 1.1.1, egcs 1.1.2, GCC 2.95.1
  • Sun Sparc SunOS 4.1.3: GCC 2.7.2
  • FreeBSD for Intel 3.x and 4.x GCC 2.95.1, GCC 3.0
  • Linux for Intel (RedHat 4.1/5.0/5.1/5.2/6.0): GCC 2.7.2, GCC 2.7.2/egcs-1.0.2, egcs 1.1.1, egcs-1.1.2, GCC 2.95.[123], GCC "2.96", GCC 3.0
  • Windows NT 4.0: GCC 2.7.2 plus egcs (from Cygnus GNU win32 b19), Visual C++ PRO v5.0, Visual C++ v6.0
Note if GCC works on one version of Unix it usually works on others. We have compiled both the speech tools and Festival under Windows NT 4.0 and Windows 95 using the GNU tools available from Cygnus.
ftp://ftp.cygnus.com/pub/gnu-win32/.
GNU make
Due to there being too many different make programs out there we have tested the system using GNU make on all systems we use. Others may work but we know GNU make does.
Audio hardware
You can use Festival without audio output hardware but it doesn't sound very good (though admittedly you can hear less problems with it). A number of audio systems are supported (directly inherited from the audio support in the Edinburgh Speech Tools Library): NCD's NAS (formerly called netaudio) a network transparent audio system (which can be found at ftp://ftp.x.org/contrib/audio/nas/); `/dev/audio' (at 8k ulaw and 8/16bit linear), found on Suns, Linux machines and FreeBSD; and a method allowing arbitrary UNIX commands. See section 23 Audio output.

Earlier versions of Festival mistakenly offered a command line editor interface to the GNU package readline, but due to conflicts with the GNU Public Licence and Festival's licence this interface was removed in version 1.3.1. Even Festival's new free licence would cause problems as readline support would restrict Festival linking with non-free code. A new command line interface based on editline was provided that offers similar functionality. Editline remains a compilation option as it is probably not yet as portable as we would like it to be.

In addition to the above, in order to process the documentation you will need `TeX', `dvips' (or similar), GNU's `makeinfo' (part of the texinfo package) and `texi2html' which is available from http://wwwcn.cern.ch/dci/texi2html/.

However the document files are also available pre-processed into, postscript, DVI, info and html as part of the distribution in `festdoc-1.4.X.tar.gz'.

Ensure you have a fully installed and working version of your C++ compiler. Most of the problems people have had in installing Festival have been due to incomplete or bad compiler installation. It might be worth checking if the following program works if you don't know if anyone has used your C++ installation before.

#include <iostream.h>
int main (int argc, char **argv)
{
   cout << "Hello world\n";
}

Unpack all the source files in a new directory. The directory will then contain two subdirectories

speech_tools/
festival/

6.2 Configuration

First ensure you have a compiled version of the Edinburgh Speech Tools Library. See `speech_tools/INSTALL' for instructions.

The system now supports the standard GNU `configure' method for set up. In most cases this will automatically configure festival for your particular system. In most cases you need only type

gmake

and the system will configure itself and conpile, (note you need to have compiled the Edinburgh Speech Tools `speech_tools-1.2.2' first.

In some case hand configure is require. All of the configuration choise are held in the file `config/config'

For the most part Festival configuration inherits the configuration from your speech tools config file (`../speech_tools/config/config'). Additional optional modules may be added by adding them to the end of your config file e.g.

ALSO_INCLUDE += clunits

Adding and new module here will treat is as a new directory in the `src/modules/' and compile it into the system in the same way the OTHER_DIRS feature was used in previous versions.

If the compilation directory being accessed by NFS or if you use an automounter (e.g. amd) it is recommend to explicitly set the variable FESTIVAL_HOME in `config/config'. The command pwd is not reliable when a directory may have multiple names.

There is a simple test suite with Festival but it requires the three basic voices and their respective lexicons install before it will work. Thus you need to install

festlex_CMU.tar.gz
festlex_OALD.tar.gz
festlex_POSLEX.tar.gz
festvox_don.tar.gz
festvox_kedlpc16k.tar.gz
festvox_rablpc16k.tar.gz

If these are installed you can test the installation with

gmake test

To simply make it run with a male US Ebglish voiuce it is sufficient to install just

festlex_CMU.tar.gz
festlex_POSLEX.tar.gz
festvox_kallpc16k.tar.gz

Note that the single most common reason for problems in compilation and linking found amongst the beta testers was a bad installation of GNU C++. If you get many strange errors in G++ library header files or link errors it is worth checking that your system has the compiler, header files and runtime libraries properly installed. This may be checked by compiling a simple program under C++ and also finding out if anyone at your site has ever used the installation. Most of these installation problems are caused by upgrading to a newer version of libg++ without removing the older version so a mixed version of the `.h' files exist.

Although we have tried very hard to ensure that Festival compiles with no warnings this is not possible under some systems.

Under SunOS the system include files do not declare a number of system provided functions. This a bug in Sun's include files. This will causes warnings like "implicit definition of fprintf". These are harmless.

Under Linux a warning at link time about reducing the size of some symbols often is produced. This is harmless. There is often occasional warnings about some socket system function having an incorrect argument type, this is also harmless.

The speech tools and festival compile under Windows95 or Windows NT with Visual C++ v5.0 using the Microsoft `nmake' make program. We've only done this with the Professonal edition, but have no reason to believe that it relies on anything not in the standard edition.

In accordance to VC++ conventions, object files are created with extension .obj, executables with extension .exe and libraries with extension .lib. This may mean that both unix and Win32 versions can be built in the same directory tree, but I wouldn't rely on it.

To do this you require nmake Makefiles for the system. These can be generated from the gnumake Makefiles, using the command

gnumake VCMakefile

in the speech_tools and festival directories. I have only done this under unix, it's possible it would work under the cygnus gnuwin32 system.

If `make.depend' files exist (i.e. if you have done `gnumake depend' in unix) equivalent `vc_make.depend' files will be created, if not the VCMakefiles will not contain dependency information for the `.cc' files. The result will be that you can compile the system once, but changes will not cause the correct things to be rebuilt.

In order to compile from the DOS command line using Visual C++ you need to have a collection of environment variables set. In Windows NT there is an instalation option for Visual C++ which sets these globally. Under Windows95 or if you don't ask for them to be set globally under NT you need to run

vcvars32.bat

See the VC++ documentation for more details.

Once you have the source trees with VCMakefiles somewhere visible from Windows, you need to copy `peech_tools\config\vc_config-dist' to `speech_tools\config\vc_config' and edit it to suit your local situation. Then do the same with `festival\config\vc_config-dist'.

The thing most likely to need changing is the definition of FESTIVAL_HOME in `festival\config\vc_config_make_rules' which needs to point to where you have put festival.

Now you can compile. cd to the speech_tools directory and do

nmake /nologo /fVCMakefile 

and the library, the programs in main and the test programs should be compiled.

The tests can't be run automatically under Windows. A simple test to check that things are probably OK is:

main\na_play testsuite\data\ch_wave.wav

which reads and plays a waveform.

Next go into the festival directory and do

nmake /nologo /fVCMakefile 

to build festival. When it's finished, and assuming you have the voices and lexicons unpacked in the right place, festival should run just as under unix.

We should remind you that the NT/95 ports are still young and there may yet be problems that we've not found yet. We only recommend the use the speech tools and Festival under Windows if you have significant experience in C++ under those platforms.

Most of the modules `src/modules' are actually optional and the system could be compiled without them. The basic set could be reduced further if certain facilities are not desired. Particularly: `donovan' which is only required if the donovan voice is used; `rxp' if no XML parsing is required (e.g. Sable); and `parser' if no stochastic paring is required (this parser isn't used for any of our currently released voices). Actually even `UniSyn' and `UniSyn_diphone' could be removed if some external waveform synthesizer is being used (e.g. MBROLA) or some alternative one like `OGIresLPC'. Removing unused modules will make the festival binary smaller and (potentially) start up faster but don't expect too much. You can delete these by changing the BASE_DIRS variable in `src/modules/Makefile'.

6.3 Site initialization

Once compiled Festival may be further customized for particular sites. At start up time Festival loads the file `init.scm' from its library directory. This file further loads other necessary files such as phoneset descriptions, duration parameters, intonation parameters, definitions of voices etc. It will also load the files `sitevars.scm' and `siteinit.scm' if they exist. `sitevars.scm' is loaded after the basic Scheme library functions are loaded but before any of the festival related functions are loaded. This file is intended to set various path names before various subsystems are loaded. Typically variables such as lexdir (the directory where the lexicons are held), and voices_dir (pointing to voice directories) should be reset here if necessary.

The default installation will try to find its lexicons and voices automatically based on the value of load-path (this is derived from FESTIVAL_HOME at compilation time or by using the --libdir at run-time). If the voices and lexicons have been unpacked into subdirectories of the library directory (the default) then no site specific initialization of the above pathnames will be necessary.

The second site specific file is `siteinit.scm'. Typical examples of local initialization are as follows. The default audio output method is NCD's NAS system if that is supported as that's what we use normally in CSTR. If it is not supported, any hardware specific mode is the default (e.g. sun16audio, freebas16audio, linux16audio or mplayeraudio). But that default is just a setting in `init.scm'. If for example in your environment you may wish the default audio output method to be 8k mulaw through `/dev/audio' you should add the following line to your `siteinit.scm' file

(Parameter.set 'Audio_Method 'sunaudio)

Note the use of Parameter.set rather than Parameter.def the second function will not reset the value if it is already set. Remember that you may use the audio methods sun16audio. linux16audio or freebsd16audio only if NATIVE_AUDIO was selected in `speech_tools/config/config' and your are on such machines. The Festival variable *modules* contains a list of all supported functions/modules in a particular installation including audio support. Check the value of that variable if things aren't what you expect.

If you are installing on a machine whose audio is not directly supported by the speech tools library, an external command may be executed to play a waveform. The following example is for an imaginary machine that can play audio files through a program called `adplay' with arguments for sample rate and file type. When playing waveforms, Festival, by default, outputs as unheadered waveform in native byte order. In this example you would set up the default audio playing mechanism in `siteinit.scm' as follows

(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "adplay -raw -r $SR $FILE")

For Audio_Command method of playing waveforms Festival supports two additional audio parameters. Audio_Required_Rate allows you to use Festivals internal sample rate conversion function to any desired rate. Note this may not be as good as playing the waveform at the sample rate it is originally created in, but as some hardware devices are restrictive in what sample rates they support, or have naive resample functions this could be optimal. The second addition audio parameter is Audio_Required_Format which can be used to specify the desired output forms of the file. The default is unheadered raw, but this may be any of the values supported by the speech tools (including nist, esps, snd, riff, aiff, audlab, raw and, if you really want it, ascii).

For example suppose you run Festival on a remote machine and are not running any network audio system and want Festival to copy files back to your local machine and simply cat them to `/dev/audio'. The following would do that (assuming permissions for rsh are allowed).

(Parameter.set 'Audio_Method 'Audio_Command)
;; Make output file ulaw 8k (format ulaw implies 8k)
(Parameter.set 'Audio_Required_Format 'ulaw)
(Parameter.set 'Audio_Command 
 "userhost=`echo $DISPLAY | sed 's/:.*$//'`; rcp $FILE $userhost:$FILE; \
  rsh $userhost \"cat $FILE >/dev/audio\" ; rsh $userhost \"rm $FILE\"")

Note there are limits on how complex a command you want to put in the Audio_Command string directly. It can get very confusing with respect to quoting. It is therefore recommended that once you get past a certain complexity consider writing a simple shell script and calling it from the Audio_Command string.

A second typical customization is setting the default speaker. Speakers depend on many things but due to various licence (and resource) restrictions you may only have some diphone/nphone databases available in your installation. The function name that is the value of voice_default is called immediately after `siteinit.scm' is loaded offering the opportunity for you to change it. In the standard distribution no change should be required. If you download all the distributed voices voice_rab_diphone is the default voice. You may change this for a site by adding the following to `siteinit.scm' or per person by changing your `.festivalrc'. For example if you wish to change the default voice to the American one voice_ked_diphone

(set! voice_default 'voice_ked_diphone)

Note the single quote, and note that unlike in early versions voice_default is not a function you can call directly.

A second level of customization is on a per user basis. After loading `init.scm', which includes `sitevars.scm' and `siteinit.scm' for local installation, Festival loads the file `.festivalrc' from the user's home directory (if it exists). This file may contain arbitrary Festival commands.

6.4 Checking an installation

Once compiled and site initialization is set up you should test to see if Festival can speak or not.

Start the system

$ bin/festival
Festival Speech Synthesis System 1.4.2:release July 2001
Copyright (C) University of Edinburgh, 1996-2001. All rights reserved.
For details type `(festival_warranty)'
festival> ^D

If errors occur at this stage they are most likely to do with pathname problems. If any error messages are printed about non-existent files check that those pathnames point to where you intended them to be. Most of the (default) pathnames are dependent on the basic library path. Ensure that is correct. To find out what it has been set to, start the system without loading the init files.

$ bin/festival -q
Festival Speech Synthesis System 1.4.2:release July 2001
Copyright (C) University of Edinburgh, 1996-2001. All rights reserved.
For details type `(festival_warranty)'
festival> libdir
"/projects/festival/lib/"
festival> ^D

This should show the pathname you set in your `config/config'.

If the system starts with no errors try to synthesize something

festival> (SayText "hello world")

Some files are only accessed at synthesis time so this may show up other problem pathnames. If it talks, you're in business, if it doesn't, here are some possible problems.

If you get the error message

Can't access NAS server

You have selected NAS as the audio output but have no server running on that machine or your DISPLAY or AUDIOSERVER environment variable is not set properly for your output device. Either set these properly or change the audio output device in `lib/siteinit.scm' as described above.

Ensure your audio device actually works the way you think it does. On Suns, the audio output device can be switched into a number of different output modes, speaker, jack, headphones. If this is set to the wrong one you may not hear the output. Use one of Sun's tools to change this (try `/usr/demo/SOUND/bin/soundtool'). Try to find an audio file independent of Festival and get it to play on your audio. Once you have done that ensure that the audio output method set in Festival matches that.

Once you have got it talking, test the audio spooling device.

festival> (intro)

This plays a short introduction of two sentences, spooling the audio output.

Finally exit from Festival (by end of file or (quit)) and test the script mode with.

$ examples/saytime

A test suite is included with Festival but it makes certain assumptions about which voices are installed. It assumes that voice_rab_diphone (`festvox_rabxxxx.tar.gz') is the default voice and that voice_ked_diphone and voice_don_diphone (`festvox_kedxxxx.tar.gz' and `festvox_don.tar.gz') are installed. Also local settings in your `festival/lib/siteinit.scm' may affect these tests. However, after installation it may be worth trying

gnumake test

from the `festival/' directory. This will do various tests including basic utterance tests and tokenization tests. It also checks that voices are installed and that they don't interfere with each other. These tests are primarily regression tests for the developers of Festival, to ensure new enhancements don't mess up existing supported features. They are not designed to test an installation is successful, though if they run correctly it is most probable the installation has worked.

6.5 Y2K

Festival comes with no warranty therefore we will not make any legal statement about the performance of the system. However a number of people have ask about Festival and Y2K compliance, and we have decided to make some comments on this.

Every effort has been made to ensure that Festival will continue running as before into the next millenium. However even if Festival itself has no problems it is dependent on the operating system environment it is running in. During compilation dates on files are important and the compilation process may not work if your machine cannot assign (reasonable) dates to new files. At run time there is less dependence on system dates and times. Specifically times are used in generation of random numbers (where only relative time is important) and as time stamps in log files when festival runs in server mode, thus we feel it is unlikely there will be any problems.

However, as a speech synthesizer, Festival must make explicit decisions about the pronunciation of dates in the next two decades when people themselves have not yet made such decisions. Most people are still unsure how to read years written as '01, '04, '12, 00s, 10s, (cf. '86, 90s). It is interesting to note that while there is a convenient short name for the last decade of the twentieth century, the "ninties" there is no equivalent name for the first decade of the twenty-first century (or the second). In the mean time we have made reasonable decisions about such pronunciations.

Once people have themselves become Y2K compliant and decided what to actually call these years, if their choices are different from how Festival pronounces them we reserve the right to change how Festival speaks these dates to match their belated decisions. However as we do not give out warranties about compliance we will not be requiring our users to return signed Y2K compliant warranties about their own compliance either.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_7.html0100644001741100001440000002672707332366671017404 0ustar awbusers Festival Speech Synthesis System - 7 Quick start Go to the first, previous, next, last section, table of contents.


7 Quick start

This section is for those who just want to know the absolute basics to run the system.

Festival works in two fundamental modes, command mode and text-to-speech mode (tts-mode). In command mode, information (in files or through standard input) is treated as commands and is interpreted by a Scheme interpreter. In tts-mode, information (in files or through standard input) is treated as text to be rendered as speech. The default mode is command mode, though this may change in later versions.

7.1 Basic command line options

Festival's basic calling method is as

festival [options] file1 file2 ...

Options may be any of the following

-q
start Festival without loading `init.scm' or user's `.festivalrc'
-b
--batch
After processing any file arguments do not become interactive
-i
--interactive
After processing file arguments become interactive. This option overrides any batch argument.
--tts
Treat file arguments in text-to-speech mode, causing them to be rendered as speech rather than interpreted as commands. When selected in interactive mode the command line edit functions are not available
--command
Treat file arguments in command mode. This is the default.
--language LANG
Set the default language to LANG. Currently LANG may be one of english, spanish or welsh (depending on what voices are actually available in your installation).
--server
After loading any specified files go into server mode. This is a mode where Festival waits for clients on a known port (the value of server_port, default is 1314). Connected clients may send commands (or text) to the server and expect waveforms back. See section 28.3 Server/client API. Note server mode may be unsafe and allow unauthorised access to your machine, be sure to read the security recommendations in section 28.3 Server/client API
--script scriptfile
Run scriptfile as a Festival script file. This is similar to to --batch but it encapsulates the command line arguments into the Scheme variables argv and argc, so that Festival scripts may process their command line arguments just like any other program. It also does not load the the basic initialisation files as sometimes you may not want to do this. If you wish them, you should copy the loading sequence from an example Festival script like `festival/examples/saytext'.
--heap NUMBER
The Scheme heap (basic number of Lisp cells) is of a fixed size and cannot be dynamically increased at run time (this would complicate garbage collection). The default size is 210000 which seems to be more than adequate for most work. In some of our training experiments where very large list structures are required it is necessary to increase this. Note there is a trade off between size of the heap and time it takes to garbage collect so making this unnecessarily big is not a good idea. If you don't understand the above explanation you almost certainly don't need to use the option.

In command mode, if the file name starts with a left parenthesis, the name itself is read and evaluated as a Lisp command. This is often convenient when running in batch mode and a simple command is necessary to start the whole thing off after loading in some other specific files.

7.2 Sample command driven session

Here is a short session using Festival's command interpreter.

Start Festival with no arguments

$ festival
Festival Speech Synthesis System 1.4.2:release July 2001
Copyright (C) University of Edinburgh, 1996-2001. All rights reserved.
For details type `(festival_warranty)'
festival>

Festival uses the a command line editor based on editline for terminal input so command line editing may be done with Emacs commands. Festival also supports history as well as function, variable name, and file name completion via the TAB key.

Typing help will give you more information, that is help without any parenthesis. (It is actually a variable name whose value is a string containing help.)

Festival offers what is called a read-eval-print loop, because it reads an s-expression (atom or list), evaluates it and prints the result. As Festival includes the SIOD Scheme interpreter most standard Scheme commands work

festival> (car '(a d))
a
festival> (+ 34 52)
86

In addition to standard Scheme commands a number of commands specific to speech synthesis are included. Although, as we will see, there are simpler methods for getting Festival to speak, here are the basic underlying explicit functions used in synthesizing an utterance.

Utterances can consist of various types (See section 14.2 Utterance types), but the simplest form is plain text. We can create an utterance and save it in a variable

festival> (set! utt1 (Utterance Text "Hello world"))
#<Utterance 1d08a0>
festival>

The (hex) number in the return value may be different for your installation. That is the print form for utterances. Their internal structure can be very large so only a token form is printed.

Although this creates an utterance it doesn't do anything else. To get a waveform you must synthesize it.

festival> (utt.synth utt1)
#<Utterance 1d08a0>
festival>

This calls various modules, including tokenizing, duration,. intonation etc. Which modules are called are defined with respect to the type of the utterance, in this case Text. It is possible to individually call the modules by hand but you just wanted it to talk didn't you. So

festival> (utt.play utt1)
#<Utterance 1d08a0>
festival>

will send the synthesized waveform to your audio device. You should hear "Hello world" from your machine.

To make this all easier a small function doing these three steps exists. SayText simply takes a string of text, synthesizes it and sends it to the audio device.

festival> (SayText "Good morning, welcome to Festival")
#<Utterance 1d8fd0>
festival>

Of course as history and command line editing are supported c-p or up-arrow will allow you to edit the above to whatever you wish.

Festival may also synthesize from files rather than simply text.

festival> (tts "myfile" nil)
nil
festival>

The end of file character c-d will exit from Festival and return you to the shell, alternatively the command quit may be called (don't forget the parentheses).

Rather than starting the command interpreter, Festival may synthesize files specified on the command line

unix$ festival --tts myfile
unix$

Sometimes a simple waveform is required from text that is to be kept and played at some later time. The simplest way to do this with festival is by using the `text2wave' program. This is a festival script that will take a file (or text from standard input) and produce a single waveform.

An example use is

text2wave myfile.txt -o myfile.wav

Options exist to specify the waveform file type, for example if Sun audio format is required

text2wave myfile.txt -otype snd -o myfile.wav

Use `-h' on `text2wave' to see all options.

7.3 Getting some help

If no audio is generated then you must check to see if audio is properly initialized on your machine. See section 23 Audio output.

In the command interpreter m-h (meta-h) will give you help on the current symbol before the cursor. This will be a short description of the function or variable, how to use it and what its arguments are. A listing of all such help strings appears at the end of this document. m-s will synthesize and say the same information, but this extra function is really just for show.

The lisp function manual will send the appropriate command to an already running Netscape browser process. If nil is given as an argument the browser will be directed to the tables of contents of the manual. If a non-nil value is given it is assumed to be a section title and that section is searched and if found displayed. For example

festival> (manual "Accessing an utterance")

Another related function is manual-sym which given a symbol will check its documentation string for a cross reference to a manual section and request Netscape to display it. This function is bound to m-m and will display the appropriate section for the given symbol.

Note also that the TAB key can be used to find out the name of commands available as can the function Help (remember the parentheses).

For more up to date information on Festival regularly check the Festival Home Page at

http://www.cstr.ed.ac.uk/projects/festival.html

Further help is available by mailing questions to

festival-help@cstr.ed.ac.uk

Although we cannot guarantee the time required to answer you, we will do our best to offer help.

Bug reports should be submitted to

festival-bug@cstr.ed.ac.uk

If there is enough user traffic a general mailing list will be created so all users may share comments and receive announcements. In the mean time watch the Festival Home Page for news.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_8.html0100644001741100001440000003007107332366671017370 0ustar awbusers Festival Speech Synthesis System - 8 Scheme Go to the first, previous, next, last section, table of contents.


8 Scheme

Many people seem daunted by the fact that Festival uses Scheme as its scripting language and feel they can't use Festival because they don't know Scheme. However most of those same people use Emacs everyday which also has (a much more complex) Lisp system underneath. The number of Scheme commands you actually need to know in Festival is really very small and you can easily just find out as you go along. Also people use the Unix shell often but only know a small fraction of actual commands available in the shell (or in fact that there even is a distinction between shell builtin commands and user definable ones). So take it easy, you'll learn the commands you need fairly quickly.

8.1 Scheme references

If you wish to learn about Scheme in more detail I recommend the book abelson85.

The Emacs Lisp documentation is reasonable as it is comprehensive and many of the underlying uses of Scheme in Festival were influenced by Emacs. Emacs Lisp however is not Scheme so there are some differences.

Other Scheme tutorials and resources available on the Web are

8.2 Scheme fundamentals

But you want more now, don't you, not just be referred to some other book. OK here goes.

Syntax: an expression is an atom or a list. A list consists of a left paren, a number of expressions and right paren. Atoms can be symbols, numbers, strings or other special types like functions, hash tables, arrays, etc.

Semantics: All expressions can be evaluated. Lists are evaluated as function calls. When evaluating a list all the members of the list are evaluated first then the first item (a function) is called with the remaining items in the list as arguments. Atoms are evaluated depending on their type: symbols are evaluated as variables returning their values. Numbers, strings, functions, etc. evaluate to themselves.

Comments are started by a semicolon and run until end of line.

And that's it. There is nothing more to the language that. But just in case you can't follow the consequences of that, here are some key examples.

festival> (+ 2 3)
5
festival> (set! a 4)
4
festival> (* 3 a)
12
festival> (define (add a b) (+ a b))
#<CLOSURE (a b) (+ a b)>
festival> (add 3 4)
7
festival> (set! alist '(apples pears bananas))
(apples pears bananas)
festival> (car alist)
apples
festival> (cdr alist)
(pears bananas)
festival> (set! blist (cons 'oranges alist))
(oranges apples pears bananas)
festival> (append alist blist)
(apples pears bananas oranges apples pears bananas)
festival> (cons alist blist)
((apples pears bananas) oranges apples pears bananas)
festival> (length alist)
3
festival> (length (append alist blist))
7

8.3 Scheme Festival specifics

There a number of additions to SIOD that are Festival specific though still part of the Lisp system rather than the synthesis functions per se.

By convention if the first statement of a function is a string, it is treated as a documentation string. The string will be printed when help is requested for that function symbol.

In interactive mode if the function :backtrace is called (within parenthesis) the previous stack trace is displayed. Calling :backtrace with a numeric argument will display that particular stack frame in full. Note that any command other than :backtrace will reset the trace. You may optionally call

(set_backtrace t)

Which will cause a backtrace to be displayed whenever a Scheme error occurs. This can be put in your `.festivalrc' if you wish. This is especially useful when running Festival in non-interactive mode (batch or script mode) so that more information is printed when an error occurs.

A hook in Lisp terms is a position within some piece of code where a user may specify their own customization. The notion is used heavily in Emacs. In Festival there a number of places where hooks are used. A hook variable contains either a function or list of functions that are to be applied at some point in the processing. For example the after_synth_hooks are applied after synthesis has been applied to allow specific customization such as resampling or modification of the gain of the synthesized waveform. The Scheme function apply_hooks takes a hook variable as argument and an object and applies the function/list of functions in turn to the object.

When an error occurs in either Scheme or within the C++ part of Festival by default the system jumps to the top level, resets itself and continues. Note that errors are usually serious things, pointing to bugs in parameters or code. Every effort has been made to ensure that the processing of text never causes errors in Festival. However when using Festival as a development system it is often that errors occur in code.

Sometimes in writing Scheme code you know there is a potential for an error but you wish to ignore that and continue on to the next thing without exiting or stopping and returning to the top level. For example you are processing a number of utterances from a database and some files containing the descriptions have errors in them but you want your processing to continue through every utterance that can be processed rather than stopping 5 minutes after you gone home after setting a big batch job for overnight.

Festival's Scheme provides the function unwind-protect which allows the catching of errors and then continuing normally. For example suppose you have the function process_utt which takes a filename and does things which you know might cause an error. You can write the following to ensure you continue processing even in an error occurs.

(unwind-protect
 (process_utt filename) 
 (begin
   (format t "Error found in processing %s\n" filename)
   (format t "continuing\n")))

The unwind-protect function takes two arguments. The first is evaluated and if no error occurs the value returned from that expression is returned. If an error does occur while evaluating the first expression, the second expression is evaluated. unwind-protect may be used recursively. Note that all files opened while evaluating the first expression are closed if an error occurs. All global variables outside the scope of the unwind-protect will be left as they were set up until the error. Care should be taken in using this function but its power is necessary to be able to write robust Scheme code.

8.4 Scheme I/O

Different Scheme's may have quite different implementations of file i/o functions so in this section we will describe the basic functions in Festival SIOD regarding i/o.

Simple printing to the screen may be achieved with the function print which prints the given s-expression to the screen. The printed form is preceded by a new line. This is often useful for debugging but isn't really powerful enough for much else.

Files may be opened and closed and referred to file descriptors in a direct analogy to C's stdio library. The SIOD functions fopen and fclose work in the exactly the same way as their equivalently named partners in C.

The format command follows the command of the same name in Emacs and a number of other Lisps. C programmers can think of it as fprintf. format takes a file descriptor, format string and arguments to print. The file description may be a file descriptor as returned by the Scheme function fopen, it may also be t which means the output will be directed as standard out (cf. printf). A third possibility is nil which will cause the output to printed to a string which is returned (cf. sprintf).

The format string closely follows the format strings in ANSI C, but it is not the same. Specifically the directives currently supported are, %%, %d, %x, %s, %f, %g and %c. All modifiers for these are also supported. In addition %l is provided for printing of Scheme objects as objects.

For example

(format t "%03d %3.4f %s %l %l %l\n" 23 23 "abc" "abc" '(a b d) utt1)

will produce

023 23.0000 abc "abc" (a b d) #<Utterance 32f228>

on standard output.

When large lisp expressions are printed they are difficult to read because of the parentheses. The function pprintf prints an expression to a file description (or t for standard out). It prints so the s-expression is nicely lined up and indented. This is often called pretty printing in Lisps.

For reading input from terminal or file, there is currently no equivalent to scanf. Items may only be read as Scheme expressions. The command

(load FILENAME t)

will load all s-expressions in FILENAME and return them, unevaluated as a list. Without the third argument the load function will load and evaluate each s-expression in the file.

To read individual s-expressions use readfp. For example

(let ((fd (fopen trainfile "r"))
      (entry)
      (count 0))
    (while (not (equal? (set! entry (readfp fd)) (eof-val)))
     (if (string-equal (car entry) "home")
        (set! count (+ 1 count))))
    (fclose fd))

To convert a symbol whose print name is a number to a number use parse-number. This is the equivalent to atof in C.

Note that, all i/o from Scheme input files is assumed to be basically some form of Scheme data (though can be just numbers, tokens). For more elaborate analysis of incoming data it is possible to use the text tokenization functions which offer a fully programmable method of reading data.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_9.html0100644001741100001440000003577307332366671017407 0ustar awbusers Festival Speech Synthesis System - 9 TTS Go to the first, previous, next, last section, table of contents.


9 TTS

Festival supports text to speech for raw text files. If you are not interested in using Festival in any other way except as black box for rendering text as speech, the following method is probably what you want.

festival --tts myfile

This will say the contents of `myfile'. Alternatively text may be submitted on standard input

echo hello world | festival --tts
cat myfile | festival --tts

Festival supports the notion of text modes where the text file type may be identified, allowing Festival to process the file in an appropriate way. Currently only two types are considered stable: STML and raw, but other types such as email, HTML, Latex, etc. are being developed and discussed below. This follows the idea of buffer modes in Emacs where a file's type can be utilized to best display the text. Text mode may also be selected based on a filename's extension.

Within the command interpreter the function tts is used to render files as text; it takes a filename and the text mode as arguments.

9.1 Utterance chunking

Text to speech works by first tokenizing the file and chunking the tokens into utterances. The definition of utterance breaks is determined by the utterance tree in variable eou_tree. A default version is given in `lib/tts.scm'. This uses a decision tree to determine what signifies an utterance break. Obviously blank lines are probably the most reliable, followed by certain punctuation. The confusion of the use of periods for both sentence breaks and abbreviations requires some more heuristics to best guess their different use. The following tree is currently used which works better than simply using punctuation.

(defvar eou_tree 
'((n.whitespace matches ".*\n.*\n\\(.\\|\n\\)*") ;; 2 or more newlines
  ((1))
  ((punc in ("?" ":" "!"))
   ((1))
   ((punc is ".")
    ;; This is to distinguish abbreviations vs periods
    ;; These are heuristics
    ((name matches "\\(.*\\..*\\|[A-Z][A-Za-z]?[A-Za-z]?\\|etc\\)")
     ((n.whitespace is " ")
      ((0))                  ;; if abbrev single space isn't enough for break
      ((n.name matches "[A-Z].*")
       ((1))
       ((0))))
     ((n.whitespace is " ")  ;; if it doesn't look like an abbreviation
      ((n.name matches "[A-Z].*")  ;; single space and non-cap is no break
       ((1))
       ((0)))
      ((1))))
    ((0)))))

The token items this is applied to will always (except in the end of file case) include one following token, so look ahead is possible. The "n." and "p." and "p.p." prefixes allow access to the surrounding token context. The features name, whitespace and punc allow access to the contents of the token itself. At present there is no way to access the lexicon form this tree which unfortunately might be useful if certain abbreviations were identified as such there.

Note these are heuristics and written by hand not trained from data, though problems have been fixed as they have been observed in data. The above rules may make mistakes where abbreviations appear at end of lines, and when improper spacing and capitalization is used. This is probably worth changing, for modes where more casual text appears, such as email messages and USENET news messages. A possible improvement could be made by analysing a text to find out its basic threshold of utterance break (i.e. if no full stop, two spaces, followed by a capitalized word sequences appear and the text is of a reasonable length then look for other criteria for utterance breaks).

Ultimately what we are trying to do is to chunk the text into utterances that can be synthesized quickly and start to play them quickly to minimise the time someone has to wait for the first sound when starting synthesis. Thus it would be better if this chunking were done on prosodic phrases rather than chunks more similar to linguistic sentences. Prosodic phrases are bounded in size, while sentences are not.

9.2 Text modes

We do not believe that all texts are of the same type. Often information about the general contents of file will aid synthesis greatly. For example in Latex files we do not want to here "left brace, backslash e m" before each emphasized word, nor do we want to necessarily hear formating commands. Festival offers a basic method for specifying customization rules depending on the mode of the text. By type we are following the notion of modes in Emacs and eventually will allow customization at a similar level.

Modes are specified as the third argument to the function tts. When using the Emacs interface to Festival the buffer mode is automatically passed as the text mode. If the mode is not supported a warning message is printed and the raw text mode is used.

Our initial text mode implementation allows configuration both in C++ and in Scheme. Obviously in C++ almost anything can be done but it is not as easy to reconfigure without recompilation. Here we will discuss those modes which can be fully configured at run time.

A text mode may contain the following

filter
A Unix shell program filter that processes the text file in some appropriate way. For example for email it might remove uninteresting headers and just output the subject, from line and the message body. If not specified, an identity filter is used.
init_function
This (Scheme) function will be called before any processing will be done. It allows further set up of tokenization rules and voices etc.
exit_function
This (Scheme) function will be called at the end of any processing allowing reseting of tokenization rules etc.
analysis_mode
If analysis mode is xml the file is read through the built in XML parser rxp. Alternatively if analysis mode is xxml the filter should an SGML normalising parser and the output is processed in a way suitable for it. Any other value is ignored.

These mode specific parameters are specified in the a-list held in tts_text_modes.

When using Festival in Emacs the emacs buffer mode is passed to Festival as the text mode.

Note that above mechanism is not really designed to be re-entrant, this should be addressed in later versions.

Following the use of auto-selection of mode in Emacs, Festival can auto-select the text mode based on the filename given when no explicit mode is given. The Lisp variable auto-text-mode-alist is a list of dotted pairs of regular expression and mode name. For example to specify that the email mode is to be used for files ending in `.email' we would add to the current auto-text-mode-alist as follows

(set! auto-text-mode-alist
      (cons (cons "\\.email$" 'email) 
            auto-text-mode-alist))

If the function tts is called with a mode other than nil that mode overrides any specified by the auto-text-mode-alist. The mode fundamental is the explicit "null" mode, it is used when no mode is specified in the function tts, and match is found in auto-text-mode-alist or the specified mode is not found.

By convention if a requested text model is not found in tts_text_modes the file `MODENAME-mode' will be required. Therefore if you have the file `MODENAME-mode.scm' in your library then it will be automatically loaded on reference. Modes may be quite large and it is not necessary have Festival load them all at start up time.

Because of the auto-text-mode-alist and the auto loading of currently undefined text modes you can use Festival like

festival --tts example.email

Festival with automatically synthesize `example.email' in text mode email.

If you add your own personal text modes you should do the following. Suppose you've written an HTML mode. You have named it `html-mode.scm' and put it in `/home/awb/lib/festival/'. In your `.festivalrc' first identify you're personal Festival library directory by adding it to lib-path.

(set! lib-path (cons "/home/awb/lib/festival/" lib-path))

Then add the definition to the auto-text-mode-alist that file names ending `.html' or `.htm' should be read in HTML mode.

(set! auto-text-mode-alist
      (cons (cons "\\.html?$" 'html) 
            auto-text-mode-alist))

Then you may synthesize an HTML file either from Scheme

(tts "example.html" nil)

Or from the shell command line

festival --tts example.html

Anyone familiar with modes in Emacs should recognise that the process of adding a new text mode to Festival is very similar to adding a new buffer mode to Emacs.

9.3 Example text mode

Here is a short example of a tts mode for reading email messages. It is by no means complete but is a start at showing how you can customize tts modes without writing new C++ code.

The first task is to define a filter that will take a saved mail message and remove extraneous headers and just leave the from line, subject and body of the message. The filter program is given a file name as its first argument and should output the result on standard out. For our purposes we will do this as a shell script.

#!/bin/sh
#  Email filter for Festival tts mode
#  usage: email_filter mail_message >tidied_mail_message
grep "^From: " $1
echo 
grep "^Subject: " $1
echo
# delete up to first blank line (i.e. the header)
sed '1,/^$/ d' $1

Next we define the email init function, which will be called when we start this mode. What we will do is save the current token to words function and slot in our own new one. We can then restore the previous one when we exit.

(define (email_init_func)
 "Called on starting email text mode."
 (set! email_previous_t2w_func token_to_words)
 (set! english_token_to_words email_token_to_words)
 (set! token_to_words email_token_to_words))

Note that both english_token_to_words and token_to_words should be set to ensure that our new token to word function is still used when we change voices.

The corresponding end function puts the token to words function back.

(define (email_exit_func)
 "Called on exit email text mode."
 (set! english_token_to_words email_previous_t2w_func)
 (set! token_to_words email_previous_t2w_func))

Now we can define the email specific token to words function. In this example we deal with two specific cases. First we deal with the common form of email addresses so that the angle brackets are not pronounced. The second points are to recognise quoted text and immediately change the the speaker to the alternative speaker.

(define (email_token_to_words token name)
  "Email specific token to word rules."
  (cond

This first condition identifies the token as a bracketed email address and removes the brackets and splits the token into name and IP address. Note that we recursively call the function email_previous_t2w_func on the email name and IP address so that they will be pronounced properly. Note that because that function returns a list of words we need to append them together.

   ((string-matches name "<.*.*>")
     (append
      (email_previous_t2w_func token
       (string-after (string-before name "@") "<"))
      (cons 
       "at"
       (email_previous_t2w_func token
        (string-before (string-after name "@") ">")))))

Our next condition deals with identifying a greater than sign being used as a quote marker. When we detect this we select the alternative speaker, even though it may already be selected. We then return no words so the quote marker is not spoken. The following condition finds greater than signs which are the first token on a line.

   ((and (string-matches name ">")
         (string-matches (item.feat token "whitespace") 
                         "[ \t\n]*\n *"))
    (voice_don_diphone)
    nil ;; return nothing to say
   )

If it doesn't match any of these we can go ahead and use the builtin token to words function Actually, we call the function that was set before we entered this mode to ensure any other specific rules still remain. But before that we need to check if we've had a newline with doesn't start with a greater than sign. In that case we switch back to the primary speaker.

   (t  ;; for all other cases
     (if (string-matches (item.feat token "whitespace") 
                         ".*\n[ \t\n]*")
         (voice_rab_diphone))
     (email_previous_t2w_func token name))))

In addition to these we have to actually declare the text mode. This we do by adding to any existing modes as follows.

(set! tts_text_modes
   (cons
    (list
      'email   ;; mode name
      (list         ;; email mode params
       (list 'init_func email_init_func)
       (list 'exit_func email_exit_func)
       '(filter "email_filter")))
    tts_text_modes))

This will now allow simple email messages to be dealt with in a mode specific way.

An example mail message is included in `examples/ex1.email'. To hear the result of the above text mode start Festival, load in the email mode descriptions, and call TTS on the example file.

(tts ".../examples/ex1.email" 'email)

The above is very short of a real email mode but does illustrate how one might go about building one. It should be reiterated that text modes are new in Festival and their most effective form has not been discovered yet. This will improve with time and experience.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_10.html0100644001741100001440000004145607332366671017452 0ustar awbusers Festival Speech Synthesis System - 10 XML/SGML mark-up Go to the first, previous, next, last section, table of contents.


10 XML/SGML mark-up

The ideas of a general, synthesizer system nonspecific, mark-up language for labelling text has been under discussion for some time. Festival has supported an SGML based markup language through multiple versions most recently STML (sproat97). This is based on the earlier SSML (Speech Synthesis Markup Language) which was supported by previous versions of Festival (taylor96). With this version of Festival we support Sable a similar mark-up language devised by a consortium from Bell Labls, Sub Microsystems, AT&T and Edinburgh, sable98. Unlike the previous versions which were SGML based, the implementation of Sable in Festival is now XML based. To the user they different is negligable but using XML makes processing of files easier and more standardized. Also Festival now includes an XML parser thus reducing the dependencies in processing Sable text.

Raw text has the problem that it cannot always easily be rendered as speech in the way the author wishes. Sable offers a well-defined way of marking up text so that the synthesizer may render it appropriately.

The definition of Sable is by no means settled and is still in development. In this release Festival offers people working on Sable and other XML (and SGML) based markup languages a chance to quickly experiment with prototypes by providing a DTD (document type descriptions) and the mapping of the elements in the DTD to Festival functions. Although we have not yet (personally) investigated facilities like cascading style sheets and generalized SGML specification languages like DSSSL we believe the facilities offer by Festival allow rapid prototyping of speech output markup languages.

Primarily we see Sable markup text as a language that will be generated by other programs, e.g. text generation systems, dialog managers etc. therefore a standard, easy to parse, format is required, even if it seems overly verbose for human writers.

For more information of Sable and access to the mailing list see

http://www.cstr.ed.ac.uk/projects/sable.html

10.1 Sable example

Here is a simple example of Sable marked up text

<?xml version="1.0"?>
<!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" 
      "Sable.v0_2.dtd"
[]>
<SABLE>
<SPEAKER NAME="male1">

The boy saw the girl in the park <BREAK/> with the telescope.
The boy saw the girl <BREAK/> in the park with the telescope.

Good morning <BREAK /> My name is Stuart, which is spelled
<RATE SPEED="-40%">
<SAYAS MODE="literal">stuart</SAYAS> </RATE>
though some people pronounce it 
<PRON SUB="stoo art">stuart</PRON>.  My telephone number
is <SAYAS MODE="literal">2787</SAYAS>.

I used to work in <PRON SUB="Buckloo">Buccleuch</PRON> Place, 
but no one can pronounce that.

By the way, my telephone number is actually
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.2.au"/>
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.7.au"/>
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.8.au"/>
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.7.au"/>.
</SPEAKER>
</SABLE>

After the initial definition of the SABLE tags, through the file `Sable.v0_2.dtd', which is distributed as part of Festival, the body is given. There are tags for identifying the language and the voice. Explicit boundary markers may be given in text. Also duration and intonation control can be explicit specified as can new pronunciations of words. The last sentence specifies some external filenames to play at that point.

10.2 Supported Sable tags

There is not yet a definitive set of tags but hopefully such a list will form over the next few months. As adding support for new tags is often trivial the problem lies much more in defining what tags there should be than in actually implementing them. The following are based on version 0.2 of Sable as described in http://www.cstr.ed.ac.uk/projects/sable_spec2.html, though some aspects are not currently supported in this implementation. Further updates will be announces through the Sable mailing list.

LANGUAGE
Allows the specification of the language through the ID attribute. Valid values in Festival are, english, en1, spanish, en, and others depending on your particular installation. For example
<LANGUAGE id="english"> ... </LANGUAGE>
If the language isn't supported by the particualr installation of Festival "Some text in .." is said instead and the section is ommitted.
SPEAKER
Select a voice. Accepts a parameter NAME which takes values male1, male2, female1, etc. There is currently no definition about what happens when a voice is selected which the synthesizer doesn't support. An example is
<SPEAKER name="male1"> ... </SPEAKER>
AUDIO
This allows the specification of an external waveform that is to be included. There are attributes for specifying volume and whether the waveform is to be played in the background of the following text or not. Festival as yet only supports insertion.
My telephone number is 
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.2.au"/>
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.7.au"/>
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.8.au"/>
<AUDIO SRC="http://www.cstr.ed.ac.uk/~awb/sounds/touchtone.7.au"/>.
MARKER
This allows Festival to mark when a particalur part of the text has been reached. At present the simply the value of the MARK attribute is printed. This is done some when that piece of text is analyzed. not when it is played. To use this in any real application would require changes to this tags implementation.
Move the <MARKER MARK="mouse" /> mouse to the top.
BREAK
Specifies a boundary at some LEVEL. Strength may be values Large, Medium, Small or a number. Note that this this tag is an emtpy tag and must include the closing part within itsefl specification.
<BREAK LEVEL="LARGE"/>
DIV
This signals an division. In Festival this causes an utterance break. A TYPE attribute may be specified but it is ignored by Festival.
PRON
Allows pronunciation of enclosed text to be explcitily given. It supports the attributes IPA for an IPA specification (not currently supported by Festival); SUB text to be substituted which can be in some form of phonetic spelling, and ORIGIN where the linguistic origin of the enclosed text may be identified to assist in etymologically sensitive letter to sound rules.
<PRON SUB="toe maa toe">tomato</PRON>
SAYAS
Allows indeitnfication of the enclose tokens/text. The attribute MODE cand take any of the following a values: literal, date, time, phone, net, postal, currency, math, fraction, measure, ordinal, cardinal, or name. Further specification of type for dates (MDY, DMY etc) may be speficied through the MODETYPE attribute.
As a test of marked-up numbers. Here we have 
a year <SAYAS MODE="date">1998</SAYAS>, 
an ordinal <SAYAS MODE="ordinal">1998</SAYAS>, 
a cardinal <SAYAS MODE="cardinal">1998</SAYAS>, 
a literal <SAYAS MODE="literal">1998</SAYAS>, 
and phone number <SAYAS MODE="phone">1998</SAYAS>.
EMPH
To specify enclose text should be emphasized, a LEVEL attribute may be specified but its value is currently ignored by Festival (besides the emphasis Festival generates isn't very good anyway).
The leaders of <EMPH>Denmark</EMPH> and <EMPH>India</EMPH> meet on
Friday.
PITCH
Allows the specification of pitch range, mid and base points.
Without his penguin, <PITCH BASE="-20%"> which he left at home, </PITCH>
he could not enter the restaurant.
RATE
Allows the specification of speaking rate
The address is <RATE SPEED="-40%"> 10 Main Street </RATE>.
VOLUME
Allows the specification of volume. Note in festival this causes an utetrance break before and after this tag.
Please speak more <VOLUME LEVEL="loud">loudly</VOLUME>, except
when I ask you to speak <VOLUME LEVEL="quiet">in a quiet voice</VOLUME>.
ENGINE
This allows specification of engine specific commands
An example is <ENGINE ID="festival" DATA="our own festival speech
synthesizer"> the festival speech synthesizer</ENGINE> or
the Bell Labs speech synthesizer.

These tags may change in name but they cover the aspects of speech mark up that we wish to express. Later additions and changes to these are expected.

See the files `festival/examples/example.sable' and `festival/examples/example2.sable' for working examples.

Note the definition of Sable is on going and there are likely to be later more complete implementations of sable for Festival as independent releases consult `url://www.cstr.ed.ac.uk/projects/sable.html' for the most recent updates.

10.3 Adding Sable tags

We do not yet claim that there is a fixed standard for Sable tags but we wish to move towards such a standard. In the mean time we have made it easy in Festival to add support for new tags without, in general, having to change any of the core functions.

Two changes are necessary to add a new tags. First, change the definition in `lib/Sable.v0_2.dtd', so that Sable files may use it. The second stage is to make Festival sensitive to that new tag. The example in festival/lib/sable-mode.scm shows how a new text mode may be implemented for an XML/SGML-based markup language. The basic point is that an identified function will be called on finding a start tag or end tags in the document. It is the tag-function's job to synthesize the given utterance if the tag signals an utterance boundary. The return value from the tag-function is the new status of the current utterance, which may remain unchanged or if the current utterance has been synthesized nil should be returned signalling a new utterance.

Note the hierarchical structure of the document is not available in this method of tag-functions. Any hierarchical state that must be preserved has to be done using explicit stacks in Scheme. This is an artifact due to the cross relationship to utterances and tags (utterances may end within start and end tags), and the desire to have all specification in Scheme rather than C++.

The tag-functions are defined in an elements list. They are identified with names such as "(SABLE" and ")SABLE" denoting start and end tags respectively. Two arguments are passed to these tag functions, an assoc list of attributes and values as specified in the document and the current utterances. If the tag denotes an utterance break, call xxml_synth on UTT and return nil. If a tag (start or end) is found in the document and there is no corresponding tag-function it is ignored.

New features may be added to words with a start and end tag by adding features to the global xxml_word_features. Any features in that variable will be added to each word.

Note that this method may be used for both XML based lamnguages and SGML based markup languages (though and external normalizing SGML parser is required in the SGML case). The type (XML vs SGML) is identified by the analysis_type parameter in the tts text mode specification.

10.4 XML/SGML requirements

Festival is distributed with rxp an XML parser developed by Richard Tobin of the Language Technology Group, University of Edinburgh. Sable is set up as an XML text mode so no further requirements or external programs are required to synthesize from Sable marked up text (unlike previous releases). Note that rxp is not a full validation parser and hence doesn't check some aspects of the file (tags within tags).

Festival still supports SGML based markup but in such cases requires an external SGML normalizing parser. We have tested `nsgmls-1.0' which is available as part of the SGML tools set `sp-1.1.tar.gz' which is available from http://www.jclark.com/sp/index.html. This seems portable between many platforms.

10.5 Using Sable

Support in Festival for Sable is as a text mode. In the command mode use the following to process an Sable file

(tts "file.sable" 'sable)

Also the automatic selection of mode based on file type has been set up such that files ending `.sable' will be automatically synthesized in this mode. Thus

festival --tts fred.sable

Will render `fred.sable' as speech in Sable mode.

Another way of using Sable is through the Emacs interface. The say-buffer command will send the Emacs buffer mode to Festival as its tts-mode. If the Emacs mode is stml or sgml the file is treated as an sable file. See section 11 Emacs interface

Many people experimenting with Sable (and TTS in general) often want all the waveform output to be saved to be played at a later date. The simplest way to do this is using the `text2wave' script, It respects the audo mode selection so

text2wave fred.sable -o fred.wav

Note this renders the file a single waveform (done by concatenating the waveforms for each utterance in the Sable file).

If you wish the waveform for each utterance in a file saved you can cause the tts process to save the waveforms during synthesis. A call to

festival> (save_waves_during_tts)

Any future call to tts will cause the waveforms to be saved in a file `tts_file_xxx.wav' where `xxx' is a number. A call to (save_waves_during_tts_STOP) will stop saving the waves. A message is printed when the waveform is saved otherwise people forget about this and wonder why their disk has filled up.

This is done by inserting a function in tts_hooks which saves the wave. To do other things to each utterances during TTS (such as saving the utterance structure), try redefining the function save_tts_output (see festival/lib/tts.scm).


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_11.html0100644001741100001440000000420207332366671017437 0ustar awbusers Festival Speech Synthesis System - 11 Emacs interface Go to the first, previous, next, last section, table of contents.


11 Emacs interface

One easy method of using Festival is via an Emacs interface that allows selection of text regions to be sent to Festival for rendering as speech.

`festival.el' offers a new minor mode which offers an extra menu (in emacs-19 and 20) with options for saying a selected region, or a whole buffer, as well as various general control functions. To use this you must install `festival.el' in a directory where Emacs can find it, then add to your `.emacs' in your home directory the following lines.

(autoload 'say-minor-mode "festival" "Menu for using Festival." t)
(say-minor-mode t)

Successive calls to say-minor-mode will toggle the minor mode, switching the `say' menu on and off.

Note that the optional voice selection offered by the language sub-menu is not sensitive to actual voices supported by the your Festival installation. Hand customization is require in the `festival.el' file. Thus some voices may appear in your menu that your Festival doesn't support and some voices may be supported by your Festival that do not appear in the menu.

When the Emacs Lisp function festival-say-buffer or the menu equivalent is used the Emacs major mode is passed to Festival as the text mode.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_12.html0100644001741100001440000001035107332366671017442 0ustar awbusers Festival Speech Synthesis System - 12 Phonesets Go to the first, previous, next, last section, table of contents.


12 Phonesets

The notion of phonesets is important to a number of different subsystems within Festival. Festival supports multiple phonesets simultaneously and allows mapping between sets when necessary. The lexicons, letter to sound rules, waveform synthesizers, etc. all require the definition of a phoneset before they will operate.

A phoneset is a set of symbols which may be further defined in terms of features, such as vowel/consonant, place of articulation for consonants, type of vowel etc. The set of features and their values must be defined with the phoneset. The definition is used to ensure compatibility between sub-systems as well as allowing groups of phones in various prediction systems (e.g. duration)

A phoneset definition has the form

  (defPhoneSet
     NAME
     FEATUREDEFS
     PHONEDEFS )

The NAME is any unique symbol used e.g. mrpa, darpa, etc. FEATUREDEFS is a list of definitions each consisting of a feature name and its possible values. For example

   (
     (vc + -)             ;; vowel consonant
     (vlength short long diphthong schwa 0)  ;; vowel length 
     ...
   )

The third section is a list of phone definitions themselves. Each phone definition consists of a phone name and the values for each feature in the order the features were defined in the above section.

A typical example of a phoneset definition can be found in `lib/mrpa_phones.scm'.

Note the phoneset should also include a definition for any silence phones. In addition to the definition of the set the silence phone(s) themselves must also be identified to the system. This is done through the command PhoneSet.silences. In the mrpa set this is done by the command

(PhoneSet.silences '(#))

There may be more than one silence phone (e.g. breath, start silence etc.) in any phoneset definition. However the first phone in this set is treated special and should be canonical silence. Among other things, it is this phone that is inserted by the pause prediction module.

In addition to declaring phonesets, alternate sets may be selected by the command PhoneSet.select.

Phones in different sets may be automatically mapped between using their features. This mapping is not yet as general as it could be, but is useful when mapping between various phonesets of the same language. When a phone needs to be mapped from one set to another the phone with matching features is selected. This allows, at least to some extent, lexicons, waveform synthesizers, duration modules etc. to use different phonesets (though in general this is not advised).

A list of currently defined phonesets is returned by the function

(PhoneSet.list)

Note phonesets are often not defined until a voice is actually loaded so this list is not the list of of sets that are distributed but the list of sets that are used by currently loaded voices.

The name, phones, features and silences of the current phoneset may be accessedwith the function

(PhoneSet.description nil)

If the argument to this function is a list, only those parts of the phoneset description named are returned. For example

(PhoneSet.description '(silences))
(PhoneSet.description '(silences phones))


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_13.html0100644001741100001440000012607207332366671017453 0ustar awbusers Festival Speech Synthesis System - 13 Lexicons Go to the first, previous, next, last section, table of contents.


13 Lexicons

A Lexicon in Festival is a subsystem that provides pronunciations for words. It can consist of three distinct parts: an addenda, typically short consisting of hand added words; a compiled lexicon, typically large (10,000s of words) which sits on disk somewhere; and a method for dealing with words not in either list.

13.1 Lexical entries

Lexical entries consist of three basic parts, a head word, a part of speech and a pronunciation. The headword is what you might normally think of as a word e.g. `walk', `chairs' etc. but it might be any token.

The part-of-speech field currently consist of a simple atom (or nil if none is specified). Of course there are many part of speech tag sets and whatever you mark in your lexicon must be compatible with the subsystems that use that information. You can optionally set a part of speech tag mapping for each lexicon. The value should be a reverse assoc-list of the following form

(lex.set.pos.map 
   '((( punc fpunc) punc)
     (( nn nnp nns nnps ) n)))

All part of speech tags not appearing in the left hand side of a pos map are left unchanged.

The third field contains the actual pronunciation of the word. This is an arbitrary Lisp S-expression. In many of the lexicons distributed with Festival this entry has internal format, identifying syllable structure, stress markigns and of course the phones themselves. In some of our other lexicons we simply list the phones with stress marking on each vowel.

Some typical example entries are

( "walkers" n ((( w oo ) 1) (( k @ z ) 0)) )
( "present" v ((( p r e ) 0) (( z @ n t ) 1)) )
( "monument" n ((( m o ) 1) (( n y u ) 0) (( m @ n t ) 0)) )

Note you may have two entries with the same headword, but different part of speech fields allow differentiation. For example

( "lives" n ((( l ai v z ) 1)) )
( "lives" v ((( l i v z ) 1)) )

See section 13.3 Lookup process for a description of how multiple entries with the same headword are used during lookup.

By current conventions, single syllable function words should have no stress marking, while single syllable content words should be stressed.

NOTE: the POS field may change in future to contain more complex formats. The same lexicon mechanism (but different lexicon) is used for holding part of speech tag distributions for the POS prediction module.

13.2 Defining lexicons

As stated above, lexicons consist of three basic parts (compiled form, addenda and unknown word method) plus some other declarations.

Each lexicon in the system has a name which allows different lexicons to be selected from efficiently when switching between voices during synthesis. The basic steps involved in a lexicon definition are as follows.

First a new lexicon must be created with a new name

(lex.create "cstrlex")

A phone set must be declared for the lexicon, to allow both checks on the entries themselves and to allow phone mapping between different phone sets used in the system

(lex.set.phoneset "mrpa")

The phone set must be already declared in the system.

A compiled lexicon, the construction of which is described below, may be optionally specified

(lex.set.compile.file "/projects/festival/lib/dicts/cstrlex.out")

The method for dealing with unknown words, See section 13.4 Letter to sound rules, may be set

(lex.set.lts.method 'lts_rules)
(lex.set.lts.ruleset 'nrl)

In this case we are specifying the use of a set of letter to sound rules originally developed by the U.S. Naval Research Laboratories. The default method is to give an error if a word is not found in the addenda or compiled lexicon. (This and other options are discussed more fully below.)

Finally addenda items may be added for words that are known to be common, but not in the lexicon and cannot reasonably be analysed by the letter to sound rules.

(lex.add.entry 
  '( "awb" n ((( ei ) 1) ((d uh) 1) ((b @ l) 0) ((y uu) 0) ((b ii) 1))))
(lex.add.entry 
  '( "cstr" n ((( s ii ) 1) (( e s ) 1) (( t ii ) 1) (( aa ) 1)) ))
(lex.add.entry 
  '( "Edinburgh" n ((( e m ) 1) (( b r @ ) 0))) ))

Using lex.add.entry again for the same word and part of speech will redefine the current pronunciation. Note these add entries to the current lexicon so its a good idea to explicitly select the lexicon before you add addenda entries, particularly if you are doing this in your own `.festivalrc' file.

For large lists, compiled lexicons are best. The function lex.compile takes two filename arguments, a file name containing a list of lexical entries and an output file where the compiled lexicon will be saved.

Compilation can take some time and may require lots of memory, as all entries are loaded in, checked and then sorted before being written out again. During compilation if some entry is malformed the reading process halts with a not so useful message. Note that if any of your entries include quote or double quotes the entries will probably be misparsed and cause such a weird error. In such cases try setting

(debug_output t)

before compilation. This will print out each entry as it is read in which should help to narrow down where the error is.

13.3 Lookup process

When looking up a word, either through the C++ interface, or Lisp interface, a word is identified by its headword and part of speech. If no part of speech is specified, nil is assumed which matches any part of speech tag.

The lexicon look up process first checks the addenda, if there is a full match (head word plus part of speech) it is returned. If there is an addenda entry whose head word matches and whose part of speech is nil that entry is returned.

If no match is found in the addenda, the compiled lexicon, if present, is checked. Again a match is when both head word and part of speech tag match, or either the word being searched for has a part of speech nil or an entry has its tag as nil. Unlike the addenda, if no full head word and part of speech tag match is found, the first word in the lexicon whose head word matches is returned. The rationale is that the letter to sound rules (the next defence) are unlikely to be better than an given alternate pronunciation for a the word but different part of speech. Even more so given that as there is an entry with the head word but a different part of speech this word may have an unusual pronunciation that the letter to sound rules will have no chance in producing.

Finally if the word is not found in the compiled lexicon it is passed to whatever method is defined for unknown words. This is most likely a letter to sound module. See section 13.4 Letter to sound rules.

Optional pre- and post-lookup hooks can be specified for a lexicon. As a single (or list of) Lisp functions. The pre-hooks will be called with two arguments (word and features) and should return a pair (word and features). The post-hooks will be given a lexical entry and should return a lexical entry. The pre- and post-hooks do nothing by default.

Compiled lexicons may be created from lists of lexical entries. A compiled lexicon is much more efficient for look up than the addenda. Compiled lexicons use a binary search method while the addenda is searched linearly. Also it would take a prohibitively long time to load in a typical full lexicon as an addenda. If you have more than a few hundred entries in your addenda you should seriously consider adding them to your compiled lexicon.

Because many publicly available lexicons do not have syllable markings for entries the compilation method supports automatic syllabification. Thus for lexicon entries for compilation, two forms for the pronunciation field are supported: the standard full syllabified and stressed form and a simpler linear form found in at least the BEEP and CMU lexicons. If the pronunciation field is a flat atomic list it is assumed syllabification is required.

Syllabification is done by finding the minimum sonorant position between vowels. It is not guaranteed to be accurate but does give a solution that is sufficient for many purposes. A little work would probably improve this significantly. Of course syllabification requires the entry's phones to be in the current phone set. The sonorant values are calculated from the vc, ctype, and cvox features for the current phoneset. See `src/arch/festival/Phone.cc:ph_sonority()' for actual definition.

Additionally in this flat structure vowels (atoms starting with a, e, i, o or u) may have 1 2 or 0 appended marking stress. This is again following the form found in the BEEP and CMU lexicons.

Some example entries in the flat form (taken from BEEP) are

("table" nil (t ei1 b l))
("suspicious" nil (s @ s p i1 sh @ s))

Also if syllabification is required there is an opportunity to run a set of "letter-to-sound"-rules on the input (actually an arbitrary re-write rule system). If the variable lex_lts_set is set, the lts ruleset of that name is applied to the flat input before syllabification. This allows simple predictable changes such as conversion of final r into longer vowel for English RP from American labelled lexicons.

A list of all matching entries in the addenda and the compiled lexicon may be found by the function lex.lookup_all. This function takes a word and returns all matching entries irrespective of part of speech.

You can optionall intercept the words as they are lookup up, and after they have been found through pre_hooks and post_hooks for each lexicon. This allows a function or list of functions to be applied to an word and feature sbefore lookup or to the resulting entry after lookup. The following example shows how to add voice specific entries to a general lexicon without affecting other voices that use that lexicon.

For example suppose we were trying to use a Scottish English voice with the US English (cmu) lexicon. A number of entgries will be inapporpriate but we can redefine some entries thus

(set! cmu_us_awb::lexicon_addenda
      '(
	("edinburgh" n (((eh d) 1) ((ax n) 0) ((b r ax) 0)))
	("poem" n (((p ow) 1) ((y ax m) 0)))
	("usual" n (((y uw) 1) ((zh ax l) 0)))
	("air" n (((ey r) 1)))
	("hair" n (((hh ey r) 1)))
	("fair" n (((f ey r) 1)))
	("chair" n (((ch ey r) 1)))))

We can the define a function that chesk to see if the word looked up is in the speaker specific exception list and use that entry instead.

(define (cmu_us_awb::cmu_lookup_post entry)
  "(cmu_us_awb::cmu_lookup_post entry)
Speaker specific lexicon addeda."
  (let ((ne 
	 (assoc_string (car entry) cmu_us_awb::lexicon_addenda)))
    (if ne
	ne
	entry)))

And then for the particualr voice set up we need to add both a selection part and a reset part. Thuis following the FestVox vonventions for voice set up.

(define (cmu_us_awb::select_lexicon)

    ...
    (lex.select "cmu")
    ;; Get old var for reset and to append our function to is
    (set! cmu_us_awb::old_cmu_post_hooks 
       (lex.set.post_hooks nil))
    (lex.set.post_hooks
       (append cmu_us_awb::old_cmu_post_hooks
               (list cmu_us_awb::cmu_lookup_post)))
    ...
)

...

(define (cmu_us_awb::reset_lexicon)

  ...
  ;; reset CMU's post_hooks back to original
  (lex.set.post_hooks cmu_us_awb::old_cmu_post_hooks)
  ...

)

The above isn't the most efficient way as the word is looked up first then it is checked with the speaker specific list.

The pre_hooks function are called with two arguments, the word and features, they should return a pair of word and features.

13.4 Letter to sound rules

Each lexicon may define what action to take when a word cannot be found in the addenda or the compiled lexicon. There are a number of options which will hopefully be added to as more general letter to sound rule systems are added.

The method is set by the command

(lex.set.lts.method METHOD)

Where METHOD can be any of the following

`Error'
Throw an error when an unknown word is found (default).
`lts_rules'
Use externally specified set of letter to sound rules (described below). The name of the rule set to use is defined with the lex.lts.ruleset function. This method runs one set of rules on an exploded form of the word and assumes the rules return a list of phonemes (in the appropriate set). If multiple instances of rules are required use the function method described next.
`none'
This returns an entry with a nil pronunciation field. This will only be valid in very special circumstances.
`FUNCTIONNAME'
Call this as a LISP function function name. This function is given two arguments: the word and the part of speech. It should return a valid lexical entry.

The basic letter to sound rule system is very simple but is powerful enough to build reasonably complex letter to sound rules. Although we've found trained LTS rules better than hand written ones (for complex languages) where no data is available and rules must be hand written the following rule formalism is much easier to use than that generated by the LTS training system (described in the next section).

The basic form of a rule is as follows

( LEFTCONTEXT [ ITEMS ] RIGHTCONTEXT = NEWITEMS )

This interpretation is that if ITEMS appear in the specified right and left context then the output string is to contain NEWITEMS. Any of LEFTCONTEXT, RIGHTCONTEXT or NEWITEMS may be empty. Note that NEWITEMS is written to a different "tape" and hence cannot feed further rules (within this ruleset). An example is

( # [ c h ] C = k )

The special character # denotes a word boundary, and the symbol C denotes the set of all consonants, sets are declared before rules. This rule states that a ch at the start of a word followed by a consonant is to be rendered as the k phoneme. Symbols in contexts may be followed by the symbol * for zero or more occurrences, or + for one or more occurrences.

The symbols in the rules are treated as set names if they are declared as such or as symbols in the input/output alphabets. The symbols may be more than one character long and the names are case sensitive.

The rules are tried in order until one matches the first (or more) symbol of the tape. The rule is applied adding the right hand side to the output tape. The rules are again applied from the start of the list of rules.

The function used to apply a set of rules if given an atom will explode it into a list of single characters, while if given a list will use it as is. This reflects the common usage of wishing to re-write the individual letters in a word to phonemes but without excluding the possibility of using the system for more complex manipulations, such as multi-pass LTS systems and phoneme conversion.

From lisp there are three basic access functions, there are corresponding functions in the C/C++ domain.

(lts.ruleset NAME SETS RULES)
Define a new set of lts rules. Where NAME is the name for this rule, SETS is a list of set definitions of the form (SETNAME e0 e1 ...) and RULES are a list of rules as described above.
(lts.apply WORD RULESETNAME)
Apply the set of rules named RULESETNAME to WORD. If WORD is a symbol it is exploded into a list of the individual characters in its print name. If WORD is a list it is used as is. If the rules cannot be successfully applied an error is given. The result of (successful) application is returned in a list.
(lts.check_alpha WORD RULESETNAME)
The symbols in WORD are checked against the input alphabet of the rules named RULESETNAME. If they are all contained in that alphabet t is returned, else nil. Note this does not necessarily mean the rules will successfully apply (contexts may restrict the application of the rules), but it allows general checking like numerals, punctuation etc, allowing application of appropriate rule sets.

The letter to sound rule system may be used directly from Lisp and can easily be used to do relatively complex operations for analyzing words without requiring modification of the C/C++ system. For example the Welsh letter to sound rule system consists or three rule sets, first to explicitly identify epenthesis, then identify stressed vowels, and finally rewrite this augmented letter string to phonemes. This is achieved by the following function

(define (welsh_lts word features)
  (let (epen str wel)
    (set! epen (lts.apply (downcase word) 'newepen))
    (set! str (lts.apply epen 'newwelstr))
    (set! wel (lts.apply str 'newwel))
    (list word
          nil
          (lex.syllabify.phstress wel))))

The LTS method for the Welsh lexicon is set to welsh_lts, so this function is called when a word is not found in the lexicon. The above function first downcases the word and then applies the rulesets in turn, finally calling the syllabification process and returns a constructed lexically entry.

13.5 Building letter to sound rules

As writing letter to sound rules by hand is hard and very time consuming, an alternative method is also available where a latter to sound system may be built from a lexicon of the language. This technique has successfully been used from English (British and American), French and German. The difficulty and appropriateness of using letter to sound rules is very language dependent,

The following outlines the processes involved in building a letter to sound model for a language given a large lexicon of pronunciations. This technique is likely to work for most European languages (including Russian) but doesn't seem particularly suitable for very language alphabet languages like Japanese and Chinese. The process described here is not (yet) fully automatic but the hand intervention required is small and may easily be done even by people with only a very little knowledge of the language being dealt with.

The process involves the following steps

  • Pre-processing lexicon into suitable training set
  • Defining the set of allowable pairing of letters to phones. (We intend to do this fully automatically in future versions).
  • Constructing the probabilities of each letter/phone pair.
  • Aligning letters to an equal set of phones/_epsilons_.
  • Extracting the data by letter suitable for training.
  • Building CART models for predicting phone from letters (and context).
  • Building additional lexical stress assignment model (if necessary).

All except the first two stages of this are fully automatic.

Before building a model its wise to think a little about what you want it to do. Ideally the model is an auxiluary to the lexicon so only words not found in the lexicon will require use of the letter to sound rules. Thus only unusual forms are likely to require the rules. More precisely the most common words, often having the most non-standard pronunciations, should probably be explicitly listed always. It is possible to reduce the size of the lexicon (sometimes drastically) by removing all entries that the training LTS model correctly predicts.

Before starting it is wise to consider removing some entries from the lexicon before training, I typically will remove words under 4 letters and if part of speech information is available I remove all function words, ideally only training from nouns verbs and adjectives as these are the most likely forms to be unknown in text. It is useful to have morphologically inflected and derived forms in the training set as it is often such variant forms that not found in the lexicon even though their root morpheme is. Note that in many forms of text, proper names are the most common form of unknown word and even the technique presented here may not adequately cater for that form of unknown words (especially if they unknown words are non-native names). This is all stating that this may or may not be appropriate for your task but the rules generated by this learning process have in the examples we've done been much better than what we could produce by hand writing rules of the form described in the previous section.

First preprocess the lexicon into a file of lexical entries to be used for training, removing functions words and changing the head words to all lower case (may be language dependent). The entries should be of the form used for input for Festival's lexicon compilation. Specifical the pronunciations should be simple lists of phones (no syllabification). Depending on the language, you may wish to remve the stressing--for examples here we have though later tests suggest that we should keep it in even for English. Thus the training set should look something like

("table" nil (t ei b l))
("suspicious" nil (s @ s p i sh @ s))

It is best to split the data into a training set and a test set if you wish to know how well your training has worked. In our tests we remove every tenth entry and put it in a test set. Note this will mean our test results are probably better than if we removed say the last ten in every hundred.

The second stage is to define the set of allowable letter to phone mappings irrespective of context. This can sometimes be initially done by hand then checked against the training set. Initially constract a file of the form

(require 'lts_build)
(set! allowables 
      '((a _epsilon_)
        (b _epsilon_)
        (c _epsilon_)
        ...
        (y _epsilon_)
        (z _epsilon_)
        (# #)))

All letters that appear in the alphabet should (at least) map to _epsilon_, including any accented characters that appear in that language. Note the last two hashes. These are used by to denote beginning and end of word and are automatically added during training, they must appear in the list and should only map to themselves.

To incrementally add to this allowable list run festival as

festival allowables.scm 

and at the prompt type

festival> (cummulate-pairs "oald.train")

with your train file. This will print out each lexical entry that couldn't be aligned with the current set of allowables. At the start this will be every entry. Looking at these entries add to the allowables to make alignment work. For example if the following word fails

("abate" nil (ah b ey t)) 

Add ah to the allowables for letter a, b to b, ey to a and t to letter t. After doing that restart festival and call cummulate-pairs again. Incrementally add to the allowable pairs until the number of failures becomes accceptable. Often there are entries for which there is no real relationship between the letters and the pronunciation such as in abbreviations and foreign words (e.g. "aaa" as "t r ih p ax l ey"). For the lexicons I've used the technique on less than 10 per thousand fail in this way.

It is worth while being consistent on defining your set of allowables. (At least) two mappings are possible for the letter sequence ch---having letter c go to phone ch and letter h go to _epsilon_ and also letter c go to phone _epsilon_ and letter h goes to ch. However only one should be allowed, we preferred c to ch.

It may also be the case that some letters give rise to more than one phone. For example the letter x in English is often pronunced as the phone combination k and s. To allow this, use the multiphone k-s. Thus the multiphone k-s will be predicted for x in some context and the model will separate it into two phones while it also ignoring any predicted _epsilons_. Note that multiphone units are relatively rare but do occur. In English, letter x give rise to a few, k-s in taxi, g-s in example, and sometimes g-zh and k-sh in luxury. Others are w-ah in one, t-s in pizza, y-uw in new (British), ah-m in -ism etc. Three phone multiphone are much rarer but may exist, they are not supported by this code as is, but such entries should probably be ignored. Note the - sign in the multiphone examples is significant and is used to indentify multiphones.

The allowables for OALD end up being

(set! allowables 
       '
      ((a _epsilon_ ei aa a e@ @ oo au o i ou ai uh e)
       (b _epsilon_ b )
       (c _epsilon_ k s ch sh @-k s t-s)
       (d _epsilon_ d dh t jh)
       (e _epsilon_ @ ii e e@ i @@ i@ uu y-uu ou ei aa oi y y-u@ o)
       (f _epsilon_ f v )
       (g _epsilon_ g jh zh th f ng k t)
       (h _epsilon_ h @ )
       (i _epsilon_ i@ i @ ii ai @@ y ai-@ aa a)
       (j _epsilon_ h zh jh i y )
       (k _epsilon_ k ch )
       (l _epsilon_ l @-l l-l)
       (m _epsilon_ m @-m n)
       (n _epsilon_ n ng n-y )
       (o _epsilon_ @ ou o oo uu u au oi i @@ e uh w u@ w-uh y-@)
       (p _epsilon_ f p v )
       (q _epsilon_ k )
       (r _epsilon_ r @@ @-r)
       (s _epsilon_ z s sh zh )
       (t _epsilon_ t th sh dh ch d )
       (u _epsilon_ uu @ w @@ u uh y-uu u@ y-u@ y-u i y-uh y-@ e)
       (v _epsilon_ v f )
       (w _epsilon_ w uu v f u)
       (x _epsilon_ k-s g-z sh z k-sh z g-zh )
       (y _epsilon_ i ii i@ ai uh y @ ai-@)
       (z _epsilon_ z t-s s zh )
       (# #)
       ))

Note this is an exhaustive list and (deliberately) says nothing about the contexts or frequency that these letter to phone pairs appear. That information will be generated automatically from the training set.

Once the number of failed matches is signficantly low enough let cummulate-pairs run to completion. This counts the number of times each letter/phone pair occurs in allowable alignments.

Next call

festival> (save-table "oald-")

with the name of your lexicon. This changes the cummulation table into probabilities and saves it.

Restart festival loading this new table

festival allowables.scm oald-pl-table.scm

Now each word can be aligned to an equally-lengthed string of phones, epsilon and multiphones.

festival> (aligndata "oald.train" "oald.train.align")

Do this also for you test set.

This will produce entries like

aaronson _epsilon_ aa r ah n s ah n
abandon ah b ae n d ah n
abate ah b ey t _epsilon_
abbe ae b _epsilon_ iy

The next stage is to build features suitable for `wagon' to build models. This is done by

festival> (build-feat-file "oald.train.align" "oald.train.feats")

Again the same for the test set.

Now you need to constructrure a description file for `wagon' for the given data. The can be done using the script `make_wgn_desc' provided with the speech tools

Here is an example script for building the models, you will need to modify it for your particualr database but it shows the basic processes

for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 
do
   # Stop value for wagon
   STOP=2
   echo letter $i STOP $STOP
   # Find training set for letter $i
   cat oald.train.feats |
    awk '{if ($6 == "'$i'") print $0}' >ltsdataTRAIN.$i.feats
   # split training set to get heldout data for stepwise testing
   traintest ltsdataTRAIN.$i.feats
   # Extract test data for letter $i
   cat oald.test.feats |
    awk '{if ($6 == "'$i'") print $0}' >ltsdataTEST.$i.feats
   # run wagon to predict model
   wagon -data ltsdataTRAIN.$i.feats.train -test ltsdataTRAIN.$i.feats.test \
          -stepwise -desc ltsOALD.desc -stop $STOP -output lts.$i.tree
   # Test the resulting tree against
   wagon_test -heap 2000000 -data ltsdataTEST.$i.feats -desc ltsOALD.desc \
              -tree lts.$i.tree
done

The script `traintest' splits the given file `X' into `X.train' and `X.test' with every tenth line in `X.test' and the rest in `X.train'.

This script can take a significnat amount of time to run, about 6 hours on a Sun Ultra 140.

Once the models are created the must be collected together into a single list structure. The trees generated by `wagon' contain fully probability distributions at each leaf, at this time this information can be removed as only the most probable will actually be predicted. This substantially reduces the size of the tress.

(merge_models 'oald_lts_rules "oald_lts_rules.scm")

(merge_models is defined within `lts_build.scm') The given file will contain a set! for the given variable name to an assoc list of letter to trained tree. Note the above function naively assumes that the letters in the alphabet are the 26 lower case letters of the English alphabet, you will need to edit this adding accented letters if required. Note that adding "'" (single quote) as a letter is a little tricky in scheme but can be done--the command (intern "'") will give you the symbol for single quote.

To test a set of lts models load the saved model and call the following function with the test align file

festival oald-table.scm oald_lts_rules.scm
festival> (lts_testset "oald.test.align" oald_lts_rules)

The result (after showing all the failed ones), will be a table showing the results for each letter, for all letters and for complete words. The failed entries may give some notion of how good or bad the result is, sometimes it will be simple vowel diferences, long versus short, schwa versus full vowel, other times it may be who consonants missing. Remember the ultimate quality of the letter sound rules is how adequate they are at providing acceptable pronunciations rather than how good the numeric score is.

For some languages (e.g. English) it is necessary to also find a stree pattern for unknown words. Ultimately for this to work well you need to know the morphological decomposition of the word. At present we provide a CART trained system to predict stress patterns for English. If does get 94.6% correct for an unseen test set but that isn't really very good. Later tests suggest that predicting stressed and unstressed phones directly is actually better for getting whole words correct even though the models do slightly worse on a per phone basis black98.

As the lexicon may be a large part of the system we have also experimented with removing entries from the lexicon if the letter to sound rules system (and stree assignment system) can correct predict them. For OALD this allows us to half the size of the lexicon, it could possibly allow more if a certain amount of fuzzy acceptance was allowed (e.g. with schwa). For other languages the gain here can be very signifcant, for German and French we can reduce the lexicon by over 90%. The function reduce_lexicon in `festival/lib/lts_build.scm' was used to do this. A diccussion of using the above technique as a dictionary compression method is discussed in pagel98. A morphological decomposition algorithm, like that described in black91, may even help more.

The technique described in this section and its relative merits with respect to a number of languages/lexicons and tasks is dicussed more fully in black98.

13.6 Lexicon requirements

For English there are a number of assumptions made about the lexicon which are worthy of explicit mention. If you are basically going to use the existing token rules you should try to include at least the following in any lexicon that is to work with them.

  • The letters of the alphabet, when a token is identified as an acronym it is spelled out. The tokenization assumes that the individual letters of the alphabet are in the lexicon with their pronunciations. They should be identified as nouns. (This is to distinguish a as a determiner which can be schwa'd from a as a letter which cannot.) The part of speech should be nn by default, but the value of the variable token.letter_pos is used and may be changed if this is not what is required.
  • One character symbols such as dollar, at-sign, percent etc. Its difficult to get a complete list and to know what the pronunciation of some of these are (e.g hash or pound sign). But the letter to sound rules cannot deal with them so they need to be explicitly listed. See the list in the function mrpa_addend in `festival/lib/dicts/oald/oaldlex.scm'. This list should also contain the control characters and eight bit characters.
  • The possessive 's should be in your lexicon as schwa and voiced fricative (z). It should be in twice, once as part speech type pos and once as n (used in plurals of numbers acronyms etc. e.g 1950's). 's is treated as a word and is separated from the tokens it appears with. The post-lexical rule (the function postlex_apos_s_check) will delete the schwa and devoice the z in appropriate contexts. Note this post-lexical rule brazenly assumes that the unvoiced fricative in the phoneset is s. If it is not in your phoneset copy the function (it is in `festival/lib/postlex.scm') and change it for your phoneset and use your version as a post-lexical rule.
  • Numbers as digits (e.g. "1", "2", "34", etc.) should normally not be in the lexicon. The number conversion routines convert numbers to words (i.e. "one", "two", "thirty four", etc.).
  • The word "unknown" or whatever is in the variable token.unknown_word_name. This is used in a few obscure cases when there just isn't anything that can be said (e.g. single characters which aren't in the lexicon). Some people have suggested it should be possible to make this a sound rather than a word. I agree, but Festival doesn't support that yet.

13.7 Available lexicons

Currently Festival supports a number of different lexicons. They are all defined in the file `lib/lexicons.scm' each with a number of common extra words added to their addendas. They are

`CUVOALD'
The Computer Users Version of Oxford Advanced Learner's Dictionary is available from the Oxford Text Archive ftp://ota.ox.ac.uk/pub/ota/public/dicts/710. It contains about 70,000 entries and is a part of the BEEP lexicon. It is more consistent in its marking of stress though its syllable marking is not what works best for our synthesis methods. Many syllabic `l''s, `n''s, and `m''s, mess up the syllabification algorithm, making results sometimes appear over reduced. It is however our current default lexicon. It is also the only lexicon with part of speech tags that can be distributed (for non-commercial use).
`CMU'
This is automatically constructed from `cmu_dict-0.4' available from many places on the net (see comp.speech archives). It is not in the mrpa phone set because it is American English pronunciation. Although mappings exist between its phoneset (`darpa') and `mrpa' the results for British English speakers are not very good. However this is probably the biggest, most carefully specified lexicon available. It contains just under 100,000 entries. Our distribution has been modified to include part of speech tags on words we know to be homographs.
`mrpa'
A version of the CSTR lexicon which has been floating about for years. It contains about 25,000 entries. A new updated free version of this is due to be released soon.
`BEEP'
A British English rival for the `cmu_lex'. BEEP has been made available by Tony Robinson at Cambridge and is available in many archives. It contains 163,000 entries and has been converted to the `mrpa' phoneset (which was a trivial mapping). Although large, it suffers from a certain randomness in its stress markings, making use of it for synthesis dubious.

All of the above lexicons have some distribution restrictions (though mostly pretty light), but as they are mostly freely available we provide programs that can convert the originals into Festival's format.

The MOBY lexicon has recently been released into the public domain and will be converted into our format soon.

13.8 Post-lexical rules

It is the lexicon's job to produce a pronunciation of a given word. However in most languages the most natural pronunciation of a word cannot be found in isolation from the context in which it is to be spoken. This includes such phenomena as reduction, phrase final devoicing and r-insertion. In Festival this is done by post-lexical rules.

PostLex is a module which is run after accent assignment but before duration and F0 generation. This is because knowledge of accent position is necessary for vowel reduction and other post lexical phenomena and changing the segmental items will affect durations.

The PostLex first applies a set of built in rules (which could be done in Scheme but for historical reasons are still in C++). It then applies the functions set in the hook postlex_rules_hook. These should be a set of functions that take an utterance and apply appropriate rules. This should be set up on a per voice basis.

Although a rule system could be devised for post-lexical sound rules it is unclear what the scope of them should be, so we have left it completely open. Our vowel reduction model uses a CART decision tree to predict which syllables should be reduced, while the "'s" rule is very simple (shown in `festival/lib/postlex.scm').

The 's in English may be pronounced in a number of different ways depending on the preceding context. If the preceding consonant is a fricative or affricative and not a palatal labio-dental or dental a schwa is required (e.g. bench's) otherwise no schwa is required (e.g. John's). Also if the previous phoneme is unvoiced the "s" is rendered as an "s" while in all other cases it is rendered as a "z".

For our English voices we have a lexical entry for "'s" as a schwa followed by a "z". We use a post lexical rule function called postlex_apos_s_check to modify the basic given form when required. After lexical lookup the segment relation contains the concatenation of segments directly from lookup in the lexicon. Post lexical rules are applied after that.

In the following rule we check each segment to see if it is part of a word labelled "'s", if so we check to see if are we currently looking at the schwa or the z part, and test if modification is required

(define (postlex_apos_s_check utt)
  "(postlex_apos_s_check UTT)
Deal with possesive s for English (American and British).  Delete
schwa of 's if previous is not a fricative or affricative, and
change voiced to unvoiced s if previous is not voiced."
  (mapcar
   (lambda (seg)
     (if (string-equal "'s" (item.feat 
                             seg "R:SylStructure.parent.parent.name"))
         (if (string-equal "a" (item.feat seg 'ph_vlng))
             (if (and (member_string (item.feat seg 'p.ph_ctype) 
                                     '(f a))
                      (not (member_string
                            (item.feat seg "p.ph_cplace") 
                            '(d b g))))
                 t;; don't delete schwa
                 (item.delete seg))
             (if (string-equal "-" (item.feat seg "p.ph_cvox"))
                 (item.set_name seg "s")))));; from "z"
   (utt.relation.items utt 'Segment))
  utt)


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_14.html0100644001741100001440000007746407332366671017466 0ustar awbusers Festival Speech Synthesis System - 14 Utterances Go to the first, previous, next, last section, table of contents.


14 Utterances

The utterance structure lies at the heart of Festival. This chapter describes its basic form and the functions available to manipulate it.

14.1 Utterance structure

Festival's basic object for synthesis is the utterance. An represents some chunk of text that is to be rendered as speech. In general you may think of it as a sentence but in many cases it wont actually conform to the standard linguistic syntactic form of a sentence. In general the process of text to speech is to take an utterance which contaisn a simple string of characters and convert it step by step, filling out the utterance structure with more information until a waveform is built that says what the text contains.

The processes involved in convertion are, in general, as follows

Tokenization
Converting the string of characters into a list of tokens. Typically this means whitespace separated tokesn of the original text string.
Token identification
identification of general types for the tokens, usually this is trivial but requires some work to identify tokens of digits as years, dates, numbers etc.
Token to word
Convert each tokens to zero or more words, expanding numbers, abbreviations etc.
Part of speech
Identify the syntactic part of speech for the words.
Prosodic phrasing
Chunk utterance into prosodic phrases.
Lexical lookup
Find the pronucnation of each word from a lexicon/letter to sound rule system including phonetic and syllable structure.
Intonational accents
Assign intonation accents to approrpiate syllables.
Assign duration
Assign duration to each phone in the utterance.
Generate F0 contour (tune)
Generate tune based on accents etc.
Render waveform
Render waveform from phones, duration and F) target values, this itself may take several steps including unit selection (be they diphones or other sized units), imposition of dsesired prosody (duration and F0) and waveform reconstruction.

The number of steps and what actually happens may vary and is dependent on the particular voice selected and the utterance's type, see below.

Each of these steps in Festival is achived by a module which will typically add new information to the utterance structure.

An utterance structure consists of a set of items which may be part of one or more relations. Items represent things like words and phones, though may also be used to represent less concrete objects like noun phrases, and nodes in metrical trees. An item contains a set of features, (name and value). Relations are typically simple lists of items or trees of items. For example the the Word relation is a simple list of items each of which represent a word in the utternace. Those words will also be in other relations, such as the SylStructure relation where the word will be the top of a tree structure containing its syllables and segments.

Unlike previous versions of the system items (then called stream items) are not in any particular relations (or stream). And are merely part of the relations they are within. Importantly this allows much more general relations to be made over items that was allowed in the previous system. This new architecture is the continuation of our goal of providing a general efficient structure for representing complex interrelated utterance objects.

The architecture is fully general and new items and relations may be defined at run time, such that new modules may use any relations they wish. However within our standard English (and other voices) we have used a specific set of relations ass follows.

Token
a list of trees. This is first formed as a list of tokens found in a character text string. Each root's daughters are the Word's that the token is related to.
Word
a list of words. These items will also appear as daughters (leaf nodes) of the Token relation. They may also appear in the Syntax relation (as leafs) if the parser is used. They will also be leafs of the Phrase relation.
Phrase
a list of trees. This is a list of phrase roots whose daughters are the Word's within those phrases.
Syntax
a single tree. This, if the probabilistic parser is called, is a syntactic binary branching tree over the members of the Word relation.
SylStructure
a list of trees. This links the Word, Syllable and Segment relations. Each Word is the root of a tree whose immediate daughters are its syllables and their daughters in turn as its segments.
Syllable
a list of syllables. Each member will also be in a the SylStructure relation. In that relation its parent will be the word it is in and its daughters will be the segments that are in it. Syllables are also in the Intonation relation giving links to their related intonation events.
Segment
a list of segments (phones). Each member (except silences) will be leaf nodes in the SylStructure relation. These may also be in the Target relation linking them to F0 target points.
IntEvent
a list of intonation events (accents and bounaries). These are related to syllables through the Intonation relation as leafs on that relation. Thus their parent in the Intonation relation is the syllable these events are attached to.
Intonation
a list of trees relating syllables to intonation events. Roots of the trees in Intonation are Syllables and their daughters are IntEvents.
Wave
a single item with a feature called wave whose value is the generated waveform.

This is a non-exhaustive list some modules may add other relations and not all utterance may have all these relations, but the above is the general case.

14.2 Utterance types

The primary purpose of types is to define which modules are to be applied to an utterance. UttTypes are defined in `lib/synthesis.scm'. The function defUttType defines which modules are to be applied to an utterance of that type. The function utt.synth is called applies this list of module to an utterance before waveform synthesis is called.

For example when a Segment type Utterance is synthesized it needs only have its values loaded into a Segment relation and a Target relation, then the low level waveform synthesis module Wave_Synth is called. This is defined as follows

(defUttType Segments
  (Initialize utt)
  (Wave_Synth utt))

A more complex type is Text type utterance which requires many more modules to be called before a waveform can be synthesized

(defUttType Text
  (Initialize utt)
  (Text utt)
  (Token utt)
  (POS utt)
  (Phrasify utt)
  (Word utt)
  (Intonation utt)
  (Duration utt)
  (Int_Targets utt)
  (Wave_Synth utt)
)

The Initialize module should normally be called for all types. It loads the necessary relations from the input form and deletes all other relations (if any exist) ready for synthesis.

Modules may be directly defined as C/C++ functions and declared with a Lisp name or simple functions in Lisp that check some global parameter before calling a specific module (e.g. choosing between different intonation modules).

These types are used when calling the function utt.synth and individual modules may be called explicitly by hand if required.

Because we expect waveform synthesis methods to themselves become complex with a defined set of functions to select, join, and modify units we now support an addition notion of SynthTypes like UttTypes these define a set of functions to apply to an utterance. These may be defined using the defSynthType function. For example

(defSynthType Festival
  (print "synth method Festival")
  
  (print "select")
  (simple_diphone_select utt)

  (print "join")
  (cut_unit_join utt)

  (print "impose")
  (simple_impose utt)
  (simple_power utt)

  (print "synthesis")
  (frames_lpc_synthesis utt)
  )

A SynthType is selected by naming as the value of the parameter Synth_Method.

Duration the application of the function utt.synth there are three hooks applied. This allows addition control of the synthesis process. before_synth_hooks is applied before any modules are applied. after_analysis_hooks is applied at the start of Wave_Synth when all text, linguistic and prosodic processing have been done. after_synth_hooks is applied after all modules have been applied. These are useful for things such as, altering the volume of a voice that happens to be quieter than others, or for example outputing information for a talking head before waveform synthesis occurs so preparation of the facial frames and synthesizing the waveform may be done in parallel. (see `festival/examples/th-mode.scm' for an example use of these hooks for a talking head text mode.)

14.3 Example utterance types

A number of utterance types are currently supported. It is easy to add new ones but the standard distribution includes the following.

Text
Raw text as a string.
(Utterance Text "This is an example")
Words
A list of words
(Utterance Words (this is an example))
Words may be atomic or lists if further features need to be specified. For example to specify a word and its part of speech you can use
(Utterance Words (I (live (pos v)) in (Reading (pos n) (tone H-H%))))
Note: the use of the tone feature requires an intonation mode that supports it. Any feature and value named in the input will be added to the Word item.
Phrase
This allows explicit phrasing and features on Tokens to be specified. The input consists of a list of phrases each contains a list of tokens.
(Utterance
 Phrase
 ((Phrase ((name B))
   I saw the man
   (in ((EMPH 1)))
   the park)
  (Phrase ((name BB))
   with the telescope)))
ToBI tones and accents may also be specified on Tokens but these will only take effect if the selected intonation method uses them.
Segments
This allows specification of segments, durations and F0 target values.
(Utterance 
 Segments
 ((# 0.19 )
  (h 0.055 (0 115))
  (@ 0.037 (0.018 136))
  (l 0.064 )
  (ou 0.208 (0.0 134) (0.100 135) (0.208 123))
  (# 0.19)))
Note the times are in seconds NOT milliseconds. The format of each segment entry is segment name, duration in seconds, and list of target values. Each target value consists of a pair of point into the segment (in seconds) and F0 value in Hz.
Phones
This allows a simple specification of a list of phones. Synthesis specifies fixed durations (specified in FP_duration, default 100 ms) and monotone intonation (specified in FP_F0, default 120Hz). This may be used for simple checks for waveform synthesizers etc.
(Utterance Phones (# h @ l ou #))
Note the function SayPhones allows synthesis and playing of lists of phones through this utterance type.
Wave
A waveform file. Synthesis here simply involves loading the file.
(Utterance Wave fred.wav)

Others are supported, as defined in `lib/synthesis.scm' but are used internally by various parts of the system. These include Tokens used in TTS and SegF0 used by utt.resynth.

14.4 Utterance modules

The module is the basic unit that does the work of synthesis. Within Festival there are duration modules, intonation modules, wave synthesis modules etc. As stated above the utterance type defines the set of modules which are to be applied to the utterance. These modules in turn will create relations and items so that ultimately a waveform is generated, if required.

Many of the chapters in this manual are solely concerned with particular modules in the system. Note that many modules have internal choices, such as which duration method to use or which intonation method to use. Such general choices are often done through the Parameter system. Parameters may be set for different features like Duration_Method, Synth_Method etc. Formerly the values for these parameters were atomic values but now they may be the functions themselves. For example, to select the Klatt duration rules

(Parameter.set 'Duration_Method Duration_Klatt)

This allows new modules to be added without requiring changes to the central Lisp functions such as Duration, Intonation, and Wave_Synth.

14.5 Accessing an utterance

There are a number of standard functions that allow one to access parts of an utterance and traverse through it.

Functions exist in Lisp (and of course C++) for accessing an utterance. The Lisp access functions are

`(utt.relationnames UTT)'
returns a list of the names of the relations currently created in UTT.
`(utt.relation.items UTT RELATIONNAME)'
returns a list of all items in RELATIONNAME in UTT. This is nil if no relation of that name exists. Note for tree relation will give the items in pre-order.
`(utt.relation_tree UTT RELATIONNAME)'
A Lisp tree presentation of the items RELATIONNAME in UTT. The Lisp bracketing reflects the tree structure in the relation.
`(utt.relation.leafs UTT RELATIONNAME)'
A list of all the leafs of the items in RELATIONNAME in UTT. Leafs are defined as those items with no daughters within that relation. For simple list relations utt.relation.leafs and utt.relation.items will return the same thing.
`(utt.relation.first UTT RELATIONNAME)'
returns the first item in RELATIONNAME. Returns nil if this relation contains no items
`(utt.relation.last UTT RELATIONNAME)'
returns the last (the most next) item in RELATIONNAME. Returns nil if this relation contains no items
`(item.feat ITEM FEATNAME)'
returns the value of feature FEATNAME in ITEM. FEATNAME may be a feature name, feature function name, or pathname (see below). allowing reference to other parts of the utterance this item is in.
`(item.features ITEM)'
Returns an assoc list of feature-value pairs of all local features on this item.
`(item.name ITEM)'
Returns the name of this ITEM. This could also be accessed as (item.feat ITEM 'name).
`(item.set_name ITEM NEWNAME)'
Sets name on ITEM to be NEWNAME. This is equivalent to (item.set_feat ITEM 'name NEWNAME)
`(item.set_feat ITEM FEATNAME FEATVALUE)'
set the value of FEATNAME to FEATVALUE in ITEM. FEATNAME should be a simple name and not refer to next, previous or other relations via links.
`(item.relation ITEM RELATIONNAME)'
Return the item as viewed from RELATIONNAME, or nil if ITEM is not in that relation.
`(item.relationnames ITEM)'
Return a list of relation names that this item is in.
`(item.relationname ITEM)'
Return the relation name that this item is currently being viewed as.
`(item.next ITEM)'
Return the next item in ITEM's current relation, or nil if there is no next.
`(item.prev ITEM)'
Return the previous item in ITEM's current relation, or nil if there is no previous.
`(item.parent ITEM)'
Return the parent of ITEM in ITEM's current relation, or nil if there is no parent.
`(item.daughter1 ITEM)'
Return the first daughter of ITEM in ITEM's current relation, or nil if there are no daughters.
`(item.daughter2 ITEM)'
Return the second daughter of ITEM in ITEM's current relation, or nil if there is no second daughter.
`(item.daughtern ITEM)'
Return the last daughter of ITEM in ITEM's current relation, or nil if there are no daughters.
`(item.leafs ITEM)'
Return a list of all lefs items (those with no daughters) dominated by this item.
`(item.next_leaf ITEM)'
Find the next item in this relation that has no daughters. Note this may traverse up the tree from this point to search for such an item.

As from 1.2 the utterance structure may be fully manipulated from Scheme. Relations and items may be created and deleted, as easily as they can in C++;

`(utt.relation.present UTT RELATIONNAME)'
returns t if relation named RELATIONNAME is present, nil otherwise.
`(utt.relation.create UTT RELATIONNAME)'
Creates a new relation called RELATIONNAME. If this relation already exists it is deleted first and items in the relation are derefenced from it (deleting the items if they are no longer referenced by any relation). Thus create relation guarantees an empty relation.
`(utt.relation.delete UTT RELATIONNAME)'
Deletes the relation called RELATIONNAME in utt. All items in that relation are derefenced from the relation and if they are no longer in any relation the items themselves are deleted.
`(utt.relation.append UTT RELATIONNAME ITEM)'
Append ITEM to end of relation named RELATIONNAME in UTT. Returns nil if there is not relation named RELATIONNAME in UTT otherwise returns the item appended. This new item becomes the last in the top list. ITEM item may be an item itself (in this or another relation) or a LISP description of an item, which consist of a list containing a name and a set of feature vale pairs. It ITEM is nil or inspecified an new empty item is added. If ITEM is already in this relation it is dereferenced from its current position (and an emtpy item re-inserted).
`(item.insert ITEM1 ITEM2 DIRECTION)'
Insert ITEM2 into ITEM1's relation in the direction specified by DIRECTION. DIRECTION may take the value, before, after, above and below. If unspecified, after is assumed. Note it is not recommended to insert above and below and the functions item.insert_parent and item.append_daughter should normally be used for tree building. Inserting using before and after within daughters is perfectly safe.
`(item.append_daughter PARENT DAUGHTER)'
Append DAUGHTER, an item or a description of an item to the item PARENT in the PARENT's relation.
`(item.insert_parent DAUGHTER NEWPARENT)'
Insert a new parent above DAUGHTER. NEWPARENT may be a item or the description of an item.
`(item.delete ITEM)'
Delete this item from all relations it is in. All daughters of this item in each relations are also removed from the relation (which may in turn cause them to be deleted if they cease to be referenced by any other relation.
`(item.relation.remove ITEM)'
Remove this item from this relation, and any of its daughters. Other relations this item are in remain untouched.
`(item.move_tree FROM TO)'
Move the item FROM to the position of TO in TO's relation. FROM will often be in the same relation as TO but that isn't necessary. The contents of TO are dereferenced. its daughters are saved then descendants of FROM are recreated under the new TO, then TO's previous daughters are derefenced. The order of this is important as FROM may be part of TO's descendants. Note that if TO is part of FROM's descendants no moving occurs and nil is returned. For example to remove all punction terminal nodes in the Syntax relation the call would be something like
(define (syntax_relation_punc p)
  (if (string-equal "punc" (item.feat (item.daughter2 p) "pos"))
      (item.move_tree (item.daughter1 p) p)
  (mapcar syntax_remove_punc (item.daughters p))))
`(item.exchange_trees ITEM1 ITEM2)'
Exchange ITEM1 and ITEM2 and their descendants in ITEM2's relation. If ITEM1 is within ITEM2's descendents or vice versa nil is returns and no exchange takes place. If ITEM1 is not in ITEM2's relation, no exchange takes place.

Daughters of a node are actually represented as a list whose first daughter is double linked to the parent. Although being aware of this structure may be useful it is recommended that all access go through the tree specific functions *.parent and *.daughter* which properly deal with the structure, thus is the internal structure ever changes in the future only these tree access function need be updated.

With the above functions quite elaborate utterance manipulations can be performed. For example in post-lexical rules where modifications to the segments are required based on the words and their context. See section 13.8 Post-lexical rules for an example of using various utterance access functions.

14.6 Features

In previous versions items had a number of predefined features. This is no longer the case and all features are optional. Particularly the start and end features are no longer fixed, though those names are still used in the relations where yjeu are appropriate. Specific functions are provided for the name feature but they are just short hand for normal feature access. Simple features directly access the features in the underlying EST_Feature class in an item.

In addition to simple features there is a mechanism for relating functions to names, thus accessing a feature may actually call a function. For example the features num_syls is defined as a feature function which will count the number of syllables in the given word, rather than simple access a pre-existing feature. Feature functions are usually dependent on the particular realtion the item is in, e.g. some feature functions are only appropriate for items in the Word relation, or only appropriate for those in the IntEvent relation.

The third aspect of feature names is a path component. These are parts of the name (preceding in .) that indicated some trversal of the utterance structure. For example the features name will access the name feature on the given item. The feature n.name will return the name feature on the next item (in that item's relation). A number of basic direction operators are defined.

n.
next
p.
previous
nn.
next next
pp.
previous
parent.
daughter1.
first daughter
daughter2.
second daughter
daughtern.
last daughter
first.
most previous item
last.
most next item

Also you may specific traversal to another relation relation, though the R:<relationame>. operator. For example given an Item in the syllable relation R:SylStructure.parent.name would give the name of word the syllable is in.

Some more complex examples are as follows, assuming we are starting form an item in the Syllable relation.

`stress'
This item's lexical stress
`n.stress'
The next syllable's lexical stress
`p.stress'
The previous syllable's lexical stress
`R:SylStructure.parent.name'
The word this syllable is in
`R:SylStructure.parent.R:Word.n.name'
The word next to the word this syllable is in
`n.R:SylStructure.parent.name'
The word the next syllable is in
`R:SylStructure.daughtern.ph_vc'
The phonetic feature vc of the final segment in this syllable.

A list of all feature functions is given in an appendix of this document. See section 32 Feature functions. New functions may also be added in Lisp.

In C++ feature values are of class EST_Val which may be a string, int, or a float (or any arbitrary object). In Scheme this distinction cannot not always be made and sometimes when you expect an int you actually get a string. Care should be take to ensure the right matching functions are use in Scheme. It is recommended you use string-append or string-match as they will always work.

If a pathname does not identify a valid path for the particular item (e.g. there is no next) "0" is returned.

When collecting data from speech databases it is often useful to collect a whole set of features from all utterances in a database. These features can then be used for building various models (both CART tree models and linear regression modules use these feature names),

A number of functions exist to help in this task. For example

(utt.features utt1 'Word '(name pos p.pos n.pos))

will return a list of word, and part of speech context for each word in the utterance.

See section 26.2 Extracting features for an example of extracting sets of features from a database for use in building stochastic models.

14.7 Utterance I/O

A number of functions are available to allow an utterance's structure to be made available for other programs.

The whole structure, all relations, items and features may be saved in an ascii format using the function utt.save. This file may be reloaded using the utt.load function. Note the waveform is not saved using the form.

Individual aspects of an utterance may be selectively saved. The waveform itself may be saved using the function utt.save.wave. This will save the waveform in the named file in the format specified in the Parameter Wavefiletype. All formats supported by the Edinburgh Speech Tools are valid including nist, esps, sun, riff, aiff, raw and ulaw. Note the functions utt.wave.rescale and utt.wave.resample may be used to change the gain and sample frequency of the waveform before saving it. A waveform may be imported into an existing utterance with the function utt.import.wave. This is specifically designed to allow external methods of waveform synthesis. However if you just wish to play an external wave or make it into an utterance you should consider the utterance Wave type.

The segments of an utterance may be saved in a file using the function utt.save.segs which saves the segments of the named utterance in xlabel format. Any other stream may also be saved using the more general utt.save.relation which takes the additional argument of a relation name. The names of each item and the end feature of each item are saved in the named file, again in Xlabel format, other features are saved in extra fields. For more elaborated saving methods you can easily write a Scheme function to save data in an utterance in whatever format is required. See the file `lib/mbrola.scm' for an example.

A simple function to allow the displaying of an utterance in Entropic's Xwaves tool is provided by the function display. It simply saves the waveform and the segments and sends appropriate commands to (the already running) Xwaves and xlabel programs.

A function to synthesize an externally specified utterance is provided for by utt.resynth which takes two filename arguments, an xlabel segment file and an F0 file. This function loads, synthesizes and plays an utterance synthesized from these files. The loading is provided by the underlying function utt.load.segf0.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_15.html0100644001741100001440000002746307332366671017461 0ustar awbusers Festival Speech Synthesis System - 15 Text analysis Go to the first, previous, next, last section, table of contents.


15 Text analysis

15.1 Tokenizing

A crucial stage in text processing is the initial tokenization of text. A token in Festival is an atom separated with whitespace from a text file (or string). If punctuation for the current language is defined, characters matching that punctuation are removed from the beginning and end of a token and held as features of the token. The default list of characters to be treated as white space is defined as

(defvar token.whitespace " \t\n\r")

While the default set of punctuation characters is

(defvar token.punctuation "\"'`.,:;!?(){}[]")
(defvar token.prepunctuation "\"'`({[")

These are declared in `lib/token.scm' but may be changed for different languages, text modes etc.

15.2 Token to word rules

Tokens are further analysed into lists of words. A word is an atom that can be given a pronunciation by the lexicon (or letter to sound rules). A token may give rise to a number of words or none at all.

For example the basic tokens

This pocket-watch was made in 1983.

would give a word relation of

this pocket watch was made in nineteen eighty three

Becuase the relationship between tokens and word in some cases is complex, a user function may be specified for translating tokens into words. This is designed to deal with things like numbers, email addresses, and other non-obvious pronunciations of tokens as zero or more words. Currently a builtin function builtin_english_token_to_words offers much of the necessary functionality for English but a user may further customize this.

If the user defines a function token_to_words which takes two arguments: a token item and a token name, it will be called by the Token_English and Token_Any modules. A substantial example is given as english_token_to_words in `festival/lib/token.scm'.

An example of this function is in `lib/token.scm'. It is quite elaborate and covers most of the common multi-word tokens in English including, numbers, money symbols, Roman numerals, dates, times, plurals of symbols, number ranges, telephone number and various other symbols.

Let us look at the treatment of one particular phenomena which shows the use of these rules. Consider the expression "$12 million" which should be rendered as the words "twelve million dollars". Note the word "dollars" which is introduced by the "$" sign, ends up after the end of the expression. There are two cases we need to deal with as there are two tokens. The first condition in the cond checks if the current token name is a money symbol, while the second condition check that following word is a magnitude (million, billion, trillion, zillion etc.) If that is the case the "$" is removed and the remaining numbers are pronounced, by calling the builtin token to word function. The second condition deals with the second token. It confirms the previous is a money value (the same regular expression as before) and then returns the word followed by the word "dollars". If it is neither of these forms then the builtin function is called.

(define (token_to_words token name)
"(token_to_words TOKEN NAME)
Returns a list of words for NAME from TOKEN."
 (cond
  ((and (string-matches name "\\$[0-9,]+\\(\\.[0-9]+\\)?")
        (string-matches (item.feat token "n.name") ".*illion.?"))
   (builtin_english_token_to_words token (string-after name "$")))
  ((and (string-matches (item.feat token "p.name")
                          "\\$[0-9,]+\\(\\.[0-9]+\\)?")
        (string-matches name ".*illion.?"))
   (list 
    name
    "dollars"))
  (t
   (builtin_english_token_to_words token name))))

It is valid to make some conditions return no words, though some care should be taken with that, as punctuation information may no longer be available to later processing if there are no words related to a token.

15.3 Homograph disambiguation

Not all tokens can be rendered as words easily. Their context may affect the way they are to be pronounced. For example in the utterance

On May 5 1985, 1985 people moved to Livingston.

the tokens "1985" should be pronounced differently, the first as a year, "nineteen eighty five" while the second as a quantity "one thousand nine hundred and eighty five". Numbers may also be pronounced as ordinals as in the "5" above, it should be "fifth" rather than "five".

Also, the pronunciation of certain words cannot simply be found from their orthographic form alone. Linguistic part of speech tags help to disambiguate a large class of homographs, e.g. "lives". A part of speech tagger is included in Festival and discussed in section 16 POS tagging. But even part of speech isn't sufficient in a number of cases. Words such as "bass", "wind", "bow" etc cannot by distinguished by part of speech alone, some semantic information is also required. As full semantic analysis of text is outwith the realms of Festival's capabilities some other method for disambiguation is required.

Following the work of yarowsky96 we have included a method for identified tokens to be further labelled with extra tags to help identify their type. Yarowsky uses decision lists to identify different types for homographs. Decision lists are a restricted form of decision trees which have some advantages over full trees, they are easier to build and Yarowsky has shown them to be adequate for typical homograph resolution.

15.3.1 Using disambiguators

Festival offers a method for assigning a token_pos feature to each token. It does so using Yarowsky-type disambiguation techniques. A list of disambiguators can be provided in the variable token_pos_cart_trees. Each disambiguator consists of a regular expression and a CART tree (which may be a decision list as they have the same format). If a token matches the regular expression the CART tree is applied to the token and the resulting class is assigned to the token via the feature token_pos. This is done by the Token_POS module.

For example, the follow disambiguator distinguishes "St" (street and saint) and "Dr" (doctor and drive).

   ("\\([dD][Rr]\\|[Ss][tT]\\)"
    ((n.name is 0)
     ((p.cap is 1)
      ((street))
      ((p.name matches "[0-9]*\\(1[sS][tT]\\|2[nN][dD]\\|3[rR][dD]\\|[0-9][tT][hH]\\)")
       ((street))
       ((title))))
     ((punc matches ".*,.*")
      ((street))
      ((p.punc matches ".*,.*")
       ((title))
       ((n.cap is 0)
        ((street))
        ((p.cap is 0)
         ((p.name matches "[0-9]*\\(1[sS][tT]\\|2[nN][dD]\\|3[rR][dD]\\|[0-9][tT][hH]\\)")
          ((street))
          ((title)))
         ((pp.name matches "[1-9][0-9]+")
          ((street))
          ((title)))))))))

Note that these only assign values for the feature token_pos and do nothing more. You must have a related token to word rule that interprets this feature value and does the required translation. For example the corresponding token to word rule for the above disambiguator is

  ((string-matches name "\\([dD][Rr]\\|[Ss][tT]\\)")
   (if (string-equal (item.feat token "token_pos") "street")
       (if (string-matches name "[dD][rR]")
           (list "drive")
           (list "street"))
       (if (string-matches name "[dD][rR]")
           (list "doctor")
           (list "saint"))))

15.3.2 Building disambiguators

Festival offers some support for building disambiguation trees. The basic method is to find all occurrences of a homographic token in a large text database, label each occurrence into classes, extract appropriate context features for these tokens and finally build an classification tree or decision list based on the extracted features.

The extraction and building of trees is not yet a fully automated process in Festival but the file `festival/examples/toksearch.scm' shows some basic Scheme code we use for extracting tokens from very large collections of text.

The function extract_tokens does the real work. It reads the given file, token by token into a token stream. Each token is tested against the desired tokens and if there is a match the named features are extracted. The token stream will be extended to provide the necessary context. Note that only some features will make any sense in this situation. There is only a token relation so referring to words, syllables etc. is not productive.

In this example databases are identified by a file that lists all the files in the text databases. Its name is expected to be `bin/DBNAME.files' where DBNAME is the name of the database. The file should contain a list of filenames in the database e.g for the Gutenberg texts the file `bin/Gutenberg.files' contains

gutenberg/etext90/bill11.txt
gutenberg/etext90/const11.txt
gutenberg/etext90/getty11.txt
gutenberg/etext90/jfk11.txt
...

Extracting the tokens is typically done in two passes. The first pass extracts the context (I've used 5 tokens either side). It extracts the file and position, so the token is identified, and the word in context.

Next those examples should be labelled with a small set of classes which identify the type of the token. For example for a token like "Dr" whether it is a person's title or a street identifier. Note that hand-labelling can be laborious, though it is surprising how few tokens of particular types actually exist in 62 million words.

The next task is to extract the tokens with the features that will best distinguish the particular token. In our "Dr" case this will involve punctuation around the token, capitalisation of surrounding tokens etc. After extracting the distinguishing tokens you must line up the labels with these extracted features. It would be easier to extract both the context and the desired features at the same time but experience shows that in labelling, more appropriate features come to mind that will distinguish classes better and you don't want to have to label twice.

Once a set of features consisting of the label and features is created it is easy to use `wagon' to create the corresponding decision tree or decision list. `wagon' supports both decision trees and decision lists, it may be worth experimenting to find out which give the best results on some held out test data. It appears that decision trees are typically better, but are often much larger, and the size does not always justify the the sometimes only slightly better results.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_16.html0100644001741100001440000000602507332366671017451 0ustar awbusers Festival Speech Synthesis System - 16 POS tagging Go to the first, previous, next, last section, table of contents.


16 POS tagging

Part of speech tagging is a fairly well-defined process. Festival includes a part of speech tagger following the HMM-type taggers as found in the Xerox tagger and others (e.g. DeRose88). Part of speech tags are assigned, based on the probability distribution of tags given a word, and from ngrams of tags. These models are externally specified and a Viterbi decoder is used to assign part of speech tags at run time.

So far this tagger has only been used for English but there is nothing language specific about it. The module POS assigns the tags. It accesses the following variables for parameterization.

pos_lex_name
The name of a "lexicon" holding reverse probabilities of words given a tag (indexed by word). If this is unset or has the value NIL no part of speech tagging takes place.
pos_ngram_name
The name of a loaded ngram model of part of speech tags (loaded by ngram.load).
pos_p_start_tag
The name of the most likely tag before the start of an utterance. This is typically the tag for sentence final punctuation marks.
pos_pp_start_tag
The name of the most likely tag two before the start of an utterance. For English the is typically a simple noun, but for other languages it might be a verb. If the ngram model is bigger than three this tag is effectively repeated for the previous left contexts.
pos_map
We have found that it is often better to use a rich tagset for prediction of part of speech tags but that in later use (phrase breaks and dictionary lookup) a much more constrained tagset is better. Thus mapping of the predicted tagset to a different tagset is supported. pos_map should be a a list of pairs consisting of a list of tags to be mapped and the new tag they are to be mapped to.

Note is it important to have the part of speech tagger match the tags used in later parts of the system, particularly the lexicon. Only two of our lexicons used so far have (mappable) part of speech labels.

An example of the part of speech tagger for English can be found in `lib/pos.scm'.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_17.html0100644001741100001440000000740107332366671017451 0ustar awbusers Festival Speech Synthesis System - 17 Phrase breaks Go to the first, previous, next, last section, table of contents.


17 Phrase breaks

There are two methods for predicting phrase breaks in Festival, one simple and one sophisticated. These two methods are selected through the parameter Phrase_Method and phrasing is achieved by the module Phrasify.

The first method is by CART tree. If parameter Phrase_Method is cart_tree, the CART tree in the variable phrase_cart_tree is applied to each word to see if a break should be inserted or not. The tree should predict categories BB (for big break), B (for break) or NB (for no break). A simple example of a tree to predict phrase breaks is given in the file `lib/phrase.scm'.

(set! simple_phrase_cart_tree
'
((R:Token.parent.punc in ("?" "." ":"))
  ((BB))
  ((R:Token.parent.punc in ("'" "\"" "," ";"))
   ((B))
   ((n.name is 0)
    ((BB))
    ((NB))))))

The second and more elaborate method of phrase break prediction is used when the parameter Phrase_Method is prob_models. In this case a probabilistic model using probabilities of a break after a word based on the part of speech of the neighbouring words and the previous word. This is combined with a ngram model of the distribution of breaks and non-breaks using a Viterbi decoder to find the optimal phrasing of the utterance. The results using this technique are good and even show good results on unseen data from other researchers' phrase break tests (see black97b). However sometimes it does sound wrong, suggesting there is still further work required.

Parameters for this module are set through the feature list held in the variable phr_break_params, and example of which for English is set in english_phr_break_params in the file `lib/phrase.scm'. The features names and meaning are

pos_ngram_name
The name of a loaded ngram that gives probability distributions of B/NB given previous, current and next part of speech.
pos_ngram_filename
The filename containing pos_ngram_name.
break_ngram_name
The name of a loaded ngram of B/NB distributions. This is typically a 6 or 7-gram.
break_ngram_filename
The filename containing break_ngram_name.
gram_scale_s
A weighting factor for breaks in the break/non-break ngram. Increasing the value insertes more breaks, reducing it causes less breaks to be inserted.
phrase_type_tree
A CART tree that is used to predict type of break given the predict break position. This (rather crude) technique is current used to distinguish major and minor breaks.
break_tags
A list of the break tags (typically (B NB)).
pos_map
A part of speech map used to map the pos feature of words into a smaller tagset used by the phrase predictor.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_18.html0100644001741100001440000002222007332366671017446 0ustar awbusers Festival Speech Synthesis System - 18 Intonation Go to the first, previous, next, last section, table of contents.


18 Intonation

A number of different intonation modules are available with varying levels of control. In general intonation is generated in two steps.

  1. Prediction of accents (and/or end tones) on a per syllable basis.
  2. Prediction of F0 target values, this must be done after durations are predicted.

Reflecting this split there are two main intonation modules that call sub-modules depending on the desired intonation methods. The Intonation and Int_Targets modules are defined in Lisp (`lib/intonation.scm') and call sub-modules which are (so far) in C++.

18.1 Default intonation

This is the simplest form of intonation and offers the modules Intonation_Default and Intonation_Targets_Default. The first of which actually does nothing at all. Intonation_Targets_Default simply creates a target at the start of the utterance, and one at the end. The values of which, by default are 130 Hz and 110 Hz. These values may be set through the parameter duffint_params for example the following will general a monotone at 150Hz.

(set! duffint_params '((start 150) (end 150)))
(Parameter.set 'Int_Method 'DuffInt)
(Parameter.set 'Int_Target_Method Int_Targets_Default)

18.2 Simple intonation

This module uses the CART tree in int_accent_cart_tree to predict if each syllable is accented or not. A predicted value of NONE means no accent is generated by the corresponding Int_Targets_Simple function. Any other predicted value will cause a `hat' accent to be put on that syllable.

A default int_accent_cart_tree is available in the value simple_accent_cart_tree in `lib/intonation.scm'. It simply predicts accents on the stressed syllables on content words in poly-syllabic words, and on the only syllable in single syllable content words. Its form is

(set! simple_accent_cart_tree
 '
  ((R:SylStructure.parent.gpos is content)
   ((stress is 1)
    ((Accented))
    ((position_type is single)
     ((Accented))
     ((NONE))))
   ((NONE))))

The function Int_Targets_Simple uses parameters in the a-list in variable int_simple_params. There are two interesting parameters f0_mean which gives the mean F0 for this speaker (default 110 Hz) and f0_std is the standard deviation of F0 for this speaker (default 25 Hz). This second value is used to determine the amount of variation to be put in the generated targets.

For each Phrase in the given utterance an F0 is generated starting at f0_code+(f0_std*0.6) and declines f0_std Hz over the length of the phrase until the last syllable whose end is set to f0_code-f0_std. An imaginary line called baseline is drawn from start to the end (minus the final extra fall), For each syllable that is accented (i.e. has an IntEvent related to it) three targets are added. One at the start, one in mid vowel, and one at the end. The start and end are at position baseline Hz (as declined for that syllable) and the mid vowel is set to baseline+f0_std.

Note this model is not supposed to be complex or comprehensive but it offers a very quick and easy way to generate something other than a fixed line F0. Something similar to this has been for Spanish and Welsh without (too many) people complaining. However it is not designed as a serious intonation module.

18.3 Tree intonation

This module is more flexible. Two different CART trees can be used to predict `accents' and `endtones'. Although at present this module is used for an implementation of the ToBI intonation labelling system it could be used for many different types of intonation system.

The target module for this method uses a Linear Regression model to predict start mid-vowel and end targets for each syllable using arbitrarily specified features. This follows the work described in black96. The LR models are held as as described below See section 25.5 Linear regression. Three models are used in the variables f0_lr_start, f0_lr_mid and f0_lr_end.

18.4 Tilt intonation

Tilt description to be inserted.

18.5 General intonation

As there seems to be a number of intonation theories that predict F0 contours by rule (possibly using trained parameters) this module aids the external specification of such rules for a wide class of intonation theories (through primarily those that might be referred to as the ToBI group). This is designed to be multi-lingual and offer a quick way to port often pre-existing rules into Festival without writing new C++ code.

The accent prediction part uses the same mechanisms as the Simple intonation method described above, a decision tree for accent prediction, thus the tree in the variable int_accent_cart_tree is used on each syllable to predict an IntEvent.

The target part calls a specified Scheme function which returns a list of target points for a syllable. In this way any arbitrary tests may be done to produce the target points. For example here is a function which returns three target points for each syllable with an IntEvent related to it (i.e. accented syllables).

(define (targ_func1 utt syl)
  "(targ_func1 UTT STREAMITEM)
Returns a list of targets for the given syllable."
  (let ((start (item.feat syl 'syllable_start))
        (end (item.feat syl 'syllable_end)))
    (if (equal? (item.feat syl "R:Intonation.daughter1.name") "Accented")
        (list
         (list start 110)
         (list (/ (+ start end) 2.0) 140)
         (list end 100)))))

This function may be identified as the function to call by the following setup parameters.

(Parameter.set 'Int_Method 'General)
(Parameter.set 'Int_Target_Method Int_Targets_General)

(set! int_general_params
      (list 
       (list 'targ_func targ_func1)))

18.6 Using ToBI

An example implementation of a ToBI to F0 target module is included in `lib/tobi_rules.scm' based on the rules described in jilka96. This uses the general intonation method discussed in the previous section. This is designed to be useful to people who are experimenting with ToBI (silverman92), rather than general text to speech.

To use this method you need to load `lib/tobi_rules.scm' and call setup_tobi_f0_method. The default is in a male's pitch range, i.e. for voice_rab_diphone. You can change it for other pitch ranges by changing the folwoing variables.

(Parameter.set 'Default_Topline 110)
(Parameter.set 'Default_Start_Baseline 87)
(Parameter.set 'Default_End_Baseline 83)
(Parameter.set 'Current_Topline (Parameter.get 'Default_Topline))
(Parameter.set 'Valley_Dip 75)

An example using this from STML is given in `examples/tobi.stml'. But it can also be used from Scheme. For example before defining an utterance you should execute the following either from teh command line on in some setup file

(voice_rab_diphone)
(require 'tobi_rules)
(setup_tobi_f0_method)

In order to allow specification of accents, tones, and break levels you must use an utterance type that allows such specification. For example

(Utterance 
 Words
 (boy
  (saw ((accent H*)))
   the
   (girl ((accent H*)))
   in the 
   (park ((accent H*) (tone H-)))
   with the 
   (telescope ((accent H*) (tone H-H%)))))

(Utterance Words 
 (The
  (boy ((accent L*)))
  saw
  the
  (girl ((accent H*) (tone L-)))
  with 
  the
  (telescope ((accent H*) (tone H-H%))))))

You can display the the synthesized form of these utterance in Xwaves. Start an Xwaves and an Xlabeller and call the function display on the synthesized utterance.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_19.html0100644001741100001440000001310307332366671017447 0ustar awbusers Festival Speech Synthesis System - 19 Duration Go to the first, previous, next, last section, table of contents.


19 Duration

A number of different duration prediction modules are available with varying levels of sophistication.

Segmental duration prediction is done by the module Duration which calls different actual methods depending on the parameter Duration_Method.

All of the following duration methods may be further affected by both a global duration stretch and a per word one.

If the parameter Duration_Stretch is set, all absolute durations predicted by any of the duration methods described here are multiplied by the parameter's value. For example

(Parameter.set 'Duration_Stretch 1.2)

will make everything speak more slowly.

In addition to the global stretch method, if the feature dur_stretch on the related Token is set it will also be used as a multiplicative factor on the duration produced by the selected method. That is R:Syllable.parent.parent.R:Token.parent.dur_stretch. There is a lisp function duration_find_stretch wchi will return the combined gloabel and local duration stretch factor for a given segment item.

Note these global and local methods of affecting the duration produced by models are crude and should be considered hacks. Uniform modification of durations is not what happens in real speech. These parameters are typically used when the underlying duration method is lacking in some way. However these can be useful.

Note it is quite easy to implement new duration methods in Scheme directly.

19.1 Default durations

If parameter Duration_Method is set to Default, the simplest duration model is used. All segments are 100 milliseconds (this can be modified by Duration_Stretch, and/or the localised Token related dur_stretch feature).

19.2 Average durations

If parameter Duration_Method is set to Averages then segmental durations are set to their averages. The variable phoneme_durations should be an a-list of phones and averages in seconds. The file `lib/mrpa_durs.scm' has an example for the mrpa phoneset.

If a segment is found that does not appear in the list a default duration of 0.1 seconds is assigned, and a warning message generated.

19.3 Klatt durations

If parameter Duration_Method is set to Klatt the duration rules from the Klatt book (allen87, chapter 9). This method requires minimum and inherent durations for each phoneme in the phoneset. This information is held in the variable duration_klatt_params. Each member of this list is a three-tuple, of phone name, inherent duration and minimum duration. An example for the mrpa phoneset is in `lib/klatt_durs.scm'.

19.4 CART durations

Two very similar methods of duration prediction by CART tree are supported. The first, used when parameter Duration_Method is Tree simply predicts durations directly for each segment. The tree is set in the variable duration_cart_tree.

The second, which seems to give better results, is used when parameter Duration_Method is Tree_ZScores. In this second model the tree predicts zscores (number of standard deviations from the mean) rather than duration directly. (This follows campbell91, but we don't deal in syllable durations here.) This method requires means and standard deviations for each phone. The variable duration_cart_tree should contain the zscore prediction tree and the variable duration_ph_info should contain a list of phone, mean duration, and standard deviation for each phone in the phoneset.

An example tree trained from 460 sentences spoken by Gordon is in `lib/gswdurtreeZ'. Phone means and standard deviations are in `lib/gsw_durs.scm'.

After prediction the segmental duration is calculated by the simple formula

duration = mean + (zscore * standard deviation)

For some other duration models that affect an inherent duration by some factor this method has been used. If the tree predicts factors rather than zscores and the duration_ph_info entries are phone, 0.0, inherent duration. The above formula will generate the desired result. Klatt and Klatt-like rules can be implemented in the this way without adding a new method.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_20.html0100644001741100001440000003476607332366671017461 0ustar awbusers Festival Speech Synthesis System - 20 UniSyn synthesizer Go to the first, previous, next, last section, table of contents.


20 UniSyn synthesizer

Since 1.3 a new general synthesizer module has been included. This designed to replace the older diphone synthesizer described in the next chapter. A redesign was made in order to have a generalized waveform synthesizer, singla processing module that could be used even when the units being concatenated are not diphones. Also at this stage the full diphone (or other) database pre-processing functions were added to the Speech Tool library.

20.1 UniSyn database format

The Unisyn synthesis modules can use databases in two basic formats, separate and grouped. Separate is when all files (signal, pitchmark and coefficient files) are accessed individually during synthesis. This is the standard use during databse development. Group format is when a database is collected together into a single special file containing all information necessary for waveform synthesis. This format is designed to be used for distribution and general use of the database.

A database should consist of a set of waveforms, (which may be translated into a set of coefficients if the desired the signal processing method requires it), a set of pitchmarks and an index. The pitchmarks are necessary as most of our current signal processing are pitch synchronous.

20.1.1 Generating pitchmarks

Pitchmarks may be derived from laryngograph files using the our proved program `pitchmark' distributed with the speech tools. The actual parameters to this program are still a bit of an art form. The first major issue is which direction the lar files. We have seen both, though it does seem to be CSTR's ones are most often upside down while others (e.g. OGI's) are the right way up. The -inv argument to `pitchmark' is specifically provided to cater for this. There other issues in getting the pitchmarks aligned. The basic command for generating pitchmarks is

pitchmark -inv lar/file001.lar -o pm/file001.pm -otype est \
     -min 0.005 -max 0.012 -fill -def 0.01 -wave_end

The `-min', `-max' and `-def' (fill values for unvoiced regions), may need to be changed depending on the speaker pitch range. The above is suitable for a male speaker. The `-fill' option states that unvoiced sections should be filled with equally spaced pitchmarks.

20.1.2 Generating LPC coefficients

LPC coefficients are generated using the `sig2fv' command. Two stages are required, generating the LPC coefficients and generating the residual. The prototypical commands for these are

sig2fv wav/file001.wav -o lpc/file001.lpc -otype est -lpc_order 16 \
    -coefs "lpc" -pm pm/file001.pm -preemph 0.95 -factor 3 \
    -window_type hamming
sigfilter wav/file001.wav -o lpc/file001.res -otype nist \
    -lpcfilter lpc/file001.lpc -inv_filter

For some databases you may need to normalize the power. Properly normalizing power is difficult but we provide a simple function which may do the jobs acceptably. You should do this on the waveform before lpc analysis (and ensure you also do the residual extraction on the normalized waveform rather than the original.

ch_wave -scaleN 0.5 wav/file001.wav -o file001.Nwav

This normalizes the power by maximizing the signal first then multiplying it by the given factor. If the database waveforms are clean (i.e. no clicks) this can give reasonable results.

20.2 Generating a diphone index

The diphone index consists of a short header following by an ascii list of each diphone, the file it comes from followed by its start middle and end times in seconds. For most databases this files needs to be generated by some database specific script.

An example header is

EST_File index
DataType ascii
NumEntries 2005
IndexName rab_diphone
EST_Header_End

The most notable part is the number of entries, which you should note can get out of sync with the actual number of entries if you hand edit entries. I.e. if you add an entry and the system still can't find it check that the number of entries is right.

The entries themselves may take on one of two forms, full entries or index entries. Full entries consist of a diphone name, where the phones are separated by "-"; a file name which is used to index into the pitchmark, LPC and waveform file; and the start, middle (change over point between phones) and end of the phone in the file in seconds of the diphone. For example

r-uh    edx_1001        0.225   0.261   0.320
r-e     edx_1002        0.224   0.273   0.326
r-i     edx_1003        0.240   0.280   0.321
r-o     edx_1004        0.212   0.253   0.320

The second form of entry is an index entry which simply states that reference to that diphone should actually be made to another. For example

aa-ll   &aa-l

This states that the diphone aa-ll should actually use the diphone aa-l. Note they are a number of ways to specify alternates for missing diphones an this method is best used for fixing single or small classes of missing or broken diphones. Index entries may appear anywhere in the file but can't be nested.

Some checks are made one reading this index to ensure times etc are reasonable but multiple entries for the same diphone are not, in that case the later one will be selected.

20.3 Database declaration

There two major types of database grouped and ungrouped. Grouped databases come as a single file containing the diphone index, coeficinets and residuals for the diphones. This is the standard way databases are distributed as voices in Festoval. Ungrouped access diphones from individual files and is designed as a method for debugging and testing databases before distribution. Using ungrouped dataabse is slower but allows quicker changes to the index, and associated coefficient files and residuals without rebuilding the group file.

A database is declared to the system through the command us_diphone_init. This function takes a parameter list of various features used for setting up a database. The features are

name
An atomic name for this database, used in selecting it from the current set of laded database.
index_file
A filename name containing either a diphone index, as descripbed above, or a group file. The feature grouped defines the distinction between this being a group of simple index file.
grouped
Takes the value "true" or "false". This defined simple index or if the index file is a grouped file.
coef_dir
The directory containing the coefficients, (LPC or just pitchmarks in the PSOLA case).
sig_dir
The directory containing the signal files (residual for LPC, full waveforms for PSOLA).
coef_ext
The extention for coefficient files, typically ".lpc" for LPC file and ".pm" for pitchmark files.
sig_ext
The extention for signal files, typically ".res" for LPC residual files and ".wav" for waveform files.
default_diphone
The diphone to be used when the requested one doesn't exist. No matter how careful you are you should always include a default diphone for distributed diphone database. Synthesis will throw an error if no diphone is found and there is no default. Although it is usually an error when this is required its better to fill in something than stop synthesizing. Typical values for this are silence to silence or schwa to schwa.
alternates_left
A list of pairs showing the alternate phone names for the left phone in a diphone pair. This is list is used to rewrite the diphone name when the directly requested one doesn't exist. This is the recommended method for dealing with systematic holes in a diphone database.
alternates_right
A list of pairs showing the alternate phone names for the right phone in a diphone pair. This is list is used to rewrite the diphone name when the directly requested one doesn't exist. This is the recommended method for dealing with systematic holes in a diphone database.

An example database definition is

(set! rab_diphone_dir "/projects/festival/lib/voices/english/rab_diphone")
(set! rab_lpc_group 
      (list
       '(name "rab_lpc_group")
       (list 'index_file 
             (path-append rab_diphone_dir "group/rablpc16k.group"))
       '(alternates_left ((i ii) (ll l) (u uu) (i@ ii) (uh @) (a aa)
                                 (u@ uu) (w @) (o oo) (e@ ei) (e ei)
                                 (r @)))
       '(alternates_right ((i ii) (ll l) (u uu) (i@ ii) 
                                  (y i) (uh @) (r @) (w @)))
       '(default_diphone @-@@)
       '(grouped "true")))
(us_dipohone_init rab_lpc_group)

20.4 Making groupfiles

The function us_make_group_file will make a group file of the currently selected US diphone database. It loads in all diphone sin the dtabaase and saves them in the named file. An optional second argument allows specification of how the group file will be saved. These options are as a feature list. There are three possible options

track_file_format
The format for the coefficient files. By default this is est_binary, currently the only other alternative is est_ascii.
sig_file_format
The format for the signal parts of the of the database. By default this is snd (Sun's Audio format). This was choosen as it has the smallest header and supports various sample formats. Any format supported by the Edinburgh Speech Tools is allowed.
sig_sample_format
The format for the samples in the signal files. By default this is mulaw. This is suitable when the signal files are LPC residuals. LPC residuals have a much smaller dynamic range that plain PCM files. Because mulaw representation is half the size (8 bits) of standard PCM files (16bits) this significantly reduces the size of the group file while only marginally altering the quality of synthesis (and from experiments the effect is not perceptible). However when saving group files where the signals are not LPC residuals (e.g. in PSOLA) using this default mulaw is not recommended and short should probably be used.

20.5 UniSyn module selection

In a voice selection a UniSyn database may be selected as follows

  (set! UniSyn_module_hooks (list rab_diphone_const_clusters ))
  (set! us_abs_offset 0.0)
  (set! window_factor 1.0)
  (set! us_rel_offset 0.0)
  (set! us_gain 0.9)

  (Parameter.set 'Synth_Method 'UniSyn)
  (Parameter.set 'us_sigpr 'lpc)
  (us_db_select rab_db_name)

The UniSyn_module_hooks are run before synthesis, see the next selection about diphone name selection. At present only lpc is supported by the UniSyn module, though potentially there may be others.

An optional implementation of TD-PSOLA moulines90 has been written but fear of legal problems unfortunately prevents it being in the public distribution, but this policy should not be taken as acknowledging or not acknowledging any alleged patent violation.

20.6 Diphone selection

Diphone names are constructed for each phone-phone pair in the Segment relation in an utterance. If a segment has the feature in forming a diphone name UniSyn first checks for the feature us_diphone_left (or us_diphone_right for the right hand part of the diphone) then if that doesn't exist the feature us_diphone then if that doesn't exist the feature name. Thus is is possible to specify diphone names which are not simply the concatenation of two segment names.

This feature is used to specify consonant cluster diphone names for our English voices. The hook UniSyn_module_hooks is run before selection and we specify a function to add us_diphone_* features as appropriate. See the function rab_diphone_fix_phone_name in `lib/voices/english/rab_diphone/festvox/rab_diphone.scm' for an example.

Once the diphone name is created it is used to select the diphone from the database. If it is not found the name is converted using the list of alternates_left and alternates_right as specified in the database declaration. If that doesn't specify a diphone in the database. The default_diphone is selected, and a warning is printed. If no default diphone is specified or the default diphone doesn't exist in the database an error is thrown.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_21.html0100644001741100001440000004133707332366671017452 0ustar awbusers Festival Speech Synthesis System - 21 Diphone synthesizer Go to the first, previous, next, last section, table of contents.


21 Diphone synthesizer

NOTE: use of this diphone synthesis is depricated and it will probably be removed from future versions, all of its functionality has been replaced by the UniSyn synthesizer. It is not compiled by default, if required add ALSO_INCLUDE += diphone to your `festival/config/config' file.

A basic diphone synthesizer offers a method for making speech from segments, durations and intonation targets. This module was mostly written by Alistair Conkie but the base diphone format is compatible with previous CSTR diphone synthesizers.

The synthesizer offers residual excited LPC based synthesis (hunt89) and PSOLA (TM) (moulines90) (PSOLA is not available for distribution).

21.1 Diphone database format

A diphone database consists of a dictionary file, a set of waveform files, and a set of pitch mark files. These files are the same format as the previous CSTR (Osprey) synthesizer.

The dictionary file consist of one entry per line. Each entry consists of five fields: a diphone name of the form P1-P2, a filename (without extension), a floating point start position in the file in milliseconds, a mid position in milliseconds (change in phone), and an end position in milliseconds. Lines starting with a semi-colon and blank lines are ignored. The list may be in any order.

For example a partial list of phones may look like.

ch-l  r021   412.035  463.009  518.23  
jh-l  d747   305.841  382.301  446.018 
h-l   d748   356.814  403.54   437.522 
#-@   d404   233.628  297.345  331.327 
@-#   d001   836.814  938.761  1002.48 

Waveform files may be in any form, as long as every file is the same type, headered or unheadered as long as the format is supported the speech tools wave reading functions. These may be standard linear PCM waveform files in the case of PSOLA or LPC coefficients and residual when using the residual LPC synthesizer. section 21.2 LPC databases

Pitch mark files consist a simple list of positions in milliseconds (plus places after the point) in order, one per line of each pitch mark in the file. For high quality diphone synthesis these should be derived from laryngograph data. During unvoiced sections pitch marks should be artificially created at reasonable intervals (e.g. 10 ms). In the current format there is no way to determine the "real" pitch marks from the "unvoiced" pitch marks.

It is normal to hold a diphone database in a directory with a number of sub-directories namely `dic/' contain the dictionary file, `wave/' for the waveform files, typically of whole nonsense words (sometimes this directory is called `vox/' for historical reasons) and `pm/' for the pitch mark files. The filename in the dictionary entry should be the same for waveform file and the pitch mark file (with different extensions).

21.2 LPC databases

The standard method for diphone resynthesis in the released system is residual excited LPC (hunt89). The actual method of resynthesis isn't important to the database format, but if residual LPC synthesis is to be used then it is necessary to make the LPC coefficient files and their corresponding residuals.

Previous versions of the system used a "host of hacky little scripts" to this but now that the Edinburgh Speech Tools supports LPC analysis we can provide a walk through for generating these.

We assume that the waveform file of nonsense words are in a directory called `wave/'. The LPC coefficients and residuals will be, in this example, stored in `lpc16k/' with extensions `.lpc' and `.res' respectively.

Before starting it is worth considering power normalization. We have found this important on all of the databases we have collected so far. The ch_wave program, part of the speech tools, with the optional -scaleN 0.4 may be used if a more complex method is not available.

The following shell command generates the files

for i in wave/*.wav
do
   fname=`basename $i .wav`
   echo $i
   lpc_analysis -reflection -shift 0.01 -order 18 -o lpc16k/$fname.lpc \
       -r lpc16k/$fname.res -otype htk -rtype nist $i
done

It is said that the LPC order should be sample rate divided by one thousand plus 2. This may or may not be appropriate and if you are particularly worried about the database size it is worth experimenting.

The program `lpc_analysis', found in `speech_tools/bin', can be used to generate the lpc coefficients and residual. Note these should be reflection coefficients so they may be quantised (as they are in group files).

The coefficients and residual files produced by different LPC analysis programs may start at different offsets. For example the Entropic's ESPS functions generate LPC coefficients that are offset by one frame shift (e.g. 0.01 seconds). Our own `lpc_analysis' routine has no offset. The Diphone_Init parameter list allows these offsets to be specified. Using the above function to generate the LPC files the description parameters should include

  (lpc_frame_offset 0)
  (lpc_res_offset 0.0)

While when generating using ESPS routines the description should be

  (lpc_frame_offset 1)
  (lpc_res_offset 0.01)

The defaults actually follow the ESPS form, that is lpc_frame_offset is 1 and lpc_res_offset is equal to the frame shift, if they are not explicitly mentioned.

Note the biggest problem we have in implementing the residual excited LPC resynthesizer was getting the right part of the residual to line up with the right LPC coefficients describing the pitch mark. Making errors in this degrades the synthesized waveform notably, but not seriously, making it difficult to determine if it is an offset problem or some other bug.

Although we have started investigating if extracting pitch synchronous LPC parameters rather than fixed shift parameters gives better performance, we haven't finished this work. `lpc_analysis' supports pitch synchronous analysis but the raw "ungrouped" access method does not yet. At present the LPC parameters are extracted at a particular pitch mark by interpolating over the closest LPC parameters. The "group" files hold these interpolated parameters pitch synchronously.

The American English voice `kd' was created using the speech tools `lpc_analysis' program and its set up should be looked at if you are going to copy it. The British English voice `rb' was constructed using ESPS routines.

21.3 Group files

Databases may be accessed directly but this is usually too inefficient for any purpose except debugging. It is expected that group files will be built which contain a binary representation of the database. A group file is a compact efficient representation of the diphone database. Group files are byte order independent, so may be shared between machines of different byte orders and word sizes. Certain information in a group file may be changed at load time so a database name, access strategy etc. may be changed from what was set originally in the group file.

A group file contains the basic parameters, the diphone index, the signal (original waveform or LPC residual), LPC coefficients, and the pitch marks. It is all you need for a run-time synthesizer. Various compression mechanisms are supported to allow smaller databases if desired. A full English LPC plus residual database at 8k ulaw is about 3 megabytes, while a full 16 bit version at 16k is about 8 megabytes.

Group files are created with the Diphone.group command which takes a database name and an output filename as an argument. Making group files can take some time especially if they are large. The group_type parameter specifies raw or ulaw for encoding signal files. This can significantly reduce the size of databases.

Group files may be partially loaded (see access strategies) at run time for quicker start up and to minimise run-time memory requirements.

21.4 Diphone_Init

The basic method for describing a database is through the Diphone_Init command. This function takes a single argument, a list of pairs of parameter name and value. The parameters are

name
An atomic name for this database.
group_file
The filename of a group file, which may itself contain parameters describing itself
type
The default value is pcm, but for distributed voices this is always lpc.
index_file
A filename containing the diphone dictionary.
signal_dir
A directory (slash terminated) containing the pcm waveform files.
signal_ext
A dot prefixed extension for the pcm waveform files.
pitch_dir
A directory (slash terminated) containing the pitch mark files.
pitch_ext
A dot prefixed extension for the pitch files
lpc_dir
A directory (slash terminated) containing the LPC coefficient files and residual files.
lpc_ext
A dot prefixed extension for the LPC coefficient files
lpc_type
The type of LPC file (as supported by the speech tools)
lpc_frame_offset
The number of frames "missing" from the beginning of the file. Often LPC parameters are offset by one frame.
lpc_res_ext
A dot prefixed extension for the residual files
lpc_res_type
The type of the residual files, this is a standard waveform type as supported by the speech tools.
lpc_res_offset
Number of seconds "missing" from the beginning of the residual file. Some LPC analysis technique do not generate a residual until after one frame.
samp_freq
Sample frequency of signal files
phoneset
Phoneset used, must already be declared.
num_diphones
Total number of diphones in database. If specified this must be equal or bigger than the number of entries in the index file. If it is not specified the square of the number of phones in the phoneset is used.
sig_band
number of sample points around actual diphone to take from file. This should be larger than any windowing used on the signal, and/or up to the pitch marks outside the diphone signal.
alternates_after
List of pairs of phones stating replacements for the second part of diphone when the basic diphone is not found in the diphone database.
alternates_before
List of pairs of phones stating replacements for the first part of diphone when the basic diphone is not found in the diphone database.
default_diphone
When unexpected combinations occur and no appropriate diphone can be found this diphone should be used. This should be specified for all diphone databases that are to be robust. We usually us the silence to silence diphone. No mater how carefully you designed your diphone set, conditions when an unknown diphone occur seem to always happen. If this is not set and a diphone is requested that is not in the database an error occurs and synthesis will stop.

Examples of both general set up, making group files and general use are in

`lib/voices/english/rab_diphone/festvox/rab_diphone.scm'

21.5 Access strategies

Three basic accessing strategies are available when using diphone databases. They are designed to optimise access time, start up time and space requirements.

direct
Load all signals at database init time. This is the slowest startup but the fastest to access. This is ideal for servers. It is also useful for small databases that can be loaded quickly. It is reasonable for many group files.
dynamic
Load signals as they are required. This has much faster start up and will only gradually use up memory as the diphones are actually used. Useful for larger databases, and for non-group file access.
ondemand
Load the signals as they are requested but free them if they are not required again immediately. This is slower access but requires low memory usage. In group files the re-reads are quite cheap as the database is well cached and a file description is already open for the file.

Note that in group files pitch marks (and LPC coefficients) are always fully loaded (cf. direct), as they are typically smaller. Only signals (waveform files or residuals) are potentially dynamically loaded.

21.6 Diphone selection

The appropriate diphone is selected based on the name of the phone identified in the segment stream. However for better diphone synthesis it is useful to augment the diphone database with other diphones in addition to the ones directly from the phoneme set. For example dark and light l's, distinguishing consonants from their consonant cluster form and their isolated form. There are however two methods to identify this modification from the basic name.

When the diphone module is called the hook diphone_module_hooks is applied. That is a function of list of functions which will be applied to the utterance. Its main purpose is to allow the conversion of the basic name into an augmented one. For example converting a basic l into a dark l, denoted by ll. The functions given in diphone_module_hooks may set the feature diphone_phone_name which if set will be used rather than the name of the segment.

For example suppose we wish to use a dark l (ll) rather than a normal l for all l's that appear in the coda of a syllable. First we would define a function to which identifies this condition and adds the addition feature diphone_phone_name identify the name change. The following function would achieve this

(define (fix_dark_ls utt)
"(fix_dark_ls UTT)
Identify ls in coda position and relabel them as ll."
  (mapcar
   (lambda (seg) 
     (if (and (string-equal "l" (item.name seg))
              (string-equal "+" (item.feat seg "p.ph_vc"))
              (item.relation.prev seg "SylStructure"))
      (item.set_feat seg "diphone_phone_name" "ll")))
   (utt.relation.items utt 'Segment))
  utt)

Then when we wish to use this for a particular voice we need to add

(set! diphone_module_hooks (list fix_dark_ls))

in the voice selection function.

For a more complex example including consonant cluster identification see the American English voice `ked' in `festival/lib/voices/english/ked/festvox/kd_diphone.scm'. The function ked_diphone_fix_phone_name carries out a number of mappings.

The second method for changing a name is during actual look up of a diphone in the database. The list of alternates is given by the Diphone_Init function. These are used when the specified diphone can't be found. For example we often allow mappings of dark l, ll to l as sometimes the dark l diphone doesn't actually exist in the database.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_22.html0100644001741100001440000001072507332366671017450 0ustar awbusers Festival Speech Synthesis System - 22 Other synthesis methods Go to the first, previous, next, last section, table of contents.


22 Other synthesis methods

Festival supports a number of other synthesis systems

22.1 LPC diphone synthesizer

A very simple, and very efficient LPC diphone synthesizer using the "donovan" diphones is also supported. This synthesis method is primarily the work of Steve Isard and later Alistair Conkie. The synthesis quality is not as good as the residual excited LPC diphone synthesizer but has the advantage of being much smaller. The donovan diphone database is under 800k.

The diphones are loaded through the Donovan_Init function which takes the name of the dictionary file and the diphone file as arguments, see the following for details

lib/voices/english/don_diphone/festvox/don_diphone.scm

22.2 MBROLA

As an example of how Festival may use a completely external synthesis method we support the free system MBROLA. MBROLA is both a diphone synthesis technique and an actual system that constructs waveforms from segment, duration and F0 target information. For details see the MBROLA home page at http://tcts.fpms.ac.be/synthesis/mbrola.html. MBROLA already supports a number of diphone sets including French, Spanish, German and Romanian.

Festival support for MBROLA is in the file `lib/mbrola.scm'. It is all in Scheme. The function MBROLA_Synth is called when parameter Synth_Method is MBROLA. The function simply saves the segment, duration and target information from the utterance, calls the external `mbrola' program with the selected diphone database, and reloads the generated waveform back into the utterance.

An MBROLA-ized version of the Roger diphoneset is available from the MBROLA site. The simple Festival end is distributed as part of the system in `festvox_en1.tar.gz'. The following variables are used by the process

mbrola_progname
the pathname of the mbrola executable.
mbrola_database
the name of the database to use. This variable is switched between different speakers.

22.3 Synthesizers in development

In addition to the above synthesizers Festival also supports CSTR's older PSOLA synthesizer written by Paul Taylor. But as the newer diphone synthesizer produces similar quality output and is a newer (and hence a cleaner) implementation further development of the older module is unlikely.

An experimental unit seleciton synthesis module is included in `modules/clunits/' it is an implementation of black97c. It is included for people wishing to continue reserach in the area rather than as a fully usable waveform synthesis engine. Although it sometimes gives excellent results it also sometimes gives amazingly bad ones too. We included this as an example of one possible framework for selection-based synthesis.

As one of our funded projects is to specifically develop new selection based synthesis algorithms we expect to include more models within later versions of the system.

Also, now that Festival has been released other groups are working on new synthesis techniques in the system. Many of these will become available and where possible we will give pointers from the Festival home page to them. Particularly there is an alternative residual excited LPC module implemented at the Center for Spoken Language Understanding (CSLU) at the Oregon Graduate Institute (OGI).


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_23.html0100644001741100001440000002144507332366671017452 0ustar awbusers Festival Speech Synthesis System - 23 Audio output Go to the first, previous, next, last section, table of contents.


23 Audio output

If you have never heard any audio ever on your machine then you must first work out if you have the appropriate hardware. If you do, you also need the appropriate software to drive it. Festival can directly interface with a number of audio systems or use external methods for playing audio.

The currently supported audio methods are

`NAS'
NCD's NAS, is a network transparent audio system (formerly called netaudio). If you already run servers on your machines you simply need to ensure your AUDIOSERVER environment variable is set (or your DISPLAY variable if your audio output device is the same as your X Windows display). You may set NAS as your audio output method by the command
(Parameter.set 'Audio_Method 'netaudio)
`/dev/audio'
On many systems `/dev/audio' offers a simple low level method for audio output. It is limited to mu-law encoding at 8KHz. Some implementations of `/dev/audio' allow other sample rates and sample types but as that is non-standard this method only uses the common format. Typical systems that offer these are Suns, Linux and FreeBSD machines. You may set direct `/dev/audio' access as your audio method by the command
(Parameter.set 'Audio_Method 'sunaudio)
`/dev/audio (16bit)'
Later Sun Microsystems workstations support 16 bit linear audio at various sample rates. Support for this form of audio output is supported. It is a compile time option (as it requires include files that only exist on Sun machines. If your installation supports it (check the members of the list *modules*) you can select 16 bit audio output on Suns by the command
(Parameter.set 'Audio_Method 'sun16audio)
Note this will send it to the local machine where the festival binary is running, this might not be the one you are sitting next to--that's why we recommend netaudio. A hacky solution to playing audio on a local machine from a remote machine without using netaudio is described in section 6 Installation
`/dev/dsp (voxware)'
Both FreeBSD and Linux have a very similar audio interface through `/dev/dsp'. There is compile time support for these in the speech tools and when compiled with that option Festival may utilise it. Check the value of the variable *modules* to see which audio devices are directly supported. On FreeBSD, if supported, you may select local 16 bit linear audio by the command
(Parameter.set 'Audio_Method 'freebsd16audio)
While under Linux, if supported, you may use the command
(Parameter.set 'Audio_Method 'linux16audio)
Some earlier (and smaller machines) only have 8bit audio even though they include a `/dev/dsp' (Soundblaster PRO for example). This was not dealt with properly in earlier versions of the system but now the support automatically checks to see the sample width supported and uses it accordingly. 8 bit at higher frequencies that 8K sounds better than straight 8k ulaw so this feature is useful.
`mplayer'
Under Windows NT or 95 you can use the `mplayer' command which we have found requires special treatement to get its parameters right. Rather than using Audio_Command you can select this on Windows machine with the following command
(Parameter.set 'Audio_Method 'mplayeraudio)
Alternatively built-in audio output is available with
(Parameter.set 'Audio_Method 'win32audio)
`SGI IRIX'
Builtin audio output is now available for SGI's IRIX 6.2 using the command
(Parameter.set 'Audio_Method 'irixaudio)
`Audio Command'
Alternatively the user can provide a command that can play an audio file. Festival will execute that command in an environment where the shell variables SR is set to the sample rate (in Hz) and FILE which, by default, is the name of an unheadered raw, 16bit file containing the synthesized waveform in the byte order of the machine Festival is running on. You can specify your audio play command and that you wish Festival to execute that command through the following command
(Parameter.set 'Audio_Command "sun16play -f $SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
On SGI machines under IRIX the equivalent would be
(Parameter.set 'Audio_Command 
           "sfplay -i integer 16 2scomp rate $SR end $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)

The Audio_Command method of playing waveforms Festival supports two additional audio parameters. Audio_Required_Rate allows you to use Festival's internal sample rate conversion function to any desired rate. Note this may not be as good as playing the waveform at the sample rate it is originally created in, but as some hardware devices are restrictive in what sample rates they support, or have naive resample functions this could be optimal. The second additional audio parameter is Audio_Required_Format which can be used to specify the desired output forms of the file. The default is unheadered raw, but this may be any of the values supported by the speech tools (including nist, esps, snd, riff, aiff, audlab, raw and, if you really want it, ascii). For example suppose you have a program that only plays sun headered files at 16000 KHz you can set up audio output as

(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Rate 16000)
(Parameter.set 'Audio_Required_Format 'snd)
(Parameter.set 'Audio_Command "sunplay $FILE")

Where the audio method supports it, you can specify alternative audio device for machine that have more than one audio device.

(Parameter.set 'Audio_Device "/dev/dsp2")

If Netaudio is not available and you need to play audio on a machine different from teh one Festival is running on we have had reports that `snack' (http://www.speech.kth.se/snack/) is a possible solution. It allows remote play but importnatly also supports Windows 95/NT based clients.

Because you do not want to wait for a whole file to be synthesized before you can play it, Festival also offers an audio spooler that allows the playing of audio files while continuing to synthesize the following utterances. On reasonable workstations this allows the breaks between utterances to be as short as your hardware allows them to be.

The audio spooler may be started by selecting asynchronous mode

(audio_mode async)

This is switched on by default be the function tts. You may put Festival back into synchronous mode (i.e. the utt.play command will wait until the audio has finished playing before returning). by the command

(audio_mode sync)

Additional related commands are

(audio_mode 'close)
Close the audio server down but wait until it is cleared. This is useful in scripts etc. when you wish to only exit when all audio is complete.
(audio_mode 'shutup)
Close the audio down now, stopping the current file being played and any in the queue. Note that this may take some time to take effect depending on which audio method you use. Sometimes there can be 100s of milliseconds of audio in the device itself which cannot be stopped.
(audio_mode 'query)
Lists the size of each waveform currently in the queue.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_24.html0100644001741100001440000006774107332366671017464 0ustar awbusers Festival Speech Synthesis System - 24 Voices Go to the first, previous, next, last section, table of contents.


24 Voices

This chapter gives some general suggestions about adding new voices to Festival. Festival attempts to offer an environment where new voices and languages can easily be slotted in to the system.

24.1 Current voices

Currently there are a number of voices available in Festival and we expect that number to increase. Each is elected via a function of the name `voice_*' which sets up the waveform synthesizer, phone set, lexicon, duration and intonation models (and anything else necessary) for that speaker. These voice setup functions are defined in `lib/voices.scm'.

The current voice functions are

voice_rab_diphone
A British English male RP speaker, Roger. This uses the UniSyn residual excited LPC diphone synthesizer. The lexicon is the computer users version of Oxford Advanced Learners' Dictionary, with letter to sound rules trained from that lexicon. Intonation is provided by a ToBI-like system using a decision tree to predict accent and end tone position. The F0 itself is predicted as three points on each syllable, using linear regression trained from the Boston University FM database (f2b) and mapped to Roger's pitch range. Duration is predicted by decision tree, predicting zscore durations for segments trained from the 460 Timit sentence spoken by another British male speaker.
voice_ked_diphone
An American English male speaker, Kurt. Again this uses the UniSyn residual excited LPC diphone synthesizer. This uses the CMU lexicon, and letter to sound rules trained from it. Intonation as with Roger is trained from the Boston University FM Radio corpus. Duration for this voice also comes from that database.
voice_kal_diphone
An American English male speaker. Again this uses the UniSyn residual excited LPC diphone synthesizer. And like ked, uses the CMU lexicon, and letter to sound rules trained from it. Intonation as with Roger is trained from the Boston University FM Radio corpus. Duration for this voice also comes from that database. This voice was built in two days work and is at least as good as ked due to us understanding the process better. The diphone labels were autoaligned with hand correction.
voice_don_diphone
Steve Isard's LPC based diphone synthesizer, Donovan diphones. The other parts of this voice, lexicon, intonation, and duration are the same as voice_rab_diphone described above. The quality of the diphones is not as good as the other voices because it uses spike excited LPC. Although the quality is not as good it is much faster and the database is much smaller than the others.
voice_el_diphone
A male Castilian Spanish speaker, using the Eduardo Lopez diphones. Alistair Conkie and Borja Etxebarria did much to make this. It has improved recently but is not as comprehensive as our English voices.
voice_gsw_diphone
This offers a male RP speaker, Gordon, famed for many previous CSTR synthesizers, using the standard diphone module. Its higher levels are very similar to the Roger voice above. This voice is not in the standard distribution, and is unlikely to be added for commercial reasons, even though it sounds better than Roger.
voice_en1_mbrola
The Roger diphone set using the same front end as voice_rab_diphone but uses the MBROLA diphone synthesizer for waveform synthesis. The MBROLA synthesizer and Roger diphone database (called en1) is not distributed by CSTR but is available for non-commercial use for free from http://tcts.fpms.ac.be/synthesis/mbrola.html. We do however provide the Festival part of the voice in `festvox_en1.tar.gz'.
voice_us1_mbrola
A female Amercian English voice using our standard US English front end and the us1 database for the MBROLA diphone synthesizer for waveform synthesis. The MBROLA synthesizer and the us1 diphone database is not distributed by CSTR but is available for non-commercial use for free from http://tcts.fpms.ac.be/synthesis/mbrola.html. We provide the Festival part of the voice in `festvox_us1.tar.gz'.
voice_us2_mbrola
A male Amercian English voice using our standard US English front end and the us2 database for the MBROLA diphone synthesizer for waveform synthesis. The MBROLA synthesizer and the us2 diphone database is not distributed by CSTR but is available for non-commercial use for free from http://tcts.fpms.ac.be/synthesis/mbrola.html. We provide the Festival part of the voice in `festvox_us2.tar.gz'.
voice_us3_mbrola
Another male Amercian English voice using our standard US English front end and the us2 database for the MBROLA diphone synthesizer for waveform synthesis. The MBROLA synthesizer and the us2 diphone database is not distributed by CSTR but is available for non-commercial use for free from http://tcts.fpms.ac.be/synthesis/mbrola.html. We provide the Festival part of the voice in `festvox_us1.tar.gz'.

Other voices will become available through time. Groups other than CSTR are working on new voices. Particularly OGI's CSLU have release a number of American English voices, two Mexican Spanish voices and two German voices. All use OGI's their own residual excited LPC synthesizer which is distributed as a plug-in for Festival. (see http://www.cse.ogi.edu/CSLU/research/TTS for details).

Other languages are being worked on including German, Basque, Welsh, Greek and Polish already have been developed and could be release soon. CSTR has a set of Klingon diphones though the text anlysis for Klingon still requires some work (If anyone has access to a good Klingon continous speech corpora please let us know.)

Pointers and examples of voices developed at CSTR and elsewhere will be posted on the Festival home page.

24.2 Building a new voice

This section runs through the definition of a new voice in Festival. Although this voice is simple (it is a simplified version of the distributed spanish voice) it shows all the major parts that must be defined to get Festival to speak in a new voice. Thanks go to Alistair Conkie for helping me define this but as I don't speak Spanish there are probably many mistakes. Hopefully its pedagogical use is better than its ability to be understood in Castille.

A much more detailed document on building voices in Festival has been written and is recommend reading for any one attempting to add a new voice to Festival black99. The information here is a little sparse though gives the basic requirements.

The general method for defining a new voice is to define the parameters for all the various sub-parts e.g. phoneset, duration parameter intonation parameters etc., then defined a function of the form voice_NAME which when called will actually select the voice.

24.2.1 Phoneset

For most new languages and often for new dialects, a new phoneset is required. It is really the basic building block of a voice and most other parts are defined in terms of this set, so defining it first is a good start.

(defPhoneSet
  spanish
  ;;;  Phone Features
  (;; vowel or consonant
   (vc + -)  
   ;; vowel length: short long diphthong schwa
   (vlng s l d a 0)
   ;; vowel height: high mid low
   (vheight 1 2 3 -)
   ;; vowel frontness: front mid back
   (vfront 1 2 3 -)
   ;; lip rounding
   (vrnd + -)
   ;; consonant type: stop fricative affricative nasal liquid
   (ctype s f a n l 0)
   ;; place of articulation: labial alveolar palatal labio-dental
   ;;                         dental velar
   (cplace l a p b d v 0)
   ;; consonant voicing
   (cvox + -)
   )
  ;; Phone set members (features are not! set properly)
  (
   (#  - 0 - - - 0 0 -)
   (a  + l 3 1 - 0 0 -)
   (e  + l 2 1 - 0 0 -)
   (i  + l 1 1 - 0 0 -)
   (o  + l 3 3 - 0 0 -)
   (u  + l 1 3 + 0 0 -)
   (b  - 0 - - + s l +)
   (ch - 0 - - + a a -)
   (d  - 0 - - + s a +)
   (f  - 0 - - + f b -)
   (g  - 0 - - + s p +)
   (j  - 0 - - + l a +)
   (k  - 0 - - + s p -)
   (l  - 0 - - + l d +)
   (ll - 0 - - + l d +)
   (m  - 0 - - + n l +)
   (n  - 0 - - + n d +)
   (ny - 0 - - + n v +)
   (p  - 0 - - + s l -)
   (r  - 0 - - + l p +)
   (rr - 0 - - + l p +)
   (s  - 0 - - + f a +)
   (t  - 0 - - + s t +)
   (th - 0 - - + f d +)
   (x  - 0 - - + a a -)
  )
)
(PhoneSet.silences '(#))

Note some phonetic features may be wrong.

24.2.2 Lexicon and LTS

Spanish is a language whose pronunciation can almost completely be predicted from its orthography so in this case we do not need a list of words and their pronunciations and can do most of the work with letter to sound rules.

Let us first make a lexicon structure as follows

(lex.create "spanish")
(lex.set.phoneset "spanish")

However if we did just want a few entries to test our system without building any letter to sound rules we could add entries directly to the addenda. For example

(lex.add.entry
   '("amigos" nil (((a) 0) ((m i) 1) (g o s))))

A letter to sound rule system for Spanish is quite simple in the format supported by Festival. The following is a good start to a full set.

(lts.ruleset
;  Name of rule set
 spanish
;  Sets used in the rules
(
  (LNS l n s )
  (AEOU a e o u )
  (AEO a e o )
  (EI e i )
  (BDGLMN b d g l m n )
)
;  Rules
(
 ( [ a ] = a )
 ( [ e ] = e )
 ( [ i ] = i )
 ( [ o ] = o )
 ( [ u ] = u )
 ( [ "'" a ] = a1 )   ;; stressed vowels
 ( [ "'" e ] = e1 )
 ( [ "'" i ] = i1 )
 ( [ "'" o ] = o1 )
 ( [ "'" u ] = u1 )
 ( [ b ] = b )
 ( [ v ] = b )
 ( [ c ] "'" EI = th )
 ( [ c ] EI = th )
 ( [ c h ] = ch )
 ( [ c ] = k )
 ( [ d ] = d )
 ( [ f ] = f )
 ( [ g ] "'" EI = x )
 ( [ g ] EI = x )
 ( [ g u ] "'" EI = g )
 ( [ g u ] EI = g )
 ( [ g ] = g )
 ( [ h u e ] = u e )
 ( [ h i e ] = i e )
 ( [ h ] =  )
 ( [ j ] = x )
 ( [ k ] = k )
 ( [ l l ] # = l )
 ( [ l l ] = ll )
 ( [ l ] = l )
 ( [ m ] = m )
 ( [ ~ n ] = ny )
 ( [ n ] = n )
 ( [ p ] = p )
 ( [ q u ] = k )
 ( [ r r ] = rr )
 ( # [ r ] = rr )
 ( LNS [ r ] = rr )
 ( [ r ] = r )
 ( [ s ] BDGLMN = th )
 ( [ s ] = s )
 ( # [ s ] C = e s )
 ( [ t ] = t )
 ( [ w ] = u )
 ( [ x ] = k s )
 ( AEO [ y ] = i )
 ( # [ y ] # = i )
 ( [ y ] = ll )
 ( [ z ] = th )
))

We could simply set our lexicon to use the above letter to sound system with the following command

(lex.set.lts.ruleset 'spanish)

But this would not deal with upper case letters. Instead of writing new rules for upper case letters we can define that a Lisp function be called when looking up a word and intercept the lookup with our own function. First we state that unknown words should call a function, and then define the function we wish called. The actual link to ensure our function will be called is done below at lexicon selection time

(define (spanish_lts word features)
  "(spanish_lts WORD FEATURES)
Using letter to sound rules build a spanish pronunciation of WORD."
  (list word
        nil
        (lex.syllabify.phstress (lts.apply (downcase word) 'spanish))))
(lex.set.lts.method spanish_lts)

In the function we downcase the word and apply the LTS rule to it. Next we syllabify it and return the created lexical entry.

24.2.3 Phrasing

Without detailed labelled databases we cannot build statistical models of phrase breaks, but we can simply build a phrase break model based on punctuation. The following is a CART tree to predict simple breaks, from punctuation.

(set! spanish_phrase_cart_tree
'
((lisp_token_end_punc in ("?" "." ":"))
  ((BB))
  ((lisp_token_end_punc in ("'" "\"" "," ";"))
   ((B))
   ((n.name is 0)  ;; end of utterance
    ((BB))
    ((NB))))))

24.2.4 Intonation

For intonation there are number of simple options without requiring training data. For this example we will simply use a hat pattern on all stressed syllables in content words and on single syllable content words. (i.e. Simple) Thus we need an accent prediction CART tree.

(set! spanish_accent_cart_tree
 '
  ((R:SylStructure.parent.gpos is content)
   ((stress is 1)
    ((Accented))
    ((position_type is single)
     ((Accented))
     ((NONE))))
   ((NONE))))

We also need to specify the pitch range of our speaker. We will be using a male Spanish diphone database of the follow range

(set! spanish_el_int_simple_params
    '((f0_mean 120) (f0_std 30)))

24.2.5 Duration

We will use the trick mentioned above for duration prediction. Using the zscore CART tree method, we will actually use it to predict factors rather than zscores.

The tree predicts longer durations in stressed syllables and in clause initial and clause final syllables.

(set! spanish_dur_tree
 '
   ((R:SylStructure.parent.R:Syllable.p.syl_break > 1 ) ;; clause initial
    ((R:SylStructure.parent.stress is 1)
     ((1.5))
     ((1.2)))
    ((R:SylStructure.parent.syl_break > 1)   ;; clause final
     ((R:SylStructure.parent.stress is 1)
      ((2.0))
      ((1.5)))
     ((R:SylStructure.parent.stress is 1)
      ((1.2))
      ((1.0))))))

In addition to the tree we need durations for each phone in the set

(set! spanish_el_phone_data
'(
   (# 0.0 0.250)
   (a 0.0 0.090)
   (e 0.0 0.090)
   (i 0.0 0.080)
   (o 0.0 0.090)
   (u 0.0 0.080)
   (b 0.0 0.065)
   (ch 0.0 0.135)
   (d 0.0 0.060)
   (f 0.0 0.100)
   (g 0.0 0.080)
   (j 0.0 0.100)
   (k 0.0 0.100)
   (l 0.0 0.080)
   (ll 0.0 0.105)
   (m 0.0 0.070)
   (n 0.0 0.080)
   (ny 0.0 0.110)
   (p 0.0 0.100)
   (r 0.0 0.030)
   (rr 0.0 0.080)
   (s 0.0 0.110)
   (t 0.0 0.085)
   (th 0.0 0.100)
   (x 0.0 0.130)
))

24.2.6 Waveform synthesis

There are a number of choices for waveform synthesis currently supported. MBROLA supports Spanish, so we could use that. But their Spanish diphones in fact use a slightly different phoneset so we would need to change the above definitions to use it effectively. Here we will use a diphone database for Spanish recorded by Eduardo Lopez when he was a Masters student some years ago.

Here we simply load our pre-built diphone database

(us_diphone_init
   (list
    '(name "el_lpc_group")
    (list 'index_file 
          (path-append spanish_el_dir "group/ellpc11k.group"))
    '(grouped "true")
    '(default_diphone "#-#")))

24.2.7 Voice selection function

The standard way to define a voice in Festival is to define a function of the form voice_NAME which selects all the appropriate parameters. Because the definition below follows the above definitions we know that everything appropriate has been loaded into Festival and hence we just need to select the appropriate a parameters.

(define (voice_spanish_el)
"(voice_spanish_el)
Set up synthesis for Male Spanish speaker: Eduardo Lopez"
  (voice_reset)
  (Parameter.set 'Language 'spanish)  
  ;; Phone set
  (Parameter.set 'PhoneSet 'spanish)
  (PhoneSet.select 'spanish)
  (set! pos_lex_name nil)
  ;; Phrase break prediction by punctuation
  (set! pos_supported nil)
  ;; Phrasing
  (set! phrase_cart_tree spanish_phrase_cart_tree)
  (Parameter.set 'Phrase_Method 'cart_tree)
  ;; Lexicon selection
  (lex.select "spanish")
  ;; Accent prediction
  (set! int_accent_cart_tree spanish_accent_cart_tree)
  (set! int_simple_params spanish_el_int_simple_params)
  (Parameter.set 'Int_Method 'Simple)
  ;; Duration prediction
  (set! duration_cart_tree spanish_dur_tree)
  (set! duration_ph_info spanish_el_phone_data)
  (Parameter.set 'Duration_Method 'Tree_ZScores)
  ;; Waveform synthesizer: diphones
  (Parameter.set 'Synth_Method 'UniSyn)
  (Parameter.set 'us_sigpr 'lpc)
  (us_db_select 'el_lpc_group)

  (set! current-voice 'spanish_el)
)

(provide 'spanish_el)

24.2.8 Last remarks

We save the above definitions in a file `spanish_el.scm'. Now we can declare the new voice to Festival. See section 24.3 Defining a new voice for a description of methods for adding new voices. For testing purposes we can explciitly load the file `spanish_el.scm'

The voice is now available for use in festival.

festival> (voice_spanish_el)
spanish_el
festival> (SayText "hola amigos")
<Utterance 0x04666>

As you can see adding a new voice is not very difficult. Of course there is quite a lot more than the above to add a high quality robust voice to Festival. But as we can see many of the basic tools that we wish to use already exist. The main difference between the above voice and the English voices already in Festival are that their models are better trained from databases. This produces, in general, better results, but the concepts behind them are basically the same. All of those trainable methods may be parameterized with data for new voices.

As Festival develops, more modules will be added with better support for training new voices so in the end we hope that adding in high quality new voices is actually as simple as (or indeed simpler than) the above description.

24.2.9 Resetting globals

Because the version of Scheme used in Festival only has a single flat name space it is unfortunately too easy for voices to set some global which accidentally affects all other voices selected after it. Because of this problem we have introduced a convention to try to minimise the possibility of this becoming a problem. Each voice function defined should always call voice_reset at the start. This will reset any globals and also call a tidy up function provided by the previous voice function.

Likewise in your new voice function you should provide a tidy up function to reset any non-standard global variables you set. The function current_voice_reset will be called by voice_reset. If the value of current_voice_reset is nil then it is not called. voice_reset sets current_voice_reset to nil, after calling it.

For example suppose some new voice requires the audio device to be directed to a different machine. In this example we make the giant's voice go through the netaudio machine big_speakers while the standard voice go through small_speakers.

Although we can easily select the machine big_speakers as out when our voice_giant is called, we also need to set it back when the next voice is selected, and don't want to have to modify every other voice defined in the system. Let us first define two functions to selection the audio output.

(define (select_big)
  (set! giant_previous_audio (getenv "AUDIOSERVER"))
  (setenv "AUDIOSERVER" "big_speakers"))

(define (select_normal)
  (setenv "AUDIOSERVER" giant_previous_audio))

Note we save the previous value of AUDIOSERVER rather than simply assuming it was small_speakers.

Our definition of voice_giant definition of voice_giant will look something like

(define (voice_giant)
"comment comment ..."
   (voice_reset)  ;; get into a known state
   (select_big)
   ;;; other giant voice parameters
   ...

   (set! current_voice_rest select_normal)
   (set! current-voice 'giant))

The obvious question is which variables should a voice reset. Unfortunately there is not a definitive answer to that. To a certain extent I don't want to define that list as there will be many variables that will by various people in Festival which are not in the original distribution and we don't want to restrict them. The longer term answer is some for of partitioning of the Scheme name space perhaps having voice local variables (cf. Emacs buffer local variables). But ultimately a voice may set global variables which could redefine the operation of later selected voices and there seems no real way to stop that, and keep the generality of the system.

Note the convention of setting the global current-voice as the end of any voice definition file. We do not enforce this but probabaly should. The variable current-voice at any time should identify the current voice, the voice description information (described below) will relate this name to properties identifying it.

24.3 Defining a new voice

As there are a number of voices available for Festival and they may or may not exists in different installations we have tried to make it as simple as possible to add new voices to the system without having to change any of the basic distribution. In fact if the voices use the following standard method for describing themselves it is merely a matter of unpacking them in order for them to be used by the system.

The variable voice-path conatins a list of directories where voices will be automatically searched for. If this is not set it is set automatically by appending `/voices/' to all paths in festival load-path. You may add new directories explicitly to this variable in your `sitevars.scm' file or your own `.festivalrc' as you wish.

Each voice directory is assumed to be of the form

LANGUAGE/VOICENAME/

Within the VOICENAME/ directory itself it is assumed there is a file `festvox/VOICENAME.scm' which when loaded will define the voice itself. The actual voice function should be called voice_VOICENAME.

For example the voices distributed with the standard Festival distribution all unpack in `festival/lib/voices'. The Amercan voice `ked_diphone' unpacks into

festival/lib/voices/english/ked_diphone/

Its actual definition file is in

festival/lib/voices/english/ked_diphone/festvox/ked_diphone.scm

Note the name of the directory and the name of the Scheme definition file must be the same.

Alternative voices using perhaps a different encoding of the database but the same front end may be defined in the same way by using symbolic links in the langauge directoriy to the main directory. For example a PSOLA version of the ked voice may be defined in

festival/lib/voices/english/ked_diphone/festvox/ked_psola.scm

Adding a symbole link in `festival/lib/voices/english/' ro `ked_diphone' called `ked_psola' will allow that voice to be automatically registered when Festival starts up.

Note that this method doesn't actually load the voices it finds, that could be prohibitively time consuming to the start up process. It blindly assumes that there is a file `VOICENAME/festvox/VOICENAME.scm' to load. An autoload definition is given for voice_VOICENAME which when called will load that file and call the real definition if it exists in the file.

This is only a recommended method to make adding new voices easier, it may be ignored if you wish. However we still recommend that even if you use your own convetions for adding new voices you consider the autoload function to define them in, for example, the `siteinit.scm' file or `.festivalrc'. The autoload function takes three arguments: a function name, a file containing the actual definiton and a comment. For example a definition of voice can be done explicitly by

(autooad voice_f2b  "/home/awb/data/f2b/ducs/f2b_ducs" 
     "American English female f2b")))

Of course you can also load the definition file explicitly if you wish.

In order to allow the system to start making intellegent use of voices we recommend that all voice definitions include a call to the function voice_proclaim this allows the system to know some properties about the voice such as language, gender and dialect. The proclaim_voice function taks two arguments a name (e.g. rab_diphone and an assoc list of features and names. Currently we require language, gender, dialect and description. The last being a textual description of the voice itself. An example proclaimation is

(proclaim_voice
 'rab_diphone
 '((language english)
   (gender male)
   (dialect british)
   (description
    "This voice provides a British RP English male voice using a
     residual excited LPC diphone synthesis method.  It uses a 
     modified Oxford Advanced Learners' Dictionary for pronunciations.
     Prosodic phrasing is provided by a statistically trained model
     using part of speech and local distribution of breaks.  Intonation
     is provided by a CART tree predicting ToBI accents and an F0 
     contour generated from a model trained from natural speech.  The
     duration model is also trained from data using a CART tree.")))

There are functions to access a description. voice.description will return the description for a given voice and will load that voice if it is not already loaded. voice.describe will describe the given given voice by synthesizing the textual description using the current voice. It would be nice to use the voice itself to give a self introduction but unfortunately that introduces of problem of decide which language the description should be in, we are not all as fluent in welsh as we'd like to be.

The function voice.list will list the potential voices in the system. These are the names of voices which have been found in the voice-path. As they have not actaully been loaded they can't actually be confirmed as usable voices. One solution to this would be to load all voices at start up time which would allow confirmation they exist and to get their full description through proclaim_voice. But start up is already too slow in festival so we have to accept this stat for the time being. Splitting the description of the voice from the actual definition is a possible solution to this problem but we have not yet looked in to this.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_25.html0100644001741100001440000003452307332366671017455 0ustar awbusers Festival Speech Synthesis System - 25 Tools Go to the first, previous, next, last section, table of contents.


25 Tools

A number of basic data manipulation tools are supported by Festival. These often make building new modules very easy and are already used in many of the existing modules. They typically offer a Scheme method for entering data, and Scheme and C++ functions for evaluating it.

25.1 Regular expressions

Regular expressions are a formal method for describing a certain class of mathematical languages. They may be viewed as patterns which match some set of strings. They are very common in many software tools such as scripting languages like the UNIX shell, PERL, awk, Emacs etc. Unfortunately the exact form of regualr expressions often differs slightly between different applications making their use often a little tricky.

Festival support regular expressions based mainly of the form used in the GNU libg++ Regex class, though we have our own implementation of it. Our implementation (EST_Regex) is actually based on Henry Spencer's `regex.c' as distributed with BSD 4.4.

Regular expressions are represented as character strings which are interpreted as regular expressions by certain Scheme and C++ functions. Most characters in a regular expression are treated as literals and match only that character but a number of others have special meaning. Some characters may be escaped with preceeding backslashes to change them from operators to literals (or sometime literals to operators).

.
Matches any character.
$
matches end of string
^
matches beginning of string
X*
matches zero or more occurrences of X, X may be a character, range of parenthesized expression.
X+
matches one or more occurrences of X, X may be a character, range of parenthesized expression.
X?
matches zero or one occurrence of X, X may be a character, range of parenthesized expression.
[...]
a ranges matches an of the values in the brackets. The range operator "-" allows specification of ranges e.g. a-z for all lower case characters. If the first character of the range is ^ then it matches anything character except those specificed in the range. If you wish - to be in the range you must put that first.
\\(...\\)
Treat contents of parentheses as single object allowing operators *, +, ? etc to operate on more than single characters.
X\\|Y
matches either X or Y. X or Y may be single characters, ranges or parenthesized expressions.

Note that actuall only one backslash is needed before a character to escape it but becuase these expressions are most often contained with Scheme or C++ strings, the escpae mechanaism for those strings requires that backslash itself be escaped, hence you will most often be required to type two backslashes.

Some example may help in enderstanding the use of regular expressions.

a.b
matches any three letter string starting with an a and ending with a b.
.*a
matches any string ending in an a
.*a.*
matches any string containing an a
[A-Z].*
matches any string starting with a capital letter
[0-9]+
matches any string of digits
-?[0-9]+\\(\\.[0-9]+\\)?
matches any positive or negative real number. Note the optional preceeding minus sign and the optional part contain the point and following numbers. The point itself must be escaped as dot on its own matches any character.
[^aeiouAEIOU]+
mathes any non-empty string which doesn't conatin a vowel
\\([Ss]at\\(urday\\)\\)?\\|\\([Ss]un\\(day\\)\\)
matches Saturday and Sunday in various ways

The Scheme function string-matches takes a string and a regular expression and returns t if the regular expression macthes the string and nil otherwise.

25.2 CART trees

One of the basic tools available with Festival is a system for building and using Classification and Regression Trees (breiman84). This standard statistical method can be used to predict both categorical and continuous data from a set of feature vectors.

The tree itself contains yes/no questions about features and ultimately provides either a probability distribution, when predicting categorical values (classification tree), or a mean and standard deviation when predicting continuous values (regression tree). Well defined techniques can be used to construct an optimal tree from a set of training data. The program, developed in conjunction with Festival, called `wagon', distributed with the speech tools, provides a basic but ever increasingly powerful method for constructing trees.

A tree need not be automatically constructed, CART trees have the advantage over some other automatic training methods, such as neural networks and linear regression, in that their output is more readable and often understandable by humans. Importantly this makes it possible to modify them. CART trees may also be fully hand constructed. This is used, for example, in generating some duration models for languages we do not yet have full databases to train from.

A CART tree has the following syntax

    CART ::= QUESTION-NODE || ANSWER-NODE
    QUESTION-NODE ::= ( QUESTION YES-NODE NO-NODE )
    YES-NODE ::= CART
    NO-NODE ::= CART
    QUESTION ::= ( FEATURE in LIST )
    QUESTION ::= ( FEATURE is STRVALUE )
    QUESTION ::= ( FEATURE = NUMVALUE )
    QUESTION ::= ( FEATURE > NUMVALUE )
    QUESTION ::= ( FEATURE < NUMVALUE )
    QUESTION ::= ( FEATURE matches REGEX )
    ANSWER-NODE ::= CLASS-ANSWER || REGRESS-ANSWER
    CLASS-ANSWER ::= ( (VALUE0 PROB) (VALUE1 PROB) ... MOST-PROB-VALUE )
    REGRESS-ANSWER ::= ( ( STANDARD-DEVIATION MEAN ) )

Note that answer nodes are distinguished by their car not being atomic.

The interpretation of a tree is with respect to a Stream_Item The FEATURE in a tree is a standard feature (see section 14.6 Features).

The following example tree is used in one of the Spanish voices to predict variations from average durations.

(set! spanish_dur_tree
 '
(set! spanish_dur_tree
 '
   ((R:SylStructure.parent.R:Syllable.p.syl_break > 1 ) ;; clause initial
    ((R:SylStructure.parent.stress is 1)
     ((1.5))
     ((1.2)))
    ((R:SylStructure.parent.syl_break > 1)   ;; clause final
     ((R:SylStructure.parent.stress is 1)
      ((2.0))
      ((1.5)))
     ((R:SylStructure.parent.stress is 1)
      ((1.2))
      ((1.0))))))

It is applied to the segment stream to give a factor to multiply the average by.

wagon is constantly improving and with version 1.2 of the speech tools may now be considered fairly stable for its basic operations. Experimental features are described in help it gives. See the Speech Tools manual for a more comprehensive discussion of using `wagon'.

However the above format of trees is similar to those produced by many other systems and hence it is reasonable to translate their formats into one which Festival can use.

25.3 Ngrams

Bigram, trigrams, and general ngrams are used in the part of speech tagger and the phrase break predicter. An Ngram C++ Class is defined in the speech tools library and some simple facilities are added within Festival itself.

Ngrams may be built from files of tokens using the program ngram_build which is part of the speech tools. See the speech tools documentation for details.

Within Festival ngrams may be named and loaded from files and used when required. The LISP function load_ngram takes a name and a filename as argument and loads the Ngram from that file. For an example of its use once loaded see `src/modules/base/pos.cc' or `src/modules/base/phrasify.cc'.

25.4 Viterbi decoder

Another common tool is a Viterbi decoder. This C++ Class is defined in the speech tools library `speech_tooks/include/EST_viterbi.h' and `speech_tools/stats/EST_viterbi.cc'. A Viterbi decoder requires two functions at declaration time. The first constructs candidates at each stage, while the second combines paths. A number of options are available (which may change).

The prototypical example of use is in the part of speech tagger which using standard Ngram models to predict probabilities of tags. See `src/modules/base/pos.cc' for an example.

The Viterbi decoder can also be used through the Scheme function Gen_Viterbi. This function respects the parameters defined in the variable get_vit_params. Like other modules this parameter list is an assoc list of feature name and value. The parameters supported are:

Relation
The name of the relation the decoeder is to be applied to.
cand_function
A function that is to be called for each item that will return a list of candidates (with probilities).
return_feat
The name of a feature that the best candidate is to be returned in for each item in the named relation.
p_word
The previous word to the first item in the named relation (only used when ngrams are the "language model").
pp_word
The previous previous word to the first item in the named relation (only used when ngrams are the "language model").
ngramname
the name of an ngram (loaded by ngram.load) to be used as a "language model".
wfstmname
the name of a WFST (loaded by wfst.load) to be used as a "language model", this is ignored if an ngramname is also specified.
debug
If specified more debug features are added to the items in the relation.
gscale_p
Grammar scaling factor.

Here is a short example to help make the use of this facility clearer.

There are two parts required for the Viterbi decode a set of candidate observations and some "language model". For the math to work properly the candidate observations must be reverse probabilities (for each candidiate as given what is the probability of the observation, rather than the probability of the candidate given the observation). These can be calculated for the probabilties candidate given the observation divided by the probability of the candidate in isolation.

For the sake of simplicity let us assume we have a lexicon of words to distribution of part of speech tags with reverse probabilities. And an tri-gram called pos-tri-gram over ngram sequences of part of speech tags. First we must define the candidate function

(define (pos_cand_function w)
 ;; select the appropriate lexicon
 (lex.select 'pos_lex)
 ;; return the list of cands with rprobs
 (cadr 
  (lex.lookup (item.name w) nil)))

The returned candidate list would look somthing like

( (jj -9.872) (vbd -6.284) (vbn -5.565) )

Our part of speech tagger function would look something like this

(define (pos_tagger utt)
  (set! get_vit_params
        (list
         (list 'Relation "Word")
         (list 'return_feat 'pos_tag)
         (list 'p_word "punc")
         (list 'pp_word "nn")
         (list 'ngramname "pos-tri-gram")
         (list 'cand_function 'pos_cand_function)))
  (Gen_Viterbi utt)
  utt)

this will assign the optimal part of speech tags to each word in utt.

25.5 Linear regression

The linear regression model takes models built from some external package and finds coefficients based on the features and weights. A model consists of a list of features. The first should be the atom Intercept plus a value. The following in the list should consist of a feature (see section 14.6 Features) followed by a weight. An optional third element may be a list of atomic values. If the result of the feature is a member of this list the feature's value is treated as 1 else it is 0. This third argument allows an efficient way to map categorical values into numeric values. For example, from the F0 prediction model in `lib/f2bf0lr.scm'. The first few parameters are

(set! f2b_f0_lr_start
'(
   ( Intercept 160.584956 )
   ( Word.Token.EMPH 36.0 )
   ( pp.tobi_accent 10.081770 (H*) )
   ( pp.tobi_accent 3.358613 (!H*) )
   ( pp.tobi_accent 4.144342 (*? X*? H*!H* * L+H* L+!H*) )
   ( pp.tobi_accent -1.111794 (L*) )
   ...
)

Note the feature pp.tobi_accent returns an atom, and is hence tested with the map groups specified as third arguments.

Models may be built from feature data (in the same format as `wagon' using the `ols' program distributed with the speech tools library.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_26.html0100644001741100001440000003052707332366671017456 0ustar awbusers Festival Speech Synthesis System - 26 Building models from databases Go to the first, previous, next, last section, table of contents.


26 Building models from databases

Because our research interests tend towards creating statistical models trained from real speech data, Festival offers various support for extracting information from speech databases, in a way suitable for building models.

Models for accent prediction, F0 generation, duration, vowel reduction, homograph disambiguation, phrase break assignment and unit selection have been built using Festival to extract and process various databases.

26.1 Labelling databases

In order for Festival to use a database it is most useful to build utterance structures for each utterance in the database. As discussed earlier, utterance structures contain relations of items. Given such a structure for each utterance in a database we can easily read in the utterance representation and access it, dumping information in a normalised way allowing for easy building and testing of models.

Of course the level of labelling that exists, or that you are willing to do by hand or using some automatic tool, for a particular database will vary. For many purposes you will at least need phonetic labelling. Hand labelled data is still better than auto-labelled data, but that could change. The size and consistency of the data is important too.

For this discussion we will assume labels for: segments, syllables, words, phrases, intonation events, pitch targets. Some of these can be derived, some need to be labelled. This would not fail with less labelling but of course you wouldn't be able to extract as much information from the result.

In our databases these labels are in Entropic's Xlabel format, though it is fairly easy to convert any reasonable format.

Segment
These give phoneme labels for files. Note the these labels must be members of the phoneset that you will be using for this database. Often phone label files may contain extra labels (e.g. beginning and end silence) which are not really part of the phoneset. You should remove (or re-label) these phones accordingly.
Word
Again these will need to be provided. The end of the word should come at the last phone in the word (or just after). Pauses/silences should not be part of the word.
Syllable
There is a chance these can be automatically generated from Word and Segment files given a lexicon. Ideally these should include lexical stress.
IntEvent
These should ideally mark accent/boundary tone type for each syllable, but this almost definitely requires hand-labelling. Also given that hand-labelling of accent type is harder and not as accurate, it is arguable that anything other than accented vs. non-accented can be used reliably.
Phrase
This could just mark the last non-silence phone in each utterance, or before any silence phones in the whole utterance.
Target
This can be automatically derived from an F0 file and the Segment files. A marking of the mean F0 in each voiced phone seem to give adequate results.

Once these files are created an utterance file can be automatically created from the above data. Note it is pretty easy to get the streams right but getting the relations between the streams is much harder. Firstly labelling is rarely accurate and small windows of error must be allowed to ensure things line up properly. The second problem is that some label files identify point type information (IntEvent and Target) while others identify segments (e.g. Segment, Words etc.). Relations have to know this in order to get it right. For example is not right for all syllables between two IntEvents to be linked to the IntEvent, only to the Syllable the IntEvent is within.

The script `festival/examples/make_utts' is an example Festival script which automatically builds the utterance files from the above labelled files.

The script, by default assumes, a hierarchy in an database directory of the following form. Under a directory `festival/' where all festival specific database ifnromation can be kept, a directory `relations/' contains a subdirectory for each basic relation (e.g. `Segment/', `Syllable/', etc.) Each of which contains the basic label files for that relation.

The following command will build a set of utterance structures (including building hte relations that link between these basic relations).

make_utts -phoneset radio festival/relation/Segment/*.Segment

This will create utterances in `festival/utts/'. There are a number of options to `make_utts' use `-h' to find them. The `-eval' option allows extra scheme code to be loaded which may be called by the utterance building process. The function make_utts_user_function will be called on all utterance created. Redefining that in database specific loaded code will allow database specific fixed to the utterance.

26.2 Extracting features

The easiest way to extract features from a labelled database of the form described in the previous section is by loading in each of the utterance structures and dumping the desired features.

Using the same mechanism to extract the features as will eventually be used by models built from the features has the important advantage of avoiding spurious errors easily introduced when collecting data. For example a feature such as n.accent in a Festival utterance will be defined as 0 when there is no next accent. Extracting all the accents and using an external program to calculate the next accent may make a different decision so that when the generated model is used a different value for this feature will be produced. Such mismatches in training models and actual use are unfortunately common, so using the same mechanism to extract data for training, and for actual use is worthwhile.

The recommedn method for extracting features is using the festival script `dumpfeats'. It basically takes a list of feature names and a list of utterance files and dumps the desired features.

Features may be dumped into a single file or into separate files one for each utterance. Feature names may be specified on the command line or in a separate file. Extar code to define new features may be loaded too.

For example suppose we wanted to save the features for a set of utterances include the duration, phone name, previous and next phone names for all segments in each utterance.

dumpfeats -feats "(segment_duration name p.name n.name)" \
          -output feats/%s.dur -relation Segment \
          festival/utts/*.utt

This will save these features in files named for the utterances they come from in the directory `feats/'. The argument to `-feats' is treated as literal list only if it starts with a left parenthesis, otherwise it is treated as a filename contain named features (unbracketed).

Extra code (for new feature definitions) may be loaded through the `-eval' option. If the argument to `-eval' starts with a left parenthesis it is trated as an s-expression rather than a filename and is evaluated. If argument `-output' contains "%s" it will be filled in with the utterance's filename, if it is a simple filename the features from all utterances will be saved in that same file. The features for each item in the named relation are saved on a single line.

26.3 Building models

This section describes how to build models from data extracted from databases as described in the previous section. It uses the CART building program, `wagon' which is available in the speech tools distribution. But the data is suitable for many other types of model building techniques, such as linear regression or neural networks.

Wagon is described in the speech tools manual, though we will cover simple use here. To use Wagon you need a datafile and a data description file.

A datafile consists of a number of vectors one per line each containing the same number of fields. This, not coincidentally, is exactly the format produced by `dumpfeats' described in the previous section. The data description file describes the fields in the datafile and their range. Fields may be of any of the following types: class (a list of symbols), floats, or ignored. Wagon will build a classification tree if the first field (the predictee) is of type class, or a regression tree if the first field is a float. An example data description file would be

(
( duration float )
( name # @ @@ a aa ai au b ch d dh e e@ ei f g h i i@ ii jh k l m n 
    ng o oi oo ou p r s sh t th u u@ uh uu v w y z zh )
( n.name # @ @@ a aa ai au b ch d dh e e@ ei f g h i i@ ii jh k l m n 
    ng o oi oo ou p r s sh t th u u@ uh uu v w y z zh )
( p.name # @ @@ a aa ai au b ch d dh e e@ ei f g h i i@ ii jh k l m n 
    ng o oi oo ou p r s sh t th u u@ uh uu v w y z zh )
( R:SylStructure.parent.position_type 0 final initial mid single )
( pos_in_syl float )
( syl_initial 0 1 )
( syl_final 0 1)
( R:SylStructure.parent.R:Syllable.p.syl_break 0 1 3 )
( R:SylStructure.parent.syl_break 0 1 3 4 )
( R:SylStructure.parent.R:Syllable.n.syl_break 0 1 3 4 )
( R:SylStructure.parent.R:Syllable.p.stress 0 1 )
( R:SylStructure.parent.stress 0 1 )
( R:SylStructure.parent.R:Syllable.n.stress 0 1 )
)

The script `speech_tools/bin/make_wagon_desc' goes some way to helping. Given a datafile and a file containing the field names, it will construct an approximation of the description file. This file should still be edited as all fields are treated as of type class by `make_wagon_desc' and you may want to change them some of them to float.

The data file must be a single file, although we created a number of feature files by the process described in the previous section. From a list of file ids select, say, 80% of them, as training data and cat them into a single datafile. The remaining 20% may be catted together as test data.

To build a tree use a command like

wagon -desc DESCFILE -data TRAINFILE -test TESTFILE

The minimum cluster size (default 50) may be reduced using the command line option -stop plus a number.

Varying the features and stop size may improve the results.

Building the models and getting good figures is only one part of the process. You must integrate this model into Festival if its going to be of any use. In the case of CART trees generated by Wagon, Festival supports these directly. In the case of CART trees predicting zscores, or factors to modify duration averages, ees can be used as is.

Note there are other options to Wagon which may help build better CART models. Consult the chapter in the speech tools manual on Wagon for more information.

Other parts of the distributed system use CART trees, and linear regression models that were training using the processes described in this chapter. Some other parts of the distributed system use CART trees which were written by hand and may be improved by properly applying these processes.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_27.html0100644001741100001440000005674207332366671017466 0ustar awbusers Festival Speech Synthesis System - 27 Programming Go to the first, previous, next, last section, table of contents.


27 Programming

This chapter covers aspects of programming within the Festival environment, creating new modules, and modifying existing ones. It describes basic Classes available and gives some particular examples of things you may wish to add.

27.1 The source code

The ultimate authority on what happens in the system lies in the source code itself. No matter how hard we try, and how automatic we make it, the source code will always be ahead of the documentation. Thus if you are going to be using Festival in a serious way, familiarity with the source is essential.

The lowest level functions are catered for in the Edinburgh Speech Tools, a separate library distributed with Festival. The Edinburgh Speech Tool Library offers the basic utterance structure, waveform file access, and other various useful low-level functions which we share between different speech systems in our work. See section `Overview' in Edinburgh Speech Tools Library Manual.

The directory structure for the Festival distribution reflects the conceptual split in the code.

`./bin/'
The user-level executable binaries and scripts that are part of the festival system. These are simple symbolic links to the binaries or if the system is compiled with shared libraries small wrap-around shell scripts that set LD_LIBRARY_PATH appropriately
`./doc/'
This contains the texinfo documentation for the whole system. The `Makefile' constructs the info and/or html version as desired. Note that the festival binary itself is used to generate the lists of functions and variables used within the system, so must be compiled and in place to generate a new version of the documentation.
`./examples/'
This contains various examples. Some are explained within this manual, others are there just as examples.
`./lib/'
The basic Scheme parts of the system, including `init.scm' the first file loaded by festival at start-up time. Depending on your installation, this directory may also contain subdirectories containing lexicons, voices and databases. This directory and its sub-directories are used by Festival at run-time.
`./lib/etc/'
Executables for Festival's internal use. A subdirectory containing at least the audio spooler will be automatically created (one for each different architecture the system is compiled on). Scripts are added to this top level directory itself.
`./lib/voices/'
By default this contains the voices used by Festival including their basic Scheme set up functions as well as the diphone databases.
`./lib/dicts/'
This contains various lexicon files distributed as part of the system.
`./config/'
This contains the basic `Makefile' configuration files for compiling the system (run-time configuration is handled by Scheme in the `lib/' directory). The file `config/config' created as a copy of the standard `config/config-dist' is the installation specific configuration. In most cases a simpel copy of the distribution file will be sufficient.
`./src/'
The main C++/C source for the system.
`./src/lib/'
Where the `libFestival.a' is built.
`./src/include/'
Where include files shared between various parts of the system live. The file `festival.h' provides access to most of the parts of the system.
`./src/main/'
Contains the top level C++ files for the actual executables. This is directory where the executable binary `festival' is created.
`./src/arch/'
The main core of the Festival system. At present everything is held in a single sub-directory `./src/arc/festival/'. This contains the basic core of the synthesis system itself. This directory contains lisp front ends to access the core utterance architecture, and phonesets, basic tools like, client/server support, ngram support, etc, and an audio spooler.
`./src/modules/'
In contrast to the `arch/' directory this contains the non-core parts of the system. A set of basic example modules are included with the standard distribution. These are the parts that do the synthesis, the other parts are just there to make module writing easier.
`./src/modules/base/'
This contains some basic simple modules that weren't quite big enough to deserve their own directory. Most importantly it includes the Initialize module called by many synthesis methods which sets up an utterance structure and loads in initial values. This directory also contains phrasing, part of speech, and word (syllable and phone construction from words) modules.
`./src/modules/Lexicon/'
This is not really a module in the true sense (the Word module is the main user of this). This contains functions to construct, compile, and access lexicons (entries of words, part of speech and pronunciations). This also contains a letter-to-sound rule system.
`./src/modules/Intonation/'
This contains various intonation systems, from the very simple to quite complex parameter driven intonation systems.
`./src/modules/Duration/'
This contains various duration prediction systems, from the very simple (fixed duration) to quite complex parameter driven duration systems.
`./src/modules/UniSyn/'
A basic diphone synthesizer system, supporting a simple database format (which can be grouped into a more efficient binary representation). It is multi-lingual, and allows multiple databases to be loaded at once. It offers a choice of concatenation methods for diphones: residual excited LPC or PSOLA (TM) (which is not distributed)
`./src/modules/Text/'
Various text analysis functions, particularly the tokenizer and utterance segmenter (from arbitrary files). This directory also contains the support for text modes and SGML.
`./src/modules/donovan/'
An LPC based diphone synthesizer. Very small and neat.
`./src/modules/rxp/'
The Festival/Scheme front end to An XML parser written by Richard Tobin from University of Edinburgh's Language Technology Group.. rxp is now part of the speech tools rather than just Festival.
`./src/modules/parser'
A simple interface the the Stochastic Context Free Grammar parser in the speech tools library.
`./src/modules/diphone'
An optional module contain the previouslty used diphone synthsizer.
`./src/modules/clunits'
A partial implementation of a cluster unit selection algorithm as described in black97c.
`./src/modules/Database rjc_synthesis'
This consist of a new set of modules for doing waveform synthesis. They are inteneded to unit size independent (e.g. diphone, phone, non-uniform unit). Also selection, prosodic modification, joining and signal processing are separately defined. Unfortunately this code has not really been exercised enough to be considered stable to be used in the default synthesis method, but those working on new synthesis techniques may be interested in integration using these new modules. They may be updated before the next full release of Festival.
`./src/modules/*'
Other optional directories may be contained here containing various research modules not yet part of the standard distribution. See below for descriptions of how to add modules to the basic system.

One intended use of Festival is offer a software system where new modules may be easily tested in a stable environment. We have tried to make the addition of new modules easy, without requiring complex modifications to the rest of the system.

All of the basic modules should really be considered merely as example modules. Without much effort all of them could be improved.

27.2 Writing a new module

This section gives a simple example of writing a new module. showing the basic steps that must be done to create and add a new module that is available for the rest of the system to use. Note many things can be done solely in Scheme now and really only low-level very intensive things (like waveform synthesizers) need be coded in C++.

27.2.1 Example 1: adding new modules

The example here is a duration module which sets durations of phones for a given list of averages. To make this example more interesting, all durations in accented syllables are increased by 1.5. Note that this is just an example for the sake of one, this (and much better techniques) could easily done within the system as it is at present using a hand-crafted CART tree.

Our knew module, called Duration_Simple can most easily be added to the `./src/Duration/' directory in a file `simdur.cc'. You can worry about the copyright notice, but after that you'll probably need the following includes

#include <festival.h>

The module itself must be declared in a fixed form. That is receiving a single LISP form (an utterance) as an argument and returning that LISP form at the end. Thus our definition will start

LISP FT_Duration_Simple(LISP utt)
{

Next we need to declare an utterance structure and extract it from the LISP form. We also make a few other variable declarations

    EST_Utterance *u = get_c_utt(utt);
    EST_Item *s;
    float end=0.0, dur;
    LISP ph_avgs,ldur;

We cannot list the average durations for each phone in the source code as we cannot tell which phoneset we are using (or what modifications we want to make to durations between speakers). Therefore the phone and average duration information is held in a Scheme variable for easy setting at run time. To use the information in our C++ domain we must get that value from the Scheme domain. This is done with the following statement.

    ph_avgs = siod_get_lval("phoneme_averages","no phoneme durations");

The first argument to siod_get_lval is the Scheme name of a variable which has been set to an assoc list of phone and average duration before this module is called. See the variable phone_durations in `lib/mrpa_durs.scm' for the format. The second argument to siod_get_lval. is an error message to be printed if the variable phone_averages is not set. If the second argument to siod_get_lval is NULL then no error is given and if the variable is unset this function simply returns the Scheme value nil.

Now that we have the duration data we can go through each segment in the utterance and add the duration. The loop looks like

    for (s=u->relation("Segment")->head(); s != 0; s = next(s))
    {

We can lookup the average duration of the current segment name using the function siod_assoc_str. As arguments, it takes the segment name s->name() and the assoc list of phones and duration.

        ldur = siod_assoc_str(s->name(),ph_avgs);

Note the return value is actually a LISP pair (phone name and duration), or nil if the phone isn't in the list. Here we check if the segment is in the list. If it is not we print an error and set the duration to 100 ms, if it is in the list the floating point number is extracted from the LISP pair.

        if (ldur == NIL)
        {
            cerr << "Phoneme: " << s->name() << " no duration "
                << endl;
            dur = 0.100;
        }
        else
            dur = get_c_float(car(cdr(ldur)));

If this phone is in an accented syllable we wish to increase its duration by a factor of 1.5. To find out if it is accented we use the feature system to find the syllable this phone is part of and find out if that syllable is accented.

        if (ffeature(s,"R:SylStructure.parent.accented") == 1)
            dur *= 1.5;

Now that we have the desired duration we increment the end duration with our predicted duration for this segment and set the end of the current segment.

        end += dur;
        s->fset("end",end);
    }

Finally we return the utterance from the function.

    return utt;
}

Once a module is defined it must be declared to the system so it may be called. To do this one must call the function festival_def_utt_module which takes a LISP name, the C++ function name and a documentation string describing what the module does. This will automatically be available at run-time and added to the manual. The call to this function should be added to the initialization function in the directory you are adding the module too. The function is called festival_DIRNAME_init(). If one doesn't exist you'll need to create it.

In `./src/Duration/' the function festival_Duration_init() is at the end of the file `dur_aux.cc'. Thus we can add our new modules declaration at the end of that function. But first we must declare the C++ function in that file. Thus above that function we would add

LISP FT_Duration_Simple(LISP args);

While at the end of the function festival_Duration_init() we would add

   festival_def_utt_module("Duration_Simple",FT_Duration_Simple,
   "(Duration_Simple UTT)\n\
  Label all segments with average duration ... ");

In order for our new file to be compiled we must add it to the `Makefile' in that directory, to the SRCS variable. Then when we type make in `./src/' our new module will be properly linked in and available for use.

Of course we are not quite finished. We still have to say when our new duration module should be called. When we set

   (Parameter.set 'Duration_Method Duration_Simple)

for a voice it will use our new module, calls to the function utt.synth will use our new duration module.

Note in earlier versions of Festival it was necessary to modify the duration calling function in `lib/duration.scm' but that is no longer necessary.

27.2.2 Example 2: accessing the utterance

In this example we will make more direct use of the utterance structure, showing the gory details of following relations in an utterance. This time we will create a module that will name all syllables with a concatenation of the names of the segments they are related to.

As before we need the same standard includes

#include "festival.h"

Now the definition the function

LISP FT_Name_Syls(LISP utt)
{

As with the previous example we are called with an utterance LISP object and will return the same. The first task is to extract the utterance object from the LISP object.

    EST_Utterance *u = get_c_utt(utt);
    EST_Item *syl,*seg;

Now for each syllable in the utterance we want to find which segments are related to it.

    for (syl=u->relation("Syllable")->head(); syl != 0; syl = next(syl))
    {

Here we declare a variable to cummulate the names of the segments.

        EST_String sylname = "";

Now we iterate through the SylStructure daughters of the syllable. These will be the segments in that syllable.

        for (seg=daughter1(syl,"SylStructure"); seg; seg=next(seg))
            sylname += seg->name();

Finally we set the syllables name to the concatenative name, and loop to the next syllable.

        syl->set_name(sylname);
    }

Finally we return the LISP form of the utterance.

    return utt;
}

27.2.3 Example 3: adding new directories

In this example we will add a whole new subsystem. This will often be a common way for people to use Festival. For example let us assume we wish to add a formant waveform synthesizer (e.g like that in the free `rsynth' program). In this case we will add a whole new sub-directory to the modules directory. Let us call it `rsynth/'.

In the directory we need a `Makefile' of the standard form so we should copy one from one of the other directories, e.g. `Intonation/'. Standard methods are used to identify the source code files in a `Makefile' so that the `.o' files are properly added to the library. Following the other examples will ensure your code is integrated properly.

We'll just skip over the bit where you extract the information from the utterance structure and synthesize the waveform (see `donovan/donovan.cc' or `diphone/diphone.cc' for examples).

To get Festival to use your new module you must tell it to compile the directory's contents. This is done in `festival/config/config'. Add the line

ALSO_INCLUDE += rsynth

to the end of that file (there are simialr ones mentioned). Simply adding the name of the directory here will add that as a new module and the directory will be compiled.

What you must provide in your code is a function festival_DIRNAME_init() which will be called at initialization time. In this function you should call any further initialization require and define and new Lisp functions you with to made available to the rest of the system. For example in the `rsynth' case we would define in some file in `rsynth/'

#include "festival.h"

static LISP utt_rtsynth(LISP utt)
{
    EST_Utterance *u = get_c_utt(utt);
    // Do format synthesis 
    return utt;
}

void festival_rsynth_init()
{
   proclaim_module("rsynth");

   festival_def_utt_module("Rsynth_Synth",utt_rsynth,
   "(Rsynth_Synth UTT)
   A simple formant synthesizer");

   ...
}

Integration of the code in optional (and standard directories) is done by automatically creating `src/modules/init_modules.cc' for the list of standard directories plus those defined as ALSO_INCLUDE. A call to a function called festival_DIRNAME_init() will be made.

This mechanism is specifically designed so you can add modules to the system without changing anything in the standard distribution.

27.2.4 Example 4: adding new LISP objects

This third examples shows you how to add a new Object to Scheme and add wraparounds to allow manipulation within the the Scheme (and C++) domain.

Like example 2 we are assuming this is done in a new directory. Suppose you have a new object called Widget that can transduce a string into some other string (with some optional continuous parameter. Thus, here we create a new file `widget.cc' like this

#include "festival.h"
#include "widget.h"  // definitions for the widget class

In order to register the widgets as Lisp objects we actually need to register them as EST_Val's as well. Thus we now need

VAL_REGISTER_CLASS(widget,Widget)
SIOD_REGISTER_CLASS(widget,Widget)

The first names given to these functions should be a short mnenomic name for the object that will be used in the defining of a set of access and construction functions. It of course must be unique within the whole systems. The second name is the name of the object itself.

To understand its usage we can add a few simple widget maniplutation functions

LISP widget_load(LISP filename)
{
   EST_String fname = get_c_string(filename);
   Widget *w = new Widget;   // build a new widget

   if (w->load(fname) == 0)  // successful load
      return siod(w);
   else
   {
      cerr << "widget load: failed to load \"" << fname << "\"" << endl;
      festival_error();
   }
   return NIL;  // for compilers that get confused
}

Note that the function siod constructs a LISP object from a widget, the class register macro defines that for you. Also note that when giving an object to a LISP object it then owns the object and is responsibile for deleting it when garbage collection occurs on that LISP object. Care should be taken that you don't put the same object within different LISP objects. The macros VAL_RESGISTER_CLASS_NODEL should be called if you do not want your give object to be deleted by the LISP system (this may cause leaks).

If you want refer to these functions in other files within your models you can use

VAL_REGISTER_CLASS_DCLS(widget,Widget)
SIOD_REGISTER_CLASS_DCLS(widget,Widget)

in a common `.h' file

The following defines a function that takes a LISP object containing a widget, aplies some method and returns a string.

LISP widget_apply(LISP lwidget, LISP string, LISP param)
{
    Widget *w = widget(lwidget);
    EST_String s = get_c_string(string);
    float p = get_c_float(param);
    EST_String answer;

    answer = w->apply(s,p);

    return strintern(answer);
}

The function widget, defined by the regitration macros, takes a LISP object and returns a pointer to the widget inside it. If the LISP object does not contain a widget an error will be thrown.

Finally you wish to add these functions to the Lisp system

void festival_widget_init()
{
  init_subr_1("widget.load",widget_load,
    "(widget.load FILENAME)\n\
  Load in widget from FILENAME.");
  init_subr_3("widget.apply",widget_apply,
    "(widget.apply WIDGET INPUT VAL)\n\
  Returns widget applied to string iNPUT with float VAL.");
}

In yout `Makefile' for this directory you'll need to add the include directory where `widget.h' is, if it is not contained within the directory itself. This done through the make variable LOCAL_INCLUDES as

LOCAL_INCLUDES = -I/usr/local/widget/include

And for the linker you 'll need to identify where your widget library is. In your `festival/config/config' file at the end add

COMPILERLIBS += -L/usr/local/widget/lib -lwidget


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_28.html0100644001741100001440000005123307332366671017455 0ustar awbusers Festival Speech Synthesis System - 28 API Go to the first, previous, next, last section, table of contents.


28 API

If you wish to use Festival within some other application there are a number of possible interfaces.

28.1 Scheme API

Festival includes a full programming language, Scheme (a variant of Lisp) as a powerful interface to its speech synthesis functions. Often this will be the easiest method of controlling Festival's functionality. Even when using other API's they will ultimately depend on the Scheme interpreter.

Scheme commands (as s-expressions) may be simply written in files and interpreted by Festival, either by specification as arguments on the command line, in the interactive interpreter, or through standard input as a pipe. Suppose we have a file `hello.scm' containing

;; A short example file with Festival Scheme commands
(voice_rab_diphone) ;; select Gordon
(SayText "Hello there")
(voice_don_diphone) ;; select Donovan
(SayText "and hello from me")

From the command interpreter we can execute the commands in this file by loading them

festival> (load "hello.scm")
nil

Or we can execute the commands in the file directly from the shell command line

unix$ festival -b hello.scm

The `-b' option denotes batch operation meaning the file is loaded and then Festival will exit, without starting the command interpreter. Without this option `-b' Festival will load `hello.scm' and then accept commands on standard input. This can be convenient when some initial set up is required for a session.

Note one disadvantage of the batch method is that time is required for Festival's initialisation every time it starts up. Although this will typically only be a few seconds, for saying short individual expressions that lead in time may be unacceptable. Thus simply executing the commands within an already running system is more desirable, or using the server/client mode.

Of course its not just about strings of commands, because Scheme is a fully functional language, functions, loops, variables, file access, arithmetic operations may all be carried out in your Scheme programs. Also, access to Unix is available through the system function. For many applications directly programming them in Scheme is both the easiest and the most efficient method.

A number of example Festival scripts are included in `examples/'. Including a program for saying the time, and for telling you the latest news (by accessing a page from the web). Also see the detailed discussion of a script example in See section 29.1 POS Example.

28.2 Shell API

The simplest use of Festival (though not the most powerful) is simply using it to directly render text files as speech. Suppose we have a file `hello.txt' containing

Hello world.  Isn't it excellent weather
this morning.

We can simply call Festival as

unix$ festival --tts hello.txt

Or for even simpler one-off phrases

unix$ echo "hello " | festival --tts

This is easy to use but you will need to wait for Festival to start up and initialise its databases before it starts to render the text as speech. This may take several seconds on some machines. A socket based server mechanism is provided in Festival which will allow a single server process to start up once and be used efficiently by multiple client programs.

Note also the use of Sable for marked up text, see section 10 XML/SGML mark-up. Sable allows various forms of additional information in text, such as phrasing, emphasis, pronunciation, as well as changing voices, and inclusion of external waveform files (i.e. random noises). For many application this will be the preferred interface method. Other text modes too are available through the command line by using auto-text-mode-alist.

28.3 Server/client API

Festival offers a BSD socket-based interface. This allows Festival to run as a server and allow client programs to access it. Basically the server offers a new command interpreter for each client that attaches to it. The server is forked for each client but this is much faster than having to wait for a Festival process to start from scratch. Also the server can run on a bigger machine, offering much faster synthesis.

Note: the Festival server is inherently insecure and may allow arbitrary users access to your machine.

Every effort has been made to minimise the risk of unauthorised access through Festival and a number of levels of security are provided. However with any program offering socket access, like httpd, sendmail or ftpd there is a risk that unauthorised access is possible. I trust Festival's security enough to often run it on my own machine and departmental servers, restricting access to within our department. Please read the information below before using the Festival server so you understand the risks.

28.3.1 Server access control

The following access control is available for Festival when running as a server. When the server starts it will usually start by loading in various commands specific for the task it is to be used for. The following variables are used to control access.

server_port
A number identifying the inet socket port. By default this is 1314. It may be changed as required.
server_log_file
If nil no logging takes place, if t logging is printed to standard out and if a file name log messages are appended to that file. All connections and attempted connections are logged with a time stamp and the name of the client. All commands sent from the client are also logged (output and data input is not logged).
server_deny_list
If non-nil it is used to identify which machines are not allowed access to the server. This is a list of regular expressions. If the host name of the client matches any of the regexs in this list the client is denied access. This overrides all other access methods. Remember that sometimes hosts are identified as numbers not as names.
server_access_list
If this is non-nil only machines whose names match at least one of the regexs in this list may connect as clients. Remember that sometimes hosts are identified as numbers not as names, so you should probably exclude the IP number of machine as well as its name to be properly secure.
server_passwd
If this is non-nil, the client must send this passwd to the server followed by a newline before access is given. This is required even if the machine is included in the access list. This is designed so servers for specific tasks may be set up with reasonable security.
(set_server_safe_functions FUNCNAMELIST)
If called this can restrict which functions the client may call. This is the most restrictive form of access, and thoroughly recommended. In this mode it would be normal to include only the specific functions the client can execute (i.e. the function to set up output, and a tts function). For example a server could call the following at set up time, thus restricting calls to only those that `festival_client' --ttw uses.
(set_server_safe_functions 
        '(tts_return_to_client tts_text tts_textall Parameter.set))

Its is strongly recommend that you run Festival in server mode as userid nobody to limit the access the process will have, also running it in a chroot environment is more secure.

For example suppose we wish to allow access to all machines in the CSTR domain except for holmes.cstr.ed.ac.uk and adam.cstr.ed.ac.uk. This may be done by the following two commands

(set! server_deny_list '("holmes\\.cstr\\.ed\\.ac\\.uk" 
                         "adam\\.cstr\\.ed\\.ac\\.uk"))
(set! server_access_list '("[^\\.]*\\.cstr\\.ed\\.ac\\.uk"))

This is not complete though as when DNS is not working holmes and adam will still be able to access the server (but if our DNS isn't working we probably have more serious problems). However the above is secure in that only machines in the domain cstr.ed.ac.uk can access the server, though there may be ways to fix machines to identify themselves as being in that domain even when they are not.

By default Festival in server mode will only accept client connections for localhost.

28.3.2 Client control

An example client program called `festival_client' is included with the system that provides a wide range of access methods to the server. A number of options for the client are offered.

--server
The name (or IP number) of the server host. By default this is `localhost' (i.e. the same machine you run the client on).
--port
The port number the Festival server is running on. By default this is 1314.
--output FILENAME
If a waveform is to be synchronously returned, it will be saved in FILENAME. The --ttw option uses this as does the use of the Festival command utt.send.wave.client. If an output waveform file is received by `festival_client' and no output file has been given the waveform is discarded with an error message.
--passwd PASSWD
If a passwd is required by the server this should be stated on the client call. PASSWD is sent plus a newline before any other communication takes places. If this isn't specified and a passwd is required, you must enter that first, if the --ttw option is used, a passwd is required and none specified access will be denied.
--prolog FILE
FILE is assumed to be contain Festival commands and its contents are sent to the server after the passwd but before anything else. This is convenient to use in conjunction with --ttw which otherwise does not offer any way to send commands as well as the text to the server.
--otype OUTPUTTYPE
If an output waveform file is to be used this specified the output type of the file. The default is nist, but, ulaw, riff, ulaw and others as supported by the Edinburgh Speech Tools Library are valid. You may use raw too but note that Festival may return waveforms of various sampling rates depending on the sample rates of the databases its using. You can of course make Festival only return one particular sample rate, by using after_synth_hooks. Note that byte order will be native machine of the client machine if the output format allows it.
--ttw
Text to wave is an attempt to make festival_client useful in many simple applications. Although you can connect to the server and send arbitrary Festival Scheme commands, this option automatically does what is probably what you want most often. When specified this options takes text from the specified file (or stdin), synthesizes it (in one go) and saves it in the specified output file. It basically does the following
(Parameter.set 'Wavefiletype '<output type>)
(tts_textall "
<file/stdin contents>
")))
Note that this is best used for small, single utterance texts as you have to wait for the whole text to be synthesized before it is returned.
--aucommand COMMAND
Execute COMMAND of each waveform returned by the server. The variable FILE will be set when COMMAND is executed.
--async
So that the delay between the text being sent and the first sound being available to play, this option in conjunction with --ttw causes the text to be synthesized utterance by utterance and be sent back in separated waveforms. Using --aucommand each waveform my be played locally, and when `festival_client' is interrupted the sound will stop. Getting the client to connect to an audio server elsewhere means the sound will not necessarily stop when the `festival_client' process is stopped.
--withlisp
With each command being sent to Festival a Lisp return value is sent, also Lisp expressions may be sent from the server to the client through the command send_client. If this option is specified the Lisp expressions are printed to standard out, otherwise this information is discarded.

A typical example use of `festival_client' is

festival_client --async --ttw --aucommand 'na_play $FILE' fred.txt

This will use `na_play' to play each waveform generated for the utterances in `fred.txt'. Note the single quotes so that the $ in $FILE isn't expanded locally.

Note the server must be running before you can talk to it. At present Festival is not set up for automatic invocations through `inetd' and `/etc/services'. If you do that yourself, note that it is a different type of interface as `inetd' assumes all communication goes through standard in/out.

Also note that each connection to the server starts a new session. Variables are not persistent over multiple calls to the server so if any initialization is required (e.g. loading of voices) it must be done each time the client starts or more reasonably in the server when it is started.

A PERL festival client is also available in `festival/examples/festival_client.pl'

28.3.3 Server/client protocol

The client talks to the server using s-expression (Lisp). The server will reply with and number of different chunks until either OK, is returned or ER (on error). The communicatotion is synchronous, each client request can generate a number of waveform (WV) replies and/or Lisp replies (LP) and terminated with an OK (or ER). Lisp is used as it has its own inherent syntax that Festival can already parse.

The following pseudo-code will help defined the protocol as well as show typical use


   fprintf(serverfd,"%s\n",s-expression);
   do
      ack = read three character acknowledgemnt
      if (ack == "WV\n")
         read a waveform
      else if (ack == "LP\n")
         read an s-expression
      else if (ack == "ER\n")
         an error occurred, break;
   while ack != "OK\n"

The server can send a waveform in an utterance to the client through the function utt.send.wave.client; The server can send a lisp expression to the client through the function

28.4 C/C++ API

As well as offerening an interface through Scheme and the shell some users may also wish to embedd Festival within their own C++ programs. A number of simply to use high level functions are available for such uses.

In order to use Festival you must include `festival/src/include/festival.h' which in turn will include the necessary other include files in `festival/src/include' and `speech_tools/include' you should ensure these are included in the include path for you your program. Also you will need to link your program with `festival/src/lib/libFestival.a', `speech_tools/lib/libestools.a', `speech_tools/lib/libestbase.a' and `speech_tools/lib/libeststring.a' as well as any other optional libraries such as net audio.

The main external functions available for C++ users of Festival are.

void festival_initialize(int load_init_files,int heapsize);
This must be called before any other festival functions may be called. It sets up the synthesizer system. The first argument if true, causes the system set up files to be loaded (which is normallly what is necessary), the second argument is the initial size of the Scheme heap, this should normally be 210000 unless you envisage processing very large Lisp structures.
int festival_say_file(const EST_String &filename);
Say the contents of the given file. Returns TRUE or FALSE depending on where this was successful.
int festival_say_text(const EST_String &text);
Say the contents of the given string. Returns TRUE or FALSE depending on where this was successful.
int festival_load_file(const EST_String &filename);
Load the contents of the given file and evaluate its contents as Lisp commands. Returns TRUE or FALSE depending on where this was successful.
int festival_eval_command(const EST_String &expr);
Read the given string as a Lisp command and evaluate it. Returns TRUE or FALSE depending on where this was successful.
int festival_text_to_wave(const EST_String &text,EST_Wave &wave);
Synthesize the given string into the given wave. Returns TRUE or FALSE depending on where this was successful.

Many other commands are also available but often the above will be sufficient.

Below is a simple top level program that uses the Festival functions

int main(int argc, char **argv)
{
    EST_Wave wave;
    int heap_size = 210000;  // default scheme heap size
    int load_init_files = 1; // we want the festival init files loaded

    festival_initialize(load_init_files,heap_size);

    // Say simple file
    festival_say_file("/etc/motd");

    festival_eval_command("(voice_ked_diphone)");
    // Say some text;
    festival_say_text("hello world");

    // Convert to a waveform
    festival_text_to_wave("hello world",wave);
    wave.save("/tmp/wave.wav","riff");

    // festival_say_file puts the system in async mode so we better
    // wait for the spooler to reach the last waveform before exiting
    // This isn't necessary if only festival_say_text is being used (and
    // your own wave playing stuff)
    festival_wait_for_spooler();

    return 0;
}

28.5 C only API

A simpler C only interface example is given inf `festival/examples/festival_client.c'. That interface talks to a festival server. The code does not require linking with any other EST or Festival code so is much smaller and easier to include in other programs. The code is missing some functionality but not much consider how much smaller it is.

28.6 Java and JSAPI

Initial support for talking to a Festival server from java is included from version 1.3.0 and initial JSAPI support is included from 1.4.0. At present the JSAPI talks to a Festival server elsewhere rather than as part of the Java process itself.

A simple (Pure) Java festival client is given `festival/src/modules/java/cstr/festival/Client.java' with a wraparound script in `festival/bin/festival_client_java'.

See the file `festival/src/modules/java/cstr/festival/jsapi/ReadMe' for requirements and a small example of using the JSAPI interface.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_29.html0100644001741100001440000001152707332366671017460 0ustar awbusers Festival Speech Synthesis System - 29 Examples Go to the first, previous, next, last section, table of contents.


29 Examples

This chapter contains some simple walkthrough examples of using Festival in various ways, not just as speech synthesizer

29.1 POS Example

This example shows how we can use part of the standard synthesis process to tokenize and tag a file of text. This section does not cover training and setting up a part of speech tag set (See section 16 POS tagging), only how to go about using the standard POS tagger on text.

This example also shows how to use Festival as a simple scripting language, and how to modify various methods used during text to speech.

The file `examples/text2pos' contains an executable shell script which will read arbitrary ascii text from standard input and produce words and their part of speech (one per line) on standard output.

A Festival script, like any other UNIX script, it must start with the the characters #! followed by the name of the `festival' executable. For scripts the option -script is also required. Thus our first line looks like

#!/usr/local/bin/festival -script

Note that the pathname may need to be different on your system

Following this we have copious comments, to keep our lawyers happy, before we get into the real script.

The basic idea we use is that the tts process segments text into utterances, those utterances are then passed to a list of functions, as defined by the Scheme variable tts_hooks. Normally this variable contains a list of two function, utt.synth and utt.play which will synthesize and play the resulting waveform. In this case, instead, we wish to predict the part of speech value, and then print it out.

The first function we define basically replaces the normal synthesis function utt.synth. It runs the standard festival utterance modules used in the synthesis process, up to the point where POS is predicted. This function looks like

(define (find-pos utt)
"Main function for processing TTS utterances.  Predicts POS and
prints words with their POS"
  (Token utt)
  (POS utt)
)

The normal text-to-speech process first tokenizes the text splitting it in to "sentences". The utterance type of these is Token. Then we call the Token utterance module, which converts the tokens to a stream of words. Then we call the POS module to predict part of speech tags for each word. Normally we would call other modules ultimately generating a waveform but in this case we need no further processing.

The second function we define is one that will print out the words and parts of speech

(define (output-pos utt)
"Output the word/pos for each word in utt"
 (mapcar
  (lambda (pair)
    (format t "%l/%l\n" (car pair) (car (cdr pair))))
  (utt.features utt 'Word '(name pos))))

This uses the utt.features function to extract features from the items in a named stream of an utterance. In this case we want the name and pos features for each item in the Word stream. Then for each pair we print out the word's name, a slash and its part of speech followed by a newline.

Our next job is to redefine the functions to be called during text to speech. The variable tts_hooks is defined in `lib/tts.scm'. Here we set it to our two newly-defined functions

(set! tts_hooks (list find-pos output-pos))

So that garbage collection messages do not appear on the screen we stop the message from being outputted by the following command

(gc-status nil)

The final stage is to start the tts process running on standard input. Because we have redefined what functions are to be run on the utterances, it will no longer generate speech but just predict part of speech and print it to standard output.

(tts_file "-")


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_30.html0100644001741100001440000000551207332366671017445 0ustar awbusers Festival Speech Synthesis System - 30 Problems Go to the first, previous, next, last section, table of contents.


30 Problems

There will be many problems with Festival, both in installation and running it. It is a young system and there is a lot to it. We believe the basic design is sound and problems will be features that are missing or incomplete rather than fundamental ones.

We are always open to suggestions on how to improve it and fix problems, we don't guarantee we'll have the time to fix problems but we are interested in hearing what problems you have.

Before you smother us with mail here is an incomplete list of general problems we have already identified

  • The more documentation we write the more we realize how much more documentation is required. Most of the Festival documentation was written by someone who knows the system very well, and makes many English mistakes. A good re-write by some one else would be a good start.
  • The system is far too slow. Although machines are getting faster, it still takes too long to start the system and get it to speak some given text. Even so, on reasonable machines, Festival can generate the speech several times faster than it takes to say it. But even if it is five time faster, it will take 2 seconds to generate a 10 second utterance. A 2 second wait is too long. Faster machines would improve this but a change in design is a better solution.
  • The system is too big. It takes a long time to compile even on quite large machines, and its foot print is still in the 10s of megabytes as is the run-time requirement. Although we have spent some time trying to fix this (optional modules have made the possibility of building a much smaller binary) we haven't done enough yet.
  • The signal quality of the voices isn't very good by today's standard of synthesizers, even given the improvement quality since the last release. This is partly our fault in not spending the time (or perhaps also not having enough expertise) on the low-level waveform synthesis parts of the system. This will improve in the future with better signal processing (under development) and better synthesis techniques (also under development).


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_31.html0100644001741100001440000001305507332366671017447 0ustar awbusers Festival Speech Synthesis System - 31 References Go to the first, previous, next, last section, table of contents.


31 References

allen87
Allen J., Hunnicut S. and Klatt, D. Text-to-speech: the MITalk system, Cambridge University Press, 1987.
abelson85
Abelson H. and Sussman G. Structure and Interpretation of Computer Programs, MIT Press, 1985.
black94
Black A. and Taylor, P. "CHATR: a generic speech synthesis system.", Proceedings of COLING-94, Kyoto, Japan 1994.
black96
Black, A. and Hunt, A. "Generating F0 contours from ToBI labels using linear regression", ICSLP96, vol. 3, pp 1385-1388, Philadelphia, PA. 1996.
black97b
Black, A, and Taylor, P. "Assigning Phrase Breaks from Part-of-Speech Sequences", Eurospeech97, Rhodes, Greece, 1997.
black97c
Black, A, and Taylor, P. "Automatically clustering similar units for unit selection in speech synthesis", Eurospeech97, Rhodes, Greece, 1997.
black98
Black, A., Lenzo, K. and Pagel, V., "Issues in building general letter to sound rules.", 3rd ESCA Workshop on Speech Synthesis, Jenolan Caves, Australia, 1998.
black99
Black, A., and Lenzo, K., "Building Voices in the Festival Speech Synthesis System," unpublished document, Carnegie Mellon University, available at http://www.cstr.ed.ac.uk/projects/festival/docs/festvox/
breiman84
Breiman, L., Friedman, J. Olshen, R. and Stone, C. Classification and regression trees, Wadsworth and Brooks, Pacific Grove, CA. 1984.
campbell91
Campbell, N. and Isard, S. "Segment durations in a syllable frame", Journal of Phonetics, 19:1 37-47, 1991.
DeRose88
DeRose, S. "Grammatical category disambiguation by statistical optimization". Computational Linguistics, 14:31-39, 1988.
dusterhoff97
Dusterhoff, K. and Black, A. "Generating F0 contours for speech synthesis using the Tilt intonation theory" Proceedings of ESCA Workshop of Intonation, September, Athens, Greece. 1997
dutoit97
Dutoit, T. An introduction to Text-to-Speech Synthesis Kluwer Acedemic Publishers, 1997.
hunt89
Hunt, M., Zwierynski, D. and Carr, R. "Issues in high quality LPC analysis and synthesis", Eurospeech89, vol. 2, pp 348-351, Paris, France. 1989.
jilka96
Jilka M. Regelbasierte Generierung natuerlich klingender Intonation des Amerikanischen Englisch, Magisterarbeit, Institute of Natural Language Processing, University of Stuttgart. 1996
moulines90
Moulines, E, and Charpentier, N. "Pitch-synchronous waveform processing techniques for text-to-speech synthesis using diphones" Speech Communication, 9(5/6) pp 453-467. 1990.
pagel98,
Pagel, V., Lenzo, K., and Black, A. "Letter to Sound Rules for Accented Lexicon Compression", ICSLP98, Sydney, Australia, 1998.
ritchie92
Ritchie G, Russell G, Black A and Pulman S. Computational Morphology: practical mechanisms for the English Lexicon, MIT Press, Cambridge, Mass.
vansanten96
van Santen, J., Sproat, R., Olive, J. and Hirschberg, J. eds, "Progress in Speech Synthesis," Springer Verlag, 1996.
silverman92
Silverman K., Beckman M., Pitrelli, J., Ostendorf, M., Wightman, C., Price, P., Pierrehumbert, J., and Hirschberg, J "ToBI: a standard for labelling English prosody." Proceedings of ICSLP92 vol 2. pp 867-870, 1992
sproat97
Sproat, R., Taylor, P, Tanenblatt, M. and Isard, A. "A Markup Language for Text-to-Speech Synthesis", Eurospeech97, Rhodes, Greece, 1997.
sproat98,
Sproat, R. eds, "Multilingual Text-to-Speech Synthesis: The Bell Labs approach", Kluwer 1998.
sable98,
Sproat, R., Hunt, A., Ostendorf, M., Taylor, P., Black, A., Lenzo, K., and Edgington, M. "SABLE: A standard for TTS markup." ICSLP98, Sydney, Australia, 1998.
taylor91
Taylor P., Nairn I., Sutherland A. and Jack M.. "A real time speech synthesis system", Eurospeech91, vol. 1, pp 341-344, Genoa, Italy. 1991.
taylor96
Taylor P. and Isard, A. "SSML: A speech synthesis markup language" to appear in Speech Communications.
wwwxml97
World Wide Web Consortium Working Draft "Extensible Markup Language (XML)Version 1.0 Part 1: Syntax", http://www.w3.org/pub/WWW/TR/WD-xml-lang-970630.html
yarowsky96
Yarowsky, D., "Homograph disambiguation in text-to-speech synthesis", in "Progress in Speech Synthesis," eds. van Santen, J., Sproat, R., Olive, J. and Hirschberg, J. pp 157-172. Springer Verlag, 1996.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_32.html0100644001741100001440000004123407332366671017450 0ustar awbusers Festival Speech Synthesis System - 32 Feature functions Go to the first, previous, next, last section, table of contents.


32 Feature functions

This chapter contains a list of a basic feature functions available for stream items in utterances. See section 14.6 Features. These are the basic features, which can be combined with relative features (such as n. for next, and relations to follow links). Some of these features are implemented as short C++ functions (e.g. asyl_in) while others are simple features on an item (e.g. pos). Note that functional feature take precidence over simple features, so accessing and feature called "X" will always use the function called "X" even if a the simple feature call "X" exists on the item.

Unlike previous versions there are no features that are builtin on all items except addr (reintroduced in 1.3.1) which returns a unique string for that item (its the hex address on teh item within the machine). Features may be defined through Scheme too, these all have the prefix lisp_.

The feature functions are listed in the form Relation.name where Relation is the name of the stream that the function is appropriate to and name is its name. Note that you will not require the Relation part of the name if the stream item you are applying the function to is of that type.

ANY.addr
Returned by popular demand, returns the address of given item that is guaranteed unique for this session.
ANY.lisp_*
Apply Lisp function named after lisp_. The function is called with an stream item. It must return an atomic value. This method may be inefficient and is primarily desgined to allow quick prototyping of new feature functions.
Intonation.lisp_last_tilt_accent
Returns the most recent tilt accent.
Intonation.lisp_last_tilt_boundary
Returns the most recent tilt boundary.
Intonation.lisp_next_tilt_accent
Returns the next tilt accent.
Intonation.lisp_next_tilt_boundary
Returns the next tilt boundary.
Intonation.peak_anchor_segment_type ie
Determines whether the segment anchor for a peak is the first consonant of a syl - C0 -, the vowel of a syl - V0 -, or segments after that - C1->X,V1->X. If the segment is in a following syl, the return value will be preceded by a 1 - e.g. 1V1
Segment.diphone_phone_name
This is produced by the diphone module to contain the desired phone name for the desired diphone. This adds things like _ if part of a consonant or $ to denote syllable boundaries. These are generated on a per voice basis by function(s) specified by diphone_module_hooks. Identification of dark ll's etc. may also be included. Note this is not necessarily the name of the diphone selected as if it is not found some of these characters will be removed and fall back values will be used.
Segment.lisp_pos_in_syl seg
Finds the position in a syllable of a segment - returns a number.
Segment.ph_*
Access phoneset features for a segment. This definition covers multiple feature functions where ph_ may be extended with any features that are defined in the phoneset (e.g. vc, vlng, cplace etc.).
Segment.pos_in_syl
The position of this segment in the syllable it is related to. The index counts from 0. If this segment is not related to a syllable this returns 0.
Segment.seg_coda_fric
Returns 1 if coda of the syllable this segment is in contains a fricative. 0 otherwise.
Segment.seg_onset_stop
Returns 1 if onset of the syllable this segment is in contains a stop. 0 otherwise.
Segment.seg_onsetcoda
Returns onset if this segment is before the vowel in the syllable it is contained within. Returns coda if it is the vowel or after. If the segment is not in a syllable it returns onset.
Segment.seg_pitch
Pitch at the middle of this segment.
Segment.segment_duration
The duration of the given stream item calculated as the end of this item minus the end of the previous item in the Segment relation.
Segment.segment_end
The end time of the given segment.
Segement.segment_mid
The middle time of the given segment.
Segement.segment_start
The start time of the given segment.
Segment.syl_final
Returns 1 if this segment is the last segment in the syllable it is related to, or if it is not related to any syllable.
Segment.syl_initial
Returns 1 if this segment is the first segment in the syllable it is related to, or if it is not related to any syllable.
Syllable.accented
Returns 1 if syllable is accented, 0 otherwise. A syllable is accented if there is at least one IntEvent related to it.
Syllable.asyl_in
Returns number of accented syllables since last phrase break, not including this one. Accentedness is as defined by the syl_accented feature.
Syllable.asyl_out
Returns number of accented syllables to the next phrase break, not including this one. Accentedness is as defined by the syl_accented feature.
Syllable.last_accent
Returns the number of syllables since last accented syllable.
Syllable.lisp_last_stress
Number of syllables from previous stressed syllable. 0 if this syllable is stressed. It is effectively assumed that the syllable before the first syllable is stressed.
Syllable.lisp_next_stress
Number of syllables to next stressed syllable. 0 if this syllable is stressed. It is effectively assumed the syllable after the last syllable is stressed.
Syllable.lisp_tilt_accent
Returns "a" if there is a tilt accent related to this syllable, 0 otherwise.
Syllable.lisp_tilt_accented
Returns 1 if there is a tilt accent related to this syllable, 0 otherwise.
Syllable.lisp_tilt_boundaried
Returns 1 if there is a tilt boundary related to this syllable, 0 otherwise.
Syllable.lisp_tilt_boundary
Returns boundary label if there is a tilt boundary related to this syllable, 0 otherwise.
Syllable.lisp_time_to_next_vowel syl
The time from vowel_start to next vowel_start
Syllable.next_accent
Returns the number of syllables to the next accented syllable.
Syllable.old_syl_break
Like syl_break but 2 and 3 are promoted to 4 (to be compatible with some older models.
Syllable.pos_in_word
The position of this syllable in the word it is related to. The index counts from 0. If this syllable is not related to a word then 0 is returned.
Syllable.position_type
The type of syllable with respect to the word it it related to. This may be any of: single for single syllable words, initial for word initial syllables in a poly-syllabic word, final for word final syllables in poly-syllabic words, and mid for syllables within poly-syllabic words.
Syllable.ssyl_in
Returns number of stressed syllables since last phrase break, not including this one.
Syllable.ssyl_out
Returns number of stressed syllables to next phrase break, not including this one.
Syllable.stress
The lexical stress of the syllable as specified from the lexicon entry corresponding to the word related to this syllable.
Syllable.sub_phrases
Returns the number of non-major phrase breaks since last major phrase break. Major phrase breaks are 4, as returned by syl_break, minor phrase breaks are 2 and 3.
Syllable.syl_accent
Returns the name of the accent related to the syllable. NONE is returned if there are no accents, and multi is returned if there is more than one.
Syllable.syl_break
The break level after this syllable. Word internal is syllables return 0, non phrase final words return 1. Final syllables in phrase final words return the name of the phrase they are related to. Note the occasional "-" that may appear of phrase names is removed so that this feature function returns a number in the range 0,1,2,3,4.
Syllable.syl_coda_type
Return the van Santen and Hirschberg classification. -V for unvoiced, +V-S for voiced but no sonorants, and +S for sonorants.
Syllable.syl_codasize
Returns the number of segments after the vowel in this syllable. If there is no vowel in the syllable this will return the total number of segments in the syllable.
Syllable.syl_endpitch
Pitch at the end of this syllable.
Syllable.syl_in
Returns number of syllables since last phrase break. This is 0 if this syllable is phrase initial.
Syllable.syl_midpitch
Pitch at the mid vowel of this syllable.
Syllable.syl_numphones
Returns number of phones in syllable.
Syllable.syl_onset_type
Return the van Santen and Hirschberg classification. -V for unvoiced, +V-S for voiced but no sonorants, and +S for sonorants.
Syllable.syl_onsetsize
Returns the number of segments before the vowel in this syllable. If there is no vowel in the syllable this will return the total number of segments in the syllable.
Syllable.syl_out
Returns number of syllables to next phrase break. This is 0 if this syllable is phrase final.
Syllable.syl_pc_unvox
Percentage of total duration of unvoiced segments from start of syllable. (i.e. percentage to start of first voiced segment)
Syllable.syl_startpitch
Pitch at the start of this syllable.
Syllable.syl_vowel
Returns the name of the vowel within this syllable. Note this is not the general form you probably want. You can't refer to ph_* features of this. Returns "novowel" is no vowel can be found.
Syllable.syl_vowel_start
Start position of vowel in syllable. If there is no vowel the start position of the syllable is returned.
Syllable.syllable_duration
The duration of the given stream item calculated as the end of last daughter minus the end of previous item in the Segment relation of the first duaghter.
Syllable.syllable_end
The end time of the given syllable.
Syllable.syllable_start
The start time of the given syllable.
Syllable.tobi_accent
Returns the ToBI accent related to syllable. ToBI accents are those which contain a *. NONE is returned if there are none. If there is more than one ToBI accent related to this syllable the first one is returned.
Syllable.tobi_endtone
Returns the ToBI endtone related to syllable. ToBI end tones are those IntEvent labels which contain a % or a - (i.e. end tones or phrase accents). NONE is returned if there are none. If there is more than one ToBI end tone related to this syllable the first one is returned.
Syllable.lisp_get_onset_length
Length from start of syllable to start of vowel.
Syllable.lisp_get_rhyme_length
Length from start of the vowel to end of syllable.
SylStructure.lisp_length_to_last_seg
Length from start of the vowel to start of last segment of syllable.
SylStructure.lisp_num_postvocalic_c
Finds the number of postvocalic consonants in a syllable.
SylStructure.sonority_scale_coda syl
Returns value on sonority scale (1 -6, where 6 is most sonorous) for the coda of a syllable, based on least sonorant portion.
SylStructure.sonority_scale_onset syl
Returns value on sonority scale (1 -6, where 6 is most sonorous) for the onset of a syllable, based on least sonorant portion.
SylStructure.lisp_syl_numphones syl
Finds the number segments in a syllable.
SylStructure.vowel_frontness syl
Classifies vowels as front, back or mid
SylStructure.lisp_vowel_height syl
Classifies vowels as high, low or mid
SylStructure.vowel_length syl
Returns the df.length feature of a syllable's vowel
Token.prepunctuation
Preceeding puctuation symbol found before token in original string/file.
Token.punc
Succeeding punctuation symbol found after token in original string/file.
Token.whitespace
Whitespace found before token in original string/file.
Word.blevel
A crude translation of phrase break into ToBI like phrase level. Values may be 0,1,2,3,4.
Word.cap
Returns 1 if this word starts with a capital letter, 0 otherwise.
Word.content_words_in
Number of content words from start this phrase.
Word.content_words_out
Number of content words to end of this phrase.
Word.contentp
Returns 1 if this word is a content word as defined by gpos, 0 otherwise.
Word.gpos
Returns a guess at the part of speech of this word. The lisp a-list guess_pos is used to load up this word. If no part of speech is found in there "content" is returned. This allows a quick efficient method for part of speech tagging into closed class and content words.
Word.n_content
Next content word. Note this doesn't use the standard n. notation as it may have to search a number of words forward before finding a non-function word. Uses gpos to define content/function word distinction. This also works for Tokens.
Word.nn_content
Next next content word. Note this doesn't use the standard n.n. notation as it may have to search a number of words forward before finding the second non-function word. Uses gpos to define content/function word distinction. This also works for Tokens.
Word.num_break
1 if this is the last word in a numeric token and it is followed by a numeric token.
Word.p_content
Previous content word. Note this doesn't use the standard p. notation as it may have to search a number of words backward before finding the first non-function word. Uses gpos to define content/function word distinction. This also works for Tokens.
Word.pbreak
Result from statistical phrasing module, may be B or NB denoting phrase break or non-phrase break after the word.
Word.pbreak_score
Log likelihood score from statistical phrasing module, for pbreak value.
Word.pos
Part of speech tag value returned by the POS tagger module.
Word.pos_in_phrase
The position of this word in the phrase this word is in.
Word.pos_score
Part of speech tag log likelihood from Viterbi search.
Word.pp_content
Previous previous content word. Note this doesn't use the standard p.p. notation as it may have to search a number of words backward before finding the first non-function word. Uses gpos to define content/function word distinction. This also works for Tokens.
Word.word_break
The break level after this word. Non-phrase final words return 1 Phrase final words return the name of the phrase they are in.
Word.word_duration
The duration of the given stream item. This is defined as the end of last segment in the last syllable (via the SylStructure relation) minus the segment immediate preceeding the first segment in the first syllable.
Word.word_end
The end time of the given word.
Word.word_numsyls
Returns number of syllables in a word.
Word.word_start
The start time of the given word.
Word.words_out
Number of words to end of this phrase.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_33.html0100644001741100001440000004430307332366671017451 0ustar awbusers Festival Speech Synthesis System - 33 Variable list Go to the first, previous, next, last section, table of contents.


33 Variable list

This chapter contains a list of variables currently defined within Festival available for general use. This list is automatically generated from the documentation strings of the variables as they are defined within the system, so has some chance in being up-to-date.

Cross references to sections elsewhere int he manual are given where appropriate.

!
In interactive mode, this variable's value is the return value of the previously evaluated expression.
*module-descriptions*
An association list recording the description objects for proclaimed modules.
*ostype*
Contains the name of the operating system type that Festival is running on, e.g. SunOS5, FreeBSD, linux etc. The value is taken from the Makefile variable OSTYPE at compile time.
*properties*
Array for holding symbol property lists.
after_analysis_hooks
List of functions to be applied after analysis and before synthesis.
after_synth_hooks
List of functions to be applied after all synthesis modules have been applied. This is primarily designed to allow waveform manipulation, particularly resampling and volume changes.
auto-text-mode-alist
Following Emacs' auto-mode-alist thios provides a mechanism for auto selecting a TTS text mode based on the filename being analyzed. Its format is exactly the same as Emacs in that it consists of an alist of dotted pairs of regular expression and text mode name.
before_synth_hooks
List of functions to be run on synthesised utterances before synthesis starts.
default-voice-priority-list
List of voice names. The first of them available becomes the default voice.
default_access_strategy
How to access units from databases.
default_after_analysis_hooks
The default list of functions to be run on all synthesized utterances after analysis but before synthesis.
default_after_synth_hooks
The default list of functions to be run on all synthesized utterances after Wave_Synth. This will normally be nil but if for some reason you need to change the gain or rescale *all* waveforms you could set the function here, in your siteinit.scm.
default_before_synth_hooks
The default list of functions to be run on all synthesized utterances before synthesis starts.
diphone_module_hooks
A function or list of functions that will be applied to the utterance at the start of the diphone module. It can be used to map segment names to those that will be used by the diphone database itself. Typical use specifies _ and $ for consonant clusters and syllable boundaries, mapping to dark ll's etc. Reduction and tap type phenomena should probabaly be done by post lexical rules though the distinction is not a clear one.
duffint_params
Default parameters for Default (duff) intonation target generation. This is an assoc list of parameters. Two parameters are supported start specifies the start F0 in Hertz for an utterance, and end specifies the end.
editline_histsize
The number of lines to be saved in the users history file when a Festival session ends. The histfile is ".festival_history" in the users home directory. Note this value is only checked when the command interpreter is started, hence this should be set in a user's ".festivalrc" or system init file. Reseting it at the command interpreter will have no effect.
editline_no_echo
When running under Emacs as an inferior process, we don't want to echo the content of the line, only the prompt.
english_homographs
A list of tokens that are dealt with by a homograph disambiguation tree in english_token_pos_cart_trees.
english_phr_break_params
Parameters for English phrase break statistical model.
eou_tree
End of utterance tree. A decision tree used to determine if the given token marks the end of an utterance. It may look one token ahead to do this. [see section 9.1 Utterance chunking]
etc-path
A list of directories where binaries specific to Festival may be located. This variable is automatically set to LIBDIR/etc/OSTYPE/ and that path is added to the end of the UNIX PATH environment variable.
festival_version
A string containing the current version number of the system.
festival_version_number
A list of major, minor and subminor version numbers of the current system. e.g. (1 0 12).
FP_duration
In using Fixed_Prosody as used in Phones type utterances and hence SayPhones, this is the fix value in ms for phone durations.
FP_F0
In using Fixed_Prosody as used in Phones type utterances and hence SayPhones, this is the value in Hertz for the monotone F0.
guess_pos
An assoc-list of simple part of speech tag to list of words in that class. This basically only contains closed class words all other words may be assumed to be content words. This was built from information in the f2b database and is used by the ffeature gpos.
home-directory
Place looked at for .festivalrc etc.
hush_startup
If set to non-nil, the copyright banner is not displayed at start up.
int_tilt_params
Parameters for tilt intonation model.
kal_diphone_dir
The default directory for the kal diphone database.
lexdir
The directory where the lexicon(s) are, by default.
libdir
The pathname of the run-time libary directory. Note reseting is almost definitely not what you want to do. This value is automatically set at start up from the value specifed at compile-time or the value specifed with --libdir on the command line. A number of other variables depend on this value.
load-path
A list of directories containing .scm files. Used for various functions such as load_library and require. Follows the same use as EMACS. By default it is set up to the compile-time library directory but may be changed by the user at run time, by adding a user's own library directory or even replacing all of the standard library. [see section 6.3 Site initialization]
manual-browser
The Unix program name of your Netscape Navigator browser. [see section 7.3 Getting some help]
manual-url
The default URL for the Festival Manual in html format. You may reset this to a file://.../... type URL on you're local machine. [see section 7.3 Getting some help]
mbrola_database
The name of the MBROLA database to usde during MBROLA Synthesis.
mbrola_progname
The program name for mbrola.
Param
A feature set for arbitrary parameters for modules.
pbreak_ngram_dir
The directory containing the ngram models for predicting phrase breaks. By default this is the standard library directory.
phr_break_params
Parameters for phrase break statistical model. This is typcal set by a voice selection function to the parameters for a particular model.
pos_map
A reverse assoc list of predicted pos tags to some other tag set. Note using this changes the pos tag loosing the actual predicted value. Rather than map here you may find it more appropriate to map tags sets locally in the module sthat use them (e.g. phrasing and lexicons).
pos_model_dir
The directory contains the various models for the POS module. By default this is the same directory as lexdir. The directory should contain two models: a part of speech lexicon with reverse log probabilities and an ngram model for the same part of speech tag set.
pos_ngram_name
The name of a loaded ngram containing the a posteriori ngram model for predicting part of speech. The a priori model is held as a lexicon call poslex.
pos_p_start_tag
This variable's value is the tag most likely to appear before the start of a sentence. It is used when looking for pos context before an utterance. Typically it should be some type of punctuation tag.
pos_pp_start_tag
This variable's value is the tag most likely to appear before pos_p_start_tag and any position preceding that. It is typically some type of noun tag. This is used to provide pos context for early words in an utterance.
pos_supported
If set to non-nil use part of speech prediction, if nil just get pos information from the lexicon.
postlex_mrpa_r_cart_tree
For remove final R when not between vowels.
postlex_rules_hooks
A function or list of functions which encode post lexical rules. This will be voice specific, though some rules will be shared across languages.
postlex_vowel_reduce_cart_tree
CART tree for vowel reduction.
postlex_vowel_reduce_cart_tree_hand
A CART tree for vowel reduction. This is hand-written.
postlex_vowel_reduce_table
Mapping of vowels to their reduced form. This in an assoc list of phoneset name to an assoc list of full vowel to reduced form.
provided
List of file names (omitting .scm) that have been provided. This list is checked by the require function to find out if a file needs to be loaded. If that file is already in this list it is not loaded. Typically a file will have (provide 'MYNAME) at its end so that a call to (require 'MYNAME) will only load MYNAME.scm once.
server_access_list
If non-nil this is the exhaustive list of machines and domains from which clients may access the server. This is a list of REGEXs that client host must match. Remember to add the backslashes before the dots. [see section 28.3 Server/client API]
server_deny_list
If non-nil this is a list of machines which are to be denied access to the server absolutely, irrespective of any other control features. The list is a list of REGEXs that are used to matched the client hostname. This list is checked first, then server_access_list, then passwd. [see section 28.3 Server/client API]
server_log_file
If set to t server log information is printed to standard output of the server process. If set to nil no output is given. If set to anything else the value is used as the name of file to which server log information is appended. Note this value is checked at server start time, there is no way a client may change this. [see section 28.3 Server/client API]
server_max_clients
In server mode, the maximum number of clients supported at any one time. When more that this number of clients attach simulaneous the last ones are denied access. Default value is 10. [see section 28.3 Server/client API]
server_passwd
If non-nil clients must send this passwd to the server followed by a newline before they can get a connection. It would be normal to set this for the particular server task. [see section 28.3 Server/client API]
server_port
In server mode the inet port number the server will wait for connects on. The default value is 1314. [see section 28.3 Server/client API]
sgml_parse_progname
The name of the program to use to parse SGML files. Typically this is nsgml-1.0 from the sp SGML package. [see section 10.4 XML/SGML requirements]
sonority_glides
List of glides (only good w/ radio_speech)
sonority_liq
List of liquids (only good w/ radio_speech)
sonority_nas
List of nasals (only good w/ radio_speech)
sonority_v_obst
List of voiced obstruents for use in sonority scaling (only good w/ radio_speech)
sonority_vless_obst
List of voiceless obstruents for use in sonority scaling (only good w/ radio_speech)
SynthTypes
List of synthesis types and functions used by the utt.synth function to call appropriate methods for wave synthesis.
system-voice-path
Additional directory not near the load path where voices can be found, this can be redefined in lib/sitevars.scm if desired.
tilt_accent_list
List of events containing accents in tilt model.
tilt_boundary_list
List of events containing boundaries in tilt model.
tobi_support_yn_questions
If set a crude final rise will be added at utterance that are judged to be yesy/no questions. Namely ending in a ? and not starting with a wh-for word.
token.letter_pos
The part of speech tag (valid for your part of speech tagger) for individual letters. When the tokenizer decide to pronounce a token as a list of letters this tag is added to each letter in the list. Note this should be from the part of speech set used in your tagger which may not be the same one that appears in the actual lexical entry (if you map them afterwards). This specifically allows "a" to come out as ae rather than @.
token.prepunctuation
A string of characters which are to be treated as preceding punctuation when tokenizing text. Prepunctuation symbols will be removed from the text of the token and made available through the "prepunctuation" feature. [see section 15.1 Tokenizing]
token.punctuation
A string of characters which are to be treated as punctuation when tokenizing text. Punctuation symbols will be removed from the text of the token and made available through the "punctuation" feature. [see section 15.1 Tokenizing]
token.singlecharsymbols
Characters which have always to be split as tokens. This would be usual is standard text, but is useful in parsing some types of file. [see section 15.1 Tokenizing]
token.unknown_word_name
When all else fails and a pronunciation for a word or character can't be found this word will be said instead. If you make this "" them the unknown word will simple be omitted. This will only really be called when there is a bug in the lexicon and characters are missing from the lexicon. Note this word should be in the lexicon.
token.whitespace
A string of characters which are to be treated as whitespace when tokenizing text. Whitespace is treated as a separator and removed from the text of a token and made available through the "whitespace" feature. [see section 15.1 Tokenizing]
token_most_common
A list of (English) words which were found to be most common in an text database and are used as discriminators in token analysis.
token_pos_cart_trees
This is a list of pairs or regex plus CART tree. Tokens that match the regex will have the CART tree aplied, setting the result as the token_pos feature on the token. The list is checked in order and only the first match will be applied.
tts_hooks
Function or list of functions to be called during text to speech. The function tts_file, chunks data into Utterances of type Token and applies this hook to the utterance. This typically contains the utt.synth function and utt.play. [see section 9 TTS]
tts_text_modes
An a-list of text modes data for file type specific tts functions. See the manual for an example. [see section 9.2 Text modes]
UttTypes
List of types and functions used by the utt.synth function to call appropriate methods.
var-docstrings
An assoc-list of variable names and their documentation strings.
voice-location-trace
Set t to print voice locations as they are found
voice-locations
Association list recording where voices were found.
voice-path
List of places to look for voices. If not set it is initialised from load-path by appending "voices/" to each directory with system-voice-path appended.
voice_default
A variable whose value is a function name that is called on start up to the default voice. [see section 6.3 Site initialization]
Internal variable containing list of voice descriptions as
decribed by proclaim_voice.
xml_dtd_dir
The directory holding standard DTD form the xml parser.
xxml_elements
List of Scheme actions to perform on finding xxML tags.
xxml_hooks
Function or list of functions to be applied to an utterance when parsed with xxML, before tts_hooks.
xxml_token_hooks
Functions to apply to each token.
xxml_word_features
An assoc list of features to be added to the current word when in xxml parse mode.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_34.html0100644001741100001440000026174707332366671017467 0ustar awbusers Festival Speech Synthesis System - 34 Function list Go to the first, previous, next, last section, table of contents.


34 Function list

This chapter contains a list of functions currently defined within Festival available for general use. This list is automatically generated from the documentation strings of the functions as they are defined within the system, so has some chance in being up-to-date.

Note some of the functions which have origins in the SIOD system itself are little used in Festival and may not work fully, particularly, the arrays.

Cross references to sections elsewhere in the manual are given where appropriate.

(%%closure ENVIRONMENT CODE)
Make a closure from given environment and code.
(%%closure-code CLOSURE)
Return code part of closure.
(%%closure-env CLOSURE)
Return environment part of closure.
(%%stack-limit AMOUNT SILENT)
Set stacksize to AMOUNT, if SILENT is non nil do it silently.
(* NUM1 NUM2 ...)
Returns the product of NUM1 and NUM2 ... An error is given is any argument is not a number.
(*catch TAG . BODY)
Evaluate BODY, if a *throw occurs with TAG then return value specified by *throw.
(*throw TAG VALUE)
Jump to *catch with TAG, causing *catch to return VALUE.
(+ NUM1 NUM2 ...)
Returns the sum of NUM1 and NUM2 ... An error is given is any argument is not a number.
(- NUM1 NUM2)
Returns the difference between NUM1 and NUM2. An error is given is any argument is not a number.
(/ NUM1 NUM2)
Returns the quotient of NUM1 and NUM2. An error is given is any argument is not a number.
(:backtrace [FRAME])
This function called *immediately* after an error will display a backtrace of the functions evaluated before the error. With no arguments it lists all stack frames, with the (possibly shortened) forms that were evaluated at that level. With a numeric argument it displays the form at that level in full. This function only works at top level in the read-eval-print loop (command interpreter). Note that any valid command will leave the backtrace stack empty. Also note that backtrace itself does not reset the backtrace, unless you make an error in calling it.
(< NUM1 NUM2)
Returns t if NUM1 is less than NUM2, nil otherwise. An error is given is either argument is not a number.
(<= NUM1 NUM2)
Returns t if NUM1 is less than or equal to NUM2, nil otherwise. An error is given is either argument is not a number.
(> NUM1 NUM2)
Returns t if NUM1 is greater than NUM2, nil otherwise. An error is given is either argument is not a number.
(>= NUM1 NUM2)
Returns t if NUM1 is greater than or equal to NUM2, nil otherwise. An error is given is either argument is not a number.
(acost:build_disttabs UTTTYPES PARAMS)
Built matrices of distances between each ling_item in each each list of ling_items in uttypes. Uses acoustic weights in PARAMS and save the result as a matrix for later use.
(acost:file_difference FILENAME1 FILENAME2 PARAMS)
Load in the two named tracks and find the acoustic difference over all based on the weights in PARAMS.
(acost:utt.load_coeffs UTT PARAMS)
Load in the acoustic coefficients into UTT and set the Acoustic_Coeffs feature for each segment in UTT.
(add-doc-var VARNAME DOCSTRING)
Add document string DOCSTRING to VARNAME. If DOCSTRING is nil this has no effect. If VARNAME already has a document string replace it with DOCSTRING.
(and CONJ1 CONJ2 ... CONJN)
Evaluate each conjunction CONJn in turn until one evaluates to nil. Otherwise return value of CONJN.
(append L0 L1 ...)
Append each list to the first list in turn.
(append LIST1 LIST2)
Returns LIST2 appended to LIST1, LIST1 is distroyed.
(apply FUNC ARGS)
Call FUNC with ARGS as arguments.
(apply_hooks HOOK OBJ)
Apply HOOK(s) to OBJ. HOOK is a function or list of functions that take one argument.
(apply_method METHOD UTT)
Apply the appropriate function to utt defined in parameter.
(approx-equal? a b diff)
True is the difference between a b is less than diff. This allows equality between floats which may have been written out and read in and hence have slightly different precision.
(aref ARRAY INDEX)
Return ARRAY[INDEX]
(aset ARRAY INDEX VAL)
Set ARRAY[INDEX] = VAL
(assoc KEY A-LIST)
Return pair with KEY in A-LIST or nil.
(assoc_string key alist)
Look up key in alist using string-equal. This allow indexing by string rather than just symbols.
(assq ITEM ALIST)
Returns pairs from ALIST whose car is ITEM or nil if ITEM is not in ALIST.
(atom X)
True if X is not a cons cells, nil otherwise.
(audio_mode MODE)
Control audio specific modes. Five subcommands are supported. If MODE is async, start the audio spooler so that Festival need not wait for a waveform to complete playing before continuing. If MODE is sync wait for the audio spooler to empty, if running, and they cause future plays to wait for the playing to complete before continuing. Other MODEs are, close which waits for the audio spooler to finish any waveforms in the queue and then closes the spooler (it will restart on the next play), shutup, stops the current waveform playing and empties the queue, and query which lists the files in the queue. The queue may be up to five waveforms long. [see section 23 Audio output]
(backquote FORM)
Backquote function for expanding forms in macros.
(basename PATH SUFFIX)
Return a string with directory removed from basename. If SUFFIX is specified remove that from end of PATH. Basically the same function as the UNIX command of the same name.
(begin . BODY)
Evaluate s-expressions in BODY returning value of from last expression.
(english_token_to_words TOKENSTREAM TOKENNAME)
Returns a list of words expanded from TOKENNAME. Note that as this function may be called recursively TOKENNAME may not be the name of TOKENSTREAM.
(Builtin_PostLex UTT)
Post-lexical rules. Currently only vowel reduction applied to each syllable using postlex_vowel_reduce_cart_tree, and the table of vowel reduction pairs in postlex_vowel_reduce_table.
(caar X)
Return the (car (car X)).
(caddr X)
Return the (car (cdr (cdr X))).
(cadr X)
Return the (car (cdr X)).
(car DATA1)
Returns car of DATA1. If DATA1 is nil or a symbol, return nil.
(cd DIRNAME)
Change directory to DIRNAME, if DIRNAME is nil or not specified change directory to user's HOME directory.
(cdar X)
Return the (cdr (car X)).
(cdddr X)
Return the (cdr (cdr (cdr X))).
(cddr X)
Return the (cdr (cdr X)).
(cdr DATA1)
Returns cdr of DATA1. If DATA1 is nil or a symbol, return nil.
(cl_mapping UTT PARAMS)
Impose prosody upto some percentage, and not absolutely.
(Pauses UTT)
Predict pause insertion.
(Classic_Phrasify UTT)
Creates phrases from words, if pos_supported is non-nil, a more elaborate system of prediction is used. Here probability models based on part of speech and B/NB distribution are used to predict breaks. This system uses standard Viterbi decoding techniques. If pos_supported is nil, a simple CART-based prediction model is used. [see section 17 Phrase breaks]
(Classic_POS UTT)
Predict part of speech tags for the existing word stream. If the variable pos_lex_name is nil nothing happens, otherwise it is assumed to point to a lexicon file giving part of speech distribution for words. An ngram model file should be in pos_ngram_name. The system uses standard Viterbi decoding techniques. [see section 16 POS tagging]
(Classic_PostLex utt)
Apply post lexical rules (both builtin and those specified in postlex_rules_hooks).
(Classic_Word UTT)
Build the syllable/segment/SylStructure from the given words using the Lexicon. Uses part of speech information in the lexicon look up if present.
(clunits:list)
List names of currently loaded cluster databases.
(clunits:load_all_coefs FILEIDLIST)
Load in coefficients, signal and join coefficients for each named fileid. This is can be called at startup to to reduce the load time during synthesis (though may make the image large).
(clunits:load_db PARAMS)
Load index file for cluster database and set up params, and select it.
(clunits:select NAME)
Select a previously loaded cluster database.
(Clunits_Get_Units UTT)
Construct Unit relation from the selected units in Segment and extract their parameters from the clunit db.
(Clunits_Select UTT)
Select units from current databases using cluster selection method.
(Clunits_Simple_Wave UTT)
Naively concatenate signals together into a single wave (for debugging).
(Clunits_SmoothedJoin_Wave UTT)
smoothed join.
(Clunits_Windowed_Wave UTT)
Use hamming window over edges of units to join them, no prosodic modification though.
(cmu_lts_function word feats)
Function called for CMULEX when word is not found in lexicon. Uses LTS rules trained from the original lexicon, and lexical stress prediction rules.
(cmulex_addenda)
Add entries to the current lexicon (radio/darpa). These are basically words that are not in the CMU lexicon.
Join all the waves together into the desired output file
and delete the intermediate ones.
(compile-file FILENAME)
Compile lisp forms in FILENAME.scm to FILENAME.bin.
(compile_library)
Compile all the scheme files in the library directory.
(cons DATA1 DATA2)
Construct cons pair whose car is DATA1 and cdr is DATA2.
(cons-array DIM KIND)
Construct array of size DIM and type KIND. Where KIND may be one of double, long, string or lisp.
(copy-list LIST)
Return new list with same members as LIST.
(debug_output ARG)
If ARG is non-nil cause all future debug output to be sent to cerr, otherwise discard it (send it to /dev/null).
(def_feature_docstring FEATURENAME FEATUREDOC)
As some feature are used directly of stream items with no accompanying feature function, the features are just values on the feature list. This function also those features to have an accompanying documentation string.
(define (FUNCNAME ARG1 ARG2 ...) . BODY)
Define a new function call FUNCNAME with arguments ARG1, ARG2 ... and BODY.
(defmac-macro MACRONAME FORM)
Define a macro. Macro expand FORM in-line.
(defPhoneSet PHONESETNAME FEATURES PHONEDEFS)
Define a new phoneset named PHONESETNAME. Each phone is described with a set of features as described in FEATURES. Some of these FEATURES may be significant in various parts of the system. Copying an existing description is a good start. [see section 12 Phonesets]
(defSynthType TYPE . BODY)
Define a new wave synthesis type. TYPE is an atomic type that identifies the type of synthesis. BODY is evaluated with argument utt, when utt.synth is called with an utterance of type TYPE. [see section 14.2 Utterance types]
(defUttType TYPE . BODY)
Define a new utterance type. TYPE is an atomic type that is specified as the first argument to the function Utterance. BODY is evaluated with argument utt, when utt.synth is called with an utterance of type TYPE. You almost always require the function Initialize first. [see section 14.2 Utterance types]
(delete-file FILENAME)
Delete named file.
(delq ITEM LIST)
Destructively delete ITEM from LIST, returns LIST, if ITEM is not first in LIST, cdr of LIST otherwise. If ITEM is not in LIST, LIST is returned unchanged.
(describe_all_modules)
Print descriptions of all proclaimed modules
(describe_module MOD)
Describe the module named by the symbol MOD.
(directory-entries DIRECTORY &opt NOFLAGDIR)
Return a list of the entries in the directory. If NOFLAGDIR is non-null don't check to see which are directories.
(display utt)
Display an utterance's waveform, F0 and segment labels in Xwaves. Xwaves must be running on the current machine, with a labeller for this to work.
(doc SYMBOL)
Return documentation for SYMBOL.
(Donovan_Init PARAMS)
Initialize the Donovan LPC diphone database. PARAMS are an assoc list of parameter name and value. The two parameters are index_file (value is a pathname for "diphlocs.txt") and diphone_file (value is a pathname for "lpcdiphs.bin"). [see section 22.1 LPC diphone synthesizer]
(Donovan_Synthesize UTT)
Synthesize a waveform using the Donovan LPC diphone synthesizer. This is called from Synthesize when the Synth_Method Parameter has the value Donovan. [see section 22.1 LPC diphone synthesizer]
(downcase SYMBOL)
Returns a string with the downcased version of SYMBOL's printname.
(Duration utt)
Predict segmental durations using Duration_Method defined in Parameters. Four methods are currently available: averages, Klatt rules, CART tree based, and fixed duration.
(Duration_Averages UTT)
Label all segments with their average duration found from the assoc list of phone names to averages in phoneme_durations. This module is called through the module Duration when the Parameter Duration_Method is set to Averages. [see section 19.2 Average durations]
(Duration_Default UTT)
Label all segments with a fixed duration of 100ms. This module is called through the module Duration when the Parameter Duration_Method is unset or set to Default. [see section 19.1 Default durations]
(duration_find_stretch utt seg)
Find any relavant duration stretch.
(Duration_Klatt UTT)
This uses an implementation of the Klatt Duration rules to predict durations for each segment in UTT. It uses the information in duration_klatt_params for mean and lower bound for each phone. This module is called through the module Duration when the Parameter Duration_Method is set to Klatt. This method modifies its predicted durations by the factor set in the Parameter Duration_Stretch (if set). [see section 19.3 Klatt durations]
(Duration_LogZScores utt)
Predicts duration to segments using the CART tree in duration_logzscore_tree and duration_logzscore_tree_silence which produces a zscore of the log duration. The variable duration_logzscore_ph_info contains (log) means and std for each phone in the set.
(Duration_Tree UTT)
Uses the CART tree in duration_cart_tree to predict absolute durations for each segment in UTT. This module is called through the module Duration when the Parameter Duration_Method is set to Tree. This method modifies its predicted durations by the factor set in the Parameter Duration_Stretch (if set). [see section 19.4 CART durations]
(Duration_Tree_ZScores UTT)
Uses the CART tree in duration_cart_tree to predict z scores duration values for each segment in UTT. The z scores are converted back to absolute values by the assoc list of phones to means and standard deviations in the variable duration_ph_info. This module is called through the module Duration when the Parameter Duration_Method is set to Tree_ZScores. This method modifies its predicted durations by the factor set in the Parameter Duration_Stretch (if set). [see section 19.4 CART durations]
(duration_unzscore phname zscore table)
Look up phname in table and convert xscore back to absolute domain.
(english_token_to_words TOKEN NAME)
Returns a list of words for NAME from TOKEN. This allows the user to customize various non-local, multi-word, context dependent translations of tokens into words. If this function is unset only the builtin translation rules are used, if this is set the builtin rules are not used unless explicitly called. [see section 15.2 Token to word rules]
(env-lookup VARNAME ENVIRONMENT)
Return value of VARNAME in ENVIRONMENT.
(eof_val)
Returns symbol used to indicate end of file. May be used (with eq?) to determine when end of file occurs while reading files.
(eq? DATA1 DATA2)
Returns t if DATA1 and DATA2 are the same object.
(equal? A B)
t if s-expressions A and B are recursively equal, nil otherwise.
(eqv? DATA1 DATA2)
Returns t if DATA1 and DATA2 are the same object or equal numbers.
(error MESSAGE DATA)
Prints MESSAGE about DATA and throws an error.
(eval DATA)
Evaluate DATA and return result.
(exit [RCODE])
Exit from program, if RCODE is given it is given as an argument to the system call exit.
(exp NUM)
Return e**NUM.
(extract_tokens FILE TOKENS OUTFILE)
Find all occurences of TOKENS in FILE and output specified context around the token. Results are appended to OUTFILE, if OUTFILE is nil, output goes to stdout.
(f2b_lts WORD FEATURES)
Letter to sound rule system for f2b (American English), uses the NRL LTS ruleset and maps the result to the radio phone set.
(fasdump FILENAME FORMS)
Fast dump FORMS into FILENAME.
(fasl-close TABLE)
Close fasl table.
(fasl-open FILENAME MODE)
Open fasl FILENAME as MODE. Returns a fasl-table.
(fasload FILENAME ARGS)
Fast load FILENAME.
(fasload_library FILENAME)
Load binary file from library
(fast-print P TABLE)
(fast-read TABLE)
(fclose FILEP)
Close filepoint FILEP.
(feats.get FEATS FEATNAME)
Return value of FEATNAME (which may be a simple feature name or a pathname) in FEATS. If FEATS is nil a new feature set is created
(feats.make)
Return an new empty features object.
(feats.present FEATS FEATNAME)
Return t is FEATNAME is present in FEATS, nil otherwise.
(feats.remove FEATS FEATNAME)
Remove feature names FEATNAME from FEATS.
(feats.set FEATS FEATNAME VALUE)
Set FEATNAME to VALUE in FEATS.
(feats.tolisp FEATS)
Gives a lisp representation of the features, this is a debug function and may or may not exist tomorrow.
(feats.value_sort FEATURES NAME)
(festival_warranty)
Display Festival's copyright and warranty. [see section 2 Copying]
(fflush FILEP)
Flush FILEP. If FILEP is nil, then flush stdout.
(find_month_from_number token string-number)
Find the textual representation of the month from the given string number
find_peak_seg_anchor ie pk_pos
Part of the workings of peak_segment_anchor.
(Fixed_Prosody UTT)
Add fixed duration and fixed monotone F0 to the sgements in UTT. Uses values of FP_duration and FP_F0 as fixed values.
(flatten LIST)
Return flatend list (list of all atoms in LIST).
(fopen FILENAME HOW)
Return file pointer for FILENAME opened in mode HOW.
(format FD FORMATSTRING ARG0 ARG1 ...)
Output ARGs to FD using FROMATSTRING. FORMATSTRING is like a printf formatstrng. FD may be a filedescriptor, or t (standard output) or nil (return as a string). Note not all printf format directive are supported. %l is additionally support for Lisp objects. [see section 8.4 Scheme I/O]
(fread BUFFER FILE)
BUFFER is a string of length N, N bytes are read from FILE into BUFFER.
(fringe_command SERVER PACKAGE OPERATION ARGS)
Send command to the fringe server SERVER. ARGS should be an association list of key-value pairs.
(fringe_command_string SERVER COMMAND)
Send COMMAND to the fringe server SERVER.
(fringe_connect SERVER)
Re-open the connection to the server.
(fringe_disconnect SERVER)
Close the connection to the server.
(fringe_read_server_table &opt FILENAME)
Read the users table of fringe servers, or the table in FILENAME if given.
(fringe_server &opt NAME)
Return a connection to a fringe server with the given name. If name is omitted it defaults to "fringe".
(fringe_servers)
Returns a list of the know fringe servers. This doesn't guarantee that they are still running.
(fseek FILEP OFFSET DIRECTION)
Position FILEP to OFFSET. If DIRECTION is 0 offset is from start of file. If DIRECTION is 1, offset is from current position. If DIRECTION is 2 offset is from end of file.
(ftell FILEP)
Returns position in file FILEP is currently pointing at.
(fwarning MODE)
For controlling various levels of warning messages. If MODE is nil, or not specified stop all warning messages from being displayed. If MODE display warning messages.
(fwrite BUFFER FILE)
Write BUFFER into FILE.
(gc)
Collect garbage now, where gc method supports it.
(gc-status OPTION)
Control summary information during garbage collection. If OPTION is t, output information at each garbage collection, if nil do gc silently.
(Gen_Viterbi UTT)
Applies viterbi search algorithm based on the parameters in gen_vit_params. Basically allows user candidate selection function combined with ngrams.
(get SYM KEY)
Get property named KEY for SYM.
Gets the c/v value of the segment within a syllable.
(get_param name params default)
Get named parameters in params returning default if its not present.
(get_url URL OUTFILE)
Get URL and put contents in OUTFILE. Currently only http, and file type URLs are supported.
(getc FILEP)
Get next character from FILEP. Character is returned as a number. If FILEP is nil, or not specified input comes from stdin.
(getenv VARNAME)
Returns value of UNIX environment variable VARNAME, or nil if VARNAME is unset.
(getpid)
Return process id.
(href TABLE KEY)
Return value in hash table TABLE with KEY.
(hset TABLE KEY VALUE)
Set hash table TABLE KEY to VALUE.
(if COND TRUEPART FALSEPART)
If COND evaluates to non-nil evaluate TRUEPART and return result, otherwise evaluate and return FALSEPART. If COND is nil and FALSEPART is nil, nil is returned.
(Initialize UTT)
This module should be called first on all utterances it does some necessary initialization of the utterance and loads the base streams with the information from the input form.
(insert_initial_pause UTT)
Always have an initial silence if the utterance is non-empty. Insert a silence segment after the last segment in WORDITEM in UTT.
(insert_pause UTT WORDITEM)
Insert a silence segment after the last segment in WORDITEM in UTT.
(Int_Targets utt)
The second stage in F0 prediction. This generates F0 targets related to segments using one of three methods, a simple hat, linear regression based on ToBI markings, and a simple declining slope. This second part deals with actual F0 values and durations, while the previous section only deals with accent (and boundary tone) assignment. [see section 18 Intonation]
(Int_Targets_Default UTT)
This module creates two Targets causing a simple downward continuous F0 through the whole utterance. The code is in an appropriate named file called duffint. This module is called when the Parameter Int_Method is not set or set to Default. This module is called through the Int_Targets module. Optional parameters for a start value (default 130) and end value (default 110) may be set in the variable diffint_params. This can be used to generate a monotone intonation with a setting like (set! duffint_params '((start 100) (end 100))). [see section 18.1 Default intonation]
(Int_Targets_General UTT)
Add targets based on the functions defined in int_general_params. This method allows quite detailed control over the general of targets per syllable, see manual for details and examples. This module is called when the Parameter Int_Method is set to General. This module is called through the Int_Targets module. [see section 18.5 General intonation]
(Int_Targets_LR UTT)
Predict Target F0 points using linear regression from factors such as accent, tone, stress, position in phrase etc. This utterance module is called through the module Int_Targets when the Parameter Int_Method is set to ToBI, even though this technique is not restricted to the ToBI labelling system. [see section 18.3 Tree intonation]
(Int_Targets_Relation UTT)
(Int_Targets_Simple UTT)
Naively add targets for hat shaped accents for each accent in the IntEvent stream. This module is called when the Parameter Int_Method is set to Simple. This module is called through the Int_Targets module. [see section 18.2 Simple intonation]
(Int_Targets_Tilt utt)
Assign Tilt parameters to each IntEvent and then generate the F0 contour and assign targets.
(intern ATOM)
Intern ATOM on the oblist.
(Intonation utt)
Select between different intonation modules depending on the Parameter Int_Method. Currently offers three types: Simple, hats on each content word; ToBI, a tree method for predicting ToBI accents; and Default a really bad method with a simple downward sloping F0. This is the first of a two-stage intonation prediction process. This adds accent-like features to syllables, the second, Int_Targets generates the F0 contour itself. [see section 18 Intonation]
(Intonation_Default UTT)
this method is such a bad intonation module that it does nothing at all. This utterance module is called when the Parameter Int_Method is not set or set to Default. This module is called through the Intonation module. [see section 18.1 Default intonation]
(Intonation_Simple)
Assign accents to each content word, creating an IntEvent stream. This utterance module is called when the Parameter Int_Method is set to Simple. This module is called through the Intonation module. [see section 18.2 Simple intonation]
(Intonation_Tilt utt)
Assign accent and boundary IntEvents to each syllable, and fill in spaces with silence and connections.
(Intonation_Tree UTT)
Use the CART trees in int_tone_cart_tree and int_accent_cart_tree to create an IntEvent stream of tones and accents related to syllables. This module is called through the Intonation module and is selected when the Parameter Int_Method is ToBI. [see section 18.3 Tree intonation]
(intro)
Synthesize an introduction to the Festival Speech Synthesis System.
(intro-spanish)
Synthesize an introduction to the Festival Speech Synthesis System in spanish. Spanish voice must already be selected for this.
(item.add_link ITEMFROM ITEMTO)
Add a link from ITEMFROM to ITEMTO is the relation ITEMFROM is in.
(item.append_daughter ITEM1 ITEM2)
Add a ITEM2 a new daughter (right-most) to ITEM1 in the relation of ITEM1. If ITEM2 is of type item then it is added directly otherwise ITEM2 is treated as a description of an item and a one is created with that description (name features).
(item.daughter1 ITEM)
Return the first daughter of ITEM, or nil if there is none.
(item.daughter1_to s relname)
Follow daughter1 links of s in its current relation until an item is found that is also in relname, is s is in relname it is returned. The return item is returned in relation relname, or nil if there is nothing in relname.
(item.daughter2 ITEM)
Return the second daughter of ITEM, or nil if there is none.
(item.daughtern ITEM)
Return the last daughter of ITEM, or nil if there is none.
(item.daughter1_to s relname)
Follow daughtern links of s in its current relation until an item is found that is also in relname, is s is in relname it is returned. The return item is returned in relation relname, or nil if there is nothing in relname.
(item.daughters parent)
Return a list of all daughters of parent.
(item.delete ITEM)
Remove this item from all relations it is in and delete it.
(item.down ITEM)
Return the item below ITEM, or nil if there is none.
(item.exchange_tree FROM TO)
Exchanged contents of FROM and TO, and descendents of FROM and TO. Returns t if successful, or nil if FROM or TO contain each other.
(item.feat ITEM FEATNAME)
Return value of FEATNAME (which may be a simple feature name or a pathname) of ITEM.
(item.features ITEM EVALUATE_FEATURES))
Returns all features in ITEM as an assoc list.
(item.first_leaf ITEM)
Returns he left most leaf in the tree dominated by ITEM. This is like calling item.daughter1 recursively until an item with no daughters is found.
(item.get_utt ITEM)
Get utterance from given ITEM (if possible).
(item.insert ITEM1 ITEM2 DIRECTION)
Insert ITEM2 in ITEM1's relation with repsect to DIRECTION. If DIRECTION is unspecified, after, is assumed. Valid DIRECTIONS as before, after, above and below. Use the functions item.insert_parent and item.append_daughter for specific tree adjoining. If ITEM2 is of type item then it is added directly, otherwise it is treated as a description of an item and new one is created.
(item.insert_parent ITEM1 ITEM2)
Insert a new parent between this ITEM1 and its parentm in ITEM1's relation. If ITEM2 is of type item then it is added directly, otherwise it is treated as a description of an item and one is created with that description (name features).
(item.last_leaf ITEM)
Returns he right most leaf in the tree dominated by ITEM. This is like calling item.daughtern recursively until an item with no daughters is found.
(item.relation.leafs item relname)
Return a list of the leafs of this item in this relation.
(item.link1 ITEM)
Return first item linked to ITEM in current relation.
(item.link2 ITEM)
Return second item linked to ITEM in current relation.
(item.linkedfrom ITEM)
Return the item tht is linked to ITEM.
(item.linkn ITEM)
Return last item linked to ITEM in current relation.
(item.merge FROM TO)
Merge FROM into TO making them the same items. All features in FROM are merged into TO and all references to FROM are made to point to TO.
(item.move_tree FROM TO)
Move contents, and descendents of FROM to TO. Old daughters of TO are deleted. FROM will be deleted too if it is being viewed as the same same relation as TO. FROM will be deleted from its current place in TO's relation. Returns t if successful, returns nil if TO is within FROM.
(item.name ITEM)
Returns the name of ITEM. [see section 14.5 Accessing an utterance]
(item.next ITEM)
Return the next ITEM in the current relation, or nil if there is no next.
(item.next_item ITEM)
Will give next item in this relation visiting every item in the relation until the end. Traverses in pre-order, root followed by daughters (then siblings).
(item.next_leaf ITEM)
Return the next leaf item (i.e. one with no daughters) in this relation. Note this may traverse up and down the relation tree significantly to find it.
(item.next_link ITEM)
Return next item licked to the same item ITEM is linked to.
(item.parent ITEM)
Return the item of ITEM, or nil if there is none.
(item.parent_to s relname)
Find the first ancestor of s in its current relation that is also in relname. s is treated as an ancestor of itself so if s is in relname it is returned. The returned value is in will be in relation relname or nil if there isn't one.
(item.prepend_daughter ITEM1 ITEM2)
Add a ITEM2 a new daughter (left-most) to ITEM1 in the relation of ITEM1. If ITEM2 is of type item then it is added directly otherwise ITEM2 is treated as a description of an item and a one is created with that description (name features).
(item.prev ITEM)
Return the previous ITEM in the current relation, or nil if there is no previous.
(item.raw_feat ITEM FEATNAME)
Return value of FEATNAME as native features structure (which may be a simple feature name or a pathname) of ITEM.
(item.relation ITEM RELATIONNAME)
Return the item such whose relation is RELATIONNAME. If ITEM is not in RELATIONNAME then nil is return.
(item.relation.append_daughter parent relname daughter)
Make add daughter to parent as a new daughter in relname.
(item.relation.daughter1 item relname)
Return the first daughter of this item in this relation.
(item.relation.daughter2 item relname)
Return the second daughter of this item in this relation.
(item.relation.daughtern item relname)
Return the final daughter of this item in this relation.
(item.relation.daughters parent relname)
Return a list of all daughters of parent by relname.
(item.relation.first item relname)
Return the most previous item from this item in this relation.
(item.relation.insert si relname newsi direction)
Insert newsi in relation relname with respect to direction. If direction is ommited after is assumed, valid directions are after before, above and below. Note you should use item.relation.append_daughter for tree adjoining. newsi maybe a item itself of a LISP description of one.
(item.relation.leafs item relname)
Return a list of the leafs of this item in this relation.
(item.relation.name ITEM)
Return the name of the relation this ITEM is currently being viewed through.
(item.relation.next item relname)
Return the next item in this relation.
(item.relation.parent item relname)
Return the parent of this item in this relation.
(item.relation.prev item relname)
Return the previous item in this relation.
(item.relation.remove ITEM RELATIONNAME)
Remove this item from Relation, if it apears in no other relation it will be deleted too, in contrast item.delete will remove an item from all other relations, while this just removes it from this relation. Note this will also remove all daughters of this item in this relation from this relation.
(item.relations ITEM)
Return a list of names of the relations this item is in.
(item.remove_feature ITEM FNAME)
Remove feature named FNAME from ITEM. Returns t is successfully remove, nil if not found.
(item.root s)
Follow parent link until s has no parent.
(item.set_feat ITEM FEATNAME VALUE)
Set FEATNAME to VALUE in ITEM.
(item.set_function ITEM FEATNAME FEATFUNCNAME)
Set FEATNAME to feature function name FEATFUNCNAME in ITEM.
(item.set_name ITEM NAME)
Sets ITEM's name to NAME. [see section 14.5 Accessing an utterance]
(item.up ITEM)
Return the item above ITEM, or nil if there is none.
(kal_diphone_const_clusters UTT)
Identify consonant clusters, dark ls etc in the segment stream ready for diphone resynthesis. This may be called as a post lexical rule through poslex_rule_hooks.
(kal_diphone_fix_phone_name UTT SEG)
Add the feature diphone_phone_name to given segment with the appropriate name for constructing a diphone. Basically adds _ if either side is part of the same consonant cluster, adds $ either side if in different syllable for preceding/succeeding vowel syllable.
(lambda (ARG1 ARG2 ...) . BODY)
Create closure (anonymous function) with arguments ARG1, ARG2 ... and BODY.
(language_american_english)
Set up language parameters for Aemerican English.
(language_british_english)
Set up language parameters for British English.
(language_spanish)
Set up language parameters for Castillian Spanish.
(language_british_english)
Set up language parameters for British English.
(language_scots_gaelic)
Set up language parameters for Scots Gaelic.
(language_welsh)
Set up language parameters for Welsh.
(last A)
Last (cdr) element in list A.
(lastline STRING)
Returns the part of the string which between the last newline and the end of string.
(length LIST)
Return length of LIST, or 0 if LIST is not a list.
(let-internal STUFF)
Internal function used to implement let.
(let ((VAR1 VAL1) (VAR2 VAL2) ...) . BODY)
Evaluate BODY in an environment where VAR1 is set to VAL1, VAR2 is set to VAL2 etc.
(lex.add.entry ENTRY)
Add ENTRY to the addenda of the current lexicon. As the addenda is checked before the compiled lexicon or letter to sound rules, this will cause ENTRY to be found before all others. If a word already in the addenda is added again the most recent addition will be found (part of speech tags are respected in the look up). [see section 13.1 Lexical entries]
(lex.compile ENTRYFILE COMPILEFILE)
Compile the list of lexical entries in ENTRYFILE into a compiled file in COMPILEFILE. [see section 13.2 Defining lexicons]
(lex.create LEXNAME)
Create a new lexicon of name LEXNAME. If it already exists, the old one is deleted first. [see section 13.2 Defining lexicons]
(lex.entrycount WORD)
Return the number of entries in the compiled lexicon that match this word. This is used in detecting homographs.
(lex.list)
List names of all currently defined lexicons.
(lex.lookup WORD FEATURES)
Lookup word in current lexicon. The addenda is checked first, if WORD with matching FEATURES (so far this is only the part of speech tag) is not found the compiled lexicon is checked. Only if the word is still not found the letter to sound rules (or whatever method specified by the current lexicon's lts.method is used). [see section 13.3 Lookup process]
(lex.lookup_all WORD)
Return list of all entries in the addenda and compiled lexicon that match this word. The letter to sound rules and user defined unknown word function is ignored.
(lex.select LEXNAME)
Select LEXNAME as current lexicon. The name of the previously selected lexicon is returned.
(lex.set.compile.file COMPFILENAME)
Set the current lexicon's compile file to COMPFILENAME. COMPFILENAME is a compiled lexicon file created by lex.compile. [see section 13.2 Defining lexicons]
(lex.set.lts.method METHOD)
Set the current lexicon's letter-to-sound method to METHOD. METHOD can take any of the following values: Error (the default) signal a festival error if a word is not found in the lexicon; lts_rules use the letter to sound rule set named by lts_ruleset; none return simply nil in the pronunciation field; function use call the two argument function lex_user_unknown_word (as set by the user) with the word and features to provide an entry. [see section 13.4 Letter to sound rules]
(lex.set.lts.ruleset RULESETNAME)
Set the current lexicon's letter-to-sound ruleset to RULESETNAME. A ruleset of that name must already be defined. This is used if lts.method is set to lts_rules. [see section 13.4 Letter to sound rules]
(lex.set.phoneset PHONESETNAME)
Set current lexicon's phone set to PHONESETNAME. PHONESETNAME must be a currently defined (and, of course, loaded) phone set. [see section 13.2 Defining lexicons]
(lex.set.pos.map POSMAP)
A reverse assoc-list mapping part of speech tags to the lexical part of speech tag set. [see section 13.1 Lexical entries]
(lex.set.post_hooks HOOKS)
Set a function or list of functions that are to be applied to the entry after lookup. Returns previous value [see section 13.1 Lexical entries]
(lex.set.pre_hooks HOOKS)
Set a function or list of functions that are to be applied to the entry before lookup. Returns previous value [see section 13.1 Lexical entries]
(lex.syllabify.phstress PHONELIST)
Syllabify the given phone list (if current phone set). Vowels may have the numerals 0, 1, or 2 as suffixes, if so these are taken to be stress for the syllable they are in. This format is similar to the entry format in the CMU and BEEP lexicons. [see section 13.2 Defining lexicons]
(lex_user_unknown_word WORD FEATS)
Function called by lexicon when 'function type letter to sound rules is defined. It is the user's responsibility to defined this function themselves when they want to deal with unknown words themselves.
(library_expand_filename FILENAME)
Search for filename by appending FILENAME to each member of load-path. Full expanded pathname is returned. If not found in load-path FILENAME is returned.
(linear_regression ITEM MODEL)
Use linear regression MODEL on ITEM. MODEL consists of a list of features, weights and optional map list. E.g. ((Intercept 100) (tobi_accent 10 (H* !H*))).
(list A0 A1 ...)
Return list containing A0 A1 ...
(load FILENAME OPTION)
Load s-expressions in FILENAME. If OPTION is nil or unspecified evaluate each s-expression in FILENAME as it is read, if OPTION is t, return them unevaluated in a list.
(load_library FILENAME)
Load file from library, appends FILENAME to each path in load-path until a valid file is found. If none found loads name itself
(log NUM)
Return natural log of NUM.
(lr_predict ITEM LRMODEL)
Apply the linear regression model LRMODEL to ITEM in. This returns float value by summing the product of the coeffients and values returned by the specificed features in ITEM. [see section 25.5 Linear regression]
(lts.apply WORD RULESETNAME)
Apply lts ruleset RULESETNAME to word returning result. [see section 13.4 Letter to sound rules]
(lts.in.alphabet WORD RULESETNAME)
Returns t is all characters in symbol word (or items in list WORD) are in the alphabet of letter to sound ruleset name RULESETNAME. nil otherwise. [see section 13.4 Letter to sound rules]
(lts.list)
Return list of all current defined LTS rulesets.
(lts.ruleset NAME RULES SETS)
Define a new set of letter to sound rules. [see section 13.4 Letter to sound rules]
(make-a-doc FILENAME DOCLIST)
Make a texinfo document in FILENAME as a texinfo table, items are from DOCLIST. DOCLIST names which doclist to use, it may be one of 'function, 'features or 'vars.
(make-doc)
Find function and variable document strings and save them in texinfo format to respective files.
(make-list SIZE VALUE)
Return list of SIZE with each member VALUE.
(make_tmp_filename)
Return name of temporary file.
(manual SECTION)
Display SECTION in the manual. SECTION is a string identifying a manual section (it could be an initial substring. If SECTION is nil or unspecifed then the Manual table of contents is displayed. This uses netscape to display the manual page so you must have that (use variable manual-browser to identify it) and the variable manual-url pointing to a copy of the manual. [see section 7.3 Getting some help]
(manual-sym SYMBOL)
Display the section in the manual that SYMBOL's docstring has identified as the most relevant. The section is named on the last line of a documentation string with no newlines within it prefixed by "[see " with a "]" just immediately before the end of the documentation string. The manual section name is translated to the section in the HTML version of the manual and a URL is and sent to Netscape for display. [see section 7.3 Getting some help]
(map_to_relation UTT Source_relation Target_relation new_relation)
From the F0 contour in F0_relation, create a set of pitchmarks in PM_relation. If END_TIME is not nil, Extra pitchmarks will be created at the default interval up to this point
(mapcar FUNCTION ARGS [ARGS2])
Apply FUNCTION to each member of ARGS (and [ARGS2]), returning list of return values.
(MBROLA_Synth UTT)
Synthesize using MBROLA as external module. Basically dump the info from this utterance. Call MBROLA and reload the waveform into utt. [see section 22.2 MBROLA]
(member ITEM LIST)
Returns subset of LIST whose car is ITEM if it exists, nil otherwise.
(member_string STRING LIST)
Returns subset of LIST whose car is STRING if it exists, nil otherwise.
(module_description MOD)
Returns the description record of the module named by symbol MOD
(month_range SC)
1 if SC's name is > 0 and < 32, 0 otherwise.
(mt_accent syl)
Accent or 0 if none.
(mt_break syl)
Break or 0 if none.
(mt_close n)
The number of consituents this is the end of, Effectively the number of closing brackets after this word.
(mt_fssw s)
1 if first stressed syllable in word, 0 otherwise.
(mt_lssp s)
1 if last stressed syllable in phrase, 0 otherwise.
(nfssw s)
1 if second or later stressed syllable in word, 0 otherwise.
(mt_num_s s)
The number of s MetricalValues from here to a w or top.
(mt_num_w s)
The number of w MetricalValues from here to a s or top.
(mt_open n)
The number of consituents this is the start of, Effectively the number of opening brackets before this word.
(mt_postype syl)
Returns single, initial, final or middle.
(mt_strong s)
1 if all MetricalValues a s to a word, 0 otherwise.
(MultiProbParse UTT)
Parse part of speech tags in Word relation. Unlike ProbParse this allows multiple sentences to appear in the one utterance. The CART tree in eos_tree is used to define end of sentence. Loads the grammar from scfg_grammar_filename and saves the best parse in the Syntax Relation.
(play_wave FILENAME)
Play given wavefile
(nconc A B)
Destructively append B to A, if A is nil return B.
(ngram.load NAME FILENAME)
Load an ngram from FILENAME and store it named NAME for later access.
(nint NUMBER)
Returns nearest int to NUMBER.
(not DATA)
Returns t if DATA is nil, nil otherwise.
(nth N LIST)
Returns nth car of LIST, 0 is car.
(nth_cdr N LIST)
Returns nth cdr of LIST, 0 is LIST.
(null? DATA)
Returns t if DATA is nil, nil otherwise.
(num_digits SC)
Returns number of digits (actually chars) is SC's name.
Finds the number of postvocalic consonants in a syllable.
(number? DATA)
Returns t if DATA is a number, nil otherwise.
(oblist)
Return oblist.
(or DISJ1 DISJ2 ...)
Evaluate each disjunction DISJn in turn until one evaluates to non-nil. Otherwise return nil.
(pair? DATA)
Returns t if DATA is a cons cell, nil otherwise.
(Param.def NAME VAL)
Set parameter NAME to VAL if not already set
(Param.get NAME)
Get parameter NAME's value (nil if unset)
(Param.set NAME VAL)
Set parameter NAME to VAL (deleting any previous setting)
(Parameter.def NAME VAL)
Set parameter NAME to VAL if not already set. This is an OLD function you shold use Param.def instead.
(Parameter.get NAME)
Get parameter NAME's value (nil if unset). This is an OLD function and may not exist in later versions (or change functionality). This function (unlike Param.get) may return sylbols (rather than strings if the val doesn't contain whitespace (to allow older functions to still work.
(Parameter.set NAME VAL)
Set parameter NAME to VAL (deleting any previous setting). This is an old function and you should use Param.set instead.
(parse-number SYMBOL)
Returns a number form a symbol or string whose print name is a number.
(parse_url URL)
Split URL into a list (protocol host port path) suitable for giving to fopen.
(path-append DIRECTORY-PATH ADDITION1 ADDITION2 ...)
Return a the path for ADDITION in DIRECTORY.
(path-as-directory PATHNAME)
Return PATH as a directory name.
(path-as-file PATHNAME)
Return PATH as a non-directory name.
(path-basename PATHNAME)
Return name part of PATH.
(path-is-dirname PATHNAME)
Is PATH a directory name.
(path-is-filename PATHNAME)
Is PATH a non-directory name.
(Pauses utt)
Insert pauses where required.
peak_segment_anchor ie
Determines what segment acts as the anchor for a peak. Returns number of segments from start of accented syllable to peak.
peak_wi_seg segment pk_pos
Finds if a peak occurs w/i a segment
(phone_feature phone feat)
Return the feature for given phone in current phone set, or 0 if it doesn't exist.
(Phoneset.description OPTIONS)
Returns a lisp for of the current phoneme set. Options is a list of parts of the definition you require. OPTIONS may include, silences, phones, features and/or name. If nil all are returned.
(Phoneset.list)
List the names of all currently defined Phonesets.
(PhoneSet.select PHONESETNAME)
Select PHONESETNAME as current phoneset. [see section 12 Phonesets]
(PhoneSet.silences LIST)
Declare LIST of phones as silences. The first in the list should be the "most" silent. [see section 12 Phonesets]
(Phrasify utt)
Construct phrasify over Words module.
(POS utt)
Apply part of speech tagging (and possible parsing too) to Word relation.
(position thing l)
What position is thing in l, -1 if it doesn't exist.
(PostLex utt)
Apply post lexical rules to segment stream. These may be almost arbitrary rules as specified by the particular voice, through the postlex_hooks variable. A number of standard post lexical rule sets are provided including reduction, posessives etc. These rules are also used to mark standard segments with their cluster information used in creating diphone names.
(postlex_apos_s_check UTT)
Deal with possesive s for English (American and British). Delete schwa of 's if previous is not a fricative or affricative, and change voiced to unvoiced s if previous is not voiced.
(pow X Y)
Return X**Y.
(pprintf EXP [FD])
Pretty print EXP to FD, if FD is nil print to the screen.
(print DATA)
Print DATA to stdout if textual form. Not a pretty printer.
(print_string DATA)
Returns a string representing the printing of DATA.
(printfp DATA FILEP)
Print DATA to file indicated by file pointer FILEP. File pointers are are created by fopen.
(probe_file FILENAME)
Returns t if FILENAME exists and is readable, nil otherwise.
(ProbParse UTT)
Parse part of speech tags in Word relation. Loads the grammar from scfg_grammar_filename and saves the best parse in the Syntax Relation.
(proclaim_voice NAME DESCRIPTION)
Describe a voice to the systen. NAME should be atomic name, that conventionally will have voice_ prepended to name the basic selection function. OPTIONS is an assoc list of feature and value and must have at least features for language, gender, dialect and description. The first there of these are atomic, while the description is a text string describing the voice.
(provide FILENAME)
Adds FNAME to the variable provided (if not already there). This means that future calls to (require FILENAME) will not cause FILENAME to be re-loaded.
(putc ECHAR FILEP)
Put ECHAR (a number) as a character to FILEP. If FILEP is nil or not specified output goes to stdout.
(putprop SYM VAL KEY)
Put property VAL named KEY for SYM.
(puts STRING FILEP)
Write STRING (print name of symbol) to FILEP. If FILEP is nil or not specified output goes to stdout.
(pwd)
Returns current directory as a string.
(quit)
Exit from program, does not return.
(quote DATA)
Return data (unevaluated).
(rand)
Returns a pseudo random number between 0 and 1 using the libc rand() function.
(read)
Read next s-expression from stdin and return it.
(read-from-string SYMBOL)
Return first s-expression in print name of SYMBOL.
(readfp FILEP)
Read and return next s-expression from file indicated by file pointer FILEP. File pointers are created by fopen.
(remove ITEM LIST)
(Non-destructively) remove ITEM from LIST.
(remove-duplicates LIST)
Remove duplicate items in LIST.
(remove_leading_zeros name)
Remove leading zeros from given string.
(replace BEFORE AFTER)
Destructively replace contents of cons cell BEFORE with those of AFTER.
(request FILENAME)
Checks if FNAME is already provided (member of variable provided) if not tries to loads it, appending ".scm" to FILENAME. Uses load_library to find the file. Unlike require, fname isn't found no error occurs
(require FILENAME)
Checks if FNAME is already provided (member of variable provided) if not loads it, appending ".scm" to FILENAME. Uses load_library to find the file.
(require_module l)
Check that certain compile-time modules are included in this installation. l may be a single atom or list of atoms. Each item in l must appear in *modules* otherwise an error is throw.
(reverse LIST)
Returns destructively reversed LIST.
(replacd A B)
Destructively replace the cdr of A with B.
(save-forms FILENAME FORMS HOW)
Save FORMS in FILENAME. If HOW is a appending FORMS to FILENAME, or if HOW is w start from the beginning of FILENAME.
Saves the waveform and records its so it can be joined into a
a single waveform at the end.
(save_seg_mbrola_entry ENTRY NAME START DUR TARGS FD)
Entry contains, (name duration num_targs start 1st_targ_pos 1st_targ_val).
(save_segments_mbrola UTT FILENAME)
Save segment information in MBROLA format in filename. The format is phone duration (ms) [% position F0 target]*. [see section 22.2 MBROLA]
(save_waves_during_tts)
Save each waveform in the current directory in files "tts_file_XXX.wav". use (save_waves_during_tts_STOP) to stop saving waveforms
(save_waves_during_tts_STOP)
Stop saving waveforms when doing tts.
(SayPhones PHONES)
PHONES is a list of phonemes. This uses the Phones type utterance to synthesize and play the given phones. Fixed duration specified in FP_duration and fixed monotone duration (FP_F0) are used to generate prosody.
(SayText TEXT)
TEXT, a string, is rendered as speech.
(search-for-voices)
Search down voice-path to locate voices.
(segment_dpitch UTT SEG)
Returns delta pitch, this pitch minus previous pitch.
segs_to_peak sylSyl pk_pos
Determines the number of segments from the start of a syllable to an intonation peak
(send-url-to-netscape URL)
Send given URL to netscape for display. This is primarily used to display parts of the manual referenced in documentation strings.
(send_sexpr_to_client SEXPR)
Sends given sexpression to currently connected client.
(set! SYMBOL VAL)
Set SYMBOL to have value VAL, returns VAL.
(set-car! CONS1 DATA1)
Set car of CONS1 to be DATA1. Returns CONS1. If CONS1 not of type consp an error is is given. This is a destructive operation.
(set-cdr! CONS1 DATA1)
Set cdr of CONS1 to be DATA1. Returns CONS1. If CONS1 not of type consp an error is is given. This is a destructive operation.
(set-symbol-value! SYMBOLNAME VALUE)
Set SYMBOLNAME's value to VALUE, this is much faster than set! but use with caution.
(set_backtrace arg)
If arg is non-nil a backtrace will be display automatically after errors if arg is nil, a backtrace will not automatically be displayed (use (:backtrace) for display explicitly.
(set_module_description MOD DESC)
Set the description for the module named MOD.
(set_server_safe_functions LIST)
Sets restricted list to LIST. When restricted list is non-nil only functions whose names appear in this list may be executed. This is used so that clients in server mode may be restricted to a small number of safe commands. [see section 28.3 Server/client API]
(setenv VARNAME VALUE)
Set the UNIX environment variable VARNAME to VALUE.
(setup_beep_lex)
Lexicon derived from the British English Example Pronunciation dictionary (BEEP) from Tony Robinson ajr@eng.cam.ac.uk. Around 160,000 entries.
(setup_cmu6_lex)
Lexicon derived from the CMU lexicon (cmudict-0.6), around 100,000 entries, in the radio phoneset (sort of darpa-like). Includes letter to sound rule model trained from this data, the format of this lexicon is suitable for the UniSyn metrical phonology modules. That is the entries are not syllabified,
(setup_cmu_lex)
Lexicon derived from the CMU lexicon (cmudict-0.4), around 100,000 entries, in the radio phoneset (sort of darpa-like). Includes letter to sound rule model trained from this data, and uses the lexical stress predictor from OALD.
(setup_cmumt_lex)
Lexicon derived from the CMU lexicon (cmudict-0.4), around 100,000 entries, in the radio phoneset (sort of darpa-like). Includes letter to sound rule model trained from this data, and uses the lexical stress predictor from OALD.
(setup_cstr_lexicon)
Define and setup the CSTR lexicon. The CSTR lexicon consists of about 25,000 entries in the mrpa phone set. A large number of specific local entries are also added to the addenda.
(setup_moby_lexicon)
Define and setup the MOBY lexicon. This is derived from the public domain version of the Moby (TM) Pronunciator II lexicon. It can be converted automatically to British English mrpa phoneset which of course is sub-optimal. It contains around 120,000 entries and has part of speech information for homographs.
(setup_oald_lexicon)
Define and setup the CUVOALD lexicon. This is derived from the Computer Users Version of the Oxford Advanced Learners' Dictionary of Current English. This version includes a trained set of letter to sound rules which have also been used to reduce the actual lexicon size by over half, for those entries that the lts model gets exactly the same.
(socket_open HOST PORT HOW)
Open a file descriptor to the BSD socket on HOST at PORT. HOW may be "r" or "w" for a read only or write only filedescriptor. If HOW is unspecified or NIL, "w" is assumed. If HOW is "rw" then a list of two file descriptors is returned, the first for reading the second for writing. Take care when using the bidiectional socket that deadlock doesn't occur.
(sort-and-dump-docstrings DOCSTRINGS FILEFP)
DOCSTRINGS is an assoc list of name and document string var-docstrings or func-docstrings. This very individual function sorts the list and prints out the documentation strings as texinfo list members to FILEFP.
(sqrt NUM)
Return square root of NUM.
(rand SEED)
Seeds the libc pseudo random number generator with the integer SEED.
(string-after ATOM AFTER)
Returns an atom whose printname is the substring of ATOM's printname which appears after AFTER. This is a wraparound for the EST_String.after function in C++, and hence has the same conditions for boundary cases.
(string-append STR1 STR2 ...)
Return a string made from the concatenation of the print names of STR1 STR2 ...
(string-before ATOM BEFORE)
Returns an atom whose printname is the substring of ATOM's printname which appears before BEFORE. This is a wraparound for the EST_String.before function in C++, and hence has the same conditions for boundary cases.
(string-equal ATOM1 ATOM2)
Returns t if ATOM's printname is equal to ATOM's print name, otherwise it returns nil.
(string-length SYMBOL)
Return the number of characters in the print name of SYMBOL.
(string-matches ATOM REGEX)
Returns t if ATOM's printname matches the regular expression REGEX, otherwise it returns nil.
(sub_utt ITEM)
Return a new utterance that contains a copy of this item and all its descendents and related descendents.
(substring STRING START LENGTH)
Return a substring of STRING starting at START of length LENGTH.
(sxhash OBJ N)
Return hashing value for OBJ, in range n.
(syl_yn_question utt syl)
Return 1 if this is the last syllable in a yes-no question. Basically if it ends in question mark and doesn't start with a wh-woerd. This isn't right but it depends on how much you want rising intonation.
(symbol-bound? VARNAME)
Return t is VARNAME has a value, nil otherwise.
(symbol-value SYMBOLNAME)
Returns the value of SYMBOLNAME, an error is given SYMBOLNAME is not a bound symbol.
(symbol? DATA)
Returns t if DATA is a symbol, nil otherwise.
(symbolconc SYMBOL1 SYMBOL2 ...)
Form new symbol by concatenation of the print forms of each of SYMBOL1 SYMBOL2 etc.
(symbolexplode SYMBOL)
Returns list of atoms one for each character in the print name of SYMBOL.
(SynthText TEXT)
TEXT, a string, is rendered as speech.
(system COMMAND)
Execute COMMAND (a string) with the UNIX shell.
(targets_to_f0 UTT)
Make f0 relation, and place an f0 contour in it, using F0 targets from the Target Relation
(terpri FILEP)
Print newline to FILEP, is FILEP is nil or not specified a newline it is printed to stdout.
(Text UTT)
From string in input form tokenize and create a token stream.
(the-environment)
Returns the current (SIOD) environment.
(tilt_add_intevent utt syl name)
Add a new IntEvent related to syl with name.
(tilt_assign_parameters utt)
Assigned tilt parameters to IntEvents, depending on the value of the Parameter tilt_method uses wagon trees (cart) or linear regression models (lr).
(tilt_assign_parameters_lr utt)
Assing parameters (start_f0, tilt, amplitude, peak_pos and duration) to each IntEvent. Prediction by linear regression models
(tilt_assign_parameters_wagon utt)
Assing parameters (start_f0, tilt, amplitude, peak_pos and duration) to each IntEvent. Uses Wagon trees to predict values
(tilt_assign_params_lr ie lrmodels)
Assign the names parameters to ie using the trees and names in trees.
(tilt_assign_params_wagon ie trees)
Assign the names parameters to ie using the trees and names in trees.
(tilt_map_f0_range utt)
In order fo better trained models to be used for voices which don't have the necessary data to train models from the targets may be mapped to a different pitch range. Note this is not optimal as pitch ranges don't map that easily, but the the results can sometimes be better than using a less sophisticated F0 generation model. The method used is to define the mean and standard deviation of the speaker the model was trained on and the mean and standard deciation of the desired speaker. Mapping is by converting the actual F0 value to zscores (distance from mean in number of stddev) and back into the other domain. The variable int_tilt_params is used to find the values.
(tilt_validate utt)
Checks that the predicted tilt parameter fall with reasonable limits and modify them where possible to be more reasonable.
(time)
Returns number of seconds since start of epoch (if OS permits it countable).
(time_to_next_vowel syl)
The time from vowel_start to next vowel_start
(tok_allcaps sc)
Returns 1 if sc's name is all capitals, 0 otherwise
(tok_rex sc)
Returns 1 if King like title is within 3 tokens before or 2 after.
(tok_rex sc)
Returns 1 if this is a King-like name.
(tok_roman_to_numstring ROMAN)
Takes a string of roman numerals and converts it to a number and then returns the printed string of that. Only deals with numbers up to 50.
(tok_section_name sc)
Returns 1 if sc's name is in list of things that are section/chapter like.
(tok_string_as_letters NAME)
Return list of letters marked as letter part of speech made by exploding NAME.
(Token UTT)
Build a Word stream from the Token stream, analyzing compound words numbers etc as tokens into words. Respects the Parameter Language to choose the appropriate token to word module.
(Token_Any UTT)
Build a Word stream from the Token stream, in a language independent way, which means that all simple tokens should be in the lexicon, or analysed by letter to sound rules.
(token_end_punc UTT WORD)
If punctuation at end of related Token and if WORD is last word in Token return punc, otherwise 0.
(Token_English UTT)
Build a Word stream from the Token stream, for English (American and British English), analyzing compound words, numbers, etc. as tokens into words.
(token_money_expand type)
Convert shortened form of money identifier to words if of a known type.
(token_no_starting_quote TOKEN)
Check to see if a single quote (or backquote) appears as prepunctuation in this token or any previous one in this utterance. This is used to disambiguate ending single quote as possessive or end quote.
(Token_POS UTT)
Assign feature token_pos to tokens thats match CART trees in the variable token_pos_cart_trees. These are used for gross level pos such as identifying how numbers should be pronunced.
(tok_pos sc)
Returns a general pos for sc's name. numeric All digits number float or comma'd numeric sym Contains at least one non alphanumeric month has month name (or abbrev) day has day name (or abbrev) rootname else downcased alphabetic. Note this can be used to find token_pos but isn't used directly as its not disciminatory enough.
(Token_Spanish UTT)
Build a Word stream from the Token stream, for Castillian Spanish, analyzing compound words, numbers etc as tokens into words.
(english_token_to_words TOKEN NAME)
Returns a list of words for NAME from TOKEN. This allows the user to customize various non-local, multi-word, context dependent translations of tokens into words. If this function is unset only the builtin translation rules are used, if this is set the builtin rules are not used unless explicitly called. [see section 15.2 Token to word rules]
(Token_Welsh UTT)
Build a Word stream from the Token stream, for Welsh, analyzing compound words, numbers etc as tokens into words.
(zerostart sc)
Returns, 1 if first char of sc's name is 0, 0 otherwise.
(track.copy TRACK)
Return a copy of TRACK.
(track.load FILENAME FILETYPE ISHIFT)
Load and return a track from FILENAME. Respect FILETYPE is specified and ISHIFT if specified.
(track.save TRACK FILENAME FILETYPE)
Save TRACK in FILENAME, in formar FILETYPE, est is used if FILETYPE is unspecified or nil.
(tts FILE MODE)
Convert FILE to speech. MODE identifies any special treatment necessary for FILE. This is simply a front end to tts_file but puts the system in async audio mode first. [see section 9 TTS]
(tts_file FILE MODE)
Low level access to tts function, you probably want to use the function tts rather than this one. Render data in FILE as speech. Respect MODE. Currently modes are defined through the variable tts_text_modes.
(tts_file_xml FILE)
Low level tts processor for XML files. This assumes that element instructions are set up in the variable xxml_elements.
(find_text_mode FILE ALIST)
Search through ALIST for one that matches FILE. Returns nil if nothing macthes.
(tts_return_to_client)
This function is called by clients who wish to return waveforms of their text samples asynchronously. This replaces utt.play in tts_hooks with utt.send.wave.client.
(tts_text STRING mode)
Apply tts on given string. That is, segment it into utterances and apply tts_hooks to each utterance. This is naively done by saving the string to a file and calling tts_file on that file. This differs from SayText which constructs a single utterance for the whole given text.
(tts_textall STRING MODE)
Apply tts to STRING. This function is specifically designed for use in server mode so a single function call may synthesize the string. This function name maybe added to the server safe functions.
(typeof OBJ)
Returns typeof of given object.
(UniSyn_Duration utt)
predicts Segment durations is some speficied way but holds the result in a way necessary for other Unisyn code.
(Unisyn_Pauses UTT)
Predict pause insertion in a Unisyn utterance structure.
(unwind_protect NORMALFORM ERRORFORM)
If an error is found while evaluating NORMALFORM catch it and evaluate ERRORFORM and continue. If an error occurs while evaluating NORMALFORM all file open evaluating NORMALFORM up to the error while be automatically closed. Note interrupts (ctrl-c) is not caught by this function.
(upcase SYMBOL)
Returns a string with the upcased version of SYMBOL's printname.
(us_db_params)
Return parameters of current UniSyn database.
(us_db_select NAME)
Select named UniSyn database.
(us_diphone_init DIPHONE_NAME)
Initialise UniSyn diphone synthesizer with database DIPHONE_NAME.
(us_ps_synthesis UTT SIGPR)
Synthesize utterance UTT using signal processing technique SIGPR for the UniSyn pitch-synchronous synthesizer.
(us_f0_to_pitchmarks UTT F0_relation PM_relation END_TIME)
From the F0 contour in F0_relation, create a set of pitchmarks in PM_relation. If END_TIME is not nil, Extra pitchmarks will be created at the default interval up to this point
(us_ps_synthesis UTT SIGPR)
Synthesize utterance UTT using signal processing technique SIGPR for the UniSyn pitch-synchronous synthesizer.
(us_td_synthesis UTT FILTER_METHOD OLA_METHOD)
Synthesize utterance UTT using signal processing technique SIGPR for the UniSyn pitch-synchronous synthesizer.
(warp_utterance UTT (Wavefile Pitchmark_file))
Change waveform to match prosodic specification of utterance.
(us_get_synthesis UTT)
Construct a unit stream in UTT comprising suitable diphones. The unit stream produced is suitable for immediate use in us_ps_synthesis.
(us_insert_initial_pause UTT)
Always have an initial silence if the utterance is non-empty. Insert a silence segment after the last segment in WORDITEM in UTT.
(us)insert_pause UTT WORDITEM)
Insert a silence segment after the last segment in WORDITEM in UTT.
(us_list_dbs)
List names of UniSyn databases currently loaded.
(us_make_group_file FILENAME PARAMS)
Make a group file from the currently specified diphone set. PARAMS is an optional assoc list and allows specification of the track_file_format (default est_binary), sig_file_format (default snd) and sig_sample_format (default mulaw). This is recommended for LPC databases. For PSOLA based databases the sig_sample_format should probably be set to short.
(us_mapping UTT method)
Synthesize utterance UTT using signal processing technique SIGPR for the UniSyn pitch-synchronous synthesizer.
(us_unit_concat UTT)
Concat coef and wave information in unit stream into a single Frames structure storing the result in the Frame relation
(us_init_raw_concat UTT).
(utt.copy_relation UTT FROM TO)
copy relation "from" to a new relation "to". Note that items are NOT copied, simply linked into the new relation
(utt.copy_relation_and_items UTT FROM TO)
copy relation and contents of items "from" to a new relation "to"
(utt.evaluate UTT)
evaluate all the features in UTT, replacing feature functions with their evaluation.
(utt.evaluate.relation UTT)
evaluate all the features in RELATION in UTT, replacing feature functions with their evaluation.
(utt.feat UTT FEATNAME)
Return value of feature name in UTT.
(utt.features UTT RELATIONNAME FUNCLIST)
Get vectors of feature values for each item in RELATIONNAME in UTT. [see section 14.6 Features]
(utt.id UTT id_number)
Return the item in UTT whose id matches id_number.
(utt.import.track UTT FILENAME RELATION FEATURE_NAME)
Load track in FILENAME into UTT in R:RELATION.first.FEATURE_NAME. Deletes RELATION if it already exists. (you maybe want to use track.load directly rather than this legacy function.
(utt.import.wave UTT FILENAME APPEND)
Load waveform in FILENAME into UTT in R:Wave.first.wave. If APPEND is specified and non-nil append this to the current waveform.
(utt.load UTT FILENAME)
Loads UTT with the streams and stream items described in FILENAME. The format is Xlabel-like as saved by utt.save. If UTT is nil a new utterance is created, loaded and returned. If FILENAME is "-" the data is read from stdin.
(utt.play UTT)
Play waveform in utt by current audio method.
(utt.relation UTT RELATIONNAME)
Return root item of relation RELATIONNAME in UTT.
(utt.relation.append UTT RELATIONNAME ITEM)
Append ITEM to top of RELATIONNAM in UTT. ITEM may be a LISP description of an item or an item itself.
(utt.relation.create UTT RELATIONNAME)
Create new relation called RELATIONNAME in UTT.
(utt.relation.delete UTT RELATIONNAME)
Delete relation from utt, it the stream items are not linked elsewhere in the utterance they will be deleted too.
(utt.relation.feat UTT RELNAME FEATNAME)
Return value of FEATNAME on relation RELNAME in UTT.
(utt.relation.first UTT RELATIONNAME)
Returns a the first item in this relation.
(utt.relation.items UTT RELATIONNAME)
Return a list of stream items in RELATIONNAME in UTT. If this relation is a tree, the parent streamitem is listed before its daughters.
(utt.relation.last UTT RELATIONNAME)
Returns a the last item in this relation.
(utt.relation.leafs UTT RELATIONNAME)
Returns a list of all the leafs in this relation.
(utt.relation.load UTT RELATIONNAME FILENAME)
Loads (and creates) RELATIONNAME from FILENAME into UTT. FILENAME should contain simple Xlabel format information. The label part may contain the label proper followed by semi-colon separated pairs of feature and value.
(utt.relation.present UTT RELATIONNAME)
Returns t if UTT caontains a relation called RELATIONNAME, nil otherwise.
(utt.relation.print UTT NAME)
print contents of relation NAME
(utt.relation.remove_feat UTT RELNAME FEATNAME)
Remove FEATNAME on relation RELNAME in UTT.
(utt.relation.remove_item_feat UTT RELNAME FEATNAME)
Remove FEATNAME on every item in relation RELNAME in UTT.
(utt.relation.set_feat UTT RELNAME FEATNAME VALUE)
Set FEATNAME to VALUE on relation RELNAME in UTT.
(utt.relation_tree UTT RELATIONNAME)
Return a tree of stream items in RELATIONNAME in UTT. This will give a simple list if the relation has no ups and downs. [see section 14.5 Accessing an utterance]
(utt.relationnames UTT)
List of all relations in this utterance.
(utt.resynth LABFILE F0FILE)
Resynthesize an utterance from a label file and F0 file (in any format supported by the Speech Tool Library). This loads, synthesizes and plays the utterance.
(utt.save UTT FILENAME TYPE)
Save UTT in FILENAME in an Xlabel-like format. If FILENAME is "-" then print output to stdout. TYPE may be nil or est_ascii
(utt.save.f0 UTT FILENAME)
Save F0 of UTT as esps track file in FILENAME.
(utt.save UTT RELATIONNAME FILENAME EVALUATE_FEATURES)
Save relation RELATIONNAME in FILENAME in an Xlabel-like format. If FILENAME is "-" then print output to stdout.
(utt.save.segs UTT FILE)
Save segments of UTT in a FILE in xlabel format.
(utt.save.til_events UTT FILENAME)
Save tilt events in UTT to FILENAME in a format suitable for ev_synth.
(utt.save.track utt filename relation feature)
DEPRICATED use trace.save instead.
(utt.save.wave UTT FILENAME FILETYPE)
Save waveform in UTT in FILENAME with FILETYPE (if specified) or using global parameter Wavefiletype.
(utt.save.words UTT FILE)
Save words of UTT in a FILE in xlabel format.
(utt.send.wave.client UTT)
Sends wave in UTT to client. If not in server mode gives an error Note the client must be expecting to receive the waveform.
(utt.set_feat UTT FEATNAME VALUE)
Set feature FEATNAME with VALUE in UTT.
(utt.synth UTT)
The main synthesis function. Given UTT it will apply the functions specified for UTT's type, as defined with deffUttType and then those demanded by the voice. After modules have been applied synth_hooks are applied to allow extra manipulation. [see section 14.2 Utterance types]
(utt.type UTT)
Returns the type of UTT.
(utt.wave UTT)
Get waveform from wave (R:Wave.first.wave).
(utt.wave.resample UTT RATE)
Resample waveform in UTT to RATE (if it is already at that rate it remains unchanged).
(utt.wave.rescale UTT FACTOR NORMALIZE)
Modify the gain of the waveform in UTT by GAIN. If NORMALIZE is specified and non-nil the waveform is maximized first.
(Utterance TYPE DATA)
Build an utterance of type TYPE from DATA. Different TYPEs require different types of data. New types may be defined by defUttType. [see section 14.2 Utterance types]
(voice-location NAME DIR DOCSTRING)
Record the location of a voice. Called for each voice found on voice-path. Can be called in site-init or .festivalrc for additional voices which exist elsewhere.
(voice.describe NAME)
Describe voice NAME by saying its description. Unfortunately although it would be nice to say that voice's description in the voice itself its not going to work cross language. So this just uses the current voice. So here we assume voices describe themselves in English which is pretty anglo-centric, shitsurei shimasu.
(voice.description NAME)
Output description of named voice. If the named voice is not yet loaded it is loaded.
(voice.list)
List of all (potential) voices in the system. This checks the voice-location list of potential voices found be scanning the voice-path at start up time. These names can be used as arguments to voice.description and voice.describe.
(voice.select NAME)
Call function to set up voice NAME. This is normally done by prepending voice_ to NAME and call it as a function.
(voice_kal_diphone)
Set up the current voice to be male American English (Kevin) using the standard diphone code.
(voice_reset)
This resets all variables back to acceptable values that may affect voice generation. This function should always be called at the start of any function defining a voice. In addition to reseting standard variables the function current_voice_reset will be called. This should always be set by the voice definition function (even if it does nothing). This allows voice specific changes to be reset when a new voice is selection. Unfortunately I can't force this to be used.
(wagon ITEM TREE)
Apply the CART tree TREE to ITEM. This returns the full predicted form, you need to extract the value from the returned form itself. [see section 25.2 CART trees]
(wagon_predict ITEM TREE)
Predict with given ITEM and CART tree and return the prediction (the last item) rather than whole probability distribution.
(wave.copy WAVE1 WAVE2)
Destuctively append WAVE2 to WAVE1 and return WAVE1.
(wave.copy WAVE)
Return a copy of WAVE.
(wave.info WAVE)
Returns assoc list of info about this wave.
(wave.load FILENAME FILETYPE SAMPLETYPE SAMPLERATE)
Load and return a wave from FILENAME. Respect FILETYPE is specified if not specified respect whatever header is on the file. SAMPLETYPE and SAMPLERATE are only used if FILETYPE is raw.
(wave.play WAVE)
Play wave of selected audio
(wave.resample WAVE NEWRATE)
Resamples WAVE to NEWRATE.
(wave.rescale WAVE GAIN NORMALIZE)
If NORMALIZE is specified and non-nil, maximizes the waveform first before applying the gain.
(wave.save WAVE FILENAME FILETYPE SAMPLETYPE)
Save WAVE in FILENAME, respecting FILETYPE and SAMPLETYPE if specifed if these last two arguments are unspecified the global parameters Wavefiletype and Wavesampletype are used. Returns t is successful and throws an error if not.
(Wave_Synth UTT)
Generate waveform from information in UTT, at least a Segment stream must exist. The actual form of synthesis used depends on the Parameter Synth_Method. If it is a function that is applied. If it is atom it should be a SynthType as defined by defSynthType [see section 14.2 Utterance types]
(wfst.load NAME FILENAME)
Load a WFST from FILENAME and store it named NAME for later access.
(wfst.trasduce WFSTNAME INPUT)
Transduce list INPUT (or exploded INPUT if its an atom) to a list of outputs. The atom FAILED is return if the transduction fails.
(while COND . BODY)
While COND evaluates to non-nil evaluate BODY.
(Word utt)
Construct (synthesis specific) syllable/segments from Word relation using current lexicon and specific module.
(xml_register_id PATTERN RESULT)
Add a rule for where to find XML entities such as DTDs. The pattern is a regular expression, the result is a string with substitutions. If the PATTERN matches the a PUBLIC or SYSTEM identifier of an XML entity, the RESULT is expanded and then used as a filename.
(xml_registered_ids)
Return the current list of places to look for XML entities.
(xxml_attval ATTNAME ATTLIST)
Returns attribute value of ATTNAME in ATTLIST or nil if it doesn't exists.
(xxml_synth UTT)
This applies the xxml_hooks (mode specific) and tts_hooks to the given utterance. This function should be called from xxml element definitions that signal an utterance boundary.


Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival_35.html0100644001741100001440000005701407332366671017456 0ustar awbusers Festival Speech Synthesis System - Index Go to the first, previous, next, last section, table of contents.


Index

Jump to: . - / - a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - q - r - s - t - u - v - w - x - y

.

  • `.festivalrc'
  • /

  • `/dev/audio', `/dev/audio'
  • `/dev/dsp'
  • a

  • access strategies
  • accessing Lisp variables
  • acknowledgements
  • addenda
  • adding new directories
  • adding new LISP objects
  • adding new modules
  • adding new voices
  • after_analysis_hooks
  • after_synth_hooks
  • alternate diphones
  • apostrophe s
  • asynchronous synthesis
  • atof
  • audio command
  • audio command output
  • audio devices
  • audio hardware
  • audio output
  • audio output filetype
  • audio output rate
  • audio problems
  • audio spooler
  • auto-text-mode-alist
  • automatic selection of text mode
  • automounter
  • b

  • backtrace
  • batch mode
  • BEEP lexicon, BEEP lexicon
  • before_synth_hooks
  • bug reports
  • c

  • C interface
  • C++
  • CART trees, CART trees
  • Cascading style sheets
  • catching errors
  • catching errors in Scheme
  • change libdir at run-time
  • client
  • client/server protocol
  • CMU lexicon, CMU lexicon
  • command line options
  • command mode, command mode
  • compiled lexicons
  • compiling a lexicon
  • compressing the lexicon
  • `config/config'
  • configuration
  • consonant clusters
  • convert string to number
  • creating a lexicon
  • creating utterances
  • CSLU
  • CSS
  • current voice
  • CUVOALD lexicon
  • d

  • dark l's
  • database labelling
  • databases
  • debugging Scheme errors
  • debugging scripts
  • declaring text modes
  • default diphone
  • default voice
  • defSynthType
  • defUttType
  • dictionary
  • diphone alternates
  • diphone group files
  • diphone index
  • diphone names
  • diphone selection
  • diphone synthesis, diphone synthesis
  • diphone_module_hooks
  • diphone_phone_name
  • directory structure
  • display
  • documentation
  • DSSSL
  • duff intonation
  • duration
  • duration stretch
  • e

  • Edinburgh Speech Tools Library
  • editline
  • Emacs interface
  • email mode
  • eou_tree
  • errors in Scheme
  • exiting Festival
  • extracting features
  • f

  • F0 generation
  • fclose
  • feature extraction
  • features, features, features
  • Festival relations
  • Festival script files
  • `festival.el'
  • festival_client
  • festival_client.c
  • file i/o in Scheme
  • fixed durations
  • fopen
  • format
  • formatted output
  • FreeBSD
  • g

  • g++
  • garbage collection
  • GC
  • GNU g++
  • GNU readline
  • group files, group files
  • grouped diphones
  • h

  • heap size
  • hello world
  • help
  • homographs, homographs
  • hooks
  • i

  • i/o in Scheme
  • `init.scm'
  • initialization
  • Initialize
  • installation initialization
  • int_accent_cart_tree
  • interactive mode
  • IntEvent labelling, IntEvent labelling
  • intonation
  • IRIX
  • item functions
  • Items
  • j

  • Java
  • JSAPI
  • k

  • Klatt duration rules
  • l

  • labelling
  • language specification
  • laryngograph
  • letter to sound rules, letter to sound rules, letter to sound rules, letter to sound rules
  • lexical entries
  • lexical stress
  • lexicon, lexicon, lexicon
  • lexicon addenda
  • lexicon compression
  • lexicon creation
  • lexicon hooks
  • lexicon requirements
  • linear regression, linear regression
  • Linux, Linux
  • load-path
  • loading a waveform
  • loading data from files
  • local duration stretch
  • lookup hooks
  • LPC analysis
  • LPC residual
  • LTS
  • m

  • manual
  • mapping between phones
  • MBROLA
  • minimal system
  • MOBY lexicon
  • modules
  • monotone
  • mrpa lexicon
  • multiple lexical entries
  • n

  • NAS
  • netaudio
  • new modules
  • NFS
  • ngrams
  • NO digits
  • `nsgmls'
  • o

  • offline TTS
  • OTHER_DIRS
  • output file type
  • output sample rate
  • overriding diphone names
  • Oxford Advanced Learners' Dictionary
  • p

  • Paradigm Associates
  • Parameters
  • parse-number
  • part of speech map
  • part of speech tag
  • part of speech tagging
  • perl
  • personal text modes
  • phone maps
  • phoneme definitions
  • Phones utterance
  • phoneset definitions
  • phonesets
  • phrase breaks
  • pitchmarking
  • playing an utterance
  • POS
  • POS example
  • POS tagging
  • possessives, possessives
  • post-lexical rules
  • post_hooks
  • power normalisation
  • pre_hooks
  • predicting stress
  • pretty printing
  • proclaim_voice
  • programming
  • pronunciation
  • PSOLA
  • punctuation
  • q

  • quit
  • r

  • read-eval-print loop
  • reading from files
  • readline
  • redistribution
  • reducing the lexicon
  • regex
  • regular expressions
  • Relations, Relations
  • remote audio
  • requirements
  • resampling
  • rescaling a waveform
  • reseting globals
  • residual
  • restrictions
  • resynthesis
  • run-time configuration, run-time configuration
  • rxp
  • s

  • Sable
  • SABLE DTD
  • Sable tags
  • Sable using
  • `Sable.v0_2.dtd'
  • saving relations
  • saving Sable waveforms
  • saving segments
  • saving the waveform
  • saving TTS waveforms
  • say-minor-mode
  • SayPhones
  • SayText
  • Scheme, Scheme
  • Scheme heap size
  • Scheme introduction
  • Scheme programming
  • Scheme references
  • script files
  • script programming
  • scripts
  • security
  • SegF0 utterance
  • Segment labelling
  • Segments utterance
  • selecting a phoneset
  • selection of diphones
  • selection-based synthesis
  • separate diphones
  • server mode
  • server security
  • server/client protocol
  • SGI
  • SGML
  • SGML parser
  • shell programming
  • silences, silences
  • SIOD
  • `siteinit.scm'
  • smaller system
  • snack
  • source
  • spanish voice
  • Spoken Text Mark-up Language
  • SSML
  • STML
  • stress assignment
  • string to number
  • sun16
  • sunaudio
  • SunOS
  • syllabification
  • Syllable labelling
  • synthesis hooks
  • synthesis of natural utterances
  • synthesizing an utterance
  • SynthTypes
  • t

  • tagging
  • talking head
  • Target labelling
  • TD-PSOLA
  • `texi2html'
  • text modes, text modes
  • text to speech
  • text to wave
  • Text utterance
  • text-to-speech mode
  • text2wave
  • thanks
  • tokenizing
  • tokens to words
  • Tokens utterance
  • tools
  • TTS
  • tts mode, tts mode
  • TTS processes
  • u

  • ungrouped diphones
  • UniSyn
  • unknown words, unknown words
  • unwind-protect, unwind-protect
  • us_diphone_init
  • user initialization
  • using Sable
  • utt.import.wave
  • utt.load
  • utt.relation functions
  • utt.save
  • utt.save.segs
  • utt.save.wave
  • utt.synth
  • utterance, utterance, utterance
  • utterance chunking
  • utterance examples
  • Utterance structure
  • utterance types
  • v

  • Visual C++
  • Viterbi decoder
  • voice-path
  • voice_reset
  • voices
  • voxware
  • w

  • wagon, wagon
  • Wave utterance
  • waveform synthesis
  • whitespace
  • wild card matching
  • Windows 95 audio
  • Windows NT audio
  • Windows NT/95
  • Word labelling
  • Words utterance
  • x

  • XML, XML
  • Xwaves
  • y

  • Y2K

  • Go to the first, previous, next, last section, table of contents. festdoc-1.4.2/festival/html/festival-1.4.2.ps.gz0100644001741100001440000124014007327533116017671 0ustar awbusersN^;festival-1.4.2.psk%u-~_lJ̈4| '}%-,I_||ow~c{_>oe&goܞ;Wկ/-Rg}o~ w?Ϸw;?g_=ȧ_}[wwo}5}7~]?>oz׷?}^ӏccqU_˻?廷߼:>]_|Ks|/_s='x/oO>{_,O'Oӯ_|/o߾}KJ/ezog~g{*/mn=?o6_|{ˏҟ(?}˷l㳯9O~^ń7/<>wBp=?7xQqڿ'֗OO???O{^>w}x߾G/|{`_~/N?M5|wY9oh闿|>b|xZw7_'/ܞ=qw~I?|.O>+;'twx/ݧ_|Wҟ1gwo޾d{/ /6}[{_}Om6~w1|r|aO~?}7|M곯! ^pv?y1_b#K?M_f˗_] ̸~eqPgAzI+7~ob~;?_K#@{` >O;/~~p-_Rkxzo㫏Oi*|K|WoJ?^*cMA ?>>s3-!w>Mo?-w_ˮӝ^LȽv >IIy̧ Lx9rWIs6}ٯ~w_|/ػ]G?N_CW_p|]x_OK?}U|1bz ~Ӿ oPۼ?AH~|1A?}א~v!mg{{/WLa;ބ/;ۡξ+;~uv_`|'m;q^_ee &pE=6ЦO?>~cgx?>;} O魶/[ƿ4xͤ{H%qe:>le}忿l:8|1^/06~x?bœB>7=cσ?.Cg\'?*ajRފA+?{ʳ;{#oM ]!ɎOgo۷f~_}އؾ퓟 O^d"Q߽Ocfv mZѷ)Li!>Om*4i O>yk'$\'I}˷ߘaĻއc|<6?y~R!O<6g/C_O*Mo4=/y[S/yA}k7Tu)5l?lڟ'oZ:='צngoi?P~od=s0H7{ڣ4/O?KZ?1~/~%-ّRƥ@gSxf;?I'Q_J-hQN1nl.cP^WC{_~Qx7b?lw~wؕɄ~6xA[3K3AjOث2 JǙ:})>庠5?ǧ7?{&,f ǃh~?9\샽4Y4ozi|~ags㜦tW4vd'fJ%տg>|ɛgvgO/#ڵ[icǂ_;]i-o6.~ײOqʵ07s~X=Vŵۆ->1mAO$DTdr&L>QlKZ{ZNd;p vcmmm_9u<}K]rc>v>ۼ>GxVn0xZ8^#zlma+ĀoK--d[?D[UvdxqƘm?E٧= v$zlGv>qsck ߆pL3]c^?]Rj3>i{Rb͸րgKǰn&.V?foשwm?Nİ0(k8v~rI+?^ez %Yaa,Wb`6SmQaH1 kb16kvh1Ziּښʼn=s-P{ jB蘦a[~:i\Aن:}]k{ki=`q%6v/LVZlA6 Q,&¼.}"}OM/H[(DLX%z ,aŘ@e_JĈs X+{n=lߧlqZ/mkx=+8Ѵ2^\⚅@V6wJ-eÎ(v)Zk-?At.4{jy? #~1a9?S,h?7k$j޵}!BICE qoBŌ W $;$l F # !LF Df[8+%I)fE7~רP --g&jѶs>aJ_1IoxgK 4iPt3fғj li8Wwۂz9^x_]|߮o'ˢ=ԂETƵ@ O¦rS%]sϝqnS+6v44~! ._ &0{sbbY;O -,/4J]NrJ)%4>$1,zۉx fbN.l)-Jwj!y%ﴏL2pŚ_;}"Þl;ޟ3ZxU!o1F -5=L3Ьq(a~y[\,V"=ٶ=$ bjƂp/ccJz-;-rJM_Zm 4g? BD9: WVędkf4ͰDr1[1 3C@5˖9ʡ E6e;! ֵ$ e^[ߗ)c6ȳh_SK}hg>(؏&8yò-pogBşYM;Um "ы՝L} Ix}ͬ%7jaL_6tR架C<43yKr`EWe Zrn> M&e\܊dbM ] ϫo=]B~ %֠[Gr>$gg[uْ+p+͎᦮c { sW&/TI{fy.:_RDa3gC3cM'ccF5$NwS8n9{"Vp'0EZz(3!M~ɋ,&PwzRs$sd(${+|Hra4bƒijcMC `U7ZSȊ-|zNhJd'8A0Is+Շyڞ9pN [ `q;7_.Qr9)CTn2ACm B% ݂soܭ_Ȏ .݄nB=J,Q[Odާ=@sy(`pvOL*f^a^/n!\2lc vby5kD?|+ DtC1z?Fg 07j*v@G':]aUPE:kZ egfd1bw&ӎ ;]<ٶFrVق+qk7{C+ŏX/,A ۝!`Rk E ״+'B0dxI }9iPPͮPh *sߗѮ|iU}gAY.6Z$+1pAx*ծHPcTl'-"}K9zTX35ݛv7wp{x&`|w==|nw#`R}cT.K|fSP;!Xk{ "axm 6=d:M3]*K˖3tz6E&%6NZITD\z;7Qg,l"L DK-XhொoWvÙ̪فNlKJN-vmv;CHxʈa9Z탍FԍTm1|ԇ]2.Qts o@64|=Ѵf%ڈY1kbV2Kُ7y/~mxžvkU]6kmpgZ_̄ЈY!¬bvJ[]M-L0>.UFC= $llZEزVپlsCRԉr[~BQxTN g4%\C[[igLtG92qy ( OE<Ը+q*]эs1QDoϟn(FIU<II\.Uy[H*Dug$eӼ;Tʑ!A9my|4( ;]4?-ҩ@ GZg.NivyN#3wū'5+>o]5V j"r15fq?{d_v} .ba+s5 k>-b.,nRVi_{仌K B BQkCHFqhFH.QXH"D m_ vc0z@oB$+\ 7XnCD<)Y")`  6qFΘ-sf-aglrQc ٞO}C 28D Iw0o#gfaS0˩/a(S$']ayOl Qj98 dۜij~4V,<=}g6xw 9sI`Tw&fR܍ߓwH"k \ /f10ݫWq“Iiѣp:jzǁ|UdUpFV+̐:yI>X\ 3gc~E\!6'D>!^yu?"VɃ7QlYl55w!M XƂE20MU r^ Y bu%@5R5zFhiD y#<{=x'Ĺ}a3G+c`. ]90qQI3U+\̀tN\5>ʾNLrO%)A;=J*X1,xò7옥__;CSZQReZ~& F rpIk1Ph*_(恷X_(FdR4PND#8_FDGjjK0ӤNtE/=X -}}>@+_z!j˾\&TxɴW]"W"a]+CmlOf3{ Ϊ'8d苯}m$OL8i\*Ņ$6ਬ-L;&(q@@*/z/$h eұ!X܍[OK EE!zB Q > r> Ƞr, fS(G K+gyĔbs6ImaΗiMJz=H*lߖ +a?S45h<ʔ$(%`RSLT4yv6t̒zz>sP&a,EdHcs09LNs QW|< V庐6ҳQ AIpe57'VUU΋ ]g`c{aQ^KaUT-530G7iјk 0*aHC\ @4K@WMϔgLp1n:sQ{ +a^5zRUgE4^JpȢ4=|M0y4yi%Ig~v%uR3ag> S`Of"`![Ee`ׯ_4N2xAAbtNjQjxZK1uj6&<ƣiYq<6>VZP4|πRZ'42Z|)/ХL g1aͳ'F(O_P+xʈ^Yt?UJ*Iw9Mqd DzϦi-#lk֛ KL G&VH]g}V"XG`G`|Z8g^^4#Բ15>V/I$ȩuXܼa)yAC0XeMA 5cE4N,GxEq&HpR a<ѣ^fdmA څ߅43&(UV|3|()%FjΜk;`65i>L|G>RA5˥ؕL@bb]'bDTa^ a8(h*~fgd5>t6?6uU,L=;ʪhK c/<:s fUV.4'gНXMN89T#⼫-|l-ӷZլU?Е#Vv)"Vo)S7@b2H:KRB9@, h8~a9_:'i:@ ^v"K X3! d7(4\T2SΪdjmif`RLOT-bݷld)s[ MAx UQ54洙xSgf*JfUp*Q(͈ [ Ha*-#zz8vLffx} ;Ds[Ǡ Q,m`JP6~T^/%®FI/EG 'Bܺ9(h+O5IۨQ6@ώOu<Q q}8BZ*bEF׈ o+M]=t(XM" x!J =>~\1aTAsc\wL4m RCmXTF2kd t֛+(ّ F!"Wjd\ OꞷKӃY ~L3? 57P]T( 6F!Ey!HFֱ I7aq_vb%&_nn' -+̈́ *".- J.*Փ$L?!ScȆ2pC16mj23:=ַl} Pqo ȫ$!Gl0˃q^ik^ "1g 7i& ݠmgmΗGa7R" ^*h) *`T&zHbmdj ]daibAW4sd.;y3G.aUvXYdQTS8gCIԂI:I6-s3IF*+a5jǂ-*\%u곊ꤼx%Nt+MYGzu0VHJ/n#}~1x> !Ykt`aK<(_y0M,p3cv' aѫ !_6xB@K~z`*e;*!V0rg$ LG._P%'>s%ĉuaJu7k:0( B}]n,t@J'Ɯ&(Q+f1T=[YJ݋- \{x6 6-c+{g aȡ"IFY U{ +`xmT$2t!kܛ4Ɗ17ÜAx +D9꿫q,qJd]gGhfrEيۈXNVbff,\M%ff9)8=f.MD" As\H? c{ _)5TLEF\l{^I*NQ!VaCdr$JoI=NAi EWe:Nnsi%h%hD1՘2ENgހ7va0\$FF1ň-" ;9TgಗrIج87;h9Ke:qFkRD" wJC K !`!UVĠi%ݩxaq}pp- wA 3~%hֳvfQ Nn' 9%H=^ H> ')L`9V[v=ute -Zy Kt*d^@ag:1 [H磘zKKK۵쁐Ɠȯ"u^Qdl2Gρ' e %G G>XUOLtLDpJ5;bU^pDmZvP;I"aȌax7ad_o7(PE!Y#F L~Ԛie)+Sp+aTDLRvij-g?,`Zb)KR1>GSEVCjt%QTŤ p5\וByQ&.U ȁْ\RXOp9n2q|RI Xh1F J6MvnMM2wb +4632XTK'z%a>ﻤHi?҆?"eh5Nd 1`а̕qzg 5(^gQ 7[Y0[Qگ>~]UN=[E`7g'+5)]|fMx$V9ŕ>r1cTf97+-w`±иCpQ[]1&/^ktŻ!Xn J(k]z.P̫[m(#4́:L3rk67L[#zlBEm%xDDxCOByݙ W(DIbRnpI$&v_Pw{\@<&XZa*1Ad'muw0T¯'[&^X^ݶ!\[~4W{r=)󯏿2mu_KEZpvQ0!yM怜`-k>3Ê өX'a>>6mU ;!fvssZK&.d_g }ָǨlծ,sHN뀀=6s-v58 Yr.j.p=/}̐]mf5fB6fBI: +;y NSGD ^ f.2_p;DsIgnծqLZ8L{nbq k.Ia@j.kw.D4@ D!L*p&.F/Z ēg_ɓ;$F.6:!$K4Qe)P2ΠZ)dBL>@BC 0B:IMSFѽgb({({SS[#}EɄgOmb6(.5|4؀J([܀D$){0zh,La+5z 0kLbJ.ʉK 鋾Z5WU~#S ‡| "o.j $N[XF t Ǫ9i9E ڠ"R׏"cX3Μ+K1eif&zRN, S|bw>1 LPC`UKb'I~аWUǁf#Zy:ݘJe9R T"GmEedO|s˘z/sP@Ido@4EbN{"Q%ky;@v"@Yr$)Ν9t(,,ZeiX~:{JeaҀE6k bN\I+R&ga,,=ҢuBC-L"<0\>I'pȴ~Hd)ąp^՞2y҄aACWGCʏ|ŏί糈rY q2 @݌`zI}11s ;שׂ2!)=J!FoZC :(C Va+4Kdķ`r~Wyzo5=}јE)H@#TxW";D_@gʵ-Y'TgrjD%#M޲Cr7Zq )pRȋKQTd>h/gBߥBNafFMT4:S\ BWr؂`J\lH( xE=XWc,*ζ* j!v SBw;A-#,.V(K-½; QFd]{HAhlZDq5|MED6V{'`s ,K˩Hh׋q4?-iWSm~x_F!a3dsRy&c). ԩl+i%psN X<v_T~e bՏ_Anca e;|05CH2]1QeLHĥ܊ _H'Q #Q`DJ@3!:M6W$wxB&DGf[^6$jILYXS")5/*NOL}کM"]]G)ϥ&=PɩA//Ο~56TN,pU6d`dh`eT, )T2$j+ӕaJ1Y` 3|EI&.nΆVVyjfv݋Yba` hj>EVQ`oZ8 LDάOof#`n60/P,+V۝ ' ف6\B+ :F& qW`d -г)U,б 8kƉ9X{W .1,T-GٺW'-lt&F㊸TΖbUH8exn5Uuaz+hvɺ.)qK>۲fgV봼-AjW06R݂ʜtNlOǛ)I"$6"~[-콩m:b3+Zj+ܢO\ƶmWO_)tqMmG'E6mZdt"rOz! HEUQh zoI%Ef%FT%4v! %Yv'V6rl,eۖ)ḫAwr"6zg }o$-E{YĹMZf!dh*M5xOM]W6n2[G3jSyA<6=>1DЦP@#`ɤYdT~`=.مG?zS{3WGRf+2[qcz?em]?D/U}cix(`EжK|Z Yy6.%(?gv7k{BM@Q[["2AW#12؋([L+fh`FߥVUg"HGU{{\%;f!\Q KZÃc\7[r V%(X 3! Dx XČr*mNg@]:. H敜4۴!dr5EN|žTUuQSbwݳG+s/W.8Q.$NelԷw`hkcߵzb+ Qh(C~'">26aPً]ʆAׄ]N' 2@J"",KTe xu}QTfs 1(N+6LJ5%#tNӇ1kH҆ƑiDmqh|`5/ȉcTo\cA-ؼ3m,5zfe8*]m}T9\Bn"kOv/Į!҆dDU RQQlGmiEU]PZdZ9!]vܝ\!Rgv-CAƐޤ֐w|"&ͥRAۗӫ7ՙdrsb3uY&"8Le<{:5|k7!~Fe,idMKqiF$M9+YE>&Su >zGL[ `6n7,:PZP0^dw} y (RhӀê u6ꃪ*^H|A卛Xވ^Lm~"`~!i<#t{3pN_)7(+) = vpi%!A[lqUT!i;q0H+e b= ԑcƬ9zUζ.HAvXuEyE$"+6򲸝+9@a#&$cK;V)aeS)4 4&-hcEWкO=Z[ŭŸ%>$ WM)>ùvotRУe; T0ej% .9\p*@H6VRQ~:!6'F ̶,ר3XD-MOzX{<$#,مu ,s {\6m~/=Ob05eQ}@T r[h. E@N{䙟 u-%Ls>!TrRЊfǹeHA]C{& Fٰ} bқE=Jz@#TV:vbRNP|@8Ym O "%:`'#[/' 0=흠do%3Hz -T9_J {$7E5]pH|r׌]k'?" b$κ*#׈ge`"q;P->ƻi4 4=Ps A\K2@wD7j0o¤A.U{CH/l`̙#h3h¡yF|ir{ Тǎ!>@5}3C -Uz'4@7Hͧas ԥ: lN8oBt7HEc'bpe4$k?,s>j+YQ4A:WU&Z4d.$!`p[si$ +Dp$EYK&spp4>&Q&;̚Ki3Zl q><&:5߿0ߣ<]O$~nݸP, YFPPbS8%Zo?)uXZr*T:{?9ޛmӢK׼~wcf05x ]Yb5B@B C&g>'TQd^F]U+Gƴ` aFBq2-.f^rA{$C9D=D^Q/cZDf IٕE/YdϤv)։d]Y, `?,%TG 31bDj oA2z_EbTQ .M;TӤYi?+y@,(Q;@uOCgӭ XvВHa`+B]&.fn !{xg/*F|GI,d}];"aÜem% 8k)h! &ټ3,MT8SmH=lgdr&{J{g1'5P]u?N-/pwBkkӅu2AL*ɤh&./2`)&9Ĺj.l f1R*4<yf[FYImW]b[^";ZS=; _J:5Ff_ 1_U.q^"u((k|jqL73Pk?B0DE9 ֥,`2?eMR3g¦< iy.lwQ "+LO`gx-J% !zlD # hև򕖚Om{ds}wE|Q}-v)D4fU})A/o> $~dTF4wMxLzəPEJ@d\\ Ozt`U3b=:{DFqhX00 T !MrT&10 b_Υۢjğ2&>ktj\?iKXF{q+!G>QlU8"WIu *8 qc*P A|_.UyTˌrQP`%cŔqVD6ht7r CM#$ϰ0ǧNbq'lwyR)kܳs5q>g3Jm;ϣﶷfVb%q 1j7FGc@U"`IֵW{yk\}hYxYm6Ϣ~zpJقf4J,BG`JU`(ܶ9R\Q/KX=#F\$we! WW$kfZLmkyCP#&&$W #ܡɓFG/+=ZJƄ+{:0B { Aєc&k℞dʂ|T&+:سEr82ED6bu]MP֣MwxƉ0^ 0h}@GlgKҹ7wfy`XIl^*K#k9᪖-QWreK$ j5S*ΝF @G9܇vt?`lth7o9-H.J4f>ЪkFǶix>[al.[}<}͵ٯ[.[Uy2Iռ%2ːж ]XjSDAS%Ve!&INgXL+^F)iфIX5 al_=IiB|đKݖκcCW )j + h PD# |8&;v)=YHN3I{UO*a-0nw`@ Dv]sf5 eKK&VQˏ,E \Y} _$fL N1 %TgJT#ʰВ hlg':I% I%29zI"Q1_;P$8 ,ݪ>un=~uithW׀kG$(Z"RɹrceVZ!"8"!_+kfxK5$oWhV C0>ȝI%RDntxtEu, 3KCySL1h|#iXK6` yGĻ ϲ} -DR>YbΐQI $xo2x@4vR=qhKO8@ 'Zaowa*eN_`WE V1\jkȻT.T¥_lj}\0_Tvrybeg;"t'϶l~xZ _[b[.a0=3/_(Bwbs&NLpn6C^ju*j(3TE}xDҎFAML$AT[ǐ_A*sMtw.-P NszVb.J׺쒺m=(TݶU90Z௲xZ"U0f&(X>(gSx|liΖ&а\Z԰ot b)Й1e=Հ H |cPi!.32| B{M:S Q3%9YʞɃJmc#3EmtF5&/Z$*M|dť3/KΚj^WbPuunWMfl2 6>ڰ5Yj 4=cl!5RYL`/'Ց@\٦p{`s廈y, c|P< BbCY0c[Ԁbb *NNz)F]DFeSla*~þmvmEi-MeMr%̴97}Ll|H#h8 o`#S!Rrpߨ@AR -HNAmAȍR XGo ZwJjUԪ@66-5mHC ;;KrjtݦKM˷Tql)x"lGSv hJ#++~d6WqK'i,;ak8τd gYD-,$m,s]:L :/?=v"%M3D"Ip;o4^*1A-jA}zXg$9TVqHtgŠVE $d72_aWԸt3_67ҩt_ %2- 㱼_aاs%QhG eÑ%xW%`1̶6Wpnjo4sLBRjzcM:%N 2;"Bᮈ .uLRw1^'U ' |\C4 (t ^]9Z( `.8&d6X'N+Ұ1(gA{s!Wp΄. ' ߋ(3ȉq `$: /VI O,l}E'JnZɌnr(ŭaj?̄6pՃ+Yq>8LgAu5  J}11xM̀vE\UAò-aD8w"EW.c?`%+6Ug+vŕUjVT*P6]+~)vQ7 x$n0+N.GE;<_NS,T'>U$t" UcFwr΁G?*|4*' W3`x6%6mw!rEB:'\[) yG W|$l=j\ pz3͊÷Yf2\aVog& c8uǵO+ݫOX. 6"]^rEX跘< yz>Y({`HH7q: U)|UaL,VchR`h LZD hgťb& )ev *UKi8iR=CCӗ7iw/i#Ul^Z̪,%A$rY ^33ԺMa]!D^9ؽr04RԜrl궁 D@jˀ - "'CV'P#A2F;p Xtjñ$TqzL1hݥ5m7;~E'+{XUZ')V<3"vj+[Ǿ 0 du,kt hwR4 (mw4 pt)m_:}ۙTɠy@2&uxoNF= :tUvstaXP;+p a3dHM vZCf fORBgp08 ,2fcH4CsU#DF$`YY]~ER3{nW#N-rAE{Mdc|)(/HbMAA+= `~:z߹Aaw$V`i!9#nQ$UTl 0"b)}%8SFs2XE^5ZHGѕ2lJ63\XF8s"c[SiHmRV8ɢ;yEd?D#q)K6Vg8ĉ_S(N6JTy 2Q8QCfGf +b?,Mdp1 ۰~SqqF,.^}.IKc(Nm-Ff?Uoȶ$UًzLW)I{ h3?szRTA`VRhTM,#Wb!TYF/+T9<5 XV|l%KtE0/DIHR9-`(y͠87+ډ1(am;ٖc=YQ+r6e%  %BQT UA(`a|1HA\[ =2 ^⍡tMPX6Mk+K~zs iK`"+Ԇ 2W_Ar jQB7ׁJ&T&M tR'`6 m(zBUՋ+P 0kV) i49Q倱< L5v9͖X.0&(WDseLy&/Ae^zUeTe6 pY`2 )Y %>HMq I,V 8 FW26縈F@8:Uj5 jm;dzQL;㇁QࢪܿoU}jBZTOm!GwUAݭ<\ e  ^3/v욋Y橬G7kŖ;LZU[pѶG;pN6rw$*dk?:ytzcyk/\ЈK]+!H! ѧbn^lf>{F's vwouB2CTe;UdBqY84xv+@kJT KPɱX1K D} Q PiɢB U^dwGjGEdOi: džrObE})O^ 2h济9WluMuf4U@H`_X@AH- I%S'k'{3vWܶqDjKDEE6 Iㅑ߅)f7nhp@Œf0?וd%bAU`uxSp/S>vE`sC9ʒ?Iİ.c#,`] VQlEPӫ('ÂJ(HAN[4v+Qώ&~TѹvE[}F!1GmقS|"[}ICpm`mf]5=hH}g*τδu[WBuI7 oAFVS ~)J D!oOvӃmÝ@-%ԃDTjp,#FzTuLl\Jp7VEhے*}&ġ{XQ"p9=qRU@0H&t2˛by% xχޗ ^gk͠nbP/}'e!XnZRFL{Md[.r!0XjFGRxm=14!ʘ7i$@a:]Ywavݽ䅿x>/fvuG:T'fI\p7@ɽm1[ǔ*IUНn |ACTG"?lTgE=D>WorF)6|~Sg<KͣPU0Voӿ -ug7G)6Fԁ- hu1=Q dɳ}]aq1P1daijеzPS5WD%臡"xrhȅi"]ޝ@+vp̿<dônjV݀|l M3'ciS#qt8]޶&f Y= ک ǽ($i&8rsaK,6 $M-ۨ?ת`wDZ!6dTh9ʎ7%1)Ҩ}u,]B)b9@ _t K;]-+(a/R2u懷`V7+"(WE\aK \o8d %iIo=,# $ 9 =-7@`_M$ ndL "ձ);Ȭ9m3LB9vRV(l_{S3aN]Tddi[f" kLU /cf|&3CUܜ'rvZy+ SѢ;ߣ89Zy '+0jtX]z Q8 >"o0iBi4M!$!Z?lZS,%Y}EP,{ǕrHѱ@db–A,Kg_Y)sa=wȜ|u3:3.y`XБ HZ(*Yn $5C\Ll U$k8x-.`+W_wx zyT:B>zk6HNjJ'S72y({vTNDi~ iXJ`(4#Ǥg ;B e\@K $# v @ \s*ҫ]åzHvKBS| À!]|U(Y8Db_1:;1@ +qO_NÄ.D ?tc07;nkAM!5Ơf +1b8l"VUhʾ­it}bhʼe 1f/>M0/e߀u'oX|y,ǝX]F*c t)\ИI2[agBtpmcNU;A8*EID-gf3hl ,Oiۨ+O3!׾3))8,aLM_GHUtxYU5CKUc~;cUxn2 !^dtMA{ :W ٓ5NXJWe o j0 Yfv5(vvЇ M\q=}߆N=WVFج6ϗ˜K"J]EcjB\)%z,ҿ:-s)B2ӞW<)dRUeBǪ2?@ `(lד4ZY4-j#CK~1bRM_8+oI㼱. * D\H.W$,F=p˅Q$FQVTĊ8oZZr-%Ҿ>ܓlY婒 j4~yW/I'b3HC(NZBQD.*,~#5Br>KL.6hvZ,#y+F$@HAd 2:z,:& = 4+΁Up+yN |# (u:櫓FsNhO$@ê&iJZ`հA;i9ΨV#贜EDh5] .xeϢk29]݆ !i F3}U?a㗓3s (}Հ<NosNvXh) /F0CgAt G&uhEs<ΦnnrDuSsPJOz<\Qvhc>b뮻ϕs([&H~,=' 㸷)"g7.z ыm+C[ v \Rh$B^brWqr\@b=o {^Q͗2ݬ6%#Ǩcϭjvz#5T#6I]@-˽nI|0:hVЕl@9@4L/fO_q @KC$pJw΁፫Go4 j~<%ȫ }=7QqGQGH^C_rإw5KZH_86ahŭ]kH򟫍yS!L1J&L擗iz}F1da+8yO,k]<r'۹\&t B a@&#'%KרpJ<"ǿ(Ix{NN Mu)a$vr  vDjD 晞?u9]D"ȇvP̺Y6Ǣ U|rIˊ -|Uwb& D@b!@Re mI@ǜ׶frnnrڥNU D)5 1eG@D'giV*[["-95=7sم LcJ޳r!pz_XTt9ZaxwL`QW5plQ4>Ɵ8!m"cUHMC@EM913[VXhJsDY G[5ٔ|({t+ЈU_aUj LꝘ'jX=.dOSY]5?WM< +^E 0:SiyI"xJf-UQڵ tM܀a19Ȩ(dÙR1O),QUa̚,f%0q<KvPptfLfM1_>4FXS̑p6sieqEi?ZScBî6]?{ 9NJ.H:M8NqM8в;6wإ؎EԤ _2kDfz*7"5&ԇ9`U&Bxʇ{]q_[Ї>mJI^EtEcItjR6ܝgƒ*ȕ0(c1)>(HUg\G0]1 Q 2y`$Ib P qPu#*p߆ g|2c||&32=ppB.<@-҇"nȰCҝ VF3$e v;[9o6׾^0Ljg߾o'NrF{(W#gsGbUM+ܖtm8!G?K CmvW(§$豈 < "Ϻ֞s4౓%'g#k\ƥU)YSA᫥<XDp)`e?kmfrLiQ>WTrHD5]pAQd"9猱ك%,M"N/AtD =m N ׍2 - ].x7I:93ⓐ ښO9|/x& ):zrRqXX~%6+::ſoު%\tEW)|G&Ϳ!52ocI2@RM:(X\T,O+{1_'"hl1JUCqf pa#/A4x$U8T"ȬMtKD ҌSBOKoR9=W0H4X< iwV _L0Bϭ`,f"A4ڍhKrfykW[$[?0|}K=I#>R0O^ZE稟{c to,wƺ1iE~" axN4#،Gѓe}e׾Tp갘#0y>%#!tElA`۵k}-+55rPL߳9`+x.B28svH?fFen&`: _U}`ya؝*N jO "NjUqn;eJ;[CLP4Z?uR;j3(8 f t)ʏ.N +73u5hOKumrqu< QPκvd RibTq[@ϋa~y- d{sغwtp(^@aZ4%A N^y%3)"8^YWE HTuz?vNl^UPf:l.u>RjJwќrQ~ Q~F1gXj:h^IG}-R# L'A"*jEzg'8Ol0̖} /U9b1BnN`n׊sSnh#KÕNxX$IBw=ѯvPaԴhlH@@ip{ڋt(qIz mfCH&a@o>HA}7Y˩:/V8ȶ#1ȼbVeVu*pgWxdW%7V[ߋZO jmM PZrs<*sox4=080լK#CTfhHCPuo6г0@^(~_OO}2;qC=Lvq 0P ѮN9>P\~l6SIRU4MK%i!ByFaF]]Pi5w#?$WW:j2٥-鳪fn0\(4s2ìT)cQȴkx񋤺賺?4Rr)w:W zs^yʪ=iCw}6 xR5(ZK7DC,Wz̎]eEtfhjR m+$"_L@{{6;q:aSx`2'v8L9: O{8ݻkm*iRTIF6O!2leL ה@a_|=j'O(ul*K&veqCʑ&w$ԄߊnwaBa?9c,Fk,%[@[kjhn=LFS'ESDdE Kj]O}`"`` g|DB>Yrx0^ϒvO_L#봂\b''&@p="<^L(} E>A Y+Zn>XIPF+3$qRӔEg kSv*dB!Fi]Nq1WpG Ӄ 턮 | /fYʂ#U_T7t(GF(} O z xaUMˢCN>jrFN ۴0;3y^~ڹNiڽ JܰpZ䅘GBȡfLV gP0l*ra NXZԻLԈF~ '^e 9 \z! "TlCgdWBNbœ0G^|d4 DZ^'>Ў,g0밖/n3k065 ]"S1:0 " !\U˗~?%OeY'ܲ+v4"=^yy 2>/Y9!|vt% lm¾z#Dv=J|-dXTG 6]]q_(⻈ɢ6^Xöl$:+܏VAPϞT=3sAW`=ETYrAYAGLqB [ZtJNⱊ|D^ǡxىMŬbhSUW5ٻ0 5e9ߵG$Ga}y8-MAC{6 1`ɣ9uøwL%ݕ&B EǏ{c/Ih#8- T ̒.{z]KEt|a;YiPU!ʇ(6ơMomK+H`Ji\X"!I hhz'y4Us<9%uԔMZϾxfW 02$jJV 4ؘ(32fSRY;C4y ;^Bn,|+Hr7YëCPq`"t;[Mbm^U ;vhGh^ØI"/9y?۰0F5OEL( ^=k>TWnp%uT߄Ȯ p,F|~9bB# Nv;?gu޽ŴA蛖tڌzpx`O-H3.0 ܂.5 ̝U}F̓:_esMR1j( f.,M1LiNt`EO eCsXwA'BlѲځ]Ml6Ħ==ن럎5%/W`PME%@KlYbtKnR8''$ D)t hbx3(Ջb^]-,ЗX֖LM.\ 1A+5#ikW*̝E6#2/D)W./1!*#]dlBk%ke6ΐZ"[@USEp s'V@m 6V rwce f*bS+"fPU_#a%XuV؋yT5/TrzB~}N( f&mRW0lY v(e(MڻذDT4qU=AUKOfmw/ nce vHUˬ酫BdC^~VB7"TVi f%Fu)e%\D jŞK%+g8H֫ 0ܢők"CMiqz0I/  D8K^GFbR—sD ux-!~_437FNKؽQ^}<اt#,RhL]w/@vE[p'+-@3 R;En6XjCkm̮3.+xJZϢx̟MPz[v@>4qCr6vTeq1ͳ\lu>Wm C&QMYZ$pRN!Bfk_gt-{x"(x E u:ܘoBJ.iC$IXآumaMuC`mj.vI,` M?PjBYam 2 Hd#.l!SU~\e J1C%^븯: u"=TºLS!fr^&(du^Wy5ouUgÒ$@/ؠqB[/qllJiGА D5`g9mVtTpNzDd$Ph }T EbE>(=3W.a(@FiHT$6Bd6|5>>-g2h YjLj!d']+ 6T `gUc΂ W\w.&<r`  $;a bz&QS:Ȋ{#ʐءM'ѦgEc0 4"KMCç~Aܫ 2E>y\ůo+dwx+;< 춑X04`oSeנR.,ׁ=z6٣\& gʄPxF}gN~RGBo,\(+lU["ns7^L#?Z]mBGsvL笎Ep.t(-n2rѿ\hK^\E`Gcsdz6pV"F[L\o l:>1Rҋ:{!X3JB&8F q;밙8"/-M_'QƇajɫб#Xv34kW~dVr& GG#0OIYJV`|OA{styDIeWRcV:N?\Q:2N&7Vzۛ8fK$%%s+j&ˌ?ȶGb㞥%7zƉ71=xh[P"7.P[ \Pg"lX"8(]Lp/{釶R[mJl|'!`[EA8MU:nQ1i^bXd`?;q$I)Zk&AOFcklc19c3,9}tNdjwRe-`S٠\Hጸ.;~±zeZ[:k^YjgaQ6$rM6]{rm"P F<(A0zl Ј^spvWAA3$-Sb ޷-qVl>J͸Tʲˈ#.ȸ Fv4]uYgC.L-0Ӏ[-ς 4nGiGf՚"I":voSB-jyZhzH3i#gXwUpA`\™8_lzY=T 7m *~#O~k1pG8P)K>:8ԃ+X>Үhc)ݬ@Ћ~Tx05:z>XBK+PxmaE` B $EAy7L{oww1`ymW Kv ֫L}BE[>KAʆcے 6[;7WI]M(r֬3b gLQ xkjc+SɰbB3y($+mXN|dlCo,8);bR(l֓x/#hMvg`46l; 7k  ˎ=\dpO.5^l Ω[͂EL4If +<CE#Dy6,tԒbu"G C,^rq{"^!#m 1x,xJA@ ;Lca1`Q2):^Ҋ_Uja)xǦ{s0tyfdѢMkpus"k:v3F|<m[,`HgOwy O\#Dg: >fvt{A'w/)0sf>u2t|QN=# 6&r{ +]ZiK,D]d_Ko6 _I%~Hl3ۈ(ZJa6rl}0+&Da 5ўśuXũ `5 =i  /?*O9]#k`KIAYFIXR3G7Z! 6&E>2=Qqbq.'(kM+  6FԐes't(?9tZxdL w ./,؞Uq3ɼbd {qEhܡ)"hj۳H&F8b?P'0T2_au|X*z#W]W(g" ";'||9HS#BMMeQB Hr(ijjMO2~8OAIPl!yRpZoTԫ6 eTgÇ x:r$ L$4rq4CCIHb6訪W`ܣWkx;]`7 Jq hQ+gږ2T`޶B˙#FdG-B5")c1(X"1`*lW#+٢ƽR(&^Uz%\J&'MP%;q'Y izF hDHd "I]$Jwկaa(֥ $^[ EnX0P,nDVKмd& 9r^ѫ2e&MNWVϋnu'9.0'78W\D+f`P8\hd9 sc*)w'y XB>('0:)1pʳnC@1a4tqJ#ϲa+HF0MjIn&s~c@{E0zzzT5Bh8"X.}Fv館 u%^L1ZNȾQ|ØYKSb$b(bo6T*#b5B9kB_䕜]ѡ!{:vhuAH+U{4ed: W|quIBR܎Y$!a JTϦAuUVq`B"&Jy:!Fq3KS'*FkfP"N{ ٩!Jׂ}8%_5JRQyT F=L;̤1,0l9UW2uH3r CG, j0-Jy\ *i=Vy05Xr R3)(,@ZMPWkv-vj33d¶H:zK?c? 1吏fWAGA 6ez)lr$MRs2055^p}<qCWv6{s]g0L2TED\EճS"8DBY}eZUaŽ$M1#TO~%A@E$iަ6*]t&$NiMn9o"L k?̭@/W`TŨ{m<ko]dH'zz=NjkZ:Gz9ЮdT(QT9ώrz~4|ߞsEFcMA r,- 쾨K,vy=63Zf9[`n"0yh>ݽ9n A*CN4tP+9tP3f#IϨz@ymβp.ԖOtwd"l-Fa )3#KQQܗV+c-l40 8H/Z6!SZQToe@*2'b:,W4e.?D ǐu(WΑy. EA5ؙGQr]٨uyCqT}!M-ݘ!C/߃[F~ #Vn T:b tŦ@./ B(ѫO$PLv)Of_U$NoǪb?Y5O):+Qګi$ -!ۺ3*$l\ 03QLL`4jbq`dv,}qpCRF{աJ>ZB>*n>}?A{c{ۈKiM̐Kq8>5ef_vb&ӲpA0A ϣF1aE< Hꂴ6ȼ+wE J6IYVRX ȱ-& t!FѦBFKàK*]|R/QdA3\ӂ7o^o\$ i l;WlDQHbn~˲tʺy {rm [Q)IȒ=t8H89DдS;^lܔ3~_@Qʨvn*x74}ZY?ȗ3*ngpwAPgx(E'(W~{G .8PJd%S_H7['1 2=oO;Q!zyȝQãׂ񍦬5PS.MQ6A} 0C(!_ɀ90CB'# k8CO^.#o6 \L"4E?$$n'@E'P> nLd/a<:z Z{BnĂf0Qp/!]aBGC8dzH9S'|$B^WvOE,0f\ ;-;{ MH66BR* mU'bq9JcR1P f5Ԣ:*4|>e$_~S|I2O% ?D 2`c`:TNT] \{ 9(## yk|ӪF0HHrN:AἰL $pDwWyu=z>P yXGуH TX#zwohHZY=#~~$<𹫋S JNUƔ,2se9?NJXoSݱ՞8i=9b8Tm&e"3dzgdix>Bmz3D733xdOHFJGgrh\vG?74#ɽ (Fp\(QnڕTƇc \ApbB DR.SNiZ*#<տӸiPw}47rd?;Uq*r}Uې,ȃb;ۓ1#JuKNs6f~wm#IPS #@(pV'OfC9S5)U hn˕CA)j<ԧ`T`#gͧb4:L@!"EN\ODIV=JM`#3"ygqS:{!eIaצIqe4ҒV.GsmQ@J %z׻,m$=on;!}=LZX볒pG#[?9ΩiN8N%s̢\rނ0yhOb"}:m/XģU gM( ZXppb:0BS2l>n/`iCI h$hhͲ=ÄC<^$OFx[\֐7fYOYzL#gۤDًly!窖0X0pF _qpNnJ#EL^Lj V@2EaҰٰ\WR3}>W-ْW8Ed23N]IOW'q zef*5sb*,lYn%a*1 -N9N~xSяmbeE }u"r 1E tDsE_'}SWw "L}#gr%y0Z 4=8 *c-"!S6<(W h7m "D2S^?RD3s(M=lJ6=+Y?oGKT6 yJ=& I#qJOv: _ z!e^jnj.{V$Xaќ#f_,&Ks?JId?bmޗK {tJTjx # I{jTN$V1 /_slwOaf$˰jKqgN!=d5W8> w<"iv*4ӄ348by|7PNjެ'do0у$@JyBWU '2] }9uT;ڠ'/962? 2tquu]":A v3NDo!ebW~`fkPNIr@~$b R ^Mx ݶ%BM;P 8$IvlLִ\WY&<[>%(G 4UO'LgK'F\au1$3:XfǩVd.\Fy*Z3b 2 mawp|BOMT_(I'WP' (#/y>)ٽ!3hU. v`U`Te*lD8$*E&`:1zVBzmb 9ZijO2S)݆LЋPXd O)ƭ[G6Mrgdv9Lޏܝ+EonB.cHq2Â)qUjHA~f豜`-.^^\)Øjط55=GAbnFbd^,^ڢ MY{m _t|6}KT{GC T( Xrʲ Js73Yj&;8gaQa/َB2 3A,VUug1GAY"0BT6\Pn϶,l žf$S_DFsť:(ld@XE7o3Iǃy' 0{Q@6h N҂|q)_rC)_rC)_rC)!WIKqJqgB!I(үQU ^\rP $Ū02re!D5(XdmZC3h$jks& 8_ ]dhÜ"%`>bdE*)zoi:$ybw:Iv{ [?%-ެef%,U',UFL0C쌠!u:y{ozMjJ4.@B,\f.NhDbc#nEMB)8;xΫH!TB*IMdEH5;q,D;=?Dh _V:J^ҽ4" s"!мSQ_?oc6qY]]+n OHץ.yxEؘ_@Ĝ&:4ݦ6̦6i;ĆblXU?NCv #ϳR*T6.iIz6g+"zEY%&%\u<,oa9g?fD? qQQ~ yhlPsY}D$x<1w~W* Vǃ3W9`?q)0!һJ%#beD^'ľJ :1&*Ǥ0Jǝ-e;IJT3?"hsIfC4dsr Ršc(ʆTNq![ YÐŔvws1 Nb+JvUIxsg^J9x%83::6j8_&7)[tlbqO_죚caa.n*,u߭3 9Ew#4D=&9- yLo60ôp`9)l-\)J 貝0/ivImְ6ulL3Ù]sեvF(ަ+^eM\,M'{Gs$(I2s DU$#t>Y`6 gdz5G6yMfze-@PTQhA5m jLE'lg]4Xb<ˮ5!'[/9kqS}fv9â Nэ{oܣ<~N8EU4ͣ,Xc>\NI'mqN 5yvonrfbkKRX"KI& V*g)TC7"P~JSX~ȩ@;3K}YC5ameA^ͪBrv[cO4.QsɏƲgcPDʞ&2Gu}ΨC^CAg_o͘l[""놢VR+s|nY=2`,8$1N( 5NvWhHX sDKz+SY<5}kH P!^aQϢnB=fcRW0]PY Q9+wAZ.ŧZXW@,iEųa XxpB`;K{^}EFC1vfФ{F ⾍QApa)X@fQ D bV_*-aqߔ'ixR'$}Ow g1hcrw]Չ IeP 9dΑq@倪^X D7j7/gD_C`fv[-( 0,b_\I쓰F'ӏ2N&n˚EFfCDʳjgG$0uˇՀQ1'vgbDY3-:$H_O tQcBˌ LsyL|X#C DqWOE!өIctIA(ʂ;YNEK()F?Cʬga%ֲXpOۀZ+'%<^ uA||εM7 ctQ BwÞڇ,4: ! E*;lmKbB:7jjN2 6Xɠ} T[QW.6ȴL *_8}bAqV1ߴ{W%;&( Y$Ue[nIάR]7 A U߳ rfu?'c?^ 729yT`6xpt@oﷷո6?BfcoQn]+\6BJm^,4, ̨dˁ- ^bBnu1KxVkL}!FҝK0|= /C6K (I<sC,|h-<Mc`uxLHSDg$ i)c!2##)TLzfR.2o ZaoGiUFLPi0Xd,j0@'jy T,`QTI/ wHɏD| kcm*2R]*)ѕL?$6㫝 ˕d>bٱи ԍy @psk!V'%K.21L [CrbLQODĔ(9NbÕbEbI{4 &Y7 夌:X"<[y 46Wؒq;u`i+:kF(2Q)GL,cT`@udb3Bgv%h&Y'p ^ğn <tD1U(k pT'|``E 舠(o0-'6jgS Y*dݱNzVg?#k@Nma_JKBؤA(xW%I' "ϬMX ՋGNnנAiRhWgaJ^41ZIRDIT!"F`!hE@C]idB8;c+92fuNwz%B-/yM?ItyxٱS}(Q*9>þ')h /{;c,)LD5` ЇǢbLo4EhMֵn@Ή3:xZm@20l)VpySQaUjh֗0z:T  ))݈ m6ёL Op6`۸>&0UQdshc m#ƙ1j/' )I3μphͰ?FҀg6cuC0 D' /5KބeeP *Q,))Rcnz6NHmz7"'dSp%| { Nw)itGlX'=sF9s#2ϣ1z†sWӈ"lnk"d,HD%.*c" Ef ‰ڔī!&6źA8O%Ҥ{OglVe?&(t+&3 ֻ <eP``|kS淁LQLMNx+4.C9,t!BJϖ|{aL4VULE@ӛtmτ:7&*u#u%2`w՜8[ozL;#PMm5>/V[F ;\Q_|6}lEú\܎q/oePq^!Yd5TBO0˰Fvh9[5 ]Ɇty +H1 !0*BWOvs~3g!w\XO;/i1poǼ۝9T6BNJC}-[k4}ꃑ)`/(c# Bp^>f5z+jdV+6 }kU[8?g?Ae~,ky +mT"+_ )J:yض\7a}/ ON̰ve6`QȚ.ƢsMZ "k=zKlHZvG2v^2Ou"vvoKGbMVUϏ|wa_$e]41@p>IAI(\%TRwYNRO3kgS9? 55L"h, d*#_Ϻ@v o,X8 $8@X0)?rs!pn$SJ[AtǙ3i ã`Q)QZA9 LMjAy+ u=|.w73<(0vUB>M1,T^p<"GȠb=L?{ _ǵqc:ךB$~>\lzU3 XBO4PxS60!%};1ʿ2Oe)8_#c: RrP<)LF-3WR"ٌ6P%t[v/lxcGc Q@3KPVZG`p,4@PtgFuYH?仪>RNT '}+TgFH38H7R`0&pap O k!2h(LMPȐU ]+x d<N0l;F dI#@.:IYcmw O .72׊hi!eoX&XVd:o]|\mVQ lT8jh>ib 7Zs lհ vcSLm07M9IPћPթԵ}ƊH۽kqh߲ %:C!d;,y-艟|͈z6sRHOx%Cɱ{0,ͭNu "1Bt0C]J;]mbȭ2٦x{ VF2 sON2}DUm"dpҋ.C>JkCP4,7/Vd׷iGc>{OCYdd 0<\o.&+Ks4x0NN>R4 v?o2dk픹1";G/vC}D?Q5VIQ;]V;c |He:-؂Zc"4F\ɺ+4fd!졤J))MW̉aY8(Ànq\rGɧz7x2нMj˶>buN^W~WJ'm2-N-z[,&?ʻcb 8APݼJ ]Ȩ̕K>&@P!+3~~_goD P]cQ%fPkGCVqyA S1 fM76$Mm'< ѵOYֶ %~`a?m ?Xc"aOdσB]u NɾR-Qό[eC5ăx R B i^1`lm@%Ҫ+2 5_I܃HDq1mInE>,^4S?Ѳ}e@1t ЩBle1LQO, >)뎭C4_r @"¾E#F2'*JiVF⠡l6ߺCJ M{TY/q/ee zmrﳬm,vڊnUF1'dL*9xTQȄf/"co9Ϋ~e4<\gaꏩVe ݵFjږ= EC0I'?HYo$XE=B̀CW:dǭ泴A{LjzzjQ%Za$͕̙Kýq䢍Ҙ>AgCzh}i"$4_6g%f]Q"C3P1^$/WR7ׂGB˂lm0m5۟H|'Tx\n#Pۡ,Q*dGH|VQH m|&.wt\SG1VtbQT2TJmˋuvѳ6JsȩJK=g>zJvu+#QgR|:zcW j,7w:BLq1qVd>P%U6cjw8ڨ`RVP$\f89PX>CP]}ૃl0 /NkZX0d}LSw(?QZA5q"%f $+[0p@\oVх7׷DQ摽|M8mf(;1G >J6̉q& @V/#{C-\&%\S\W $2$$a[T%7 `Ucxf/ H$d2a2\9zJdaX Ko50&9`Ik 4n'*Ad # ` pk JR b( zD<ܘL3?DH%ւ:`D;4@UǠp,$Y&# !7Rcp6F tIW]gYV]pc:0eyňYwBHyk=L*);] $LUOP.`<"U#>.S"J%V:1o1'lHTvvKLό-rB5bX)1epWEjz;2',@9Ф6Rq&x3dr6@y ΡvTÌ-e[+9"xֹ\@G"O[܊6$ ɱ,`.B'4B3\6!"CHL\iwmp48;mU%YIsCm:yKC S:F0&R`i(5ysɡY Ʊ4*9rn@aA{3Ds/Q8-PŲ"0unā x͵7åFk=c0_T:b~b.P"s%& ~`F[v#&@qXqF XNKLgoe8 Lp)b}PB:l;D_#x\,oǂP"mhdQ?Q}8r8 qqv ί E'#4T ZX2qK0+ 4.@B[ËNkdiKAdpƑ5u>z9(_.=N$xޘ@ ɄUu[^1ΨBU@yoxG _fU6]Xy|H PK #G#a  [DȸHFr00WDYB3P](O0h/om^kGgLwZ{(ZUA؃=&ґ cϲ8sG= 9MPu9`5Iof룔%'SP{Fvcֹ`x 6 [G2yb|yR!eQ@J.f8SPė]:0W#Ǣ\AX } %lܮLKڍ-A(נav&f'ϕm3_uTd)^BbKUՕUg HmfgNH7ԎXFx3tF'xd-tE9i6v'=K{еg4|`& Œ8k+NɃ̈́a3")C"oA% {L%a%sbC%+ZC1hP| LϮv.2>`1Hާ"IS S꒒b:C*3yq߿9Ifw杳NrP~::]5 7#H8C Tʐ `2(=l8  ϶?z 4?#O;6ʄ+\!W;.!C*ʐ;"b~jDaz\vWnX%VRyR \hRl!Iu=d.&,#!p:$xU(SfXXmeqPDD~(7+qaӾEAٟQ Y+ᙨ;*RM~x5hmXe9z 't[2SvFDmvd >@h*d# ΐhNejYtgӅG+>kBWvر[늵+HW֯-(G#tcq4~'1xO4aT$LvP5ճk5ua=a  Ah`n&4eSaxл EoڴQ*f^RmplB!fdzC*oAlJ>Wg"pi857DӮo9 ]L6H` Is _dG 1CdǞ8m{>`j tauo cj @V .ߌ(K]PQ 3PY If_3*~UqQx\mc AT3 'Ҿֺ?@ X\ bkYÉmM0;3fukdh(uFߌ'昕3q3E>Hxbi̤ʾC*WA[_fdCgRƄp/ψ]5 OƢ3~V0P@ 2Rb!€m p`~4X`J}{uKU3 Rs Hj,{s }24DNST:f:J/H,3*LUk6ǖ/bZBl`@'Ksj} S uM[?i._-*y"@֔jZSH29x"㫪$j,Xj[1!D>^iK89nӳ{3GlJlҧhO ]5Xor=f=@p?!nݨzHg9a#*ɼ 72[3IHg2 lyl[ u'QT A#.AvsaР+=C.ʈg;\Z8jE[=.*;aiqm#u|a 3>1a`^mΠmdFsJ,Ȟv"ɍelm Û1 - [QI.AۅZ/x;B*Q@OJBOBp!tz*?S70LA&t'QxD*t~جL DbT3մ::gZg[txl0NkϦx05-R>XeHAHhi^ j^s*cs}fz@bv`tfn,5(%06{NH߇AU{z~FØ0 :WX=P"E6|BOKyYr< vO-ԁ種ؠ]$ǧ/`PYr%_QD+.a}许Pc,T{k>1+(WDo";Mܟ2(kSrJm_1& 0a8Z.CAKV s7M #-w;k{%BE=pս!sK$dvP~q6dvRҊh}&m,cO`uGZ>,ȣBR*V:D<ضR)d 2y8xmjwtICL1N C+T=Zfoeu'z$Ehu✪Y< ݐ Y]7oVm- ' -==~jDSgb&ǚ|&)8V!lX`fob5^ )nBU0xTiTGauSS0$dXP*v[" A*8290Q(Sy[8=ډ,fz&_ >2/~Bq(s (ͯa7Wy?Y,aPͯM/'2{9 b~'}R6k:8f4fx28hؙi*Auxp9àBN7'6"r \hU6RY&"̺Q;Fy3-CcXp)tBd=FuȐ>C"CʰJ83W%kF6H >fwv~.}yx~ ܖߕPm7g4?Uه_nqTWi]կt^ς\8kmi>flzvtaUݳ֫CK9?O׭0;O ?7*վ|l=eO7ܧ>+gu"?Hpﭿ:o[ci=x:)>O_[݋VuZKz}j /q=>×.;-4 ן[9Vskgn7wVOun0ux,rϬغf.V<|d<]m~/[\IӔ4z:gWfo} SyW-WV4_1Y7d|kxA\p|4> y:bv$vXy\]Wu^><ܗ;~x~Ȃ#X9/|rayx >aF0Iy?쪻CA݅m0>U徵0em՞ÒΟv/<\shv4Q:FwS؂0]ɛԏZ01aN',w2{D?b8t*GynzBe2#ͼ\64aaڷ:8%8IUc㐪G;cT|g X/yb6jY4)eXR e0 #||[kf j+0ޏk"T*.7 ] R:9|"\TO_]Z0vLm͚{cB寳K_Tv| OUi+OMU -^ʚR'Y#Qa*P j_}~S &ڿiu!NMgVpgagRp~-mЃaj:TS5vvg+@RGZVv:9A> |tݹ0mx#(T``0/}6l"|(\lYn*j>~6j=lj0}s|{'r#]RJ:1>>K;3jox5hOp0›pv 1̲~ýgzC gl? M>/WLc{ah\Gl8pi mGa nq.i<⼞{ާ|Ă϶Rage^h08ۇ;n]Z N^1D\*KᣓlI[LgAڲh$; uXG/kL\op0%Xm v_D^fkb<~v>,jzu4sJyMw/5!4iEZ~:$9ɻL/?án:М \&$\*<ښٲ9as O1 |]juN aWLf˓ Hp-^ nVГӻ Ө\Fq\m)P™jU,]%W0\0(vCއ7_r2= e=/۞_/Ws*Ljt);/xekVÏQ(3R^T+³ZctZ<>}v3[bp馻QϭW+<m=Avko[|j5_a|-([7[3;+n760>.%S.|.̈́ cGD 7a>s9xtO>2eK(]wSJ{Sl+!| ]^1!If_P4٣OW>ȕ >~]9k)اgWEro`w#x./-`#X+s`pWpPs})q#wY#Fǂ0-,p:(ط)DR9a Ʃ;F:͘X]nc*1م2iqܒX2<:`ԇ\,7?1ȼ3ET `t ֎ahZ6H|{W ȋQ'X=k1yKYѦALP>i* mvB{~/lAu *U+p<`,!_,V &uA{t2h(%3T10ҁ4qmφyAԃY`0WU>g񸝇͊™[oOw~ئD3p2ÃYylv{OÅ x8Æ2z+CmyxmH- nsV(&uخOUu4V(f17ځ.| q&nΚoȅE.ѱ(f)њ90Kl=O!H]_m>t Xͦ@s 8{g+`,.ßކG6aMÖ ui-8FF.AKK{fY0;1C~~?RrnDq~teZg' av "~Wۏb!; Û?N޽_r rr0W?܄k?|xo߽Ƕo߼w̭1v7߇]}]x?]{wÇ76z[,&zw  v^`o7|8OP?y76tu;<͇&K~x>2A^`X~adu~x 3t~= fwo6|"L@Ǐ 9pdO. .\ ٛŸW~7(?۫߆zO}o߽> :eur|ҍ߽ 3?}; ۅj_g{;~M=x < #-3Z;aa+xˡu|.|'<}^.޽yy ⇉ߔv^a?NޅU 7ش]nO)& uc[R f΁mؕv"EWV[P% j$BjoViăRys"/EaeAmyN2Lÿ8dO6ՃkڕѦC G6},dO'D;rûqp#ODa֟manô({ҎU _s%n#w&FSi#0O8 Z,sj=dG:&F_D(zf(Ž곰fSVĊc$qw-d9 y9u_[gD _yRcljp4)=œ5²ӱ>fI83(TӛP•ɱ+<t0xe㉐T o8pC͂YvAܔAe>I4I,ͷ1 ~8tϕT+mday/+FA+{;(nlg`A~(zC-H B a&l/qJ3( R FN˕+ۣK户r2T}cE;b -Y)HuYg4Ճo6q5-Y%a~93hP wghjD^#"KعgT]$`;G% c |[YQWPǽ ??^y.W߿ ҇{yo]Nwon@ޫL}6@ {Ws4yKe,34#KI`I f-_8H[-cc5>3\{ګ@ /Id/:=x$TtQ~Ajc]Nw:չEqh,s'wQ&,n1D-3FʙvtVK|EPfp3$3I8+: vE91`'X&&`" m W\@@:s)A.ᝆ2W"R1G{(8Ac|L{؂?L>(^B{S~/w'xK'. Mx{::C7>4@@F=;2Gوr+S:"ؙڀ5e)Sa7Z%Lg!Ш`E߫t-O\Zd_L/+fStVĺYy{x)s[iuET :SdpdJ6"3=4~Y\=pofjc2oБj\ {T4-ϖ/Up:<W>0!#委%Z41쟀 Oj6XB|kʧ^QdاFgXm?a.>*[;gj_zp-zI3tĄz$ىW4?ö@v">A4}>D *DkqDhrbwg:<J ?;]gtW8C0al`iYL>߱~.< )݋B'tq:Tyڹ+6?,NEMa@gjbe@6A;uƭ2=Fj5h @؀ כVfN= ]﫡 > y??a!_э j d>ӣoT28eT2d[/N24#Xc9`syi|_=[iz(IƳ@ew&AFVMEeV'gΠm)!Aq [ܭ3#S?h΢ȞuXsuecP"2'478y9 N"ٍ*Cod;(ŕSR@?{*3`uLUlZ3&  J$Xr{{3|գj-cJ] .U ^ɄML[/ec }livqbT19ZޅcRMq0or,3&7{ EQU[x^OUWG8CKf*6ɓ*^?ei:Â)%0?F6ۗeg/bX?SuxsaqXx{:sUZzbO XScz!Ћ :R',eTJn5&{ĠqOvOϪ#^:#ia{t:LZYɢ.B 5SA>ivu)[ v(FžT~./N^]8W6+II#uHe^d%nU('럥dIYc#KY\l`8 <[|xD8B" m~dE}ZP;]9}H=LgXToQB~w3VlvzyFG,[ǷHeX@|$TUcf(k.Dv̟4wqGx=kiOw[*yG߶~l)(ٔ:2YYw,]u ` -R`/q_*slU·lr ?Y[XoHm8zvum@aL%P}9!{ɢܩ@?8^Jz$8eB 7KVOQ>'fh{#)=qB7kUanOןPϐ쮞]ƒ9" /pa'2jy u.*ir@g'>,ȏ-HDR˱^%lM~ʎ2VOc98E/^aQ4uYv]ͧbepsT5iXP?G1$,RIbj*` Ǭĭl(G'NKO*k07TAͦs ke3ۙfUNk\M@#K)gwF_Xᚥ;2S0Զ|Trr4a{R 2I7y}LDF^҈`됲,w\i*#/̍܍U[|\s,K팅r#Q- gaN ,$.Z(68a;T)8L)dG* A/tȂ+?w p*ϞA&2Nڄ5)_EFG-aܭpf=2Ka sc80O+vҊI YB9uT2+%f`vVxĭ8 .5LJgIPhȃu<\61-h̭1zK"`&H*SQ1vc֫@mLdգM^h,mF ZMkg$B"y+ 1GFxa1I_ D&όy2^}W.grdEekcE"lt5eSu.FlÚ"%qڭxhɭ`JjsX 26ca?F&&ֆ8j7vg+<Ɋ|]r% tZ"5HhKgXu |ۂV &;twPBb<5r'tx}ЯrfLꉗ1m 3&ȉxV*s8E'ٮkuLc5G~x_-d5c$1i@ֻ̖b*̾usϪqn\4'9!pZgDR=Ey)ٕ(#˕zPڗ=)8;wxsUk}POfTI͜>yّ9+=D,5"ձ2AI֎QOٔ 4#(S;A $JUnaؒT$ {dxjJo;ڃ|kUQ/D;sJ4ˣl)D(:YgqUVjbLAWZQ(,Wl^*e%SɌ F҄&uU0ԲꘜRƩ:lA.b;eezRmIfvh8 0"oi4=b) M̄P:;q3AjPP9H),-\W S`9>[I#_ ]56_d >MrgV//Bű POq]xz,fz`[Dc=h.O)JB-MA>eRb^G8es>=?jW4dy""3P/k"D `x+_Hk#@Dia4}>!&6d:>A&}/^&7XN@ QiNʻEA{#Rg}$K"f=k~M"jc] ͛i)VӧbJL|e"C96"; ͸TB9qF|F "3@ypНkm="xngxn3I$nrݕXPbh(r r\E6";3W(lFځ-EgMWnT'ٖ1KڭhVWYe1#J L)׍Ki"7À5:Ԝ1RBW`T} ug o&"w%^y"RslnrMeJna,gŽ'.tIUG:*JXH,KE(*yF\.1fQ9uL ./Y 6 iȔ vzކ@pȇ[a#(ߋ*CFs[pOAcv,w v/r/lK}+(9[Yؐ&Ux2~ma6K'gj LfrluJDJ㶥UU#"%܆'2|ƈvɂ͗PEFjI!Um] uTJDs tVsÚVdttE|O:N3Hr5'%KIB pIXNO0%A=^z3$| 8Y0Dd੓' ct4)>Hu1ϰp$V' `_#|!5Jp̡f"CsQԤr_ȧXr4x`;8Wh,fM,-AY o62%l}KSjj뵳]ߐËơ寫SKu+ r=?*$vn~P',I੮ 7ceY~kP^$Ii+w P~T$:RD5^ySմ+Y~9E){gES X:8IF<772Paw˰*sf< d9w3 `PvV1M˶7xS"UoJ_4DwھheQ-q_e݃oWr8WFoaP Z!EiuuCa#wn.0૤&k3{/Ҡ֧F؎{Q )kfXd|=eSbg+\m,Íqi֑uyp5k%vȍXyuv鋨~8=j-u78/׉9x]Q6JlB%q|E]EkBƼBǩh*62;>ki6 1aQu":~ph"82uh}^SѼ* Q;.͋fKߤUVJ^4}!oemY0w* ^½2Ј.̉f}ܥ_](۟~t1kiUmOUcJFot6}GS69m]y{cL) +K̟s:ZfbeǶ`|' QL">kaM_a\G}ys@q+(I1 D>ܷ 2nj.#B_섙r 8ə=m?pQq[5QPl$DXWaO6KW1F%qtȮe 7>Fc"d7w=8b~ kPU v|oW kRI\-^^yyu6껛| +Na#B gIJmy_Rj˲K*AEs>SűU@JJ$KF8JѠ 8<}mi}[PԌ? rc)5PO3J'FRnW[T(dԞ!6ebgAпڑyzmIm(H>&J;lۡDixomW!S: W B<89pwB@,+E~T $š)$㑢Iog? ҬG*jzJ)ض" vZ0N.uf}y|8|X1@DI&q,rgwޙ1}oS6e70$Poȹ=!G+\ݩ6bA![o7T}1D-kaC )ZAF*: |H6MU)ޠ@I,"v ;օ[Q\Rro y0 ϻekEd_xQ+`t2\w[{[G Կο__zݢoF7X4wF蕵:iZ}  GjV?=]+.:G؏OTYvP(ˤVIXc;(AT(ekFvהlV2h *{uxʔ`cO<~%oXz}J;>J=,ТÄNFdnynqҁPZ=ijEr.6;9cs9^hWroi'yY׭?n9H7ZKܐ-0ӯ 6/},+UJx;ſ8%,30<"\ $_,Sڽl |q7Y.AgFLڣH[!?)[Ļh=T9ޘ%oOMfM {9Hkչ֥b?m_Edt JfhDgyuHc/j[DLtԉCLd+NEQ '7kի#EZ&wϾh[f50Fj,%=<;۫·0~'@Pf 9qlrGf[^ʖV[d!Xl-^{&ƆJhUG!1D ,*۽8$99Xnam&16bZ^㭏qw \1m.D^m9A=p"Ms8= Bb%jiws'Y cDҟYaTZ%m2VmOhF='bչ0Q>T닺bMԜvӕneKXGHtI)dc]@ :K-:]&$1iq[/iDkW92qQEZ2AsfL;d. ג7YgZKRWyx=nBAlȀV”Zykg`v;:az^On~:9( }Q;yB?X4FL}#MwKeddk $#WZOQ/4,Y}(t  y. vbʴhSeR|D2QU,/ Ɔ1PJmh\\.M2Ο:F;y+܏wk˰lدm~ͺ @4$k*7+'s zܰN|Ikc;TU,gYsv!yS!24w-k9!U*2V ;RxYRw՛<ؾ9ỹ'$peү;iguԮ8zjg]f{XiʃqN6 TF`y`0wD9X%7q+QE55Qb"AREav2^!@3C_LxۦX5ā }-a1F} ҟ=Am50;& +Vsz:p,An6r^g` {#bzyPs)e)I嫚ރIC^9&o.ȣPon}eb31T,T]IeAZZބ z9Y)} jpQ^kxbTS ՙǚ05@Ӌ9IE[r[4`6R_'` ㈯TU-P>xTM hoR2E]W ʴyilʘx\>{ȡ :R8p#%O-Bl dY_ukw,G_mx=+z@O¬-g0f+6/l|S Ff*ELvwA^u3|o!pzuOOX$m Ԑeksm?GpX7{Sy3?OwH)}{Zd|b26jɊd*'m.խm& #$pA̾ !y,S1ư$nĥoO$_ sČG8bKҸVd iFcKFus5t {>=J"m7j7aJi5%U6Q}nl͇c8)MWDn%i\Tbr.GJ7}n  >b0kp6cSl)m[qJV*6А.~oBhq/K;U˙ݽl cŸ>,֍!ZnҕZ+H^^nȌZ?6SL"I'YrYgn;`N'IT_(շb;`4M 64F ffH+yggs<ⱹb$6<+M4b 5Qfإkg*c +ySD\3 :xoa|*A }+gZb!dVPrbiG}FꙹDp4L]/r|VݭKlX_O֢Lcxsx#⁈{,7œtfy,:%#P8 IC)Muͮ2c}k 7"(Czo2{j9q"gX,!xp<8Bu/Lsr -7ϵ'qJXaJxx }5`v_:b .x?4βU΍FB~br' AF-o$=t%`6&Z)/Κ` .B\>%NDeLV^f <"o&2=vbg^DB^*fQ؛)*c8_f?798\\=3P{k_+c_4Y^Gݚc輇 r6&qvԫׇ:_ ФKL{<.Hb9(=#]e7Tη6oRJJ4TALe 9 1H/rnlusMnJ:ZS)7zO#9Ҩ]c¡{/\ c{+F,fc^M6\ol.)PX'SZ*?lLZn+,ORy[TeaY#mp_fLwsy7_1(|_,GCۧabJ3M(#-L%Ji:m%T0ݽD(2޺ъ}L^#‰%4⢕w0z"RdKb"I}ǏA|jW&LFB§ҫG `a+/ʰ[ 5L+s%ؾ:<;L`M{2Bjmw(8آxx5  yЗhi] hMtA9GO=[_&pf DW=|{V (OǹtS hxVA T/p5m }3GUn(^ga &2p̂qw| _[A-פxHF""@sѠh ѕya܆[cx-i=PB8Bz0ߌ3(p;:6,E^V(DRsu $d9@F4VYsǏOgLH~p@V?R^/ t0'6nSymlh&ԤI=ľ"?!luX(:tWTYi2bS\l ,—MVf)F X蘿*"!{-_[4x:W`EpْfvmQ=n?%d:;<[ }$wo5Bt)~C q5 T} A: *6'ͮ ! hQb`Ng: k"cbȠaןkq%,ytB6 %o( |i$\E.#C ;߅-Pg{ΐ}U)7w- `4ħjhN.U.f09o?Xl0enMZvW0MŊݤpArԠ ׸I|gW7tiS!l˖bX-xNl]l.`2,%}*<}d5NSŘFs\hzH}+c;`nu 9}M„YRe=\:~!`n7Biby\j&FWa2MP|p&_"0(,j՟NGy%%ydgi㑻Ŀ,#=h/k+ CsɱTD@XwwOYXMX,' jޘelóN; _)oTe.l|BbxowDS2JOpZpgFT ,=e:4d5L]fl?$VdT2p ;}4>l]\G{^3[KL(RKˑ+_ВZ5Y>>+̝ϛyPl A<q沗뫞$&\ fo򄝌0X7#O& :/0e[0HmԲX/u"iHr_y<#.Z6JiZ}ҭ! s;#%:Dy5ةu 6\ H6h=n^Buү\1?g:1eʙ97Mܼ.kߴb;zW3ւ6X/f^ppp=VQ"hT~#5JIa!wLY˸E3 eR+1S86CJr Z~O7oj##xǞE@-k$$(lB)(NnY*P'9lJ9Ul;{sYD#ŮVCߐ׉QX}±mX9@.9`}JehYzZ6:cXi$*z ]1ACu<ヨ*]R# VJ .ū+QMlޜ]/(S}8`d%hR Z f컳v]68;&..+ Lacmm8]*R-)fF>5|(YX:g:g*Î,"(T#Lh@K lAu- bx@|GGvg1\0](.RJ^ dA!nl֨tX_ QYdJ#-H}no+)wm*'cd/|eۦ:+{+wo|%~z_]bU9fϽ_5BK-w#e)]$p xLazmg;N.UlkЀ>h'mfR2?[i3W9Ws&Y,r'W3-)5Ci3?K6bzy ~I.ة,+6U{9 e]0,$ uRt)t`~&x*$;ڭ7(Q!t`]ܽ;IЃ&ddXW/7jۼaʙGF+{@½ 6=m˘ H'̜ȀaEL->A*&:xeVI~rpByG g([4 iAIX&vCMqLLLpfȹlߑۗFL݅ڀVMq1U5Q{~AZ`ި?>x޴N[LlA=Y8Kҩ7^Y0j+{LO*r;љX9cXgyBa[֥^^"q7ǢWy_~5ګcNC|_Yq㲱(br-[8K͞ue~&{rQqFn]O /&Rb`B0J±h }:66pHgU[=|I\n{;HS,0|W~Ǿ1[!XKPW3.<}U;~K|6'?~qHqO:#}(:Q֍pi=U2ݺpsfkcBF%‚^Lt,pf۲,IA oFޤ/Qqx؟YA9YxN1r+* ?*hp@JS͌8ijE˱ 4>el ,>8V<&UԌiZkE@r~1uAC&_{dV0׎0;KʿO_38x1QNR35f9?h[pO!إuliP"* 3z#47S()p6Ѷ(6{$2,Oq8n |u Ο}iFs~> -|WWΎh=*ZVY.;0jNښ%euQ$n#aA` lmU%J qZHscJIZ΃Eso.0-$~od&[5H ~k^ѰՉf4T-1XuQk!iK m7wVC<|Řf#!S-ο~Iy:B+/4*%ʍؕtT*:2ǧz7xR]Z 6y#,!3pCl9n蕦X89)oa)M6E/#'ylܪX(9j~~4/g nT'5N2ǍyB3a>ybeUO]W1f7rҴ2GtxY%uڌ1|(^7tPXs,`Ǔ3ŰQW$ܼGm;],T`/k;a{7LkC$=(g]ӧfnFSE%;Om8FQ%|o`Bkʠ Nw浯U_[.x?oQslp)Lv;[TI23>}FqC¿@N>{ $WE?pKl+"@x Q $rT4V%P1֫iM7[_룝3ި #W'(VFpBT=h}S~C0OZxa^Tn ÙYx:Te%G#01msg)0faw 8QVjfh-8=WZ2½TEhFg =<lb (Q4aŠL KUW½ҳA9aH6[UMu% "`e8V s?+RGՌ=@Y"~Dlcc&Xws=ɖWu jz ~wI;pⲏS: ԾU$h,]8tN$)Ua6=ƖZlӮXY-Z  Ze_ 3Z!ؒ *{%J0eD-DXlsx~* W_Hſ4*:42&&d\95EvgGh0Ð&P=F(sɂ`֪ɾYld^-n-^k AV68j)RM:#\E*&Տ*6'*ب+,| ?D'Yi_vFCwi|"5 ^:)鐼@]`۶Kcz3+dBq-:kt@/1q c,8'3N^A>tVrN&iV,T!\UꖐwAiwʵf4SS;5pC%f ԣ&!@&53A]@!<${2ҙxU?9זu"|Df+/7Ark%0_ ZԞpxeH#,{es)&4;,, Y;!D,Pѽ> dPnİuhԌ#gGhn;z>RĒy}O?ܼuBl6 XgMEUrLƎf`SⰓyBUdpHR)kƉ~HA+F e& XrJ#^Kǩmܽ Aguӆ q^I])&pskPfb jsm=4Gّ* W۝QȅUtVʤ|/s`~ŘJn79;uXsfTJ$N_4|ʶ) b闏~FcTmrKi2,4LE@yUC{P4 |/x~vqJ\5PW}U ?͝(nbK :3VJG91<3s/QNz$lN[B샋D?'&UΔz.dG5%¹x,g:wxDy.z鮒 'xYVYHf{̬gԎp9Jؕ26;_*K'Ձ\68z rmX8zbb5',QYtoq᳷HZ5Y 8"磜Ț&BOe$QmͳKf0ֳmQ'W7Lvb=%6*-QÁt1L;[fpuj5ûحbANMXƴ7wDEFoQ]q,:W ݗ(3ںʗ@74c pji(e*5`K烎M,o[!$ƞ) eH"s2i*j^RH"E4{ ǧzcM֋{u-.e=MQ[؃̱e۵}S %ja[M3^.2"gij V)p*s< YA ;ŋ<ˬtI*oT{0M}Dզ~~f]>{1fǮjKIG{X$[&"ZNΧ+2D8) L;VKZW_G\ëU8| Jʂr?{S3`|]c"}7m-1g`]6O */A=h$h8đ| !S8~I_5Z)w=%!jn>Nyq*P$}`2DBvOQ]JMSXZCb![Zc0ԓhKP-=;Y8kR],1mt$\i^36%;f/wo_>椷uAKUsFǘيfwwM aυRHH6ogUV^լ aoWJO]0p ;(bwb a$L4;2]ƫVd(3O5@#XSLHpD0U6VM0>G]H^U3$);搪dh4&jw\s3fR6lg9c-U:"1؜̚բVFISy!ّ G+1mlaM RidNs|tkRw/X%jUҙN=) |&\#<%%X4`i~Gi߇g٨qQ I+ϿOmQe]JL9->ok4[63ШЉ#Pރel{|5 .S]WJ!'8sU6@CumY/ķ‚=.vES<*R+ąvznKh9&'xV05J+)TϤpC-xхmp_4Xna O#ii:>;:h0S'pR]{ߢ [ sxBDN#!X{]~ܘUnbBؙIj2ٓGi8sA*tB{0B弬3,EFآ{g;(-%Fu/c%S*QsVoTqq}ZE6UJDM{{*O *דwd 'KhYVUAY(=KO*ÈgȯnXGlbU"97Gc &5 3|Z5Ҁ#H7-l]4B"dx/N3U L GftTz;]*ݨʠ{_(3E_XVj*"7KeۙNqߟBEiuLj^5ZSЎmԈ1q ۺwPue0.cĤnG@kZnNX5T\;m&-g [؝g*hf',Azv<:6.8LRMM v>YbN)t3v~W0`.TὺoGûV6ŵ>Ŧ^4b?l|ѧY'cFt5PrL\x=!JjmhjKU+~*pVUƨIR/ s$jE3Nv9ϭY+5qVRXsj1bq jU^y.A jq>Ւ-΢ذkg⑙04zЬ53ך{9Ŵ;} !Wcwt>&VenE:߼iD.1$Ki`2EU_(UM!kYl9_A7lju(I> IcE7qBa_8Ab0YP32,q!V0J*g=jwЈ H(H^,%IGN!%&܊ dX鷚{il;/Gp=#@0{m(_I'8#YVi*a>~ JN0<]^#V^y87~yECWY7^^:~(4 Y;n%po.,1SZNLm,kco[F 4hM'i}Il9øoZE H[GHhR:V׈TVZqڔ3fVR&Xf 3dI{WyK5VM28|4E;JT16Ø{JM@S,T' 5FjQ׌yBM&cUǬyC{,t/'n¬ƚ& Zlrsn&IS5ђ^̀Wxʳ9;|Pig؆pbC̳]ZAzrB٫]QG 3w}9ӫn ac8ScT5`$%6jR*y;i)MhxHY5A̷mif't0N:0g䋿BZ}8֐$]e4lPxݼF2yHk! F`;FQ~uL?㺶Aa!IXaLBfO`AQ-ekੵg}/CcQ~ eYӘȓ ~)529M^ĥًh}HGasjզJ:=-syup YS AP++/o"gW\4U;^puYLֆ,K;!o9m!d<*7{toylL{Nj[5 eIlZ])_rS;S{4iPHj0& ozq^ ӣi!V\.!puD;yKk 4xD,Q:+O٬@#;nY}QfyW|nPAwvh\ս^̑ .3pAn#5H'8G,dr >h) [(ݮU 'F&E(_И]~v)ikj-EҾakUG43Mu%[yٷ*K]dǠ`/J]\^S.䌡4=^I_JFc6ꨘ8VgVcQԯwEW' 6h6_mOMðs^D]v0ؕ/Gʽ;XnXhY&&3Li,?H}ʇRf+i qqꁱ=Rpa$f*]ʳO;t*A gCpe89?lx CwtLbԕFV10u"ʤqQ;Q~&`Ќ k9V&;F7H7xIKcC"ҋe l֖X&PVњѩ .`8Gڧ㥤Yu4!,#|y竫,DofoETWRh'$ghgR0; ܩ{*䅹S+J2il2mZ 6[{KIX1ha`gF\Rc4ey yD5MWMӄ^D[ yԄ܇Pht'W ;3q< tZ.W:噡hO;: v^9^OEOWޯ;RCdz~x>-Qs2j\ ^&m%KZ1 ke''nuwo 3ٔ7]G?hʨo4HIw59j*zc٧#(BIdׯ?}t9 2H={Vmz/ubIHWQd8FT<JMaɫj-ՄͳX9N ؽjR,X֑ioJ}VX焄0)9IIx:'Dܬsc3g v7pǣAR~hIx$8M…ރnއǾ7{ȥTA<}DW(<ыƺ#1i=!tI,Fd?HUKHmet r;x:zf4 [D5EA/%8z{fCƅ_6KqVޝzH.YK'Qä "%fSJ?"dYR/'"8o! Z/`[9-rcȃ:'l C-1Bs}yRF4Mʋ҇tآ%2IwySJ}MӦՂ>Rj'ςy$[QO=lNE3I՜:YCE^*J2gie yb -hUN6#?sv|=WC!dSn/c~?d^B[8EfPYWk>:8?{a1hdHdr@=IZv F7*AT[v/3y I1Nۣ ~CrƬ{˰?7ÞD>-H,b0CfWu"V-kRٱ+Wfb:uU1UEy⸽g(r#K&b~*=YzW>+=.?""cy XgTVsH ZNtH_fzx>lvE vkM]Y۰0@vRiV9%K13 w;=pvG G/WxG=Bn4*7}&yU/´/a㵘C֟_?F-{BsRF:5PNEodv^ Vl228-vi{B{Je^+%k*~^4=hOz.[KuQ8h5mYV#KkPƘPi.2L#r:+g@vKFgA'T׳09{&Ti' (_k=ϚJ-o xdB,|$jáXtm_3qi,>F;?-VN!FXK+3QBˊqtc]0! owףQEХ[_ԏP>~k|D8u]o;ƥJ#jB$&#ש(3]bv1 (lNQ6xQ^k G8xP=zLݭνcB:F~'%urs6F)mqLjIXxf57⿨@rWDBzn"ʒK$L>IJU*[ν@E#E;CSb ꔬz!M] EƩm.{\;;@n|!O!T{Vi?4kp. `Z ϰU^GsHWQGQp(wR"~DrU\Qe8L2*w,S߽}ӻ YK'~G0;0LM'5| (}ӄE%ŞA{2&c5zn)sLEՄ?-x|O__bfw_owz{elB|уgw/>$VsQFߞSȞv++޽?^Em# +.7K*t; }LTscq>?߶7ԆWyq4GP<,vRKA)^W5Ń BKDsvqibyBX3YpM!Fm*I5aYrx^YkFF*T|ʎzc@40M5pbW5E헿2KS̎Lt"i/n 4eN/#An`VJoU3'xdV )fˤC[^<_ԅL5e4|nV!/TEO4,$7=VK A2ĦuV~$`A\-`׺r3ˆL> ڽ/|iOuL9 `KoJqc׻;~Z?|n#{4r3XéS~F[IRQtG0w fXŷ/1LH׀^{.:g^ ϾHqA 'S"_=BDIxbvhD MfmP󺥈*n7a:2?n-#t9H1[o54U7&rbjK/r þ<۾`]ble!Ţe52D'ݖݶ'3IY#0LJ`҉o犱 QQшCoZS"g溢kd$+V\a jeH?g{uҬ^oUx O[co7M^85=|hPiQPy 0SލȣR6B5sVܠyXBxqhFٱLrk0o7r9Y0>c1k^|5XaZ+eCsTۜP^RI$dTcZIuL-FdpMe{L43$ZXzؘġ'6C&Q*jf兑Hx)1av?>)t;ޣU dƿ0ۊW"[MCN%UE=ĶQq07v_[`Qނ0}w;x-+­JlʍBaq#۲ HPGD֯a˺N/={82LwM]8+ sMmŚ8Rg)̊Wtn#R%O']-5&%|lE!(hl0Cy0.(Ϭxùp! i&XF?"\휉MhFYkF\vTIKfV~rSz;18f(ޫ LUI%i$ ʑ`Y[?I4EBYPlهXz`7GV9Z## EJd$zCZ[,|U $C>#Z`W#gT8WbM/ܵ!kv|׭a #f=sm$<]A&Gِ5٫ޣd|a62Ktj_]˔g}S V v=A=:¿x_xWݼMYRvk3?C7{A{d.VQ)H1Eq8,=6)H6@~5-$S1l,cKL!yM5q p#T\vjW8KnM/I+]X=ZrwoESF,a/ݥ_֙.N~d&3 Z>+gqDjYtИy}KD&ccLܧ@tVXˉx.7Xt\F/{,Y#bƘzyG?$A&Q/u0nxc&jL8[ vg}[Kd4kkӆZjVRX4f7E6/#u7;9TR:*!$3=k;A$F)ื%U+:iFKd5dJoZ 0@h|Ο+EayM*F5aۿrxtm!>]ŤPh&+^v25>W=Ey _yz`3.̔<ƅؐcj_Q(s5RfvV۬9`E/ݗ@!hOw.n$Wљ| FZ"9džqLA{zũHXC!X+unPq<ƤDV)Y)8&;VAXttr3C-beE*ׅn(r-g0@2?<]WȬ*Ѱ!bȴRb{ DjVM:Lt ǩc3#or1^wn\1&H@5#|>>|"oRMԺ'GM_W冟|C:h#+pyU\ \mR]QkX C(I Ycwk{Q6ļYfP<5 ,>7k,DbFWݒ!W*WBeU2 ebCϻAt)iJ|w+ݕkm0'n% qMI*I" "WT*mT?!y|"P}ގ $QYMYRhG5o)k~reB Eq$8 ^.7蚐LzgY5{=KSU@5Q|,;uDg 7Lof05,_Mj'ԱeX4T=b$5ɺԣ$b iI-ҳnRjYz5ewz;1ļya%,҆b6vr3W[AEdZݠ\ރ Zkg,u]٣UX W6:Ie SҘ}H DX =Œ!4Odl(j['vb(Qu:m)|G ٪<S+[<۳'i2}{9$cgdЬ(Pf{΀ERUfyR>"iQ .8W[|{V&/̿Kw}20BϘgDn.#x՜uv- w{S Ne? %>ي˿q/%Op,]4pÜ^<_^s (W|Q XFy*uۣYrc+ tsq.u4 bOϢ)k O(bkmɋm!P|(39ŢEt&R]_$?=|kyxkyL^4)_<^,]{HCXdZMxRDNq6U9SƂqphLƪ|r<_a/S;͕ /uG^:굍gm_3ɆRiFP %\XߥO'?L>`EMsI*$_BߔA}A\m,=ouYf0.b,*ljxt.ڭhP]T@ ' !\RG~TzrXnTvu9 Ү~I<œYau:3e%tVxᝉLݲhÍ (U1;a=- TzrLkLh.|Dqѻ])0Y+ Mp] m%YFU:Db4lt&j2YxZ=>2r_{s"&h\ +j ”?p=`ad%b'2Uc'U$qS>e1\,gD)K"o|=P,V+9HWCEFm܉la:JDQ\|Kq")z%Ba$ģt5 3>B6Ŵb#%Ȗ 򻙕My# OE2} :[KnWoT܁kekНΥ;r )[%S< X<Γ.bKeEm>O9{-2@ZX|W$lcH7"`Í !WAH:!U箌iMZZ*r_[<^m嵭 +Z) T< DC,Lx6`݉i Yf:;C.}ll;hhAdXЛy8ed eQ\y<01aZ@lvjh΍B2{]}YQXmW&~^Tte(ְx$ۖL"67[NF=;.J佚H9|H3}dvm٤I&,bET''k֤S2v ǩ/ [@xYT_&T X^D$LBrRB†\&--]tVeL4sKkUwDBFhDd510d́2`;!. `IC+MGGkeF_Z38^@ERb]~vR+Syq2AǚX ?30#\$]ٚ\ShV~.,x ͦpF8GN<7p䄅)J3*bG=E,~lLdhX9$[ k8 Rօ^[Re2b(ѐ&V0_(\ ZytX*w}i3Is>z9ŔguEͥ/ BdSb'{qR9Pk=rD> 1LixNћ: ǵQic$S;I!d_`U@Kw~}:KFш-[򯧆w ɭ(VF0R}G#f`s&0IDffAJ -5WQ{ ]4Xr0yN,vH{*_WK̥WC*ӄM_aֵG, -tgڏe oOmߖ=Se֖,>{ұ0QsjK-0;/i$=Baxl?b*i@@ix 4ޕ'vj%Ӄb c:"<6誻khb;,aN`&,iL)6$KP>: \*&8 y7Tm60QMBљպfUBTj>~T8sUH҈}9pbaԯ_n;X1j2[ηOjg +JKdz=Ve2:IA(PRӓ.|Af&KpqMdNs9m:3:Z1V7760Y+B$9S sn5Pu ,8y%,L2AOw,%mӗUs1 u+8;NQy"ÄxIӌZfS[ӦnW)Gr\ac_\S dT)Q=3|2Kr\/B\lB"4b]$Z+;*}! 7A&%cP:n>NG&Ey+gEg_dTHM,ש6ii "yZ@߿a57a͡ވU8f=.dw'?C P*m2' 1760`1$?oqdW` KdC-U$RkҩȌ s~u=2Aiz8WZdFxxc, 59su࢝?BK}h~bЎƳ+N,׷h */)?Â~A +>OZd^>ߥIޔ-o/]ɸgѶָ#]V|D=/Y_U%@51!=) oƮDc֣a\D P&r[<9P B5&zYcCXKg꣢7ٻXqB^ziް*08!V>qAIIeX 7 m7V,tг~so5-p8o ^"US?c%B"JW=AL}һ~E0pj[u‹--Cq-u}H\CaÂ)ל<(3 ,4͠'4T),1r KVM(!2ny-)]0»bjngz)VH,r +`W[vN;ߛx+lK@8 o`C}?Pn?!CX?랽ư;h}| "mXKNQE@6xnB쁶"ڗ7أvP혣5TŦ܎ aJWdCI&}LlS4qg'=k>bKb62{[1 I1RwMwM6;?h7iNV{oZTͣϬ!RɊ%wXu.l1*hXi~O:jxfU*Er,R=V3%RzUB+>K5i4r̬Id; ݐ=`wӉ{Qm AS=xPy tm)+ma@utr\)~%ÕEbunJZX`5 iecCqz ؀rGI72T` s_AA칽w9N&U1dXWORʕ:\" ( ٓSwX3ԱcJ>՘[*:S dk}Z[:Fޜ²ڴA?sV0v=8 u*-S<ÊBN^L݌j=s[Jh:ǎ !sZќ*ԁ2pjT#cʧvzQ7PCid@42㦯۔K*ڂ,Ѫ-z{@sBp)v}!e9~o7 }|t ;v_%o¦Os,?~ݼ_6Ou䴵? $iz.@dX; x҂.Th;q=+Y9+r'*1lHG8]ndV˅v}Ju8ޞ-Tyʐ b)zd ]h!H\mKtV# V'D40or/Q#85qe`邾DE>d=l4}001{Y|e x`lpKܹ({kꇑig2+X"(mr'&P, ;dŽᬺa^A)mR@=E7 1vx'1>I*g jW&9x5*:8;d^1|mu,ebl1JS+iw4|yV,̧0E/$+qgh~K+'k$)uUd V@\ SGT )~t`/&}rVcRjw7-XES/öqkA;խ R'e"4I6ʡ>A_+ Iֱ]#UiPF & Qt8ڄ Jƣ.ɴ .ooo_%>so:*VNt-k_D)s.)z1s4 "'cm a+ćY"# :[v)5es~ x{gk0UN &@CƼGyy#Eh @aD}*}Bվ%Z)AVP#kQkY#-wKmia[s" :&WN4)wFkջ5!D2kw_E\C2'(YwFv5"֐9BP |i'ݳy )}vKY&?t&ca֖.r:فWzЭ fF$pD쌥x*¯r6*d*mʇĺ_`KD v իe@ U[|!+,^YE龓i2xMp7UQ^!>^-/[; XGqC\|!:j`AkAC%fR#hYH A R=}vǰ'xWl6ck\z[uh]%F04*`^lt2HY  e!=qณ_<) O|`I{Qowڥbz;8IN)=-#s)9*Z57Nq W/>|p!m#Cg{BҖ>nѰbxML#R3duS赊(BYI,xd)75LEhpdw۽O$%w$NyW4}g_\J7/^/^,#(- ŋW\ayL*7Bhe,~T(|x} q.{5Y߲hEjvv:+PY]U_| 'i-zr}_:uoi?mn_#19nYo RbW,/16!L/~vEUOsater<=n–l> _EBWO8T_a }7v<o+3''2v2YDb(BWi1Fgq՞d:)w7Zmu.}>>l:Yq~>;.? Q5x!׋% 0e#qNBpOf"%Dl]^syF#/2?9k*uc+pK S8/WX03Rv*obk/ !DN~z~v?z?ݴ}GlfOwJdZQ [_iD/IZnQMR\l_cY.#pi#?@a֯韁Ґ(B1vMKH+^l0qG&ʞk$}I*ϢMY=11."{+CUV+#\@ Ȉb]E\>򺼊*0dǧ^=K#dwPW̍@ v۵+x9-Ī͑Pq f9m+\HLݞdwR:M~G.Jq[$3{+CGe%1AjK=8EASߨ6&DS'sSrFž}b~ܫ.+6Dp)ev"MsJ Ku+kN\-goޅj+!jKUCaRMZKZD"wk6q>n&]GR:%Ihձb*~<5YT5$1e_DJ7ERxO( $)JHf\Kf陆>w\g4hg{~@T.Iu'B.9EP8WrOHIUOB4>=ʕ!#aU_\qiPRn2Bo?̴X9(c')}qΒB TzjW>|(gWT/I6,h^LkLհwzNl'&YY&_ox!͂yc{Ɲ w!pr(6 pYQy?ct9qN'B2TRK}K nooŨ}Sx-܏H)jY괶a͊1k{g Y"Uy#c8IQR$mbp2iW .#eoM6yfmπo2g.Dⓗ  ګIb%F&7XTer&4+R' :Sp%Q,ЅjîW{~C¦yWQ3+k2 R6ĂiuXXڐU"%J.ԏC9"Jg?m6I*P 58WQ}@C-X!eMTr͚HвAVq2wVXZ¤ĈuS *Ku̫ISBmM *QI4=˙ݱZpzkYLyV#`-?5墴2biH0kX_L04Z2$n`'j11qD(Ml6VWݕH-> weGLF EzcJu8a4SCژܮ'z3My=4Yb)"ൿW_v{:GW`H+pY#~R=SG.ΑHAHta4(ڔ3 3ok R.px27T~[%!wf#^zr` ?P* S{qFg^<_O._|p}_;nPM&4eK dž"Yęl4H}5gAҘPgŒf÷2Z')&_TX[-NGHj #ޟ*g og,(7"MgRAH-w+"I%Z{S~*fc ,Ty~Kdx{sq;XVlG&M~2[: kN 7?|HX]AsIm(B3u iQ-{@Rau^1sAA} x'on۞Չ%h 7_u7"퉤gȬtSװвmU/[4d]KT4u8uR{ia3f?i#rQŠ׃ЬdҪ^~ڛͦ,Ⱦ_Ftj1+/QK |R$KokKatu2CTPR?WE@*sQ\6sqBR}>#%𫯿s<sw7/d(RUp5-,~:m]"}̎Y8UVk`ߐ!P $E~p54|GjkuFJX+8{$ۄTGVҾ~///ʍl߿=q~f`J F r}k1 ^T5ن@R" 1c)I>p_!RxL|MX7}B&ĴH+F %m/#舘*ځZIXdq1Czr-/;^<̟PqyON//IxO@-y\TٍB_.?Ze0 X1Iprvi(,j;{v SzM6$5kB5fve"\ܿLYuM؂/ۗ&5Kxe(E$(*llNQ vSP؛b1W"DNt 1r!P ;hrSHw#l;NӒ{f֤rBt:4@S<)쿯@=[E}i@vS*N"Jv]$jN%Ko_)yy+䰻wi_3S+^7@\76Ut=m'8V5qe9ڻgJ}S.(#MF{I~gCcO mImMwi{ʞegϔ0شws Oaw{4*90APGy Q p{s7;M9֛{Q&ijFmxqmE!42v4y4aEYkŽ~B W:-/;:v`㕦4QGU~NPms+367~r;sM)Q6?SnPERTi>Եm_[>[V%0e1@,dCޒq$#ꪤ-ڿ1 ,3@^ 2j4;MΦT sxՈ)?;ϢgGYsht $~3:,a ƐWF[Z:'ϊDjeٕv/Gd(.H _}aM'7~8d9IK*J:M-P$(D*XP$X]vmՆC-2Wy&lШ? mS򌐍D?m:&8x0%nl`Һ;ݍ)og/jZ2,1@Y iOf-7D=I|#e,ʝ@NVn*cG("f^:B#*Q3w8Y-VWYIDT6K)l\KN2G?g{&~gUM#kv#p⒐-@10Yqr-Gڣv덾QC>^*rqݖZRx-fPީr s_u%Uδfr9*-5bEuxuFjr|ciVYr]īI(~@xʻC>;Ъʨ**k\r\Dy~,8 \i0C&$jԒɨ]"Oe]p=Keҩ0inhQco%HbeIEG5b݋BZ7s^)P60ae+L3|&|{S/6|#G1ddE Qcީ:eJƃ$J(WF f0$$nIe?ƭaБdI9yoEUH`nM0L#8 YQ~Bd% um|V1vI/!zUՎ=уްO6=+-wU~ ^$H|S~@jn.F>,,_8(30cZw&۽h~"fT# 4z{'FI©޿e*x$,+ym1` 2+8u\ 6Iʀ!kyʫ5-:A $@yRo{K#rۑl؈Yz5?AeK߻;ע |*(NNzaL؏LP"o=$Xk(ZzTv"mze20:s':kTȟ_7)SL9P|ٖm8S3աyiC[a'ZzcMox5[R-qie=U~cRq#<$aXA*J⤂I\ }q}j,2u\s|# xθ}.t*=q& }5h ~|G*#S4쬮c\ee/Ծlv_fI_ )]VlɩxbWB(4rZLP OLCyK^i5=/ވqR(ө y}2'V&J3ffp԰6qt 2qwrvZ3f_=7n.N O΂!BS!&B=؛jQ~P#^)­{轭~>X$N±X iu1M bb/yMXD0c?;$ ~h)ww*NDX)IB# 0S/nAG? (#9 ;&az&S'`øq:P9F+i#Y8[_f&^&( f9hTJWZ*" KI}&eso߇Dz$E}H2P^LN$|qGh~Cr&k'%`Y{p<)֖Y*(W 5 G_]OUM/2@GBR~NXf+jk ' I$6thk2";(TONxWs4O5}KC ־s\zRvsQ޴8CETWdA\#GikOtW=8LUÈ ?p/ l r#i^y녱#)5Z'D j8 5Q ᯍW)a=i=*׌BIjP$*?MMZXRSUE:XygETE4f &iV9>Bĥ%K$}l Stkz]յ,}$ukDhpW)uK`sV=v[a O+vndJGY7flnnL=x쀈sp݄P3=x=1ӚzG$JCF4)2u%q2V} t`9 ODXY<;:i3ĞyI ɲ%^r3$SwOOY#~nc^V=/>5'v&#rc؛Kח`AW] UW8XB]xO?ab}"_ ^>;KbMdˮgd~!HhoV`<[E6-%~lʂ_[::<7h[ Dos֯Qw[n-iդ<+ ۚ4'M̍H`U"ځ`yO1Ẳ5Po{֌$>IA (c5!b8!'ZZiȫ%8$iyԫ+H(Wފ1 ~zwduʼɸd6=6dBjPxᰐ?Px_׺ ,BݤUOVth74eȯ?Jϯ."*x5vB4I>T[-y/gI;ĻHOHevǶNˁ++yO|"~9]`-8㆝lAnK.51%cق Q-,~E%|I#@WEx41.)ŻZj!NQ] ZX*8"a/ ,"iN诛ru[^tݺ$>Lp*,W'`x*`@h]]Q`"\n EaSkYʬN*ONA{CȪ-K|?&s㝈 BxGY7mr,ѥC(:PuGYIe-+ I|3t Nc 'je`&|$n2-Hk>Ǒ7P\+4n)\Jg F&+. U^ gB%(MtI=4(ylw*F֜/i,EۚznuA66wY`9߄C{Evp܉|jo"ʗ^W_ >uo=R Uv{RifVba!" =ͭ~䇕j2^FOCp2zWF>P[?Il'󈿂,Al^ ݺͽS=/0$î8삽]됑K|,Z|}PqMz)z0Ik5{?H|'1okW׫Ȫ3>21qvRjF|ϫ0WPwYЉse{Ѽ8in]ޛuɴ޿3 ."/:/ahIɛEl1**e!k  (>3{Oʡ'U_J-qO\Vy8n(eBW9fqx@5] e)㬁ŨĵHߴaDe1C)S#Ǽ<=i Yz=ޚpir ҼkJqM"mTDnXdC.,JYc%u6TąGܒ $Ԑdn2ѫ\I/Q fm4u(`u ޙB_z|m{'iVʚ2GQqU+(A.OD+-٘ELNS[y,y K&3(Rw y=I$eBhLmK}֝fӓ[ n<*t!V$B~5fmUSsὍcPy&v;iԿ&.mw Nd96ԒɧJ;ڌv&2ů|\~ӳKa"8>F4a r)]zB]V3a-Y63Y،sGLznyZ6&Z{!L)(7΂Xup K\$&p"22v"eV`G{U*1kעb#0zsp!-~M1cQDj>ͦcᘙƂa\9}&"KT`Ke{ѡ6)=MMO*au%Ygq͵ x69,%J;zakUWr|A:؈%k\  ®^XƲ˵:p #]}.2FB68p=]H!xAt?g8}е(ZR5,{jloT"V\IȺ<3kL/(Ҵ5vkRt/YARjZ7?k:1PzjB?/`[u 1 SXcvH7Wh~ekGD g]EX:X W)fטځ ^eNKGmRVh$#t؝GSZ*24Hy")uX (b {+Y٬kMO-=k#n.c,۴fǍ̓L~W#y }+Dvzs,FaN:9H-Đ'pԵ֘bDۻ #l ÓU0_i~RzɷsJD?y'-JK2jTYU^Hez1<'t>UsB$pwMr\ⱃ1`Xka+t>UWE؈4+2VHz9/ LjWH9)W[Y9qow 4/ !Z4Æ}BR!51虡]8-R>* v3sTLM-?9j.0#dKf܂ dK>eYBGtvF*J#me`&fB, z;kOV:ô_4?ȚD0œmðv!Jǃu?E)ՊmIebJ=嶗};nC ѷ^Lз%\֏zםS8>J0'g~~UI{Bh7lvV\OJD=,.),3WzY*ʟNr͡p\C:Z'aO+Ά,3hTiL>9>onmII^}x@% jN\p8˶b7RU\wԜF7!gOVh(w;7P:eZgex 5B)S_$+Fmw8?6#q8*q_ ]/,n[=/>4a#f<0 5^V](&Bk‡0yi ~b/D>R\ w(##4j;+ХOxBG s#>(R<;FI>lk𲖎u+Cqa#z\{`5&='d|xW)P hg^ l3Y9kcC`d5#2*-FCj/r=$uT=v.4ޥm dWfmOoYReN_.5҅ʕƺ9(z{Yw1E5&Pιe1x>:K!5[$v%c¼Ǭ?j{Lݖ,Adw7YisFؖYgҕ޺| `L$ 2*a kF(+[oz!Fyzly͘6#h%l{buRbހyk-=/kI.˜ѬW#{5|p0s|zs*Sm|lZڲHTHX>nIZeMy{bXU 2A'xtEc KUMԙZ5m! #M_0DLHMaU m=|%PsD6 OS%@(Ȥ:p1*Auo-ܾǯ(׻')r{$~I\! rӾA`RєxHR˒Hr}rnENtdhf@@3kݱ2 GܙzqaɢqcvQQpW'՛uR5[Z$3XUYËw;*O;lNSw5=˦J5_m;澑|B&;Vفhhԩ5PMq'\H+!95UUwɂ&b%1\+ ąkuE$h^(.JH8pEDa*RGYgEat@? :p*FSFt_UrdhaK4*38=nB<KVJLn Rb ,Pƨh`,˕ìٛJWN6Mι uxiC.'k9)Mc 8.?ݲ OFi'F]w"Bh -Jah[e6OZRp =M+ A}T SRy:U<yzE^<%w籫5T#} gVB9nö"9UYP{ [`NThю1e2#IV6a_h&˞X.f yjԻ$oHF#5n /,qL7d$gTuk仕 B5i[&,rjwxGPׄ[te4aNq$sDE,tZD޵Rɥ(@?M. &%b@@6M:CWnJPqZHgh殉:RKr'3Dv]4Q\N+48xQ4̢zLqjJHrz2= )$x6]ii]~ E[%rFγ3a(V䍠wS>걑Ћ:泒I=<ޭ$nytIzɮ:4^Q.Y8/)ٴfi9MVihn|fXYN[)j#vJbe8FL#1x8m]䱴vmA5H i vhli3杨 |)g^}>\&yTV} O~<6WdBܷĶ̃ܚO_{%Pysqm4fCGtvezCiOw"rn4UDj\S${Q|R}^K]G[ s!~>/y0ߙ"X< OOLUa]`Q4@.4~ qG+)>>y7i\_}qW D@KwJ LdϘy㜯AF/\?.2龐,jF?u/Z7n~7LI.xGwd#"`ݓߑdF#؛ݲFVx{jHbS똲Lj}5$<0J1ҀcL;ԉ쪽uc^!;QUS DIDGTE[行b㤚%ik0(K,+ 0PT_ [6=jhmێߑ7{;Y] Μ71 %npsR%xy0Ɉhz@+q:qDDH&-26 +k;~L! ̙d:jHI $eSDUET`e}s0(~JY#yMҌw)SJ")YB N< ͽ0oaDvh %(H kz>ZDi'>DZf/luu9i|I s gP@`=A@[ObF/DRbwawvFbb1-BpyO@y֢KBjBܸ;'3D,R4}/;uF#Bp˱2<țC0rҟboݹ;ћΘHJIy/#4Ӊ'&)0{RkZt++~끛ԯ'A5e(@s:3Ǟ[rUahXYVM\O1M '$~p`u毠3Y(aYcTeߝiZ Vf,M^^v_@N_r؃& ٭ 5>9W]Z)r^yԪOUNyfi]~W^j8 T62{Fw:mKZdwJ:m=P`IJS<vtچm_uLj^" /#dx'T:"JB m3 Nb{848f-dt%@I@*{=ulʈ,d)!\ O!fb*Rx5?ݍ b'GӶ|̛p%yZI{ڣY#bXp1kھ8YiTY3/.,/iF\-sm-gB{_dȆh;:eSe˖a8  0ڽdp HS`+](ib80t(}KӘWR?1kH3uP\#0>]Z|$C̈o9h Qk?>ZgY݈W=/f~YȝD}]\FZ=z++%Kg\ xl. Tج go|bFD$ljyjW1s^$+γ*" ĒE< λ9]UuWf3Lf3@f̋0єmZ6LDϘqيD!|RZ&TqgI6Aa%]m|mlxRe7LEaYr~3b _(U-lj{hJQӇh0izϿ{a~k\s?)_Wtbr#u:(䩷f%V&NQs-,IGT.-m8<}v: # YagP*G`Gyĉwͯf>NԢ?e(]ez5\ohR8PjuMLlbܬ^i %Elq,J\TګHF Tbhxp,4ZZk7E\V?ȶ1 Vow! c} +!,ӆZ3G<`߸Aa Ϛ("3kUM2w\ ItXEΒ3?1!s-M!h%mA oj/"]-G3'9l8T. G mKKYd`#t%Z3<96\^^zN2PG |yaTͩbQ &wƨT;8f7:6MT_;.*>#sĆw/,opja=BՖ>2ص&T%Vӯ2  4i8E{> QV${bT7d/؉NuwdȆ ӌѻ>j Vхza9jt~ h,V*x}0f+f" V CxFmK<-d1F1PuA>]= MXqoecH+g 6AZX)A6*C6 .PܧfKzB84O*?>ʻƍ4 ܢG =Z' )$˂ZS0FsA ;_5;T\( i:S4?[mm_$:PHdp i!R$Hs]Kj6Wo^WoD%`/,Ml-?K4*F`G""J%er4P`4c<:!=ݛX" .FyUv%B HUalf&.~z°W &nh|&3G7Pm|[mrOO|[ز G0^YGOUƙӻΤkS[J}V'&gl/+' G3V3Fr= ,өf\=i1KЪȾec;Lֺ\G.3lwMma}$J{rfW2V.a,a,-[^5?ˊSY.S/SGȘi>(<F<1ї;FF~D%L GJǀ@C|_B&Q"dgs#j`2wbԦ15z{,玃 lWfYe u+EׅuZK$eDJ|(Ȭr|>d chaqw 3+h駁\;EL~biQ} m6(] %FZ 2:dy߲`ĉU8*B x<0a$wAј ?!BsK"Ϛ3UYkt=ޝAA <&~P }_41XY:.F^DD锱4kk5b”]I7= `*մXiBA NR*)nKEe3z+imsE +?`6dOR\96.6+PR';7Ӌnkey.~}6Z{]._wÈY'}R ,Y/،xTRJ?(bPD Aϔɞӭs*K\l+H;dqI:DGmä܀x" b ]Πo#G{9HK.UU~-ޅ[+gFܪ <2ͥN 7mH-7+KbNC r䴹;4sшPϤX(pĂ\"/wY $U_?OZ¢^6Z]V93lOww^ \DA;{VNqsPWQ\Ƴ!%!)}ۤl6D|08fv=&i'Kf&^75.~8}&a_Q{3IbقB|JL/,r8G`8qd.vc#Uٓli7ԳUqf0)xAW'ci>kQOvSy*,R\_y9_-0$E\I 0.]*e(e]dhkuvƖvo}ғ%G;zpa 9f5)e]\}Y5 TL>vDF3cc hh+*,mhKbl@?7 y-L`(́<3aoFB([rǵ MDĴU3Ի~;Ck*-t+/+Awz{[xۧL` F6ߕG&Yj]%:58*g@n6RFgxPj8ˣpAݮF8%N|} &!5Loj B34)45^DSRє<(Ae%-EZY$?]C/5u߻pY})Xxb8J!?w@!)D,.b> qxpbԝLZxEӋ3Ewǎ{1w=^:|xc8/>: -)RSL鴞OI*{ƱcƼx!m##Evrw@G{-PEMxƏ츔ޙ 'FxËѸ?Gx_?L[]'~5vD**B9|(*9WQE/#}4^)fn'/8&Vmb %R,I"ͷ<K~LCO".VMJ VXno1W%%&VDt0JO(P%6<"G@H A݉fN!q'"(Bd=󊊶ːs%9(,Uj`ݷ3pHK`&ō [m^^)QѯIsƙp) H7 [ʦ7HT$X`~-7BM(냓eU6ɤkHEgz#mwzI-ns9~v&RR4\sw-%Ԝ Z4MvqoIܗrŸ(<ٌ J]ب2OJ4}ݩeNl'竦qCnaN̼z~Hu=,e6sBL5L^t+u=LOޡÛ v%r+XݖY’f#79]Ɗ"#=|aVvm6W(#IxW͏Q%y%.*¤5@_ @;Od<9;R0Ha[A")I1N#Me3N#-ո!Ls X 6-6/IArbH"i(;Q.ӬY{1A=OPGE㞦z^($g`6,j<Eԑ R:۳pbsTOTgjtLB(Ke[1]F~Q<:RE{j\h%˯?EGkFu5fVXv(4àOk=:ʹӆcڍZV[fhcJ)^?, .ijb3o<}~oP CN?1㎙޽JE >K3h=f<1a*hhmw o < aA`ϩ<ǰ!v|^l֪\Fvf4/0!vD  DuB8̔FTӚ$ UCVLq\'K4E D4\'=Dрwү`1oyӕ.NVˣ]1!ꧣ׎Eҧ'KOdRW19$ vnJW8D1dzΗ;J1Gnr# Y/`ҰdX sV;Ym V oTIN(9@I~2Xy V'IH6dɼxx"rN&PXNdˏg[!QZ:scϸ іrHDPg*L4ci_U,,f:߇ na8S~._n6fqˋQ[Sc~;P[meGI!нƓ@~N)U`hkʱZ~plK[x i0+B~d\&U/#H:ixDb3-{|ke%^mSGe68кMs*>M@u~Sa^KcJ*]:u ذҼi^1#PiDrVluLGQl 6?]T,R JόǷfE|; =VmaN _qI)K4sﵥۇ&Õt'vxTıPxIhӱ\ nП|JLqG0H)Fv^\Zw$Q m>ک\US>/dI҂m̊#p.5!K i5@z7$If%>3\&9AOk`%{? lqLƴjB5R[9Ga':YĎ1b4tN(œjެue.,:5…"VA"Xm\!rsKW4s3PS-yLhÕoA˕!~@e˕=TVVƤWòPPmoޅu/yAhk- ,WmCՁ 1.;'>e9jn ,5 1+;x )=9Hk }ҮU $B`" as湵nA*LwYQ(fX,OZX&;IhP]E[IӇ}թӤĻC>|n=+sNYZOHt@;M6Cymlf+C[- ѵ"hh޵dJq#!ck"(B(ҳD9 %~-#jk* ''IϩŞ plfk1,7L!~@Po6j%rbTf9Gk{X+3Q8GND?jF^6|3ep3wOvMe]=К'T5TZ-`>W<&$"ڕr C} P.p֘$棩CP}%xeuvR[clI7uéUN90 `4t}Id;7ߊaUAͼ4ge<5?~$Ǐ73W_p<3U1aA HyXxxg"|Le(?yT7#ֱNEdT;V6j~*Q_5͛`6IBdU!' ;#<)sZ8?|Ad"B¥1]U4GqKMP`)7 >&9Ob+y}+WyQv"&N~|ܤ?,CP5H[9q1)`JIQN ۏL5\ΙAl'0)^$42?dS#;_q'" tn\fV8|McZQa?"SB12?%>u7)Цu#yĂOyXGɡ'Li!N!4ǿBSƟ$T)@~XLLV${Jap &u97Zh[}goZD?co[#UGEemt営#uExG}#6:D%%ocU9tZC > ko}g{}{!FqESί)ld&2OU|%Wq{//?Tsc="(+*%2JU~^Sn1ѻl_D>a nJ$uڤ|zkV7b_5D]@~cy΋+eKXK#ֽ'-:"Jm4neQsDjI.kL.mky7i;_ D3Cд”=9V| ZBt%ߣUR1͢ggf]nCMt)I46Yv06W_۵.A`UVdl {V9bKNт["E>[ZT" 7*0L1.M"adVW05,.2.LkKʲ1V( $Ơu\ зJ @7u1Y*R΋|4aCUx6^n̉;mIbBxQH\FtjxnH(bug/AǰbjEZ*Iw2.:6NˮAU )J a RP{˻#'נ( 3BU Y#Mg-Ql!1l z^k&e-hT(HSc#i mG*H!x%ONyw8*uR,Y]VF* ?--z]t 9 syY:"}0?IVCX O@"]v?Ȕ^~1K$B#a/o/_sF{ v6QkKY\/!J4zJL_OHqOIM/ e4{Y9*|a -Ҧ2}{mk3s2{R~Y[-Ȍa:?+atWbaZn0Ȣ/ۗ_}qWW7\+\@>IK˃=[6o(.>!<xS03?ǿguwx$%CS_r+XUTJn#hQ/;u;, M,bLFԿ!+aY=#BzyG 2bpc]sC+ 25E+9%?5doĊ\9jYιvO+dS㎢@(/? v04%v]#  ֶ0Vl,5  _{w%[2]1)mQN[pczŢ<<}.jo_G[<eDi=_cᏗ0L31QeXuQPذ :b"Osa%'y(W$p44|XIvǂ6ډsY040~=zㄷ蔄 7_=i;N 1˥w 4󠨯tKp ɻ99H!ȺF᣹Zwk?-J%@c\ PNɝ.NE1|QGt|)[9zi6GA/g!uTuX!ј#ѤC@<54NX{c"NgylYL1}[$rfg@,C2zQ/\". mp+h xR%m{osVuRhh.>X5|r ۆ1D4'hOg]EZHVs0u@i:7/4i8DMmFshSaMeʦ 64OV0փQQwk0]mrF+8巺&*m F6 W͑ mЮv%I-oʹL/aӋIT*l$nU!&^d:CmHfB % Sx~ڽK9^ɽ uU+0Et#~U4- Q\:[r/LK)?|BMܦô10pL؎N dH$W]ȔHhBgew6YӚF e,a/, vߘr1ND!X~6Htz<\̻J8 T2WU67yЛ!#[#\͆wᨳ2Z@/!+OJN{4aŦ9UYf  =k&LdR҄7#h|$ꅅ()"0[s%f FB nSs ;vqO%:Ñ[kծV5 CW dV ¥5Çٔi6Kze |,S%Sdme1(cnWƩ!t#3*?cӲwd*cCQ|r#VC&%'r`FiWzЈiU}s|6oyz^I4S*iށX( ɯY8mNiV1-r7҅na[;e^QcDhyOO Z!]&~>O*Xh D6#2F+E*\kn9X?;9U 80hLIȹ.Qޕ YNꑶ%3aJ"TJlf5KbܽS[s {1MqȽ4vBoE:DL+&%5/ˀg axUZ6{4b_R|f宫.뤖!goP!ul% {]tjO&c"X˃K0 P3;bkz-\+k[kRV{ސ1qxII cv}h[[b\3<zEb^J d9KZBtzSuj 24 {tT;;-%Xp"юMoܻ?h~Ѓ+yP8m6ڟfZJn8%QDOslP'{o0`ߢN}GĆ$+^)3uU =v 6G)_l +^_ (ei~ ]Cͤ4y&SYqE!̏-L>'[NEA_$ֽPt O.l,hls)&F+ɳ l;%y"^3I"&͸"xb3sdҲ%;2{[!.6moRdiu6"TSIfg%ctŐD\ǁ47 V )h k  L;Q"†Qxb :76 *_/isLs^ KuϐqGUo! m! A/B7EYzÔG߿[% ԑ(\0lFTWˇ=۲ed{Ks"mC֑ȡ 1i׊)CivW L7Z[w[NP{Wb#?R5tNީض 5ѥ%O }M@0<`O24K8Te~$u?lދ4{`>]`[Q!HFg\m#Uġ;W3d=QT, ۶ܞX3]2)@Z.*1K~"_e߈ڷjDe⾷DΪfȐ/Q5:%R9xsYwW;SV`~*ѵ}E~S"Q$@ Л02K한HQa"v0NܹФpnGvoq/ ȠybVcD}c70>爯JhW0>s%IW0`W4l&H)ǛƗMd\9! pMh)1背]G*pVlh->ڑ{&gU_(>~ӊMT/# VWB^>Ӿŧ 7wqiu/VvAr/UXI'px݋v|q{|xtP'D'/Ÿ_WxG3!Jx1酿tv>qB{aq5^ >-D-_NIMW#} u.vpqcX=ST "Jq{pq:qȏg&ʾQQN{p!:5˗0+FݠGHaeNeA|D^9JoEn]#򰦜h ^<40Vt, V PC e0gŔy<Ǎ*nRcN~uIEcuZGS|űFi)3%;mJIZZgp{=1VN!+}'{0SJ70cbȴ[kzd/nC✎)&HitBbbSb+ E֒?(b 䝌\C,#0zC!?V5sFQDTJ;)W;nqÌHb쏼-e+d!JH1 ӠS=hv`wB3׋Íp:" vϣnW (̺$&NxކIXL(5®f&EkXU= Jhά&͏ uZT^<.O i(Q1#y7B;jʀ1|sJrw-tZ=n+RO@,c"I= l4sJz;b\_?N_ۤ%yaGK#^9T.(4h =zO gP4J%/p=n]Rx )D6Zl]ctUeԪk2]b3cҭr9ҿ3c+YV@ۻ}Z|gx,!Y*j~)Uڔea묵1m[Vpe  Z~fѻKbHE5r@1x +e+g ;iFbM#H:!bޫP>Ǿ.w" 4ȾE4n$y,quw W$dFe|PiWPB>A`44G-Wvj>2& TRQ%`~侈 ,ЪHFTZuc+I+vR)Ҷ?"vu{'Yrޕ ]Fml-Vм14J@fߤqDE xfh8ABɌ*@[3Sڌ:,urg3W1'6AlcEܓ2d&$,-=NיVt<)QTܢyqFKu*ӎJ"S9!ƛ1ųv#~'W!i86M.7\l׌dlc?;ЊrH!f݄#a*c]8 R ٤Kw#_^Kgmw'l4dhxCjm)\T=d>bBcW8a 5Yr**Jە@kku45+O'!""Դa(P%+beVbysu7):Vd|L8\ɒt!҈&.җGZVUiF`MUtD<7Rĵ`Ӕh⻵6وfC|/aEONH`Oh-aTUjybQM@:azcix6|F窕,6ɷ8U+QNQ0svl +O3taV^9*)تёDKr6+~BtlVyIEFçhЖW=kJ}0m/q9J;u \r/~ `C%ghH%n_&:>}2-/ YX5Kc%45O`ٽJiq߃UizU1 Ddj-gϖƭ }Ws={Ẅڒ4&Ls.{Z:Q}B_ Y~I" 䥊gh0a**먘EF`#&s cE4\p/? am>b*3zjFE uqm9Nҵm R]úuh酵!LM$%GnJI2UU^ sc!cév~G޾U/Jd m%_ >wb],TB11qrÜv8/I 6ӣ$:,Zd&I~lA\}c8ndlV顳\{3r[?Ο2jn9tt^ x̫7d 7d) l&! P^߽~IO9> 뙬`oCz,/;[NO ce^]]۷.<\KVz^AEX{%]fq}t8||ڕ~oD "Ɲ@dRIp]=B}TxUD Db|Y2 [ U]J-I[Ǐaܻ$3^o  I+-.o.v⴬2>!$m_]/mu̔&K}N[f` Ska!LFδu8(9gŅ iA]v'A$p ļưhi%6u){]$G{ҟ x:G\L"47q|ven'p#xV2醷=&}NSSpu g2ƨH}/i-vߪ4F<ֆӭ E- ]I) ?c>PzJRV!}L -GMa-Řl-}db0C^e>F`C4[O)X,K2FHnwJg?|? _.5jc,8H-Ӿh+{D!6皗i'ʪ sЖY-fjce4MOvEdV.kF[0LqK;삺c@17|#z̏$ƅ7R(lmBUڴt7iL7eNq,]1"\3S| x#Ey޶FW[IL7K⤳+iwGl 3d\k>aͅi%ek~en%8jŨ QƉDh]c[jlvmck|hb^S N s!I6ci@۫SXӠfвj} %u1{F"Q0;T͂8`o2>3}E|I;`gJ=ԈrImʵLV4(b{\B6/=|RWA1?3u2.F0x܈ĉl@:aoy"徔A*OĠ Bo8z(^,ru=g9zXg:'_gH2:[$Spi$wK̋ eI ͊֜Ǥ̋oek.5JYd>%XõE MDX Qm $Qbwcp} ,z%" 8H'^z/Ƕǽ{'u\ߑה SbS_zq_ObZ+]m':7G4Iq; K39tV|#S.:%qyG2 Y8Ar՗ 1=8So_}^Œ86XDX3`Q!TTQ3\KĽ6@dٸq-p ͩ }dDhܔ,%?2/Q{៤cS*9@|J}p@+2?GbF vU㯂vXKA ND}#Cפë_u +z / `Ie<}[~"^q ~ %ͅ|evޝ"ҔJw>m"Qd˱:? $WՔŠU~p*0P2_&P:^ٲ X)l9,wOs$ї͜%tȰQ6s9UzWzO`VRiԭvsk%3Jfl<(AE&/)l|DP HV\#Y~ob#m|( IQǎ6ոD1T&Il#YchJKi .5cx-'FP}]S$_?j=1rO+M,"4\ n;8 Y aBV1s<3dVkWPīb|G̡F",9o$8\Cܦu 1i\ma( 1#jfe4Â/qfX)Lw9Z5+EV1du\ҧԌ+l7v!Wi/"IPe|U̚TKo5`ъ(fM6~ݣ_UdPWQb{Nh'ĬdxV}Ъ]`KDG<f D٥5d{bNG P9vXT['([H+2 Qˁ2 HG`e "[HUe]@&|P׹oe҆לοك $&s3k핰DQ&N*oqQay;)```p&U;9%`áЋ鹋ۗWBBss2ʚ:jK*&]7aS>]۸rkO NP_c6 ErZxCv9s Yh0e+c 3a2>OQ{1t:*$;`ѫM}X>8/e8jMzI[nDe>} D - ,2xC<,ҹO?s~u$ tdlDuEMl:RRsP8@Ĩ'yxRȟ(E0E$~ y/ƃ=HQ<!-eSdb[HmRgB+ڸdj԰= p|05my?օ!4 t_6|句ld[mXLfuZ`8<.\jеܔ?>vCŽҤj 94K$5!X JC.@)%8ޛ4V*:@k{*H̽Ԁ0Y&Shg֧+™:kA1Jռp0ޅ(5vx:XЦ^_@'#N&c4Mv= J7W76<ۏOlU1f'NTZ͢SB#9o\鍸J!V5[C+=ʥ xN'ȧS gG]$xS<7PemMݺصJr#~+MUd,4e| \ݵMIoLWzRkR$'Y۬;L x8汆d󘕈%d۹pG`ղ8e͠9ѫ+}wT<ֹ]+O$aB`M߿B(У.kglel/4㩡N^PכFw)dDTs 'ı'c`nSKrF3lx|k@YEWkFl^F7TnZ$!_w1e*}x"ޟ'M;oK]z:>e_Oػݷo_ }h #hUwuѬ[pk~<#THrf<Ƴn:2iNtygF2*qxStQ%4 %kq kE^KdD./&!Ȧs6((/ OLCo]C"5lmk`p6l;Ud}c!f)M ,~2oXS닉v*W{~gM<jB|w).j xx/Vj~I!9D|~`m]c4yHw8+1{-nz зfxzVzzօBp(餕"ZQ4 S'IUmI 䂻 ڱ EU18ˍEq,)IGrk$PvAS/Wpa Mcuܱpr')o < ]/J/ǻպ[[JE8ea2Iqf2/| ,К :C\)?໫þ4 DsADbb|gѴvnt+u eZB4<V՟"fmNj,3u-8&>sC9o\p4 -ӒQ֪cXddR}*!oMDYR* _lrml ڋT>/ @qO!U U<}T{Vf4DwSwP_}FLxr1;"A ^ý?arf ׻W_gy=MOsZv}}HO 8q ^LM]2;.fpolum]u"xSƩ@WN xV)~'kjm"э_Il=+/>wW^e{ʳy'rAË3cBfB^?<ò8Q~6udRLHo4`^]h-c`cE  Lno7GC =]|T/32Fߝ!C`G߽.2geVszd'#3])v)}s9ͷo.^^s.JruΒKa'vͳK>x=7FgV&LZ3YClvԏQZ`9wc0AfUXI^*f[iC{>}9\{3K(h_fJ*.gIVt` mEډ;sd!PI;Z!ئ/:v! ͨ% ;tr^}Kr$dH@`ngkQhW8mü +kjh4R>3 D頝|F=B|Et4)p(/*=mq h$%>󕤯dkFLtK]:2j%|6tS+~ ͮ E\AKsͫn!X.ްIEb'Xs oZ~⤹ߠv>P<.OdTxp8ry\Kl uVR$u>j<*{Ԫ*`SbG?##sp~{%!4D)BN#R}l6,ǯу@A3ŹaӔ 1߭M89|m[>[n?U'K؂H(bY'Sw"2l4{R$&c;_~֯p>žI’\ غªxmMIiRN[!Usͦ-wHɈ)՟&oi ;.+UeCGVr04i9&Co ZF<$ty`eMxR0r0Ga5$t~Vfek~m8S wO\8Q%i I2d'*)LgEY>Ņ(so6 ,nck~q:3Rt/mhI$g3B2aԤbC 0QHXVeﵪ oNOf֋hi.X>W'E94IQU$WbR:<$5Z=psfsܡiYB::ǘv930;ݱ܊*ۯ6ymV:yz @|t_3睖"NƷߪۮqM5*y9VEG~NClM218i!΄=y|r˄mg2P`0s6XK} =}O9GZ#/tq:mcVA Kh9Bs3nLmTp" ('iG!4Vy!#moQlUl v'aauS:QׄHdT1KWLa# j:7yOr2B+!=*|`ˤVT)Ԑ|v4WՖ/JX(c-JٔOT^?9A'cŧݖZ%{\=`i?7e_I휋ո' ϢrЀOU"{}bTп$R<^?ֈ#!\ڦذ-9( :VV@NE%KbzeAn+MVmzgN^?(&C)b#D1NUz蒯2 5fHIuTVkfQ w5 c{㹱vWiLc5`Xݎ!,ԩ.2t]@G;9Y{I2S۬DCWII"NTeGSwj]Ȑœ6 3_upyXHhdȼ"PXXvѦ$ӄI0Bk'CIC㥴>o$ps|/h'Y;O7U$&0WI =7Qz`r+r{[{*#z#8b eI%e yMh ڧe<hSY 5H+޼}AYkQ7UZ?1[.]͕4։ƕXZe쨋_gW=Mf Q'N3aL >F.hdSkES>Xg肳X[A![b+Jceot-?ɉR/r #m uMզ]43flL>ag?Ya.@891:6Fv(L@um$Frt0a<[Z57})}ՊVń 0ozT#qc˃iQiO?>%#@ DQkvdF7)I\q˖sp6zp[4Mm~`$8Iϛbmny]Mە ?^wG±$_NB^rcg{Uf7$'ohkZ[k߽KGE4`f 3uZӋhɰ5nf{fH歡Lg!9]t.?3 'R"k8T[ŠDž񜩣ٴM?#U\2}I ASWq+)sPF9֯Dh>#HyejWqz@ڊRHI, !ko40ʭS2i絲2XI{0yHFkҸN]Zp8\'TenZ /~ S_;7Z(.ݚ4XS8ʠ/t(3 cǤI> RA>xtU[ٓ[K7ֿGr?8ky Koa9sId|Ԝb| GƙV,-5BEYf$)\]CǤQxi{FO3٪,3_T$_%>"/ T=2'gE̎mؖDށ37z[Fۦlf+ R#Y;yޘXye'(1;^^zŪN `1ECLB\Fb9? 9Z;CtU_"*)H/Q'rQaF3(1-"QxoIUȄ* ,4G``@uD#R$*Z*Q]^]qi{*;%n6nu%nGd,'ѱN4Zer :\Sse='W$q|/8Aof,~ /MhUV+#)Cu">SKj":-*t} ccGz[?6꯯~ ҧ:p˫^ll X+u=fe=zZCw8Jî;DDzг›&9!ß Qҙ}[ڥYPyg YZ؆&.@iklv1lگ} ^ Ve,Om?SjDkNd"oANmejw2%x\4 # s}COڐ^nu##u:Uv д\T~˓9fQ 8'Co樏>uQ-}OU~&1Wb '=zQH<6]ɊYTY}Ȟ^Du)HxU{x2N'R)7k뫭Jcq_YiL_b TqĴ%\޻,Gm!ls{P%@Q]ANO8wh]iutN-YKl W=Aj۶YӲyB^%_m,LZ4`q!l _ו?fbVqnb̥Mp*/ U(P] zǬihA҆{"gL&!aX%=ٌ\tE7V46eKxy$( TkB9D 2}AcxbPik# "TI t+Mq i:%NWI~\Dw.Aݮr䌙UqΎ[l؆&תhUftýMg<%1DQoOlYZ\O5k5U Ѻ5*<heSf.}&#y|j+3a]8iyDzEz$P 9 EiwZmNh8@$ó_YBtBVgaUAn^ NwT;1QZlu0 bx9ؙ)m鯔WfLHH\T91JVjH 65{,cKm+~cSD&fJ&:/RQTw4=,:$wzN& 7+Hm袗Fb:9sg( stVyԦ὿"r}j@[f*̖*?HM H\ޘٱS~LZ!}Pss$M[\r).vw% !~|o4H(5lASRÖGLΔs9'qJ5xrU~`OJ[gfUt+K1`Ǝjxkui!F|2A<آ_0%>Hl"DT8Jqbq\[MHaoX@gH>c*RO1qQQUז 0 st05;.&BݴH"*H'Tżӗd&I Z}趧D >tʴlB!V uʼ KKi@h3uh7& VF%C MƧoiR%P=g+C gR)jAu7^a(=h.PG;D)ϸ!2:Ykwd3tt;X)XqKo;9=jpT LzAnvW{?jE{7W⨰G){eBu-T!{RPpK`A{ k9&ěkZrͽAaվ4vRȟrx69ׅ+]~?yw?MLԋvez^>WAy.?1,*' 馝+c`XP@e."GlDz[ꟵZTRA,!@6U/Z;PKY*C1L`ߠw F̼؂jPf>*9Ja ݘE, m|7h>cKUhخ|}Lp.O|ST4h (d,5˓6G]F.X6܈NalQVR@ 'q݇-}ǷIG#NɑX7Kr%YYIN"ޠe=5;"alC]fUPh 6abĎ2CGʒ8xz|4FČJIjg~]i!Neƿ.u'R;y^܀m5bm0cB%A/58~!^Z(rTa+,%b۲O;t"de8Jd, lYn~+Lk)()8i^5\t5SYwJxbbl2 )͹9` |Ew`fm+x4vޑfFv3dS68"`o؞IMhT&/ Ebi:IJ*0y׵%[`ɇoǫo§9$ZE++}_L\3 c ? p*mF~ 2s) ,݃޽_7w[ Бvl i+L2g.2)Y~d_䨂'ڨ!h0 e}lpF!9^]R0)Z/ ɇzEoߛ9w98I O3sSaoay>g%KI7u,Yu2\:H MXTBq)"[n,Gb#z搁gD k~O6,Y( 6b_;j;b}R\h4AN2" 7lKȇZ ]'a6sClsuR %ПKP\wzR[]- Cw>b6BSijJ}>mVScTؓ=( G$Bbt؀o6@*Ѥ+OKm15X{+kj0L:Fڦ,Jl!}Ȍb!mUx%O1\+ipZ8bU\O71:ho4|`fhPෲFue@5Ion cTl\13 2@=#㉉9J~~eIq C̺EvJnr*1BEiV%HF=[.d&N_E T~8BIA`Oy .{Mǎ͉o:L㼭R$G+cգ9.!2fbFN~>2JM.&BzI Z<,Xkm^abe'R_c^VddWvSmJ;i\&Ẳu_2* h x~KUkeۼkNI|ǑԅwʎDD(~z2J0#삘OrKټqA:+^rF^'29bڗ='gClGq(NUC72O`u u d2dW+I _Zpȟ9´{zfdTjOOF "$E(TIpa)Bu߸` E*1D@:oUqW 4P~\7 7qzzD 4Zste>̵jlW<Zsu %Dv_wcC *$,9X8θo Fe[/?7oI\WǚT7$9:.zgnGD' 1~uW ;ɽh{ݿ(oWx }[$QI %_ogq7 7zC9~8ӯO"FR􇣱O/\/x`{Rvbs&sgk*CpXD>Hw\N]W"'a1۴2LWE6ХeaJ>pϙ`9RvR>DC˯;FY|XZPp;6\:VV|ear%Au!7†u2إc VXzn%5`A uojÕCNٽx߭~io8Kߖ0NNgF1r,fd782:+1(dCQ#"uL,O&WĞA|vq J#H `}e)B{L:id*̃ѶUPK%kb*#.45],+0kDAzv{TE@WGI&3B><K$+oNBD;N/ƺ Ѯ-G)X1\ O_b!ǤZVSyD뮏6*~kCh~lsIlvUL Ea=wFXc2-BeC[9k^a1J`09,S S}UYAҀ#U(6hқ'I*ñ7;!2mE:#=M.;I)"*^]*D؝A , ٔ8f͋/>Э8R%8!$*SjdzIN(kn署8QR䣥zp:RuJA]a* [%݅/؜J6ǫzĕ}E)u_β ZiV$xQI䣽َ 3!z^OXou$!j!q{X%s,'Vt/L։6%w|qHz= .)ƔןمW'\ ?amECߑlI!h&'` fVxL)4ѩߐq }%CpNbɊP+,qΓ91Kss}Z Jftcf'VM,f[PvVޘ: b/s}1!n ҎDV]hmVY yVB)_kvKk="Y),m]Ԟ̀zYRZӲD]mEڋt3))Jqh,X,_9U DbT^LU#<w̎_R1xybk+!f,YvotϟpDh}Çrp^%,{%~ `K+,tjx3ZY 7$  m՟#9QM56^DttV.6RIɨrTNw$Op+=!/\e#UmQ*[}و0Z7ZPʌdE/?q,[D?y E8Z*ȓ0@K@'xEv@BJٻ ;gw>_&e $/h ׽] yG *웻Sº" ɷT#H3c}kY ߿b@2y^`+FT"#9c kLʟ3OSxD Vy p@!pro>Xio,FRuְ7YK0qךRԦLD5s[age/9PdגaƵ#s }"F6@e^9jOFMLVQTvM-2("q0;+Y] .r^L˽)bSmdXFM*~r\XKbtE8mcI"Ѯ yo}M~|3f ÚqWJ/8jS&',O]z4TOv/Ҏ*nھa1@K&PU,{W&Y<MiO7a;r~f!HFEoxreVj6/$U0ߠm*5K ,\;ʲqzNp雤nh?h( Ϟ/󏮢cON+H֋BD"siL'-'@Z$#[ (i'}$K)"\d X}eB~v r9U HSAP^Y.)~U%j uʘF֖S/nv7 p4Wߪk3k79OXyIg@1-HaVt3eKGmH&dje<2hu7 JnYx1z%gb "ƕg0Sg".NF$8;2^h6_Llpe͖u)>("GQR`Dj*==0$u&ȫaSc/ ڒbk7%تXj6DߦCM.-mȏۧ3˭%'O|@0c O׏;c5яbɍ 3KGf љ=4[5 GIZڮL4 HoŷI7\])Z1s.c' 'ޓVC4/UgbKS%# ޜIxݫ Mt'V+-TrEa:n:u&/ n43s_!RMhB| }g*7$HkR{B;3lrEMM+ySD3vO5:0>Z.Zi-ӱS2-,alI.fAglbl޵"Y7/׼cʂZPfY"Hȼ:=Xv`ʨخ`w^D,pҼ5`V~OfZJ#(Abi+Jq8Bzw$ e63!b!N$Tv{ dh9\1 QZJ#76X Fv-#~2ɛ-iTLbTHN ]8^u:NMŤYĥڔnR!WzU࿠|۳L-{̄"} -c)_? .qYѐ_|h=#CA_0"[~"<d4Bȿ1bB(G& #ba|qg. ꌴA)Ԓ'+[Z8cGܠoAOOﱴhGR?+ŌG" _j`)PCar_0Eջ;@bgǬ2_|]Bώ;= !@cBjq̳>R [ё~:dC-SՎ0ڭ)G5bvtyk$[{<6 t1"15HlZhF8.]ӱy\J]+yMU>zh$9҆t $3jJnFUBR)-5g>b's”n2..0͍S(} N쮿dJ"K~.&`C}k&?w:v N-" #d2luY[ZC 1ν풜]U ڃۺE S| rkH`G!҉[uQ6'ÅvKe'$x2uibq絴yba #]iB)kkd'ǣ!g1qb):stI40 ,}AÅ28;wRԅ͇^v z+'kYvc76KFwt9ua #R+?qL~)guIVb8= y%ԴUw 2|; H&X"m{B"/<_C6{~io}exԩkkҾY>^Nʼn~KjRh*OFr;$m?}ni(ڊ4(m]_ %BH` H,Dǰt?xB&Z Vܰ<5C9M9MK@~VBu6 vgIrG1 wo}d8V%}J lL )E sL>6֝y1K C ڸ!1·K!X<&DE t1RQ06G%߃:la h2Zaa^f]O+n=Հ W1m[ᧆ10_KWn1!q4Ccql@vTaX`|5DS]Jce;0ITF>ݱ=}T$gjw,Eز@'yb:G`o4V2訬~# p9o}C`7ݯ:^~fbr&:{v D4G  e)k.Y@4\GUVnP\$]4#=7ځ' C_َY;k(q`&ߐ?t", ;;ш >>({\/YÉJU{tLl,NfƠ.D=n9YÇwT{$V1.ϴfv "h,wE Gh.4.m<5Xgjq֑e!Xyj%nVЃY;9 Cek\TGt+ ^D$NNB a6nX/OO-ciLKZlyt;ࠄ=m⬲%wKqYGmajtۑ)Ú@{f&o\W3%e:z4| ='SmO R>Й8O8uvZY[*41,-{/]'.[ޗnǀJG^ 5}֛kYv:"憤y70Ǒւ'Aa#Uy]GfL'l*TrB[)#p1沈 Qkٰ'׬lǯ&EeDM>Efx3~hAX{fiNѝ1=&[۰vX!Dr-Rƀ%(I،}sgxz4 N~uIHA[;PA5{ Mn&L-M@t}WHl8,EFF[W //ig UsMztN)k!-X셵j.gOt>9 } ԝR0z U^Ne9f5qP~,]ڠp[qPkɕ1Sv&lk!3j35u3SXڂ*e M4tOBV(Usf2>H𺱵C|E浹6-!Mj>3joWV^O/bidAB<+[X1QuY캰`Rߤ-*۪^; ({ȺA=9+|kơVާ}i] 9W>tR<*ٵ8(3K(93CU |qNAD6+0RNֆdGSi`Q˘[7M04&_ u}!L]2&ROj8^ ?ٴw)Βİ٤XSH\ZӰ؆jHccfk/bzs˥J˾1tfҦ@ ͵?&CT\t>tKHRN^S0}nZֺ.O2CXtl1LnT#,nTH쪖%1. Q3KӞ?|͟}x'M Kz^ռ2HU͏[wn^bd3a/!-`ߥzpOp.nNU%_>ɔO['i ZU4 #7p{+cG78ñ}y6/Ac>d~2EM(v8G[I2e )?+Ȱm,yA,:/"蔉U2p"2q:/5{5Z@787Bgeܿt^NdW|(S4uiqX dYyx?Hj #~ àww-|!WebCocpp7=SyJ)u5ZOC+vNBzMQf-e -BFqs$ >g'(^*CX|wbq{p|aYuo>/۸{ujћG/"BL*<(jۯ9if'̬({a^[D?kN]Ylq$w " 6bɊF'9LhMbmb1lІD/2O g=4bm}BVNBU.MWUF-iI[wZVyG>dp` l™Smd< ^&ccǎQ!1`G-ӎk7\vh|E1NŀmLM/Ѭ9SkmO`U(KDZe̒JJdmue j-c8x?WzLT_aoZL˪GĹT~1~|'A}q(qilqV'pּh/`u'j^95XZŅ'~{qDt9im2 bXqku=tի(F9W^EU> -op6rM iK?:.6NŲ*iǨ䮝O)A=:rU4<3-)䒷χSijdaZѝ;/2Ebg](&|m5sQ3cGBGM6гkHPerP EXsY`=4pV ,< EeFnmj jlj!RU'l!˚V ҟݧoଋnHߊdO⛰rLhD}WG{=S7@_8;Y_fgۜ}q4,H(z2FRxBc7\ m}AYbŽYڈ2T[V]cC^#(>_d;EI͖Z>\ci{ &c<[s`q&cΦ(D7#?FFad{ {ٚK"1bꛣC ZF' 7e\/6+$عKp')qL3I#PteG;CZŽD.ט~#B@M1^*+L-3l,5ȌoŸb¯rMc1f]z/@GtMG*NɇLzȞ&T*Kd-ZBeזAʅg,0ȏyi(2k.<(-Ezd1.{D\4Yq -i\f$bN>mB( 2&-ghb޿C!0P[!JPrZm!(IS5, TdaURVí@[UkY,pܱe+$6UDu kJٮ -Q5Ϫ;_\1xZ0+MJ!+VJGC n%Te˧{GJمˏFٝB?ܠ͑9awRD~75{(~%Zge?ǓL*zt1~_QYxЬk)e6~@IOs=^uQ,_]r `^ϑVtIJ&o~i ggk׶,´͏MXr7:g!.;/3qK";^GFeݴ#m>;e4u'N&GqoMw[;W:kFWJReFO&ٛIs0h7v p帡9 ~# Sy'WzuGʢ;9ZA lLnw,4ƫ%dGK1t.]O[+܂?gvl)" Gp,Fə 'q+@mpdZmuRѹi[ &._\ࣺ ڎo 4Bd!V6~Dxl(ֶ&BUdB6rʜco|=.aeck-%ԻrF5R=Ȍݶ{\QTG9z,Qڿ27\OO"ڪ8Vn*'orWVJdSI7v\TZsq e4ʇRyKYH"*]%+M2Ksl,Iq49/^G čFπF_E2!IɸyWv֞XrVqB!q/6MHn]ѭM9Q$娾Ej/.φXemCI3 39UkRľbbJg`TAtj~ߢ1^680/'Ȯ]L #<ҭ÷XnbzG{F`QM eatCs)LW6[wf$$yܘ1q]ti)fRA7%B(iQRhccA͍9!0íFu$7nJs?xu^ТA7Z??շr1Bw:T r<"ڛ!؉bmA!FnͻNfh"Ud- 03z`B9X>d^ۯ4Oa6çr('֑f[z,P qaM+gtQVq$>pgK4ۈy=XQRW@}UY~͊d푍;6[2 #W,nI.E˛5./fm.ɶVNe4ʇTY:YBo!DdM&gNnmFKS7fh&>)K;qp3u+) ; uE{QG>6>i$g,Zxӟ-Rh_YW%~pmyQf(8 Κ; 8)6zAhl)>LϙCZ 3 G-msdk!@;|M,77RMqLCGl>IB2w]U1i'R /J!~ج %퇿xij FyG=\kC)#E$MXA-j=֮_*eĢ<ǒ12޹hA29#pӶ9F ǫl/"< M6 .V`c+ 9~{EhbXVO $Qn?| 봠^'PUeD6PܡsBStȑ ,W6<8KN+k d"6Qބ}r: ¹s{3H8/32$S>[IpH"A3[p(֚'cWl [#DRtFSBSplUZ'eIbyǩx,f}JqkR׭T|̆cǼM/Pr!"V)|b= ml?ftW~byiAZ>>B}7+كNUTduت #Q9-d*e1J5N_oǥ~=64"(=䖎_L'Cl.)ho 35UT٫UKҮj g6rr}\AA\" kí Z$I]:M̂gъUEyBJVۙs =G1{a*rн/%vZ*BQR"YABJذn;i3hJֳU쫌MRk5h ݘu*JtUSY$ p"Y]?Uh,,V $maZ(r]u>hsaR$JFJKU#,%@$ujwM#8l؆$;$3 pJQ˾4é0iGTkh\̅D$fT_K ԄlYڧ>0.lQn#ϑV)jB?{)v}7]E wfY*GeWx.I4?[N2,0CB{gY[=d$&>f,ޮfē?b'FYkÉ3S!r@’)m)Y6y5hE֜&nH YiN:㏟S5jy g#4ĤI'MÑjz] ]G4;:=H'N\Nܣp}16+iٸh57 ЭܫfM%uEOa-/k˙UuPut6mϹgi#hOQs-ag5zsz6x-:Qۏ%=%TY!f Vt@sWZ+W;jˇ} sLѵ9/}4JEB9db8t{Tt;ހڪA$<.h3,*P@hgv?@YeښIbk @hK&f# V pį"BӢew%sya6xki!i:]CL`YQZ⠯( Ȭ\S[ꋉ[[:&(s2] }<m+pԞ: :,n^+_de.'r(,Y\m2B%%ON -M}gzd۽`p͘AG,t,ĥ4X}a8vҩz46#L燼e>|u 8  ~SV^mfs]P(܉lk5}U LIuK$Vzj} Sq0#|&Gz8?G&?t& x1lZv8}{뷧Azsݴo~{oФ^T(}{Ǒ#2:v7jWcUr46m6+/olXXf5-: Gmu /Rn5huz[dԍz?D&׳\^)LC|SmYHpC6Y!ZFY )]tQb6":,Ed=<ͽ++u[9V]5AIqKvz`%H`!y(,hC(zĉ U8譀$Y:$'+~-4{BvG;'mi2 73gl7x] nm{;tyJ]ogA2=4Q \tCe}jY{U?TZƕZ6K)ghm'b͓Tqh{We GZɲkrC;Ѿx\]PNL}Ui`X$KyxnuimE5rf+.,5[jojP)M YZ *i8-W:C3 Z!)fGUtJ T9B葋!iwd0ʵu3פwJqlU b`1l:CIN 8#p\1cÊ ijU 7_XETrq*^neŋx-=؊X2zVlQâgNoJcs8G#}*޸epeE|;~)ܑTnbca%oBKqV%G!r]OuT1Ynx&i~wW_ۘj8e+m;Y8SoU xWyr Zk-Z3Wy{Ɩx}.aLF7׻NU4o u-2-鉚G. \uMppGR0MH`4rcvVIe,-(o1$C/}CNNQ \Yŋ_5h?*'=h0̳a΀8K#']~nTuVO:>fqs ӋN\LRVh/E(Zgii /Yˤd0ReIw[:qP.\HXGݸ-T"uԚ)!W~x$'K2VL]y0|+Cd̔U-+ܼ5ȖUiF^Ĝֲ=t3InKnGJg*%4~ㆿJƁ%V1!VcQ9HN_UvJ/`[mB7R,SmK9J!56NɽFL#Zk! %#ȿ4iʼnii )Ky,ݳߧDeME)9׉PMaK28}'oNfGG"I2  h9פ^&a3eg2XҐn=6OUEs/ ؙiSˌDҀ"S|u*Q.ENN5c،Pd?LUCQ?)i_1y̒.** PS/7e6$FcyrZڤ:Bra#0jHRIKu(WGuy4OTkUA%g]\vN҂XmuTc=٘0Z"T |n Ȧl3^PVzZɘ18}>WJhEN:D{ V4E/l,7KEf<|v+SV;0C΃IT w?Gc,r4 07Z2~ +>O.nDTetnWCxL/kEZ8ǝ T1ٷ4xHb>D]M5A;Mu;RUki0ʗi76{Cd%bӽf_-&95K9~tQUK[pcx떤}p ANMr)"oV_S d>{ V U+`Lm+:.Qdn%WZ;]UѸaD}>Cb7p.+u@E+ 3HI7 ap0Ǭ2E (v;h`BĒb (5KWЯ=l)jF3$UE@(Ja)*x1daR? $A55# DžV}Mp)bNw.ø773>91zfO[*.=Xoa6źѸCJ߼ jPVOc9m|cQ\ u .fNۇᵜ&,I_9H[)0VZ[R2غKިؚEʜ%'Gֲ9e-ͬ;R٠8E>e)0ӛ{/᫷G^Zh"=X t˩ܕMB/6r,#Pţb;3Gְ~N?:iD' _x'9=J­pIalrw`ʅVC/zr}hbEsWjJ{=«^e㈊xܜV9=[ Fy"!X5<T͐1!7EffD|Kɣ~O^]̮@ m.!"ɇM `4:@1s=#O앣pJv_Y)ӳT leuӚOp1(%FcQK&r)Ƞv e_ݵRʇ&bo)cQW_acCg$;<.@VҔTim9ZoNVE pgAy0 ج^_jhe*ǕjJY ٻA`)Ͷ _J:**WXXd<o-񀜀[jY@SuI7p,6)S*[‚Wru4`~ $dݫ׭$ZRC2cۆ\vh,PwIJJTY |x :gA'#AQJiC%+Dm5Wq,UnT'>7v}/xĎpt3'}I@f0XNQ Io7*`r3|> Tx< 8=5ІK,Lo1G37k~糛hMPkȬǃqk7ќ-f7 Û|4&~뿳0yn734iKM@e6cZNㆫO 0/l*ut}wYVH>Gj+洍[YK'5),mpHP ۏ6Mdbʂlt HJmPhEhN<pPQᮽZ355.[w< [V#aza'^S6 aK FszgNmA:oϬ l$vca8RI RFf+:TLۇDK9 {n(7"3 jb 3FC+̩zC:#cg+Cg!+Rk- DWXv1CGQQ%g-t/LlOLM~G@^V+`q{< Ɇw[~́-F5#cFWM82ذK֌yAY ҙqRՋT v~ XdwE!_wS>dU)gzkFêV'ީ|(D6NL&ViK/Pk62u؞uR)ಕsN+\Cp U[y6Ef>\3KrFw?ZYjI1aYd1$c}|q"kJԁό<~vn[d$)(l wA.X#kˢ+iG^]vԦWy&.e񦿺2h-QZ0;W;]Ldi4EXm 01Ǩ*ظVF2g2{~g.A (X6 /Kat].?KKy5IPl=dMWBS^ʞfichk&IQWb; 6B+rxwqvSig:jcG9L>CPB+6J'pU-檽;@MʴF7Ykbe"6}O@`nh̫Jф|8DB'yYv4UVmt4`Ig>hUf8m/b_KeBӭ΂1+ %w(Ū!zOi9dM5~} 7Ӊ$׻/i XQv"wp`m^Ij}ӂKѥ'MZ3CV|C`A5P*IBGVWvֻ Ub"1v\wʉH^#r~Bqҕ+XccҭZA^4 W*AԮԱfSFhzS$*̟WItB'}Ua~81B Ec*<&FEF3'pG߀A3F7(l)`T8M+ `Pu|x =~}Tʖ5j8u)e1LR# &`#Qc=(/uRLyRLPpb[y. )1/cp#ؙ|6=wvT!H:gst޵gR@,@jvduz(Xf2.ۅ K}y.ї/qL?TlHD}]ҕ L΄М\QM! ǰEjqn1Æ t oI &-evWK;Y| -=(eQj<9x&jug2|6Sq,]ү:1dCHg>bb Y Vca/؇L\'gths LUp! __) ?gF>//|VvqIq9q7e,cXk[ѭ#fjh%)#\_7BZb؞=DAQOVy4љ@RBA|y*S89ede\>>(EASL ҶĈ|d拵&Q_Mc%vp5-v׽fw(PǕd c|a6%:CBwGZn.NRҠ2,ذ7!$6:u3>XJaRH}Y΀1#L1k?NQHJ+S1%J&2a#eNw@=K?W&}sdׂMAg!N >.ltVcQu<8)$%=1(4z„ο Ҩ[|oU=w^b1&nlYɪԱt;$Qk#F{ӟYN;S{M]&j'#RHb\alEPn(3:uJKdK?ec#>pƪ)8ECJ#+k5Fh4{w8=c, בRLA }%rAyv.,oϹV1|gRk3, K6HQ)S—lңNН,c8HX5}[,gIL.mJUxpY*u;߄z'YՉF^& K}F8jMdBO&xU,8>F='O7P@X<hnՅ\$y_l^%>Ȋy%Uߟ:4 ](3OG?ңl7c9k'N%PS[)jz7KF,rTn̓`{bkQs*-:7%ANzq 1s%Pou2[k bE=2 X[b[#HmQO ͍ ?f\Xf)"O|󛳲.ї$ E;?;05_~b HPm2[P*t2,j JS%tqAkɑU -a͙nL !'Ckgݿ> ъ?ͶylrTդB@|ňWInnqxa>`W?^WzHb"<ZڙEwe9u eL˟6v1ouw2.i(^y²t4ڒ2kݤxrcΪ)e.A26 =' k'Ϻ`/M{&idwma&C#ݯR|?bb$oi &!>8F8dnrHڢȽ!KuyC]:ٶĵbk+#TƃHx\qmڣ4Fs2dpTt:58H\Y)49Aty (Y޶#1 |8i G]d8؆#-`B1¡m\P4zF 36肊31#q>=; @?{~rʩ-錖4&S)!g}o+ƨZ!v4tdųko+q)RK  }k+%c-_E1ʽ:4VĘںg -Y9R&L{ Zr R+ѩfITTH@x GJ kS8%t?w+֯atY.AVdC!Lѝ;yOZE"Q>)61vaeuTU2~dk g]5OҼ bwM cfFk8c/QFT}ԤLHc8*Ӿ• ^cTɘ}6zM, ErPzBxR} ҤnwN-dCu79Qbgx2ugrRe7wb+\ku+ ;*(e "^r+9 }[**HZz8V4ع"=g* xdgM ^K6u`4&}6Xfub /Wт9&16 k߼D(Sp;Ԣic5_q.zZБ12UdӬчĭSw_bH7&.sj%ϣWRwMeA# '}# 8FȂ%"z\TWv9ፐ?C},wγIvm8e{x!~!u )CY?xJxji;\Xq;|_zGMW Yz ".2)M|f͌뢔"d>*_-"`Ts:EU3MYB 9H}2L6 ; #ê #.1lUXB@!tz[/Y/0H2a^?f隅b<=fU=IXCܹŲ0O7O폫"p4>mB%7Yk?oޣe!~W4ut-nƷ{/ VN^l6&*=E}//LKͽNEA ǃ1_jlk`pY(Rk3&Q^Ƨ"N,NkFn=I&u^I7!Sm]մ!0r](b 7/`(dQϰ60]F<ad?O_|h  NU[1˒#Q;;%tTQ{w ɺ^`C&%x-s;EH(]<ң*X#55ڝx|07f+^K\$b6׏RD6WGY1%5A`0vJ:sg&:1q@3wtm} b 4:֢B(*rT߅5K< y<ǢZk3 /vx'S 5ZfT Yz,9p2hL< (:jWRz*%u)!ؒ5&]/#o "QԱQ=v.uE$=>t߷ڥWm=Uw#V p-PlgN*E&br\Ak glLYVHt˗ivnr!9F:b1N${~WŝJ^B)9QSbdfGvaŅv]ۖh7Z^s'xmބqS5I Y>Eu`أyT7p:5]d5HBpʊ23dX0\clˆaIXR1Z׏.Cm28Z,{Vl5vjyS35OZ̑pFciFt:ͣD[|^-M$fa4iѳתJ6vK%xC)6k6.K|WQp1mX}';$&/6j8|t|j}b;2W]goEn(j$ceM,}fY&ݭmX[$e62X24r%δH!ƮkQ a|2@֮T9E3"O[U/JxWȑW2GaJI 9QD+cUg<< =DrT]&Q]?nCfѱ*-#CHI+('#Ҧ:O2B+®)qƿeѯ[2^X$#L-,%(:*Dj:rUخD2pB\!o "rCPWCߚvbx$}SPBRZ;֤J+6$Y A1~MDK"?"?JBQt?0w72^Y)Yt I$V׌Od([ĠFg/ -D(^nItSҸ=AU_`J}QL@`z u<W?;W{>=\y7!Rj#Ib<$s> ~ Yj ]-2mK\u&W."RfTeP"I5felH*cA-Kg ,^O~m`Jps99׻Wi8Y.]iεagU LGͽ^0CpF@^"w,,J8[ͤh-'dZE e \nI?zV s'/hˈ"բ߼y%& A {ՏG:љ!>3r1'q:=6C<⣐[…|&c0Zhy*;@ٸTO|sqYV<)j;py_)lyk8Ҏe͏wͿ} !ц9& S{Ac&aUgj_R5ϐBеM'hD4% 2#I/Y6ͳQrgGL %n"KJˢUi09hP0%9]lނ޷[&RZ>" m6<:FssKUSsL.$]jJs9f"wO|~DdolW7Q-vaylo+QtN{ٛ.)1_8|$ZNmcfH66nY~ik@Xl9rcVBiX+g僴,GF,B8 f#Cա9:V}dKVrjY<i/cUUKO) {WHVUi2?]M*(\&X%#AϋS1cݼ6LyMPZW N?viƿ'_#^IY M(G6N&zdT%C /;܄T`k*#N̴'(/ G pVSf+ߒ/nf]C pYΠ?D+XĢQ5 \Řpךe HMT7זH;V\#,>1G8?[XHЀ,+Խo>!/;}1~ݾyStT}£%=de@R7x-]Ұ{FYn*n6{" Ηftڮoe^,pn?`4UCv%nf |8* f&Ksȳ`,g~| Jw؀0\n@x8.=1Uoz3꛾JqV$7?[IY6E՝wѬՊ# Zخ _ĮRӑ@*X/[]^Ѱ1;,*δ7P!wh>C)hz cAKD(USD(]g h|X}~Rԛrt2[82_2whvruꓠNP؝ hm7'^n2rC^n_y&,*)O0!,W R =S^T'_TqXXtWR-h",b8O=Ka!'Zy߄e{q vԃLJe KҊZJ耂yK =TвOvlgr$;XZ9̏nzۥfd^ݹ)DhZ/^A}H譬XԠ]+ѵ~YܧOnO7:;wu4::UX|/F@6P\KO lGa 26Xw#a~Q⹭қ^ y˭O2 ZF( "7 8w6}([Z[t6e̐9lPUqk/.T)ڠ% f _,NmcKvg;БP[ Mֻ |8D(-ww;΄j|q5 rM7.u)̧|f''l:_(9աtrvf#yGQ&J|{܂6)|knV)whSDV;RJ,:=i-Wm6",!g!΀"jrtBoC𚕍!l7I\4SW='jF =bcPLb6m789RX4YrO{/!ُ87;WR[!Z^Jh6&ӔLj4j; c[~JA؊µ#tQ3S䚊Uaz*Rbe4cӿMtOӓG*a3dQadr>=θ_HqQ#Z:ؤLrtk3M %j4*GU(cͬ|(ľ_ӂCC-0 cpyj˄,CQI 1li6TA֮UD&ؖ&_na^L(Mg6wTİ UWU,#Y "둳AAv}i<߳EQTvC*LL8p>~U:20`QWhTn` \8HH2D@;2OJkYcR't5̽b}pai7)xeN UʁF,9@;E r]2UM ~7T/<Աa$޷?,o%!lZ:q^k|x^94: @{T6kRْ\#₯Osӟopy{S=5ŐQI v_}~-2xdm. 惥e=6Q[ k6i!,/UzoUWڡM8@įQn k*J 6H/R#ƸY)j/z>*_G{t[a1r.Ї6;ΩGF -vKŐl]ٱNQ}I%ލTc̘I=2]&Nt"軂>3MM:4!P8GoMM=atg֒TDGUѹQɱ^hּz5DM￟V7\Qr[Sxc幈'cdҸgMQQ}._g Zn,&J׋ J3/-` ƒC[Oy@@FrrQ.{{JW˚)]3ȿ ?߾hΏGM6iOE3QsN&y+t$ؐQ?L굶U4I"&K Xl.&*6 'b[& ҠVuB㊀ӕIN=Z{1qPS.&C$^žPdqX9 =/l[,&P ޳Ѡybh TA`8$ HH-k/ZŸiv>^K8si*xoHלx^2^lqκWq>PrHWjuzI C}ϓne8k#d?)sΥBa.e؛6r*sKtm+Gv6 dN`aN#}fH& žq aGQj3 IԭJI -'?J Trp=ӡk|k|W,3{>GxYN/ҬRӰ-*-"O[ΆYҭk\Dwuq1:vφ̘3'u>G}]|V_ˌьXE|R֝l`[3!eObSZIaYJ9/RBʄGz@) /9%{#t1.#FS1tΖ01nh Z2vIb{07ؠ.}Aos _1,caF(U2gʹ1`Pڱ?dX;wщhph0~0e#,fw,\J"*C}r'N,+.o.;CIo)>ziUd?I4&`h8E'3Z.&&#M %5b^Bx / x|9g ۟P*iDD[Sv1u>g迬P1}SIGl/MrA+A2hhޛ2 ˁo`fd \S7,9͚L7Dg@l|kŹ44Q7턬v,y)ͽ61[ !&b]l:^ ew.0>w. fLA~q ]p2>XY_{2& ٱ6D&"}±Ξr= ff=j ʖwMXU&k ).Y1Xxd2,Aw2Ռr1 B &R11]Kl*rD9)SBPrҟd"3Jp9=yAFÜ~`T;~~ ְKVZQsB6UjX b8".?;) _V /.<.:&тo.x;YV8"8 _#51:s~f])4{nECG^f 0C6qfǀwF|,H7Ѩ P5/J% IRh$evvsv9 GKq@VLtق2nLu.[[g58g5Gbo [7g5qr _{vkrPȥ~k_|Z?RMp2oL7!VJxn_~nOnӰ\k?Mw_{9L/mﶘ,3sh0z37ڶ_rp4_Zn#}>_ c>Vagp4qqkF9~33F \_|0k;_O?5<m|oέl7`{Ǿ23K$ppiLB|J+S???!auz=y3Y`w6In6?&}d;Io([gFYҫ% c-|IOuH6 kD)֏W0/3y<F-" J>®Mf@P@Xo\Kb۵RD'kr5 cPPw'i]~?!"AV"2t)8HuC7_hț35`pns0F;*~]lP"ME@f ZZ" d`K )Q2+s.4ʃ3^ *YSI@h)G血 .E@YH5_ ^3=hɾ|lʶـhU P5ʟ0Ax)\+3LYiۭ>'o,aXH en}dKR7kCp!ŬYQvelyWStW9pp{ 4ߣ\=k8l_i'QqaStXsC#W]?EGR? <֐35DZ?"_08ѿ KW+ mneލt><֧͑l}.~C1Q?}f.M8c??ߥxs+ U+pmC889tNjN‡ei+5ctDJMA>f<?qԏOA'L@8Mm?kѸ;(3|a>]z5I[+p [!>BhD?}E;]ytܪ{7Ҹˍ~4Ik9o4i;&x2_xˋ><#m6nikͧEhhw$M^L[uܦkN3nz''5ӭ-yhѼ|Z>s]a$U_*jb̋2;lD%8ڻ9ݧ9?uNO\pCZL懄SsJ .I]\K\l~l;w㘖 _,v 4}֓}l,4vY6?WwR_€|`D՘/O2SEh+1+ dePhkrX 48Iz(Rfc 2_Ķg±~e YE>@qDXyM 4ԀXs:k'%kI\^(^گ;G$o֙Z/ze|ICI83 A*D u߇sT[@Ho$CKX/DQiHi1HAP^ 5ACstw6gcϺ&MQzeLXG-\>cԼGV&AQ:( N"8Τ3L^BՇqoAo7$/>&4 OᅭWo>j$"UgifX*̏_A|慥A5 f#reKH#3xaJ9)?<Ռos3_>zzikɾpa$DI42c9)y$OIaLںnKZ7ҙG]`+zF{JkB.TH0#@<ɦ1 ?Jޅq/F ]i^hZxO\Z87~$pZ֜-"*6_\p\בі =Gǰ,0H9XRIF.`%69c!]ug3J>ZOvOKZ6AȪ,)1Zv" ugYɌuw 'Ø k]-[ !6R˹!e6qPloVnNț|G ^߽8V_|a?2s9\{k#|y=hU=쇙y4(,@ęGn-2B'aqF ? 3m&'S'VЭ6VkHgWwg2#X%"Fkʱ2:78=P42¢%+wqe{~^A`T)/&H}v0@El!9Eth(Vk;bTkUn8hh)Tl-JoI&_X3 @cȆ.W&{==p—ƿϛVy b{NJZ(d0 G+zf}62gL~puKC}=)=-C({R"˹օD 7~6nI@"fť;w#mC/-¡DFaW.CaB\AÐ]7Bמh`WGHa`k6ap 4,h2@1YI)ptr1 UB5 qbF&c mWcT a9MBHbfvzmhkoS'$ atܻ؆DTden/~P @@|{?Z\waE{m!(F?"j#Wu,_LIIk)tFEi6`6ҋ^JI?K gYxjAsE>wpY=Kzji>7hp<2#FxϛnTuFdخHŞ=5T]0wG̚0AqF7>XC\'7e>'Z.|+Zk>(M2ܢj+F5Ywc[dpx⻷bj?f0pn캰K,]g;mξuYd2WQfWd牎c2|:FaneK1jߍKNͥkLfľnGY傷GSƫ׭tyVV/݊ه7Ec*}/{CZ* YYєz'Sz'S!)yRT"}Ru>VҴoW8Nsq2$JƊX^' P<Q)$.+%$ٷIT[狝yg 6;lʻS0uC޹.ImE'  *|jIDnسmGQLIBCj>s|6Qk .@^0_bpy0P)"AVy !R18;_Cs󴺭{Er>ٮnK/rڷ:_/ 9nP|˾.6M "rS8\r yB ^&ww/Rs5IdIFH;X"SU#LgN=$h3K_h5hT2m&h2j>IRr7O/oX˘3Y9 [5mSkkʶM:ԏb! =~Yiحq T(Rra6Ap =Ƚ֤WVGVV? @|iheC}rɧ ^Atm YG Z\WuG̏b/xeE>:i7@]Vڠpp 1Xj .^Μӄ.:~*b{InA M K,MbٻMۈ@:s7R6 k]ۜT֘J|#IП}W2.kJX;{+ct{yL:D'9\^3GTұ}nKv;sV7{<&ꄖG>Zsg]Na{4}90lir@>>շBيw҆VLJp4>,?/b\C%;eN妒zVIGCS=|QřՅK"2} 008^ÔBk flTfM+7Uwf>B#{_<. -GjTz>/y%'-KdG!RI  quv.V򓘛U>i< FG TMw}aR<|_}F!>YK+Օ +h1[bl)c18adX+GGNUnÑ&/(<*'p6`f=1}C1.-L6e !/2dv-oer߸uvS*Ɏ0ϤKjAu5R#R)'DPz>mrL/MV {2R-eLL;FJa t= EhɸӢe&yƿ/jnT0IM%b:l*&ڷ Mqq$ #i*#A(H&ᗭ>8%Zq*rXU'`O&v+#,)Uܢnmىsg2*DЂ%hيzD¥-rIVGЬ"'Ezp ZdTx lOeH96ư7@ IQymj)V$u}kY5K YSVDH$3cL貤*pC+B*{Wk<nVjkxjM Pws,M&a#<6[QWeCh&QFɫ %1pxً3)2rL0!Ɩ<([|n^ˣ;@M RH)WǵTpج?3N"Gh.r&1-RXg)9&bV{ϲY\yFg92bIӽ(_22&!v5,200P# 'QK~Pwֿr,9 ~~XpJ:>sؤq rD1kHHvlFTXSLx+O'R/d`|VŸ"e|6YM僁fX[;Mnyy4{}bco~ݷ~oOP|M$~jN~~I,χL|`4ҭZX< ;\~fF糊A{:<[iYuwZVU L|hU5̳{:9~6\Vyp݃&窋[0H({MÈv-wQK ЦJ:*{777/Q ثhmaDpp8 =m kKvȉ` q* iEϴ;U'2:iLl;xYRԐw=~t- Qgγ]j=V_Yr#Y큚4M@ͪ/{\#SFfuve;#̥[ׄrI-U{_\MxĈ/"Fvg%)~`>+*jr/U7T$.~Ph7Шɜ iUhS fYfeG{ Dɓ g^ު@L⊊,& c!*ڋ[/p+,P_mTg9Y"d{zw'La&b1"1 Ơͱy*ۛ/&4%YS=<8af>H 1]h,@J!jȯEy+[nE!>n ůxr$WLFy'cvSh\6Y/,dIO˪O Q(v HV|b֍8)dSĢ YIidVQ])cnX7܃h𳫳YiJwu|ƁB@mpN5$Nme'TLin- S2z>4/d)r0.c4p%$;(Gh:TUU#{)8Z\ru U}+co8;? A"%ņR_V5Z. B o@dYeUۄ1| t1ʆSP <|+g'(je8<# UU<ƀIvh&P&`Z޷Zx^!ӗ+<`DUp biړPbZ@3TF֍TGHa)N[YhZ?o> 11ɜ1ѵ@B\uKs+rB~ҽr&z4+DJ5/Io<+[!.ǚ^mĦCV)U5Zt&kUiP5yZYa;'S6+_Ms;;B! =hjzb!jVZGT8:_Jz+?t"'7LN87r*0 N-H+L3c_B+LDs[r4BC~g2 !2'I۬j5Իsz Yҧ&X6 Mo6BkdĪJfP "]wJHZVGq?NpV<?^ElIK xk=|mb+8|ell?|6t~GI3~|yR$8z`pL½>n`(#|**s->lat.ʈ,Isx4oXOU{<C3hU?х3X!Ҹu5Pqx}r<AƮɮ楑4KB.}&)UWCUψ䍭DSaSKY97[q`N/!P:߁sIv-4=ab]v B0:v<`|Ix5'u%Ra["G oR"[YcڡiƠxaFww2M7 il:-I^@eo׋ tZdge罽26R~'QuMIgv2XX(X$#P7-HjQ ٴ@׃EXWwzMuBpw2us66i666fM4gPSL.9E@ۥ)tp˳ 1E}٬}4qeDy\/c̱m|$M]4ci ԱlSahMS艎sHο:\VtɸΡdWB"UĔP$Ɔ]M_qi7E: mzRN[˅Mɚ耜Ԫ2_2]%*Gwd_Owz~z}R::yQѐa9 z/ -~(;.GcUvl\7gyXvwI "aIpLdòrD!?w \r'S)[ `6Io{e,$-tЄtY6̼-h, ,as]ZhoSj&p2wM$GE%g>Tu&4cp1C<]JBvi-9Bh̙zq'|Q||@WK>1Nip^ۯAc":q (Ȍ~cL6¬6Xv'~6e~Au&gT}w៱M4haցbIG,*uԬO$))2|_e$S7CM$KqnʆTcQ~ wU,? _˽6ǭtZh/..2OI qT\,vv42ƂTP!Iiyszx .PnBc;E4x{b,{؜. 7@Ŧp\t>xtp`*~? ajK|w 63Q񷒵 ˁOY6|odˋ5 m vvat"̨Wh1#VE=*J~m Qn=nhl O2sZ.>퐛Pv򝴣VTaKY-Y1i|k};SCt8qeOgW:u_}mtEsWW&m]n%6b6e.G{Z+i[Y} k1^Xu:Kv: i>vg:&,b01b^_$c)^SL5{s0(İx kʕ_,u Uj8Ly.6& /5q0#L9wUrC~e^WHZ10{d$vތ^i"Rw֋ |X륊E}R-8D[sgky#hs!l4vMS^e( (#U)j7띃* wBɬ3ipSx߃EY0$D&e#Ƥ>5;fuɖK k _ qu-up0¦[zxzш".#yha5vʻK&R/:8Jqr<'\$)PCHRPm:Fa뼍1!)JM:e7ink"5Nn0y29R7GyJ{PB>(TOە8Xo᩽7$5q~^ cT]kݭmB$;{F<۹M BG Dլ }OjŎtHC b;oLXɴXuny<|>'S, ~64aK*vB/]UUE"deKTrJk7Oď.>R&6Llr3O|_T'kfӓJh2}J,77j1A gM8u5BK"k) +*;@ w1VCeǍ)`/t;̶p@3$#cK&BM3'.ۇvbeX7w4f1rs q 9> L=Z j'i){r.^~ߜ]4M a4(Q-MsW1-@R-_)JK4k#xќgFGGFhpxI)[fTrVT3 Ea[<H%X8/ߌr %ó/gjPqV=>TBؗb^exfa"2pGء|q-íDOW!.kqEnY8!$_)z@ˬ_rOGQhBYojG$TN;Ke=CBaO 6#vDU>Z̘JPË-~IS"=೦_*׀ٸt;(,NjKtwcte{s4tlf0a1?]nlTSbACrŜoI6p rQiff;Ha -x%@~ݟB!f8W*ew2o/\6H@]uǭ\wL븧к.Z{-pŁb㮺0+V\þaSG\~Co3KF777rq=ZcFNһ%:HVHuLp 7<^iƣv)BrIr]BuzVd&X^UIvcad 8ex b4ߖIAX8 u'3n`-׮eŸ]8 01Nּؽ D8~pd&u(û&ƁL,h|hG!"fHf<[JOS}ylf)Iyw-}- pvw}y{)Uъ%Z p׿ikB?8 r8`Lɺ.+lDža"3%mHF5h]KЦ ]F`\ؗo. O m !O(mYW39\nu7[p;ڤ) J~=YHn쨹uI\UaT4ᗖj~^ Ԧ|2GhrY˛L/U Zƥh[, bs\L'.% w0Fh:`woόʍ)Ai!,')Npś\4@\;'.<FJ 9-W0tL*# >t'༷` 8Heh+.|lQ lM ]H!;+HJ`hy`~x$gДNV&hjԗMl~MCiwox7|s~ [eL۟] "TWzz|k ~+T3r(L)-!W(߾ow?P:L2="}FC|T?RlÊh[K\GHpt5*Owae⋰Lb'Wp~^S?U䵭4y>b$Qn1STQ\@Sv5[T?B&$C-xlUb*ۑΰRq4 ai2FXI-sB"^:抲@1ThTpl$qp)K1IXQ[ /+J=@IPCg ^EmAlBq&.YuAL}EbbArӸӨ8dJ->#,`l&_XK,aI!aڰ-z'}&SN q GsGTe<Լ s!_W1 mJLxb.BAy ,H{LHeS2Ya<.݅=m r}mz-/)3 [b3NBS?*Bj˵,I5DrNDW/9vJeHCiSG,Gzd6SE- Moi\g%kxi63C8t=3eQ$0XF: ~\6r +1yWbjk+nOUYӪ͡04YQ++L> Kb|Y4ۭ͵+ȩUf֮=ڏbLe {Fbi(2yV*B^i-t x_~ܡdA^?7Lv;"7Bʑ(Q:=!>_qL]C|]G] zء/4cexvג0`l՘9"E/c03IQh fjȃU+dbwkx-XM(n3F*Y$$ή9"ҁ@yh,]7M.+pbaJAy憤h g>P3Ԙ-M1 ^I2%# ,e`C'E:d*Sa:%H|Z`]bARJW^2j+Fv ,,]jA[).VKo!!,jv]X:UkQtA}=٫~a⪅!,HcÑ0:cさ1Ѷ4$eQ+]Œu͏G%f'ݡMs”xXCMm"J~-){ Q*aM`ߤ>lOE&BGUUc}*閹9*}\z yʯVVچat 2y JO\р[# YU٥GmS%N EvQեF+KHx=i.4T'UKDH}mګ97-+ [^H`㯐1 X{&7fqUR2!Hˌ^s7I\"9EU uJ S'6ګ!<|/ۄu׽7G߮ Om5X{{Y \ =dQyfwv'9>⠼QJ #[Luei(`JB`+w>tFaƒZf4ǟ꾞LbH12 Mkt8KϐyIC\N7 :؉6݀=p2(&w.m$$,E\xbK\naPLM5 } >9`vk f;so gc7ڬt"fJz8٣\p&+B1Ʌ[GmQb.oa6Ǽe9q l0~,. 9[UR4ifI9֛mL>ߢh:H;R AY骱hK:q7&ʉ#łԱK#wcu >G6μۆy@7ħ͉a`NXsJedi v2TTRE .R+KKyi_ Yly&@HUسW\%" Y5}Nr@-3,tj_1Jbsk%W`%&ȀT#,‡*k lVNt8*LWvEoq!(h Vbҁ23!9kUH]:rX! M|"W뱺b= Ͱ"8oł(wo+,_}a-Iړc83ƛt?:^jBfr %)"] |`b(2B>'ZڏBOU ?,%/(9bY5hF9ӱ\nIpEAotg|eGѺQڼ[̋:Gym^6Yjf =SC` O=;_ Z[Pbcp޻Uh8c_HkqiRW={6,$:饚.H|C-cO%%V"bL&YUD/_Ϟեv?54˻5 2kc8Yr }Q|>n {&nIN4' xF'm%Uxrbg(ippԢ{2&^7Z6ErX.RۖNEIPxVh?XYjV<^4\w~Sd8\b[`dJuMұ%dfH@!yU֧'6^z Qd€p"xh1Fmu5y5Idv> TfnvBbU([r={UnEF[yx$#E5"wM\koMG0DzXжI6HYY!~MQ;Zr2Q]6^Iwd( C=d^`ilޔj|TqxKVa; 5\\Dh{N~DG$!ȇ#Bְ؋"}%ņ 93P>o;~%fW!UT 5(ipO @% X,u*4jH[ĝh?]hziֵ6f|ڍjMv7 tXzI)X_L c~"2Z@0dճTAd,P`z: 3dxk{wZ)Q4K2dHn]hKvV膚0 y0qQrW -a*3ٮch嫹m-[R%+[`@ǒ=I.* ,eb&F?F6UN 'g2 SC +TM޳6d?J,>6}Z`Y ¾2uG U*+p>Q&!I-(=5}\>؀. ?RΕ9pZybf-',E^S6.W,.f$Q};+ ř|6L$YaD3m=}ʖ\;Q`>먢 ݗԅ6'kp4[&L M}؆S1N:Ip"z0qHV{xIRwbJ7FŠ1J5.B4C8[&D:g̳nۉup_R"UێT4^s;7BБ'wj+^.j^{?L  (\Płf<^[rݢ'/}}dfSS29nRԱj[&FCo0Pڏ1?Ebe,uw%HK1| xY(m%ޓp gypDRi0VhƷ)Sqn>b1Z2`_$X_:؅7҉D >W>Qo8UdTXn3Uk)ea[e_ط qGc@u'tpm׵B/" !}#O/bFIں9LH5ҌȜmDeL"b#j:~3/@bckTT Q2e[Rۦ| '8u0‚n"GL⪌m+AsE^$ ?S}vdý|OcuDnN8A&)t;(J-gH5sCRuLi^g90׾Dx? %QO CI9S@TP|&m%ɴFdʩeiܞV pJLL[ıeUS[2+ϝtY v^PDFFh?/hfXSV+ Lv\Öau](EJ0HoI4ܭ0@dyAJs[=~D!n2@F%ݬsZ\F|m UzլHՑb&6L# DҦؔ0|{~PmSp33 6Nֺ_s|#-iڨ-@fZm_zN*gm}ZL[^A046hZ6[ Z&6Z#@L[0?Hs[;I'(-H#Y Rs<} :8C辋)ĆɡP*CU@UqDaK*;!qY3x>u5x L\ZN iv}H8|DcQ%m?^̤5Dɜ:k~msW~GQkjqFT]i/S,=/zNPmxkhdYk:cGDhdwڐOӒia]x9b*$QuB$Z=9hrNaZc~Nk%ǚOS廞 oƿ[qvocM׽Ym}MNӍnm/$<؟Og#=.`<9ܬv 6_g+d;`M Kj/RtnrԴ8]E{ͰǨ:Qq3+)QYP3D-׎^q5[3S$ Q<tJRh$p"i'*CʖSJyFB=R:lc-rHXVg_bxMQj?xԛON( xVLle~"4^ՄR'P3+GPZ]% e\PϬr6 mfw ֟ GI (f%{7Y&vs`*g\Djw >x!jT26CX5 {Ghu05qPc15Z᳽ᰗD5d71L$^7fk౹ש"pPٚ)&xѨ0V.I`Gh _1%Y"Z8ݻ s% M9WLLĩk{$Ҝ<6f5Ofw!0ǩWMsdyw?)|:a[ U6MZˡ##,;|H&U@8e'pսAI.:h1lkR^N]d]8|%K|¿?bJ4k7sm4W=ax`,J^ `WJㅌTɆAI[Zd[ OGD(g^?GOs!x?ݒj$B A7c|fFkIH*++32;y=o+7 g/9={b,M hV-pPu%8ߠ^3ʬQS_WkuUsn%B0vݼ%}]'GJH>3RqM/#xYw iN鷗~ "DXmtĢ:Hke_5Ax'KdG#r6;/d=]$ %W* [vrlL.]:9`3HuۂTߣ &NgMjMDB ̛g'rڂ.lZ֝ŠC)^opzTl^,}y6^jd?n/K&YdGONj 6Az-c7,u&}/캽2%91ْ`Zb)4B!B#>LT?( U$1.Y7;9`$Ε꺶GC<[(f pdfb.}iB׊ zSU 2.ormE8bkxi䞺;I E .Md=2e5eW=<j΋8cTo0p=Ir$dPCws*kK m8o/1xc"*欬'F L sdIx:@-6<= (ةeiW_9`TRF60mS>9C0SuJDƟ_D %e{]Y8 q{i~V0A\p8ʎWQg]0<,'eހaWA۬}+Q@w@"S@`0LO/x[xb ݭ G}*~`ŸT>g*jVY,XV̚S: 3[(Ln:f򍍈 pqlg ,O-2)yD UPنʤph *2Cj8nX$ 6b@Q7;@SP@E DR.[xD­8>5Ϯ$&gKEZcaP5t 6f+WS?QLCTH%.X]U5 ""t(lgDTB;dAr緰BDmxsvsؕTF c?@;۩֓<&&͎=ŻkcM8䥗 |yz`0kiyy4*wBX|)Y¿eZ^4z_zɞeI7\5Ѳ%N Aq?=/}΀&o3Xw/+e3Ȋ [ٰZ`R&?A Ta'8!;/Eԕ+:z+R ~ kHy9諴pb"H薉dbby1B@ )M0x *PhS$:A* EfYfDǩlhb!V+UPLSL,Jrl{1 t.;f:쬓/{߮>y'X&7A¹O(!wxǯ,Ӽ,^~RXLB''ë]^HfgAcv$ٷ8Q! (x/UFL`knUWS+ ~w.޸Ht ڪP,$ʱ+;y}^ÉqF3c$9hG#!fkBu͕8 #-L1V3 {Ukװ&߁Qgu8'Fp]A@$4&{ј2C(ʰ w ]Dl$N'cӆGswyʰ)"aEɴ!H[Tky!/a& w^m:+YNmb{Es#vxzocz@0ŦK *Қɭ1,IXykc6> /oIH_.զNTgca}chyH涞cwMƺFɼXgˉ Ier^F\ Y!8GtIԨr5xCS)btl+Y}N#c&x&1pnHiH&V:uLjW 40ب|u@#aN)],˞Od,Ԋlhdqր6E%'?mGhuYTA=/dHv5 >y6ɛ>IE2K4FvXШC%e=Uw~Sպ(2]HR\M2.Hq'}IkGm+PfUbAfhWU_Er+3s}aa1;RcHv$Ze߫QauW&xD|5!wB k[|*WZc]'ˬ9YLNITdZl^ΉoBIEJ;C,$[R$ěNηH%MΏcNܖu Y.m7/glИv^]YDns{A76ޖj'oE,o!ѩOGiFg7ǹw:+A%j(, jMr M'Rsܣ먌,\fa\^K %9,OFhr.)G& {µ9B¾-_N( }RoB8CI d3ʳ`F2ΥX&ƹ~]PA*(|T83OX-}x#ecNt~8E.OY kM} VWXBe00ЪڸpvUOSA.xs:$8vx C#A7Lɐr|1X EsMtO¨thE^cvQ_0ݗTq8X5:nPc,:ae#{н@[  ǶBsKivb)0 *>y]TPkhnCsظOm16ѓfj9|9< 3k ^{fB?<ˮR4;9y!ҽKkHO~g\3X ~>_+ [MZИS$-~-J0kb IdLX@Nt2)+رu6 ٕb a`b*-V@b-)ig^ZɓHu 0,֗7j>$.;2`(R븾pn /*nrƺmČJʠVf>Qtl<9J?FaI;C8LYJ0:JCmw|S2敶< ݸ+73t8NgpJmYE?L֎6* E~o񸽉^dȩUhkkLh$dG?Xo?[E`p^?:J(M nJF@t~"U6E*ev#=ܭ'Jr%vaHziىD%ũ35?͔H?ix\WW_yV`9gy<6$^UG IVgrnL̬f=Q1OJJ)pڵTҴ qIЉ)r{hY`VBr47,'b:Riũi}&p[Hx/V 6WdHѲ(RuaQzfrWU8*B )4^}z7^y9y<[Q>M t=8(1ɣTcK `D@"ȣAK}Krr1+d(ּ` `Р,ʬa5/N(1B~x8E6zqFzHKRwF([c ҖCn27!猞FL>񍔱^bզBb.o;Y,7 rTUۢAʰhB^CGQlwRw3- 0H jT̤YRTǬfa9%WXr4n'bTMAC$ɃByOP@qY鑈x4FLCRYΊ+db^ҭ΃6E^kY%.:UV >FiJK)6:Ds򾭌gBz޶nV$CҔvnn.4K/.^]~DN)]Datsp*M( ʗbk8Ñ{H}*zas%4=,|缁H/ܥ0.r@0̧oD.ި+ Jh ~E`K;U v RnMp0xQ311VXUi1+2qJX Dfy}3No"f&YwsfHQdA+- wLL#>N+ %M{?̽u7-o˝dQ'"7#b2 MzբOyڃt} F9H@rh CIfa2Vпxj"  KPH֪ o^a>ܭ! ^ _gaI(Gp#DDgXD"v"߱.L֬`+L{ԓNYLd6[2NcE2Ũl٨/}x}ԍt 0,(/Hѭ gOgjyHs j*n2,MbBî=̝,*,BQ0WjHeMw ZU&uaQ|ٶ[߁nq]r1i8$(u01:Mdxo@dtP0׃:7zڒɂ $s|v"Y7bF%S T) SD%s;mB[>;f 텉=sVG΋*~1=M]/c]N'v4톅d6;JR l. {Ў[2cBŔ gu7m۳hmWH--ڀ͘Te;C"PH,2n'XЍ:atbwۙ|ΨiyYJA7|EiS2/m槔MNgS8zVz#dvWq5=<#_V+ Hӹ׫H0EX;!{p%ʝ_%~ ʵ@=We ;-"|T# LZ4gGUEևvlM$Q/pSd77@9Lu% 8@87`#(AJ)k0]Pkޜ?3ba_9'?bG΁5JHޣ YlG#d*7gyk&$y{gJ2h:w'U!(0v,w/ NG E91ogP4M 9¦*@.>\Ƅ2o }~P4͓RCOָYx1+*kC" $Q{Ѧy"h#+(æ%J'*ֲYASn"L&wXbJsCSdŽ~ҭ-YH9=o۔_-W#L3d!r֣6ĺsz.Z^nv֝#*6([K7{Cu?W΍/z@/f"̔BŎO-$VJ7m#DN2uL.rU_̫ i K_˦D&YP$L0!x@Q09G2.G]lY2F`۷Ё7Vel|!50M!Pگr&c}K Z$c/Wko5WkcvQDTަpU _ Tk7M둨s4X;-:7㴨hdKx o21uDc@n V:!o!e#K?XDve3Gi&OUj%{_En!fq&Q[zR4S \t=rv`G `ʹKU;*GY^3!K`<~"Efl PAr~/T5'KZ2\C!qC"/$#vME{..XR \y&Aw(ɑhnhNp-|LbĘr4zFqAu[S /SJ0dt`|ϻ\ƅ}T9$tRa{-*Z73Id*k)mL[^OxV4[cA+Ba9ًwzzOՒ)"շF"SV誵hYZ6Vv'*d }Fyu?^7ѐ XG ?MKgq h0!_i+QgN~'erf0H ECVQ*@!氻dk{#i(!9}(jC-;;c!qԨ|m/Qvb+mxVR,GB03g˕ oalwZ,h Xm%t{SYdPjd8V\CCW2O;djOeZc@m'UYd,W?ȔZݥuox%a9QVM\DL frOA Os*iU _G3 shayYdCIj1>T&xo\nU)o'QD'A9Qu.rDiY1gq^W_Y IQg㒊+줳nwf]Vq5qZu%eny%Lt;f? ylȀZ@(}h˲YLx% GvOѨZ>6ДHXU'F}@ g1ײ;6 ǭ 0Fѐ =NBw_pqN(@km,EΫLRUo¼j}rƝGH$]ѷU88h|zFw}eU5{ ;Z$xOt A"XCuL֩89a+~^گIâNR#;÷"3euNCc,') MFİc/Whp^:֭PzExEĦ|J:ɮ}Y#9R5vNdb5/fJ2{-Բ|%ˊWoYiXY_VQ=Kڈ(}Sv.ɺ%Yv.lhWL!3Lo͢Ϡ7!/*<ңGC4X^T7]+)8֋فBiR.Y rG oElNOѩOdEs܀xc$p.uKm%޶.4e`ZH"*82!p,єɢo rAvɔenGh9|}0 Cb3 IHct-3Ҋ:s?oɪow/ 7/ wLM}, +8!'ݵ3Ƴ FM!]oo60#&MPc8pl A,8'Wp!0@[/*#^sO ;`ٛ##Xq˶v@Q~mYhKH/֦.@NA֙ wbw𦔰-fKVTWX/=U.%V+ X' {l"EwAEBH8P,DVEeY֏)E94ŻF"!TAsgulXJmP*c,q=']k&_=ČsV|sFܿH)\ \M EqQT7-#|]03. [zkzݿ0Dto$1[JXR{M |bL ňIfX^({8=pn։n%~'{'btRuH;da{@)}ui t{rd;b|v, `n!3k> U$≳Q-O} Hzsӗ?>{ιq^( +~C%eZP|hl5Zm'?څqE"^gqYEDc=ᔎGPNA U* dm%f̳:6+K-,7fSvczf- $~MIɜ qU%JN"* #qBvDkrH 3jGg6HhuO(/7$$7m#2r\}' 1A?5\qS-uҍ @7?h nW>M @G}_M(+"A~Fy>!}W@,#=iYCy~9(LSg(fS_0TllKN]ܽah8YBrD͚U='|9 䒂˯ Dk5.(A*3XKWܝȤ@[WA&mߤ*ׄNnˀ\ &qp My e`zR[qxbHsd r;è38Z18@N'.G)ip:RFf>`ʼnh1"¦Ql#Nx٭.AZhY瑷r":SA$+GKQ{Qϓ[K%e*{[#W,"6뺺,Vʵ R Y,geoV[@ r>wSnᓪHЋ,l'ѣ2zD2-SFDB:[77:1k=?#|Z}XXX5/Wi|ͳ/1/}&>DXȋ'HBca%wnxN%*h+^kURt83VRFKېǻ Mk rqaw[I&cˀ.GTϞɱI'\+\@|0Lǹ@_|,LhNgqj= oVG/LI,NO}edvvRR0?i`eHM:֙?]޵]i!dv#=DٮѸ1nW_ o*Pʹ(GãJ3gQz"vqjL'ԑYj81ˬO^3 4Eyk^W~;mL?d5ʔ}R92:5_hԉAm$B6  Q!G(e2c9c?ԜJ5waW]4@JHG<_HT1t`9D^@N}uAAQ \ Κ1B]E |lJ7 5343҄j@{N`8ε5h5{eF7H >:ޑhGg2W ,HG 0Q>쮻|j@GFN FҾ)K47K-C []"q/MP' bHܛxo1*\f=r[n?xnxn0 ΛOf\ y( -E-| V!MC a'eeӷf,&Q' R#UTG!zy˸kqDvV) FYXހ#eN`˿y M_qmC]غxP6{̧WMvi55.AjM:!p"lbm:UV-_b@eLZ5O&CᱫqנSl-=yw/_|wv@ .^ϕ.ʟ+59:~ʫ?Qƙem"Wg:wO޾p|JnU܇ φcm>?$Z <;O33nq 6JO pL@(lfbqG9'Bn,cW.TcDĤzR Jxz:bIb Mj7'H"'G MК$كRlSR:)zaQ=Bc"]0" ZQdB8& >jKhb٘CLnT^ 0 Pm>ţSZX33;֨ہ2h4mitLAGo#٩P~:~rGCpH H#v;ϗX f:(c0b;̐X'j<µBWQuL-YJ6%hԔ{pvZCcu0AB M zx&ִULw=m9{FZtL'|?#sɅ:h<Sx 4=`.ICݕ&14jIh-W{uEh+JBq׊;ڐD x>^.i,x3܎|rG]{buԾvV2}j%VzXdQw]ɴ9SVl(ǸMgnb:~B8nj-Ğ4.ipKnp؅~]d[;R傺j:9߻lkD_ܔaj,*ǴaN+ =K#kܹ+KVh ɀ`'Q }<CIJOз-OS仝턐bRDPWO7S39[9C+_k8o{Q@F f_(X媤_(_썥E,7lUV-=̷M%$N*PnQ%]VwWd76h%3qRL)V51I#fΈs2(v Z> BNDܻ$ Fb'}oxm0w3e6(CãWmFjp&%7Q"1F<ߛLV_dEXIlٰڅ`vA)ntu M<bSPՐzN`ƞ *K|.51q!KsZCrT85~g2wl+KލHN}?ʲHjv ~9GZ%Ym>1=3T_KwjvWkd?vs"rδsˁFz˙gBBBoN]kWwF{X;C rv 7~GgTfX[|N}y8zV70Fen!.❂ْ75-ۅNJ!{w(jGdn!U2i%dan}>4,Lo%UTVV.^ȟ|>xpΨ X("ɢ6umoڂk)?!ү{b } O^),ʗ]AO#I_zL%뼐ԐHwy|~:&%?ea",QBym֚RmWjx"s&MFKmw x* 睱 I0)笂̻Zm͹ϳWxzXQqV|wKF$Γ.vܞU21B/ D{jCc6V+(Y ]\f*!\*3n"lw{ʭuW/`߻N)w& 'ψʫb0r{ȭBy #Fh:;Ց C4%YA'w=5Jeq'TǂД[CX 錓ΗkDMn ..p,IY) 9SMXԢQԖpD Рm2 xc:^C*@a5CjSzKjͷaS^t v/D<ca`_pԥ$)CY`$%_OacksO.{Y@%5YuSb oѫ 1`kia+Kh(W;E`#\5XT>[KN̄W@ufpya`RKz Qm5ۻ$1,CcDY6gu7 Ep*8?!!^>̓lwiMv=OHN 8ʷQFEf ^p#V}Qi&J&S2ޒA cpQrwX'Z=0xȮ᎛27kx$RCz.ݾi/;zVZ?~*M/_\ R&wz}JP^Ko hJ^E=txHa}x{+ARVR)>0n}fz6H `rqh\x2&ah;l=:);?_|:9hPm!}EyT4-tEcᙣ@ƈx;I0v2F3@X3T`E*aslf21D Ƥ]$y K(觔c\qi59'ڈUbNWmn|"k]7v;j/|TLܔٹNn.ӵJ wz1GrX6<:+yIR֞f" 36T>5gѩmQ\]KfVb|`^?㐟(+=AAZUƛx*M/; I&D*[~wkZnVݫtfg6<~KFg}cZp{7Ɏ=ZishD$$^L!l7{⓺-v(q X0f㆏w)6p;|MIO}_s?DjҒ&Xu]`>Ƿ'o s$f{2L;StNyK&M]={}g"UR`J`.֥uc9* 9!sqQ}ˋ|= v͞1EM{ cѸ f,FT!%_Y(VǹX@~Yw6 $`2xÊi@|QX6VxiyQN,1.-,wE$$x1";F|'^$) 4&!gvOWr`S4_\hrZnAHC AQ,& *'Dt,Ls+ZR]YyTuVě߿}ҨJ&@kN;yBdKG+znG;PQ:g b$vz}vhM3~SUNTT)΄܊^e2H5`7F`%K㻍!0A q`ѣ3p]+ b60 ,>gĉTa^?1i7?XBRAPUjs/#Gi"l`:%/pm/"ƑCۮܸp%qfbm1Dg_( dǦÃ7IY'$X}]$()eAcip&>$Ւ(遌?=4W_\&{@ ݚ1 b^hvoZ\rM,R߻Gܗ]k"1H;` hJ oV؀le<05ou G]ѳ>gV xH5'Ae揺C`"h nAp}ANR޻\rn׽eGoM~s"\}g oז%Jo!,3Q.ZR!RfcM,;D_^#?'UPf=J^˺Ś4cnâ4)If9.*y]+)#UjO58QݕpN}h'+v%ܬD[I"q (tTDœ(d9(/"mRW> %P_O Đ&~Xoq V ffz(^\K;c³2)Z$,UdBό9l^ۣ ` ,mJE:ҐJK'1ˈ!zՠw)eǀcP'YjbZ߬ghB']ߛ {Y,u敲vֱu| wGl>l|h8Mfk3VݲA*3m(ZWHϼ|jZ'Jטv/1)plMᦙՎ8qv*v,Y$n=&SsM:񲹐15 A'Rc]ddmI01>hȘg] Ҏigcoѝjщ 5#- l%[&-|֒yo$\lMR\9YWUF,e5{Z3_"aHyxȢs lґe'z'0O\:x!I8o-)@ LQꘖ`h*cm4AȂlCDV[jcº01=7J)fEU2FG~17l 3:`W8^q<=f PX>'T vf+1b},ϞMI#s\|vv~OcBѩq!wrs/ }/h9hjły VI,H`%iܾॳO\K2\gPS!2<۰%w)I#ǟÖ797`f;dO6[s]j4fB.]Ǧh厑ueD3fG+ov(OdpȺ } *Z賏n}}ַQj=I<㛿:Q23]RLXև-߬zܭef͌6j?(&鈎cX2_mD$,%ɪꋊUĢTW!nbqCg0?|X?:Ɩ~1/u㵙FObVK|k6h_@l6_΄ *_pLUEmzIHU KE.Zil+L&N.Uʥ#åAt5AMV /M{M Vhn"@w;u; VGo"4KUƵ^+v~A*dƇy)` -ʲUӘ!?:HHF&;$f F%0%Q:u&Q}m̀1OC#7\WOn?1'jAL0ISX|0'!V*qʀQ"zCx%*ș +A^gg%>jTH#/>'w,1vvƵ=.؄1ftT>>艤!ҟVBB'Vx6 R,p=5C  4SxMsE !&RbPp<A񴒖)-bLSX*q,qE)cNjFg 3 W[\^[gfU7y &2z"k@R%Tp6&::T3MY+dMt~$!@y.*Vz8A\lXḒtJv7a뾵oJ7;þ 3Ő YI݌Ter,v֔28,mʭs$iYwk2aAKxD> >Ӭ3K]!/\{6J4F>?,϶R4C FȈzLjU a 7bi.2F.—޿U- qw!;>V)c 9s(F+mtu<"Fx/QEDi(iZٳbPjӡHF`L^NXDowλ.-w mz%@ V#E>{ w1 d+ M ʷjK}:POYgt=uz&'W&ggD`ۜ! w~|ξ!k˫ ('b|Fr`l5z`V ;?K]de+Ҳ9 DQV8ݣa2&4PhȒ &̞7f(x2w$`6gp K櫡;qƟ&f2,_aWqso&*>"qG:7^f4L:s{WHlK1)z#=ʗ")m"A|C%ɟI;+14:&+6ݸeC^Lpwm6@ي%AaiUw̜V+]6:RPdZܹPH]o/>j>Puޡb=HnoH 9PH:ɝLI?ms9G}zé^ldwpWu+=J"rx@mJn2F?D I>٦%}v]HTB6 p+7-9\r<úB]Y_rA/|fAwwdƽɏ .]"B{-Mz!u 2\ @ƹ7s.zP :b(#/=xuE&'?[re DJ`A9g/!V?+)(3ihJg6 ϑR }Dy' % V쇕^#Y7PᎬRK%B ` Tyjܺ;Q/=v[sm*7rV>V}`KhuGm/>*\xD9ܻ1QVA!2Om`fMp#,cDQлϊO%Qix͊OoD$UܔFvM$(+v@FlvŊ#,_4ۃMKΕ >HPn * 5D6LS .(mUZ] 5tȀ퓹G7   |Gߩ7!TfmGސn3ە`)v`NP 7UiҠ}."BDl䨶,dUXzHia|ͳmi?! zal·9Rhfd6Vݍ3'; qZh/S~~`>ZFn'׬4=ϪӋ`EE=2r/B_\6X#=B~+{ Q+ ޿*`oɃpxVk?)# 8GD й~sL%NJ?Q'U.ث{<Ǒ0oB|\$ |&XxGG+i kUUYγևeijm22/ؖq 1$:0z>skU6hM#/!e~l<'nOU1A< wP:U Ä[)6vٰd9M̓a\d#G, Koa}Le~}hvzdab) L'b")wv:=2yٍi=i2ƨK=chdԯ%/ۿlA|}bE,fȟngՎţdc_$׫쫅Bz拝Q1>8,f˛g*6զ߇0!/I/6:PX 5\T})AVTK dGmsdga{hld)d?4f1-k5z eDBc5wǦN\&xI0b;Sӈ9 WF,4ThFxgqI$I~ʹ5.a Y*T]36xblw#B t bMWOLA?cZyFDJ &phHÐp0ݝ&_qAEZJ%h{YgݲPIs/ qsǩRͥi8n/!@YX@RH*QCVDYC2~qζKTo]#-'ϽD+7H kU9k A^(Ϧ4R  ;䕅 х5}PBgN5Ѥ4;A ʻTr@jg27129IΙEF;fL!ˆ%N(J4*>{n >E)/c&݂jX"dr~qrR"5T[{FA)lA8-LZaтT#% -X\3_̂lkb"?UUri$k@vԇWjyf[Jx ZZ( {'ߐI0ѹU<}±Kd0c~-)=a҃<) º Ê*GwB?u|h.JM^j$ž*JհhG"2s/EPʛ[,I99Χm4ygQ2+Bq-|}) , *P_(c+H͗ Ph])(]gk3 ?-吿[(;F YRUXyֵrg{ nmmf蟍)nD%81w}dץ%ZxIȕeӽ'{ K?d'k.X [9>/`YJLH(PA@[Qi=eiF$>^~Ɵ_Ļ Aĺ]wGEUdZڒXɸݝNh8Jz $\ru{&g."^^ۋ(J" 8ʽw 1Ɂ0Ez: 5j87jQ2L9;>Put2VNQ_Kn֓a[3>*ct[|)<ա3p)uz-0^vgc;׈#0=uga[6:V }rZ2CyXCcfs)Vt^]w+KRD `W5ik|'wSrUF6fmtIdčwaTJL@!샒@Mx?\䭿 Zûl;C;ـJg6?#d~QMП|u PWth̶x|_tqy HN{*k ~^'9 xZ]XjNĩ[9vMqq PuT{ڳtT.hm͗ӱc JUy뇝ǓdzMff.35m@md=I$0 SW Uú[A]kDj/TM[&&uc8m:EӶ89md 696Q.ReF_lG\ eeӥJx_T3i/X= 2aX 8M+kGSapwṞerɍzy?;niPV~ e_7{Q?َS3gO {O˥ѾIT9jgzwyTˮ^]}&צL_ܦw z{YsVv뼬$y%͹2GǽX}c8&C`-?SCt{z,u+٦UYl Q>K{݌|yJS3vsvl%mSEӟeYiZBzw6!%{z)65Ҵsbѻ+% RIzwA/T3f%pqQn7ثsGL!u@i=m[)hPFk5*QWcO Rڋ2O7]F{cpYYE65ˊ+FZڂ;)/! "'~t:G|1]A.g;3dҞ)~8)^{ytr>/76ZT Uy0vg'/eHbtQWLS+^:qmuw/SX˽[ cK06Dt3Z8S]dM{^؄eB=z{QtwFwt 齓euh+E'|#x{026KdȍLz.dޒ+頇¶W*}Yw%jJ$o_[|܉bf{ȉmֽl] E𣲪5_ڄe‹k٣U١Ol28L/-beBH<3KsPv^+KlW5= $QHE $t.BcYzw>gv!]Sso=pҟĪ()$2xߥ[&XVT-ʯI50VlGMM`ؿp&G ;.㉚MDSKwG* 8~j-jnu+'Wlr^Z.u+D$y݁A;>s̩7>Ws&hڧ ˔b~)fSPXʲ^r4hoj鮍:$h:߽_-;.t{ td3Ћ,(i-8 ,zVVՠj\]zWW빮j`qwk[wv0V7K_L 7 FL|J/P~:x` k?k]tW\DYp[vb-?]W̨Ҩ?W믯^~hw$9r0ˎ%ɦ8xWH~_nv?>~DM`.o:ڲ~uߓkе,Oz{٠7P^Iе#ND>9ڞKHlÝ~ ${pc<>Kf_&'6U'-+=Ղ]0;qAo@UybPo@im? Φ𶑂WѰaŊ/!p#uʈaSwE׳6i*Uw*J \y\He.fAGk8V!wG`w8Ą BX; e(Pv$A[k93IhXC"=H󥎿]o7xfln poʞ)4ճ@YSʨl?ѠTA" \8ZW[s V5#ߋ mSkvk)4p!Va6U ֶNR6&Ek[^?ؖ}Dn{K˖vNhS23=!wYT4L/saEMxM1BW_s̓q-44:u7TaZa+GI))/(;:?'{&=SAo7:{_qgG{'osN'oݵB/`^Mk76gzRTr JDΑ=5PlЍz>ȒxHJuDҥa"28衱y,\ŹCɲҾqO@CjJnq?v,/ AfOF3RGT n&Ķ41m͋w/<".B|yrASWNJ#Njk{- >W$YhL{sz-S,Rˌ6,D9kKe2Ei%f|aP-)='[N~GĽ~:a %O֠AˈOB-z RUa#VA:>FzfNDZ-Cmv 8S|t츋k:|xfk{zTlE~o4:GKE]i" kR-rVȀ\l= )&Ib._z'B/3%ZЛ$wT<fGAҬٺXJ"n@*mb p&iVR[zw,BWfoc7B\(­w* D^(ϓJDI< ˼Z* Υ `W WSSf „:k# w44m ZLl4 M}Yh @p}pО#*s8.Bǜ/Xa΄Kݭ۟L3:6mEùoKe_)+C ~.*`3͵q%ة55(6њ4f>,odszc'jzZOHȄS SǸ|s3 wqG=܁-;MP;Vq#-v" :UX?RoAbv]HCہC{YW:9 .3 l\ՑQ |c2ܭáي⧪(;%CAREFp5S ^Dt RA;qe vǓtf1g:Cf 8)HP}_-LȎ̓eҝ5߯6{^8C#ϭT2G@X>[KfwpA;׋` ay\:b|ip0nUKLSՂ];FqD ]-_ә܉d- {y~_L1q_VE%E )tIXS";>ɬ*we+,.GB̼my&7kϛ tw^>.R؞#W: < 4{ 'JQ7/73VEJ"QZ3-r%$3#srx`- }z"6hZ*~骥tCBʖ-.,^yKq䦆4 YCNB9O{,XťDga,M'|6 ??QIhH,oCe5'ކe"JX~F$DbT7J8٣d0aCe{ײ Z}/7+x2H,J<]QXa} hq$?kΦ:~]= te^NFfE\ETu<M`Z!K\),Ȭ(1,16;:5qg7&NCdɹTLVFwIV4/LoҜuV-'}r2%VYLdܡB<\B4(z"}Ш=I6jɃwU#rʺV-^f-/Twy+k"2oـE ViwޑAO,w6tP>Rl+~U<_kLOxzN mLh.cI"KG<zcT$ǸE[{-Stn>d"b&M< r.J(ֲlF[ԯ~o; ??-M~`#}mX8y8x .wеqڑðY-$svZywڟ?J0H_귍zf{75W>&1ŚTΣiNei` !_ɍҌ H ,qNiep1e@4lϦ A΄`%vAH`F0E$Q>PBb1T-+Rmm)CòLd{)23qMD}.?U˅B!Vs->b̌ް+aʌud]$_ u;E5]Ye)j>un,iz m^Ek>ow{-;pYzArH{tD0&zq_<@U#Z`Z(M޿2cŕ"3KYi0gfk`bveQcLOK hj@٨3#ɜAtCVR%;ţYʄpR)XM1 oP5 "@u @&Vd3߶MX?lR0PҴ6?<ɵHyL;]F[(ַ(kHvNxi;yv D1L+_tOq-Ɖo-xg/iкm''B֤nd%!}))1n kKFY-8CDZEHk&I @nKɒ!dJDZ n ]uQ|w;9l榊:ay>FQH,jMyrk-Q*9qώ'剐֡)M8e4" <={INLV#ph=@[ޢ^nR_"/ʭH$oJ @jc_,a&85!̰='@b]A'M2m*`6! rfNtuiJ3,%HR>Rڙ;Ds4Pj[E!|M:2zZkL״ǩv%_ _R{'@~2VOdVGVGKz8Y9>Ӑ_q$Lqr0,](A&c*΍D209z6ZP?Է3?@qo=t]wA=kT}=Z\tWk\ qam,x0Ru--˳^= `2jt$5u[qbHoiֺIn-Lyk7g[k)},~1Ȅ WBYH#ҽ 4'2tB$8|aQ\):[Ma“]tAVR+J|3 )1>6+C$Ui"ʊe5=ɵK& sXʹJx8aE:d2wX_1Y$z+,kM9{ eDXϛҽǏ\'F:(lRV'B{;砣(-JnpJnS%٨eև3m;#h啂w 6&JmTEQ(єVW7B'J6Ooje'p3dy(bp,jq?x{9jVt`NQt=xԘukQ[NtJ5SGN4RH0Ӭʃ Q ńf\fϐr zb†; aEhZ]l>v(uP˫L&@ȵ}{0@mmlG?̘YG(aNb>{t@B-m3#V(Z)R1o˄zYZgTjS[Xۈ' E+B\_VbG kx6.5_0! 6eD^ %ި")^'0d6Hb@Cm}/(W>;=lQʂl73t(/"fT= ~h5̊b@{/AJ*e{<5҂43otV:$^7ſa!کyr*_/_u|չ{V<+whz}. xȱr&~̼չ{<1c=߄9-Sտ{GQ-fD5vnj?;qqФ]\BeT2JF_=J5~w|.XKJ _%Tj7qrl]*2!G&︎ cѱ l%׉[Yz/P4@j0C"lTėEU wi{@E*`8ƴ/CB,o}t m6e8ϻ[x[QK뭰NG{\pEF`oփW`! P᠁=EQy!얾wZ@gU}8U|w|lwn"'SwLD3!\aР;4SpCXIŝF]PQy` m?sw ,ůp37C['~i.|^Z-{X3Śm~Ɵ_hѨlWa/h WL5z ͔~{In?p)z)COT)!KKR Sl nǭ"`!S3 yH_HNN8pU ED\`ږ|) o>%*69KRzB_(3Q,ZPT gBQ~"?lEhSĄOwgNDfbR iH?Hϊ |_%޳JUDi*&Bk̓==9zr$%⁡̊Ou/[#j@68l&Jj oپX|Wm1jc'k(P+;IU_ȝ-L| .\ fݓ5 UX?-BqvSK·>ym^9}ݶ31&sB7ع^3I@5>:\ ۽a wWfxrvRk¾gY{W4㣾Yfk '87W=[Au+ V9?y\nV "rf vbޯ~GTSTr8Lg.~,- ѾT]ADV?'%{52&;N}deqYj b+WZESb'{;v]^BS)F l=ii4NNnvNl![9KTtPdm* hE^G9p( Х :FM6bGqdᯆhw#q1rg Ce(Þa#T74wƮb?q{OC;k_[~ELֲզ^aߦagMó(ĖN}"^T-HrɷYEWbM^6Mh̺h.@D-_7>bXq` uYs]YxO-C ~³<gU9+>LY\ lu%i#7FRjj gspSiWs*這uDzZGJyrY+HIHToo>z~!ɨCm5[jb^J˚Fս7WsB-qJ`#i0h/=Ix=FaXqysk;(CHʄ&4#M0q7g#w?M]#τwY "I|㪇[fq;p#d ((dm2lj!#=6joTMORա:Bݹ(1HӜsV KF \9d ^gI6+_; ɬ/a Jl3HO)5K c v(4r1U|%#ˈJf`CQTg83ݼ墲/t<]EDRH5@[(\JؚA>U20.5Rn,%2x^S v^m3w؝@{' ][d7-Ӊ4jg !,PKw?mq^!NshBߗs|~d_A{Z}F.%yP,xQ 0Vdl c`3-+/KdknV~5mvO.Hu5z+OvVFqHx`id-Veg]U8417vL=iK6|Add,zMڷdXꌶ}/Ws7u0.wOW;?0;uGX*T(;1/}.m?[ T 3u24(\H;[:ksh+@تq&<aE:5T̖̘ZbSoεw ”O/Qh}6?α#cweUk'tNvVkC OzSᩉNy[  >60!b)Gp A D> lE0|ݳ{̬vlJ7s`X.<׸XD/.񖇘4aJKfm|x 'lu*y84b'|^{`Kqlgtf;K'f;Lg9-@7.c#a+'{\oE<.$/" "0R' "gR*,s>+5)$YL/)@y4 XN@~O-!WÈkv.'J^␢w#dzT"4?\\y#G l,Em>”@ X\$׈vGu<8 qa6}Qć {\ig+Oe#lwJ_htPOݮ0Ԝ\c.8lz P@+"NSxO\Y"bgAΝFt͐k{W4«X&-wq~CVFScuݣ$&jE)<| nFgF̕엨Ŭ_*U7  )sՅ9 '{(d -6COMɄh8n֬fo!9V;^u/13? [<DڟƷU`7+ti#jP jm?=rB ,reg6eNO;Dt̪ć/|c:˖1|It(݅cE,a ›2 :Hnm&QOMNmT~v7WQ qs}+Kb *,QH3DQ6SWP:U[:QDbg5/RzXknw+i"SA.@l\y2,KrDg9Հx_UVO,[˾߯.8nˆKɈC֗6am>Zf>3sS5eu'^sfU#mXN|nek#O?{ComXm<>t09dq-ۏ^'_" 8W<ʜTr|` +.C*ut3{R!5r: < Wܣ'b "TNh0 $\I Qujv7\c8H ݛOP<ү*ۡ&Gg÷IƠCʼn;(.͕ko|[!\"|+H>Nt}ڛI(m_Zм B`8ijY>l%]-i3j~VζzoV\xj7{S9fh;p2~s!l1snx[æMF4QҰ mxЖ.jTF$bTC£"[ق5i .iRw}@g2I! 3m)M v!K3c2Fzؠu徶slS *K8cTn鵑Ga^I/IPj7-I^ҥ[!7A6jO Z6&\۟F{ց"Yy.ř/\JKvqF( `Y‰.ZUVc4 =|*I;ZlJ~ư"en HP Cs1bf\&p=z-*7J$ŧ|ԄRkR*[n\PRΤ  fIPTuc=:gX6ѯP3cQ;z>_Mٜg^|eVp#ձ|'>dsm&Fh2^QLJ-bofyֈi^ZԝYr8f;yP,_-ZJEIz~Ln :aݟwzջ 7Uo^)>)feְ#{ې MP)RpGh-8rTBn<7@/c _B_\>zOW -x2lG9z]f eбܱM*wR {qAO1yA^@ h;L5w^D67(6((Ԕ4i\/.>*?<鑺P`˯6 vQ%/Bib N"4X<FYܯ^65W v \KQ &Ƅ}s_YJҹSJ0 @3j0@ 6D=#ӈyjM;X.FzҗlQ(yh471ک1XM$ \8B-0Qo}鍐WHeY1q {Ago^Wkf{E"b#Dx2qSh]2hjbZ;r`3"~0͊hz;ut/[P[sE*JA:bsҗcɁdBX!3>mLe{bQ<.0@ڏ8A|׸<aE2{Xx|dnC֫Yl4[Xaa4~o1S~e8 8GYwA6?E_([)ʐ ÙSHPHzR޺ 'VMWP^4jL;fAFtͭk(kE|6-`rp t-ǗfIN!/ 5Jao{6q~~m:[*w=7)8[wL~st9Vak, W򺨬3?936׈_!VKWIN ;"Z*wmLhZK)eW|m F2WCAh_q /䇄%PX>ꠘѸ=BEd?e,ED6>Ƒ,R1U4Sa; T̖/(: +E@ {MYn3LӅ{?|ocusYst_d-|,MBѱ) vp66Dmkzt#f=1 *'&O.%RQ,˴v&H t3Cxx{_e 'UquB6m'9QQ\ye$}^ =yMӢО" i3Sd%ь:ri"oE篹b< z" psVߥEW kh3yzNJ`cPKy$_>%4Յh) ;n3EAif챪~w_>Hg+K+ZhkpUޯYMhtAj :!W?zOvD_^RBL^0sDlaߪ gD.;=[8 __|o|?O& |c@s?^ק\#iy^z/m|ƥ2ЮO%-xY9(Z`HưQנ3_u_A:_.D#Xϴcd_g+Mb0m]E!͍ŞQ̻TWA٭bQT@9YTA`׃1v _{)u<8x9#Pz:JDw3dIuLFy@j2*%2pz @qd`K1/=AP c; P-r]Y_A0/tA0 B %u{J-$-dغ=,niYt_},(^;BP@6embC]v`_$@)IzAxU‘J'Lt(sza)+򠶌>jp]eT}X(,qJ{Bܽ.8P7O`&hVFf]xNgW*;ϵW=Ӛ,E_X VuIa3pjUז>SE3cʫAhXaD,&,Dt,J^Τɮ#F12)Ak9j`wâ %w9{|J9Zz\ XֹGƇN`楌K&WH@g|DO^xdwG%Rh+`'^,^Ӿ90x\s܌lV6P/ix8]'[܅d+rze58$gO;+xU4Ҡ9G8h?ЎAj;e yQ@& h{*=5twͧ5) L9Jfn~wkԭ,҉SFRRbf5R0/ޚr4:O*G6<l6Inl*.Jd=DhgfZl!MyWB1,YB@/#Bl;amA2.007&0 $q*ԸRW9SQՊ)4<,@({$41b 2 bQI.9 d-)QnHcm|m(1zme]!M.= {7G>4bΜӠFQrǘyvN{Ad>F΋1vc#G7mGq*Pv YSfYN`yBC]6Zbܧ_ōF%)/yOh|d,LٺGhDxk`ho7Veի<)e$@o<f)D2]7FeD}V >{g(W x"rD9NR>~m:U%28],6sa;;/rD -qgZrqRgi80h9f]w꧝;& qE=adEyUSJS+#񞱬wWOd0Ky>{ɛjcڻuhp̱Gt 73~ kH7p2z1(A"c21RZ[7oؼ[MQz4TZ4b^w_)FJ6lkY=kN1@" :# @ZYS88T""jZD~FkwxQU4V_&pU^fWG{d+Bc?tGJDte0|_\8m&$i.W3<)3_]/ z?M4FzY vfrQ9o%l};+.(l6kîGks0CerAHlz;b̦̓4JA.-pnjZ]U8SMޓ83Ulq}97q\ O'ys#0U㧎Dڒun(53;7ꇞb Oy#}g}X}jDT :2 APPP{Uo} e^/ Cmv7] ` aqjaxdg$`S0/J>I%V?)쿢`&n2qwr"bдVycZW/#zWٳ@t̶[9'&?=ym~w?bN|n1.n7sgF>?09}n-5,6's,ҽ>NaME1[EƕhMF^J;Z1(]o.l\|*{E<:_T ݩNY@ ZM\.+E݌8}pXqm'RnK;gW>stS/ja6/oEޖlA~oV~ N#{r^Z/ٗ䯡3ɍ-6H2Hրɓ v<ƵfjĕgTaZO%6sbD<4u EV& C)'rYټzq ['h2O2~t>]ZρTYgtLTW0HOL<9%J,O>Y3XxǓe;?u|(aSbYǏ9OgϘ=g9Oq χܑ{ wZ=dvU^ME؍OS۞{yx?fM%Hg75b|^q}<+I4c4zdﴦ~b '].6mi7å  )JL 1+k e;p5 A!R)\nb[d 6Bm4~df6[7O,HU/w_D= )R_|;yn`vlE`yce8Yܷ _$~U FP4aůx%Tږ|m9Wěf}뫦BzC\@yj^*BL$$`%L;642WxXNfmtJil՜G3qC*E޽ɨq{9wQ%V-KklCh?kR,|TZFcޣv:>RYDXjejx>hinӛ7qzݟVS,d ݧ%ÇF1UƑ7J '7^t?z9q0N\?$Icު c͜sӓ 1UvA9|T%XM;V{]B:YvG k" /lq-ʦrgtCh5o/ֺ L)g3o&t؋h^J3M7.XsF'Ƀl^CJ̩:Ds\Ѯ*S7f!2Z<(].msHjU[#jAqâp*;{= t}%cVCr^~{%CN>بLtQ';%Tz~%ΉC9$,-9\OgIR̐ǽq ixk•+>NK+4̃{4'֕$i7LsqjC.Yi,5۩y;BeF0hvA LAS~z(G3n9eN% YONaxB580x".qukP!?zlFz NeRai=Uzkm=Dw~h˫bfE6}EF܇MxOXB&OK:}{eXk5;of[ 5= (x$ʺљtsw&֗>BjDpaiBqegLr?3m;bƈ1$ioAyvǽ199.{tVNmE@H%3H@=ްOl oTw<}'ܮ"l0ꏛ&1loIs. WvT*7o{p9 ƃQ8yxt0eЖcҌe-~>8Fr"[o7eHo*Y3Fځ*y$+Ä@wŀ(SY+)Bn 1b*J$Dcͷ.Xp)KʐIXݠ̎5 6M.}f-.z=r"iuu¢KRſyz+YvNy ˮtJ $em_B*v Y-;u2gό29Sw( Dg:Քao` Ko;$ :3#rt 3HF]Οq[H_܁]SCe& >RzDKܺtdPKԪzP)O#v8!zj Gr^qleiۼ<&x<0~pq[B,ѵ~\`tSi{1:y= ەzR 6f!g0J+ We3WXT=']򢴪_o Uiv ]'GY`YA 3_Sh$.scS5J~ y0 [K'ZZ W$n` ǫ窌,,= d!VYǛHF9Y *;5Lj=S7d<q.̀&%o;9Vb|T ] ϳowWi?63hvtjTj~S2z|^PŀXo8CZp7[- t{h㉮. ul5M g6gpfkb)[| 2FYV|Qc|?^r #T?#CzUdo6zZ3><(0%"0u,<}m hwpIQOj8[|\1\Յ ;wj2趁ٛcK|`2>PDaOagjAL>9bpWFYJERt;u;ly916JMDXĴlyk?:ƽx٬—6-j>nB*2۹Ikyq~G63jI c m<wؚ znP7|w5D~*lr?Ah+1q J3?Q@B;,}1VMTej320U"l(E;d' ߖjdE6bb3sx7Ps+D 9{|wGN{!pMQ۔. sxqx0uF)n=ģ= Lq?zWO{2ÿEo +\f1n뮂ƅH*=YH vz7_=s{M ˳[0јl~Ym(9/)hH26CV;}6?nFO9yK$.V<i{tfE}쨵't7$ D<%\fk{ GkSixlbGO$ eH盪c5Ppⅵj^BД${;tU6Olǧ%U;p-] @\4v%T_cS;%Lt-x8qM)U"%#j>v{SB72yGDw&6?LtୖH/Lj(OIW EtN"1R^7}+mJώ_R@۱_|!$8ng@FTL|Rho!5sw3щw}a@2d!\V !7R.VMVLȓUR}_XpHNܐHn&(N,5ykoեÑǥlҋv ͳFP|?j4bLYxZ濻R}Y$9_@B@7(,IVb_C"8v4\k S ZS 㘍KQ.,$#\*y@QG|z%LŲwkƓAƼ{Wo,XtqW %6/[V{8O}ܕ5XU`AEff.O߿y7=fNo({۩F/W(Oȿ<; s_nI\PDDž`ްrߒCCˣ Pr,AFQ}x(17Wt_e[^C|V9oyfuR I .Ko Q-Rxʫc}Cgv^}QB&")Lӊ旛$Z6ZT\ p5蚧˷Oγ2W"cY`6 Cq`rm b`w~5|(`(Tu\b,]m y\uόZ1(v(~2P)"4CW)䓾8ʿmvzzL^6}fL+-*[jI6sT|E,<ޣԜ<اg9Q"pzc;^ݎZW|eVNWx'h\-ԣשӥ,+LЕ52 lye7al-ޖ iuŸ]R}[~kֲn<ͧ\ŋ9uD3C鞅 V5WJj7h)Xh*Figi }hɫ G=Z/`pV%\87X-P/RHҕ tqBJw* t@JζXa!jA>3]oݺQs|SiK=K6?eeD6{(Xd $m!:})]i~u9IΎ<2#MՋP+yXb[R Ȓ(a.x S?IxKeke pu g 4pLER~Q 騪 5,ᑝ2^1:Nx5mk.b2eT*j5p2ډ0/x݂WǬW!.6ei_,1,ZrL!)sYwfA$oeiin+춟 [vb,.>LsJ!lYm!J| ͅZ/fجO f*qh?R#G61irQ}](2 9MGw^6>umEʴxaT":^Ma7`-K"zROh^u27a03ce3pIUUl1u?=#Auf9>Y֘gUNMw`ƖvXE. qJH;{LR;Dl.",U۪Rɳ _3\ ^ l5*mXjfu%LIvmy"e˰ɤt?ww9P#$nw8iHoTA[5"z'|bcHKm3H=\;Dͽ$_C8RISԕ0ԏVB'u#(UV_7Ȅǀ - jKy #6ާ b]kcpcdk2{5ψ2PvW3̈́Rgsf`VռbnJ :1ӑԡp sY2ez׶ѽ͝ sO\baܟ6$k<Ƭ> a9}%QU:-TU}[m$H$ h$O ~?"L×4Q#ubYو8/2@R~/'O)pڸ!XQ/j(~k43n4{MM'Ai563 \Ww_OD:##R0? x8]MjH{Fi P{[ XbM~ÿFC*ڋ$f繸o^B 3YAP /Nm9cSo\h" EUtUߠݧL*SgK^oTH6z%g0OgDĎg\K$}訧$XqM9])1 o^H1I `Q0s1^Wc$.A# };.Ό䏳/ cVPǛ5Fv!ptW-P2y0^ '؁ d[%jfy @:9-@L-0cDѤ?>>"bP/f "ZFJ7ʤR@݀a8s5֋qGyQ/r$@WI1ܹ٢o1vd.HhTa) % 0~w87}?O܇Y:}َvL~-MPvӣ(AUAmϺLO_ˆd޲&fH?9 0} 9sCD؛Zr{m#HZM1\Vk\ JŒ0#39W*|S:s taaUMŀ@x8636!cT #s틡G~MT\ړr V :CcdȑCK3v]bV4x[R,[#@҄V+cC 0W10[qٱ!÷L!3qfs_9dPO㒐%Gα.'zKmYKT0܏Nף8 klM;Ԙ2[ȒS_+~jGq&xג!]gFj6/\':CUS:dd*VR zٓH5 fv(Z^K JPI. agP_|2܁ ݮ &*ak¤uIB p;x2Q,8z[r11aη$Wۙc?vQSݩk A23NL,%_tT$~Hmm š@èj"s/  yʒ,e5Nuf-~;3 qۥ=pgO*$mE*`CG) ?Dj+j0Vo8nmvAql/T KU3u4<;E%%B:g~Fi%ml HMh&mF: >;1bP:\q 1فG,sZ,f{%P$PAeyC!Xy(pc \nQt^|F#%Y_>zuJE,C^ ݡNwF$s@~A]F@Fɉ}5% { G('_De I sQ)Qke?2o` Xl<'9 MG9[Z##v:kGԀ<#J̟ eS߾=QHKI'pF<i[Ty VSAicVy\:0 hD*AȾ>䥘q^X#cQ+D#[om{.;LyxՂ2m}ȳ1HV&|e՜G_zMzd"X~;ezP'JXggbm߽O1E$l cdрo<,'")K=-ذ~Lhȕ]^ڹ- nЬӖъ%xhlEef';+@ŒYQg"<,q~E9{#TjEJM+Jv|yK$k# \@Vҁ1w!_B3QcDZ~.W!Fؒ@ې<8}振 zf/ic6{[9+qIUEEÐfJ!K$!Vc)άA$Lʖrb~j:o/;s>DI( QZ&w]"[/3Ƕ lw?ZTJz?4h/6VG/%{CblC ,?NE$xgHFdfN6&Ă#Ⱦcs7 -*GѤA>c`s @n ,s&t.6=nQ=-@RJy<@M bTis|q!5BQ߶04O"[ *1Kf'3d#h ̋7a^Jz#}x^ l-"+R!~ ل:躄.:g9ZIDFG-8Do 𿢶ƽ'ڰ'LTϹO̷mpTaG?aV>U8yGWLapxqROc0s:Àԓ:KֈW;sz]z#)ܔth$G-EmqIhY kXXl31P#ej:zh\DZ;deHRo!.r #/i~J*bMpUE z*JM}i\a)P: $^a1DR ?_|1_cȘ&t7@Rk r/zP^=\%-YԑgQf55\ mӌfUNl,n,aTgԂ3 LuYt%.>/tR̓5gcN&n6AKߖ{o;rfQnI`C?|:}t^9LR 4%.FNQFG_ 'F@|(ƧS׀Hn)+ިqo `L#^$1]yS0QƒVpG[%t0nXF$J:p&ñQh] 9W8v3 i)I-nG !><2$a qh?]ɒ(BT =Е\ Bji+ ߾1^`=qyWUp_h WQ>t~Dҩ٪<74'ொ)Ka"D߫, =@E<9_SS1Щ㠢3꬀*G3{\7^0'=镹:'dax&FL@`9֘/kxɤ"?|?-y7 ,֭1|lNnU5_FvJi23ɡsLLyIF&Bt* [J ێǼұn` ` #%@zY]v-q8DxM31?qzKٍ':9Avݵ5cfǀ;k{Il3]Hb~%Lab!ւUYUu#iGp9Xe%]7. GL[|q ͠/C?;է!%5?uxkUګA),N{1]Q~ODzM\"Z)=Es64VR$x_(*G|Cg!xN\Gٚu&3zS8[}쫎Z6B s 3qyT: ?_x{B+RݖYÉS]Ùr5=_K2??к\w{>(iTu!yoR{^1[;uS.ӡDHtiGm9Ԙĉ /ukQٻ2o8ݍAz9vSO23`RJѿN+2j=38:n%47^+Wf"I#pl왽E) =8XySvݼp>6b%y4MKwdtͽQxOi?5^ x GTEc\phyx:B8h%Y^Vχe==qiȱBW.=δ;H#6.x Baʅ3b$}f#iRtpRLY^RW:)1&.Urp_AG WPd4N\XŁ؍ux$ƻK U'9!) ?M| bDv;ٝ=+mg)Q=T6Ap=R`"i!gLx:mi kjrS)̖ird2p)FFtHׁvgGOUt@[& ֕/I:=) 0@m|Է׷nIЏ#x򮛔SԅH< Di!WZI}BlݢEbB$U6+nҀ +w7BD=Dd}&~Ԕcc :y1Xin=P5;ZS5a{OnvT`NJ[o;&𑎙(.g?tL:͆SNvUvlknF c5UvHV50#B3VE~$q3؂*-FgC^\(2\9&r ќ 1CCڟ;V,uX;HgZDt.w2"N:QMYmtFi8Cb|-3ke` ׻/^w>ܫ;3>c:S}1{cNC#~/6^ YnTKIu[28u3Z1"熬y$QzT"GєQIXHé,s|-0,Z.1 pR7hH-@ύQz1/xՇ3s x<>R~2_ɥ Y㷢 r Fi絯p>TxY̜"$kht4}vˉ3cI"6ܨLӕ)>ca83mr-y"둼Fj]&wC ޮ c׏BeuńR72[EM39h4sF/F 4Y{u]͊ڒԃQY6,FS-}_ NEAHAl ~̕h )v|]Al.oHiThKZdT-]j;Xgr U (x5q nȾPd!=(bre(j|?idC_:E]X˶Q؇k]0;mƃ,(& lTQ$ eɒYjfaq+&z ]qp\97qNB I7M`7۴vnJLaξ sЙi;2f[! Zef$ IiF ۝"9ֽVj79qtFCoЄBBj2AT["Ɉ"7wAcۺY~]ԄIzCuADQ >κܪ*̜|ocRy! VU1Q7ҒU lKKYF?=t+l5"ATvj;t;gm2CN<# |&/XuJWsEY~CKrE`[Z(RМ0KYS@|uX$Ty'PTb.O^3ʥ WUA`:`^NsLdžP$e{zY 8˔f`1Țԯވ*SZ㒛Vu槍y0>7&ze`6Է9Ij:pQIT#žP+A~8]fm$$҆H tdHUBU2 v%\%A2S=׾k)F8)1zL "eb!q=GX =C8h8WnwzDxͧu756ҀN1[׫Bt);u%=;ʤZ;s^t߯]\ %X"5 Kso\ؗa6JkDppm|]Qco2X4334ί >c&Dڠ2;MO$!'$FV𳯔1BGO]Yf(U$B[4go]M6Aq(%.xTe$o:`4%ߏW볔Jq[k`FwI2.^Qw0M Տ/_ӹf3 z,ODWbE$lҝQ;@YTz㲕Wk췸 cCGBA/N(7. ̳}^m1 7EգGTi\\ $NIa͌g'K&O?ִl^<N Mk 1v q-x(/ ?9 ^KNDt$(r.mhihcȠ (UYUքQl^(tETyMÑh P 0Jv Aŀdݎtz/ĭpg̈Hn/"X޾M:#p x֣^px;/ힾ֡W:!75k7ndz `ٞnc8疇ab!ZCR6ou^DD+[\ ;b rJ *[/C4k733% \tid6jD3<8Gz%P\5H_.ٌ;j༾CT@Rd)KT%#k~CNv iQUl#md֮b[\|4GR܄"Xٶ!\ j*pẻ\4O PØ;v `WH,nGtooZXUBp(A5yBzsP0j6d;|$IPIDI"</Y( Z28hD2O|=mcDRxV?aL;PAcd' *F`3aHM@VHw rX/I0'[=c.un*$mE |˕ꁍ3S촀?b.3mw sBCqwȯP5EQ9:~Y*ߐ+7\^_6x~@ImqBMJf׵?_}zi8JHGMd{9d8ߒ;{+u֌aph$F9IK(7ɱ6r4+й5Ӄ^OToAK'L~cNl)L9A6h vÁ%[Bjs1~W&Lo ӠP"">g9,t+z˙Rjڲt45#d5ނ#5u-,OG]y H'ghC\ߵ+P7m?J[^s.ruOop22k_qh c8M=B2IP=C5/F>Bdt7)=2p;,^e8F!&K;GAPx0!hCb0f3$t[>(zeA;7uD1~Ěe),&=O> wӌU޶MN]i\ݛeV3qv;^,7)X0>^<-hB{2Q!efM~`o打8 .N.Sf#=MN,:Sq4,H.lfk'E8EM;Za88X]*p^0A ,%)J`zj;grhn<~芮B4j0~WKH@3 Fo>yiopf*'*(=H+7 Z`_Q[r;t@{_\+\8ŀs1jP xFxae^ nҋ@L=̯OzW cL4O]DDT$q_^ .Ӈ<{=.lfԬOS]:Yeʤalzx>EZWdDٝXSow=2yG?'?pRg!^k-w,cIEht9*;ơI8J8 !eLsLY,FnUSǛ1mqbm@?aR,.  II#סik"2+߯RZSy޳1T0ۆs|Oo)93dF\+uX𫙝RرOڪx b5xA=ֺ̍3(r4Hr]}H~ `h!ҏ%d JLYj-ut\vTOG1ìÄٞ53֖pk7[ ^BOy \z㪓t Mm2ç7.:^nrj!^w@ P7^IvǙi0__p+_u|puXHvie -WcdZ-O w]v\DM&/Fˌ0iև JFޥ5Cpض:ݷITu+LJ+\n >Y^BJe0l3~Cӗ;YalFv7$Y5k Ȗ\e^/@s PjŒ'ȆM87ʔ"+7FX|D#,!Mع |5.s'=m?Ԁ`ii()ElػkXg+ܹs'SRDSjV0:+ F}ؔ#6pe|5~7fjA JvjJ n|R'\t,(ι2- FH ̓p=COYIZױwG 5ÅW#FH\7u~Ocb'tg/gmEq:-HDݭEWv) u*ykOp ϸڍ8@(]j k7ƭVDn:_Hiќ7~p{ᤚ)vB "_YMKKz0lO-QX59{<C\[LI%dHkTsyaíJ~j3~e*\\b\Wa If.A T5Bwm~*hk(Yad_2#6LjN[Z23%5oczsTT̙H lj` fFpU.τcfP妤TK+{ΧT,ұԧsA?d@iV|E6;L>1l00wIO`5{b+6JzY ' $CL*ż~<q_+uY:DyExBc =O'*9yv}2,W\t@Vk5 ,5%Y>_"嚈h#c{)<3M5uObS,iNG)qz(&Hib!.2O (vw,ҁ`qN]X=G% 뷪43eX\ @!`fR~P8[~ UycFT`RƋ6_ĂstGȿ褬.=Hv gb+%0!lQQ1YAmxp}|[CƼ2Gߪk;c(։;Gqfj6Nیf-> )@o.V3^r-&[]lZYL/q~'PC (_).ЪKLڮ;Q1]N!|c44ܔ9ىOPl}NPd6t 8}h?""w/wF!%3܌~ ^t^٦+-ԕnZ(ˢN7A?ѹM|cҡos,wEGIxS a=Txg6;?wظKDqPv.BlHgoN.ο/jUXGaOj6+|\7']tF;W^_0ߜ:[gl(4suA("N6׊k2\qdlE`wgN]y2?shc(h4(9oąNFV7*b5RNʙZ=#1BZP ;/p8 uUBvmn\+ A4敍n7KsV.Т FB(sHa}TLEf(#B6Ugwfa[p{!ρ,Ad,t )e ))x#r`9} $h +:Fy7[G`iII<9XU?ޘQլ!9ArOφzy

    kj1q}=Yϥ˃Bkv;Ѻ^Z26`E5̙G&!N,Ńv\gHGD0טt"QPE4v` ܬ=2r@@WbcNF;͐KRh'QBrj->9%DDB_j w^|rg6]leF_.=IdE1Wx8jYz^Cfm$ '+FQB*RaDth,VQ S PlcL4-O_ޖ6)͚sLUA MFk@pV x_>W4wꁥ4)+[tY7K-cTƯ;6}NI32]̫&x-adswx QX7WYiV;gDŽs=^ wY2{~tN'jO$1b:Ogg{E!Q[Gf_^(J_bQ}-"nˏ1 ^Kz!Ջgݎ"XRͩx( Oax+p veJYB5]J^ >{@,xSa"?<]?MĘvZ.K0ayqcH3oo5N]:/j/p(9d.*L%&baFZi{g3׃X^IݩldOg!#[^nb/ttN:CFwd6)VP&i9_҄E!`-c4  ĻOv>+X"&M`=Q:! `h1HwYz8>0|r$hPf׎:ra ;t$pG]Er!q*E9f}'7pSZ{徇,`8xZC(1jEӥ'0<jw5G $>KM[tbzc1θ'p6̐sږ?"`b #g)d\ߎߟ| N˗!ƌ2RIV'"=":`Vy1uL/%1q*^uL3@{scX(t6c~Esx0Lobc$ɘ48{'#u`~2饑ˬ"g~\b] )AŬ񆭕B#oKQRڛ_LDv w7/zDʟܾ-p/g~_[ƀ*j-< E&&F PS%h ЬpCj@R=:!0X nj~K(4;1awH" 3T릯w-=ZKU@$-5q}@|Q&)e(XVsjY 5+L~X@_I;k_?7WL/= `ab6 )S9PiF5+ rvs)9lEM< H8Zl6r8+jr1o'9+4c$gv=*f41O~^&Waa*J4ԇI9Bb蠪q/+6' ăcRc 3դ) {tM*^_\~H*ſ;!%T>H`ߑ I :K΋EZEPR΀s~4<D$ ]v< ==ρdTpXG&\:(Mafj D! ؉s}EDv_=? khd2/gϠW KlZ{axd 2?3 +QYpZaA fnׅ9 ѿ˪ͯaa k?J-IDpvmە&5F-zo6$q(4[PN3e JPsL 9\ oVP  / BQ c:mԄz Xc,#^|CE&m@_<_ͨ4faLM-KK(fpezuD7ņϾFAIzRs^vk3)^ъ4ۊ= IRCyyiQEK>%lB, 0b$0̰ݒd٠ Mr&űLJQ8XPĚg A&ӫg ~ 2]r1B6#PO' 2tD7h ljd.[1<|𪜫.pWzc9<`) Q1vwY//s,B &w%zJq {~0fvmiSXh~Ga+D8m?׌RXp r4&Gb!ah_ dHԅ(S@S,˛/6Of^!Z 0)Y9xp|OKWXp[c6˛zПLD}LJk'=Vp. pA֐]~7K#2xIWJ+r)mĉpgfsrvq 62U3H%:ҝ#I{UxU=VCNqCtP7(y_OM4l 36;1JU8"=aU|Ά oBP>b[85(k,w^AW#=QـTq` DJc͙@@Tix0qfp-pDS[ C䴷VO Bh cnQ`ʷ ʗ#@K[.Bv Au]%(c;{E!qe:$XbeB`5= ( +ua7a@^q ;f>/;EkW.F0] t#5t48e f%$&A/ lAM4 6yK1[Ʃ[Oj[o>1H6ξx]q6A`G3<P7gP[Xg/]֭XB]eZBmkJ^Ys ] 裃o18{3xq&=pJ`ͦtF# 2Ҫa_=N7%Kr*}N2*\e5Uh}JePAP$)8L a>e25j$Ԋݙe ;_Pҍk܆4!@m[/H|(/?J5a OPσbo^w5,DKTbb $>uLtU `Hqjͫܔ\F=7_F͗PG֨İ=Z!5T}Di]5x%\`a\q׮-˓ \`okG: .X6CW#I‘`Ĥ aoKڕ1Tm4dzo79,)Pv3@*erqs^γ n,uY#Y숟<◟>R|D >Z|U*ɼEEtgƁ_f f40Y,(:!do Xiן'$ {yűw7s螊' BWWi5v9=ȕrSɉn|&l9%rY攎p#a:ƀV!(T/.& K8) !Hvf#M":dOc™Q2{b[(ҿy]PoRn0ĽWA3|6+MFwC 4'"4J1~ hGr0~>3* Gyw١hMf](w~ҙ,}]w¤  Jҏ\( &sϕ >ws V4y$.N -(**r,zЊ`!A{,Z^b{RA| BkfiLPjp`1?UOiesX`"_01F'Jd(; eOr ᳮˎZk MVtqAIö["dh-`t  wiE\بfXBBs%u|vJk.dK6T@,B*69>AAj@AW]J[^r&zc-\XҼ`5UFE$г5aOP9m=DǙEm6TĽAqcHdƣv3`X)D`Tf:Lizx|jb,cZg8UEĽȝc|[aPW 0SSvFq>XaeE"!GP# iAQJ?y9D/zcK<w>rU7o>,/K`!jMa7E|<ϷLpzƴ a׃()ko}grݝ›͜x;c[`{pch߅a/+0˻91j5MJ-(jN1*;`>_SKLFl)Y,!2j @O}>Qd5Ġk {R% T6P3"(8(K+g_̃?=R24s1| LRa& M s͚#Ưx{9E CU8{wN>RE5KSG l%.m4vDH说O;Ӊqh((I] zJQ:^Vl{嬙85\8JfO9'9fqxA?tf9!1f+UESoz @1uDL4" #fo"Q=Хu^DMJhM6Re*< Ij7PfPڔu (ſ%mk쳹=3>:pC;hPLgCNrե Ѷ mwIM?dm; Ndxw.'5Cu y"eֈ 8?BP.o@$ S4҅Q( k*~LH'i/ &AĽr+w@n?nJMyQ3n!92nx-·_OPB!s]>p 5lw,9."<xO8d k8nNvZnx9vBk7ZI0Fqc!C {lW nYJq@ܖyys׏?5>LUSDGt?2&d}uQڞ?H$Vx[U$p[ͬ "π,y52J䢑zI }~}qN3r6R@6 N/TT:3ZF:ia{%AnR*3Imǟ(E4951X&nۢduY4ĔuTjxF52kͲx6ɶ'ֆ&%h~8VYAے3e}ux#'XЌPDZ2^bB{,x/A4APF EVG G($DrPAe;/^83$ \3<1H9A5\猖ւ51a$DD)ԹBg#XFʲ:F儉W*ii - )3h>wWz-H{em'`9hE,[r &fZOiۓw/>)\k]ǠKW$pCe> XX_H#pyo9d̴g- 20R^q8j +W6=W20!ASfϥ {r*62!bku֊FȯlQqГM~& -EGj&S%I藗fU[`\c;M ;!I݄R|!jjtz篱k H tܔE6\ME1`Մ<-L9B|8@sV|͋Ge0Ga E2F{fRbUDR8_+5:S [6|S-q& }kf)NgzȺɶpÓ xO acc1$[B1kʋRl}./KڌBfΙQ3!1T"Ebo\5莀ιDRD2aҋ1|ih h;r1,=j Jwd>7Muq\"6^8! nr ݇V5_,a:wp-MDTJ#&Y(=B]5!Ǝ@qam̛leLq-Z+D#5Z\8$ SJ22xe- %9L>~B E! G/%B(y=~t̕ G4'"yFFأV.D}Wj%)4-vl^\j@]&YׇL Y'm"qΡUN,lKBVvaXtD%m A%,ѱIx cE3+0%9CXgx3pb4*,n"3 °L"&a'R$ޤhN.*h a];HQaP2RB/ExLg@'gߚ-PJ{A 21{4b_xIča!B]A%U֎[t@h\9;<'C1KUc.1z8Mxu" 'RP%HʄpQ5B/ْ %[Ҳ̤@Ī܃B. N2C]BW Z&ur9>yg6EYwG #&Gu&qO$Q:cgICqrKaPJSC-1[@x4Gg`+!B7Nf‰s"gBe2 5{=o) q._ssermƶh {h}8{{Ilp)WU*>+D殜z۩o+6Dw &49Yp\P3s$+Eu^ SIhJPBio`3>0.8`C?GYmR'@<(L]>¯*IY2ʣ8T #v޽zצaq\VXXzc/6rVj:3MʬsP|ǰ^,/pAh`|<;;rv)P`=:ҳ#bD4dZcʝAm#FM՘9]iK4697/M9* wQ[":;_@q"h%k #aSԀKol A˳sAC5!l>d}<2 [9"' J^FQK~6]1iH?bźx78<(>{W֋c5+f1.D]p+)R 2- a a`3իgUV8znḓzPLۈGWeP[@~U{b+~N,*0"]bZ-Oy$-=P~"™JmAyAͲj9{RъeP&Vv uԋ;lo#N@'#\cT 8eL&PahA>G4# 8=֋fi cc'ܟHPW_}8jx/->"6`vM Ō6jo\ޔ[@ hǨ~<7 <[ `nZ A 3A/2H_fXB z8ľv0k g:m Ooett+G%1$NowMθ''+N-h܂g֞_P\+w]knU oOuMyB=h ']u@EE؊_h!S.)Fqt{JD8]T\%t+Pud&3~ E8L9{͏`5Υqonqg,eg[S;5T0IVWW"T~-@9y 3j a[i:!(8gdv[BǑDzz!Lr$ a~TE:_?/W_E$ѽWhJ ^{|6dd[m*H}W*P3zPmaCs-`%.Û]iL,zDN} b}-jA-YCZ yޠ'Z2;LRES}_An æ9zd]rȪ3- u.;ݙ2VW#b.1̟qr}T@840 F-AzMyPLjϾeƤ9KvwP@U:Jy5VoAt@0 yᶄGKSkmxǩsUR`vJ .L4oh9s)-j45SfSؑ.j8O%n0 l/=6dƲ}J~F}G M=y‚4d vV[$Az$S˜}#<`ÁY4&5z$7/=J*,/VH=QQةʍ@mPI:ۏދ=e+cSH[k -KX# |pnyXa/ork3.[ـ>gY&,4I, bk+KP4xs ,'}}py/jW&_su[q py%Zv~,nȲo_06;G; tm2=[C`F r=Fmd! {LrY39fw91uA؆[|*A|G,d3w$rP#ucr SP1d9Kؠ@Mn|rBPhJvZϝf=?crkQ.% 70gԯ鋸2څx)]avBD6J9`{*I.P5:%ㅄf,EooRT`aBDIГ C~۬? t-m:`ofpNUi$Rq7Bh(0D`~m֡4o֠eW Ѿ5hۭ^ٌs3q9q釋;{ rhNȣj=A[T֫ ;A >!^>w뾭񧉖útc (lHq=\.T^24nOf5LV#7 8ĸn&鼔bHegIm0>rN'ݧN7z\%5r/QG8*uUQ0߰sFkKyd/FɡRy2WOLZv0[͏£3Gʧ^n%Uf0Nel"y<D6+H&(ssȇs :ZN)H5(LbG3ȹ+1Hns/1a89 q(cM%.T3}Evl%U^9 &)G&/rA$:O>VH& p&cUGfWDt.Tr:/W܉J9֊_rq-:h*x[H!ɏC6=g QQ@&r攇t,,W/4Rl}ae煹BGC>FRyzö܇D l: HiuJj-H7_t G C95vWFp"q2@c2$[FZ!Mbj1zbI[oV? 2'(Z[@, ze7qa jamzA,(JO5EQY j:.gFCxFq?Pߡߦ!N^c",Q=7&N;Qt]8GMjFξ `NtšϘl \Xt^}8{'g&$IX)2N].G@,qzؗMƾf:iGDEJQnz%5; .͙9If*D'w"xh)sa6E5 bPf':2^_ϟҙ,!qa8Į1j;1;ftʳUh6Лa_8瞍$ًq$fd,4! - F_ҥ$,wQ%³`7cltaْd+"?1#X́o =˹}oHFH8_тpY#RJ~38uxC౤akszy*':άTSvd޽z"812Ϩ{퐍%eL'jۣtҨ xw?m |@(4!/!1OiXlB-L|%?hdּCCQxF4(t^|WxG|*u8,!-Y-FeC3ZB dzh"j[#E6v,K{- [蜼*sA]bKxq ִaP؇f8ȇ.ƀ $Վa4@#GMRDDZsD}wpYrѲ<^qӸo' ^cGp @RdtXhC"U6wg- bH'z41 KFnpk I"N"? §6r8V#3nNISmSm&lE%1R;y!Z-xs/7w$6 VNT81i1Nn8#L:ǪC}X^SP? ͞Ii9mq\:MckxxfRuHMjmWoGdcbk;$Å`A54|*u8K ֆ#KNݘV% M j_q‘'ʵMR}ug5PZheSD*3%QQn4Rf3sZ5釭c'VM$3|+=ָTxjނ@[ׂXIwJBP{0m0#HoK! JniN揪GGVV)$QiK؝붍iSfHgj2ԧfј"@^&Pc!g79xEJ)w(x5^%8m"ϦDN!I&[pfjyNoi& De(8]08X٣^K̵4} 9QgvV.I 6,z Ctpq mM!DR0bλ F8~.9N3 mU~Ss5Uի\K͝|g QfM p3TΩ64 4qrWlq3;[  V>|lL4>6n*=Jv1kԍqŁvL:Y~/:C4Іo`eF ̚^fA=EZU# n$CV`ֺMؠ)l.s 9iΤ} U p&yБ^S ,e]n3dѰ+کt[;w;!{&C;RJjNXmz@ֵʭiq/LM j,id WNߣ/DK!w2d85joJ9WCJI{ǏbR*rwfq9 N|/U3ۣ 37'pEګ-i2R]I//Em7tM5{(zZ@ҒXH99j~r-Hٻ>'PI!15UxS^1뱴@ V\/cpө]}d:t^Bz_UJhǧ* %N~pS,+jE{GTZg֜Ч|z-qɪqY;٘Ӟ4s p/_,(jU9AJ Ob\GBB ;O>^pXVTW^#0W]EJ&]&&Z:BUfvD& t˶7wYQ(S =_: , κB8t^AS#ASM9 n "]턯{J x9!fRiv4 ЃԘ- z@Q =`I;<} d/bixpDS0t6(lHÑ65P\'bpȲп[ &Z-UNLm.6)N1_^"K`*i0HAsʄ'UpUmۼ=hVa@T 0k-8\l%y|;Uqqh5lq̩Dc#V¼#6e|@4lϿrVӓHENFz3%'B8V45sLPW3]|92lgǼ|˳TGok?Hg.9 Ò:ܜ/(aW,])0)U\``;Q@Ԣ$*-Uɏز_O'i 5H' <!Mv|"k>gD\9AX:e g/bAMh?a e.> , x-}hCV[ս(FҬuSE׹MO|"Cn`5Tcg}MY_ "70|ٍBXtJ&t$Z_kQƯpJkW .RMمL!3,lr(r̍!s<&R̎5KŢAÛJֶu7cR? A4QR:78mD˅3KiL%D18SJ W9RzXa(en$l# (e6ւnO/1Tр`\Ǯ3  -x&v6 ZLdmfO.|t52-(j'iu@NPA`g(\\?ܰ/X6I#t gԄq|(s%]mv9OZY}(.U\k=6f𱏮Ro0gѭ3 <=$ p_/%tCْ\AfcׁFa,LHw=hM&rzm#iȎ5>"zeEgLԦc%$ ʐi;>.}]@Z aFjX}MR Y+\8>u ( CӁuBz\=p|ukcԶL6ҠN oۣScG2VHGwm.E9\DN|EmfGU* c8FsPf,L͹C[kF"(a~LK3O;3';Xۧi0C7g}~koa>0\Z oU:wRY cMvv+ëhf972ʀ) ui9/H03!p?.:~Bt ToL!+}j4R~8Y}FhҨ)& 61mD8Z_ a2+ u%NEczH~J)aH kIBh J @z~$3>mJ+;(Ǭ807mj4+u'qTkd?T*:U\lB$ beqC5+zcz\)G<,Sn3ڊnF+mSs]i0N_}~vPL4~F1Ρ`๚!s> >rFƟsg9Ě λ{(h )^Z>TW2 lgܜ 6+">{֬7sZ! ڼ\lG23)Qj{M,|k-, }ӌs-2:I@I30mΔZ|wU[Qb k~U=g:+?͈Լ `6,r΅(#./޽4_^M1X*|lx5Uyټc>?a,% Z}dX`R! 5Sj͓((V]B5Vajo7u^@Ǐa7e~2PpfЧ+ 뤋:Mkʎ۔ۿnJAȗ_J@,4Y-^lٚ"fLđqn{RKh.-.+#ϖ٠/R0J %~yEwJ 󿝃+;uZqBaraʹD{Ձ4!9B7ЙSsN2\t ?@n;;hWnhm|bD=9n-cn2r׺[`3s)M"@\m%"t1IOCnLq nUp롱% G3,}/S=0{@4b 1x6k*VZ h:(DZ&@ )e㸯UK*Y'rH Bqo³lt$.zu9p߸靊-W)UU"čuw>١O8 YP\KzSԦ*dԻ9<夡n#ô,~4IfO.tmNz0d UlhJIg!!FVDDĭ.$ NϷbɝK@e%״5Nre xǼ̶FR>1Q6#L59գ>y:ԫ_/&Pͧn)BS {2#NH[!rvD,r?R8teЊ": F3K"(&. `HA*ѽdSBO@m6ԃba Umb9x4]ܮTI|wzugW;I]!AOmQub\m48\[ǣXp #Ib<ɍ0vİa)^<[[[mT%h]*W7 $,v+˃$mF!d:]ߩQw& 6@w!$$ٸnHieMzqQENlE|;kN o k$l!$IQd.p ׭G'pDFK|θz$w숢A2lJYRhmx[i[ F%. u cg9XbNGn~K‹0 k$ 6ꈵT% aeQ/nETm{Vdzt18b>c#W$Tl ZPU-G&+(;4TVoZEOj\F _AE绳Lm!D@cC|t8:irqsx MK|y~~AN̜?zb ƏRhV6&,s6Aă !E}N/E@ˤs:q] :GjN(cauҏ7= ʬF|Rn0yg^nCv%Mz#L;&W- ءbD':m?'qa}hW1OHCƝ|w֐D;a׿!pB岄΢T۸MO;_8m|ff8Bb[i4H!5+ ̏T$#`Z#UrR!|<us+ UI}а{ZK&bCƖOsb-ѫOr_{ B>qbf|igAƝ%6aY DƔ2p gtC8”7RȜM9ӝqC.9ak2S[h+LE,:σ8Dz:Ɵ|. \u~}s1X](OMԽ3=8~KpgvCS|-Q:J˓H}(u/vl SukM[.q{A;O`Ihakeyˁ]Du9x_l(&ʽѓaO6hl1 I8+gh n=rVJ"KVz@qPP>[: l?Rq2w2'p]!Tcyr=~^-k=y^t?SLC;ȓm$BLhr{pP~4a#rOļG 0S$$ZJAùug$ATM0Թ%?40? Eȇ-s/;ҲƏ4Kڰ$'Rd() JoOum ;MGRB[Ґ}"a~ު~s(b)sBߠǷּF ߋ; xA;(yvHjZ;N(<#ÈCh;ޑhAS$p."GxBQ>7|/'XOX4oAw(ڋ Lm XIkZ0%i%{vb=smJ[R^JE^2B Y.[Ґ~n %M D`)Wa4tDO˾//58w,q+w'+%_yۿjh;>HUNEF׃WEfhNҕt;m)܆(W{fn۝MbqchD^V6uTWB|hϸ6,J/.;sOfzZEmB{ΣUKj(<nV(5V|G̜ NB1.mKQ!2wPբH_Pok\N&$X,&֋|]#i)5IU $Bny;eFސrRU*%0kT~sor$[t'vnA@$%&Uw> NH,˩XSdZC_ -K{ɊF7VN>ӵE]lFn3?T}GB">@u~:xUQXnQNog`Z-Vb5 @}ay LZN=N#6P}H؛*D08OޜͥdJ6 '^դz+Jb+LZXR_e#4&J VJJ dkl9~doiA"ȴ0$iP-la>mY#K뱥D"ꅁΝ<}fǴM8\ C@͐#OThrCMz¨bLw>ݹ91Mؤa` esvgwіC{z̑zsl|&~C_:!\I(hx%} ؞fIF YFjyYbz4%PyÚZg!rfuC>zȑQ}ƣ Axmۥ{7n$ E RkۛOEDOڤs[A[>XtaDƢAjB.ʔԎEq*;xܣ 28 -jBQ0a}D;&qZxY~i:<4XI }/>NI9J.`"vL(OkC*G,ckGh?>(W2NCz3\oRwa$o@hT{INC?281ћ1 H/ŽLnD$^B}^}(- \7[?aq"Zr7"txUl~G-e{;`UξLnn}bD<r7ýe8uRB&oJ":[m.gu$Q# "秿TDn[Xbm\= ^pՔu!FPdHfXd$6Yʡgο&:mmj!QpTc@&yv9Ͱ`պ5 (y~˛Sѿr|hOC.\gOaj}pa^]mVy~m{g9E|(}:ruVGZG"2ƃ*4kԊl^' \m(Y ~PPPS}$;AvL%mv5BWACNK._ܫmTC)qd=7b>YNV]&:!M&¡x}8O/y yxpc&D#G7~}m;ho%r[G Bq+S棉Jeω$hM'x[D$Ta]<]Ճwn)р+R~R^{ {kSK(iu>bB֪N$"52)2s!.e:UZ8$ؚ:{R"g/=b͋9X'ݕmUs*7mP[O9$mp擫ĭT7|ey:o  Z ūP38LV͡yDzkuyɏܼEh7,E$s :ZwգW #6l@C:hNf6(=WwP9aUB|kOCyC4c1j3Pˏ%@e2xs̸.¾w<٭12(3qgs[ >i@>.4rä{B'"W%OYԲ%#(._ވH>hJ+_y=k~z6}1oOjegmlu}#seC I0ZɹWg֌v%M{.9g>*!WK ~ZZw`#(>ъ(箭1J5Tmz#lr Q﻽BjL_6tus*_ 9pn=ʖSX/𮝾z!;}$4@1q+fTQףּ.s JQ[9'oVٺ38"#-1Us0g>}ݯM5 P钧TIM|$؅p~=yشd> ~Mua7co`V;L`"ErQm'$nAZѪC$Dek('ea Ft Gw 4F,e?)/63DܫI<  s-ObthpT&yFEg]a\}| ;$H}_>&BFjcH"؀9d\YYoǛڽ'H$@~­3Is6n*v{z8rZOORόEw.0eBli{C[Sm`e}f1}{mN-#=qo:RMh FޱEt\, g-dzSl*q?0̞x v~q-C/f^[KopP:. O{0Vݼn}VSc1dF ]_bg a"X˕wKa#T_G_ЏH (؈iy<H K$Cp-v ;M}52A?#&a#.,ъ~O#t?* a2n3Ȍ}_/PerZiZ.;}RcsLc>.bF^@ A7nS 0ScKx46"PbF&WIk{(HŔ?ĩ``%G{ڦ}ڞ$%}n5`oKtd0K {1~jHk62KVcی77bb~Y.˂:VGD@sjgɺbNNE݅8|+.ϘxQB2#9&UkA_}*vmҿ`ьIQ!s8Hk( 9 c2#IͰrѷCCIֱ͋=C6d:!j5O|y&5H+G7p5q| LF\vF=, ҡ8эFj%Gmǿ7sK{!$F<>r0|*,A΄͹837Ǭr+swvןT%' 4{נ%iS(C[>0 x17?#O$d;7L޵mi ]:rx[%D3Bx+0`Lo['8ك!kF&vk\oktdP$5}8h@rbݗ`L3ƌ6~9TwwH)]|=>׵hqIǪFBgٝTQTV!1 [pt)%{zې%^OS$Ҳ9W 4%5&oBg#Խhn]&b0IPV쾡/o˦ߖ=DdRa êrM>]q) /?iBVFXq ݗ9C =sY$H85R#Po0{ FFzԘ#drn*N(̥LdsAf ᭥3b&3qVL9X_0l9C܈8+bLLY%(^A,y˅ĊjWz{I 6hR5r6 =yJOj! ^O2ٳ*x\4!͚,\4;aw|{qr H[(3'KhC(5}݃;͘/}IR_q[7~ZPk#&3Z]:O\EYhjM-z tt&ţ$sa5f(Is4Ef|tO_ʞK_2}TJq17LѠ-˓ar2(4 ;l.{x%4(S `pH G}K=r悋c_rn$`.F:[dH<[>߯0yA8ʽ1SEn!b/٣OZpxHa:WրBM?5-}˟-oh򳚑bUvp޲ 5.V Ioga#~|&!A{IyB(Q؈ܠU^d1sTJnl)?!r rh|oU9u]\Zz`>ѶABrI3 !͇| c^F!\0p/ ֡Kw逖c=[AA!/ioH`MBGTBCR<!EԄ?. =ƵCebo\I#Q_ Cxa#=q, .";{#<߅+hx_̔}F^牌{wiD8[AذGGX$#ERžrN8(ܹ`~áswnFPp&:vcywIf @#BBCxg?bn=a#t)@sBa4f.B(@C @OCn,Z^<®V6Co?hpoH9z8GԲ/'T7ym+Y8:4eUGm;;~,S>UMP6\\̗>]lc_=SYĵBPiԃ8a0H{ >rR%/=e{JJtuQj<[KjM$Fտ߹AS=ZŚRNHsuL='Ulm\4:E6.WU"il{S.r}$5Kh]C4W=b;0'XC㻆Re"@ܳ;'σ$ӡ aYr>3UGx„?Rڄ{v6ȶS~?ZCI%Rb95N~wkǐ XUfD;IDQ]g-/cY9A*_Ogdzzʩ٫1festdoc-1.4.2/festival/info/0040755001741100001440000000000007332366672014430 5ustar awbusersfestdoc-1.4.2/festival/info/festival.info0100644001741100001440000001060607332366672017122 0ustar awbusersThis is festival.info, produced by Makeinfo version 3.12h from festival.texi. This file documents the `Festival' Speech Synthesis System a general text to speech system for making your computer talk and developing new synthesis techniques. Copyright (C) 1996-2001 University of Edinburgh Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the authors.  Indirect: festival.info-1: 954 festival.info-2: 50102 festival.info-3: 99530 festival.info-4: 146559 festival.info-5: 195953 festival.info-6: 245547 festival.info-7: 293749 festival.info-8: 343237 festival.info-9: 382209 festival.info-10: 465327  Tag Table: (Indirect) Node: Top954 Node: Abstract3127 Node: Copying4235 Node: Acknowledgements7497 Node: What is new15748 Node: Overview18042 Node: Philosophy19299 Node: Future22823 Node: Installation24885 Node: Requirements25409 Node: Configuration30748 Node: Site initialization37652 Node: Checking an installation43709 Node: Y2K47343 Node: Quick start49384 Node: Basic command line options50102 Node: Simple command driven session53167 Node: Getting some help57179 Node: Scheme59243 Node: Scheme references60191 Node: Scheme fundamentals61064 Node: Scheme Festival specifics62925 Node: Scheme I/O66799 Node: TTS69983 Node: Utterance chunking71293 Node: Text modes74395 Node: Example text mode79134 Node: XML/SGML mark-up84207 Node: Sable example86708 Node: Supported Sable tags88404 Node: Adding Sable tags94185 Node: XML/SGML requirements96722 Node: Using Sable97624 Node: Emacs interface99530 Node: Phonesets100885 Node: Lexicons104274 Node: Lexical entries105207 Node: Defining lexicons107372 Node: Lookup process110364 Node: Letter to sound rules117075 Node: Building letter to sound rules122748 Node: Lexicon requirements137119 Node: Available lexicons139892 Node: Post-lexical rules142454 Node: Utterances145895 Node: Utterance structure146559 Node: Utterance types152411 Node: Example utterance types155741 Node: Utterance modules158496 Node: Accessing an utterance159772 Node: Features168162 Node: Utterance I/O172064 Node: Text analysis174546 Node: Tokenizing174805 Node: Token to word rules175626 Node: Homograph disambiguation178952 Node: POS tagging185818 Node: Phrase breaks188087 Node: Intonation190955 Node: Default intonation191967 Node: Simple intonation192710 Node: Tree intonation194973 Node: Tilt intonation195768 Node: General intonation195953 Node: Using ToBI197840 Node: Duration199828 Node: Default durations201572 Node: Average durations201931 Node: Klatt durations202486 Node: CART durations203061 Node: UniSyn synthesizer204679 Node: Diphone synthesizer217462 Node: Diphone database format218646 Node: LPC databases220897 Node: Group files224657 Node: Diphone_Init226263 Node: Access strategies229552 Node: Diphone selection230889 Node: Other synthesis methods233478 Node: LPC diphone synthesizer233862 Node: MBROLA234617 Node: Synthesizers in development236008 Node: Audio output237471 Node: Voices245066 Node: Current voices245547 Node: Building a new voice251466 Node: Defining a new voice266840 Node: Tools272393 Node: Regular expressions273037 Node: CART trees276630 Node: Ngrams280019 Node: Viterbi decoder280817 Node: Linear regression284423 Node: Building models from databases285799 Node: Labelling databases286608 Node: Extracting features291153 Node: Building models293749 Node: Programming297591 Node: The source code298083 Node: Writing a new module305806 Node: API319736 Node: Scheme API320257 Node: Shell API322727 Node: Server/client API324032 Node: C/C++ API334710 Node: C only API338135 Node: Java and JSAPI338603 Node: Examples339268 Node: POS Example339568 Node: Problems343237 Node: References345549 Node: Feature functions350233 Node: Variable list365623 Node: Function list382209 Node: Index465327  End Tag Table festdoc-1.4.2/festival/info/festival.info-10100644001741100001440000014166607332366671017272 0ustar awbusersThis is festival.info, produced by Makeinfo version 3.12h from festival.texi. This file documents the `Festival' Speech Synthesis System a general text to speech system for making your computer talk and developing new synthesis techniques. Copyright (C) 1996-2001 University of Edinburgh Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the authors.  File: festival.info, Node: Top, Up: (dir) This file documents the _Festival Speech Synthesis System_ 1.4.2. This document contains many gaps and is still in the process of being written. * Menu: * Abstract:: initial comments * Copying:: How you can copy and share the code * Acknowledgements:: List of contributors * What is new:: Enhancements since last public release * Overview:: Generalities and Philosophy * Installation:: Compilation and Installation * Quick start:: Just tell me what to type * Scheme:: A quick introduction to Festival's scripting language Text methods for interfacing to Festival * TTS:: Text to speech modes * XML/SGML mark-up:: XML/SGML mark-up Language * Emacs interface:: Using Festival within Emacs Internal functions * Phonesets:: Defining and using phonesets * Lexicons:: Building and compiling Lexicons * Utterances:: Existing and defining new utterance types Modules * Text analysis:: Tokenizing text * POS tagging:: Part of speech tagging * Phrase breaks:: Finding phrase breaks * Intonation:: Intonations modules * Duration:: Duration modules * UniSyn synthesizer:: The UniSyn waveform synthesizer * Diphone synthesizer:: Building and using diphone synthesizers * Other synthesis methods:: other waveform synthesis methods * Audio output:: Getting sound from Festival * Voices:: Adding new voices (and languages) * Tools:: CART, Ngrams etc * Building models from databases:: Adding new modules and writing C++ code * Programming:: Programming in Festival (Lisp/C/C++) * API:: Using Festival in other programs * Examples:: Some simple (and not so simple) examples * Problems:: Reporting bugs. * References:: Other sources of information * Feature functions:: List of builtin feature functions. * Variable list:: Short descriptions of all variables * Function list:: Short descriptions of all functions * Index:: Index of concepts.  File: festival.info, Node: Abstract, Next: Copying, Up: Top Abstract ******** This document provides a user manual for the Festival Speech Synthesis System, version 1.4.2. Festival offers a general framework for building speech synthesis systems as well as including examples of various modules. As a whole it offers full text to speech through a number APIs: from shell level, though a Scheme command interpreter, as a C++ library, and an Emacs interface. Festival is multi-lingual, we have develeoped voices in many languages including English (UK and US), Spanish and Welsh, though English is the most advanced. The system is written in C++ and uses the Edinburgh Speech Tools for low level architecture and has a Scheme (SIOD) based command interpreter for control. Documentation is given in the FSF texinfo format which can generate a printed manual, info files and HTML. The latest details and a full software distribution of the Festival Speech Synthesis System are available through its home page which may be found at `http://www.cstr.ed.ac.uk/projects/festival.html'  File: festival.info, Node: Copying, Next: Acknowledgements, Prev: Abstract, Up: Top Copying ******* As we feeel the core system has reached an acceptable level of maturity from 1.4.0 the basic system is released under a free lience, without the commercial restrictions we imposed on early versions. The basic system has been placed under an X11 type licence which as free licences go is pretty free. No GPL code is included in festival or the speech tools themselves (though some auxiliary files are GPL'd e.g. the Emacs mode for Festival). We have deliberately choosen a licence that should be compatible with our commercial partners and our free software users. However although the code is free, we still offer no warranties and no maintenance. We will continue to endeavor to fix bugs and answer queries when can, but are not in a position to guarantee it. We will consider maintenance contracts and consultancy if desired, please contacts us for details. Also note that not all the voices and lexicons we distribute with festival are free. Particularly the British English lexicon derived from Oxford Advanced Learners' Dictionary is free only for non-commercial use (we will release an alternative soon). Also the Spanish diphone voice we relase is only free for non-commercial use. If you are using Festival or the speech tools in commercial environment, even though no licence is required, we would be grateful if you let us know as it helps justify ourselves to our various sponsors. The current copyright on the core system is The Festival Speech Synthesis System: version 1.4.2 Centre for Speech Technology Research University of Edinburgh, UK Copyright (c) 1996-2001 All Rights Reserved. Permission is hereby granted, free of charge, to use and distribute this software and its documentation without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of this work, and to permit persons to whom this work is furnished to do so, subject to the following conditions: 1. The code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Any modifications must be clearly marked as such. 3. Original authors' names are not deleted. 4. The authors' names are not used to endorse or promote products derived from this software without specific prior written permission. THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.  File: festival.info, Node: Acknowledgements, Next: What is new, Prev: Copying, Up: Top Acknowledgements **************** The code in this system was primarily written by Alan W Black, Paul Taylor and Richard Caley. Festival sits on top of the Edinburgh Speech Tools Library, and uses much of its functionality. Amy Isard wrote a synthesizer for her MSc project in 1995, which first used the Edinburgh Speech Tools Library. Although Festival doesn't contain any code from that system, her system was used as a basic model. Much of the design and philosophy of Festival has been built on the experience both Paul and Alan gained from the development of various previous synthesizers and software systems, especially CSTR's Osprey and Polyglot systems `taylor91' and ATR's CHATR system `black94'. However, it should be stated that Festival is fully developed at CSTR and contains neither proprietary code or ideas. Festival contains a number of subsystems integrated from other sources and we acknowledge those systems here. SIOD ==== The Scheme interpreter (SIOD - Scheme In One Defun 3.0) was written by George Carrett (gjc@mitech.com, gjc@paradigm.com) and offers a basic small Scheme (Lisp) interpreter suitable for embedding in applications such as Festival as a scripting language. A number of changes and improvements have been added in our development but it still remains that basic system. We are grateful to George and Paradigm Associates Incorporated for providing such a useful and well-written sub-system. Scheme In One Defun (SIOD) COPYRIGHT (c) 1988-1994 BY PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS. ALL RIGHTS RESERVED Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Paradigm Associates Inc not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. PARADIGM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL PARADIGM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. editline ======== Because of conflicts between the copyright for GNU readline, for which an optional interface was included in earlier versions, we have replace the interface with a complete command line editing system based on `editline'. `Editline' was posted to the USENET newsgroup `comp.sources.misc' in 1992. A number of modifications have been made to make it more useful to us but the original code (contained within the standard speech tools distribution) and our modifications fall under the following licence. Copyright 1992 Simmule Turner and Rich Salz. All rights reserved. This software is not subject to any license of the American Telephone and Telegraph Company or of the Regents of the University of California. Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and redistribute it freely, subject to the following restrictions: 1. The authors are not responsible for the consequences of use of this software, no matter how awful, even if they arise from flaws in it. 2. The origin of this software must not be misrepresented, either by explicit claim or by omission. Since few users ever read sources, credits must appear in the documentation. 3. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. Since few users ever read sources, credits must appear in the documentation. 4. This notice may not be removed or altered. Edinburgh Speech Tools Library ============================== The Edinburgh Speech Tools lies at the core of Festival. Although developed separately, much of the development of certain parts of the Edinburgh Speech Tools has been directed by Festival's needs. In turn those who have contributed to the Speech Tools make Festival a more usable system. *Note Acknowledgements: (speechtools)Acknowledgements. Online information about the Edinburgh Speech Tools library is available through `http://www.cstr.ed.ac.uk/projects/speech_tools.html' Others ====== Many others have provided actual code and support for Festival, for which we are grateful. Specifically, * Alistair Conkie: various low level code points and some design work, Spanish synthesis, the old diphone synthesis code. * Steve Isard: directorship and LPC diphone code, design of diphone schema. * EPSRC: who fund Alan Black and Paul Taylor. * Sun Microsystems Laboratories: for supporting the project and funding Richard. * AT&T Labs - Research: for supporting the project. * Paradigm Associates and George Carrett: for Scheme in one defun. * Mike Macon: Improving the quality of the diphone synthesizer and LPC analysis. * Kurt Dusterhoff: Tilt intonation training and modelling. * Amy Isard: for her SSML project and related synthesizer. * Richard Tobin: for answering all those difficult questions, the socket code, and the XML parser. * Simmule Turner and Rich Salz: command line editor (editline) * Borja Etxebarria: Help with the Spanish synsthesis * Briony Williams: Welsh synthesis * Jacques H. de Villiers: `jacques@cse.ogi.edu' from CSLU at OGI, for the TCL interface, and other usability issues * Kevin Lenzo: `lenzo@cs.cmu.edu' from CMU for the PERL interface. * Rob Clarke: for support under Linux. * Samuel Audet `guardia@cam.org': OS/2 support * Mari Ostendorf: For providing access to the BU FM Radio corpus from which some modules were trained. * Melvin Hunt: from whose work we based our residual LPC synthesis model on * Oxford Text Archive: For the computer users version of Oxford Advanced Learners' Dictionary (redistributed with permission). * Reading University: for access to MARSEC from which the phrase break model was trained. * LDC & Penn Tree Bank: from which the POS tagger was trained, redistribution of the models is with permission from the LDC. * Roger Burroughes and Kurt Dusterhoff: For letting us capture their voices. * ATR and Nick Campbell: for first getting Paul and Alan to work together and for the experience we gained. * FSF: for G++, make, .... * Center for Spoken Language Understanding: CSLU at OGI, particularly Ron Cole and Mike Macon, have acted as significant users for the system giving significant feedback and allowing us to teach courses on Festival offering valuable real-use feedback. * Our beta testers: Thanks to all the people who put up with previous versions of the system and reported bugs, both big and small. These comments are very important to the constant improvements in the system. And thanks for your quick responses when I had specific requests. * And our users ... Many people have downloaded earlier versions of the system. Many have found problems with installation and use and have reported it to us. Many of you have put up with multiple compilations trying to fix bugs remotely. We thank you for putting up with us and are pleased you've taken the time to help us improve our system. Many of you have come up with uses we hadn't thought of, which is always rewarding. Even if you haven't actively responded, the fact that you use the system at all makes it worthwhile.  File: festival.info, Node: What is new, Next: Overview, Prev: Acknowledgements, Up: Top What is new *********** Compared to the the previous major release (1.3.0 release Aug 1998) 1.4.0 is not functionally so different from its previous versions. This release is primarily a consolidation release fixing and tidying up some of the lower level aspects of the system to allow better modularity for some of our future planned modules. * Copyright change: The system is now free and has no commercial restriction. Note that currently on the US voices (ked and kal) are also now unrestricted. The UK English voices depend on the Oxford Advanced Learners' Dictionary of Current English which cannot be used for commercial use without permission from Oxford University Press. * Architecture tidy up: the interfaces to lower level part parts of the system have been tidied up deleting some of the older code that was supported for compatibility reasons. This is a much higher dependence of features and easier (and safer) ways to register new objects as feature values and Scheme objects. Scheme has been tidied up. It is no longer "in one defun" but "in one directory". * New documentation system for speech tools: A new docbook based documentation system has been added to the speech tools. Festival's documentation will will move over to this sometime soon too. * initial JSAPI support: both JSAPI and JSML (somewhat similar to Sable) now have initial impelementations. They of course depend on Java support which so far we have only (successfully) investgated under Solaris and Linux. * Generalization of statistical models: CART, ngrams, and WFSTs are now fully supported from Lisp and can be used with a generalized viterbi function. This makes adding quite complex statistical models easy without adding new C++. * Tilt Intonation modelling: Full support is now included for the Tilt intomation models, both training and use. * Documentation on Bulding New Voices in Festival: documentation, scripts etc. for building new voices and languages in the system, see `http://www.cstr.ed.ac.uk/projects/festival/docs/festvox/'  File: festival.info, Node: Overview, Next: Installation, Prev: What is new, Up: Top Overview ******** Festival is designed as a speech synthesis system for at least three levels of user. First, those who simply want high quality speech from arbitrary text with the minimum of effort. Second, those who are developing language systems and wish to include synthesis output. In this case, a certain amount of customization is desired, such as different voices, specific phrasing, dialog types etc. The third level is in developing and testing new synthesis methods. This manual is not designed as a tutorial on converting text to speech but for documenting the processes and use of our system. We do not discuss the detailed algorithms involved in converting text to speech or the relative merits of multiple methods, though we will often give references to relevant papers when describing the use of each module. For more general information about text to speech we recommend Dutoit's `An introduction to Text-to-Speech Synthesis' `dutoit97'. For more detailed research issues in TTS see `sproat98' or `vansanten96'. * Menu: * Philosophy:: Why we did it like it is * Future:: How much better its going to get  File: festival.info, Node: Philosophy, Next: Future, Up: Overview Philosophy ========== One of the biggest problems in the development of speech synthesis, and other areas of speech and language processing systems, is that there are a lot of simple well-known techniques lying around which can help you realise your goal. But in order to improve some part of the whole system it is necessary to have a whole system in which you can test and improve your part. Festival is intended as that whole system in which you may simply work on your small part to improve the whole. Without a system like Festival, before you could even start to test your new module you would need to spend significant effort to build a whole system, or adapt an existing one before you could start working on your improvements. Festival is specifically designed to allow the addition of new modules, easily and efficiently, so that development need not get bogged down in re-implementing the wheel. But there is another aspect of Festival which makes it more useful than simply an environment for researching into new synthesis techniques. It is a fully usable text-to-speech system suitable for embedding in other projects that require speech output. The provision of a fully working easy-to-use speech synthesizer in addition to just a testing environment is good for two specific reasons. First, it offers a conduit for our research, in that our experiments can quickly and directly benefit users of our synthesis system. And secondly, in ensuring we have a fully working usable system we can immediately see what problems exist and where our research should be directed rather where our whims take us. These concepts are not unique to Festival. ATR's CHATR system (`black94') follows very much the same philosophy and Festival benefits from the experiences gained in the development of that system. Festival benefits from various pieces of previous work. As well as CHATR, CSTR's previous synthesizers, Osprey and the Polyglot projects influenced many design decisions. Also we are influenced by more general programs in considering software engineering issues, especially GNU Octave and Emacs on which the basic script model was based. Unlike in some other speech and language systems, software engineering is considered very important to the development of Festival. Too often research systems consist of random collections of hacky little scripts and code. No one person can confidently describe the algorithms it performs, as parameters are scattered throughout the system, with tricks and hacks making it impossible to really evaluate why the system is good (or bad). Such systems do not help the advancement of speech technology, except perhaps in pointing at ideas that should be further investigated. If the algorithms and techniques cannot be described externally from the program _such that_ they can reimplemented by others, what is the point of doing the work? Festival offers a common framework where multiple techniques may be implemented (by the same or different researchers) so that they may be tested more fairly in the same environment. As a final word, we'd like to make two short statements which both achieve the same end but unfortunately perhaps not for the same reasons: Good software engineering makes good research easier But the following seems to be true also If you spend enough effort on something it can be shown to be better than its competitors.  File: festival.info, Node: Future, Prev: Philosophy, Up: Overview Future ====== Festival is still very much in development. Hopefully this state will continue for a long time. It is never possible to complete software, there are always new things that can make it better. However as time goes on Festival's core architecture will stabilise and little or no changes will be made. Other aspects of the system will gain greater attention such as waveform synthesis modules, intonation techniques, text type dependent analysers etc. Festival will improve, so don't expected it to be the same six months from now. A number of new modules and enhancements are already under consideration at various stages of implementation. The following is a non-exhaustive list of what we may (or may not) add to Festival over the next six months or so. * Selection-based synthesis: Moving away from diphone technology to more generalized selection of units for speech database. * New structure for linguistic content of utterances: Using techniques for Metrical Phonology we are building more structure representations of utterances reflecting there linguistic significance better. This will allow improvements in prosody and unit selection. * Non-prosodic prosodic control: For language generation systems and custom tasks where the speech to be synthesized is being generated by some program, more information about text structure will probably exist, such as phrasing, contrast, key items etc. We are investigating the relationship of high-level tags to prosodic information through the Sole project `http://www.cstr.ed.ac.uk/projects/sole.html' * Dialect independent lexicons: Currently for each new dialect we need a new lexicon, we are currently investigating a form of lexical specification that is dialect independent that allows the core form to be mapped to different dialects. This will make the generation of voices in different dialects much easier.  File: festival.info, Node: Installation, Next: Quick start, Prev: Overview, Up: Top Installation ************ This section describes how to install Festival from source in a new location and customize that installation. * Menu: * Requirements:: Software/Hardware requirements for Festival * Configuration:: Setting up compilation * Site initialization:: Settings for your particular site * Checking an installation:: But does it work ... * Y2K:: Comment on Festival and year 2000  File: festival.info, Node: Requirements, Next: Configuration, Up: Installation Requirements ============ In order to compile Festival you first need the following source packages `festival-1.4.2.tar.gz' Festival Speech Synthesis System source `speech_tools-1.2.2.tar.gz' The Edinburgh Speech Tools Library `festlex_NAME.tar.gz' The lexicon distribution, where possible, includes the lexicon input file as well as the compiled form, for your convenience. The lexicons have varying distribution policies, but are all free except OALD, which is only free for non-commercial use (we are working on a free replacement). In some cases only a pointer to an ftp'able file plus a program to convert that file to the Festival format is included. `festvox_NAME.tar.gz' You'll need a speech database. A number are available (with varying distribution policies). Each voice may have other dependencies such as requiring particular lexicons `festdoc_1.4.2.tar.gz' Full postscript, info and html documentation for Festival and the Speech Tools. The source of the documentation is available in the standard distributions but for your conveniences it has been pre-generated. In addition to Festival specific sources you will also need _A UNIX machine_ Currently we have compiled and tested the system under Solaris (2.5(.1), 2.6, 2.7 and 2.8), SunOS (4.1.3), FreeBSD 3.x, 4.x Linux (Redhat 4.1, 5.0, 5.1, 5.2, 6.[012], 7.[01] and other Linux distributions), and it should work under OSF (Dec Alphas) SGI (Irix), HPs (HPUX). But any standard UNIX machine should be acceptable. We have now successfully ported this version to Windows NT nad Windows 95 (using the Cygnus GNU win32 environment). This is still a young port but seems to work. _A C++ compiler_ Note that C++ is not very portable even between different versions of the compiler from the same vendor. Although we've tried very hard to make the system portable, we know it is very unlikely to compile without change except with compilers that have already been tested. The currently tested systems are * Sun Sparc Solaris 2.5, 2.5.1, 2.6, 2.7: GCC 2.7.2, egcs 1.1.1, egcs 1.1.2, GCC 2.95.1 * Sun Sparc SunOS 4.1.3: GCC 2.7.2 * FreeBSD for Intel 3.x and 4.x GCC 2.95.1, GCC 3.0 * Linux for Intel (RedHat 4.1/5.0/5.1/5.2/6.0): GCC 2.7.2, GCC 2.7.2/egcs-1.0.2, egcs 1.1.1, egcs-1.1.2, GCC 2.95.[123], GCC "2.96", GCC 3.0 * Windows NT 4.0: GCC 2.7.2 plus egcs (from Cygnus GNU win32 b19), Visual C++ PRO v5.0, Visual C++ v6.0 Note if GCC works on one version of Unix it usually works on others. We have compiled both the speech tools and Festival under Windows NT 4.0 and Windows 95 using the GNU tools available from Cygnus. `ftp://ftp.cygnus.com/pub/gnu-win32/'. _GNU make_ Due to there being too many different `make' programs out there we have tested the system using GNU make on all systems we use. Others may work but we know GNU make does. _Audio hardware_ You can use Festival without audio output hardware but it doesn't sound very good (though admittedly you can hear less problems with it). A number of audio systems are supported (directly inherited from the audio support in the Edinburgh Speech Tools Library): NCD's NAS (formerly called netaudio) a network transparent audio system (which can be found at `ftp://ftp.x.org/contrib/audio/nas/'); `/dev/audio' (at 8k ulaw and 8/16bit linear), found on Suns, Linux machines and FreeBSD; and a method allowing arbitrary UNIX commands. *Note Audio output::. Earlier versions of Festival mistakenly offered a command line editor interface to the GNU package readline, but due to conflicts with the GNU Public Licence and Festival's licence this interface was removed in version 1.3.1. Even Festival's new free licence would cause problems as readline support would restrict Festival linking with non-free code. A new command line interface based on editline was provided that offers similar functionality. Editline remains a compilation option as it is probably not yet as portable as we would like it to be. In addition to the above, in order to process the documentation you will need `TeX', `dvips' (or similar), GNU's `makeinfo' (part of the texinfo package) and `texi2html' which is available from `http://wwwcn.cern.ch/dci/texi2html/'. However the document files are also available pre-processed into, postscript, DVI, info and html as part of the distribution in `festdoc-1.4.X.tar.gz'. Ensure you have a fully installed and working version of your C++ compiler. Most of the problems people have had in installing Festival have been due to incomplete or bad compiler installation. It might be worth checking if the following program works if you don't know if anyone has used your C++ installation before. #include int main (int argc, char **argv) { cout << "Hello world\n"; } Unpack all the source files in a new directory. The directory will then contain two subdirectories speech_tools/ festival/  File: festival.info, Node: Configuration, Next: Site initialization, Prev: Requirements, Up: Installation Configuration ============= First ensure you have a compiled version of the Edinburgh Speech Tools Library. See `speech_tools/INSTALL' for instructions. The system now supports the standard GNU `configure' method for set up. In most cases this will automatically configure festival for your particular system. In most cases you need only type gmake and the system will configure itself and conpile, (note you need to have compiled the Edinburgh Speech Tools `speech_tools-1.2.2' first. In some case hand configure is require. All of the configuration choise are held in the file `config/config' For the most part Festival configuration inherits the configuration from your speech tools config file (`../speech_tools/config/config'). Additional optional modules may be added by adding them to the end of your config file e.g. ALSO_INCLUDE += clunits Adding and new module here will treat is as a new directory in the `src/modules/' and compile it into the system in the same way the `OTHER_DIRS' feature was used in previous versions. If the compilation directory being accessed by NFS or if you use an automounter (e.g. amd) it is recommend to explicitly set the variable `FESTIVAL_HOME' in `config/config'. The command `pwd' is not reliable when a directory may have multiple names. There is a simple test suite with Festival but it requires the three basic voices and their respective lexicons install before it will work. Thus you need to install festlex_CMU.tar.gz festlex_OALD.tar.gz festlex_POSLEX.tar.gz festvox_don.tar.gz festvox_kedlpc16k.tar.gz festvox_rablpc16k.tar.gz If these are installed you can test the installation with gmake test To simply make it run with a male US Ebglish voiuce it is sufficient to install just festlex_CMU.tar.gz festlex_POSLEX.tar.gz festvox_kallpc16k.tar.gz Note that the single most common reason for problems in compilation and linking found amongst the beta testers was a bad installation of GNU C++. If you get many strange errors in G++ library header files or link errors it is worth checking that your system has the compiler, header files and runtime libraries properly installed. This may be checked by compiling a simple program under C++ and also finding out if anyone at your site has ever used the installation. Most of these installation problems are caused by upgrading to a newer version of libg++ without removing the older version so a mixed version of the `.h' files exist. Although we have tried very hard to ensure that Festival compiles with no warnings this is not possible under some systems. Under SunOS the system include files do not declare a number of system provided functions. This a bug in Sun's include files. This will causes warnings like "implicit definition of fprintf". These are harmless. Under Linux a warning at link time about reducing the size of some symbols often is produced. This is harmless. There is often occasional warnings about some socket system function having an incorrect argument type, this is also harmless. The speech tools and festival compile under Windows95 or Windows NT with Visual C++ v5.0 using the Microsoft `nmake' make program. We've only done this with the Professonal edition, but have no reason to believe that it relies on anything not in the standard edition. In accordance to VC++ conventions, object files are created with extension .obj, executables with extension .exe and libraries with extension .lib. This may mean that both unix and Win32 versions can be built in the same directory tree, but I wouldn't rely on it. To do this you require nmake Makefiles for the system. These can be generated from the gnumake Makefiles, using the command gnumake VCMakefile in the speech_tools and festival directories. I have only done this under unix, it's possible it would work under the cygnus gnuwin32 system. If `make.depend' files exist (i.e. if you have done `gnumake depend' in unix) equivalent `vc_make.depend' files will be created, if not the VCMakefiles will not contain dependency information for the `.cc' files. The result will be that you can compile the system once, but changes will not cause the correct things to be rebuilt. In order to compile from the DOS command line using Visual C++ you need to have a collection of environment variables set. In Windows NT there is an instalation option for Visual C++ which sets these globally. Under Windows95 or if you don't ask for them to be set globally under NT you need to run vcvars32.bat See the VC++ documentation for more details. Once you have the source trees with VCMakefiles somewhere visible from Windows, you need to copy `peech_tools\config\vc_config-dist' to `speech_tools\config\vc_config' and edit it to suit your local situation. Then do the same with `festival\config\vc_config-dist'. The thing most likely to need changing is the definition of `FESTIVAL_HOME' in `festival\config\vc_config_make_rules' which needs to point to where you have put festival. Now you can compile. cd to the speech_tools directory and do nmake /nologo /fVCMakefile and the library, the programs in main and the test programs should be compiled. The tests can't be run automatically under Windows. A simple test to check that things are probably OK is: main\na_play testsuite\data\ch_wave.wav which reads and plays a waveform. Next go into the festival directory and do nmake /nologo /fVCMakefile to build festival. When it's finished, and assuming you have the voices and lexicons unpacked in the right place, festival should run just as under unix. We should remind you that the NT/95 ports are still young and there may yet be problems that we've not found yet. We only recommend the use the speech tools and Festival under Windows if you have significant experience in C++ under those platforms. Most of the modules `src/modules' are actually optional and the system could be compiled without them. The basic set could be reduced further if certain facilities are not desired. Particularly: `donovan' which is only required if the donovan voice is used; `rxp' if no XML parsing is required (e.g. Sable); and `parser' if no stochastic paring is required (this parser isn't used for any of our currently released voices). Actually even `UniSyn' and `UniSyn_diphone' could be removed if some external waveform synthesizer is being used (e.g. MBROLA) or some alternative one like `OGIresLPC'. Removing unused modules will make the festival binary smaller and (potentially) start up faster but don't expect too much. You can delete these by changing the `BASE_DIRS' variable in `src/modules/Makefile'.  File: festival.info, Node: Site initialization, Next: Checking an installation, Prev: Configuration, Up: Installation Site initialization =================== Once compiled Festival may be further customized for particular sites. At start up time Festival loads the file `init.scm' from its library directory. This file further loads other necessary files such as phoneset descriptions, duration parameters, intonation parameters, definitions of voices etc. It will also load the files `sitevars.scm' and `siteinit.scm' if they exist. `sitevars.scm' is loaded after the basic Scheme library functions are loaded but before any of the festival related functions are loaded. This file is intended to set various path names before various subsystems are loaded. Typically variables such as `lexdir' (the directory where the lexicons are held), and `voices_dir' (pointing to voice directories) should be reset here if necessary. The default installation will try to find its lexicons and voices automatically based on the value of `load-path' (this is derived from `FESTIVAL_HOME' at compilation time or by using the `--libdir' at run-time). If the voices and lexicons have been unpacked into subdirectories of the library directory (the default) then no site specific initialization of the above pathnames will be necessary. The second site specific file is `siteinit.scm'. Typical examples of local initialization are as follows. The default audio output method is NCD's NAS system if that is supported as that's what we use normally in CSTR. If it is not supported, any hardware specific mode is the default (e.g. sun16audio, freebas16audio, linux16audio or mplayeraudio). But that default is just a setting in `init.scm'. If for example in your environment you may wish the default audio output method to be 8k mulaw through `/dev/audio' you should add the following line to your `siteinit.scm' file (Parameter.set 'Audio_Method 'sunaudio) Note the use of `Parameter.set' rather than `Parameter.def' the second function will not reset the value if it is already set. Remember that you may use the audio methods `sun16audio'. `linux16audio' or `freebsd16audio' only if `NATIVE_AUDIO' was selected in `speech_tools/config/config' and your are on such machines. The Festival variable `*modules*' contains a list of all supported functions/modules in a particular installation including audio support. Check the value of that variable if things aren't what you expect. If you are installing on a machine whose audio is not directly supported by the speech tools library, an external command may be executed to play a waveform. The following example is for an imaginary machine that can play audio files through a program called `adplay' with arguments for sample rate and file type. When playing waveforms, Festival, by default, outputs as unheadered waveform in native byte order. In this example you would set up the default audio playing mechanism in `siteinit.scm' as follows (Parameter.set 'Audio_Method 'Audio_Command) (Parameter.set 'Audio_Command "adplay -raw -r $SR $FILE") For `Audio_Command' method of playing waveforms Festival supports two additional audio parameters. `Audio_Required_Rate' allows you to use Festivals internal sample rate conversion function to any desired rate. Note this may not be as good as playing the waveform at the sample rate it is originally created in, but as some hardware devices are restrictive in what sample rates they support, or have naive resample functions this could be optimal. The second addition audio parameter is `Audio_Required_Format' which can be used to specify the desired output forms of the file. The default is unheadered raw, but this may be any of the values supported by the speech tools (including nist, esps, snd, riff, aiff, audlab, raw and, if you really want it, ascii). For example suppose you run Festival on a remote machine and are not running any network audio system and want Festival to copy files back to your local machine and simply cat them to `/dev/audio'. The following would do that (assuming permissions for rsh are allowed). (Parameter.set 'Audio_Method 'Audio_Command) ;; Make output file ulaw 8k (format ulaw implies 8k) (Parameter.set 'Audio_Required_Format 'ulaw) (Parameter.set 'Audio_Command "userhost=`echo $DISPLAY | sed 's/:.*$//'`; rcp $FILE $userhost:$FILE; \ rsh $userhost \"cat $FILE >/dev/audio\" ; rsh $userhost \"rm $FILE\"") Note there are limits on how complex a command you want to put in the `Audio_Command' string directly. It can get very confusing with respect to quoting. It is therefore recommended that once you get past a certain complexity consider writing a simple shell script and calling it from the `Audio_Command' string. A second typical customization is setting the default speaker. Speakers depend on many things but due to various licence (and resource) restrictions you may only have some diphone/nphone databases available in your installation. The function name that is the value of `voice_default' is called immediately after `siteinit.scm' is loaded offering the opportunity for you to change it. In the standard distribution no change should be required. If you download all the distributed voices `voice_rab_diphone' is the default voice. You may change this for a site by adding the following to `siteinit.scm' or per person by changing your `.festivalrc'. For example if you wish to change the default voice to the American one `voice_ked_diphone' (set! voice_default 'voice_ked_diphone) Note the single quote, and note that unlike in early versions `voice_default' is not a function you can call directly. A second level of customization is on a per user basis. After loading `init.scm', which includes `sitevars.scm' and `siteinit.scm' for local installation, Festival loads the file `.festivalrc' from the user's home directory (if it exists). This file may contain arbitrary Festival commands.  File: festival.info, Node: Checking an installation, Next: Y2K, Prev: Site initialization, Up: Installation Checking an installation ======================== Once compiled and site initialization is set up you should test to see if Festival can speak or not. Start the system $ bin/festival Festival Speech Synthesis System 1.4.2:release July 2001 Copyright (C) University of Edinburgh, 1996-2001. All rights reserved. For details type `(festival_warranty)' festival> ^D If errors occur at this stage they are most likely to do with pathname problems. If any error messages are printed about non-existent files check that those pathnames point to where you intended them to be. Most of the (default) pathnames are dependent on the basic library path. Ensure that is correct. To find out what it has been set to, start the system without loading the init files. $ bin/festival -q Festival Speech Synthesis System 1.4.2:release July 2001 Copyright (C) University of Edinburgh, 1996-2001. All rights reserved. For details type `(festival_warranty)' festival> libdir "/projects/festival/lib/" festival> ^D This should show the pathname you set in your `config/config'. If the system starts with no errors try to synthesize something festival> (SayText "hello world") Some files are only accessed at synthesis time so this may show up other problem pathnames. If it talks, you're in business, if it doesn't, here are some possible problems. If you get the error message Can't access NAS server You have selected NAS as the audio output but have no server running on that machine or your `DISPLAY' or `AUDIOSERVER' environment variable is not set properly for your output device. Either set these properly or change the audio output device in `lib/siteinit.scm' as described above. Ensure your audio device actually works the way you think it does. On Suns, the audio output device can be switched into a number of different output modes, speaker, jack, headphones. If this is set to the wrong one you may not hear the output. Use one of Sun's tools to change this (try `/usr/demo/SOUND/bin/soundtool'). Try to find an audio file independent of Festival and get it to play on your audio. Once you have done that ensure that the audio output method set in Festival matches that. Once you have got it talking, test the audio spooling device. festival> (intro) This plays a short introduction of two sentences, spooling the audio output. Finally exit from Festival (by end of file or `(quit)') and test the script mode with. $ examples/saytime A test suite is included with Festival but it makes certain assumptions about which voices are installed. It assumes that `voice_rab_diphone' (`festvox_rabxxxx.tar.gz') is the default voice and that `voice_ked_diphone' and `voice_don_diphone' (`festvox_kedxxxx.tar.gz' and `festvox_don.tar.gz') are installed. Also local settings in your `festival/lib/siteinit.scm' may affect these tests. However, after installation it may be worth trying gnumake test from the `festival/' directory. This will do various tests including basic utterance tests and tokenization tests. It also checks that voices are installed and that they don't interfere with each other. These tests are primarily regression tests for the developers of Festival, to ensure new enhancements don't mess up existing supported features. They are not designed to test an installation is successful, though if they run correctly it is most probable the installation has worked.  File: festival.info, Node: Y2K, Prev: Checking an installation, Up: Installation Y2K === Festival comes with _no_ warranty therefore we will not make any legal statement about the performance of the system. However a number of people have ask about Festival and Y2K compliance, and we have decided to make some comments on this. Every effort has been made to ensure that Festival will continue running as before into the next millenium. However even if Festival itself has no problems it is dependent on the operating system environment it is running in. During compilation dates on files are important and the compilation process may not work if your machine cannot assign (reasonable) dates to new files. At run time there is less dependence on system dates and times. Specifically times are used in generation of random numbers (where only relative time is important) and as time stamps in log files when festival runs in server mode, thus we feel it is unlikely there will be any problems. However, as a speech synthesizer, Festival must make explicit decisions about the pronunciation of dates in the next two decades when people themselves have not yet made such decisions. Most people are still unsure how to read years written as '01, '04, '12, 00s, 10s, (cf. '86, 90s). It is interesting to note that while there is a convenient short name for the last decade of the twentieth century, the "ninties" there is no equivalent name for the first decade of the twenty-first century (or the second). In the mean time we have made reasonable decisions about such pronunciations. Once people have themselves become Y2K compliant and decided what to actually call these years, if their choices are different from how Festival pronounces them we reserve the right to change how Festival speaks these dates to match their belated decisions. However as we do not give out warranties about compliance we will not be requiring our users to return signed Y2K compliant warranties about their own compliance either.  File: festival.info, Node: Quick start, Next: Scheme, Prev: Installation, Up: Top Quick start *********** This section is for those who just want to know the absolute basics to run the system. Festival works in two fundamental modes, _command mode_ and _text-to-speech mode_ (tts-mode). In command mode, information (in files or through standard input) is treated as commands and is interpreted by a Scheme interpreter. In tts-mode, information (in files or through standard input) is treated as text to be rendered as speech. The default mode is command mode, though this may change in later versions. * Menu: * Basic command line options:: * Simple command driven session:: * Getting some help:: festdoc-1.4.2/festival/info/festival.info-20100644001741100001440000014231607332366671017264 0ustar awbusersThis is festival.info, produced by Makeinfo version 3.12h from festival.texi. This file documents the `Festival' Speech Synthesis System a general text to speech system for making your computer talk and developing new synthesis techniques. Copyright (C) 1996-2001 University of Edinburgh Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the authors.  File: festival.info, Node: Basic command line options, Next: Simple command driven session, Up: Quick start Basic command line options ========================== Festival's basic calling method is as festival [options] file1 file2 ... Options may be any of the following `-q' start Festival without loading `init.scm' or user's `.festivalrc' `-b' `--batch' After processing any file arguments do not become interactive `-i' `--interactive' After processing file arguments become interactive. This option overrides any batch argument. `--tts' Treat file arguments in text-to-speech mode, causing them to be rendered as speech rather than interpreted as commands. When selected in interactive mode the command line edit functions are not available `--command' Treat file arguments in command mode. This is the default. `--language LANG' Set the default language to LANG. Currently LANG may be one of `english', `spanish' or `welsh' (depending on what voices are actually available in your installation). `--server' After loading any specified files go into server mode. This is a mode where Festival waits for clients on a known port (the value of `server_port', default is 1314). Connected clients may send commands (or text) to the server and expect waveforms back. *Note Server/client API::. Note server mode may be unsafe and allow unauthorised access to your machine, be sure to read the security recommendations in *Note Server/client API:: `--script scriptfile' Run scriptfile as a Festival script file. This is similar to to `--batch' but it encapsulates the command line arguments into the Scheme variables `argv' and `argc', so that Festival scripts may process their command line arguments just like any other program. It also does not load the the basic initialisation files as sometimes you may not want to do this. If you wish them, you should copy the loading sequence from an example Festival script like `festival/examples/saytext'. `--heap NUMBER' The Scheme heap (basic number of Lisp cells) is of a fixed size and cannot be dynamically increased at run time (this would complicate garbage collection). The default size is 210000 which seems to be more than adequate for most work. In some of our training experiments where very large list structures are required it is necessary to increase this. Note there is a trade off between size of the heap and time it takes to garbage collect so making this unnecessarily big is not a good idea. If you don't understand the above explanation you almost certainly don't need to use the option. In command mode, if the file name starts with a left parenthesis, the name itself is read and evaluated as a Lisp command. This is often convenient when running in batch mode and a simple command is necessary to start the whole thing off after loading in some other specific files.  File: festival.info, Node: Simple command driven session, Next: Getting some help, Prev: Basic command line options, Up: Quick start Sample command driven session ============================= Here is a short session using Festival's command interpreter. Start Festival with no arguments $ festival Festival Speech Synthesis System 1.4.2:release July 2001 Copyright (C) University of Edinburgh, 1996-2001. All rights reserved. For details type `(festival_warranty)' festival> Festival uses the a command line editor based on editline for terminal input so command line editing may be done with Emacs commands. Festival also supports history as well as function, variable name, and file name completion via the key. Typing `help' will give you more information, that is `help' without any parenthesis. (It is actually a variable name whose value is a string containing help.) Festival offers what is called a read-eval-print loop, because it reads an s-expression (atom or list), evaluates it and prints the result. As Festival includes the SIOD Scheme interpreter most standard Scheme commands work festival> (car '(a d)) a festival> (+ 34 52) 86 In addition to standard Scheme commands a number of commands specific to speech synthesis are included. Although, as we will see, there are simpler methods for getting Festival to speak, here are the basic underlying explicit functions used in synthesizing an utterance. Utterances can consist of various types (*Note Utterance types::), but the simplest form is plain text. We can create an utterance and save it in a variable festival> (set! utt1 (Utterance Text "Hello world")) # festival> The (hex) number in the return value may be different for your installation. That is the print form for utterances. Their internal structure can be very large so only a token form is printed. Although this creates an utterance it doesn't do anything else. To get a waveform you must synthesize it. festival> (utt.synth utt1) # festival> This calls various modules, including tokenizing, duration,. intonation etc. Which modules are called are defined with respect to the type of the utterance, in this case `Text'. It is possible to individually call the modules by hand but you just wanted it to talk didn't you. So festival> (utt.play utt1) # festival> will send the synthesized waveform to your audio device. You should hear "Hello world" from your machine. To make this all easier a small function doing these three steps exists. `SayText' simply takes a string of text, synthesizes it and sends it to the audio device. festival> (SayText "Good morning, welcome to Festival") # festival> Of course as history and command line editing are supported or up-arrow will allow you to edit the above to whatever you wish. Festival may also synthesize from files rather than simply text. festival> (tts "myfile" nil) nil festival> The end of file character will exit from Festival and return you to the shell, alternatively the command `quit' may be called (don't forget the parentheses). Rather than starting the command interpreter, Festival may synthesize files specified on the command line unix$ festival --tts myfile unix$ Sometimes a simple waveform is required from text that is to be kept and played at some later time. The simplest way to do this with festival is by using the `text2wave' program. This is a festival script that will take a file (or text from standard input) and produce a single waveform. An example use is text2wave myfile.txt -o myfile.wav Options exist to specify the waveform file type, for example if Sun audio format is required text2wave myfile.txt -otype snd -o myfile.wav Use `-h' on `text2wave' to see all options.  File: festival.info, Node: Getting some help, Prev: Simple command driven session, Up: Quick start Getting some help ================= If no audio is generated then you must check to see if audio is properly initialized on your machine. *Note Audio output::. In the command interpreter (meta-h) will give you help on the current symbol before the cursor. This will be a short description of the function or variable, how to use it and what its arguments are. A listing of all such help strings appears at the end of this document. will synthesize and say the same information, but this extra function is really just for show. The lisp function `manual' will send the appropriate command to an already running Netscape browser process. If `nil' is given as an argument the browser will be directed to the tables of contents of the manual. If a non-nil value is given it is assumed to be a section title and that section is searched and if found displayed. For example festival> (manual "Accessing an utterance") Another related function is `manual-sym' which given a symbol will check its documentation string for a cross reference to a manual section and request Netscape to display it. This function is bound to and will display the appropriate section for the given symbol. Note also that the key can be used to find out the name of commands available as can the function `Help' (remember the parentheses). For more up to date information on Festival regularly check the Festival Home Page at `http://www.cstr.ed.ac.uk/projects/festival.html' Further help is available by mailing questions to festival-help@cstr.ed.ac.uk Although we cannot guarantee the time required to answer you, we will do our best to offer help. Bug reports should be submitted to festival-bug@cstr.ed.ac.uk If there is enough user traffic a general mailing list will be created so all users may share comments and receive announcements. In the mean time watch the Festival Home Page for news.  File: festival.info, Node: Scheme, Next: TTS, Prev: Quick start, Up: Top Scheme ****** Many people seem daunted by the fact that Festival uses Scheme as its scripting language and feel they can't use Festival because they don't know Scheme. However most of those same people use Emacs everyday which also has (a much more complex) Lisp system underneath. The number of Scheme commands you actually need to know in Festival is really very small and you can easily just find out as you go along. Also people use the Unix shell often but only know a small fraction of actual commands available in the shell (or in fact that there even is a distinction between shell builtin commands and user definable ones). So take it easy, you'll learn the commands you need fairly quickly. * Menu: * Scheme references:: Places to learn more about Scheme * Scheme fundamentals:: Syntax and semantics * Scheme Festival specifics:: * Scheme I/O::  File: festival.info, Node: Scheme references, Next: Scheme fundamentals, Up: Scheme Scheme references ================= If you wish to learn about Scheme in more detail I recommend the book `abelson85'. The Emacs Lisp documentation is reasonable as it is comprehensive and many of the underlying uses of Scheme in Festival were influenced by Emacs. Emacs Lisp however is not Scheme so there are some differences. Other Scheme tutorials and resources available on the Web are * The Revised Revised Revised Revised Scheme Report, the document defining the language is available from `http://tinuviel.cs.wcu.edu/res/ldp/r4rs-html/r4rs_toc.html' * a Scheme tutorials from the net: * `http://www.cs.uoregon.edu/classes/cis425/schemeTutorial.html' * the Scheme FAQ * `http://www.landfield.com/faqs/scheme-faq/part1/'  File: festival.info, Node: Scheme fundamentals, Next: Scheme Festival specifics, Prev: Scheme references, Up: Scheme Scheme fundamentals =================== But you want more now, don't you, not just be referred to some other book. OK here goes. _Syntax_: an expression is an _atom_ or a _list_. A list consists of a left paren, a number of expressions and right paren. Atoms can be symbols, numbers, strings or other special types like functions, hash tables, arrays, etc. _Semantics_: All expressions can be evaluated. Lists are evaluated as function calls. When evaluating a list all the members of the list are evaluated first then the first item (a function) is called with the remaining items in the list as arguments. Atoms are evaluated depending on their type: symbols are evaluated as variables returning their values. Numbers, strings, functions, etc. evaluate to themselves. Comments are started by a semicolon and run until end of line. And that's it. There is nothing more to the language that. But just in case you can't follow the consequences of that, here are some key examples. festival> (+ 2 3) 5 festival> (set! a 4) 4 festival> (* 3 a) 12 festival> (define (add a b) (+ a b)) # festival> (add 3 4) 7 festival> (set! alist '(apples pears bananas)) (apples pears bananas) festival> (car alist) apples festival> (cdr alist) (pears bananas) festival> (set! blist (cons 'oranges alist)) (oranges apples pears bananas) festival> (append alist blist) (apples pears bananas oranges apples pears bananas) festival> (cons alist blist) ((apples pears bananas) oranges apples pears bananas) festival> (length alist) 3 festival> (length (append alist blist)) 7  File: festival.info, Node: Scheme Festival specifics, Next: Scheme I/O, Prev: Scheme fundamentals, Up: Scheme Scheme Festival specifics ========================= There a number of additions to SIOD that are Festival specific though still part of the Lisp system rather than the synthesis functions per se. By convention if the first statement of a function is a string, it is treated as a documentation string. The string will be printed when help is requested for that function symbol. In interactive mode if the function `:backtrace' is called (within parenthesis) the previous stack trace is displayed. Calling `:backtrace' with a numeric argument will display that particular stack frame in full. Note that any command other than `:backtrace' will reset the trace. You may optionally call (set_backtrace t) Which will cause a backtrace to be displayed whenever a Scheme error occurs. This can be put in your `.festivalrc' if you wish. This is especially useful when running Festival in non-interactive mode (batch or script mode) so that more information is printed when an error occurs. A _hook_ in Lisp terms is a position within some piece of code where a user may specify their own customization. The notion is used heavily in Emacs. In Festival there a number of places where hooks are used. A hook variable contains either a function or list of functions that are to be applied at some point in the processing. For example the `after_synth_hooks' are applied after synthesis has been applied to allow specific customization such as resampling or modification of the gain of the synthesized waveform. The Scheme function `apply_hooks' takes a hook variable as argument and an object and applies the function/list of functions in turn to the object. When an error occurs in either Scheme or within the C++ part of Festival by default the system jumps to the top level, resets itself and continues. Note that errors are usually serious things, pointing to bugs in parameters or code. Every effort has been made to ensure that the processing of text never causes errors in Festival. However when using Festival as a development system it is often that errors occur in code. Sometimes in writing Scheme code you know there is a potential for an error but you wish to ignore that and continue on to the next thing without exiting or stopping and returning to the top level. For example you are processing a number of utterances from a database and some files containing the descriptions have errors in them but you want your processing to continue through every utterance that can be processed rather than stopping 5 minutes after you gone home after setting a big batch job for overnight. Festival's Scheme provides the function `unwind-protect' which allows the catching of errors and then continuing normally. For example suppose you have the function `process_utt' which takes a filename and does things which you know might cause an error. You can write the following to ensure you continue processing even in an error occurs. (unwind-protect (process_utt filename) (begin (format t "Error found in processing %s\n" filename) (format t "continuing\n"))) The `unwind-protect' function takes two arguments. The first is evaluated and if no error occurs the value returned from that expression is returned. If an error does occur while evaluating the first expression, the second expression is evaluated. `unwind-protect' may be used recursively. Note that all files opened while evaluating the first expression are closed if an error occurs. All global variables outside the scope of the `unwind-protect' will be left as they were set up until the error. Care should be taken in using this function but its power is necessary to be able to write robust Scheme code.  File: festival.info, Node: Scheme I/O, Prev: Scheme Festival specifics, Up: Scheme Scheme I/O ========== Different Scheme's may have quite different implementations of file i/o functions so in this section we will describe the basic functions in Festival SIOD regarding i/o. Simple printing to the screen may be achieved with the function `print' which prints the given s-expression to the screen. The printed form is preceded by a new line. This is often useful for debugging but isn't really powerful enough for much else. Files may be opened and closed and referred to file descriptors in a direct analogy to C's stdio library. The SIOD functions `fopen' and `fclose' work in the exactly the same way as their equivalently named partners in C. The `format' command follows the command of the same name in Emacs and a number of other Lisps. C programmers can think of it as `fprintf'. `format' takes a file descriptor, format string and arguments to print. The file description may be a file descriptor as returned by the Scheme function `fopen', it may also be `t' which means the output will be directed as standard out (cf. `printf'). A third possibility is `nil' which will cause the output to printed to a string which is returned (cf. `sprintf'). The format string closely follows the format strings in ANSI C, but it is not the same. Specifically the directives currently supported are, `%%', `%d', `%x', `%s', `%f', `%g' and `%c'. All modifiers for these are also supported. In addition `%l' is provided for printing of Scheme objects as objects. For example (format t "%03d %3.4f %s %l %l %l\n" 23 23 "abc" "abc" '(a b d) utt1) will produce 023 23.0000 abc "abc" (a b d) # on standard output. When large lisp expressions are printed they are difficult to read because of the parentheses. The function `pprintf' prints an expression to a file description (or `t' for standard out). It prints so the s-expression is nicely lined up and indented. This is often called pretty printing in Lisps. For reading input from terminal or file, there is currently no equivalent to `scanf'. Items may only be read as Scheme expressions. The command (load FILENAME t) will load all s-expressions in `FILENAME' and return them, unevaluated as a list. Without the third argument the `load' function will load and evaluate each s-expression in the file. To read individual s-expressions use `readfp'. For example (let ((fd (fopen trainfile "r")) (entry) (count 0)) (while (not (equal? (set! entry (readfp fd)) (eof-val))) (if (string-equal (car entry) "home") (set! count (+ 1 count)))) (fclose fd)) To convert a symbol whose print name is a number to a number use `parse-number'. This is the equivalent to `atof' in C. Note that, all i/o from Scheme input files is assumed to be basically some form of Scheme data (though can be just numbers, tokens). For more elaborate analysis of incoming data it is possible to use the text tokenization functions which offer a fully programmable method of reading data.  File: festival.info, Node: TTS, Next: XML/SGML mark-up, Prev: Scheme, Up: Top TTS *** Festival supports text to speech for raw text files. If you are not interested in using Festival in any other way except as black box for rendering text as speech, the following method is probably what you want. festival --tts myfile This will say the contents of `myfile'. Alternatively text may be submitted on standard input echo hello world | festival --tts cat myfile | festival --tts Festival supports the notion of _text modes_ where the text file type may be identified, allowing Festival to process the file in an appropriate way. Currently only two types are considered stable: `STML' and `raw', but other types such as `email', `HTML', `Latex', etc. are being developed and discussed below. This follows the idea of buffer modes in Emacs where a file's type can be utilized to best display the text. Text mode may also be selected based on a filename's extension. Within the command interpreter the function `tts' is used to render files as text; it takes a filename and the text mode as arguments. * Menu: * Utterance chunking:: From text to utterances * Text modes:: Mode specific text analysis * Example text mode:: An example mode for reading email  File: festival.info, Node: Utterance chunking, Next: Text modes, Up: TTS Utterance chunking ================== Text to speech works by first tokenizing the file and chunking the tokens into utterances. The definition of utterance breaks is determined by the utterance tree in variable `eou_tree'. A default version is given in `lib/tts.scm'. This uses a decision tree to determine what signifies an utterance break. Obviously blank lines are probably the most reliable, followed by certain punctuation. The confusion of the use of periods for both sentence breaks and abbreviations requires some more heuristics to best guess their different use. The following tree is currently used which works better than simply using punctuation. (defvar eou_tree '((n.whitespace matches ".*\n.*\n\\(.\\|\n\\)*") ;; 2 or more newlines ((1)) ((punc in ("?" ":" "!")) ((1)) ((punc is ".") ;; This is to distinguish abbreviations vs periods ;; These are heuristics ((name matches "\\(.*\\..*\\|[A-Z][A-Za-z]?[A-Za-z]?\\|etc\\)") ((n.whitespace is " ") ((0)) ;; if abbrev single space isn't enough for break ((n.name matches "[A-Z].*") ((1)) ((0)))) ((n.whitespace is " ") ;; if it doesn't look like an abbreviation ((n.name matches "[A-Z].*") ;; single space and non-cap is no break ((1)) ((0))) ((1)))) ((0))))) The token items this is applied to will always (except in the end of file case) include one following token, so look ahead is possible. The "n." and "p." and "p.p." prefixes allow access to the surrounding token context. The features `name', `whitespace' and `punc' allow access to the contents of the token itself. At present there is no way to access the lexicon form this tree which unfortunately might be useful if certain abbreviations were identified as such there. Note these are heuristics and written by hand not trained from data, though problems have been fixed as they have been observed in data. The above rules may make mistakes where abbreviations appear at end of lines, and when improper spacing and capitalization is used. This is probably worth changing, for modes where more casual text appears, such as email messages and USENET news messages. A possible improvement could be made by analysing a text to find out its basic threshold of utterance break (i.e. if no full stop, two spaces, followed by a capitalized word sequences appear and the text is of a reasonable length then look for other criteria for utterance breaks). Ultimately what we are trying to do is to chunk the text into utterances that can be synthesized quickly and start to play them quickly to minimise the time someone has to wait for the first sound when starting synthesis. Thus it would be better if this chunking were done on _prosodic phrases_ rather than chunks more similar to linguistic sentences. Prosodic phrases are bounded in size, while sentences are not.  File: festival.info, Node: Text modes, Next: Example text mode, Prev: Utterance chunking, Up: TTS Text modes ========== We do not believe that all texts are of the same type. Often information about the general contents of file will aid synthesis greatly. For example in Latex files we do not want to here "left brace, backslash e m" before each emphasized word, nor do we want to necessarily hear formating commands. Festival offers a basic method for specifying customization rules depending on the _mode_ of the text. By type we are following the notion of modes in Emacs and eventually will allow customization at a similar level. Modes are specified as the third argument to the function `tts'. When using the Emacs interface to Festival the buffer mode is automatically passed as the text mode. If the mode is not supported a warning message is printed and the raw text mode is used. Our initial text mode implementation allows configuration both in C++ and in Scheme. Obviously in C++ almost anything can be done but it is not as easy to reconfigure without recompilation. Here we will discuss those modes which can be fully configured at run time. A text mode may contain the following _filter_ A Unix shell program filter that processes the text file in some appropriate way. For example for email it might remove uninteresting headers and just output the subject, from line and the message body. If not specified, an identity filter is used. _init_function_ This (Scheme) function will be called before any processing will be done. It allows further set up of tokenization rules and voices etc. _exit_function_ This (Scheme) function will be called at the end of any processing allowing reseting of tokenization rules etc. _analysis_mode_ If analysis mode is `xml' the file is read through the built in XML parser `rxp'. Alternatively if analysis mode is `xxml' the filter should an SGML normalising parser and the output is processed in a way suitable for it. Any other value is ignored. These mode specific parameters are specified in the a-list held in `tts_text_modes'. When using Festival in Emacs the emacs buffer mode is passed to Festival as the text mode. Note that above mechanism is not really designed to be re-entrant, this should be addressed in later versions. Following the use of auto-selection of mode in Emacs, Festival can auto-select the text mode based on the filename given when no explicit mode is given. The Lisp variable `auto-text-mode-alist' is a list of dotted pairs of regular expression and mode name. For example to specify that the `email' mode is to be used for files ending in `.email' we would add to the current `auto-text-mode-alist' as follows (set! auto-text-mode-alist (cons (cons "\\.email$" 'email) auto-text-mode-alist)) If the function `tts' is called with a mode other than `nil' that mode overrides any specified by the `auto-text-mode-alist'. The mode `fundamental' is the explicit "null" mode, it is used when no mode is specified in the function `tts', and match is found in `auto-text-mode-alist' or the specified mode is not found. By convention if a requested text model is not found in `tts_text_modes' the file `MODENAME-mode' will be `required'. Therefore if you have the file `MODENAME-mode.scm' in your library then it will be automatically loaded on reference. Modes may be quite large and it is not necessary have Festival load them all at start up time. Because of the `auto-text-mode-alist' and the auto loading of currently undefined text modes you can use Festival like festival --tts example.email Festival with automatically synthesize `example.email' in text mode `email'. If you add your own personal text modes you should do the following. Suppose you've written an HTML mode. You have named it `html-mode.scm' and put it in `/home/awb/lib/festival/'. In your `.festivalrc' first identify you're personal Festival library directory by adding it to `lib-path'. (set! lib-path (cons "/home/awb/lib/festival/" lib-path)) Then add the definition to the `auto-text-mode-alist' that file names ending `.html' or `.htm' should be read in HTML mode. (set! auto-text-mode-alist (cons (cons "\\.html?$" 'html) auto-text-mode-alist)) Then you may synthesize an HTML file either from Scheme (tts "example.html" nil) Or from the shell command line festival --tts example.html Anyone familiar with modes in Emacs should recognise that the process of adding a new text mode to Festival is very similar to adding a new buffer mode to Emacs.  File: festival.info, Node: Example text mode, Prev: Text modes, Up: TTS Example text mode ================= Here is a short example of a tts mode for reading email messages. It is by no means complete but is a start at showing how you can customize tts modes without writing new C++ code. The first task is to define a filter that will take a saved mail message and remove extraneous headers and just leave the from line, subject and body of the message. The filter program is given a file name as its first argument and should output the result on standard out. For our purposes we will do this as a shell script. #!/bin/sh # Email filter for Festival tts mode # usage: email_filter mail_message >tidied_mail_message grep "^From: " $1 echo grep "^Subject: " $1 echo # delete up to first blank line (i.e. the header) sed '1,/^$/ d' $1 Next we define the email init function, which will be called when we start this mode. What we will do is save the current token to words function and slot in our own new one. We can then restore the previous one when we exit. (define (email_init_func) "Called on starting email text mode." (set! email_previous_t2w_func token_to_words) (set! english_token_to_words email_token_to_words) (set! token_to_words email_token_to_words)) Note that _both_ `english_token_to_words' and `token_to_words' should be set to ensure that our new token to word function is still used when we change voices. The corresponding end function puts the token to words function back. (define (email_exit_func) "Called on exit email text mode." (set! english_token_to_words email_previous_t2w_func) (set! token_to_words email_previous_t2w_func)) Now we can define the email specific token to words function. In this example we deal with two specific cases. First we deal with the common form of email addresses so that the angle brackets are not pronounced. The second points are to recognise quoted text and immediately change the the speaker to the alternative speaker. (define (email_token_to_words token name) "Email specific token to word rules." (cond This first condition identifies the token as a bracketed email address and removes the brackets and splits the token into name and IP address. Note that we recursively call the function `email_previous_t2w_func' on the email name and IP address so that they will be pronounced properly. Note that because that function returns a _list_ of words we need to append them together. ((string-matches name "<.*.*>") (append (email_previous_t2w_func token (string-after (string-before name "@") "<")) (cons "at" (email_previous_t2w_func token (string-before (string-after name "@") ">"))))) Our next condition deals with identifying a greater than sign being used as a quote marker. When we detect this we select the alternative speaker, even though it may already be selected. We then return no words so the quote marker is not spoken. The following condition finds greater than signs which are the first token on a line. ((and (string-matches name ">") (string-matches (item.feat token "whitespace") "[ \t\n]*\n *")) (voice_don_diphone) nil ;; return nothing to say ) If it doesn't match any of these we can go ahead and use the builtin token to words function Actually, we call the function that was set before we entered this mode to ensure any other specific rules still remain. But before that we need to check if we've had a newline with doesn't start with a greater than sign. In that case we switch back to the primary speaker. (t ;; for all other cases (if (string-matches (item.feat token "whitespace") ".*\n[ \t\n]*") (voice_rab_diphone)) (email_previous_t2w_func token name)))) In addition to these we have to actually declare the text mode. This we do by adding to any existing modes as follows. (set! tts_text_modes (cons (list 'email ;; mode name (list ;; email mode params (list 'init_func email_init_func) (list 'exit_func email_exit_func) '(filter "email_filter"))) tts_text_modes)) This will now allow simple email messages to be dealt with in a mode specific way. An example mail message is included in `examples/ex1.email'. To hear the result of the above text mode start Festival, load in the email mode descriptions, and call TTS on the example file. (tts ".../examples/ex1.email" 'email) The above is very short of a real email mode but does illustrate how one might go about building one. It should be reiterated that text modes are new in Festival and their most effective form has not been discovered yet. This will improve with time and experience.  File: festival.info, Node: XML/SGML mark-up, Next: Emacs interface, Prev: TTS, Up: Top XML/SGML mark-up **************** The ideas of a general, synthesizer system nonspecific, mark-up language for labelling text has been under discussion for some time. Festival has supported an SGML based markup language through multiple versions most recently STML (`sproat97'). This is based on the earlier SSML (Speech Synthesis Markup Language) which was supported by previous versions of Festival (`taylor96'). With this version of Festival we support _Sable_ a similar mark-up language devised by a consortium from Bell Labls, Sub Microsystems, AT&T and Edinburgh, `sable98'. Unlike the previous versions which were SGML based, the implementation of Sable in Festival is now XML based. To the user they different is negligable but using XML makes processing of files easier and more standardized. Also Festival now includes an XML parser thus reducing the dependencies in processing Sable text. Raw text has the problem that it cannot always easily be rendered as speech in the way the author wishes. Sable offers a well-defined way of marking up text so that the synthesizer may render it appropriately. The definition of Sable is by no means settled and is still in development. In this release Festival offers people working on Sable and other XML (and SGML) based markup languages a chance to quickly experiment with prototypes by providing a DTD (document type descriptions) and the mapping of the elements in the DTD to Festival functions. Although we have not yet (personally) investigated facilities like cascading style sheets and generalized SGML specification languages like DSSSL we believe the facilities offer by Festival allow rapid prototyping of speech output markup languages. Primarily we see Sable markup text as a language that will be generated by other programs, e.g. text generation systems, dialog managers etc. therefore a standard, easy to parse, format is required, even if it seems overly verbose for human writers. For more information of Sable and access to the mailing list see `http://www.cstr.ed.ac.uk/projects/sable.html' * Menu: * Sable example:: an example of Sable with descriptions * Supported Sable tags:: Currently supported Sable tags * Adding Sable tags:: Adding new Sable tags * XML/SGML requirements:: Software environment requirements for use * Using Sable:: Rendering Sable files as speech  File: festival.info, Node: Sable example, Next: Supported Sable tags, Up: XML/SGML mark-up Sable example ============= Here is a simple example of Sable marked up text The boy saw the girl in the park with the telescope. The boy saw the girl in the park with the telescope. Good morning My name is Stuart, which is spelled stuart though some people pronounce it stuart. My telephone number is 2787. I used to work in Buccleuch Place, but no one can pronounce that. By the way, my telephone number is actually After the initial definition of the SABLE tags, through the file `Sable.v0_2.dtd', which is distributed as part of Festival, the body is given. There are tags for identifying the language and the voice. Explicit boundary markers may be given in text. Also duration and intonation control can be explicit specified as can new pronunciations of words. The last sentence specifies some external filenames to play at that point.  File: festival.info, Node: Supported Sable tags, Next: Adding Sable tags, Prev: Sable example, Up: XML/SGML mark-up Supported Sable tags ==================== There is not yet a definitive set of tags but hopefully such a list will form over the next few months. As adding support for new tags is often trivial the problem lies much more in defining what tags there should be than in actually implementing them. The following are based on version 0.2 of Sable as described in `http://www.cstr.ed.ac.uk/projects/sable_spec2.html', though some aspects are not currently supported in this implementation. Further updates will be announces through the Sable mailing list. `LANGUAGE' Allows the specification of the language through the `ID' attribute. Valid values in Festival are, `english', `en1', `spanish', `en', and others depending on your particular installation. For example ... If the language isn't supported by the particualr installation of Festival "Some text in .." is said instead and the section is ommitted. `SPEAKER' Select a voice. Accepts a parameter `NAME' which takes values `male1', `male2', `female1', etc. There is currently no definition about what happens when a voice is selected which the synthesizer doesn't support. An example is ... `AUDIO' This allows the specification of an external waveform that is to be included. There are attributes for specifying volume and whether the waveform is to be played in the background of the following text or not. Festival as yet only supports insertion. My telephone number is

    $@Cw\*km%ZȘ]-'z: "f {ţ UÕ۷;wρEɢ,slYY6:B@ݦ.b1G")v[eY5lY*t&u0rImdmxnzo eKGͩ)E2Zuʱx,aˑ<9[Sf;SE F\׻K^,}TM62ީRO}H*%1 Jz UψH{:`,v:֡o:` MzI|M~o%+=[1ەF77ƫ [V_PKE{o^q]w Y=ow2gt}87w7ws6ݠ&Eu9R&WUwVr$8nǂсw \&Akvw3'uq=9Apc6pE OHUc2m&tBu6rm27+)AeG+&FE|gb(%.$wHTv`q.gr#Ȇgm7yt7ķwD]xxCRt{\+yjUtgYÅu&XyKv(Ȋhڂ{\Ȉ\aȈzzt߈gшDGCf4 4ܰ^bPndXʜ(Dy)ud$ Z:  u0j]sI`*eڙ)gY:j+Z$3hPDl vulmyŗJvD D!ZҫGj;hbhšVzpbG(IJD*VAspE91j*J+#d)zns鹮6Vج֯h)qg7ꐏǷbG*ڰwZ2[ֱ=V*;ն"{q.;(_:{8q6وEKhܑZ*SKjy:s:f"Wnõ mUik+涾FcKfrk"`K8UFl jɺygk{"&_[KkŸ֚|;%k󹒻\ַV  [6˻Zպ{8Rzuq3 +ּx[b{˽ +Kˍ5CѪCK=ZOK(@;I0J\Kni8 x̸3ewKlZ/Top܄D)Ms|ʔ$n+| ,FscmӊIBAܸD4G"PCDEPHM*PlӕIZb̓vd% ǯ^ܪcuDjjdft[̇qL6n\,i*ȣ8/©7|!i6ኵt×,ʙlNRfɆ,&㸱sį<3˅z˄\ˤ|Fˬʾ\ɒ,~9LY̸̺ \̜ʜ\uYTch[ ;4ϳ\m оR;festdoc-1.4.2/speech_tools/doc/arch_doc/figure02.gif0100644001741100001440000000552307262605664020771 0ustar awbusersGIF87aK,Kڋ޼H扦ʶ L ĢL*̦ JԪjܮ N)}qVC(xbXxHY0)iҹ Z8 !ǁjڊڰZ6 j˫K|5 q\|4||<=Mmt}-^'q];./</nQ﯂.l 6ὀ!"Q8fȑ"AJ)W| 4̬3Ν<{ 4(5:8pC;1<o,sh8ao;o葴Qi}Ƒ7/MC` HаL%]k7zD‚JXXnU4aa^\Hљ 1RUhg,4u8h(u Յ󫐎@JW1a *p\XF/Llo\rt ~B<F+c [tD'j=shOXS?Ѥ83b/ کjv9Z.E}R!y#5fN\tlQz~ ;u#׫{O"D,)&v:Һ: >:;<"ӎ&;˞;jXİoo7sr/_^3[e+36/??<@뛟җ=D oo#!Ӡ۠$nr_⠮Qe&&T@H9$ EȐe!g" ujƗ6pS&=4$&)>zTΐD)NfFUY,nmU/ *2S\\0wKDLf$L鱪фjb61=.Yΰ Ӱ:kB'@+PRLOpiMy5CX AEKo.Q"<#}$6MS^4 _)5*Kmb7` áV)BSutW+ԮVe9Ĥ+N"E F Xͯ{@Gp6˪?H{,fYJkfuOC5@84bUV-E <-;{!\N6 ]Is\#k>iTGo"lC$ Roxkb ɀzdzW9dUrmHg2moJf]V'_H4eoGC (2+k KIW6 swL^LaXL0D|0XN8fm8 \m񈉬8Ban.PF=O?"}M_<0… :|1ĉ+Z1;z2rH"4)BYWL}/78Ν<{ 4Сn> %22SԍS Ut֭\z 6XYEtb7kM\8suXw޽| 8`#ynÊ2V8an8[9͜;{ :ѤK>:լ[~ ;ٴk۾;;'M7pO ǠMGI+qS)ܹsOu{߈XMzIvjܘ/F9@hY<'he.W{1ZpY_馧)] boB kJkފkk.0k$r#ajj,IM .H)t[{mv:. 6*Ry ri(N:%!ٮ]oI\ kïQ# /a  kh$(5o2DHY\r\+K;qΒ2S-քLDӜ6] ͵L=s=p[qieI(mHQ>ĨMbހs1y2^wF>%W"zf]㧷:k3?{{|O||/|?}OO}_}o}~O~柏~~Oߏ p,*p lJp/ jp=-#?4Ǥ%X99*#K*A$ ƈ,)OOL[,'3J$ƕD-o\~x,kU:Ad,Od*s̄1JX2<滌9M<7 ps,9ωts&.N*J ڥfyuit ;9=Ijű&3;ֹk$7QMeϊ;<@m$PEu'T:׭2`crZ76?2)2QNYmilРjtK*.)7UˡФKS(bt_J aR-)Thǩ|q5n^zIm(ci_U& PVbQd]LaiQ -)P(QYiOԪvmmT{U13X.LqVmHGY+;l:ӦZ'Ti!œ&]!zv3Ű{ْ\3z5RiyެAsE Vor1UC{YWCrm ޤ~5bUՒ >.[(</.K-f(5n ,ha31W;̟`R8PEXgҩ|-y͚T9' fCzo!b=02sdp<8n]lD61/(0ANꦊhqNtJA}c̵n+2v,լVYݚ.ծXZvl[{^ hK{̠cAlk{ܦ3];yBgs{J#鶻 x6|O 0_07Mn`=o Ep~u<)ݳxp>Q_=xc;ׅksď[r48ŵw^#o,n/=ù͐c4!/Ep;Zs>qșFljYUy[?EN0.^_سgbVsn ~w^ 1k/k~?Ћ~/Oԫ~o_~o~ /+oKԯk/Ϗ͘4TܯpG8q[OseT o$^h_paDPdFa0[HDo]D2Ɓ7(QFFxQ5B$8/`e ؂68~:<H@DuG"ꇄIKȄMxNJՔMTQnSXIVHO_{X(blLU6p sWmgTwtVfhvɖswh:`4 \$(t)3يҕIp]Gbu(V񙍹%eu&fxt9xyEeg)|e>8ũ6_/{ɓZhٕY`ɛW64:?;"ՑH-vSU1v92W|I2sğ/x!BP *Jj["dpToe,/yxe&_ iP%*2+fӕÂrrI憣.) z5(wqr@ "B:Glb'DtUv OW tZ)\ڗO&SsbjdYWESwhlZx T%OޕI^Y&ÚHirTbbE$iəi7wH/o(kx3H*% vӨ򙩚!S(jw:7x b4sקJÚ Yi-ztj\v2Ūnp*cz)mzdgb8-Z$cVaiWctWkAyWygŊ\YxfRv˱ !+#K%kW;festdoc-1.4.2/speech_tools/doc/arch_doc/figure04.gif0100644001741100001440000001633607262605664020777 0ustar awbusersGIF87aAi,Aiڋ޼H扦ʶ L ĢL*̦ JԪjܮ N{XGXh50x(yɣX *x)zBj`  ){kٚ닺 K\Lh9l -=M]m}]Y=N(h$^Ծ?3x9^? N/HMR/\s*1$8}?& ѵ 1D 59Xz`L|%4'u)d8?l1$I>q fK=" 1kDDA5צcmWVԫ qUR gx]Q{E_~Zw]a>V/MxSV9gfɍy.Ѥ?.:uǪ[^°R nhs z08guAۿ?~ ԟ&vp`J$h8s/9uWa~b9H'D8 S*Rȡ.V7Hc>dIA'nӌU#Pd}Ene^eTZ^M^iP#jzg hF)gSwֈ0(oYHzfhni#Xi% Pndj>iƒykJꮾV檍Ɖ)l.l>ANKm^mnm"TfԸ掛ǹ. Ct / ½6q/LpD˟5۰+1SyW% q1M# Rrx'3б-?2z+8" `߽u5StI]tHl0K{]F1,"W\W[[٣朲_M;m]?jxDc7[,7߂ 6 k6(uֳs᫐M< w܎댶8Z>9-=8뢫8bb^둇N26zǎ;d5 ᙟ.<궣,S[o{L y+*y4<#Qzh>7*Ύ>O| },MO̠fIW ?cwtBG@3:*Ǩ*=FPRiPN Ԥ4ySJkSPTw]}TW=[ճҭv_a95eV1V=QV^K1 #hםu\S~vflU2n)Ye-]MKM.qWW[&h .o{k6sq_.R~jUIJ7kRNrp%o[^%z[ZVl]3u˂r_k00_c۰ax-wMFN8Dqax?&v̷HT㠉a\z6{1~vőRd3֒eD,Y,ggmU2M33d6JC#5YDs{,3R "sp`h.yÑAќ{4s.ڪ~`:]OO'O eP#գV|YRG֮1%V_Zּv!k.d+{%}^˒,^J2]m^ܺ"ɍ,o+Q;wi|{ |G >0An,HQE:pZ.vq̄=~>c\1/Je4;6KF^NP͜zbp svGQak3ުa\pMY/IAKv=!WG^mf'Y,~4{BJн;˕OyEq| nnYrpv=+m<䂺9sz}TROأ}#{%wE^'/aC-ͧ~MOkWZp1ݏ#a7D]ϪMVn>Թao(w+ضX ӠGqhq4â#"tBMXS m  #"H,*W5(#/؂&m%=X ?8hHh7(!|r&U W,*ȂM8`1KxGCƦo q(@>8^( p+w8&6~{Hu%/хa{/6m(4h(' h}xx})8^(؉2SA9T 6^x(+YyȇrAېr0Mm ׈wLx x'A~$  Ct~4i1w> g~=v @JYTPjafAG ؐwnle9Yuؑaa6b.aqS2epk-&t1Iz!3Rr1sYǒ%WV'*|I]${Xs2|CKqƐمf6T #64C_w\xő;拯^jkT %`i<,CghdZRd7|^S7^E|YvrvxfgmYy[YU'icQb9ty)_喨ՙ隐\Xda$9vIUɚS降Ōs&)TȌ䘜 rCBzvn*F]i/YܙdT5~0dSFq*&SvCĝdY~ԏDM eJy zK՝f֞QH"tUNSOTeC5ĢWx zSL4eԢX&P1G# ~0ʣ6ip N-A:5TW픐L9?TMj;Y*^.%hUzWj%ʠNFLzmWqX$OPYE R'%R_d}l 3I/1R|LRWYun [*~C|%u^_"TiiKgCi:馳 x5Uʜj۵`%ڠiX+ڜRǫ Y١VYsY}*٭zZy)|}]j ڮ*ɵ::ʮFz ^ʬ}F )ٛiȭ)VJ׺u1z{{Ŋ*)# +(J e -} p +/[iG Zv k9:Ceky[`sIvV+2cgaQ[C&BxP9`0V.Ɠ\ٷ1zd{W1t¦7 ji3а+tJ;`:mᚹJQ{%[ ~˲+k +KOkX,K m숂x;xȼ{?ȯۼKʸ-īH4xI؇;Ⱦڊ- ҿGVK;OH[P8\- b  brD FеԘh(-|y\nFh6-ʐUHiYM [}YX$cͅimo q-sMumwy{} ؁-؃M؅m؇؉؋؍؏ ّ-ٓMٕmٗٙٛـԟ}4(-ڣMlзݹk1Uq+jm=&]ڵqD(k@Ma]=W)Ccn"ܼMʥ Vϧm<}~|e橣;;ŧ9K=4EQf-7Vїl1~df뛈LW-JxFX J%ދXG~۹ n8nxL!b֦H>-%Ž3} Z@M{Ǻ ޿)r}6|k):Xcwf~-gPے]A\ Op yنĨ}d@ƌ=tu@n]^<QdrZ>{v\> l u2vӂb_w.ANL.oWmwqw?i1}x}~zҬt~Ay1ݮw9KЍ^!B#K}ҼneJ/]> u~;l륫9 hˁlڌN9Enا->L.;h^en<\rl}LpéL%7 X{:x l"  .,熃\2o6rd%Aq!?_e =*/@,Te1}.D1TGe]>?z]gvZI_~<4/ b_L&jd#np rUm^BQf6\>2EkmI܍U|/߉ni5֚ݭ<̝: ֫T?GoUr~R,ɯaOm OH;ڿ<Կ-{o//?\_O@O1ua<*q֛wP<ѴTmKAO(!ɝsdVgZYa>\67ivc^jK  &,#S0u63:o@UD9=MOdHQY[]_QUagikmoqsuwVGy|脁5a/qy-8 A)&L8B8qAqO m}/ȍH0ʋ(;q94SZI !DtPL:A4TOżD#Q]8>bhl[{A{6^M]4nK:\IT`4:FrK‹/e!?Vbg!v3gWZM´ؚva p͵#\x$$X+,{xs3cnW#8:wdxOgQj'=l6o@J1>~O"0oD-@lM9#|J(Y_$Ŝ^JN<&Tm1&YD!k#KqDKTEE]`҆K%I3O62RMj' W}vPRϼ5WVSn-鄷V-]q=] 4^@|S_wH[BCT=[5\I޴ݭW{ XᐷdmeilTTQY)6I~wևYd*VAumfr-ͤq1.❣^rW>VM ]]aNRnBCiJ=K?{I{[@f={::+g0D(y?xt;{㯇{>ҽ??]_|WMw(S m=跾剎hW6)%`@p0qa§B}% A:Çpo}B,zhEJ\0C'1WrAsE,)ZnCڄ!"h3p)@plӈG؍ HA4!ɇ>&#!sH%1IMn'SJQA4)QJUa2\+'’0+HZrU /2.ghLeC\3dBԐfgfSn~ۨXNuBb^jgM~N- 'vFiLA63YHDC Ь lӄE)8լ8G]>IQ* n.2-e ]-42yST;)`DS:C5jpzTbKu*nT4jKjën$WOXC5J%YEf5mu[WΕu]W}_X5a؇;festdoc-1.4.2/speech_tools/doc/arch_doc/figure05.gif0100644001741100001440000005177207262605664021003 0ustar awbusersGIF87a5b,5bڋ޼H扦ʶ L ĢL*̦ JԪjܮ N ~'7HXhx#0p pIV7Y c @6zJz3k[[%K[v{P KlлI|8K$-]-͝=!H>?NA?#\P0C\ W_3ztl4v-xGI#6dpmD=ԧ-!htC`-eWrΉRMmh5 ԥЩTCJ骪֭ '“_ÚȒγgӪuƖLDՄ4RxJ~69fcK@{rY^[0\M6&'.<:-zRm_v֤kGrf{%/|eqεw=xәޑqٓ__֢|ם'o[u (^``>aNH! p bTuU$Sl8x!b:˴%Hي6ވc:!>$}AI$E#~($4d7.=68BL"V~ fb"fciɦvGv$8(fZ"ewbe9cJYhʹhF裒)p%N[5)' * k*kwk~j"뉱8 ^m JmZmO _O>}/E?:z<{oߋˀ=٘}קoCďo>%| ؿE.c HH/-@`0`v#3( dG@ P/3L Iʰ9)R=PC@_ o#GLab =KD7 kP"!H/*}9hctc^άqstGQ~4GjD.:/~d#x HBfk#sW1cFV ౓d)cH4ҕK-U9EQ5(Zn$,!IH"0c)2Ӎ4eXbRә$]Aj>< 2 9Q"hR3(Ɣe3Mh9-qL~ҟ֜6sNt$ I˂v,)LΡtg<s,ў(C~'h!A9M\4(BWP4hRt SG7#FŹGov=f*IP9iPAFg(:mHVUձv jXNZ(DɉnZY׏u8XDdE<5fT,G$2֮+j^yTuacT-=hFRrT7^vUjR,s=miDUMlnە 5nsK\>t. ˧Rq5-vMpjh͋ZVA#wu9]Wo.}mUpv׵.~ \^W½o+`Ѿ/| g0uhT#mz aX+9\cߘ./󸿽#r< '9 -w[#KQ.]{Ds"-s2d¬1vf6Sure {γa\4k=ި fv](~.@=Ҝ? PzԤ.OT7n76XCL֡K2Zm޵f 2ZgwhՄ _#{پ`g{׮2vͤ]7gT=)k&7vtHv hڦw٭WhƷ~g[DHm)%eo7<1g|Y83w"DVLXCk?樈9n;:gS-~n%_7NGɼ_=yӟtK6S[crZzφNrgU쳣}j_>rG]pWׅNc]_w ~wa">Hm'KdqPv<2ˋCYU~]^Ҕ7w }ҁ)r /xz |i^0>gbе)t滅}׳A'ߏ; ~Zs}d ';|#;m >&whmx4yas9F%)HxbTF,vPQ.(Y$(LG[UekK[[څ1+c˼›㦼kU۽{K6[;[zBڧJ;aKNiu[̫k{;;ዯ+Kn!Fa7,|hjR[,\f!ܿ% zG | "+57 <4"*#*{ |Ɗ:?_8M żKb xr=~\Ơ6@Dlp'g$>@d #v@eܢwl+25 {LjʾiB Hvt֓#-'je+ȫ3eiɼ;?Z KmTz|Ajcx bTHQ c5lbZηc|"9Lê,(*+F,ov"q3\q{0}e{ gx|‰(5\rp̉j п<(t ǟv\+W6z$ݞwѶ[-yFI{'7)?%}/[:j2=B8 {6_>D-{4FH^NJVX :Y9U-lQՕb֋6^Z`=;^ d=?A}G]Wh}Mc.}]{}=ՐMmЕ퇔m2˙ ٟ-ڣ=q-NG'nr+xک}δ!`kk?k ) gܡCŭ~lɫУ֭/ս 3,ʲq> >MC6ޕͳڻl]km߷mMthvq-w= o~u > ^ n=e/];W4;n*9@+6~2't,DNM>$^(FoByVa>WN[Jk.}\pHu6i^N;|e^mg~;.N>wԜ烮s^z=Nn..켮.k~^^ڹ~2.=^nwlNoľ.ڎ^N~6/AJ 4"!΍tMm8O9_44о\ʎnnL oBVWY(_ObOe[ovYjq/$puy+mzo+yw{+Tm-քԊ?Op&@]ԀҐؚ_m֞~xkiOD??oט?_j/ظ_O_ͯ_۟֟؟_=ʬel߸ /?L#aӨEq֛wPOCLlA |P )Lۂӫ %.û+GL1:Ulal$aDB1c:Pl*R)!{J*C RH$(,s3l|S,f0U%/s8InN™Oܡk1:Hc*eN4@Ew Tԗe!U*4ݔSD0QOX5_UUد b_SvW=N]uV&u:o^evYqA} rɋ[u]_ɋ\w{YF]s-]dURvD=]q bznx^99c?Wň_Eik /ng(Z?u9Yt69+ŸdWޗ5^%F|zhMza~ W>)sH╇ZE{x{xts>zݞ*K{1 }S+csפĿh{[R|kv=|+}^-M 6x.i0G#$l<v#՟0d͐,DJdKW !Wt#*M" EX+"?bkLI_'QSfDqؕэ-Q&udpE81Y(1jqmI-SU$!H!%M$!̀ 9ђ< Vn\4@ RF+@Qu,"#y<\/J+/]iQ~X&) iax9҈&/Mm&$$IpD/?e`g;àI*S'>cyT\aXg̓.ԝnQJsa M*eMuԆDEoɂ3٧DR~hʖ3 mJLgQ4$Z ONT)F LOQésT4jh\jҊbiW*&5eeXͪ6u Lj[WΕu]W}_òM#la!vX:L1@E6awWv,,:ς+J۴Ӛ*:[m8Z c垆ڪ 1[[6Dmq{ \D=+{Pܘ:ʹsцWBw\Bvݪ|x{WNXEtKֹ7-m}k߰/l7`pz\ m/\ 7„0";.jj^bxp1a2IL 8>)jLn2m$דoZQ\b 2B3AU.qM`1 f1)U]5skW!w]-ٔHy~<FmrmSʳZ\8׈7y؟u{Powns7vf|6e\lyⱷ_^~DOYƹyag˕k>]ӌ7+ {'ހ7rc=wr~Sw--xroŶ=1'?s\ao|쓾/?Y>;~OXO/H//Oc"'PO+PCP6PPzO;>[P' ُk0ma)ap{whPM E/9-T2\^+ʢ _E -Ĵ_δ /, ?Oаg GGjP>S TD#R4UB&-UQl8b: NsrAk@af\Q$?&Mu; Zo%Ͳ*ggCTekvi@h30jE4sv@sj/b2j/iͶwV92Bl6UG;ykS-Z4Vbvfulg66_?ovbvu5Hiam!< 6#r99ϱ3;&wutq5M$6m'o7kyr:l=]vs3?PcW&uun2rx1vuXWxAvWVtIoW g(ve9wsO#ތ{A|P3nJL`%#*b"0".~w~~W~7W뷀 kx%xX7Zo W(Rs\W׃IDE]Ka6C1pawduhN\u]ksg8WM` vu0.X+mYMwAxS#mkxf$ ?8qD } T}&424d&҄vp(.w18bĐI8xcF/NoLU"f~`PsFz=@u!k` l?@YYYUOy5lnVqOCYstK0ҐUЅcaK)4q-U[XWV؊5Yڙ9y#X5ZYFR⹹U:Lx5ҴS*7MbIm{O{rx.s3-'uyOΡ[FU?z@9-zr{tF~Yqcid9Z}񸪗ڑ榷::X[٫HJcYךZd뺢5ZGXGMC7dqYWI)v88 =Vse/ۍ4{$H%@=InGt?#{v?{Ry6ng[;;ճE';$d¸w$Jvh=ن_+*7aOi/pKTz`ɱ9YEvd;h!w;; 0{KBCJUaռ|;7ɾ{35<vM1[}.i@ ٛxW<{fߛ_ǡ_uđGŝ\<Gܵʵ?1<+\|_;˧xRHܞ;|#Ӝ Γɜ3v˛Sj}ˏϳ5jοrj7=υ*۴֛w~ި_i+`\Խp&R17z7zJtA(RooqYvv uYRkm{q^/w6 w?>hR (#_zr E ?rRVZ/?&"Y'+rKvp\7n+9t #2l3*6vjQ.8,V]Lt^_@߱-oazco:` ՟a"UHD$J&g'%G)@gi++nn"h"0 +p/-spu1655tSlUL2v:gx*yzt+8o|)oL\a: ^2:t 7rܗbI㳁C1g F#ʜ:+RIT1m=3ğ8-ڏhœ,W}w*V^,R"l TFz*,G[UiB7M%kOnˊۻZ-Q-R ^Z8.O2NvJrںbZU;4"7m1g=Φm1Jmw%hppa[qMߡd3HΟsݳJO6ww%8o}A_o,{Wd5\郗|!]fo2vԃ ga; w6pdɊf b G`7#xɳgP$PIf\yam3$ɘL2i`v4E q^T8H$i&] beqyBfPf*V!*Zh;9^;nbiHD iq٨<) pY%|Zꬥ**b*_v(vJk)+e$lYs,J㥚)(.nvi'ul-Qg/ʩs*{ ˓o)W[|, _ M߿"G1rl29`5i&6s-0l? ^ I+rKqKK=uG7]Tk7\5_edؽ*9l$ka}.s[Ȫ++a7rG d.b؄quڸ.z;؋$衋>:饛~:ꩫ: W-Kj*76G;h.µ/{C>><}-vNSOn]'y\K ^ܷC?Zyjy;h6| P4gE$u ra '3! S.|`(.w4pL`ax foBC$KTE'FIh,rq^"()Qa,ch1_Dt(9ұv#=~# )A<$"E2|$$#)IR$&3Mr$(C)Q<%*SU|%,c)YҲ%.s]򲗾%0)a<&2e2|&4)iRּ&6mr&8)q<':өu|'<)yҳ'>}'@*Ё=(BЅ2}(D#*щRh٘FэjܨG9ю 5)IOҔt.)LC*St+)McST7iOySbF=*Rԥ2N}*T*թRV*Vխr^*X*ֱf=+ZVoNNUTR|HcCMծM^u@QJI7"ӱ_, Ȳ K^)UBk*f5qD/OMS"R{el2Uՠre$=kEM[kBBŮ^¬n ^WZƕMPyǪWؘT{d ;'Kwq FXԂ+*f=aj&8K,#-?Nb0dj=<vta<Dcx2.Yݮ~OܑFe/&vVb0sXZ01 5Hv9Et26K=OH3!g$<$lw|eERX.PG;~k4֑v !bst^01jz`'Қ~5sjO+P;vO3֨~AVAG{Ah#GwfvSm LPۄVvcT[bjٵ-(o/Kp٭H;ƁaKlIFnoYx֓|o|/oJj;|=?ʚ+N>3(UD~.&ϡrpx^3`B<]ы~u'J2ܞ48+NfKB.NuT `Kjۍ>v:q{~»Hc`vvgW:wK~t_ !GL<*#Qo쑟|ߤ_Z_c/ޓn~od=/˿}4ş `65 k< *HN!] v~  `5`9׭ q`\ i`I ![ 8N Zj&!Ně`J<[.ajVYYa!]!f$M&N{4 {䡪  "缊tسKb R!"$n$^:vz"%r?ebb!vb%Vb+ #b-}b,"")("M0*Z)nb3"c2.3J0 4#v6.22pb51n(:#9ڡ&D"$Ϊ:F#9nI0c8v}8}A^5$&̣7:(敚dM% >$/haF"VXBdB":4C:2K}&MJ@ GNLDA֊E^\>6BzLqMe'&e^ e`ec.xZ@dSV&!hZ?NZ%H\q\Qh\eO&̹"BPfKTL&a%Y E֣V\f#`I&oeK df_F%VM\hreAϙEV忡k&f[ $%5fkkbgjfcLdVL*frgpVd fWVs2ft&tglu~ mS9PfT&3֦y'gfXp2Dzgmqd\§șHKu*}OAb}e&"`c&/lg4Npڊmڋo'ma%g`3H6qBhf6%zhh:( YP"ڡ"䂎NhKd#[)@n:hibi{ZiyJjBi:R钚iN2)2*ihii鑞cםzii"2\Brj W*;F)j:z**֩jje.n9j~j"ꮶjꯎ*M ᤮ުj@u!&!&)>j!a"v璽QkEk堽tk췒`""|ha>,FN,V^,fn,v~,ȆȎ,ɖɞ,ʦʮ,˶˾,Ƭ,֬,,,--&.-6>-FN-V^-fn-v~-؆؎-ٖٞ-ڦڮ-۶۾-ƭNG퉹 L* .4 .nLΡV֥冮Dg.VZȴc.=Sְ.]lnM\.R R .7/ܡ~n&[o#Bol.Za܂nV"No!.z2o$܁֭ r*6mjo6cf:k/Z`*-p/[,I06C0f%UP wQp P 1EqqP W7f[͎`Z;"NJ]'6>I,ed:v$-ks~ K\NfZ .y "1eGnOкY%O 1jkp#_ "*C#\EK/+a.)%űY:!0 (2H1sqdfT3Y36_6g37o7w38$83993:: .5==s;>3>?4@9s ޒ4ÛA)4<{B/4O3r=2}jv.4c!>ɳHDfo\2%M21ONcn_1L# c ~T; $K'C1$`Gh.kEUUYVf9uzݟP\$õVI"tאW`Zδa; "5aɨv .,]6`#Eb{uyNfLj+6iCn6_\cvHC gXoWD.+bGvMRCg7-]qz\j7pXx27lurWYiXtdtxCz#plwՉFgf"mSe q%IoG'Ӝ}l7PrԂgx;HhL[8[rb=tCww[CWJ\FN^+ވ7ksjbn@wr{4)AG#=}k+cr{ƕS|+˸|ϵ8W}儋687o_Ib`~88fk}+dSQ{=o&wCS>zcs#MlHeϒvq*f\F(7:,YyߴEv7 2K˅arx!y؍,iRURgCLΘ?;mSwЅ:{ٮ;wZߧ8˻<𲯻Pǵdj`abtp?; 9n!TKVU^ḥ;ʼ [l(([]u|%VD;:{8޼rSϛ}=Z2_ҵ#CaK6ZsY գS ~ͼ7) yE÷9{ϽCvq3{K=fɾb0>>~Dy~~?B~+??";?H[D6ScC{h{s?W .?>,#+Sw?$FNX}ScBq$KDSu%AԤwk 6wu|#'4&KfbQmZ\ CU||Fkvmsz~{4 $,3DLTti|TaD -58:emu}ER]meMV^Dr^ɹ̚]tfnVg"2wB'" ƮROy_g%w=g`{ $|Pq YHQHD;y T(v㒙gjęs@/rB  I-MR㩦OQd겚A*8`۴uJ>a`MdV2nl?}-VfgtE\ߺv F2Y '-faQ2:Si;mpgvy"_œj,e[ۛ4'{lxӭ \臉Ӗo t}&嬋R8qyͧ pr гGd QB Kq&8B2<E9+QV;XZ F5e00axh$VjFt)no8zG{?m߾FZgoM~Ѐ"X  Af `E8BЄ%sl M"#6 sx"@&6Y~4O2aE3DeE!AxD$h"D&ps"EPd<Ə]F8ұQͨ9"$qfF<bG==|N8 FJRed!gLΰ$DŽD!)J>ғ4S(1Ohe iZҗ *{KbД_1LH0әI{͢9MQ3UUuc՚E-WAWְ5a.ֱ:ؠ{V^'R=Ȏִ]iUmR"(eE8{]dF[%nFŒc7EL>z.'l: fvp u*"uOF:gwKP~5I5M|Kowr WO]Ջv27ӊ !\FЯ{kXjM}"kIΡ5|?r=}}m5 .vƣn˦%E` '8qԎ(2z#Ӕe/)e0Ya>wJdN3f:ǹssg4#2d op]PcITz)_LʦDEJ4Ǘ<IP 6WP2U准iT"yn5O ..5k蚹mlh): vE҉f։?9ms:z!&GdlOR\ gw'| .cgVA޿ A=!k–ҿk#sn[ కTMܸ9 N؞a%8-o$;ÒM˿vqj S湦i~K)_-&>v 7Ɏ&&@;Ge~?G)-K*NzJ ~.{s s?쏇ٛN;F|5yDž<` zo$.3'J/j+k\,Z9F}믮krV*P;'cOzh7k!a?U}dm?{>귔B?S&ʩR3f;. g/\ٸeZ7ЂBk mA{#< d9츕:B4@ :=$cCU;?9o˶#Ai1^kBt y>#CEBQ/,EJ ?BC&5 B׉;4?1$ACCTqkT'dEB[B,JD C|RcD;DAD,Df8Cod[8EV4DY?'l>&\22+H_-f2CX{P-*Kl&=j:\lhLƃEfc'4,GXFJE$lGZCGL̐qz8]?3yĽRAKTEmT3v@ GTDcDDTHTGl_%ZFgXk,ɌT޺>cI5kI9{ɕtI33II첟ɕtɠ(ȗKH^Ƥ\JhGtE|F\LNJJ.񝐳JĐ|JyǦ HGw|Cdʴ39dEKKl\GFtE+2TLLDb| ;M4HռCʀK͓\ l<7Ͷ*qbMzl!TCtDSNd ìNR4Om!Tdtd<m.;hlTt-BTW,ucs?v]Tj](kK2媶!ȩ0pHnh}V{;^ŖEFukBcznN#|(%{5ٍMj`Fz4_NO>5^O`~X` vY F`UQ]`n`Na.a~aaB=aF_`P\r >^.b$a&Iea"^b'f~b%b(a*>b,U)b >b3b4a^e)v2bv`/]65$Vc;a?aBa dA04dFbE>d@b>~d16%9~c1X%ceфSFv!veCURe Z \MEd_4^vQWeeV:gV>h.>8.LiFQh.fflSfjpq&-r6sFtVufvvwxyz{|}~;festdoc-1.4.2/speech_tools/doc/arch_doc/figure06.gif0100644001741100001440000000364007262605664020773 0ustar awbusersGIF87a,ڋ޼H扦ʶ L ĢL*̦ JԪjܮ N h08hx(GȨy(iyCɩ I*jzz@ک J[k{7K뛦[;L\< ľ`0Nwa91G xٛ9jch\g\ީ'Fv狏)2^nL(.X墣ThzZ{Z Z7Q窥뫌'*zP%B dY,$ YP&XSl bo.:ÿ&/llž2 %qŲM"lqچwB2SQK2gLipP2#/R11;\tmК8tRPGjuO7]2ӊ\ 5/L-RkSLnw,v̽j6 xGyC.8LGπx 'o߅Wrڐ,šZVז3t+L^0oxt:JCX(&.Yd DN{|J?Aft^[}_0k(FcHl*3Cz{LH)1.#XƱ5""snJnN4# Fh$ ZJvKsoTYY(ӕl0Wm˜b33:1Y2j]C,Mnn" Zr NsMbN;rkΓd8+uAt<}3 APy.Ԝ?TP^Ĩ@۴UԠUYIMsRfT4+>]QŔTM=:Җ$EO Ԡ u/f>Mzj&՞:5*OTPKiUsUSESU5]UL3VY6uYjZ$Ҍ•iMGZWUee^zV\D-aXJ4`ݪ^UƊW) nl+Hbyvf/{ZZe`Y{Nve[qY%nC Szv-DSZCuroSvfTFj ZWgk;u[ [޴74w x.+x n Kx/ kx? x$.P;festdoc-1.4.2/speech_tools/doc/arch_doc/figure07.gif0100644001741100001440000000425407262605664020776 0ustar awbusersGIF87a,ڋ޼H扦ʶ L ĢL*̦ JԪjܮ ǁ\>^ۆ7^ߧX8x(ȸH9)YywiH Y :ښJ:K[ kۤ,<jL|˱ }EMbM{\,^M N΋=ν\n:Oid,.'!  !P PH%CJ6xY̙$<4y6(ƈo:} 5ԩTZ5֭\z 6رPۑ9CIFP.[&+dPFEޝ}]jo0b{Ni υ X98l3g)fŏWF}Ft;4c=-u6ưlԕ8[zQ8ƅPP5q _:_+AF x>P\jrNHgu ZgEȂ&gJ')~&+").Ψ",b:c<#2$ChE BbN> eRNIeV^eZne^~ fbIfffjfn grIgvމgzg~t䒂Jh ih&(ꨢ2%h'}iڟsr*6?盪(ZJگ ,L{8|QQ mN[BeQhȶͲ>%담q+F.a:L{қڵF;[rYcWŌ=(,r'?Eg<4GyL,$W5 7P+KS,wF6c]l#vf/\q׽ڡwo=`,v={q7DטWNh5ĵσ+d" &ΆKN^X6mAb7-1X|\F'QKk$QF^mR;w1RɎ~aWG:l (Q Jk$'!YTc%wI7fpd4IR R(¸lC|a*x=SFrzT%ZIUzJxZїx"1?Sȼ2qf>q5-XlzG7aR"eNJEJD8YNxRdg= |s? Ѐ t-AЄ*t mC шJtqgSTڜ7œtO_{no8< ,`%^5iANCT)#i} I{dـaX'vXiёs(j k~6W(O^F)#Zi~ jNZjj`(JkJk*T,%k{)=8{^ "+frx$Q8ӛx&b*.}V+źKѹ<; ;8ծ1Ӛ" 4l[Tz r"Lr&r*,u2?00ͪl08s> tBMtFkw4EIO9PPg"V_uZo͵k]CPa5vBexvjvn wrMwvߍ7i ~+Q5qsᄿ #W嘷0o876^:`2o> >㎂/įn'7Cԇ = S }׀_/.?J ~οOR -ZѢKg?ilt_# %P$ <X} `/wd& FҠ;4pQIm8Dp)"6dja9_IT@9qhqΡV!A,>QOQT)[ՠ02>c*hC6lw$ZA y31 hF?.@8"*1W|"1H6p<\kd]2 :2=I2Mʦ!DùՑ>L-c˹ҕ 'AƤ;aK+DOs7: ά:&"eāFԂ7F*y۩uɝ<'Y?q3Y',OE3 @9\hJЂӡ DÉP}$)3DrY4"h4RNԤ]i@;ڦS0g`Q c)xS bgiMSxT6D,3*S ըJu궬լju\W9Fԯ/b5O:'F Z+,`+]cuֻ@[zՎ5 j؁5YZ,cdžή]e+;b6lfY-52$-G6ڲ6%kXUҩ5m7;{Wbe'̞ģ nocZNB- 'k:ԹhƺqD}eΕ.,(^5&tHR6pJ9;Q9;:6qu^[J)9OЙ9 K|vkb=-]mElcNR͎.xu0K eN!B`"YƜ,onyL]0צms_XaA gX9s?\g|^nxe6?5X|91aK7IҦqiGπ+\JP'7}wFQOU?.#.{Tՙ$u%t\ր|rrfsnvhdٚ~nGd]cU5N.7k7{7Ä6qexk;%wYn|Z{ 6Vk=p]˛ǂ*m|C _6ӝngv'cn-rs{MxQqOZ5/OyfHrE],o˞G{37zQLS}>U A]d:3d/;ܯ='}uz^OΝT>6esCw-L1E?)yz oMR}3^G{Gze~qnu#OX{êXŝ}y|տyN˳~#? qw:|+?V!U~wXFRa\Kzw{~8b (`UA~z}"(2fa?vO~g$X.((!*c4M"}2| BcVfNJ"w@CX|P V!JHGL؃%|_S)Ak(CeHb1O4h|mHQ(hhsp~/0HzG"jg_m lXz]h|È0vLFGǸȘrT?Ȅv7m㘉䘀ڸ0hhX؎qH8݃RxȉȎ9~RHvo^h 94 I(7ő̇%{GÒ2i()%5n#'h-ɏ3=)xA^>/K3OyH CY)SSK 0Ig3a)1IbIx6FkɐJij3rYSY\94_$"ٕx9Y9ٔsG{9LRy2{^ٗə#ٓ 29F㙟X&y&YIyiIٜ2P霪 )4)ɚyI2⢗ɖy;>cʙ9ѝyiB-9Y 2ڟ^)i IIYz3i≡yȩI%*":17$Z+ʢ9j?:iI@! ɠ Lz2ڢĥ(0M Q "TCJYjGIʡإjaRʡfz`jmښ~ZyBJ9dZiڡʦY o ZJJک /J;NW*ʨpY"HzjsR:zhJΚpʪxp!JϪZ!Zzz*ګj:Z犮L*ZSJ#jʯSz1 ʮ㺰&;?ʮ#;Kª$ L* ʩ-#12+6۱NY$۰*E˳.1'zk,czPKY 3Ay>U%ѵ:RۮI[k;#۶O`s8̿L [83Rl-Ĝ̕XЬ, BZͼόŬ¼(̧,<ݼ)Y<,V|ϩ X\8UXl,],!,'l-]30 r;m]4mBMm ]u ie@=|π=uMct ZY2mlϓׂ֏,-ُ٦ؘm١ Ճ-҉]٤mզ]ص]ًړۑΝn۷ݧۅ}=ܢbȉ,ݑ|Ȋl=8l)܍ ߍݘޕe]L -}04pKo{o҂Sbl!MuFVh n RI~#N-~⯰,[{.E7.+NCNEnG^I;..;NPY%=Χ Zn4YnVU.\~^.i63lɳo">w&RSN .w]~>n闎ΰəg%s>unNw;vakNꢮ ޷g^㷾d>|t^^=쿎ѮоN^̮.n~ynL@n~2.o6~ﯮnՎ4?N?(.؎3Q5o<N7"F2GQfJB,^/KOW?cDbg_a6ϴx?8 /OobC*)"-M?r/O"913!eeun?k?mϭ޷vN RLO(q_;AWO߬o[_MZ:#gYo>oX__B}2xnH-o9݋ 뵵eN9MþɜVU^Ya]cKkme/Q'D:B/;-A(a47 #oŷ7SZqM׏HSE}co0EH 6= CǍăEQ#])ra@<3e^S"0c&jyʂhR:o)Ҧ$2%:VJC++sE{lb6> E;l(o *l&r3S~C}yB.׽J4T,W7}b4f:3^0hΥ]Y\SN|'tl#^w/= nw ݵu ?s+ lEAǾhzƯXhr^&N y"e; ?P $ s! ܎2LF+J-,C5 +C c DN/8Rԯ>C+)8.1P4"qDI$R=}\\XD/͏~Gxm]25isI N9ɺ3L)s@/lB ͒+GG6mXR..-1c6S>?=0THT*UPFT5TIORzto6\5WX9u?[EvUe_e5YqqbN`^ͳ]}6h0KX]g=7fE5rHpyv_- wQ-FU]n]f-xiũ'}^mx!C~8axOUMn]o9eqXgEؔW-~vYa݅(Hi~\sźW1&uy螄ZFj|o5m}NZFoFaמX[o|n n)-| ir:jiut^tkA]^JY7xqF_9۱W.T}kXځN}pf?}{  z[220tH>I0|`O.辞l/C ?X0 Ӷ~_:NSE_6X4;\(]Wh3 NЅX):DxαCLLXF2ҋ!,o!H)dGDLb%#^l!B HOPV #>:L#p/MZl!ͨc[$yK\җ5K)BA2l&Ǎm2k7Y4s%0Dʳd6mxGW1uʬ?^:ݔJz6r'B=~]&:9P4l4yʃѣU7;p޴WKttCZS^39iIjR2%Fҋ*uֻ0wJu>&P{*T^}QIV4|*;jUe[Uet *tud*8ֶn5T[j"vrmIZd5 8T)4ضֱHd6˿R%+i[Ѻ&6W-lYֶ~VWbR}"qY Xmmkڪ궹mCϟ~UG]k+zՕa;]>+P~7bok ?uo~ *\Rw  xO-[vN%/9 7E/c _TWqx3~eK 3n$_E0`)Mg`HdxHnLw qG+bK__%tֲ=,7&n}Ole?yip)ulDxf6RyQ-i2ΏYhкcvtcUxgnuMMԝuEmXf] lX{&AM\wwn!=kNZ`U^+m+wNomSڲ&]P1hk9v6}os;w >˻4GL{noỦvlZy_.M퉿^lO.f?1\se3cfh*nh۞57{tb@xM;=Ug{o޺?ml\B:+kz}f:ta|IGzN,K,Ͼw:)U-}o|xK>򁇼{qm `+?yˣ^x7`~sgz^vQGݍW<kɛgvaO~pQ0ϋ<]ArI̻'lMs߯hkO{'*ѯvD?Wd/p/v-P04Ho0m/.oTo/#n8ݒ`UM oT0X/JNOKNhN,<P3N OM l J o p а0 p w ð%0 qugW 00m OI+Q$lw w0pT 0 /$/511_>LB1ېQ1[diߑƌQyQCt6 ' 2)q11WO+ 1 "q2"ݰnLGQKQ%OQ"gq$c#WqJp21 'dR$irY#2 Eѻ qP(!ɑ$o"% %R_0*%='$&/7R {R_p o#ﳴ(k! KS)W1[r*%m/˫*Rr(!2,ݱ,Yr+3ㅹ s&s4R!u,sr.wY/,s$r2Cs-O-i)428R1SSZn/-6]n)ߊ3"#q䠑48;s0V36ē.R6u/7q;4s7I.:S,9s90K?r003S3#329s;˳5Ba<3=AE?m2sB t831Wt1s"TFFR)"3/R:3REyTTD3Du3;I4",C'I%FSBT09o+?GHt4KHדHaGOG{GTNA,kt4OFjIgS !SQ'$ 3E1LY4SAU2!5DEuVGծ4IPtPyRC:]JSOuOU]EN͔IctXsDS5) REORI_AuF*.H,.W_Wu^u\QX5TKst>tYUYL_tO[ՕK5baNCv_a5_5!4ZqP^PIdd\RVa>7QUS@f-ve_;g76akU[M~['h%]cig5\=hNtG6N6kV?aXÖa#u+kufU`/Ug bReul}vje3jvHQgmb3YlVnZWu`uLOVj/ nm!VmSums qhZsnppRm?samECrQHMn4qqq!WvAq9niux/t+jVsff_xcUUu[HvYC$MFt^"ΗwַwAwCy'|wMew{eA#mmBc:XJ?΁KS^ll{kyw7WLI=|y²4.V8-,*Y[xjqTVx„ubIC-Sjxr7V7 x1mCT#<<\9\*%آ\7#؃ Aσa#Gp|̓Λ<-k<܎<}J^5[3~u%<<$ϥ<:&=O,eI] a5\cw;G#|eO=+$dӱחYI؝;Ώ]lt}յÜ<PR3}<|93۹f-;wۗ{[v8Xvi u6kA0wz[ ޿AxSzɚ[g ]ݻݥz +ɵйǜ9zl9pHV^xjѳo~}>Gdi[@雞~Q>~빾>G;i~پ>~~Ӿ>~?x ?^ط%_:!1?)u^2?EڧqGYKٝM['> ?}Qb%~mag??_?_??|_qß+__M >bjp.I 瀡2̙+ۺ/3]7뻩$ CEq,/M칛R+6r3'*ev_k/<.;>v#V K^"c#d ""%O$h(i)Vf'',i-nc*-R/S0.r2nj1stau6w7uf6Zgyl7{r48ۺ} =|?/Vhp?` -!Ĉ}!,X ,fMĐ"G6 $#ƏŁK2geRtji!5-Jʔ,yI)EFR R0ЫCVǒ-{֋jQM6۴fҭ z/.l0Ċ3nq_'SV2̚73ТG.m4ԪWnOزgӮsXۺwme‡ eʗ3o9ҧSn:u;xn/o|гo^Q>( X*x _ "JZxafb!HD^8pz1!)"-"18#5x#9#=#A 9$Ey$I*$M:`;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq01.gif0100644001741100001440000000125707262605664021150 0ustar awbusersGIF87ammUHHU$$,0 J1`N0 ).+ m7CmU(@Ό(EދZZWJ4id`弯'4x ]7Uk~ rs=P- }zb &}|Mw 7= qW @rT6k6M'M60mB.U,I۾l+|tac)>@50 W}<"d&TC&05Ԅ Z s΄ԫc* %؏0+GݺU&@ JѣH˘=#|25C p#kD.Q"<.P[K ,xĩ HEDI*^fAn|b4 /THiX[ujЄg2RN\B" %to=S=8Ƽ~ЪS KZhjnn2T9$x|tD8(=;p!~+P~`,ppx,-0G,QPX Aw4s.礳& NQa_C9sP#ϴ(M:w2V8!{SA!CW 1 7AeO;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq02.gif0100644001741100001440000000105107262605664021141 0ustar awbusersGIF87ammUHHU$$,0(xjj`(SBAp,/Gw@=al\`R*`r>_tZ!] lWF D eS>|fT)pHqQR \9]] Jhbd|PV( kTX1q'1aa](oD?RLWr jZ">9Pٲl ^;Ç#JHaY28} H.,ਤZ#!'F^&t𳌑ք+< eTe-+ibD>@c6P)iCsoy)2|Ⴇ|@^%]V9#4%:3޿:4xΜ ]bS@ANQv裫[dfM\i ⦬}29=圁CtvF?\;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq03.gif0100644001741100001440000000203507262605664021145 0ustar awbusersGIF87ammUHHU$$,0:!k۽4`(dIN0h2*k0|ٸ@BA(!XR7\DӪdJH!]E/8 A trd yUc D +aX T  Nn M H8N=)J =HN/|/W ǛU/w*5u9=HCHTTrSCn ;-W/)8]聽[6EHiГ.R CI/IBYj H 6q>_dLRtbaz#y.e:ؔp+L oK^0ZQ|x%G+BTbc1+zKE U;1PWR?ّ`_ l9dhZ\1_~ɕˠC&JX$;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq06.gif0100644001741100001440000000070307262605664021150 0ustar awbusersGIF87ammUHHU$$,0I 6_ͻ 7 ‚q%  +0QE英chȊ@@L*[!6Fw\q ,KW)IY K.D| $6u6K {`*2~C |A bKi(%K)$o$+}sZ)o3fdA)AKF*R dWSE9)!`O bs,R &}Ex)΁^fz/ԋ$`_(0u; EѪ. 4Ɂ(S\ɲ˗0_.uD~8sBf3 27btģlS!*VY"$\gtvXg7Vh X$"Gl#[%NpVi!Pi11qh#%2&2u;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq07.gif0100644001741100001440000000067407262605664021160 0ustar awbusersGIF87ammUHHU$$,0I 6_ͻ 7 ‚q%  +0QE: 3pю`T]$lgs1a*TZ+䈃`!N {@ 5baJQJE**!j p&3)l>d _@)@2Ncp,6 bUź9)!Tlv/6ރ&xsf2>ie ҙ{BAIe۝m8 ba^<Iɓ(S\reԊ@ DrBd,G-#g|R8!WI=!p CȊtf#bP`iʉ nIa&_:N7Cf-hŎ sf0Y;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq08.gif0100644001741100001440000000071407262605664021154 0ustar awbusersGIF87ammUHHU$$,0I+ 6/07'(fl+  *r`8$PcHk*pX*BzB]%x}UT/f6-E_j( $%x= `o B6di6ZAOB}C#s,6z/85"B { o!",v\Hq ^7kPYuf TuXTP.;hX wGh$d!45B۔ 4 : Ț Y2 9O N0cʜI͛8qA@D@Z0Ip$qwYP= h=@IH*i"F>Z( lN´AO?A" I(p a UG "r3O-aRg<Ҧ;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq09.gif0100644001741100001440000000072107262605664021153 0ustar awbusersGIF87ammUHHU$$,0I+ 6+07 @4) m] 1r`T$`r.T* F(%P_4gn hT7.E (AOBhz> /wB6.}BZ| DcRL 8ru[wH7q" hW7d!#6)jV"[iU/T*ŸW["B5te 2!ry!y9HUQXI(`$s*@)SC`Ū% 7b GI | DpJ5XZ8@͛8sɳgK(QB$ $Qj,%KO dυ:JU٬3RYm'r j%vu2e;Fz+8H[ rN-jy ;gě[J ;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq10.gif0100644001741100001440000000321207262605664021141 0ustar awbusersGIF87a-%mmUHHU$$,-%0I8F`(dih j,SxN3m0”`ptLGOʵ,S2]EmU;{]Ap` "P6k !a}6 z 7/,|PJ Dip@q"   } Di ͎{Q. @` %tzr A>_290-51dSPA8+HT%)̣$F|GOAazPFݔTB<;sTe Γw ~9h P MڱlyѺQ  bz"^kSp1t %-wU(t\a‚gQ1:$W$`L<]b.Xv bn H H!+Crgn Au;CAфN@zw֡ w@ .e/sB]j@j ̿ߧ^ s;PY5.SW bwV M<Y!z5D3 Q_Tؖ0FVs>(fu3҄J>j-@D]:Ԥ+eԕY1%#zd#Hu M<3fb[u&"[ьB0AIIM d ` *ኟzLYH z(#H[r <ؽpB>eV)#nb tP KB& u;AZe ˧iE D o!v+JRO 0uc9Ȓୱ]gHE8Y nNTo }vȞG,Wl\KAk\QFP[<($_s1 Щ,цXMl q8Aby|#'Ru1L%Ã(Kz"pM.,|!'{Lw=5_3HO٧o^nLV)Bpg{ 9dC!ǩ[s7Q'֭ԅC*Ϥ|$d6PT(DHK iIbަTN@ )qOAU #eow;f4sb` \bZCEV*l1 bg07D$1@pL٪ \fw)}oH4)ͨ|xn'4 i"0y'ȆzJΎa֡< Rv*!`ĭ0щ<,q]ȏf{XsD9`8Rs="QBMrF& 1B዇ GCbdԈ{좑DNM@}H. H:ȒLH)MJ0wH)2|E-M((&5nj0ý;ՀS{l(A=PB8T.ȹZR&J2l"PW!Vǐ@[.VZ}hN |Up% *W2u+*l]:8(1fW4yHu]VqAy#1v LtnfRa<I3L6Q' ./eX;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_eq11.gif0100644001741100001440000000131307262605664021142 0ustar awbusersGIF87ammUHHU$$,H8k7m&$ B%QbMʬʸ/m(4d 'QNKUUe>! [pA1ٜŸPpWC|iC!;}^Hl @"cQLx Qx aW\C: B| gL U;VkU]KWW n_Ogp;^ ꖨD&m.JXMRvO\5iւy` ;&à'qGv J GoΟ2e*<`9TNM #ɀBxt)R DU`.܌ƭ[lי<A` `볽INPyIQNz6L% ~8 G?+,po^u0'QA@bqS޺Y-o=[jIub. X8esi3Bx/㻚|]FOz*0 Sza2d2`(Ye@7:qVbO+XUc5e]Un,2X :\\X8N?4mb^_^"n1';Vq 1PYt Gݳ#|_31vS^lD#G 9G_ >뱇{qn<@aelfRVetdyHO\X-eFjwT0VP!r(NZt aAH(aH+ DhC|iJ 'jO!:'չ@p(!Fn>3c )Q=9F`'x̣>X{ĉ !Q ű5?}' HFR@M9r"(e @TyPM^Pd R|de."[f+AYb@)8җ؁`wG͊|8 @k/?̧3-7Wxqs*˞Z:ґK4ԛ}-T<"cB.,wBۋp]`;ƞudܰG.1ouB/fjw|ώi<慎xO:euO/}]?uXg]uܣR0}}xJ'+o}5;festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_fig02.fig0100644001741100001440000000322707262605664021310 0ustar awbusers#FIG 3.2 Portrait Center Inches Letter 100.00 Single -2 1200 2 2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 0 1 2 0 0 2.00 120.00 240.00 975 6900 1950 6900 2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 0 1 2 0 0 2.00 120.00 240.00 7125 6900 6150 6900 2 1 2 2 0 7 0 0 -1 4.500 0 0 7 0 0 2 900 2625 900 7500 2 1 2 2 0 7 0 0 -1 4.500 0 0 7 0 0 2 3000 2625 3000 7500 2 1 1 2 0 7 0 0 -1 6.000 0 0 -1 0 0 2 2100 2625 2100 7500 2 1 1 2 0 7 0 0 -1 6.000 0 0 -1 0 0 2 6000 2625 6000 7500 2 1 2 2 0 7 0 0 -1 4.500 0 0 7 0 0 2 7200 2625 7200 7500 2 1 2 3 0 7 0 0 -1 6.000 0 0 7 0 0 2 5100 2625 5100 7500 2 1 0 2 0 7 0 0 -1 6.000 0 0 7 1 1 2 0 0 2.00 120.00 240.00 0 0 2.00 120.00 240.00 5250 4500 7125 4500 2 1 0 2 0 7 0 0 -1 6.000 0 0 7 1 1 2 0 0 2.00 120.00 240.00 0 0 2.00 120.00 240.00 1050 4500 2925 4500 3 2 0 2 0 7 0 0 -1 6.000 0 0 0 16 525 3506 1350 3506 2081 3412 2606 3413 2849 3338 3412 3507 4256 4725 5231 5588 5568 5813 6374 6113 7199 6375 8231 6263 8381 6282 8831 6300 10293 6319 12131 6263 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000 4 0 0 0 0 16 14 0.0000 4 210 1020 1725 8025 input start \001 4 0 0 0 0 16 14 0.0000 4 210 900 1800 8325 boundary\001 4 0 0 0 0 16 14 0.0000 4 210 825 5625 8025 inpu end\001 4 0 0 0 0 16 14 0.0000 4 210 900 5625 8325 boundary\001 4 0 0 0 0 16 14 0.0000 4 165 855 1125 6675 start limit\001 4 0 0 0 0 16 14 0.0000 4 165 780 6225 6675 end limit\001 4 0 0 0 0 16 14 0.0000 4 210 600 1200 5100 region\001 4 0 0 0 0 16 14 0.0000 4 165 1170 975 4800 start search\001 4 0 0 0 0 16 14 0.0000 4 210 600 6300 5100 region\001 4 0 0 0 0 16 14 0.0000 4 165 1095 6075 4800 end search\001 festdoc-1.4.2/speech_tools/doc/arch_doc/tilt_fig02.gif0100644001741100001440000000652007262605664021307 0ustar awbusersGIF87a$,$ڋ޼H扦ʶ L ĢL*̦ JԪjܮ N (8HXhx)9IYiy *:JZjz +;K[k{ , -:լ[~ ;vIh7-n{wt߬}2NrZ˓jn@7ګ a?<^O}#[?*ߏ[UwNO C]7 D݄m w`"x` eXXT")Њx0&C-qcoe >nώZd$z$NIe#Z()Yn _&,ҳ)gY)ʚlB~xӜ.iO gKM92a( A%Z:LAzh^ nzrۘn'r:Ū*ƨ:^]ᚫ뫅`+pfeZҮz-|B̖gx:NЦQx Xj+il =a+b /2 1FL1vܻG]<0Cgk `ր=ͷ/G8l'G؃KN=zW#W_Yۏ7D9\95&߃a毗ke?}A]_˗v17۟w#m[Iګz_!)FdsMz7lr\/ AjY{Nd* 4U$ B%_# чy$oOSvh;F`ڃx8D"(L-r%Ѐd+(VbD.jfE/^iEMI[b/~1Ca9k"4r#ߘCH1!gP.yyJ(Ҋ4/eAL(L`%L!0P$8HIgTP(H)j3$61Yb&*i- ')ӟg %P\ Ѐ iY(E j`4(GP~!fIF:mj)S"bKYI8T)mES=R6uhˠK(#BјդNj5#Eeݒ~Goj5WI u\ei~bn&+< q󐪬87ȣT~k0KjVĆUb-vt2vM,rNx^'.ΡVֲ7SպHr_QQqd YŒvlOJ%-/:% |V2PCw:nx;G MzWVp^-s|we Qpx_@t8gQJQp/_?Tp,\6DaxO!T1$(₩(NW%x5%@_Ynuia(Rap>Wb+W9 [ Y%-zcmu. L 6sPQrNf1D֛YkNWl'w x4R#LVhѠ}HB(6mg3,4p&8jv8@U{bvtn_ =~u〛%+H"t5Q?=ZSu-pVkc&r=Զ~Ж}3~vivDahRH&YGbrg({:҅ĀW;buhw%{x@k}Hy8kfydvg~H_H(8O0zQxoH^Ȇp%(ThPXvNJׇ8(HJvt3,PؤŨi(h׈٨ȍ(Hh爎騎Ȏ(HhSh'vF$T7j'Z5Z N7M4{nt{S&zZGEtKD(&})K|Ǎ(IMYa%NLYW-2+ٍ6{KLؒE}txGU9jד>N~~g./_?o/SO_D

    h3ww^#'qQyN{A7o=j6 q~7mr=}?Q vN0G Kho5p! >DYH omB08'@[2" 7 G1hcɠ iE&܈2$sLr!Uve?T'fBXֈn֦5#㚯I(q*bgIa&6:Ş4@_옇H5',3DRX沬ti 뫠7iEHbE8lv7eu}E:x?5i ٍd4]Wdx 3y-޵=(S5VϪ DCjyKHԼR]yj C8|c/\d 3\D;o]X}+IV,-e3` K~Oml_L(ׯK9E+dGNl'.y{nɊv!m滝>/w o;|#ghk^G5].`|qLRȱ1AF%93Gq !;tȕ,Ƶjsd$8TȆpKdSG8 _ ŨVSɒB'¸ё3% F"D#TYHT텳dm_͢lsjԏL?G#/g-B[f uɖǜKX@J_Ά6G-΀Hr\5A]%O|_۝]!}쮦;پ{o+}a+7~xh<[ ^*Z|`}f{C8L_JԻc'.!Xi.'sgAsPT{w}$ɯ`,PyP'prww?OZ{~CW]W9? s|1/|"ޒQvr'xzx;dQ6wS|($@ 9eF#yz"|))I^ÒYđM*ى/i:1 &B9|@Fy3JYxvn{}~%WÔzS_WɂY?`=bb4v1h0mo'p)h"gt jNEvXG =9Ki[JYiIUdd  W+)3ə{}*54]tVf՚4=JiԘ2C9ƤyVAE G)G yɝ )Ii4xiyVi#wiR=cx Wyw*Jjʡ !*#J%zC;festdoc-1.4.2/speech_tools/doc/arch_doc/track_fig01.fig0100644001741100001440000000466607262605664021447 0ustar awbusers#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 1500 1200 7800 4875 6 1800 1200 4200 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1800 1200 1800 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 2100 1200 2100 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 2400 1200 2400 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 2700 1200 2700 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3000 1200 3000 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3300 1200 3300 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3900 1200 3900 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 4200 1200 4200 4875 -6 6 4500 1200 6900 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 4500 1200 4500 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 4800 1200 4800 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 5100 1200 5100 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 5400 1200 5400 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 5700 1200 5700 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6000 1200 6000 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6600 1200 6600 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6900 1200 6900 4875 -6 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 1500 1200 7800 1200 7800 4875 1500 4875 1500 1200 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 1500 7800 1500 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 1800 7800 1800 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 2100 7800 2100 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 2400 7800 2400 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 2700 7800 2700 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3000 7800 3000 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3300 7800 3300 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3600 7800 3600 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3900 7800 3900 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 4200 7800 4200 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 4500 7800 4500 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 7200 1200 7200 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 7500 1200 7500 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 7800 1200 7800 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6300 1200 6300 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3600 1200 3600 4875 -6 2 2 0 1 0 7 0 0 -1 4.000 1 0 7 0 0 5 1500 5700 7800 5700 7800 6000 1500 6000 1500 5700 2 2 0 1 0 7 0 0 -1 4.000 1 0 7 0 0 5 1500 5100 7800 5100 7800 5400 1500 5400 1500 5100 4 0 0 0 0 0 12 0.0000 4 180 735 675 3375 amplitude\001 4 0 0 0 0 0 12 0.0000 4 135 495 600 5925 values\001 4 0 0 0 0 0 12 0.0000 4 135 330 675 5250 time\001 festdoc-1.4.2/speech_tools/doc/arch_doc/track_fig01.gif0100644001741100001440000000653107262605664021440 0ustar awbusersGIF87ag,gڋ޼H扦ʶ L ĢL*̦ JԪjܮ N (8HXhx)9IYiy *:Z`z +;K[k{ < pAla\L<, !@`݀͠ ~@n`>\~ ,Ll?_ퟍeu1H0[ֽ{<(޳>8dAHv3 e8Xsyf:#lPN$9 T+5'ެxbҌK76cԐSKw~ꤷ}JzӮãns?#L}Oo}o/sz-Ox=O'>/# z3_)=ԟ@9l(A O`7<4( LHBJp5l]p۝DBmTl/ a|1 sh<(֏λ{Vbi#n+, a<b&.1~a|,r^S3*)8wH!rlHG&2GLfP &=8Uяv#h>d_ y*Br ] q$(^y,&*ydTԙ-Mf!$5esd%\Mmvf/?y0PS|X e,ZIk<6bfEZ~-kmSz6]Ij: ʴqc\&˥jsVnt]Z7۽ml@/AZR7.t^n}k&Ur5yԠXU{  No `Kx 0Qlaa0?]6Vl+_*TaSaؽ10K-xFX%}_,fܨLfV(U{f\޲,!< cH4gCVݜxms]$ϜsCT9ȃf/\d8 KN~BhLэ{FKwl0K]dFhDYq˦wum]k_ H8fh/޵k`LMl6v-fcܚ7m`ox{eɍ s%ܰmz{7>C-uYrſL[\Y. ?mɝ=r\ ǂ6|2/t^U8qܠ$NglV

    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/classHeader.inc0100644001741100001440000000053207262605664020021 0ustar awbusers

    festdoc-1.4.2/speech_tools/doc/cstr.dssl0100644001741100001440000005527407262605664016767 0ustar awbusers ]> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; CSTR modifications to modular docbook stylesheets. me of this could ;; ;; perhaps be split into parameters and more parametarisable ;; ;; definitions replaceing ones from the standard style sheets. ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define html-index #t ) (define %shade-verbatim% #t) (define %missing-link-error% #f) (define image-directory "images_gen") (define $generate-chapter-toc$ (lambda () #t)) (define %generate-book-toc% #f) (define ($shade-verbatim-attr$) ;; Attributes used to create a shaded verbatim environment. (list (list "BORDER" "0") (list "WIDTH" "80%"))) (define ($shade-verbatim-cell-attr$) ;; Attributes used to create a shaded verbatim environment. (list )) (define ($shade-verbatim-text-attr$) ;; Attributes used to create a shaded verbatim environment. (list (list "style" "white-space:pre; display:block;") (list "face" "monospace") (list "color" "#000000") )) (define %body-attr% ;; What attributes should be hung off of BODY? (list (list "BGCOLOR" "#FFFFFF") (list "BACKGROUND" "../cstr_background.jpg") (list "TEXT" "#0000AA") ) ) (define $line-annotation-attr$ ;; font attributes for line annotation (list (list "color" "#A00080") (list "size" "-1") (list "face" "sans") (list "weight" "bold") ) ) (element lineannotation (make element gi: "font" attributes: $line-annotation-attr$ (process-children)) ) (element screen (make element gi: "DIV" attributes: '(("ALIGN" "CENTER")) ($verbatim-display$ %number-screen-lines%) ) ) (element programlisting (make element gi: "DIV" attributes: '(("ALIGN" "CENTER")) ($verbatim-display$ %number-programlisting-lines%) ) ) (element sidebar (make element gi: "div" (make empty-element gi: "br" attributes: (list (list "clear" "right") ) ) (make element gi: "TABLE" attributes: (list (list "CLASS" (gi)) (list "BORDER" "1") (list "CELLPADDING" "5")) (make element gi: "TR" (make element gi: "TD" ($semiformal-object$)))) ) ) (define (default-header-nav-tbl-ff elemnode prev next prevsib nextsib) (let* ((r1? (nav-banner? elemnode)) (r1-sosofo (make element gi: "TR" (make element gi: "TH" attributes: (list (list "COLSPAN" "5") (list "ALIGN" "center") (list "VALIGN" "bottom")) (nav-banner elemnode)))) (r2? (or (not (node-list-empty? prev)) (not (node-list-empty? next)) (not (node-list-empty? prevsib)) (not (node-list-empty? nextsib)) (nav-context? elemnode))) (r2-sosofo (make element gi: "TR" (make element gi: "TD" attributes: (list (list "WIDTH" "10%") (list "ALIGN" "left") (list "VALIGN" "top")) (if (node-list-empty? prev) (make entity-ref name: "nbsp") (make element gi: "A" attributes: (list (list "HREF" (href-to prev))) (gentext-nav-prev prev)))) (make element gi: "TD" attributes: (list (list "WIDTH" "10%") (list "ALIGN" "left") (list "VALIGN" "top")) (if (node-list-empty? prevsib) (make entity-ref name: "nbsp") (make element gi: "A" attributes: (list (list "HREF" (href-to prevsib))) (gentext-nav-prevsib prevsib)))) (make element gi: "TD" attributes: (list (list "WIDTH" "60%") (list "ALIGN" "center") (list "VALIGN" "bottom")) (nav-context elemnode)) (make element gi: "TD" attributes: (list (list "WIDTH" "10%") (list "ALIGN" "right") (list "VALIGN" "top")) (if (node-list-empty? nextsib) (make entity-ref name: "nbsp") (make element gi: "A" attributes: (list (list "HREF" (href-to nextsib))) (gentext-nav-nextsib nextsib)))) (make element gi: "TD" attributes: (list (list "WIDTH" "10%") (list "ALIGN" "right") (list "VALIGN" "top")) (if (node-list-empty? next) (make entity-ref name: "nbsp") (make element gi: "A" attributes: (list (list "HREF" (href-to next))) (gentext-nav-next next))))))) (if (or r1? r2?) (make element gi: "DIV" attributes: '(("CLASS" "NAVHEADER")) (make element gi: "TABLE" attributes: (list (list "WIDTH" %gentext-nav-tblwidth%) (list "BORDER" "0") (list "CELLPADDING" "0") (list "CELLSPACING" "0")) (if r1? r1-sosofo (empty-sosofo)) (if r2? r2-sosofo (empty-sosofo))) (make empty-element gi: "HR" attributes: (list (list "ALIGN" "LEFT") (list "WIDTH" %gentext-nav-tblwidth%))) (make empty-element gi: "HR" attributes: (list (list "ALIGN" "LEFT") (list "WIDTH" %gentext-nav-tblwidth%)))) (empty-sosofo)))) (define (default-header-nav-tbl-noff elemnode prev next prevsib nextsib) (let* ((r1? (nav-banner? elemnode)) (limg (entity-text "title-left-image")) (rimg (entity-text "title-right-image")) (r1-sosofo (make element gi: "TR" (if limg (make element gi: "TH" attributes: (list (list "ROWSPAN" "2") (list "ALIGN" "left")) (make empty-element gi: "IMG" attributes: (list (list "SRC" limg) ) )) (empty-sosofo) ) (make element gi: "TH" attributes: (list (list "COLSPAN" "3") (list "ALIGN" "center")) (nav-banner elemnode)) (if rimg (make element gi: "TH" attributes: (list (list "ROWSPAN" "2") (list "ALIGN" "right")) (make empty-element gi: "IMG" attributes: (list (list "SRC" rimg) ) )) (empty-sosofo) ) )) (r2? (or (not (node-list-empty? prev)) (not (node-list-empty? next)) (nav-context? elemnode))) (r2-sosofo (make element gi: "TR" (make element gi: "TD" attributes: (list (list "WIDTH" "10%") (list "ALIGN" "left") (list "VALIGN" "bottom")) (if (node-list-empty? prev) (make entity-ref name: "nbsp") (make element gi: "A" attributes: (list (list "HREF" (href-to prev))) (gentext-nav-prev prev)))) (make element gi: "TD" attributes: (list (list "WIDTH" "80%") (list "ALIGN" "center") (list "VALIGN" "bottom")) (nav-context elemnode)) (make element gi: "TD" attributes: (list (list "WIDTH" "10%") (list "ALIGN" "right") (list "VALIGN" "bottom")) (if (node-list-empty? next) (make entity-ref name: "nbsp") (make element gi: "A" attributes: (list (list "HREF" (href-to next))) (gentext-nav-next next))))))) (if (or r1? r2?) (make element gi: "DIV" attributes: '(("CLASS" "NAVHEADER")) (make element gi: "TABLE" attributes: (list (list "WIDTH" %gentext-nav-tblwidth%) (list "BORDER" "0") (list "CELLPADDING" "0") (list "CELLSPACING" "0")) (if r1? r1-sosofo (empty-sosofo)) (if r2? r2-sosofo (empty-sosofo))) (make empty-element gi: "HR" attributes: (list (list "ALIGN" "LEFT") (list "WIDTH" %gentext-nav-tblwidth%)))) (empty-sosofo)))) (define ($verbatim-display$ line-numbers?) (let ((content (make element gi: "font" attributes: ($shade-verbatim-text-attr$) (if line-numbers? ($verbatim-content-with-linenumbers$) ($verbatim-content$))))) (if %shade-verbatim% (make element gi: "TABLE" attributes: ($shade-verbatim-attr$) (make element gi: "TR" (make element gi: "TD" attributes: ($shade-verbatim-cell-attr$) content ))) content))) (define ($sect-toc$) (let ((depth (attribute-string "depth"))) ;; Called by the TITLE element so that it can come after the TITLE (build-toc (ancestor-member (current-node) (section-element-list)) (if depth (string->number depth) (toc-depth (ancestor-member (current-node) (section-element-list))) ) #t)) ) (define ($chapter-toc$) (let ((depth (attribute-string "depth"))) ;; Called by the TITLE element so that it can come after the TITLE (build-toc (ancestor-member (current-node) (component-element-list)) (if depth (string->number depth) (toc-depth (ancestor-member (current-node) (component-element-list))) ) #t))) (element (SECT1 TOC) (make element gi: "DIV" (process-children) ($sect-toc$) ) ) (element (SECT2 TOC) (make element gi: "DIV" (process-children) ($sect-toc$) ) ) (element (SECT3 TOC) (make element gi: "DIV" (process-children) ($sect-toc$) ) ) (element (CHAPTER TOC) (make element gi: "DIV" (process-children) ($chapter-toc$) ) ) (element (BOOK TOC) (make element gi: "DIV" (process-children) ($chapter-toc$) ) ) ;; Variable list (element variablelist (make sequence (make element gi: "blockquote" (make element gi: "table" attributes: '(("class" "parameters")) (process-children))) (para-check 'restart))) (element (variablelist title) (make element gi: "tr" (make element gi: "th" attributes: '(("colspan" "2") ("align" "left")) (process-children)) ) ) (element varlistentry (let ((terms (select-elements (children (current-node)) (normalize "term"))) (listitem (select-elements (children (current-node)) (normalize "listitem")))) (make element gi: "tr" attributes: '(("valign" "top")) (make sequence (make element gi: "th" attributes: '(("align" "right")) (if (attribute-string (normalize "id")) (make element gi: "A" attributes: (list (list "NAME" (attribute-string (normalize "id")))) (process-node-list terms)) (process-node-list terms))) (make element gi: "td" (process-node-list listitem) ) ) ) ) ) (element (varlistentry term) (make sequence (process-children-trim) (if (not (last-sibling?)) (literal ", ") (literal "")))) (element (varlistentry listitem) (process-children)) ;; by copy of the index building stuff. (define (htmlindexattr-inherited attr) (if (inherited-attribute-string (normalize attr)) (make sequence (make formatting-instruction data: attr) (make formatting-instruction data: " ") (make formatting-instruction data: (inherited-attribute-string (normalize attr))) (htmlnewline)) (empty-sosofo))) (mode htmlindex ;; this mode is really just a hack to get at the root element (root (process-children)) (default (if (node-list=? (current-node) (sgml-root-element)) (make entity system-id: (html-entity-file html-index-filename) (process-node-list (select-elements (descendants (current-node)) (normalize "indexterm")))) (empty-sosofo))) (element indexterm (let* ((target (ancestor-member (current-node) (append (book-element-list) (division-element-list) (component-element-list) (section-element-list)))) (title (string-replace (element-title-string target) " " " "))) (make sequence (make formatting-instruction data: "INDEXTERM ") (make formatting-instruction data: (href-to target)) (htmlnewline) (make formatting-instruction data: "INDEXPOINT ") (make formatting-instruction data: (href-to (current-node))) (htmlnewline) (make formatting-instruction data: "TITLE ") (make formatting-instruction data: title) (htmlnewline) (htmlindexattr "scope") (htmlindexattr "significance") (htmlindexattr "class") (htmlindexattr-inherited "id") (htmlindexattr "startref") (if (attribute-string (normalize "zone")) (htmlindexzone (attribute-string (normalize "zone"))) (empty-sosofo)) (process-children) (make formatting-instruction data: "/INDEXTERM") (htmlnewline)))) (element primary (htmlindexterm)) (element secondary (htmlindexterm)) (element tertiary (htmlindexterm)) (element see (htmlindexterm)) (element seealso (htmlindexterm)) ) ;; TeX processing support (define html-tex-filename "TeX.formulae" ) (define (tex-graphic #!optional (nd (current-node))) (let* ((format (attribute-string "format" nd)) (fileref (attribute-string "fileref" nd)) ) (if (equal? format (normalize "tex")) (make sequence (make formatting-instruction data: "@Name ") (make formatting-instruction data: (string-append image-directory "/" fileref)) (htmlnewline) (make formatting-instruction data: "@Start") (htmlnewline) (make formatting-instruction data: (data nd)) (htmlnewline) (make formatting-instruction data: "@End") (htmlnewline) ) (empty-sosofo) ) ) ) (define ($img$ #!optional (nd (current-node)) (alt #f)) ;; This function now supports an extension to DocBook. It's ;; either a clever trick or an ugly hack, depending on your ;; point of view, but it'll hold us until XLink is finalized ;; and we can extend DocBook the "right" way. ;; ;; If the entity passed to GRAPHIC has the FORMAT ;; "LINESPECIFIC", either because that's what's specified or ;; because it's the notation of the supplied ENTITYREF, then ;; the text of the entity is inserted literally (via Jade's ;; read-entity external procedure). ;; (let* ((fileref (attribute-string (normalize "fileref") nd)) (entityref (attribute-string (normalize "entityref") nd)) (format (if (attribute-string (normalize "format") nd) (attribute-string (normalize "format") nd) (if entityref (entity-notation entityref) #f))) (align (attribute-string (normalize "align") nd))) (if (or fileref entityref) (if (equal? format (normalize "linespecific")) (if fileref (include-file fileref) (include-file (entity-generated-system-id entityref))) (if (equal? format (normalize "tex")) (if fileref ($graphic$ (string-append image-directory "/" fileref) format alt align) ($graphic$ (string-append image-directory "/" (system-id-filename entityref)) format alt align)) (if fileref ($graphic$ fileref format alt align) ($graphic$ (system-id-filename entityref) format alt align))) ) (empty-sosofo) ))) (mode tex-graphics ;; this mode is really just a hack to get at the root element (root (process-children)) (default (if (node-list=? (current-node) (sgml-root-element)) (make entity system-id: (html-entity-file html-tex-filename) (process-node-list (select-elements (descendants (current-node)) (normalize "graphic"))) (process-node-list (select-elements (descendants (current-node)) (normalize "inlinegraphic"))) ) (empty-sosofo))) (element graphic (tex-graphic) ) (element inlinegraphic (tex-graphic) ) ) (root (make sequence ; (literal ; (debug (node-property 'gi ; (node-property 'document-element (current-node))))) ;(define (docelem node) ; (node-propety 'document-element ; (node-property 'grove-root node))) (process-children) (with-mode manifest (process-children)) (if html-index (with-mode htmlindex (process-children)) (empty-sosofo)) (with-mode tex-graphics (process-children) ) ) ) ;; Sections can pass on role information (define ($section-body$) (let* ((sect (current-node)) (class (or (attribute-string "ROLE" sect) (gi sect) ) ) ) (make element gi: "DIV" attributes: (list (list "CLASS" class)) ($section-separator$) ($section-title$) (if (equal? class "entry") (make element gi: "blockquote" (process-children) ) (process-children) ) ) ) ) (define ($section-title$) (let* ((sect (current-node)) (info (info-element)) (subtitles (select-elements (children info) (normalize "subtitle"))) (renderas (inherited-attribute-string (normalize "renderas") sect)) (hlevel ;; the apparent section level; (if renderas ;; if not real section level, (string->number ;; then get the apparent level (substring renderas 4 5)) ;; from "renderas", (SECTLEVEL))) ;; else use the real level (h1elem (string-append "H" (number->string hlevel))) (h2elem (string-append "H" (number->string (+ hlevel 1)))) (name (element-id)) (isep (gentext-intra-label-sep (gi sect))) (nsep (gentext-label-title-sep (gi sect))) (role (attribute-string "ROLE" sect)) (h1class (if role (string-append (gi sect) "" role) (gi sect))) ) (make sequence (make element gi: h1elem attributes: (list (list "CLASS" h1class)) (make element gi: "A" attributes: (list (list "NAME" name)) (if (string=? (element-label (current-node)) "") (empty-sosofo) (literal (element-label (current-node)) nsep)) (element-title-sosofo sect) )) (if (node-list-empty? subtitles) (empty-sosofo) (with-mode subtitle-mode (make element gi: h2elem attributes: (list (list "CLASS" (string-append h1class "-subtitle"))) (process-node-list subtitles)))) ($proc-section-info$ info)))) (define %html-header-tags% '( ("link" ("rel" "stylesheet") ("type" "text/css") ("href" "cstrdoc.css")) ) ) (element synopsis (make element gi: "table" attributes: '(("cellspacing" "0")("cellpadding" "0") ("class" "synopsys")) (make element gi: "tr" (make sequence (make element gi: "td" attributes: '(("valign" "top")) (with-mode synopsis-table (process-matching-children '("synopsis" ("role" "type")))) ) (make element gi: "td" attributes: '(("valign" "top")) (with-mode synopsis-table (process-matching-children '("synopsis" ("role" "name")))) ) (with-mode synopsis-table-args (process-matching-children '("synopsis" ("role" "args")))) ) ) ) ) (mode synopsis-table-args (element synopsis (let* ((role (attribute-string "role")) (children (children (current-node))) (start (if (node-list-empty? children) "" (data (node-list-first children)))) ) (if (and (string? start) (not (string=? start ""))) (make sequence (make element gi: "td" attributes: '(("valign" "top")) (make element gi: "tt" (literal "(") ) ) (make element gi: "td" attributes: '(("valign" "top")) (make element gi: "tt" (if (and (equal? role "args") (string? start) (not (string=? start "")) (equal? (substring start 0 1) "(") ) (make sequence (literal (substring start 1 (string-length start))) (process-node-list (node-list-rest children)) ) (process-children) ) ) ) ) (empty-sosofo) ) ) ) ) (mode synopsis-table (element synopsis (make element gi: "tt" (let* ((role (attribute-string "role")) (children (children (current-node))) (start (if (node-list-empty? children) "" (data (node-list-first children)))) ) (if (and (equal? role "args") (string? start) (not (string=? start "")) (equal? (substring start 0 1) "(") ) (make sequence (literal (substring start 1 (string-length start))) (process-node-list (node-list-rest children)) ) (process-children) ) ) ) ) ) (element link (let* ((endterm (attribute-string (normalize "endterm"))) (linkend (attribute-string (normalize "linkend"))) (target (element-with-id linkend)) (etarget (if endterm (element-with-id endterm) (empty-node-list)))) (if (node-list-empty? target) (if %missing-link-error% (error (string-append "Link to missing ID '" linkend "'")) (make element gi: "font" attributes: '(("color" "green")) (process-children) ) ) (make sequence (if (and endterm (node-list-empty? etarget)) (error (string-append "EndTerm to missing ID '" endterm "' on Link")) (empty-sosofo)) (make element gi: "A" attributes: (list (list "HREF" (href-to target))) (if endterm (with-mode xref-endterm-mode (process-node-list etarget)) (process-children))))))) (element formalpara (make element gi: "DL" attributes: (list (list "CLASS" (gi))) (make element gi: "dt" (process-children)))) (element (formalpara title) (make element gi: "DT" (make element gi: "strong" (process-children))) ) (element (formalpara para) (make element gi: "DD" (process-children))) (element filename (make element gi: "TT" attributes: '(("CLASS" "filename")) (process-children)) ) (define (chunk? #!optional (nd (current-node))) ;; 1. The (sgml-root-element) is always a chunk. ;; 2. If nochunks is #t or the dbhtml PI on the root element ;; specifies chunk='no', then the root element is the only ;; chunk. ;; 3. Otherwise, elements in the chunk-element-list are chunks ;; unless they're combined with their parent. ;; 3a. Things tagged with `newpage' are chunks. ;; 4. Except for bibliographys, which are only chunks if they ;; occur in book. ;; (let ((maybechunk (or (not (equal? (gi nd) (normalize "bibliography"))) (equal? (gi (parent nd)) (normalize "book"))))) (if (node-list=? nd (sgml-root-element)) #t (if (or nochunks (equal? (dbhtml-value (sgml-root-element) "chunk") "no")) #f (if (member (gi nd) (chunk-element-list)) (if (combined-chunk? nd) #f maybechunk) (if (attribute-string "newpage" nd) maybechunk #f)))))) festdoc-1.4.2/speech_tools/doc/cstr.gif0100644001741100001440000000132407262605664016552 0ustar awbusersGIF87a|?,|? ؋޼x BgL Ģ1P)ULǦ)<6jUi܊ǽbJl)|fG~`hԇVxuhWRItxy虩6:4!*sPs;s*k3Qgtz z[% C, Y=ʨ\[[NȘ|-E̥Hpvn\;Sw@4Qo8hjc.8XG7BN|$L^i\fGVHZrZI}"m©N%arhϘLK"wXD4*ԈdWD~hlm,[ J0Ybys^>`W.UCJ+0yݧΝ"n&nY&ٗx颾YpŮ~YkrC?H k̯#$6m$x ꛻8U6,SˈG`6ց[늣YkĮ{e].RdίM9ڠw~1TPJ So1*i1y׌ʰ݅PG`(n{#BE0hh\}H*GY*NN)VHسS*&WRv1^iȑ4e@FfctGfҽ gQBg5uQ@ygy'J2l;P;festdoc-1.4.2/speech_tools/doc/cstr_defs.dtd0100644001741100001440000000321707262605664017564 0ustar awbusersCenter for Speech Technology Research, University of Edinburgh' > 80 South Bridge Edinburgh Scotland EH1 1HN' > XML"> C++"> Java"> Scheme"> speech tools"> The Edinburgh Speech Tools Library"> the Edinburgh Speech Tools Library"> festival"> Festival"> fringe"> Fringe"> samba'> Cygwin'> Visual C++'> GNU make'> unix$' > C>' > festival>' > festdoc-1.4.2/speech_tools/doc/cstrdoc.css0100644001741100001440000000057607262605664017273 0ustar awbusersP { font-size:12pt;font-family:Palatino, Ariel, serif; } DIV.function { margin-bottom: 12pt; } .simplesectFunction { font-size:12pt;font-family:Palatino, Ariel, serif; margin-bottom:0pt; } TABLE.synopsys { margin-top:-12pt; margin-bottom:-18pt; border-left-width:20pt; } DIV.function P { margin-top:6pt; } .synopsys TT { font-size:12pt;font-family:monospace; } festdoc-1.4.2/speech_tools/doc/edcrest.gif0100644001741100001440000000711307262605664017232 0ustar awbusersGIF89aqsU>U,LQQixj&qv8{Z/5???)'&^ S9B97.UH/kkl5PkُQVQ>!SzQ ҳvP...n2obS|Ơf((@!/,qspH,d 0~@ tJZI%K.qQAAzگRL%$hEsvuoB zIQG!%f jEFyG CU _FE np/E,pDFzxF eH vZBkwDL  SD^؃y^3X B0]3,h,@>PػJ@JB0cʜYLA%%AieH` @)&L\I#D%B.h hӪ]l]$dE!e˷ LP*@6#'`**\V\/C,aڽ9 y@i9G֚HLȦMܯ[@>^zSYb!"[7T(1SO<|-[QŸ?2",ЇD_!۸0K)}6RK5ef VPd<k(,/^@o @)DiA~v xP ѱ \fV—_~!E&<@ioQ&p)dSHD!DUwe"L`衈@ 2 ,`.@.@4h # *)ۀC6&5h&JAJB 0i& "ZꝮvrNL{Zl f餕𫵟;R'w{!FRyZҎk @Bګ2 䚚9zIPAQci %{^zo/ hNz"DI8к# l |i rȪA!P/AC[p%]ZרAy`oY -%2 i@ ][$O@T؋PB+`&ca 5(ꮨWP<Н4o>B"ls;v @e; #OyA8?@ 3x_UzԀVOrArDM٠*׼k#>V*,_tm.0X & !x G8( `0± u#88 54ؓ"p` =UC8*e@(SJ h VdAPKB (,x'"S`E+1[B@%)]``"j%-T  J8*NIx%S#0O1rb_j9&tBV˴#W2*Ѐ 9S t HCƵv BUR@Lis4=9:/36^H-U+e:̊fՐ h"_U/$kR0xiLUpP ba]Z5LJw dE@Yy( 3N֟ f+960[T0lS~|!^C[1u5d(}r=nX&[*܄;fٶ[x)a3B;^|paIp^rqMT䲥mX*67Z zTA/3$B l>bT, V4݀*`fuvUlMmqW"R .& iJtwYUFT-܂R:Ϩ>uS$fs0Oջw5`0v]dG lҋB)u 8lMl[bhshAfF-85aF )\`k7{P! 6Er'Yjqysm>^[pyu Ga  j~0B-j}ԜĴNHq0 x ;7Nq'[>9Iv}shTwIPaz5WiO# v5$lb_1^Z]^RliyKۥ^{@6^ݛ_0 ^d4 }~-|NgqJ,_n} ";}37xW~ ly GOm0I kO#O0Lj$s6!l(  [5:kg|p[7.w08BH fp{7BW+eї tW>o(@ nw\0-fU| _e+:FsCVTagw+%W2Uxp)pdrMG;؀WP%S"_{X `h}0PjC2Gϲ _GSag&Y%W _eqrY=EVSvSq6Z{|DyPWP$E>рJS 7j| VUK6|RKzgR(@WI[$ivE$ U}NjXKPlS?Q zXq$jX1eQVjAg>UK0y{KQf)&P$X؍SRf`7(.Ga&vg}bRGOMQ PPKG?uN6$sB>xqAvb[wtp2dqz1(1Uy[q3jH&Fh3 bIN>-cp=hKqB+?9!tI y!0g >p ?~SQۓ*dxGQ!oMP9f^ iܷ mt` n2"sM:,}g7 a@ }0uiqD 9; Z1ӗF N١W$I`GP3% 4j 0T٣WE$@`H4ءA;festdoc-1.4.2/speech_tools/doc/est.jpg0100644001741100001440000001045607262605664016413 0ustar awbusersJFIFICREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 60, Smoothing = 15 C    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( )2((h((h(Ƞ(hy՟cCGd"X's@Er;?_X>AaxoO&X>A`k?O&5_B,@S"a@Eg}yv9ǵ_S@ EPEPEPX>-Ե]7NI4[4(X*[ 43]g]x)ԃQ?X8,pcEQџXT>;Ost?h qn|ytFFFm)~" M?|Vt rhǽUzz[`H 9F"  pGP"PM@5? ^NYVp>g޽79w̭AǾ3Տ*( tPk!qe#?+ƚfEmiwGX\⼋bD)l!R*#C$bD֋"({=\^D9:~Tѭ@Ҧe~\r>ӛg3>=T+ھ }+<+qj7WrG+>Pxs€:-5ٱދ˰َ+Y:(((5-s1SOIN΀t j0BF_IZxz:Eu= NERk<;4 q,CD꺝݃vc {8Hcgo{%9y\rs^M'${{Xө? |k2r>+Դh0<-n>ldO5l[c}SOJ:Q@GZ((iuhY XZNCE2ph^an#3HGp?/#=x&ԼM;J=1&Kc[0oBjx]dXM&ĜV|9K `9ټz& #Q}zy`j|5^}.@I?҆.oBω5)9vCLDy |~g3Vr SV?NG }Mfkn_g k&EFĨ1ZlPfh~ F9`GЏjx|IgĪ0<].}( T6^Qv+N8Zvֹ>{ =~mj9Vr8>vvA4\m .+TAN{W){_ew vv#!RT2A5c&m-I@Q@+85NKiI-Rgp@@{{_{6䏽X8ܓA(s2:Yu)ȍ fBiZiW9gb^TKm'Hι `u :^cAUڿ*:/ GmEҡr^H!럮k06i spobǖ6+Ǝ ndmc*Z^4^W+cM߼p?{lcJGiH-ƼQOaʞfzbv f2ݏZ>U8_.d^du$.WU&*r^OGwn#*ξڼ[Kt+"im.eIm?_j'{u5{+U?<\>.Uwz*c x$b?&Bg$SZGCI9j`WWqjbrZ60n vd?csfz-9=Q{Z}cGex G1Cڹǹ4^RĝE9i8:n]NG. !L㬀c?n3ȁcI&prwMI.[E3*ԈUM1v'D-Ypmd[s֊d@?v>󁚯, 1G3H&m+(g=+r<OZRcq(:0I k]k=;~zӃL8:W"8}+vht"@1Yit If@9;hdbQ('->=+$ۖBpvoZkX>5 +T-"zJ1(yuĵkrנ[a.b -G6~q6lkj~ i? P]^Vqrʧ?ҼS+ $V,A: AqNѤq._ֺX`[! x3-U|ʗ1HtNMi^O֎hQd2&bNk綟XHHd`wM:fG6? l,7o5χ#iFK{ ceöY*hyVN:y [ɦ8*ՄLjuʔm< ]_JOn4j0:{|OqС#d4 u"5EUŒ B/+° DSt D S((festdoc-1.4.2/speech_tools/doc/est_small.jpg0100644001741100001440000000371707262605664017605 0ustar awbusersJFIFICREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 60, Smoothing = 15 C    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO?d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( LZC%ń<X+o[i77/`@FH vcY+^sEc;5$F6L^(:TM$}Auk4ˋH l\ } Mrwz_ Z8<8m#`ep/ּÚ: ZD$"=2mvE $[APjΙkQqpwyQu?ֹ }b)RK>r@#cvݢ ;GnMoZ$ddFT5Ӟ ͐1_ daAšX  4w↥vXoiX8>{ט|)c+| Basic Classes Classes Container Classes &docpp-HashTables-3; &docpp-EST-IMatrix-3; &docpp-EST-TMatrix-3; &docpp-EST-FMatrix-3; &docpp-EST-TList-3; &docpp-EST-DVector-3; &docpp-EST-FVector-3; &docpp-EST-TSimpleVector-3; &docpp-EST-TVector-3; &docpp-EST-TrieNode-3; &docpp-EST-TDeque-3; &docpp-EST-TKVI-3; &docpp-EST-TKVL-3; &docpp-EST-TList-3; &docpp-EST-TMatrix-3; &docpp-EST-TSimpleVector-3; &docpp-EST-StringTrie-3; String Classes &docpp-EST-String-3; &docpp-EST-Token-3; &docpp-EST-Regex-3; Support Classes &docpp-EST-TStructIterator-3; &docpp-EST-TTI-Entry-3; &docpp-EST-THandle-3; &docpp-EST-Handleable-3; Example Code &listexamplesection; &matrixexamplesection; &kvlexamplesection; Tlist C++ Class TList is a generic template doubly-linked list class. See include/EST_TList.h . The list is made up of a a series of "items" of class Titem. Each of these has a value, val and a next and previous pointer. At present, the list uses a pointer to TBI to interate through the list class. The best way to iterate through the list is to use for loop style syntax. &docpp-EST-TList-2; Instansiation of <function>EST_TList</function> C++ does not have a standard for template instansiation which makes it difficult to arbitrarily define new template types. Within the speech_tools library new EST_TList template classes should be defined as follows. Suppose you have a class called Thing and you wish to make a EST_TList of it. Add to your file the following #if defined(INSTANTIATE_TEMPLATES) #include "../base_class/EST_TList.cc" template class EST_TList; #endif And add the name of that file to the make variable TSRCS in your Makeilfe Future Changes We hope this class has become stable though some more member functions may be added (e.g. sort etc.). KVL C++ Class KVL (short for Key/Value List) is a template class of a list of key/value pairs. There are two specifiable types for the KVL class, the key and the value, e.g. KVL produces a list of string pairs. KVL uses the TList class to actually store its data. KVL has much the same functionality as EST_TList, but has some additional features which make use easier. A crucial difference between a KVL and a normal list is that each key in the KVL is unique. include/KVL.h Member functions of <function>KVL</function> val (K key) This is the basic way of reading from the KVL. You give this function a key of type K and its returns a value. val (EST_TBI *p) You can iterate through the KVL in the same way as you do for TList. This function returns a value given the iteration pointer. val_def (K key, V def) Return "def" if "key" is not found. key (EST_TBI *p) returns the key for a given EST_TBI pointer. present (K k) returns 1 if key "k" is in the KVL, 0 otherwise. Useful for seeing whether a key has been defined. add_item (K k, V v, int ns). Add KV pair k,v to KVL. By default, the list is serched everytime for an occurance of k and if k is already defined, its value is overwritten. However, if "ns" is set to 1, no searching of the list is performed, and the key value pair is merely appended. change_item (K k, V v, int ns) Overwrites existing value of k in KVL with v. If k isn't in the list, change_item (EST_TBI *p, V v) Overwrites existing value in KVL, accessed by pointer. In addition, the following overloaded operators are provided: = . Makes a full copy of the KVL and all its members. += . Adds a KVL to the end of an existing KVL. << . Print list. Examples of usage: KVL x; // declare key value list. EST_TBI *p; // declare iteration pointer. // read some values from standard input. while(cin) { cout << "type key then val\n"; cin >> k; cin >> v; x.add_item(k, v); } // is vkey "9" in list? cout << (x.present(9) ? "true" : "false") << endl; for (p = x.list.head(); p != 0; p = next(p)) // iterate through list. cout << x.key(p) << " " << x.val(p); //print out all keys and values in list. Option C++ Class The EST_Option class provides a uniform way to access options in a program. The most obvious source of options are from the command line. The function parse_command_line2(...) takes the C command line variables (argc,argv) and produces an EST_Option class. Specifically it allows options names value tpyes, defaults and documentation for opntions in a program. The EST_Options class is derived from @code{KVL}, so all the KVL member functions also work with EST_Option. It provides some useful extra functionality. Member functions of <function>EST_Option</function> All the options are stored as key value pairs of EST_Strings. However, it if often useful to have other types, e.g. integers. This is possible, but it is the EST_String of the integer that is actually stored. Additional member functions, e.g. add_item() do the conversion automatically. The member functions ival(const EST_String &key) will return the value as an ineger and fval(const EST_String &key) as a float. File i/o It is sometimes convenient to store options in files, and the options class supports a system where there is one. There is one key/value pair per line. Lines can be commented by starting them with the comment character (by default this is ";", but this can be set using the load() function). Each line must start with the key. The remainder, which may appear as a list in the file, is taken as the value. Option files can be included in other option files by using the #include filename directive. If a particular key appears more than once when loading, the value of the last occurance is used. Files are loaded using the load(...) function. The first argument to this is the file name, and the second (optional) argument is the comment character. The load function merely appends to the existing options (while overriding the values of duplicate keys) - if an entirely new set of options are to be loadedcall the clear() member function first. The EST_Option class inherits the member functions of the KVL class. In addition, the following exist: add_prefix(EST_String p) Adds a prefix "p" to all keys in the list. remove_prefix(EST_String p) removes a prefix "p" from all keys in the list. override_val(EST_String key, EST_String val). If val is not empty, add keyval pair to option list. override_ival (EST_String key, int val) If val is not 0, add keyval pair to option list. override_fval (EST_String key, float val) If val is not 0.0, add keyval pair to option list. ival(EST_String rkey) return value of key, cast to an integer. fval(EST_String rkey) return value of key, cast to an float. dval(EST_String rkey) return value of key, cast to an double. add_iitem(EST_String key, int val) add integer value to list. add_fitem(EST_String key, float val) add float value to list. EST_TVector A simple vector class is provided for. Member functions are given in include/EST_TVector.h. EST_TMatrix The EST_TMatrix class allows the creation of standard matrices. See include/EST_TMatrix.h for member functions. There is a derive class EST_FMatrix for floats, the derivation is used rather than a simple template to allow loading and saving to files. EST_Chunk The EST_Chunk classes offers a reference counting system for arbitrary segments of memory. This is primarily used by the EST_String class. EST_String This class was written for a number of reasons. It offers a string class functionally identical to the GNU libg++ String class. We choose to write our own string class rather than use the one provided with GNU G++ for the following reasons. The String class in libg++ is different in different versions and causes lots of confusion when compiling the system with different versions of libg++. If we depended of the GNU String class we must provide libg++ on all platforms we compile the system on. This and the Regex class are the only classes we relied on, by writing our one we all much greater portability. The GNU String class typcially copies string values around while our replacement uses reference counts. Because of the way we use strings in the speech tools and Festival keeping track of reference counting allows a much more efficient implementation of strings. Thus our replacement string class is faster for substantial benchmarks of Festival than the GNU equivalent. The member functions of EST_String follow that of the GNU libg++ String class as closely as possible (we designed it for a drop in replacement of our current use of String). EST_Regex As we wished to remove our dependence on GNU libg++ as described in the previosu section we have provided a regular expression class which for the most part follows that of the GNU libg++ Regex class. This implementation uses the regex functions from BSD4.4-lite (and earlier) written by Henry Spencer. EST_TNamedEnum A class which relates names (EST_String) to enums. EST_StringTrie EST_StringTrie builds a tree index from string keys to arbiitrary objects. Thus objects may be index effciently from strings. The strings must be ascii (the eighth bit is ignored). For example the following builds an index of regular expressions based on their character form so that they need not be recompiled. EST_StringTrie regexes; EST_Regex *make_regex(const char *r) { // Access previously generated Regex or make new one // and add to index EST_Regex *rx; if ((rx = (EST_Regex *)regexes.lookup(r)) == 0) { EST_Regex *nr = new EST_Regex(r); regexes.add(r,(void *)nr); rx = nr; } return rx; } A StringTrie may be explicited clear with the function clear(). The contents of the string tree make cleared by passing a garabage collection function with clear() which will be poassed each item in the trie as a void *. The type of the user provided garbage collection function is void (*deletecontents)(void *n); EST_Token and EST_TokenStream EST_Token with EST_TokenStream provides a method for reading files as whitespace separated tokens. A token consists of four parts, some of which may be empty: a name, the actual token, preceding whitespace, preceding punctuation, the name and succeeding punctuation. The definitions of whitespace and punctuation are user definable. There is also support for single character symbols and quoted tokens. A token stream from which tokens may be gotten, may be a file or a string. For example the follow reads a file and output each toke on a new line EST_TokenStream ts; EST_Token; ts.open("myfile"); while (!ts.eof()) cout << ts.get() << endl; Although token streams support on symbol look ahead via peek() they do support unget. Punctuation (pre and post) may be set after opening a stream. The defaults are empty. Any characters defined as punctuation found around a token are striped and saved in the punctuation fields. Single character symbols will cause a token break when ever they occur (i.e. separating whitespace is not required), again by default these are empty. Whitespace by default is defined as space, horizontal tab, carriage return and line feed. Quoting mode is off by default but may be started by calling set_quotes with a quote character and an escape character (typically " and \). When in quote mode, a token starting with the quote character will continue until next unescaped quote character, including whitespace and punctuation. Although a whole file's contents including all its whitespace may be recorded by tokens from a token stream, any final whitespace after the last real token may be mistakenly omitted unless care is taken. In many cases you'll just require the final whitespace before end of file to set end of file which is the default. In quotes mode all tokens include this last token with an empty name will be returned before eof is set. ]]> festdoc-1.4.2/speech_tools/doc/estexec.sgml0100644001741100001440000001113107262605664017431 0ustar awbusers Executable Programs General Information Edinburgh Speech Tools provides a set of exectutables, which offer access to speech tools functionality in the form of a stand alone program. As far as possible, the programs follow a common format in terms of assumptions, defaults and processing paradigms. The following are generally true of most speech tools programs. Arguments to functions can be specified in any order on the command line. Most programs can take multiple input files, which by default have no preceeding argument. Output by defgault is to standard out. The -o flag can be used to specify an output file. Often programs can read many formats of input file. Wherever possible, this is done automatically. If this can't be done, the -itype flag can be used to specify the input file format. The output file format is specified by -otype Building your own executable programs A simple mechanism is provided for doing all the configuration needed to build a executable program which uses the speech tools library. First, make a directory which will hold your program. To make a program called "do_stuff", type est_program do_stuff if you haven't got the EST bin directory in your path you will have to add the path explicitly, e.g. /speech_tools/bin/est_program do_stuff This will create a Makefile and a .cc file called do_stuff_main.cc, which will look something like this: #include "EST.h" #include "EST_types.h" #include "EST_error.h" int main(int argc, char *argv[]) { EST_StrList files; // the list of input files will go here EST_Option cmd_line; // the parsed list of command line arguments // will go here. // This bit parses the command line args and puts them into // files and cmd_line parse_command_line (argc, argv, EST_String("[OPTIONS] [files...]\n")+ "Summary; DO SOMETHING\n"+ "-o [ofile] Ouptut file\n", files, cmd_line); EST_String out_file; // the name of the output file // If a output file has been specified using -o, put it in out_file if (cmd_line.present("-o")) out_file = cmd_line.val("-o"); else EST_error("No output file specified"); // declare EST_StrList iterator EST_StrList::Entries fs; // iterate through files and do something. for(fs.begin(files); fs; ++fs) { EST_String file = *fs; // Process file } return 0; } You can now add any C++ code to this, and compile by typing make. If you want to create a second program in the same directory, type the same again: /speech_tools/bin/est_program do_more_stuff This time, do_more_stuff_main.cc will be created and the appropriate build commands added to the extisting Makefile. If you wish to add an extra .cc file to particular program, simply edit the Makefile and add it on the line: do_stuff_CXXSRC= do_stuff.cc extra.cc &chwavemanualsection; &chtrackmanualsection; &chlabmanualsection; &tiltanalysismanualsection; &tiltsynthesismanualsection; &sigfvmanualsection; &spectgenmanualsection; &sigfiltermanualsection; &designfiltermanualsection; &pdamanualsection; &pitchmarkmanualsection; &dpmanualsection; &ngrambuildmanualsection; &ngramtestmanualsection; &viterbimanualsection; &naplaymanualsection; &narecordmanualsection; &wagonmanualsection; &olsmanualsection; &olstestmanualsection; &wfstbuildmanualsection; &wfstbuildmanualsection; &wfstrunmanualsection; &scfgmakemanualsection; &scfgtrainmanualsection; &scfgparsemanualsection; &scfgtestmanualsection; &siodmanualsection; &fringe_clientmanualsection; &bcatmanualsection; &xmlparsermanualsection; festdoc-1.4.2/speech_tools/doc/estgram.sgml0100644001741100001440000005075207262605664017447 0ustar awbusers Grammar Overview To aid speech recognition and general text processing the speech tools library provides an number of techniques to process various types of grammars. These consist of a continuing expanding set of class and related programs. These are at various levels of development but all have fairly stable and working basic features. N-grams Ngram language models are supported by the EST_Ngrammar class, and associated routines and programs. Support is provided for building. tuning, smoothing and running n-gram models. N-grams themselves have been can be internally stored in either a dense or sparse. In the dense case all possible states are represented with probability distributions, while the sparece case only has those possible states for with data is available. Sparse will be much smaller in very large cases. However we consider the dense case to be the most fully developed. Formally n-grams can be views as a special case of weighted finite state machines. Our implementation reflects that where possible (backoff options break this simple view), thus a start state is provided and traversal operation are given. This method of using n-grams is by far the most efficient as only one new piece of information is required at each stage, so no vectors of tokens need be collected (or shifted) and presented to n-gram class. However as this finite state machine view can't always be reasonable used we also support access through a vector of tokens. Building ngram language models The program ngram_build estimates ngram language models from data. The data can be in a number of formats and be saved in both an ascii (easier for humans to read) and binary (quick to load) format. Vocabularies The vocabulary of an ngram must be predefined. This is required to allow efficient internal representation. This implementation supports two vocabularies, one for the n-1 tokens in an ngram and one for the nth token as potentially this "predictee" could be from a different class. We also support the notion of out of vocabulary word, so any token found in the input data that is not in the vocabulary may be mapped to that token. In build n-grams there are options on what to do with n-grams which contain out of vocabulary tokens. They may be mapped to te specifed out of vocabulary word, the ngram can be ignored or the whole sentence containing the out of vocabulary word can be ignored. ngram data input formats The input data can be in a number of formats depending on how much preprocessing you wish to do before building. The most basic form is to submit n-grams. That is n tokens, on each line. For example for a tri-gram model of phones it might look like 0 # a1 # a1 f a1 f r f r i r i k i k aa1 k aa1 n aa1 n @ In this case the data preparation stage most create each n-gram with the sigle stepping through the data at each stage. This format we call ngram_per_line A second format is sentence_per_line where each line of a file is a complete "sentence". Ngrams for each n-tuple will be automatically created and cumulated. In this case the input file might look like a1 f r i k aa1 n @ ei1 b r @ h a m In this mode, ngrams for the tokens at start of the sentence are created by using the token by defining a prev_tag (and if necessary a prev_prev_tag). Thus given the above sentence by line file, a prev_tag of "#" and a prev_prev_tag of "0". The first few tri-grams cumulated are 0 # a1 # a1 f a1 f r If the ngram size requires looking back further the prev_prev_tag is repeat indefinitely. Likewise an end_tag is appended to the end of every sentence too, (i.e. end of every line). A third data input format is sentence_per_file where line breaks are no longer signficant and n-grams are create for all n-tuples in the file. The same special cases are treated for beginning and end of file as are for beginning and end of line in the sentence_per_line case. Smoothing and Backoff We support a number of different techniques to deal with lack of data in a training set. Good Turing smoothing Church and Gale 1991 is supported allowing smoothing on n-grams whose frequency is less than M. We also support backoff where the n-1 grams are (recursively) built to provide an estimation of probability distributions for unseen n-grams. Testing ngram language models ngram_test computes language model entropy/perplexity on test data. The test data may be in any of the formats described above. SCFGs Stochastic context-free grammars are a version of context-free grammars with probabilities on rules. In this implementation we assume SCFGs are always in Chomsky Normal From (CNF) where rules may only be binary or unary branching. When binary, both daughters must be non-terminals and when unary, the daughter must be a terminal. The implementation here is primarily based on Pereira and Schabes 92 thus allowing unsupervised training of SCFGs as well as allowing seeding with a bracketed corpus which can vastly reduce training time, and improve results. Training uses the inside-outside algorithm. The support is split into four parts: making grammars, training grammars, testing grammars and parsing. A grammar file consists of a set of rules. Each rule is a bracketed list of probability, nonterminal, followed by two nonterminals or one terminal. A simple example is (0.5 S A D) (0.5 S C B) (0.79 B S C) (0.21 B a) (0.79 D S A) (0.21 D b) (1 A b) (1 C a) The mother non-terminal in the first rule is the distinguished symbol. Grammars may be constructed by hand, by the program scfg_make or by some other external process. The program scfg_make constructs a full grammar given a list (or number of) terminals and nonterminals. The rules can be assigned equal probabilities or random ones. The "probabilities" may be actual probabilities or log probabilties. For example given a file wp19 with a list of terminals, a grammar suitable for training with 15 non-terminals may be created by the command scfg_make -nonterms 15 -terms wp19 -domain prob \ -values random -o wsj_15_19.gram The non-terminals or terminal names will be automatically generated if a number is given, or will be as specified if a file name is given. In the case of a filename being given, no brackets should be the file just whitespace separated tokens. A corpus consists of a number of sentences, each sentence must be contain within a set of parenthesis. The sentences themselves may additionally contain further bracketing (for training and testing). Each sentence is read by the Lisp reader so comments (semi-colon to end of file) may be included. For example ((((n n) punc ((cd n) j) punc) (md (v (dt n) (in (dt j n)) (n cd))) punc)) (((n n) (v ((n) (in ((n n) punc (dt n v n))))) punc)) ((((n n) punc (((cd n) j) cc ((j n) (in (n n n n)))) punc) (v (v (((dt j n) (in (dt j j n)))))) punc)) ... Training is done by estimating the inside and outside probabilities of the rules based on their current probabilities and a corpus. The corpus may optionally include internal bracketing which is used by the training algorithm to precluded some possible parses hence making the training typically faster (and sometimes more accurate). After each training pass the grammar rule probabilities are updated and the process starts again. Note depending on the number of training sentences training passes may take a very long time. After each passes the cross entropy for the current version of the grammar is printed. This should normally decrease until the the "best" grammar has been found. The program scfg_train takes an initial grammar, and corpus and, by default will train for 100 passes. Because it can take prohibitively long for a desired number of passes an option is available to selection only an N percent chunk of the training set on each pass, cycling through the other N percent chunks of the corpus on each pass Experiments have shown that this not only produces much faster training, but the accuracy of the fully trained grammar is very similar. Given the choice of waiting taking 10 days or 48 hours to parse, it is highly recommended. After each N passes the current state of the grammar may be saved, the number of passes between saving is specificed by the -checkpoint option. The grammar is saved in the output file appended with the pass number. Because the partitioned training will select different partitions depending on the pass number you can optionally specify the starting pass number, making it much easier to continue training after some interruption. Testing is done by the program scfg_test it takes a grammar and a corpus. That corpus may be fully bracketed or not. By default the mean cross entropy value from anaylzing these senetences will be printed, also the number sentence sthat fail to parse. Alternatively a bracketing accuracy may be calculated this is the percentage of prhases in a parsed sentence that are compatible with the bracketing in the corpus example. The fourth program provides a mechanism for parsing one or more sentences. The corpus this time should contain no bracketing except around the begining and end of the sentence itself. Two forms of parses are produced. A full form with start and end points for each phrase, the related non-terminal and the probability, and a simple form where only the bracketing is given. Note only one (or no) parses is given. For any phrase only the best example tree is given though the probability is given as the sum of all possibily derivations of that non-terminal for that phrase. scfg_parse -grammar wsj_15_19.gram -corpus news.data -brackets -o news.out Note the input for must be strings of terminals for the given grammar. For real parsing of real text it is likely the grmmar uses part of speech tags as terminals and the data is avtuall words not part of speech tags. If you want to parse texts then you can use the Festival script festival/examples/scfg_parse_text which takes in arbitrary text, runs the part of speech tagger on it after standard tokenizing rules and parses the output saving the parse to the specified file. WFSTs The speech tools contains a small, but growing library of basic functions for building, and manipulating weighted finite state transducers. Although not complete they already provided many of the basic operations and compilers one needs for using these devices. Given a WFST the following operations are supported: deterimise, minimize, complement. Given two WFSTs the following operations are supported: intersection, union, difference, concatenation and compose. In addition to these operations compiles are provided for a number of basic input formats: regular expressions, regular grammars, context-free grammars (with depth restriction) and Kay/Kaplan/Koksenniemi two-level morphology rules. Still missing are complete treatment of the weights through some basic operations (e.g. minimization doesn't presever weights). Also techniques for learning WFSTs from data, or at least weightign existing FSTs from data will be added in later versions. In general inputing symbols is of the form X or X/Y. When X is given it is (except if using the wfst as a transducer) treated as X/X. Where X/Y is input/output symbols, thus using single symbols will mostly cause the wfst mechanisms to act as if they are finite state machines. The two main programs are wfst_build and wfst_run. wfst_run runs in both recognition and transduction mode. wfst_build builds wfst's from description files or through combination of existing ones. The output may be optionally determinized or determinized and minimized. Kay/Kaplan/Koskenniemi morphological rules One of the major drives in interest in wfst has been through their use in morphology @cite{kaplan94}. Hence we provide a method for compiling Kay/Kaplan/Koskenniemi type (restricted) context sensitive rewrite rules. The exact form is given in the example below. This example covers basic letters to letters but also Epenthesis for e-insertion in words like churches and boxes. (KKrules engmorph (Alphabets ;; Input Alphabet (a b c d e f g h i j k l m n o p q r s t u v w x y z #) ;; Output Alphabet (a b c d e f g h i j k l m n o p q r s t u v w x y z + #) ) (Sets (LET a b c d e f g h i j k l m n o p q r s t u v w x y z) ) (Rules ;; The basic rules ( a => nil --- nil) ( b => nil --- nil) ( c => nil --- nil) ( d => nil --- nil) ( e => nil --- nil) ( f => nil --- nil) ( g => nil --- nil) ( h => nil --- nil) ( i => nil --- nil) ( j => nil --- nil) ( k => nil --- nil) ( l => nil --- nil) ( m => nil --- nil) ( n => nil --- nil) ( o => nil --- nil) ( p => nil --- nil) ( q => nil --- nil) ( r => nil --- nil) ( s => nil --- nil) ( t => nil --- nil) ( u => nil --- nil) ( v => nil --- nil) ( w => nil --- nil) ( x => nil --- nil) ( y => nil --- nil) ( z => nil --- nil) ( # => nil --- nil) ( _epsilon_/+ => (or LET _epsilon_/e) --- nil) ;; Epenthesis ;; churches -> church+s ;; boxes -> box+s (e/+ <=> (or (s h) (or s x z) (i/y) (c h)) --- (s)) ) A substantially larger example of morphographenic rules is distributed with the Festival speech synthesis system in festival/lib/engmorph.scm. This is based on the English description in @cite{ritchie92}. For a definition of the semantics fo the basic types of rule, surface coercion, context restriction and combined rules see @cite{ritchie92}. Note that these rules are run in parallel (the transducers are intersected) making they rule interact in ways that the author might not intend. A good rule debugger is really required in order to write a substantial set of rules in this formalism. The rule compilation method used differs from Kay and Kaplan, and also from @cite{mohri96} and actually follows them method used in @cite{ritchie92} though in this case, unlike @cite{ritchie92}, the technique is followed through to true wfst's. The actual compilation method shold be described somewhere. The above may be compiled into a wfst by the command (assuming it is in the file mm.rules. wfst_build -type kk -o engmorph.wfst -detmin engmorph.scm This rule compiler has also been used in finding equivalent transducers for restricted forms of decision tree (following @cite{sproat96}) and may be view as mostly stable. Regular expressions A simple method for building wfst's from regular expressions is also provided. An example is ((a b c) (a b c) (and a (+ (or b c)) d)) This consists of the input alphabet and the output alphabet followed by a LISP s-expression contains the regex. The supported operators are and, or, +, * and not. Compilation is by the following command wfst_build -type regex -o t1.wfst -detmin t1.regex Regular Grammars A compilation method also exists for regular grammars. These grammars do not need to be a normal form, in fact no chaeck is made that they are regular, if they contain center-embedding the construct algorithm will go into a loop and eventually run out of storage. The correction to that is to add a depth limit which would then allow wfst approximations of context-free grammars, which would be useful. An example regular grammar is (RegularGrammar engsuffixmorphosyntax ;; Sets ( (V a e i o u y) (C b c d f g h j k l m n p q r s t v w x y z) ) ;; Rules ( ;; A word *must* have a suffix to be recognized (Word -> # Syls Suffix ) (Word -> # Syls End ) ;; This matches any string of characters that contains at least one vowel (Syls -> Syl Syls ) (Syls -> Syl ) (Syl -> Cs V Cs ) (Cs -> C Cs ) (Cs -> ) (Suffix -> VerbSuffix ) (Suffix -> NounSuffix ) (Suffix -> AdjSuffix ) (VerbSuffix -> VerbFinal End ) (VerbSuffix -> VerbtoNoun NounSuffix ) (VerbSuffix -> VerbtoNoun End ) (VerbSuffix -> VerbtoAdj AdjSuffix ) (VerbSuffix -> VerbtoAdj End ) (NounSuffix -> NounFinal End ) (NounSuffix -> NountoNoun NounSuffix ) (NounSuffix -> NountoNoun End ) (NounSuffix -> NountoAdj AdjSuffix ) (NounSuffix -> NountoAdj End ) (NounSuffix -> NountoVerb VerbSuffix ) (NounSuffix -> NountoVerb End ) (AdjSuffix -> AdjFinal End ) (AdjSuffix -> AdjtoAdj AdjSuffix) (AdjSuffix -> AdjtoAdj End) (AdjSuffix -> AdjtoAdv End) ;; isn't any Adv to anything (End -> # ) ;; word boundary symbol *always* present (VerbFinal -> + e d) (VerbFinal -> + i n g) (VerbFinal -> + s) (VerbtoNoun -> + e r) (VerbtoNoun -> + e s s) (VerbtoNoun -> + a t i o n) (VerbtoNoun -> + i n g) (VerbtoNoun -> + m e n t) (VerbtoAdj -> + a b l e) (NounFinal -> + s) (NountoNoun -> + i s m) (NountoNoun -> + i s t) (NountoNoun -> + s h i p) (NountoAdj -> + l i k e) (NountoAdj -> + l e s s) (NountoAdj -> + i s h) (NountoAdj -> + o u s) (NountoVerb -> + i f y) (NountoVerb -> + i s e) (NountoVerb -> + i z e) (AdjFinal -> + e r) (AdjFinal -> + e s t) (AdjtoAdj -> + i s h) (AdjtoAdv -> + l y) (AdjtoNoun -> + n e s s) (AdjtoVerb -> + i s e) (AdjtoVerb -> + i z e) ) ) The above is a simple morpho-syntax for English. Programs The following are exectutable programs for grammars <link linkend="scfg-make-manual">scfg_make</link> make a set of rules for a SCFG. <link linkend="scfg-train-manual">scfg_train</link> make a set of rules for a SCFG. <link linkend="scfg-parse-manual">scfg_parse</link> train a set of rules for a SCFG. <link linkend="scfg-test-manual">scfg_test</link> Perform parsing using pre-trained grammar. <link linkend="wfst-build-manual">wfst_build</link> Build a weighted finite state transducer. <link linkend="wfst-run-manual">wfst_run</link> Run a weighted finite state transducer. <link linkend="ngram-build-manual">ngram_build</link> Train a n-gram from text. <link linkend="ngram-test-manual">ngram_test</link> Caldulate the perplexity etc of an n-gram. Classes &docpp-EST-SCFG-2; &docpp-EST-SCFG-Rule-2; &docpp-EST-SCFG-traintest-2; &docpp-EST-bracketed_string-2; &docpp-EST-Ngrammar-2; &docpp-EST-WFST-2; festdoc-1.4.2/speech_tools/doc/estintro.sgml0100644001741100001440000006644707262605664017664 0ustar awbusers Introduction to the Edinburgh Speech Tools &TheEST; is library of general speech software, written at the Centre for Speech Technology Research at the University of Edinburgh. &TheEST; is written is C++ and provide a range of for common tasks found in speech processing. The library provides a set of stand alone executable programs and a set of library calls which can be linked into user programs. Updates and news about the speech tools include releases and bug fixes may be found at http://www.cstr.ed.ac.uk/projects/speech_tools.html Most speech researchers spend a considerable amount of time writing, developing and debugging code. In fact, many researchers spend most of their time doing this. The sad fact is that most of this time is spent on unnecessary tasks - time which could be better spent doing "real" research. The library is intended to provide software that programmers use day-to-day, and provide this in an easy to use fashion. The Library The Edinburgh Speech Tools Library has two main parts: a software library and a set of programs which use the library. A library is a single central place where useful software is kept. A UNIX library is a single file (in this case called libestools.a) which can be linked to an individual program. When writing a program, you can call any of the functions in the library, and they will automatically be linked into your program when you compile. The key point is that you never need look at the library itself or copy the code in it. That way you can write small programs, concentrate on the algorithms and not have to worry about any infrastructure issues. The speech tools also provide a number of utility programs for things like playback, sampling rate conversion file format conversion etc. Usually these programs are just wrap-around executables based on standard speech tools library functions. What does the library contain? Speech class Includes tracks for storing sets of time aligned coefficients, and waves for digitally sampled speech waveforms. Linguistic class A comprenhensive system for storing different kinds of linguistic information is given. This is based on the Hetrogeneous Relation Graph formalism ***CITE***. Feature structures, tress, lists, graphs ect can all be represented with the linguistic classes. Audio playback Easy to use routines to record and play audio data without any fuss. Signal processing Commonly used signal processing algorithms such as including pitch tracking, cepstra and LPC, filtering, fourier analysis etc. Statistical functions Grammars Intonation Software spport for the Tilt intonation model Speech Recognition Utility Functions and Classes Useful classes such as lists, vectors, matrices, strings and functions for reading files, parsing command lines etc. Using the speechtools Once installed, speech tools can be used either by running the exectuable programs or by building your own C++ programs and linking to the library. Documentation on executable programs is found in . Instructions on how to build your own programs which use the library are found in . Licence, Installation and Acknowledgements Licence Since version 1.2.0 we are distributing the Edinburgh Speech Tools under a free software lince similar to the X11 one. Basically the system is free for anyone to use commerically or otherwise without further permission. Hence the current copy policy is Centre for Speech Technology Research University of Edinburgh, UK Copyright (c) 1994-1999 All Rights Reserved. Permission is hereby granted, free of charge, to use and distribute this software and its documentation without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of this work, and to permit persons to whom this work is furnished to do so, subject to the following conditions: 1. The code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Any modifications must be clearly marked as such. 3. Original authors' names are not deleted. 4. The authors' names are not used to endorse or promote products derived from this software without specific prior written permission. THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Acknowledgments The library was written by Paul Taylor, Richard Caley, Alan W Black and Simon King, during the periond 1994-1999. During this period, the above people were supported by the UK Physical Science and Engineering Research Council though grants GR/J55106, GR/K54229, GR/L53250, by Sun microsystems, AT and T and Reuters. Other contributors We are extremely grateful to the following people who have made their code available for general use. We should make it clear that these people did not directly participate in the development of the library and hence cannot be held responsible for any problems we have introduced in the use of their code. Markus Mummer Waveform re-sampling routine (rateconv) Tony Robinson Provided cepstral and LPC routines Richard Tobin and LTG RXP, an XML parser. Paul Bagshaw the pitch tracker Craig Reese and John Campbell ulaw conversion routines Paradigm Associates and George Carrett for Scheme in one defun. Theo Veenker (Utrecht University) IRIX audio support. Rick Woudenberg Inspiration for the design of the wave class Borja Etxebarria LPC reflection coefficients Simmule Turner and Rich Salz editline command line editing library Henry Spencer for his regex code taken from the FreeBSD 2.1.5 distribution. The Regents of the University of California. for some string comparison code. What is new Since the last public release, 1.1.1, January 1999, there have been a number of enhancements to the library system Free licence To make the system more useful for more people and place it properly in the free software community the system is now free for both commercial and non-commercial use alike. Utterance consolidation A number of tidy ups have been performed on the EST_Utterance and related classes. This makes the interface cleaner and should have littel affect on existsing code. Generalization of Features Any new object can become a feature value after simple registration of the object through a provided macro. We also make much more use of this. SIOD tidy up Scheme is no longer "in one defun" but "in one directory". The system was split out into separate files. New objects are now held as EST_Val and it is easier to add new objects to the system. C++ class documentation We now include documentation on a per class basis using the DOC++ system and docbook for more general descriptions and examples. This has improved the coverage and quality of low level documentation for all classes in the system. Tilt Analysis/Resynthesis For intonation analysis the tilt code has been completely rewritten. Installation Release notes This documentation covers version &VERSION; of &theEST;. While previous versions of the speech tools were primarily released solely to support the Festival Speech Synthesis System, the Edinburgh Speech Tools Library now contains sufficiently useful tools that it is of use in its own right. Although hope that the speech tools has stabilised to a certain extent and less structural changes will occur in future versions we don't guaranteed future compatibility, although every effort will be made to make upgrading as easy as possible. In addition, we warn that while several programs and routines are quite mature, others are young and have not be rigorously tested. Please do not assume these programs work. Requirements In order to compile and install the Edinburgh Speech Tools you need the following &gnumake; Any recent version, the various make programs that come with different UNIX systems are wildly varying and hence it makes it too difficult to write Makefiles which are portable, so we depend on a version of make which is available for all of the platforms we are aiming at. A C++ compiler The system was developed primarily with GNU C++ version 2.7.2, but we also have compiled it successfully with a number of other versions of gcc, Sun CC and &visualc;. Hopefully we have now sanitized the code sufficiently to to make it possible for ports to other C++ compilers without too much difficulty. But please note C++ is not a fully standardized language and each compiler follows the incomplete standard to various degrees. Often there are many but simple problems when porting to new C++ compilers. We are trying to deal with this by increasing our support. However, it is likely that small changes will be required for C++ compilers we have not yet tested the system under. However we feel this is stable enough to make it worthwhile attempting ports to other C++ compilers that we haven't tried yet. Before installing the speech tools it is worth ensuring you have a fully installed and working version of your C++ compiler. Most of the problems people have had in installing the speech tools have been due to incomplete or bad compiler installation. It might be worth checking if the following program works, if you don't know if anyone has used your C++ installation before. #include <iostream.h> int main (int argc, char **argv) { cout << "Hello world\n"; } Supported Systems We have successfully compiled and tested the speech tools on the following systems, except where specified we include support for both shared and static versions of the libraries: Sun Sparc Solaris 2.5.1/2.6/2.7 GCC 2.7.2, GCC 2.8.1, SunCC 4.1, egcs 1.1.1, egcs 1.1.2 Sun Sparc SunOS 4.1.3 GCC 2.7.2 (static only) Intel Solaris 2.5.1 GCC 2.7.2 FreeBSD for Intel 2.1.7, 2.2.1, 2.2.6 (aout), 2.2.8 (aout), 3.x (elf) GCC 2.7.2.1 (static only) Linux (2.0.30) for Intel (RedHat 4.[012]/5.[01]/6.0) GCC 2.7.2, GCC 2.7.2/egcs-1.0.2, egcs-1.1.2 Windows NT 4.0, Windows95, Windows 98 GCC with egcs (from &cygwin; b20.1), &visualc; 5.0. (static only) As stated before C++ compilers are not standard and it is non-trivial to find the correct dialect which compiles under all. We recommend the use of GCC 2.7.2 if you can use it, it is the most likely one to work. Some of the compilers listed above produce a large number of warnings when compileing the code. Previous versions of the system have successfully compiled under SGI IRIX 5.3, OSF (Alphas) and HPUX but at time of writing this we have not yet rechecked this version. Java Support The java directory contains optional &java; classes which give some access to &est; facilities from &java; programs. This has been created to support the &fringe; graphical interface. There are two levels of support enabled by the JAVA and JAVA_CPP options in the config file. JAVA compiles some very basic classes intended to allow very simple simulation of &est; facilities in pure &java; programs. JAVA_CPP compiles classes which use the &java; native interface to provide access to the actual &est; &cpp; classes. You may (for instance on Solaris using gcc) need to make shared libraries for some compiler support libraries in order to comple the full JAVA_CPP support. See for details. Windows 95/98/NT Port We have done two ports of this code to Windows machines, one uses the &cygwin; package, which provides a Unix like environment under on Win32 systems, the other is a native port using &visualc;. For our full Windows NT and Windows 95/98 ports we use the Cygnus &cygwin; environment (version b20.1) available from http://sourceware.cygnus.com/cygwin/. Windows 98 is significantly more stable than Windows 95, especially when many processes are started and stopped as is the case when compiling with &cygwin;. We strongly reccoment 98 rather than 95 be used if at all possible. However with both 95 and 98 you can expect Windows to occasionally lock up or complain it is unable to start new processes or otherwise missbehave. You will be restarting windows regularly. A Windows NT system should not have these problems. The port using &visualc; does not provide all of the features of the Unix and &cygwin; versions. You will need access to a Unix or &cygwin; system to create the makefiles used for the &visualc; compilation. Both &cygwin; and &visualc; ports have a number of limitations. Shared library creation is not supported. Creation of Windows DLLs is different enough from creation of Unix shared libraries that the support does not carry directly accross, and we haven't yet had time to work on it. Java not supported Because the &java; support is related to the creation of shared libraries, this is also not yet implemented for Windows. Command line editing limited Because of the limiots of the Windows DOS console window, the command line editing in siod is less reliable (for instance on very long lines). (&visualc;) Networking not supported Networking under Win32 is different from Unix in a number of fairly fundamental ways, we haven't tackled this at all. There are no doubt other differences we hve not noticed. We don't use Windows for any of our work and so the Windows builds of our systems don't get the extensive use the unix builds do. Building It Configuration All compile-time configuration for the system is done through the user definable file config/config. You must create this file before you can compile the library. An example is given in config/config-dist, copy it and change its permissions to give write access &shellprompt; cd config &shellprompt; cp config-dist config &shellprompt; chmod +w config In many cases no further changes will be required, but it might be worth checking the contents of this file just in case. Where possible the system will automatically config itself. Type &shellprompt; gnumake info This will create the local config files and display what it thinks your system is. If this is not suitable for your machine then edit your config/config. In most cases the default will be the best option. If you are unsure about what you should change you probabaly shouldn't change anything. As of 1.3.1 due to conflicts in copyright we have dropped GNU Readline support and replaced it with a differently licenced alternative which does not imposes the restrictions of the GPL. editline is a free command line editor library. We have added substantially to it, including support for long lines, incremental search and completion. However as it has not yet been testsed on many systems it is still optional, though is on by default. For Linux we now fully supported shared libraries and even recommend them. However if you are going to do alot of development and don't understand the consequences of shared libraries and getting LD_LIBRARY_PATH correct (or what that is) we recommend you compile unshared, the default. If you are going to simply run the speech tools (and festival) then shared is a reasonable option. Uncomment the line in the config file # SHARED = 1 Shared support under Solaris is complete for all the speech tools. If you need to exec festival scripts using a version of festival built with shared libaries, you must either execute them from a featureful shell (e.g. bash), install the shared libraries in a standard place or explicitly set LD_LIBRARY_PATH. Solaris's standard shell doesn't support script excutaiton of shells within shells. Simple choices for common set ups are given near the top of this file. But for some sub-systems you will also need to change pathnames for external library support. At present read config/ReadMe for details of changing basic configuration. On systems (and versions of systems) we have not yet encountered you may need to create config/systems/<PROCESSOR>_<OS><OSVERSION>.mak files. Often you need only copy an existing one (other version or similar system) to get it to work. Typically the only real differences are when there are major differences in the default C++ compiler (e.g. RedHat 5.0 to RedHat 5.1). If you do need to add a new systems configuration file please let as know so we can include it in the standard distribution. Compilation Once you have configured config/config you can compile the system. &shellprompt; gnumake Note this must be &gnumake;, which may be called make on your system, or gmake or gnumake. This will compile all library functions and all the executables. If you wish to only compile the library itself then use &shellprompt; gnumake make_library Note that if you compile with -g (uncommenting DEBUG = 1 is config/config the library and the corresponding binaries will be large. Particulary the executables, you will need in order of 150 megabytes to compile the system, if your C++ libraries are not compiled as shared libraries. If you compile without -g the whole library directory is about 12 megabytes on Linux (which has shared libraries for libstdc++ or about 26 megabytes of Sparc Solaris (which does not have a shared library libstdc++ by default). This is almost entirely due to the size of the executables. C++ does not make small binaries. In general we have made the system compile with no warnings. However for some compilers this has proved to be near impossible. SunOS include files have a number of system declarations missing, so many system functions (e.g. fprintf) will appear to be undeclared. Sun's CC compiler also likes to complain about missing source for some code even though the code exists within our system and is deliberately in separate files ro make it modular. To test the system after compilation &shellprompt; gnumake test Installing the system All executables are linked to from speech_tools/bin and you should add that to your PATH in order to use them. Include files are speech_tools/include/ and the three generated libraries are speech_tools/lib/libestools.a, speech_tools/lib/libestbase.a and speech_tools/lib/libestring.a. For most cases a three will be required. If space is a preminium, compiled with the shared option (binaries will be then be substantially smaller) and you can delete all .o files Some aspects of the system have further dependencies which depend of the option selected at compile time. Specifically the readline libraries and Netaudio libraries. Building on Windows 95/98/NT There are two ways to build the system under Windows. The &cygwin; system provides a unix-like environment in which you can perform a compilation as described in the previous sections. &cygwin; is probably the best choice if you can use that route. &visualc; provides an environment much further from the Unix systems our code is developed on, this places some limits on the &visualc; port, especially in areas relating to networking. The remainder of this section describes how to compile with &visualc;. Creating <filename>VCMakefile</filename>s We compile using the nmake program which comes with &visualc;. This is a fairly standard make implementation, but is not as flexible as the GNU make we use for our normal builds. So, in order to compile with nmake new Makefiles are needed. These can be created from the Unix makefiles using &gnumake;: &shellprompt; gnumake VCMakefile Creating VCMakefile for . Creating VCMakefile for include Creating VCMakefile for include/unix [...] Obviously you will need either a unix machine or the &cygwin; system to do this. Sharing the compilation directory between unix and Windows machines, for instance using &samba; Configuration As for unix compilations, the &visualc; compilation process is controlled by a configuration file. In this case it is called vc_config_make_rules. A version is included in the distribution, as vc_config_make_rules-dist, copy this into place as follows: &shellprompt; cd config &shellprompt; cp vc_config_make_rules-dist vc_config_make_rules &shellprompt; chmod +w vc_config_make_rules You probably don't need to change this default configuration. Building To build the system: &shellprompt; nmake /nologo /fVCMakefile This should build the libraries and executables, and also the test programs in testsuite. However there is currently no way to automatically test the system, Indeed some of the test programs will fail under &visualc; due to differences in file nameing conventions. festdoc-1.4.2/speech_tools/doc/estjavaapp.sgml0100644001741100001440000001530607262605664020137 0ustar awbusers Shared Libraries and GCC Whys and Wherefores On Solaris, and perhaps some other systems, the GCC distribution does not build or install shared libraries for some C and C++ support code by default. This doesn't cause problems building the speech tools with shared libraries for normal use as the system is capable of running programs built with a combination of shared and non-shared libraries. However, when loading code into Java, all the support needed must be in shared libraries. For our purposes, what is needed is shared versions of libgcc, which is part of the normal gcc distribution, and libstdc++, which is part of the libg++ distribution. You may have a shared version of libstdc++ (called libstdc++.so.SOMETHING) if so ignore the related instructions below. The following steps are those I followed to build these libraries on Solaris 2.5 for use with gcc 2.7.2.1. These instructions should work for other GCC versions, replace 2.7.2 in all cases with the version number for your GCC - you can find this by running &shellprompt; gcc -v and ignoring the last digit of the version. You should probably do the following tasks on the oldest operating system version you want to use. For instance we have Solaris 5.5 and 5.6 machines, so I built my libraries on a 5.5 one. What You Need The gcc distribution. The libg++ distribution I used the GCC distribution version 2.7.2.3 and the libg++ version 2.7.2, these being the most up to date distributions related to gcc 2.7.2 available at the time. Building libgcc.so If you don't already have GCC installed, it's probably best to do a normal GCC compilation and installation before messing about. When you have done this do &shellprompt; make clean in the gcc compilation directory to make sure there are no hang-overs. If you have GCC around already, you need to either find the directory where it was built or unpack the distribution to get a build directory. Configure GCC by typing ./configure then compile with &shellprompt; make CC=gcc CFLAGS='-fPIC -O2' libgcc.a This will build far more than you need, but it's more trouble than it's worth to fiddle about to build just what you want. You now have all the code you need compiled, all that remains is to assemble it into a shared library, the gcc makefile doesn't know how to do this. We do it by unpacking the normal, unshared library into a temporary directory and linking the bits together as follows: &shellprompt; mkdir tmpdir &shellprompt; cd tmpdir &shellprompt; ar x ../libgcc.a &shellprompt; cd .. &shellprompt; gcc -shared -fno-shared-data -o libgcc.so.2.7.2 tmpdir/*.o Building libstdc++.so You can ignore this section if you have a sharable version of libstdc++ available. Unpack the libg++ distribution. in the directory this creates run &shellprompt; ./configure --enable-shared The, to build just: &shellprompt; make Again this will build more than you need. Where to Put Them If you are brave you could install the shared libraries in a public place, for instance /usr/local/lib, however this might cause problems with other gcc-compiled programs. A more conservative approach is to put it in a dedicated directory and configure speech_tools to look there. In either case got to your desired installation directory and do &shellprompt; cp GCC_BUILD_DIR/libgcc.so.2.7.2 . &shellprompt; ln -s libgcc.so.2.7.2 libgcc.so &shellprompt; cp LIBG++BUILD_DIR/libstdc++/libstdc++.so.2.7.2 . &shellprompt; ln -s libstdc++.so.2.7.2 libstdc++.so Where GCC_BUILD_DIR is the directory where you built the gcc library and LIBG++BUILD_DIR is where you built the g++ library. If you have chosen to put those libraries in a dedicated directory, say `/foo/bar/gcc_shared_libs', you should add the following line to `speech_tools/config/config' &shellprompt; CONFIG_LIBS=-L/foo/bar/gcc_shared_libs You will have to include that directory in your LD_LIBRARY_PATH when running any speech tools program. Checking it's all OK When you have compiled speech_tools, you can check how the libraries have been used by going into `speech_tools/main' and doing something like... (sh, ksh and bash users) &shellprompt; LD_LIBRARY_PATH=../lib:/foo/bar/gcc_shared_libs ldd bcat (csh users) &shellprompt; setenv LD_LIBRARY_PATH ../lib:/foo/bar/gcc_shared_libs &shellprompt; ldd bcat The result should be something like: libestjava.so.1.1.0.1 => ../lib/libestjava.so.1.1.0.1 libestbase.so.1.1.0.1 => ../lib/libestbase.so.1.1.0.1 libeststring.so.1.2 => ../lib/libeststring.so.1.2 libsocket.so.1 => /usr/lib/libsocket.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libm.so.1 => /usr/lib/libm.so.1 libstdc++.so.2.7.2 => /foo/bar/gcc_shared_libs/libstdc++.so.2.7.2 libgcc.so.2.7.2 => /foo/bar/gcc_shared_libs/libgcc.so.2.7.2 libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1 libmp.so.2 => /usr/lib/libmp.so.2 festdoc-1.4.2/speech_tools/doc/estserver.sgml0100644001741100001440000003460507262605664020026 0ustar awbusers Client-Server Mechanisms The &cpp; class EST_Server provides the core mechanisms required for simple client-server applications. It is currently used to implement the fringe_client program and client-server mechanisms for SIOD. It is planned to use it to re-implement the festival client-server mechanism. Servers have types and names. When a server is started it records it's type, name and location in a `services' file. When a client wishes to connect to a server it looks for it's location in that file by giving a name and type. Once connected a client must present a magic cookie to the server as a simple form of authentication. Once authenticated the client sends requests, consisting of a package name, operation name and a set of arguments, to the server. The server responds with an error report or a sequence of values. An instance of EST_Server embodies each side of the client-server relationship. In the server an instance of EST_Server is created and told how to process requests from clients, a call to the run() method then starts the server. In a client an instance of EST_Server represents the server, and calls to the execute(...) method send requests to the server. The Services Table The first problem which needs to be addressed by any client-server system is how the client finds the server. Servers based on EST_Server handle this problem by writing a record into a file giving their name, type and location. Clients can then look servers up by namd and type. By default the file .estServices is used for this purpose, meaning that each user has their own list of servers. An alternative file could be specified to record public services. The services table also provides a simple authorisation mechanism. Each server records a random string in the table, and clients must send this string before making any requests. Thus people who can't read the services table can't make requests of the server, and the file permissions on the services table can be used to control access to the server. This `magic cookie' authorisation scheme is not very secure. The cookie is sent as plain text over the network and so anyone who can snoop on the network can break the security. A more secure `challange-responce' authorisation scheme should be implemented. The in-file format of the services table is based on the &java; properties file format. A typical file might look as follows: #Services fringe.type=fringe fringe.host=foo.bar.com fringe.cookie=511341634 fringe.port=56362 fringe.address=123.456.789.654 siod.type=siod siod.cookie=492588950 siod.host=foo.bar.com siod.address=123.456.789.654 siod.port=56382 labeling.type=fringe labeling.host=foo.bar.com labeling.cookie=511341634 labeling.port=56362 labeling.address=123.456.789.654 This file lists three services, a fringe server with the default name of fringe, a scheme interpreter running as a server, also with the default name, and a second fringe server named labeling. The programing interface to the services table is provided by the EST_ServiceTable class. &docpp-EST-ServiceTable-2; Writing Clients and Servers If a service type (that is a sub-class of EST_Server) has already been defined for the job you need to do, creating clients and servers is quite straight forward. For this section I will use the EST_SiodServer class, which defines a simple &scheme; execution service service, as an example. A Simple Server To run a siod server we have to read the server table, create the server object and update the table, then start the service running. First we read the default service table. EST_ServiceTable::read(); Now we create the new scheme service called "mySiod". The EST_Server::sm_sequential parameter to the server constructor tells the server todeal with one client at a time. The NULL turns off trace output, replace this with &cout to see what the server is doing. EST_SiodServer *server = new EST_SiodServer(EST_Server::sm_sequential, "mySiod", NULL); Write the table back out so clients can find us. EST_ServiceTable::write(); Create the object which handles the client requests. The handler object actually does the work the client requests. EST_SiodServer provides the obvious default handler (it executes the scheme code and returns the results), so we use that. EST_SiodServer::RequestHandler handler; Finally, start the service. This call never returns. server->run(handler); A Simple Client A client is created by reading the service table, and then asking for a server by name. Again the NULL means `no trace output'. EST_ServiceTable::read(); EST_SiodServer *server = new EST_SiodServer("mySiod", NULL); Now we have a representation of the server we must connect before we can do anything. We can connect and dissconnect a server object any number of times over it's life. This may or may not have some meaning to the server. The return value of the connect operation tells us if we managed to connect. if (server->connect() != connect_ok) EST_sys_error("Error Connecting"); Once we are connected we can send requests to the server. The siod server executes scheme for us, assume that the function get_sexp() returns something we want evaluated. LISP expression = get_sexp(); We pass arguments to requests in an Args structure, a special type of EST_Features. The sod server wants the expression to execute as the value of "sexp". EST_SiodServer::Args args; args.set_val("sexp", est_val(expression)); As in the server, the behaviour of the client is defined by a `handler' object. The handler EST_SiodServer defines for us does nothing with the result, leaving it for us to deal with in the EST_Features structure handler.res. Again this is good enough for us. EST_SiodServer::ResultHandler handler; Finally we are ready to send the request to the server. The siod server provides only one operation, called "eval" in package "scheme", this is the evaluate-expression operation we want. The return value of execute(...) is true of everything goes OK, false for an error. For an error the message is the value of "ERROR". if (!server->execute("scheme", "eval", args, handler)) EST_error("error from siod server '%s'", (const char *)handler.res.String("ERROR")); Now we can get the result of the evaluation, it is returned as the value of "sexp". LISP result = scheme(handler.res.Val("sexp")); Although this may seem a lot of work just to evaluate one expression, once a connection is established, only the three steps set arguments, execute, extract results need to be done for each request. So the following would be the code for a single request: args.set_val("sexp", est_val(expression)); if (!server->execute("scheme", "eval", args, handler)) [handle error] LISP result = scheme(handler.res.Val("sexp")); A Specialised Server If you need to create a server similar to an existing one but which handles requests slightly differently, all you need to do is define your own RequestHandler class. This class has a member function called process() which deos the work. Here is a varient on the siod server which handles a new operation "print" which evaluates an expression and prints the result to standard output as well as retruning it. (In this example some details of error catching and so on necessary for dealing with scheme are omitted so as not to obscure the main points). First we define the handler class. It is a sub-class of the default handler for siod servers. class MyRequestHandler : public EST_SiodServer::RequestHandler { public: virtual EST_String process(void); }; Now, we define the processing method. For any operation other than "print" we call the default siod handler. (leval and lprint are functions provided by the siod interpreter). EST_String MyRequestHandler::process(void) { if (operation == "print") { // Get the expression. LISP sexp = scheme(args.Val("sexp")); // Evaluate it. LISP result = leval(sexp, current_env); // Print it. lprint(result); // Return it. res.set_val("sexp", est_val(result)); return ""; } else // Let the default handler deal with other operations. return EST_SiodServer::RequestHandler::process(); } And now we can start a server which understands the new operation. MyRequestHandler handler; server->run(handler); A Client Which Handles Multiple Results Servers have the option to return more than one value for a single request. This can be used to return the results of a request a piece at a time as they become available, for instance &festival; returns a waveform for each sentence in a piece of text it is given to synthesise. Clearly a simple client of the kind described above which gets the result of a request as a result of the call to execute(...) can't handle multiple results of this kind. This is what the handler object is for. I'll asuume we need a client to del with a varient on the normal siod sever which returns multiple values, say it evaluates the expression in each of a number of environments and returns each result separately. I'll also assume that the work to be done for each result is defined by the fucntion deal_with_result(). Most of the client will be the same as for the simple client, the exception is that we use our own result handler rather than the default one. class MyResultHandler : public EST_SiodServer::ResultHandler { public: virtual void process(void); }; As for the server's request handler, the beahviour of the result handler is defeined by the process() method of the handler. EST_String MyResultHandler::process(void) { // Get the result. LISP result = scheme(handler.res.Val("sexp")); // And deal with it. deal_with_result(result); } With this definition in place we can make requests to the server as follows. MyResultHandler handler; if (!server->execute("scheme", "multi-eval", args, handler)) [handle errors] The deal_with_result() function will be called on each result which is returned. If anything special needs to be done with the final value, it can be done after the call to execute(...) as in the simple client example. Creating a new Service Commands Results The Network Protocol festdoc-1.4.2/speech_tools/doc/estsigpr.sgml0100644001741100001440000003120107262605664017631 0ustar awbusers Signal Processing The &est signal processing library provides a set of standard signal processing tools designed specifically for speech analysis. The library includes: Windowing (creating frames from a continuous waveform) Linear prediction and associated operations Cepstral analysis, both via lpc and DFT. Filterbank analysis Frequency warping including mel-scaling Pitch tracking Energy and Power analysis Spectrogram Generation Fourier Transforms Pitchmarking (of laryngograph signals) Overview Design Issues The signal processing library is designed specifically for speech applications and hence all functions are written with that end goal in mind. The design of the library has centered around building a set of commonly used easy to configure analysis routines. Speed We have tried to make the functions as fast as possible. Signal processing can often be time critical, and so it will always be the case that if the code for a particular signal processing algroithm is written in a single function loop it will run faster than by using libraries. However, the signal processing routines in the EST library are in general very fast, and the fact that they use classes such as EST_Track and EST_FVector does not make them slower than they would be if float * etc was used. types The library makes heavy use of a small number of classes, specifically EST_Wave EST_Track and EST_FVector. These classes are basically arrays and matrices, but take care of issues such as memory managment, error handling and file i/o. Using these classes in the library helps facilitate clean and simple algorithm writing and use. It is strongly recommended that you gain familiarity with these classes before using this part of the library. At present, the issue of complex numbers in signal processing is somewhat fudged, in that a vector of complex numbers is represented by a vector of real parts and a vector of imaginary parts, rather than as a single vector of complex numbers. Common Processing model In speech, a large number of algorithms follow the same basic model, in which a waveform is analysed by an algorithm and a Track, containing a series of time aligned vectors is produced. Regardless of the type of signal processing, the basic model is as follows: Start with a waveform and a series of analysis positions, which can be a fixed distance apart of specified by some other means. For each analysis position, define a small portion of the waveform around that position, Multiply this by a windowing function to produce a vector of speech samples. Pass this to a frame based signal processing routine which in outputs values in another vector. Add this vector to a position in an EST_Track which correponds to the analysis time position. Given this model, the signal processing library breaks down into a number of different types of function: Utterance based functions Functions which operate on an entire waveform or track. These break down into: Analysis Functions which take a waveform and produce a track Synthesis Functions which take a track and produce a waveform Filter Functions which take a waveform and produce a waveform Conversion Functions which take a track and produce a track Frames based functions Functions which operate on a single frame of speech or vector coefficients. Windowing functions which create a windowed frame of speech from a portion of a waveform. Nearly all functions in the signal processing library belong to one of the above listed types. Quite often functions are presented on both the utterance and frame level. For example, there is a function called sig2lpc which takes a single frame of windowed speech and produces a set of linear prediction coefficients. There is also a function called sig2coef which performs linear prediction on a whole waveforn, returning the answer in a Track. sig2coef uses the common processing model, and calls sig2lpc as the algorithm in the loop. Partly for historical reasons some functions, e.g. pda are only available in the utterance based form. When writing signal processing code for this library, it is often the case that all that needs to be written is the frame based algorithm, as other algorithms can do the frame shifting and windowing operations. Track Allocation, Frames, Channels and sub-tracks The signal processing library makes extensive use of the advanced features of the track class, specifically the ability to access single frames and channels. Given a standard multi-channel track, it is possible to make a FVector point to any single frame or channel - this is done by an internal pointer mechanism in EST_FVector. Furthermore, a track can be made to point to a selected number of channels or frames in a main track. For example, imagine we have a function that calculates the covariance matrix for a multi-dimensional track of data. But the data we actually have contains energy, cepstra and delta cepstra. It is non-sensical to calculate convariance on all of this, we just want the cepstra. To do this we use the sub-track facility to set a temporary track to just the cepstral coefficients and pass this into the covariance function. The temporary track has smart pointers into the original track and hence no data is copied. Without this facility, either you would have to do a copy (expensive) or else tell the covariance function which part of the track to use (hacky). Extensive documentation describing this process is found in , and . Functions Functions for Generating Frames The following set of functions perform either a signal processing operation on a single frame of speech to produce a set of coefficients, or a transformation on an existing set of coefficients to produce a new set. In most cases, the first argument to the function is the input, and the second is the output. It is assumed that any input speech frame has already been windowed with an appropriate windowing function (eg. Hamming) - see \Ref{Windowing mechanisms} on how to produce such a frame. See also . It is also assumed that the output vector is of the correct size. No resizing is done in these functions as the incoming vectors may be subvectors of whole tracks etc. In many cases (eg. lpc analysis), an {\bf order} parameter is required. This is usually derived from the size of the input or output vectors, and hence is not passed explicitly. &docpp-LinearPredictionfunctions-3; &docpp-Energyandpowerframefunctions-3; &docpp-FastFourierTransformfunctions-3; &docpp-Framebasedfilterbankandcepstralanalysis-3; Functions for Generating Tracks Functions which operate on a whole waveform and generate coefficients for a track. &docpp-Functionsforusewithframebasedprocessing-3; &docpp-DeltaandAccelerationcoefficents-3; &docpp-PitchF0DetectionAlgorithmfunctions-3; &docpp-PitchmarkingFunctions-3; &docpp-Spectrogramgeneration-3; Functions for Windowing Frames of Waveforms &docpp-EST-Window-2; Filter funtions A filter modifies a waveform by changing its frequency characteristics. The following types of filter are currently supported: FIR filtersFIR filters are general purpose finite impulse response filters which are useful for band-pass, low-pass and high-pass filtering. Linear Prediction filters are used to produce LP residuals from waveforms and vice versa Pre Emphasis filters are simple filters for changing the spectral tilt of a signal Non linear filtersMiscelaneous filters &docpp-FIRfilters-3; &docpp-LinearPredictionfilters-3; &docpp-PrePostEmphasisfilters--3; &docpp-Miscelaneousfilters--3; &docpp-FilterDesign-2; &sigprexamplesection; Programs The following are exectutable programs which are used for signal processing: <link linkend="sigfv-manual">sig2fv</link> is used to provide produce a variety of feature vectors given a waveform. <link linkend="spectgen-manual">spectgen</link> is used to produce spectrograms from utterances. <link linkend="sigfilter-manual">sigfilter</link> performs filtering operations on waveforms. <link linkend="pda-manual">pda</link> performs pitch detection on waveforms. While sig2fv can perform pitch detection also, pda offers more control over the operation. <link linkend="pitchmark-manual">pitchmark</link><para>produces a set of pitchmarks, specifying the instant of glottal close from laryngograph waveforms. </para></simplesect> <para>The following programs are also useful in signal processing: </para> <simplesect><title><link linkend="ch-wave-manual">ch_wave</link>performs basic operates on waveforms, such as adding headers, resampling, rescaling, multi to single channel conversion etc. <link linkend="ch-track-manual">ch_track</link>performs basic operates on coefficient tracks, such as adding headers, resampling, rescaling, multi to single channel conversion etc. festdoc-1.4.2/speech_tools/doc/estspeechclass.sgml0100644001741100001440000001262507262605664021013 0ustar awbusers Speech Classes Overview EST offers two classes for handling and storing speech information of all types: Waveforms and Tracks. Both are basically matrices with one dimension representing time, the other representing a particular channel and the value at that position representing an amplitude. There are signficant differences between them, however, that makes the use of two separate classes preferable to one. Waveforms Waveforms store digitalled sampled acoustic waveforms. They are composed of a matrix of shorts, where rows represent individual samples and columns represent channels. Waves can have arbitrarily many channels, though 1 (mono) and 2 (stereo) are the most common. Waves are stored as shorts as this is the most common file format, which ensures fast compatibility with most file formats and hardware. As each sample is representing by a 16-bit short, the dynamic range of a wave is 96dB. The Track Class The track class is used to represent the outcome of a signal processing operation on a section of speech. It can be thought of as representing a series of frames, where each frame represents signal processing information at a specified time point. The Amplitude Matrix Each frame is a set of ordered coefficients, which represent the output of a signal processing operation on a single section of speech. For example, a frame may represent a spectrum, a cepstrum, or a set of linear predication coefficients. An alternative view is to visualise the track as a set of channels, where each channel represents a how a particular type of information varies with time. For instance, a channel might represent how the energy between 500Hz and 600Hz varies over the course of an utterance. Frames and Channels are stored as a matrix of floats, where each point in the matrix represents the amplitude of a given frame and a given channel. The Time Array In addition to the amplitude matrix, tracks also contain a timearray, which has the same number of elements as frames in the amplitude matrix. The time array is aligned one-to-one with the frames. Each position in the time array represents the time of its frame. In many forms of signal processing, frames are at fixed intervals (often 10ms), and in such cases it would be possible to store this as a single global value. However, the track class is extremely general in terms of time positions and allows frames to be spaced irregularly, which is particularly useful when dealing with pitch-synchronous processing. The Break/Value Array The track class also contains a break/value array, each element of which also as a one-to-one correspondence with a frame. In many representations some frames have undefined values, and the break/value array is used to represent this. For example, F0 contours and formants do not have values during unvoiced sections of speech, and hence frames representing unvoiced sections may be tagged as breaks in the break/value array. By default, it is assumed that all amplitudes are defined and hence no breaks are set at contour initialisation or resizing. In time, this will be replaced by the more general Auxiliary Matrix. Channel names trackmaps etc. The Auxiliary Matrix It is inappropriate to store certain information in the amplitude array. Sub-tracks, channel and frame extaction The track class provides an easy mechanism for dealing with a single portion of the track at a time. If we have say a track with 10 channels and 500 frames, it is possible to assign a vector to any single frame or channel, or to assign a sub-track to any contiguous set of frames or channels. Any values that are changed in the frame or channel vectors or sub-track, will affect the underlying tack. It is of course possible to copy values in and out if values need to be changed without changing the underlying track. Programs The following programs are available: <link linkend="ch-wave-manual">ch_wave</link<para>performs basic operates on waveforms, such as adding headers, resampling, rescaling, multi to single channel conversion etc. </para></formalpara> <formalpara><title><link linkend="ch-track-manual">ch_track</link<para>performs basic operates on coefficient tracks, such as adding headers, resampling, rescaling, multi to single channel conversion etc. </para></formalpara> </sect1> <sect1><title>Classes &docpp-EST-Wave-2; &docpp-EST-Track-2; Functions Auxiliary Track Functions &docpp-EST-track-aux-h-3; &trackexamplesection; festdoc-1.4.2/speech_tools/doc/esttilt.sgml0100644001741100001440000003705707262605664017500 0ustar awbusers The Tilt Intonation Model Tilt is a phonetic model of intonation that represents intonation as a sequence of continuously parameterised events. The tilt library is a set of functions which analyses, synthesizes and manipulates tilt representations. Theoretical Overview The basic unit in the tilt model is the intonational event. Events occur as instants with nothing between them, as opposed to segmental based phenomena where units occur in a contiguous sequence. The basic types of intonational event are pitch accents and (following the popular terminology) boundary tones. Pitch accents (denoted by the letter a) are F0 excursions associated with syllables which are used by the speaker to give some degree of emphasis to a particular word or syllable. In the tilt model, boundary tones (b) are rising F0 excursions which occur at the edges of intonational phrases and as well as giving the hearer a cue as to the end of the phrase, can also signal effects such as continuation and questioning. A combination event ab occurs when a pitch accent and boundary tone occur so close to one another that only a single pitch movement is observed. There are different kinds of pitch accents and boundary tones: the choice of pitch accent and boundary tone allows the speaker to produce different global intonational tunes which can indicate questions, statements, moods etc to the hearer.

    shows a Schematic representation of F0, intonational event relation and segment relation in the Tilt model. The linguistically relevant parts of the F0 contour, which correspond to intonational events, are circled. The events, labelled a for pitch accent and b for boundary are linked to the syllable nuclei of the syllable relation. Note that every event is linked to a syllable, but some syllables do not have events. Unlike traditional intonational phonology schemes \cite{ph:thesis}, \cite{tobi} which impose a categorical classification on events, Tilt uses a set of continuous parameters. These parameters, collectively known as tilt parameters, are determined from examination of the local shape of the event's F0 contour. The tilt model is built on a simpler model, the rise/fall/connection (RFC) model. In the RFC model, each event is modelled by a rise part followed by a fall part. Each part has an amplitude and duration, and two parameters are used to give the time position of the event in the utterance and the F0 height of the event. shows a typical pitch accent with these parameters marked.
    The RFC parameters for an utterance are therefore: rise amplitude (Hz) rise duration (seconds) fall amplitude (Hz) fall duration (seconds) position (seconds) F0 height (Hz)
    Sometimes events don't have rise or fall parts, and in these cases the amplitude and duration of the missing part is set to 0. The position parameter can be specified in two ways: either as the distance from the start of the utterance, or the distance from the start of the vowel of the associated syllable. The latter is more linguistically meangingful, but as vowel boundaries are not always available, the former is often used. While the RFC model can accurately describe F0 contours, the mechanism is not ideal in that the RFC parameters for each contour are not as easy to interpret and manipulate as one might like. For instance there are two amplitude parameters for each event, when it would make sense to have only one. The Tilt representation helps solve these problems by transforming the four amplitude and duration RFC parameters into three Tilt parameters: amplitude (Hz): the sum of the magnitudes of the rise and fall amplitudes. duration (seconds): the sum of the rise and fall durations. tilt: a dimensionless number which expresses the overall shape of the event, independent of its amplitude or duration. The position and F0 height parameters are the same as before. The tilt representation is superior to the RFC representation in that it has fewer parameters without significant loss of accuracy. Importantly, it can be argued that the tilt parameters are more linguistically meaningful. In describing the tilt model, we use the term analysis to describe the process of producing a tilt representation from an F0 contour, and synthesis to describe the process of prodcing a F0 contour from a tilt representation. RFC Analysis Locating Events in the F0 contour The first stage in analysis is to find the intonational events in an F0 contour. EST does not directly provide a means for doing this. In practice this is either done by hand by a human labeller, or automatically by the HMM auto event labeller. The current HMM event labeller is based on the HTK system and hence can't be part of EST, but an outline of the system follows: The automatic event detector uses continuous density hidden Markov models to perform a segmentation of the input utterance. A number of units are defined and a HMM is trained on examples of that kind from a pre-labelled training corpus using the Baum-Welch algorithm \cite{baum:72}. Each utterance in the corpus is acoustically processed so that it can be represented by sequence of evenly spaced frames. Each frame is a multi-component vector representing the acoustic information for the time interval centred around the frame. Recognition is performed by forming a network comprising the HMMs for each unit in conjunction with an n-gram language model which gives the prior probability of a sequence of n units occurring. To perform recognition on an utterance, the network is searched using the standard Viterbi algorithm to find the most likely path through the network given the input sequence of acoustic vectors. It is our intention to put a complete event labeller in EST in the future. Producing an RFC representation from an utterance's events and F0 contour An utterance's events are represented in a relation. Initially, events are stored as regions with start and stop times as this is the most common output format of labellers (both human and automatic). For example, for utterance kdt_016, a set of basic event labels is as follows (in xlabel format): 0.290 146 sil 0.480 146 c 0.620 146 a 0.760 146 c 0.960 146 a 1.480 146 c 1.680 146 a 1.790 146 sil Events are labelled "a", and silences "sil". The use of the "c" label is to allow start times which differ from the end of the previous event. Conceptually, this can alsow be represented as follows: name:sil start:0.0 end:0.290 name:a start:0.290 end:0.620 name:a start:0.760 end:0.960 name:a start:1.480 end:1.680 name:sil start:1.790 end:1.790 The other component for analysis is the utterance's F0 contour, which is stored in a track. The contour must be continuous (i.e. have no breaks), and its frames must be specified at fixed intervals. For best performance the contour should have been smoothed. The RFC analysis component takes the approximate labels and the smoothed F0 contour, fits rise and fall shapes, and hence determines an optimal set of RFC parameters for the utterance. For each event, a peak picking algorithm decides if the event has a rise part only, a fall part only or a rise part followed by a fall part.
    For each part, a search region, shown in , is defined around the approximate start and end boundaries as defined in the input label file. The search region is controlled by a number of parameters:
    start_limit: the distance in seconds before each input start boundary that the start search region should begin. end_limit: the distance in seconds after each input end boundary that the end search region should begin. range: the end and beginnings of the start and end regions respectively, specified as a fraction of the overall label duration. For example, a pitch accent starts at 1.45 seconds and ends at 1.75 seconds. If the start and end limit are both defined to be 0.1 seconds and the range is 0.4 (40%), then the start region starts at 1.35 seconds and ends at 1.55, and the end region starts at 1.65 and ends at 1.85. The matching algroithm will synthesize every possible shape lying within this region, measure the distance between each and the actual contour, and pick the one with the lowest distance. The final results of the matching process is a relation of events, each with the 6 RFC parameters are descibed above. The program tilt_analysis will perform RFC matching given a label file and F0 contour. The function rfc_analysis takes a F0 contour, a relation and a set of options and returns the RFC parameters in the features of each item in the relation.
    RFC to Tilt Conversion The rise and fall RFC parameters can be converted to Tilt parameters using the following equations. Amplitude is the sum of te magnitudes of the rise and fall amplitudes: Duration is the sum of the of the rise and fall durations: Tilt can be measured with respect to amplitude: or duration: The tilt model assumes that these are strongly correlated so that an average of the two is representative of the shape of the event: The is no stand alone program to do this conversion, but the tilt_analysis can do this conversion in addition to performing the RFC matching as described above. The function rfc_to_tilt takes a relation containing RFC parameterised items and converts it to a relation containing Tilt paramterised items. Another function, also called rfc_to_tilt takes a Features object containing the 4 rise fall paramaters and writes the 3 tilt paramaters into another features object. This function can be used to do rfc_to_tilt conversion for a single event. Tilt to RFC Conversion The Tilt parameters can be converted to RFC parameters using the follwing equations, which are rearranged from to : Rise amplitude Fall amplitude Rise duration Fall duration The is no stand alone program to do this conversion, but the tilt_synthesis can do this conversion in addition to generating a F0 contour. The function tilt_to_rfc takes a relation containing Tilt parameterised items and converts it to a relation containing RFC paramterised items. Another function, also called tilt_to_rfc takes a Features object containing the 3 Tilt paramaters and writes the 4 rise fall RFC paramaters into another features object. This function can be used to do tilt_to_rfc conversion for a single event. RFC to F0 Synthesis An F0 contour can be generated from a set of RFC parameters using the follwing equations. Events are generated as piecewise combinations of quadratic functions: Between events, straight lines are used: The stand alone program tilt_synthesis can do this conversion. It takes a RFC label file as input and produces a F0 file. This program can also generate a F0 file directly from a Tilt label file The function rfc_synthesis takes a relation containing RFC parameterised items and produces a F0 contour in a Track. The function synthesize_rf_event takes a Features object containing the 4 rise fall RFC paramaters and generates the F0 contour for a single event. Exectuable Programs <link linkend="tilt-analysis-manual">tilt_analysis</link> Produces a Tilt or RFC analysis of a F0 contour, given a set label file containing a set of approximateintonational event boundaries. <link linkend="tilt-synthesis-manual">tilt_synthesis</link> tilt_synthesis generates a F0 contour, given a label file containing parameteriszed Tilt or RFC events. Generation of F0 contours can be done with: <link linkend="pda-manual">pda</link> &docpp-Tiltfunctions; festdoc-1.4.2/speech_tools/doc/estutil.sgml0100644001741100001440000000057207262605664017471 0ustar awbusers Utility Functions Utility Classes and Functions &docpp-EST-Token-2; &docpp-UtilityFunctionsforstrings-2; &docpp-UtilityfunctionsforIO-2; festdoc-1.4.2/speech_tools/doc/estwagon.sgml0100644001741100001440000004325007262605664017627 0ustar awbusers Classification and Regression Trees Overview As part of tools for statistical modelling &est includes methods for automatically building decision trees and decision lists from features data to predict both fixed classed (classification) or gaussians (regression). Wagon is the basic program that provide this facility. The construction of CARTs (classification and regression trees) is best described in breiman84 and has become a common basic method for building statistical models from simple feature data. CART is powerful because it can deal with incomplete data, multiple types of features (floats, unumerated sets) both in input features and predicted features, and the trees it produces often contain rules which are humanly readable. Decision trees contain a binary question (yes/no answer) about some feature at each node in the tree. The leaves of the tree contain the best prediction based on the training data. Decision lists are a reduced form of this where one answer to each question leads directly to a leaf node. A tree's leaf node may be a single member of some class, a probability density function (over some discrete class), a predicted mean value for a continuous feature or a gaussian (mean and standard deviation for a continuous value). Theorectically the predicted value may be anything for which a function can defined that can give a measure of impurity for a set of samples, and a distance measure between impurities. The basic algorithm is given a set of samples (a feature vector) find the question about some feature which splits the data minimising the mean "impurity" of the two partitions. Recursively apply this splitting on each partition until some stop criteria is reached (e.g. a minimum number of samples in the partition. The basic CART building algorithm is a greedy algorithm in that it chooses the locally best discriminatory feature at each stage in the process. This is suboptimal but a full search for a fully optimized set of question would be computationallly very expensive. Although there are pathological cases in most data sets this greediness is not a problem. The basic building algorithm starts with a set of feature vectors representing samples, at each stage all possible questions for all possibles features are asked about the data finding out how the question splits the data. A measurement of impurity of each partitioning is made and the question that generates the least impure partitions is selected. This process is applied recursively on each sub-partions recursively until some stop criteria is met (e.g. a minimal number of samples in a partition). Impurities The impurity of a set of samples is designed capture how similar the samples are to each other. The smaller the number the less impure the sample set is. For sample sets with continuous predictees Wagon uses the variance times number of sample points. The variance alone could be used by this overly favour very small sample sets. As the test thatuses the impurity is trying to minimise it over a partitioning of the data, multiple each part with the number of samples will encourage larger partitions, which we have found lead to better decision trees in general. For sample sets with discrete predictees Wagon uses the entropy times number of sample points. Again the number of sample points is used in so that small sample set are not unfairly favoured. The entropy for a sample set is calculated as sumof for each x in class prob(x)*log(prob(x)) Other impurity measure could be used if required. For example an expermental cluster technique used for unit selection actually used impurity calculated as the mean euclidean distance between all vectors of parameters in the sample set. However the above two are more standard measures. Question forming Wagon has to automatically form questions about each feature in the data set. For descrete features questions are build for each member of the set, e.g. if feature n has value x. Our implementation does not currently support more complex questions which could achieve better results (though at the expense of training time). Questions about features being some subset of the class members may give smaller trees. If the data requires distinction of values a, b and c, from d e and f, our method would require three separate questions, while if subset questions could be formed this could be done in one step which would not only give a smaller tree but also not unecessarily split the samples for a, b and c. In general subset forming is exponential on the number items in the class though there are techniques that can reduce this with heuristics. However these are currently not supported. Note however the the tree formalism produced but Wagon does support such questions (with the operator "in") but Wagon will never produce these question, though other tree building techniques (e.g. by hand) may use this form of question. For continuous features Wagon tries to find a partition of the range of the values that best optimizes the average impurity of the partitions. This is currently done by linearly spliting the range into a predefined subparts (10 by default) and testing each split. This again isn't optimal but does offer reasonably accuracy without require vast amounts of computation. Tree Building criteria There are many ways to constrain the tree building algorithm to help build the "best" tree. Wagon supports many of theses (though there are almost certainly others that is does not. In the most basic forms of the tree building algorithm a fully exhaustive classifcation of all samples would be achieved. This, of course is unlikely to be good when given samples that are not contained within the training data. Thus the object is to build a classification/regression tree that will be most suitable for new unseen samples. The most basic method to achieve this is not to build a full tree but require that there are at least n samples in a partition before a question split is considered. We refer to that as the stop value. A number like 50 as a stop value will often be good, but depending of the amount of data you have, the distribution of it, etc various stop value may produce more general trees. A second method for building "good" trees is to hold out some of the training data and build a (probably over-trained) tree with a small stop value. Then prune the tree back to where it best matches the held out data. This can often produce better results than a fixed stop value as this effectively allows the stop value to vary through different parts of the tree depending on how general the prediction is when compared against held out data. It is often better to try to build more balanced trees. A small stop value may cause the tree building algorithm to find small coherent sets of samples with very specific questions. The result tree becomes heavily lop-sided and (perhaps) not optimal. Rather than having the same literal stop value more balanced trees can built if the stop value is defined to be some percentage of the number of samples under consideration. This percentage we call a balance factor. Thus the stop value is then the largest of the defined fixed stop value or the balance factor times the number of samples. To some extent the multiplication of the entropy (or variance) by the number of samples in the impurity measure is also way to combat imbalance in tree building. A good technique we have found is to build trees in a stepwise fashion. In this case instead of considering all features in building the best tree. We increment build trees looking for which individual feature best increases the accuracy of the build tree on the provided test data. Unlike within the tree building process where we are looking for the best question over all features this technique limits which features are available for consideration. It first builds a tree using each and only the features provided looking for which individual feature provides the best tree. The selecting that feature is builds n-1 trees with the best feature from the first round with each of the remaining features. This process continues until no more features add to the accuracy or some stopping criteria (percentage improved) is not reached. This technique is also a greedy technique but we've found that when many features are presented, especially when some are highly correlated with each other, stepwise building produces a significantly more robust tree on external test data. It also typically builds smaller trees. But of course there is a cost in computation time. While using the stepwise option each new feature added is printed out. Care should be taking in interpreting what this means. It does not necessarily give the order and relative importance of the features, but may be useful if showing which features are particualrly important to this build. Stepwise tests each success tree against the specified test set, (balance, held out and stop options are repsected for each build). As this is using the test set which optimizing the tree, it is not valid to view the specified test set as a genuine test set. Another externally held test set should be used to test the accuracy of generated tree. Data format The input data for wagon (and some other model building tools in the Edinburgh Speech Tools library), should consist of feature vectors, and a description of the fields in these vectors. Feature vectors A feature vector is a file with one sample per line, with feature value as white space separated tokens. If your features values conatin whitespace then you must quote them using double quotes. The (Festival) program dumpfeats is specifically designed to generate such files from databases of utterances but these files may be generated from any data source. Each vector must have the same number of features (and in the same order. Features may be specified as "ignored" in the description (or in actual use) so it is common that data files contain more features than are always used in model building. By default the first feature in a data file is the predictee, though at least in wagon) the predictee field can be named at tree building time to be other than the first field. Features can be discrete of continuous but at present must be single valued, "multi-valued" or "list-valued" features are not currently supported. Note this means that a feature in different samples may have different values but in a particular sample a particular feature can only have one value. A type example is 0.399 pau sh 0 0 0 1 1 0 0 0 0 0 0 0.082 sh iy pau onset 0 1 0 0 1 1 0 0 1 0.074 iy hh sh coda 1 0 1 0 1 1 0 0 1 0.048 hh ae iy onset 0 1 0 1 1 1 0 1 1 0.062 ae d hh coda 1 0 0 1 1 1 0 1 1 0.020 d y ae coda 2 0 1 1 1 1 0 1 1 0.082 y ax d onset 0 1 0 1 1 1 1 1 1 0.082 ax r y coda 1 0 0 1 1 1 1 1 1 0.036 r d ax coda 2 0 1 1 1 1 1 1 1 Note is it common to have thousands, even hundreds of thousands of samples in a data file, and the number of features can often be in the hundreds, though can also be less than ten depending on the what it describes. Data descriptions A data file also requires a description file which names and classifies the features in a datafiles. Features must haves names so they can be refered to in the decision tree (or other model output) and also be classified into their type. The basic types available for features are continuous for features that range over reals (e.g. duration of phones) categorial for features with a pre-defined list of possible values (e.g. phone names) string for features with an open class of discrete values (e.g. words) The data description consists of a parenthesized list of feature descriptions. Each feature description consists of the feature name and its type (and/or possible values). Feature names, by convention, should be features names in the sense for features (and pathnames) used throughout the utterance structures in the Edinburgh Speech Tools. The expected method to use models generated from features sets in the Edinburgh Speech Tools is to apply them to items. In that sense having a feature name be a feature of an item (or relatve) pathname will avoid having the extra step of extracting features into a separated table before applying the model. However it should also be stated that to wagon these names are arbitrary tokens and their semantic irrelevant at training time. A typical description file would look like this, this is one suitable for the data file given above ((segment_duration float) ( name aa ae ah ao aw ax ay b ch d dh dx eh el em en er ey f g hh ih iy jh k l m n nx ng ow oy p r s sh t th uh uw v w y z zh pau ) ( n.name 0 aa ae ah ao aw ax ay b ch d dh dx eh el em en er ey f g hh ih iy jh k l m n nx ng ow oy p r s sh t th uh uw v w y z zh pau ) ( p.name 0 aa ae ah ao aw ax ay b ch d dh dx eh el em en er ey f g hh ih iy jh k l m n nx ng ow oy p r s sh t th uh uw v w y z zh pau ) (position_type 0 onset coda) (pos_in_syl float) (syl_initial 0 1) (syl_final 0 1) (R:Sylstructure.parent.R:Syllable.p.syl_break float) (R:Sylstructure.parent.syl_break float) (R:Sylstructure.parent.R:Syllable.n.syl_break float) (R:Sylstructure.parent.R:Syllable.p.stress 0 1) (R:Sylstructure.parent.stress 0 1) (R:Sylstructure.parent.R:Syllable.n.stress 0 1) ) There are also a number of special symbols that may be used in a description file. If the type (first toke after the name) is ignore the feature will be ignored in the model building process. You may also specified features to ignore at tree building time but it is often convinient to explicitly ignore feature(s) in the description file. For open categorial features the token _other_ should appear as the first in the list of possible values. This actually allows features to have a partially closed set and and open set. A description file can't be generated automatically from a data set though an approximation is possible. Particularly its is not possible to automatically decied if a feature value is continous of that its example values happen to look like numbers. The script make_wagon_desc takes a datafile and file containing only the names of the features, and the name of the description file it will create. This is often a useful first pass though it almost certainly must be hand editted afterwards. Tree format The generated tree files are written as Lisp s-expressions as this is by far the easiest external method to represent trees. Even if the trees are read by something other than Lisp it is easy to write a reader for such a format. The syntax of a tree is TREE ::= LEAF | QUESTION-NODE QUESTION-NODE ::= "(" QUESTION YES-NODE NO-NODE ")" YES-NODE ::= TREE NO-NODE ::= TREE QUESTION ::= "(" FEATURENAME "is" VALUE ")" | "(" FEATURENAME "=" FLOAT ")" | "(" FEATURENAME "<" FLOAT ")" | "(" FEATURENAME ">" FLOAT ")" | "(" FEATURENAME "matches" REGEX ")" | "(" FEATURENAME "in" "(" VALUE0 VALUE1 ... ")" ")" LEAF ::= "(" STDDEV MEAN ")" | "(" "(" VALUE0 PROB0 ")" "(" VALUE1 PROB1 ")" ... MOSTPROBVAL ")" | any other lisp s-expression Note that not all of the question types are generated by Wagon but they are supported by the interpreters. The leaf nodes differ depending on the type of the predictee. For continuous predictees (regression trees) the leaves consist of a pair of floats, the stddev and mean. For discrete predictees (classification trees) the leaves are a probability density function for the members of the class. Also the last member of the list is the most probable value. Note that in both case the last value of the leaf list is the answer desired in many cases. Here's a small example tree Functions Programs The following exectutable programs are provided for the building and testing of decision trees <link linkend="wagon-manual">wagon</link> is the core building program <link linkend="wagon-test-manual">wagon_test</link> applies a trained treee to data and tests its accuracy. Exectuable Programs &wagonmanualsection; festdoc-1.4.2/speech_tools/doc/estxml.sgml0100644001741100001440000002354507262605664017321 0ustar awbusers &xml; Support There are three levels of support for &xml; with &est;. Loading as an Utterance A built in &xml; parser allows text marked up according to an &xml; DTD to be read into an EST_Utterance (see ). XML_Parser_Class A &cpp; class XML_Parser_Class (see The documentation for that class) which makes it relatively simple to write specialised &xml; processing code. RXP The RXP XML parser is included and can be used directly(). Reading &xml; Text As An <classname>EST_Utterance</classname> In order to read &xml; marked up text, the &est; code must be told how the &xml; markup should relate to the utterance structure. This is done by annotating the DTD using which the text is processed. There are two posible ways to anotate the DTD. Either a new DTD can be created with the anotations added, or the anotations can be included in the &xml; file. A new DTD To write a new DTD based on an existing one, you should include the existing one as follows: <!-- Extended FooBar DTD for speech tools --> <!-- Include original FooBar DTD --> <!ENTITY % OldFooBarDTD PUBLIC "//Foo//DTD Bar" "http://www.foo.org/dtds/org.dtd"> %OldFooBarDTD; <!-- Your extensions, for instance... --> <!-- syn-node elements are nodes in the Syntax relation --> <!ATTLIST syn-node relationNode CDATA #FIXED "Syntax" > In the &xml; file Extensions to the DTD can be included in the !DOCTYPE declaration in the marked up text. For instance: <?xml version='1.0'?> <!DOCTYPE utterance PUBLIC "//Foo//DTD Bar" "http://www.foo.org/dtds/org.dtd" [ <!-- Item elements are nodes in the Syntax relation --> <!ATTLIST item relationNode CDATA #FIXED "Syntax" > ]> <utterance> <!-- Actual markup starts here --> Summary of DTD Anotations The following attributes may be added to elements in your DTD to describe it's relation to EST_Utterance structures. estUttFeats The value should be a comma separated list of attributes which should be set as features on the utterance. Each attribute can be either a simple identifier, or two identifiers separated by :. A value foo:bar causes the value of the foo attribute of the element to be set as the value of the Utterance feature bar. A simple identifier foo causes the foo attribute of the element to be set as the value of the Utterance feature X_foo where X is the name of the element. estRelationFeat The value should be a comma separated list of attributes which should be set as features on the relation related to this element. It's format and meaning is the same as for estUttFeats. estRelationElementAttr Indicates that this element defines a relation. All elements inside this one will be made nodes in the relation, unless they are explicitly marked to be ignored by estRelationIgnore. The value of the estRelationElementAttr attribute is the name of an attribute which gives the name of the relation. estRelationTypeAttr When an element has a estRelationElementAttr tag to indicate it's content defines a relaion, it may also have the estRelationTypeAttr tag. This gives the name of an attribute which gives the type of relation. Currently only a type of `list' or `linear' gives a lienar relation, anything else gives a tree. estRelationIgnore If this is set to any value on an element which would otherwise be interpreted as an EST_Item in the current relation, the element is passed over. The contents will be processed as if they had been directly inside this element's parent. estRelationNode When placed on an element, indicates that this element is to be interpreted as an item in the relation named in the value of the attribute. estExpansion The value of this attribute defines how ranges in href attributes are expanded for this element. If the value is replace the nodes created during expansion are placed at the same level in the hierachy as the original element. If the value is embed they are created as children of a new node. estContentFeature The value of this attribute is the featre which is set to the contents of the current element. The <classname>XML_Parser_Class</classname> &cpp; Class The &cpp; class XML_Parser_Class (declared in rxp/XML_Parser.h) defines an abstract interface to the &xml; parsing process. By breating a cub-class of XML_Parser_Class you can create code to read &xml; marked up text quite simply. Some Definitions An &xml; parser is an object which can analyse a piece of text marked up according to an &xml; doctype and perform actions based on the markup. One &xml; parser deals with one text. An &xml; parser is represented by an instance of the class XML_Parser. An &xml parser class is an object from which &xml parses can be created. It defines the behaviour of the parsers when they process their assigned text, and also a mapping from &xml; entity IDs to places to look for them. An &xml; parser class is represented by an instance of XML_Parser_Class or a subclass of XML_Parser_Class. Creating An &xml; Processing Procedure In order to create a procedure which will process &xml; marked up text in the manner of your choice you need to do 4 things. Simple examples can be found in testsuite/xml_example.cc and main/xml_parser_main.cc Create a Sub-Class of <classname>XML_Parser_Class</classname> Create a Structure Holding the State of the Parse Decide How Entity IDs Should Be Converted To Filenames Write A Procedure To Start The Parser The <classname>XML_Parser_Class</classname> in Detail</classname> &docpp-XMLParser-3; The <productname>RXP</productname> &xml; Parser Included in the &est; library is a version of the RXP &xml; parser. This version is limited to 8-bit characters for consistancy with the rest of &est;. For more details, see the RXP documentation. Insert reference to RXP documentation here. festdoc-1.4.2/speech_tools/doc/hierHeader.inc0100644001741100001440000000103507262605664017642 0ustar awbusers EST Class Hierachy

    Edinburgh Speech Tools
    V1.1.0 August 1998


    festdoc-1.4.2/speech_tools/doc/indexHeader.inc0100644001741100001440000000107607262605664020027 0ustar awbusers Edinburgh Speech Tools Index

    Edinburgh Speech Tools
    V1.1.0 August 1998


    
    
    festdoc-1.4.2/speech_tools/doc/sane.dtd0100644001741100001440000000334407262605664016537 0ustar awbusers "> festdoc-1.4.2/speech_tools/doc/sane_to_docbook.dsl0100644001741100001440000001766407262605664020762 0ustar awbusers (declare-flow-object-class element "UNREGISTERED::James Clark//Flow Object Class::element") (declare-flow-object-class empty-element "UNREGISTERED::James Clark//Flow Object Class::empty-element") (declare-flow-object-class document-type "UNREGISTERED::James Clark//Flow Object Class::document-type") (declare-flow-object-class processing-instruction "UNREGISTERED::James Clark//Flow Object Class::processing-instruction") (declare-flow-object-class entity "UNREGISTERED::James Clark//Flow Object Class::entity") (declare-flow-object-class entity-ref "UNREGISTERED::James Clark//Flow Object Class::entity-ref") (declare-flow-object-class formatting-instruction "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction") (declare-characteristic preserve-sdata? "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" #f) (define sect-depth 1) (define unique-name (number->string (time))) (define (copy-attributes #!optional (nd (current-node))) (let loop ((atts (named-node-list-names (attributes nd)))) (if (null? atts) '() (let* ((name (car atts)) (value (attribute-string name nd))) (if value (cons (list name value) (loop (cdr atts))) (loop (cdr atts))))))) (default (empty-sosofo) ) (element sane (process-children) ) (define (sect-at depth) (if (> depth 0) (string-append "sect" (number->string depth)) "chapter" ) ) (define (handle-container-item type depth) (let* ((id (attribute-string "id")) ) (make element gi: (sect-at depth) attributes: (list (list "id" id) (list "role" type)) (make sequence (with-mode build-title (process-node-list (current-node))) (if (equal? depth sect-depth) (make element gi: "toc" attributes: '(("depth" "5")) (empty-sosofo) ) (empty-sosofo) ) (with-mode text (process-matching-children "cxxdoc")) (process-matching-children "cxxPublic") (process-matching-children "cxxProtected") (process-matching-children "cxxPrivate") (process-matching-children "cxxItems") ) ) ) ) (define (handle-item type depth) (let* ((id (attribute-string "id")) ) (make element gi: "simpleSect" attributes: (list (list "id" id) (list "role" type)) (make sequence (with-mode build-title (process-node-list (current-node))) (with-mode text (process-matching-children "cxxdoc")) (with-mode parameters (process-matching-children "parameters")) (process-matching-children "cxxPublic") (process-matching-children "cxxProtected") (process-matching-children "cxxPrivate") (process-matching-children "cxxItems") ) ) ) ) (define ($xref$) (let* ((id (attribute-string "linkend"))) (make element gi: "xref" attributes: (list (list "linkend" id)) (empty-sosofo) ) ) ) (define (find-depth nd) (let* ((p (parent nd))) (if (null? p) 0 (case (gi p) (("CXXCLASS" "CXXINTERFACE" "CXXUNION" "CXXSTRUCT" "CXXENTRY") (+ 1 (find-depth p))) (("SANE") 0) (else (find-depth p)) ) ) ) ) (define (sgml-root-element) ;; Returns the node that is the root element of the current document (let loop ((root (current-node))) (if (node-list-empty? (parent root)) root (loop (parent root))))) (define (node-depth) (+ sect-depth (find-depth (current-node))) ) (define (unique-filename base ext) (string-append base "_" unique-name "_" (number->string (element-number)) "." ext) ) (element docppRef ($xref$) ) (element docppLink (make element gi: "link" attributes: (copy-attributes) ) ) (element cxxClass (handle-container-item "class" (node-depth)) ) (element cxxUnion (handle-container-item "union" (node-depth)) ) (element cxxInterface (handle-container-item "interface" (node-depth)) ) (element cxxStruct (handle-container-item "struct" (node-depth)) ) (element cxxEntry (handle-container-item "entry" (node-depth)) ) (element cxxMethod (handle-item "method" (node-depth)) ) (element cxxVariable (handle-item "variable" (node-depth)) ) (element cxxFunction (handle-item "function" (node-depth)) ) (element cxxMacro (handle-item "macro" (node-depth)) ) (element cxxPublic (process-children) ) (element cxxProtected (process-children) ) (element cxxPrivate (process-children) ) (element cxxItems (process-children) ) (define ($cpp-title$ before after) (make sequence (make element gi: "title" (literal before) (with-mode code (process-matching-children "name")) (literal after) ) (make element gi: "synopsis" (make sequence (make element gi: "synopsis" attributes: '(("role" "type")) (with-mode code (process-matching-children "type")) ) (make element gi: "synopsis" attributes: '(("role" "name")) (with-mode code (process-matching-children "name")) ) (make element gi: "synopsis" attributes: '(("role" "args")) (with-mode code (process-matching-children "args")) ) ) ) ) ) (define ($title$) (make element gi: "title" (with-mode text (process-matching-children "name")) ) ) (mode build-title (default (empty-sosofo)) (element cxxClass ($cpp-title$ "class " "{}")) (element cxxInterface ($cpp-title$ "interface " "{}")) (element cxxUnion ($cpp-title$ "union " "{}")) (element cxxStruct ($cpp-title$ "struct " "{}")) (element cxxMethod ($cpp-title$ "" "()")) (element cxxFunction ($cpp-title$ "" "()")) (element cxxVariable ($cpp-title$ "" ";")) (element cxxMacro ($cpp-title$ "#define " "()")) (element cxxEntry ($title$)) ) (mode code (default (make element attributes: (copy-attributes)) ) (element docppRef ($xref$) ) (element docppLink (make element gi: "link" attributes: (copy-attributes) ) ) (element args (process-children) ) (element type (process-children) ) (element name (if (string=? (data (current-node)) "()") (literal "operator") (process-children) ) ) ) (mode text (default (make element attributes: (copy-attributes)) ) (element math (let* ((file (unique-filename "docppmath" "gif"))) (make element gi: "graphic" attributes: (list '("format" "tex") (list "fileref" file)) ) ) ) (element imath (let* ((file (unique-filename "docppimath" "gif"))) (make element gi: "inlinegraphic" attributes: (list '("format" "tex") (list "fileref" file)) ) ) ) (element docppRef ($xref$) ) (element docppLink (make element gi: "link" attributes: (copy-attributes) ) ) (element cxxdoc (process-children) ) (element expr (make element gi: "literal" attributes: (list (list "class" "expression")) (process-children) ) ) (element method (make element gi: "function" attributes: (list (list "class" "method")) (process-children) ) ) (element (parameter name) (empty-sosofo) ) (element name (process-children) ) ) (mode parameters (element parameters (make element gi: "variableList" (make sequence (make element gi: "title" (literal "Parameters") ) (process-children) ) ) ) (element parameter (make element gi: "varListEntry" (make sequence (make element gi: "term" (with-mode code (process-matching-children "name")) ) (make element gi: "listitem" (make element gi: "para" (with-mode text (process-children)) ) ) ) ) ) ) festdoc-1.4.2/speech_tools/doc/speechtools.sgml0100644001741100001440000000471507262605664020333 0ustar awbusers %cstrDefs; %includeOnlyDefs; %sectionDefs; %declareExamples; %declareManuals; %declareDocpp; ]> Edinburgh Speech Tools Library System Documentation Edition &EDITION;, for &VERSION; &UPDATED; Paul Taylor Richard Caley Alan W. Black Simon King 1994-1999 Centre for Speech Technology, University of Edinburgh festdoc-1.4.2/speech_tools/doc/man/0040755001741100001440000000000007325004571015654 5ustar awbusersfestdoc-1.4.2/speech_tools/doc/man/CVS/0040755001741100001440000000000007325004571016307 5ustar awbusersfestdoc-1.4.2/speech_tools/doc/man/CVS/Root0100644001741100001440000000004207325004571017146 0ustar awbusers:ext:robert@festvox.org:/home/CVS festdoc-1.4.2/speech_tools/doc/man/CVS/Repository0100644001741100001440000000002507325004571020403 0ustar awbusersspeech_tools/doc/man festdoc-1.4.2/speech_tools/doc/man/CVS/Entries0100644001741100001440000000005707325004571017642 0ustar awbusers/Makefile/1.1.1.1/Wed Apr 4 11:55:32 2001// D festdoc-1.4.2/speech_tools/doc/man/Makefile0100644001741100001440000000651307262605664017330 0ustar awbusers########################################################################### ## ## ## Centre for Speech Technology Research ## ## University of Edinburgh, UK ## ## Copyright (c) 1996 ## ## All Rights Reserved. ## ## ## ## Permission is hereby granted, free of charge, to use and distribute ## ## this software and its documentation without restriction, including ## ## without limitation the rights to use, copy, modify, merge, publish, ## ## distribute, sublicense, and/or sell copies of this work, and to ## ## permit persons to whom this work is furnished to do so, subject to ## ## the following conditions: ## ## 1. The code must retain the above copyright notice, this list of ## ## conditions and the following disclaimer. ## ## 2. Any modifications must be clearly marked as such. ## ## 3. Original authors' names are not deleted. ## ## 4. The authors' names are not used to endorse or promote products ## ## derived from this software without specific prior written ## ## permission. ## ## ## ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## ## THIS SOFTWARE. ## ## ## ########################################################################### ## Author : Paul Taylor ## ## Date : March 1995 ## ##-----------------------------------------------------------------------## ## ## ## Documentation directory ## ## ## ##=======================================================================## TOP=../.. DIRNAME=doc/man # Replaced by the docbook system (well almost) # MANPAGES = ch_lab.1 ch_track.1 ch_wave.1 na_play.1 wagon.1 wagon_test.1 FILES = $(MANPAGES:.1=.top) $(MANPAGES:.1=.bot) Makefile INSTALL = manpages all: $(MANPAGES) %.1 : %.top %.options %.bot cat $^ >$@ %.options : $(TOP)/bin/% $< -man_options >$@ include $(TOP)/config/common_make_rules manpages: $(INSTALL_PROG) $(MANPAGES) $(MANDIR)/man1 festdoc-1.4.2/speech_tools/doc/make.include0100644001741100001440000000026007327543065017366 0ustar awbusersLIBRARY_TEMPLATE_DIRS= ../include ../audio ../utils ../base_class ../base_class/string ../base_class/templ_inst ../ling_class ../speech_class ../sigpr ../stats ../grammar festdoc-1.4.2/speech_tools/doc/INCLUDE_ONLY-full0100444001741100001440000000114207327541422017704 0ustar awbusers festdoc-1.4.2/speech_tools/doc/INCLUDE_ONLY-min0100444001741100001440000000112407327541422017525 0ustar awbusers festdoc-1.4.2/speech_tools/doc/INCLUDE_ONLY0100644001741100001440000000114207327541422016746 0ustar awbusers festdoc-1.4.2/speech_tools/doc/sections.dtd0100444001741100001440000000114607327541422017425 0ustar awbusers festdoc-1.4.2/speech_tools/doc/index_html.jade0100644001741100001440000000000007327541422020047 0ustar awbusersfestdoc-1.4.2/speech_tools/doc/tex_stuff.jade0100644001741100001440000000000007327541422017723 0ustar awbusersfestdoc-1.4.2/speech_tools/doc/.doc++file_list_made0100644001741100001440000000003507327543044020656 0ustar awbusersWed Jul 25 14:14:58 BST 2001 festdoc-1.4.2/speech_tools/doc/doc++/0040755001741100001440000000000007327543065016004 5ustar awbusersfestdoc-1.4.2/speech_tools/doc/doc++/edcrest.gif0100644001741100001440000000711307262605664020125 0ustar awbusersGIF89aqsU>U,LQQixj&qv8{Z/5???)'&^ S9B97.UH/kkl5PkُQVQ>!SzQ ҳvP...n2obS|Ơf((@!/,qspH,d 0~@ tJZI%K.qQAAzگRL%$hEsvuoB zIQG!%f jEFyG CU _FE np/E,pDFzxF eH vZBkwDL  SD^؃y^3X B0]3,h,@>PػJ@JB0cʜYLA%%AieH` @)&L\I#D%B.h hӪ]l]$dE!e˷ LP*@6#'`**\V\/C,aڽ9 y@i9G֚HLȦMܯ[@>^zSYb!"[7T(1SO<|-[QŸ?2",ЇD_!۸0K)}6RK5ef VPd<k(,/^@o @)DiA~v xP ѱ \fV—_~!E&<@ioQ&p)dSHD!DUwe"L`衈@ 2 ,`.@.@4h # *)ۀC6&5h&JAJB 0i& "ZꝮvrNL{Zl f餕𫵟;R'w{!FRyZҎk @Bګ2 䚚9zIPAQci %{^zo/ hNz"DI8к# l |i rȪA!P/AC[p%]ZרAy`oY -%2 i@ ][$O@T؋PB+`&ca 5(ꮨWP<Н4o>B"ls;v @e; #OyA8?@ 3x_UzԀVOrArDM٠*׼k#>V*,_tm.0X & !x G8( `0± u#88 54ؓ"p` =UC8*e@(SJ h VdAPKB (,x'"S`E+1[B@%)]``"j%-T  J8*NIx%S#0O1rb_j9&tBV˴#W2*Ѐ 9S t HCƵv BUR@Lis4=9:/36^H-U+e:̊fՐ h"_U/$kR0xiLUpP ba]Z5LJw dE@Yy( 3N֟ f+960[T0lS~|!^C[1u5d(}r=nX&[*܄;fٶ[x)a3B;^|paIp^rqMT䲥mX*67Z zTA/3$B l>bT, V4݀*`fuvUlMmqW"R .& iJtwYUFT-܂R:Ϩ>uS$fs0Oջw5`0v]dG lҋB)u 8lMl[bhshAfF-85aF )\`k7{P! 6Er'Yjqysm>^[pyu Ga  j~0B-j}ԜĴNHq0 x ;7Nq'[>9Iv}shTwIPaz5WiO# v5$lb_1^Z]^RliyKۥ^{@6^ݛ_0 ^d4 }~-|NgqJ,_n} ";}37xW~ ly GOm0I kO#O0Lj$s6!l(  [5:kg|p[7.w08BH fp{7BW+eї tW>o(@ nw\0-fU| _e+:FsCVTagw+%W2Uxp)pdrMG;؀WP%S"_{X `h}0PjC2Gϲ _GSag&Y%W _eqrY=EVSvSq6Z{|DyPWP$E>рJS 7j| VUK6|RKzgR(@WI[$ivE$ U}NjXKPlS?Q zXq$jX1eQVjAg>UK0y{KQf)&P$X؍SRf`7(.Ga&vg}bRGOMQ PPKG?uN6$sB>xqAvb[wtp2dqz1(1Uy[q3jH&Fh3 bIN>-cp=hKqB+?9!tI y!0g >p ?~SQۓ*dxGQ!oMP9f^ iܷ mt` n2"sM:,}g7 a@ }0uiqD 9; Z1ӗF N١W$I`GP3% 4j 0T٣WE$@`H4ءA;festdoc-1.4.2/speech_tools/doc/doc++/cstr.gif0100644001741100001440000000132407262605664017445 0ustar awbusersGIF87a|?,|? ؋޼x BgL Ģ1P)ULǦ)<6jUi܊ǽbJl)|fG~`hԇVxuhWRItxy虩6:4!*sPs;s*k3Qgtz z[% C, Y=ʨ\[[NȘ|-E̥Hpvn\;Sw@4Qo8hjc.8XG7BN|$L^i\fGVHZrZI}"m©N%arhϘLK"wXD4*ԈdWD~hlm,[ J0Ybys^>`W.UCJ+0yݧΝ"n&nY&ٗx颾YpŮ~YkrC?H k̯#$6m$x ꛻8U6,SˈG`6ց[늣YkĮ{e].RdίM9ڠw~1TPJ So1*i1y׌ʰ݅PG`(n{#BE0hh\}H*GY*NN)VHسS*&WRv1^iȑ4e@FfctGfҽ gQBg5uQ@ygy'J2l;P;festdoc-1.4.2/speech_tools/doc/doc++/est.jpg0100644001741100001440000001045607262605664017306 0ustar awbusersJFIFICREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 60, Smoothing = 15 C    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( )2((h((h(Ƞ(hy՟cCGd"X's@Er;?_X>AaxoO&X>A`k?O&5_B,@S"a@Eg}yv9ǵ_S@ EPEPEPX>-Ե]7NI4[4(X*[ 43]g]x)ԃQ?X8,pcEQџXT>;Ost?h qn|ytFFFm)~" M?|Vt rhǽUzz[`H 9F"  pGP"PM@5? ^NYVp>g޽79w̭AǾ3Տ*( tPk!qe#?+ƚfEmiwGX\⼋bD)l!R*#C$bD֋"({=\^D9:~Tѭ@Ҧe~\r>ӛg3>=T+ھ }+<+qj7WrG+>Pxs€:-5ٱދ˰َ+Y:(((5-s1SOIN΀t j0BF_IZxz:Eu= NERk<;4 q,CD꺝݃vc {8Hcgo{%9y\rs^M'${{Xө? |k2r>+Դh0<-n>ldO5l[c}SOJ:Q@GZ((iuhY XZNCE2ph^an#3HGp?/#=x&ԼM;J=1&Kc[0oBjx]dXM&ĜV|9K `9ټz& #Q}zy`j|5^}.@I?҆.oBω5)9vCLDy |~g3Vr SV?NG }Mfkn_g k&EFĨ1ZlPfh~ F9`GЏjx|IgĪ0<].}( T6^Qv+N8Zvֹ>{ =~mj9Vr8>vvA4\m .+TAN{W){_ew vv#!RT2A5c&m-I@Q@+85NKiI-Rgp@@{{_{6䏽X8ܓA(s2:Yu)ȍ fBiZiW9gb^TKm'Hι `u :^cAUڿ*:/ GmEҡr^H!럮k06i spobǖ6+Ǝ ndmc*Z^4^W+cM߼p?{lcJGiH-ƼQOaʞfzbv f2ݏZ>U8_.d^du$.WU&*r^OGwn#*ξڼ[Kt+"im.eIm?_j'{u5{+U?<\>.Uwz*c x$b?&Bg$SZGCI9j`WWqjbrZ60n vd?csfz-9=Q{Z}cGex G1Cڹǹ4^RĝE9i8:n]NG. !L㬀c?n3ȁcI&prwMI.[E3*ԈUM1v'D-Ypmd[s֊d@?v>󁚯, 1G3H&m+(g=+r<OZRcq(:0I k]k=;~zӃL8:W"8}+vht"@1Yit If@9;hdbQ('->=+$ۖBpvoZkX>5 +T-"zJ1(yuĵkrנ[a.b -G6~q6lkj~ i? P]^Vqrʧ?ҼS+ $V,A: AqNѤq._ֺX`[! x3-U|ʗ1HtNMi^O֎hQd2&bNk綟XHHd`wM:fG6? l,7o5χ#iFK{ ceöY*hyVN:y [ɦ8*ՄLjuʔm< ]_JOn4j0:{|OqС#d4 u"5EUŒ B/+° DSt D S((festdoc-1.4.2/speech_tools/doc/doc++/est_small.jpg0100644001741100001440000000371707262605664020500 0ustar awbusersJFIFICREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 60, Smoothing = 15 C    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO?d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( LZC%ń<X+o[i77/`@FH vcY+^sEc;5$F6L^(:TM$}Auk4ˋH l\ } Mrwz_ Z8<8m#`ep/ּÚ: ZD$"=2mvE $[APjΙkQqpwyQu?ֹ }b)RK>r@#cvݢ ;GnMoZ$ddFT5Ӟ ͐1_ daAšX  4w↥vXoiX8>{ט|)c+|TmlJJe;:O==MvuZYv44G##0WWwHGa('5KJeED]##0(55C--=(eeq**9RR_!,c@pH,Ā`0p@$Eh8 (08"IRGァ@2YpyCw !"D #$!%E&''!(G ""HDA;festdoc-1.4.2/speech_tools/doc/ClassGraph.class0100644001741100001440000000232507327543061020162 0ustar awbusers-XDEFGL79:ANOPQR     ! " # $ % & ' ( ) * 6. 6/ 65 C1 H? I+ J- K4 S> T, U2 V0 W3()Ljava/applet/AppletContext;()Ljava/awt/Dimension;()Ljava/net/URL;()V(I)V(Ljava/awt/Color;)V*(Ljava/awt/Component;)Ljava/awt/Component;(Ljava/awt/Dimension;)V(Ljava/awt/LayoutManager;)V&(Ljava/lang/String;)Ljava/lang/String;t(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/applet/AppletContext;Ljava/net/URL;)V ClassGraphClassGraph.javaClassGraphPanel ClassLayoutCode ConstantValue ExceptionsLClassGraphPanel;Ljava/lang/String;LocalVariablesNavigatorButton SourceFileaddafterarrowdirbeforeclassesdirgetAppletContextgetDocumentBase getParameterindentinitjava/applet/Appletjava/awt/Colorjava/awt/Componentjava/awt/Containerjava/awt/FlowLayoutpanel preferredSizeresize setBackground setLayout S>M.;x l*L*M*N*:**Y*Y+,-****W*** Y6.;*B8festdoc-1.4.2/speech_tools/doc/gifs.db0100644001741100001440000000640307327543064016347 0ustar awbusers7:\[ -\sum_{i=1}^N(prob(i)*log(prob(i))) \] 4:$Id: EST_Regex.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 48:$Id: EST_THashI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 39:$Id: EST_FeatureFunctionPackage.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 18:$Id: EST_TBox.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 36:$Id: EST_spectrogram.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 34:\[f_{\mbox{Mel}} = 1127 \; log( 1 + \frac{f_{\mbox{Hertz}}}{700} )\] 47:$Id: EST_TKVLI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 25:\[T = D / floor(D/def)\] 23:\[s_{n} = \sum_{i=1}^{P} a_{i}.s_{n-i} + e_{n}\] 8:$Id: EST_THash.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 11:$Id: EST_TBuffer.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 41:$Id: EST_TVectorI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 42:$Id: EST_TSimpleVectorI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 28:\[w_{n} = \left\{ \begin{array}{ll} 0.54 - 0.46 \cos(2\pi n / (N-1)) & \mbox{$0 \leq n \leq N$} \\ 0 & \mbox{otherwise} \end{array} \right. \] 51:$Id: EST_TDequeI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 29:\[c_{k}= a_{k} + \frac{1}{k}\sum_{i=1}^{k-1} i c_{i} a_{k-1}\] 5:$Id: EST_String.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 24:\[y_k = \sum_{t=0}^{n-1} x_t \; \omega_{n}^{kt} \; ; \; k=0...n-1 \] 2:\[\frac{1}{n}\sum_{i=1}^{n}|a_{i} - b_{i}|\] 6:$Id: EST_SingleChannelWave.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 16:$Id: EST_THandle.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 12:\[ W_{i,j} \] 50:$Id: EST_TNamedEnumI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 15:$Id: EST_TTimeIndex.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 10:$Id: EST_ChannelType.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 53:$Id: XML_Parser.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 17:$Id: EST_Handleable.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 43:$Id: EST_TMatrixI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 44:$Id: EST_TSimpleMatrixI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 9:$Id: EST_TrackMap.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 26:\[w_{n} = \left\{ \begin{array}{ll} 1 & \mbox{$0 \leq n \leq N$} \\ 0 & \mbox{otherwise} \end{array} \right. \] 33:\[c_i' = \{ 1 + \frac{L}{2} sin \frac{\Pi i}{L} \} \; c_i\] 35:$Id: EST_misc_sigpr.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 13:$Id: EST_inline_utils.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 32:\[energy=\sqrt{\frac{1}{n}\sum_{i=1}^{n}a_{i}^2}\] 14:$Id: EST_Featured.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 1:$Id: EST_track_aux.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 45:$Id: EST_TListI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 46:$Id: EST_TSortableI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 20:$Id: EST_ServiceTable.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 38:$Id: EST_utterance_xml.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 30:\[\frac{A_{i+1}}{A_{i}} = \frac{i - k_{i}}{1 + k_{i}} \] 37:$Id: EST_utterance_aux.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 31:\[power=\frac{1}{n}\sum_{i=1}^{n}a_{i}^2\] 21:$Id: EST_Server.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 27:\[w_{n} = \left\{ \begin{array}{ll} 0.5 - 0.5 \cos(2\pi n / (N-1)) & \mbox{$0 \leq n \leq N$} \\ 0 & \mbox{otherwise} \end{array} \right. \] 19:$Id: EST_TDeque.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 22:$Id: EST_FringeServer.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 3:\[a_{i+1} - a_{i}\] 49:$Id: EST_TStringHashI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 40:$Id: EST_item_aux.h,v 1.2 2001/04/04 13:11:27 awb Exp $ 52:$Id: EST_TIteratorI.h,v 1.2 2001/04/04 13:11:27 awb Exp $ festdoc-1.4.2/speech_tools/doc/ClassGraphPanel.class0100644001741100001440000000776407327543061021156 0ustar awbusers- J J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s x v t ~ y t t { } w  u z | ()I()Ljava/awt/Dimension;()Ljava/awt/Rectangle;()Ljava/lang/String;()V()Z(I)Ljava/lang/String;(II)I(II)Ljava/lang/String;(II)V(IIII)V(Ljava/awt/Color;)V*(Ljava/awt/Component;)Ljava/awt/Component;(Ljava/awt/Graphics;)V(Ljava/awt/Graphics;II)V*(Ljava/awt/Graphics;IILjava/lang/String;)V(Ljava/awt/LayoutManager;)V(Ljava/lang/Object;)Z'(Ljava/lang/String;)Ljava/lang/Integer;'(Ljava/lang/String;Ljava/lang/String;)Vt(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/applet/AppletContext;Ljava/net/URL;)VB(Ljava/lang/String;Ljava/net/URL;Ljava/applet/AppletContext;ZZII)V#(Ljava/net/URL;Ljava/lang/String;)V,C ClassGraphClassGraph.javaClassGraphPanel ClassLayoutCode ConstantValueD ExceptionsIL LClassLayout;Ljava/awt/Color;Ljava/lang/String;LocalVariablesNavigatorButtonR SourceFileZ[I[Ljava/awt/Button;[Ljava/lang/String;^addafterbeforeblackboundsbuttonsccnt countTokensddirdown downArrowdrawLineequalsfirsth hasMoreTokensheightindentintValuejava/awt/Buttonjava/awt/Colorjava/awt/Componentjava/awt/Containerjava/awt/Dimensionjava/awt/Graphicsjava/awt/Paneljava/awt/Rectanglejava/lang/Exceptionjava/lang/Integerjava/lang/Mathjava/lang/String java/net/URLjava/util/StringTokenizerllayout leftArrowleftmaxlengthmaxmove nextTokenpaint paintLiner rightArrowsetColor setLayoutsize substringupupArrowurlsvalueOfwwidthx|   * *1*G*0Y+!:Y-!:Y,!: Y!: *+)*+E*+&*+%*+ 4<:  C:  B: <B:*&**<BS*%** <BS*4** <F5O:9Y#:W6*&**296*%**29*&**29`l66 /6*)**Y *4**."S*Y*`*2**YZ6@6 8**) 2$W*) 2*4 .*& 29l`h h;  **ű1%, /+dd.+d`.1%, /+dd.+`d.1%,/+`d.+``.1%,/+d`.+``. *1*)2A3d`l66d`C:``C: /x+*Gl`d*Gl`*1`. / +*Gl`*1l`*G`*1l`.*+*G`d*1l`>*+*Gl`d`D /Z+*Gl`*Gl`*1l`.+*Gl`*1l`*G`*1l`.*+*G`d*1l`>^ /U+*1l`*Gl`*1l`.+*Gl`*1l`*Gl`*1`.*+`*Gl`7/N+*1l`*Gl`*1l`.+*Gl`*Gl`*1`.*+`*Gl`7/X+*Gl`*1l`*G`*1l`.+*Gl`*Gl`*1`.*+*G`d*1l`>N/a+*1l`*Gl`*1l`.+*Gl`*Gl`*1`.*+*Gl`*1`-*+`*Gl`7/h+*1l`*Gl`*1l`.+*Gl`*1l`*Gl`*1`.*+*Gl`*1`-*+`*Gl`7w/m+*Gl`d*Gl`*1l`.+*Gl`*1l`*G`*1l`.*+*G`d*1l`>*+*Gl`d`D*G`=9dvj+'?6Q*68d:h=h>*+*&2=*)2(:IH`=*+*%2=***0festdoc-1.4.2/speech_tools/doc/ClassLayout.class0100644001741100001440000000461307327543061020400 0ustar awbusers-egijq 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S fY f] fc ua ub vn w` xT yn zs {Z |s }n ~V n n W \ ] o _ U c ] n n n X n [ n n n()I()Ljava/awt/Dimension;()Ljava/awt/Insets;()Ljava/awt/Point;()Ljava/lang/String;()V(I)Ljava/awt/Component;(I)Ljava/lang/String;(II)I(II)V(Ljava/awt/Component;)V*(Ljava/awt/Container;)Ljava/awt/Dimension;(Ljava/awt/Container;)V,(Ljava/lang/Object;)Ljava/lang/StringBuffer;,(Ljava/lang/String;)Ljava/lang/StringBuffer;(Ljava/lang/String;)V)(Ljava/lang/String;Ljava/awt/Component;)V: ClassGraphClassGraph.javaClassGraphPanel ClassLayoutCode ConstantValue ExceptionsILjava/io/PrintStream;LocalVariablesNavigatorButton SourceFileZaddLayoutComponentappendbottom calcStuffcountComponentsdistancefirst getComponentgrowLeftheightinsetsjava/awt/Componentjava/awt/Containerjava/awt/Dimensionjava/awt/Insetsjava/awt/LayoutManagerjava/awt/Pointjava/io/PrintStreamjava/lang/Mathjava/lang/Objectjava/lang/Stringjava/lang/StringBufferjava/lang/SystemlayoutContainerleftleftmaxlocationmaxminimumLayoutSizemoveoutpreferredLayoutSize preferredSizeprintlnremoveLayoutComponentresizerightrightmaxspacetoStringtopvalueOfwidthxy ynnnzsfYk&***!*+*tdk ^k _k +M+>6*h66V+:':":  10` 10`6 2` 2`6*+*!*+`*h6Y, ,*``,.,``w`kvj+=>]+:':,0*`d*l#`6*!*!*+ *+_k*+&`k *++=>6'+:': >6+:':0*h*h00)":*!d6  6 *!6  ,d*h0d1, `*h11*h*dl`$%Y/-(5rhfestdoc-1.4.2/speech_tools/doc/NavigatorButton.class0100644001741100001440000000343007327543061021257 0ustar awbusers-=STLNO\klmnopqrst ( ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < KG KH `E `F aW cX dV e> f^ gU i^ jX vY wG xC yA zJ {U |? }Z ~D is Interface()Ljava/awt/Font;()Ljava/lang/String;()V(Ljava/awt/Color;)V%(Ljava/awt/Event;Ljava/lang/Object;)Z(Ljava/awt/Font;)V&(Ljava/lang/Object;)Ljava/lang/String;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;,(Ljava/lang/String;)Ljava/lang/StringBuffer;(Ljava/lang/String;)V(Ljava/lang/String;II)VB(Ljava/lang/String;Ljava/net/URL;Ljava/applet/AppletContext;ZZII)V(Ljava/net/URL;)V ClassGraphClassGraph.javaClassGraphPanel ClassLayoutCode ConstantValue ExceptionsFont= HelveticaILjava/applet/AppletContext;Ljava/awt/Color;Ljava/awt/Font;Ljava/io/PrintStream;Ljava/net/URL;LocalVariablesNavigatorButton SourceFileZactionappendblueboldboldFontcontextgetFontgrowLeftindentinit isInterface italicFontjava/applet/AppletContextjava/awt/Buttonjava/awt/Colorjava/awt/Component java/awt/Fontjava/io/PrintStreamjava/lang/Exceptionjava/lang/Stringjava/lang/StringBufferjava/lang/System normalFontoutprintlnsetFont setForeground showDocumentspacetoStringurlvalueOf dV}Z{UgUf^b^i^cXjXuXKIP*+**-*,&**$*** Y ** Y *#*"Y+'% *& **!*$ **!h@P&Y*% _BP0*&**&#W]Mfestdoc-1.4.2/speech_tools/doc/index.html0100644001741100001440000055462707327543061017122 0ustar awbusers Edinburgh Speech Tools Index

    Edinburgh Speech Tools
    V1.1.0 August 1998


    
    

    Table of Contents

    General stuff

    Packages

    Classes

    • EST_Content_Data A class for containing some other (arbitrary) class Not general enough to call itself a run-time type system Is designed to solve the problem of holding user specified information.
    • EST_Contents More contents
    • EST_DMatrix A matrix class for double precision floating point numbers.
    • EST_DVector A vector class for double precision floating point numbers.
    • EST_Discrete A class for managing mapping string names to integers and back again, mainly used for representing alphabets in n-grams and grammars etc.
    • EST_DiscreteProbDistribution A class for representing probability distributions for a set of discrete values.
    • EST_FMatrix A matrix class for floating point numbers.
    • EST_FVector A vector class for floating point numbers.
    • EST_FeatureFunctionPackage Represents a named collection of named functions.
    • EST_FeatureSample A class for containing arbitrary multi-dimensional feature data.
    • EST_Featured A class with the mechanisms needed to give an object features and access them nicely.
    • EST_Features A class for containing feature structures which can hold atomic values (int, float, string) or other feature structures
    • EST_FringeServer A class providing mechanisms to talk to fringe.
    • EST_Handleable Reference Counting Interface.
    • EST_IMatrix A matrix class for integers.
    • EST_Item A class for containing individual linguistic objects such as words or phones.
    • EST_Item_Content A class for containing individual linguistic features and references to relations.
    • EST_Option Provide a high level interface for String String key value lists
    • EST_Pathname Class representing pathnames.
    • EST_Regex A Regular expression class to go with the CSTR EST_String class.
    • EST_Relation Relations are a container class for EST_Items.
    • EST_SCFG A class representing a stochastic context free grammar (SCFG).
    • EST_SCFG_Chart A class for parsing with a probabalistic grammars.
    • EST_SCFG_Chart_Edge An internal class for EST_SCFG_Chart for representing edges in the chart during parsing with SCFGs.
    • EST_SCFG_Rule A stochastic context free grammar rule.
    • EST_SCFG_traintest A class used to train (and test) SCFGs is an extention of EST_SCFG.
    • EST_Server Client-server interface.
    • EST_ServiceTable A global table of known services.
    • EST_SingleChannelWave An alias for wave which can be used to tell the compiler you know it is a simple one channel wave.
    • EST_String A non-copyleft implementation of a string class to use with compilers that aren't GNU C++.
    • EST_StringTrie A string tree index class for indexing arbitrary objects by strings of characters.
    • EST_SuffStats A class for cummulating ``sufficient statistics'' for a set of numbers: sum, count, sum squared.
    • EST_TBox Box for putting things in.
    • EST_TBuffer Extending buffer class.
    • EST_TDeque Double ended queue.
    • EST_THandle A `smart' pointer which does reference counting.
    • EST_TIterator
    • EST_TKVI Templated Key-Value Item.
    • EST_TKVL Templated Key-Value list.
    • EST_TList
    • EST_TMatrix Template Matrix class.
    • EST_TSimpleVector A derived class from <tt>EST_TVector</tt> which is used for containing simple types, such as <tt>float</tt> or <tt>int</tt>
    • EST_Token This class is similar to EST_String but also maintains the original punctuation and whitespace found around the token.
    • EST_TokenStream A class that allows the reading of EST_Tokens from a file stream, pipe or string.
    • EST_Track A class for storing time aligned coefficients.
    • EST_TrackMap Track maps provide a mapping from symbolic track names to the actual position of the information within a track frame.
    • EST_TrieNode An internal class for EST_StringTrie used to hold represent the node in an string index tree.
    • EST_Utterance A class that contains <link linkend="est-item">EST_Items</link> and <link linkend="est-relation">EST_Relations</link> between them.
    • EST_VTCandidate Internal class to EST_Viterbi_Decoder used to a represent a candidate.
    • EST_VTPath Internal class to EST_Viterbi_Decoder used to a represent a link in a path the candidates.
    • EST_VTPoint Internal class to \Ref{EST_Viterbi_Decoder used to a node in the decoder table
    • EST_Val The EST_Val class is a container class, used to store a single item which can be an int, float, string or other user-defined class.
    • EST_Viterbi_Decoder A class that offers a generalised Viterbi decoder.
    • EST_WFST a call representing a weighted finite-state transducer
    • EST_WFST_MultiState an internal class to EST_WFST used in holding multi-states when determinizing and find the intersections of other WFSTs
    • EST_WFST_State an internal class for EST_WFST used to represent a state in a WFST
    • EST_WFST_Transition an internal class for EST_WFST for representing transitions in an WFST
    • EST_Wave A class for storing digital waveforms.
    • EST_Window The EST_Window class provides functions for the creation and use of signal processing windows.
    • EST_bracketed_string This class represents a bracted string used in training of SCFGs.
    • EST_HashFunctions This is just a convinient place to put some useful hash functions
    • EST_Hash_Pair This class is used in hash tables to hold a key value pair.
    • EST_THash An open hash table.
    • EST_TStringHash A specialised hash table for when the key is an EST_String.
    • Safe feature access functions.
    • EST_TVector
    • XML_Parser An actual parser.
    • XML_Parser_Class A Class of parsers, All parsers share callbacks and a list of known public IDs

    Functions

    Variables

    Macros

    Enums, Unions, Structs

    Typedefs

    Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/HIER.html0100644001741100001440000001123107327543061016515 0ustar awbusers EST Class Hierachy

    Edinburgh Speech Tools
    V1.1.0 August 1998


    Hierarchy of Classes

    Alphabetic index


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/HIERjava.html0100644001741100001440000003562707327543061017376 0ustar awbusers EST Class Hierachy

    Edinburgh Speech Tools
    V1.1.0 August 1998


    Hierarchy of classes

    alphabetic index


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/General.html0100644001741100001440000000252707327543064017356 0ustar awbusers General Bits
    oextern const EST_String EST_Token_Default_SingleCharSymbols
    oextern const EST_String EST_Token_Default_PunctuationSymbols
    oextern const EST_String EST_Token_Default_PrePunctuationSymbols

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TKVI.html0100644001741100001440000000333107327543061017260 0ustar awbusers template<class K, class V> class EST_TKVI

    In file ../include/EST_TKVL.h:

    template<class K, class V> class EST_TKVI

    Templated Key-Value Item.

    Documentation

    Templated Key-Value Item. Serves as the items in the list of the EST_TKVL class.

    This class has no child classes.
    Friends:
    ostream& operator << (ostream& s, EST_TKVI<K,V> const &i)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TKVL.html0100644001741100001440000003525407327543061017274 0ustar awbusers template<class K, class V> class EST_TKVL

    In file ../include/EST_TKVL.h:

    template<class K, class V> class EST_TKVL

    Templated Key-Value list.

    Inheritance:


    Public Fields

    [more]static V* default_val
    default value, returned when there is no such entry
    [more]static K* default_key
    default value, returned when there is no such entry

    Public Methods

    [more] Constructor functions

    [more] EST_TKVL ()
    default constructor
    [more] EST_TKVL (const EST_TKVL<K, V> &kv)
    copy constructor

    [more]const int length () const
    number of key value pairs in list
    [more]EST_Litem* head () const
    Return First key value pair in list
    [more]void clear ()
    Empty list
    [more] Access functions.

    [more]const V& val (const K &rkey, bool m=0) const
    return value according to key (const)
    [more]V& val (const K &rkey, bool m=0)
    return value according to key (non-const)
    [more]const V& val (EST_Litem* ptr, bool m=0) const
    return value according to ptr
    [more]V& val (EST_Litem* ptr, bool m=0)
    return value according to ptr
    [more]const V& val_def (const K &rkey, const V &def) const
    value or default
    [more]const K& key (EST_Litem* ptr, int m=1) const
    find key, reference by ptr
    [more]K& key (EST_Litem* ptr, int m=1)
    find key, reference by ptr
    [more]const K& key (const V &v, int m=1) const
    return first matching key, referenced by val
    [more]int change_val (const K &rkey, const V &rval)
    change key-val pair.
    [more]int change_val (EST_Litem* ptr, const V &rval)
    change key-val pair.
    [more]int change_key (EST_Litem* ptr, const K &rkey)
    change name of key pair
    [more]int add_item (const K &rkey, const V &rval, int no_search = 0)
    add key-val pair to list
    [more]int remove_item (const K &rkey, int quiet = 0)
    remove key and val pair from list

    [more]const int present (const K &rkey) const
    Returns true if key is present
    [more]void map (void (*func)(K&, V&))
    apply function to each pair
    [more]EST_TKVL<K, V> & operator = (const EST_TKVL<K, V> &kv)
    full copy of KV list
    [more]EST_TKVL<K, V> & operator += (const EST_TKVL<K, V> &kv)
    add kv after existing list
    [more]EST_TKVL<K, V> operator + (const EST_TKVL<K, V> &kv)
    make new concatenated list

    Public

    [more] Linked list of key-val pairs.


    Documentation

    Templated Key-Value list. Objects of type EST_TKVL contain lists which are accessed by a key of type K, which returns a value of type V.
    o Constructor functions

    o EST_TKVL()
    default constructor

    o EST_TKVL(const EST_TKVL<K, V> &kv)
    copy constructor

    ostatic V* default_val
    default value, returned when there is no such entry

    ostatic K* default_key
    default value, returned when there is no such entry

    o Linked list of key-val pairs.
    Linked list of key-val pairs. Don't use

    oconst int length() const
    number of key value pairs in list

    oEST_Litem* head() const
    Return First key value pair in list

    ovoid clear()
    Empty list

    o Access functions.

    oconst V& val(const K &rkey, bool m=0) const
    return value according to key (const)

    oV& val(const K &rkey, bool m=0)
    return value according to key (non-const)

    oconst V& val(EST_Litem* ptr, bool m=0) const
    return value according to ptr

    oV& val(EST_Litem* ptr, bool m=0)
    return value according to ptr

    oconst V& val_def(const K &rkey, const V &def) const
    value or default

    oconst K& key(EST_Litem* ptr, int m=1) const
    find key, reference by ptr

    oK& key(EST_Litem* ptr, int m=1)
    find key, reference by ptr

    oconst K& key(const V &v, int m=1) const
    return first matching key, referenced by val

    oint change_val(const K &rkey, const V &rval)
    change key-val pair. If no corresponding entry is present, add to end of list.

    oint change_val(EST_Litem* ptr, const V &rval)
    change key-val pair. If no corresponding entry is present, add to end of list.

    oint change_key(EST_Litem* ptr, const K &rkey)
    change name of key pair

    oint add_item(const K &rkey, const V &rval, int no_search = 0)
    add key-val pair to list

    oint remove_item(const K &rkey, int quiet = 0)
    remove key and val pair from list

    oconst int present(const K &rkey) const
    Returns true if key is present

    ovoid map(void (*func)(K&, V&))
    apply function to each pair

    oEST_TKVL<K, V> & operator = (const EST_TKVL<K, V> &kv)
    full copy of KV list

    oEST_TKVL<K, V> & operator += (const EST_TKVL<K, V> &kv)
    add kv after existing list

    oEST_TKVL<K, V> operator + (const EST_TKVL<K, V> &kv)
    make new concatenated list


    Direct child classes:
    EST_Option
    Friends:
    ostream& operator << (ostream& s, EST_TKVL<K,V> const &kv)
    class EST_TIterator< EST_TKVL<K, V>, IPointer, EST_TKVI<K, V> >
    class EST_TStructIterator< EST_TKVL<K, V>, IPointer, EST_TKVI<K, V> >
    class EST_TRwIterator< EST_TKVL<K, V>, IPointer, EST_TKVI<K, V> >
    class EST_TRwStructIterator< EST_TKVL<K, V>, IPointer, EST_TKVI<K, V> >
    class EST_TIterator< EST_TKVL<K, V>, IPointer_k, K >
    class EST_TRwIterator< EST_TKVL<K, V>, IPointer_k, K >

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Option.html0100644001741100001440000003133707327543061017762 0ustar awbusers class EST_Option

    In file ../include/EST_Option.h:

    class EST_Option

    Provide a high level interface for String String key value lists

    Inheritance:


    Public Methods

    [more]void add_prefix (EST_String prefix)
    add prefix to every key
    [more]void remove_prefix (EST_String prefix)
    remove prefix from every key
    [more]EST_read_status load (const EST_String &filename, const EST_String &comment = ";")
    read keyval list from file.
    [more]int override_val (const EST_String rkey, const EST_String rval)
    add to end of list or overwrite.
    [more]int override_fval (const EST_String rkey, const float rval)
    add to end of list or overwrite.
    [more]int override_ival (const EST_String rkey, const int rval)
    add to end of list or overwrite.
    [more]int ival (const EST_String &rkey, int m=1) const
    return value of type int relating to key.
    [more]double dval (const EST_String &rkey, int m=1) const
    return value of type float relating to key.
    [more]float fval (const EST_String &rkey, int m=1) const
    return value of type float relating to key.
    [more]const EST_String& sval (const EST_String &rkey, int m=1) const
    return value of type String relating to key.
    [more]int add_iitem (const EST_String &rkey, const int &rval)
    return value of type String relating to key.


    Inherited from EST_TKVL:

    Public Fields

    ostatic V* default_val
    ostatic K* default_key

    Public Methods

    Constructor functions

    [more] EST_TKVL()
    default constructor
    [more] EST_TKVL(const EST_TKVL<K, V> &kv)
    copy constructor

    oconst int length() const
    oEST_Litem* head() const
    ovoid clear()

    Access functions.

    [more]const V& val(const K &rkey, bool m=0) const
    return value according to key (const)
    [more]V& val(const K &rkey, bool m=0)
    return value according to key (non-const)
    [more]const V& val(EST_Litem* ptr, bool m=0) const
    return value according to ptr
    [more]V& val(EST_Litem* ptr, bool m=0)
    return value according to ptr
    [more]const V& val_def(const K &rkey, const V &def) const
    value or default
    [more]const K& key(EST_Litem* ptr, int m=1) const
    find key, reference by ptr
    [more]K& key(EST_Litem* ptr, int m=1)
    find key, reference by ptr
    [more]const K& key(const V &v, int m=1) const
    return first matching key, referenced by val
    [more]int change_val(const K &rkey, const V &rval)
    change key-val pair.
    [more]int change_val(EST_Litem* ptr, const V &rval)
    change key-val pair.
    [more]int change_key(EST_Litem* ptr, const K &rkey)
    change name of key pair
    [more]int add_item(const K &rkey, const V &rval, int no_search = 0)
    add key-val pair to list
    [more]int remove_item(const K &rkey, int quiet = 0)
    remove key and val pair from list

    oconst int present(const K &rkey) const
    ovoid map(void (*func)(K&, V&))
    oEST_TKVL<K, V> & operator = (const EST_TKVL<K, V> &kv)
    oEST_TKVL<K, V> & operator += (const EST_TKVL<K, V> &kv)
    oEST_TKVL<K, V> operator + (const EST_TKVL<K, V> &kv)

    Public

    o Linked list of key-val pairs.


    Documentation

    Provide a high level interface for String String key value lists
    ovoid add_prefix(EST_String prefix)
    add prefix to every key

    ovoid remove_prefix(EST_String prefix)
    remove prefix from every key

    oEST_read_status load(const EST_String &filename, const EST_String &comment = ";")
    read keyval list from file. The file type is an ascii file with each line representing one key value pair. The first entry in the line defines the key, and the rest, which may contain whitespaces, defins the value. Lines starting with the comment character are ignored.
    Returns:
    returns EST_read_status errors, @see

    oint override_val(const EST_String rkey, const EST_String rval)
    add to end of list or overwrite. If rval is empty, do nothing

    oint override_fval(const EST_String rkey, const float rval)
    add to end of list or overwrite. If rval is empty, do nothing

    oint override_ival(const EST_String rkey, const int rval)
    add to end of list or overwrite. If rval is empty, do nothing

    oint ival(const EST_String &rkey, int m=1) const
    return value of type int relating to key. By default, an error occurs if the key is not present. Use m=0 if to get a dummy value returned if key is not present

    odouble dval(const EST_String &rkey, int m=1) const
    return value of type float relating to key. By default, an error occurs if the key is not present. Use m=0 if to get a dummy value returned if key is not present

    ofloat fval(const EST_String &rkey, int m=1) const
    return value of type float relating to key. By default, an error occurs if the key is not present. Use m=0 if to get a dummy value returned if key is not present

    oconst EST_String& sval(const EST_String &rkey, int m=1) const
    return value of type String relating to key. By default, an error occurs if the key is not present. Use m=0 if to get a dummy value returned if key is not present

    oint add_iitem(const EST_String &rkey, const int &rval)
    return value of type String relating to key. By default, an error occurs if the key is not present. Use m=0 if to get a dummy value returned if key is not present


    This class has no child classes.
    Friends:
    ostream& operator << (ostream& s, const EST_Option &kv)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TList.html0100644001741100001440000004054607327543061017553 0ustar awbusers template<class T> class EST_TList

    In file ../include/EST_TList.h:

    template<class T> class EST_TList


    Inheritance:


    Public Methods

    [more] Constructor functions

    [more] EST_TList ()
    default constructor
    [more] EST_TList (const EST_TList<T> &l)
    copy constructor

    [more] Access functions for reading and writing items.

    [more]T& item (const EST_Litem* p)
    return the value associated with the EST_Litem pointer.
    [more]const T& item (const EST_Litem* p) const
    return a const value associated with the EST_Litem pointer
    [more]T& nth (int n)
    return the Nth value
    [more]const T& nth (int n) const
    return a const Nth value
    [more]const T& first () const
    return const reference to first item in list
    [more]const T& last () const
    return const reference to last item in list
    [more]T& first ()
    return reference to first item in list
    [more]T& last ()
    return reference to last item in list
    [more]const T& operator () (const EST_Litem* ptr) const
    return const reference to item in list pointed to by ptr
    [more]T& operator () (const EST_Litem* ptr)
    return const reference to item in list pointed to by ptr

    [more] Removing items in a list.

    [more]EST_Litem* remove (EST_Litem* ptr)
    remove item pointed to by ptr, return pointer to previous item.
    [more]EST_Litem* remove_nth (int n)
    remove nth item, return pointer to previous item

    [more] Adding items to a list.

    [more]void append (const T &item)
    add item onto end of list
    [more]void prepend (const T &item)
    add item onto start of list
    [more]EST_Litem* insert_after (EST_Litem* ptr, const T &item)
    add item after position given by ptr, return pointer to added item.
    [more]EST_Litem* insert_before (EST_Litem* ptr, const T &item)
    add item before position given by ptr, return pointer to added item.

    [more] Exchange

    [more]void exchange (EST_Litem* a, EST_Litem* b)
    exchange 1
    [more]void exchange (int i, int j)
    exchange 2
    [more]static void exchange_contents (EST_Litem* a, EST_Litem* b)
    exchange 3

    [more] General functions

    [more]EST_TList<T> & operator= (const EST_TList<T> &a)
    make full copy of list
    [more]EST_TList<T> & operator += (const EST_TList<T> &a)
    Add list onto end of existing list
    [more]void clear (void)
    remove all items in list


    Documentation

    A Template doubly linked list class. This class contains doubly linked lists of a type denoted by T. A pointer of type EST_Litem is used to access items in the list. The class supports a variety of ways of adding, removing and accessing items in the list. For examples of how to operate lists, see list_example.

    Iteration through the list is performed using a pointer of type EST_Litem. See Iteration for example code.

    o Constructor functions

    o EST_TList()
    default constructor

    o EST_TList(const EST_TList<T> &l)
    copy constructor

    o Access functions for reading and writing items.
    See EST_TList_Accessing for examples.

    oT& item(const EST_Litem* p)
    return the value associated with the EST_Litem pointer. This has the same functionality as the overloaded () operator.

    oconst T& item(const EST_Litem* p) const
    return a const value associated with the EST_Litem pointer

    oT& nth(int n)
    return the Nth value

    oconst T& nth(int n) const
    return a const Nth value

    oconst T& first() const
    return const reference to first item in list

    oconst T& last() const
    return const reference to last item in list

    oT& first()
    return reference to first item in list
    See Also:
    last

    oT& last()
    return reference to last item in list

    oconst T& operator () (const EST_Litem* ptr) const
    return const reference to item in list pointed to by ptr

    oT& operator () (const EST_Litem* ptr)
    return const reference to item in list pointed to by ptr

    o Removing items in a list.
    more.

    oEST_Litem* remove(EST_Litem* ptr)
    remove item pointed to by ptr, return pointer to previous item. See Removing for example code.

    oEST_Litem* remove_nth(int n)
    remove nth item, return pointer to previous item

    o Adding items to a list.
    In all cases, a complete copy of the item is made and added to the list. See Addition for examples.

    ovoid append(const T &item)
    add item onto end of list

    ovoid prepend(const T &item)
    add item onto start of list

    oEST_Litem* insert_after(EST_Litem* ptr, const T &item)
    add item after position given by ptr, return pointer to added item.

    oEST_Litem* insert_before(EST_Litem* ptr, const T &item)
    add item before position given by ptr, return pointer to added item.

    o Exchange

    ovoid exchange(EST_Litem* a, EST_Litem* b)
    exchange 1

    ovoid exchange(int i, int j)
    exchange 2

    ostatic void exchange_contents(EST_Litem* a, EST_Litem* b)
    exchange 3

    o General functions
    Friends:
    ostream& operator << (ostream &st, EST_TList<T> const &list)

    oEST_TList<T> & operator=(const EST_TList<T> &a)
    make full copy of list

    oEST_TList<T> & operator +=(const EST_TList<T> &a)
    Add list onto end of existing list

    ovoid clear(void)
    remove all items in list


    This class has no child classes.
    Friends:
    class EST_TIterator< EST_TList<T>, IPointer, T >
    class EST_TRwIterator< EST_TList<T>, IPointer, T >

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Token_Default_WhiteSpaceChars.html0100644001741100001440000000304207327543061024323 0ustar awbusers extern const EST_String EST_Token_Default_WhiteSpaceChars

    In file ../include/EST_Token.h:

    extern const EST_String EST_Token_Default_WhiteSpaceChars

    The default whitespace characters

    Documentation

    The default whitespace characters

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Token.html0100644001741100001440000004560607327543061017576 0ustar awbusers class EST_Token

    In file ../include/EST_Token.h:

    class EST_Token

    This class is similar to EST_String but also maintains the original punctuation and whitespace found around the token.

    Public Methods

    [more] EST_Token ()
    [more] EST_Token (const EST_String p)
    [more]void init ()
    [more] Basic access to fields

    [more]void set_token (const EST_String &p)
    set token from a string
    [more]void set_token (const char* p)
    [more]void set_whitespace (const EST_String &p)
    set whitespace of token
    [more]void set_whitespace (const char* p)
    [more]void set_punctuation (const EST_String &p)
    set (post) punctuation of token
    [more]void set_punctuation (const char* p)
    [more]void set_prepunctuation (const EST_String &p)
    set prepunction
    [more]void set_prepunctuation (const char* p)
    [more]const EST_String& whitespace ()
    [more]const EST_String& punctuation ()
    [more]const EST_String& prepunctuation ()
    [more] Access token as a string

    [more]const EST_String& S () const
    Access token as a string
    [more]const EST_String& String () const
    Access token as a string
    [more] operator EST_String () const
    For automatic coercion to EST_String

    [more] Access token as a int
    [more] Access token as a long
    [more] Access token as a float
    [more] Access token as a double

    [more]void set_row (int r)
    [more]void set_col (int c)
    [more]void set_filepos (int c)
    Set file position in original EST_TokenStream
    [more]EST_String lstring ()
    Return lower case version of token name
    [more]EST_String ustring ()
    Return upper case version of token name
    [more]int row (void) const
    Line number in original EST_TokenStream
    [more]int col (void) const
    Line position in original EST_TokenStream
    [more]int filepos (void) const
    file position in original EST_TokenStream
    [more]const EST_String pos_description () const
    A string describing current position, suitable for error messages
    [more]EST_Token& operator = (const EST_Token &a)
    [more]EST_Token& operator = (const EST_String &a)
    [more]int operator == (const EST_String &a)
    [more]int operator != (const EST_String &a)
    [more]int operator == (const char* a)
    [more]int operator != (const char* a)

    Public

    [more]


    Documentation

    This class is similar to EST_String but also maintains the original punctuation and whitespace found around the token.

    EST_Token's primary use is with EST_TokenStream class which allows easy tokenizing of ascii files.

    A token consists of four parts, any of which may be empty: a name, the actual token, preceding whitespace, preceding punctuation, the name and succeeding punctuation.

    o EST_Token()

    o EST_Token(const EST_String p)

    ovoid init()

    o Basic access to fields

    ovoid set_token(const EST_String &p)
    set token from a string

    ovoid set_token(const char* p)

    ovoid set_whitespace(const EST_String &p)
    set whitespace of token

    ovoid set_whitespace(const char* p)

    ovoid set_punctuation(const EST_String &p)
    set (post) punctuation of token

    ovoid set_punctuation(const char* p)

    ovoid set_prepunctuation(const EST_String &p)
    set prepunction

    ovoid set_prepunctuation(const char* p)

    oconst EST_String& whitespace()

    oconst EST_String& punctuation()

    oconst EST_String& prepunctuation()

    o Access token as a string

    oconst EST_String& S() const
    Access token as a string

    oconst EST_String& String() const
    Access token as a string

    o operator EST_String() const
    For automatic coercion to EST_String

    o Access token as a int

    o Access token as a long

    o Access token as a float

    o Access token as a double

    o

    ovoid set_quoted(int q)
    Note that this token was quoted (or not)

    oint quoted() const
    TRUE is token was quoted

    ovoid set_row(int r)

    ovoid set_col(int c)

    ovoid set_filepos(int c)
    Set file position in original EST_TokenStream

    oEST_String lstring()
    Return lower case version of token name

    oEST_String ustring()
    Return upper case version of token name

    oint row(void) const
    Line number in original EST_TokenStream

    oint col(void) const
    Line position in original EST_TokenStream

    oint filepos(void) const
    file position in original EST_TokenStream

    oconst EST_String pos_description() const
    A string describing current position, suitable for error messages

    oEST_Token& operator = (const EST_Token &a)

    oEST_Token& operator = (const EST_String &a)

    oint operator == (const EST_String &a)

    oint operator != (const EST_String &a)

    oint operator == (const char* a)

    oint operator != (const char* a)


    This class has no child classes.
    Friends:
    ostream& operator << (ostream& s, const EST_Token &p)
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): April 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TokenStream.html0100644001741100001440000004322407327543061020744 0ustar awbusers class EST_TokenStream

    In file ../include/EST_Token.h:

    class EST_TokenStream

    A class that allows the reading of EST_Tokens from a file stream, pipe or string.

    Public Methods

    [more] EST_TokenStream ()
    [more] ~EST_TokenStream ()
    will close file if appropriate for type
    [more] stream access functions

    [more]EST_TokenStream& get (EST_Token &t)
    get next token in stream
    [more]EST_Token& get ()
    get next token in stream
    [more] get the next token which must be the argument.
    [more]EST_Token get_upto (const EST_String &s)
    get up to s in stream as a single token
    [more]EST_Token get_upto_eoln (void)
    get up to s in end of line as a single token
    [more]EST_Token& peek (void)
    peek at next token
    [more]int fread (void* buff, int size, int nitems)
    Reading binary data, (don't use peek() immediately beforehand)

    [more] stream initialization functions

    [more]void set_WhiteSpaceChars (const EST_String &ws)
    set which characters are to be treated as whitespace
    [more]void set_SingleCharSymbols (const EST_String &sc)
    set which characters are to be treated as single character symbols
    [more]void set_PunctuationSymbols (const EST_String &ps)
    set which characters are to be treated as (post) punctuation
    [more]void set_PrePunctuationSymbols (const EST_String &ps)
    set which characters are to be treated as (post) punctuation
    [more]void set_quotes (char q, char e)
    set characters to be used as quotes and escape, and set quote mode
    [more]int quoted_mode (void)
    query quote mode

    [more] miscellaneous

    [more]int linenum (void) const
    returns line number of EST_TokenStream
    [more]int eof ()
    end of file
    [more]int eoln ()
    end of line
    [more]int filepos (void) const
    current file position in EST_TokenStream
    [more]int tell (void) const
    tell, synonym for filepos
    [more]int seek (int position)
    seek, reposition file pointer
    [more]int restart (void)
    Reset to start of file/string
    [more]const EST_String pos_description ()
    A string describing current position, suitable for error messages
    [more]const EST_String filename () const
    The originating filename (if there is one)
    [more]FILE* filedescriptor ()
    For the people who *need* the actual description (if possible)
    [more]EST_TokenStream& operator >> (EST_Token &p)
    [more]EST_TokenStream& operator >> (EST_String &p)

    Public

    [more]


    Documentation

    A class that allows the reading of EST_Tokens from a file stream, pipe or string. It automatically tokenizes a file based on user definable whitespace and punctuation.

    The definitions of whitespace and punctuation are user definable. Also support for single character symbols is included. Single character symbols always are treated as individual tokens irrespective of their white space context. Also a quote mode can be used to read uqoted tokens.

    The setting of whitespace, pre and post punctuation, single character symbols and quote mode must be down (immediately) after opening the stream.

    There is no unget but peek provides look ahead of one token.

    Note there is an interesting issue about what to do about the last whitespace in the file. Should it be ignored or should it be attached to a token with a name string of length zero. In unquoted mode the eof() will return TRUE if the next token name is empty (the mythical last token). In quoted mode the last must be returned so eof will not be raised.

    o EST_TokenStream()

    o ~EST_TokenStream()
    will close file if appropriate for type

    o

    oint open(const EST_String &filename)
    open a EST_TokenStream for a file

    oint open(FILE* ofp, int close_when_finished)
    open a EST_TokenStream for an already opened file

    oint open(istream &newis)
    open a EST_TokenStream for an already open istream

    oint open_string(const EST_String &newbuffer)
    open a EST_TokenStream for string rather than a file

    ovoid close(void)
    Close stream

    o stream access functions

    oEST_TokenStream& get(EST_Token &t)
    get next token in stream

    oEST_Token& get()
    get next token in stream

    o get the next token which must be the argument.

    oEST_Token get_upto(const EST_String &s)
    get up to s in stream as a single token

    oEST_Token get_upto_eoln(void)
    get up to s in end of line as a single token

    oEST_Token& peek(void)
    peek at next token

    oint fread(void* buff, int size, int nitems)
    Reading binary data, (don't use peek() immediately beforehand)

    o stream initialization functions

    ovoid set_WhiteSpaceChars(const EST_String &ws)
    set which characters are to be treated as whitespace

    ovoid set_SingleCharSymbols(const EST_String &sc)
    set which characters are to be treated as single character symbols

    ovoid set_PunctuationSymbols(const EST_String &ps)
    set which characters are to be treated as (post) punctuation

    ovoid set_PrePunctuationSymbols(const EST_String &ps)
    set which characters are to be treated as (post) punctuation

    ovoid set_quotes(char q, char e)
    set characters to be used as quotes and escape, and set quote mode

    oint quoted_mode(void)
    query quote mode

    o miscellaneous
    Friends:
    ostream& operator <<(ostream& s, EST_TokenStream &p)

    oint linenum(void) const
    returns line number of EST_TokenStream

    oint eof()
    end of file

    oint eoln()
    end of line

    oint filepos(void) const
    current file position in EST_TokenStream

    oint tell(void) const
    tell, synonym for filepos

    oint seek(int position)
    seek, reposition file pointer

    oint restart(void)
    Reset to start of file/string

    oconst EST_String pos_description()
    A string describing current position, suitable for error messages

    oconst EST_String filename() const
    The originating filename (if there is one)

    oFILE* filedescriptor()
    For the people who *need* the actual description (if possible)

    oEST_TokenStream& operator >>(EST_Token &p)

    oEST_TokenStream& operator >>(EST_String &p)


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): April 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/quote_string.html0100644001741100001440000000345707327543061020524 0ustar awbusers EST_String quote_string

    In file ../include/EST_Token.h:

    EST_String quote_string

    (const EST_String &s,
      const EST_String &quote = "\"",
      const EST_String &escape = "\\",
      int force=0)

    Quote a string with given quotes and escape character

    Documentation

    Quote a string with given quotes and escape character

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TrieNode.html0100644001741100001440000001115007327543061020212 0ustar awbusers class EST_TrieNode

    In file ../include/EST_StringTrie.h:

    class EST_TrieNode

    An internal class for EST_StringTrie used to hold represent the node in an string index tree.

    Public Methods

    [more] EST_TrieNode ()
    [more] EST_TrieNode (const int width)
    [more] ~EST_TrieNode ()
    [more]void* lookup (const unsigned char* key) const
    Find the contents for given string, 0 if no current contents
    [more]void add (const unsigned char* key, void* item)
    add item for key overwriting previous contents
    [more]void copy_into (EST_StringTrie &trie, const EST_String &path) const
    copy all entries in trie node into trie


    Documentation

    An internal class for EST_StringTrie used to hold represent the node in an string index tree.

    This basically represents a 128-branching node (on for each character) plus a contents field for strings ending at this point.

    o EST_TrieNode()

    o EST_TrieNode(const int width)

    o ~EST_TrieNode()

    ovoid* lookup(const unsigned char* key) const
    Find the contents for given string, 0 if no current contents

    ovoid add(const unsigned char* key, void* item)
    add item for key overwriting previous contents

    ovoid copy_into(EST_StringTrie &trie, const EST_String &path) const
    copy all entries in trie node into trie


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): June 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_StringTrie.html0100644001741100001440000001326507327543061020604 0ustar awbusers class EST_StringTrie

    In file ../include/EST_StringTrie.h:

    class EST_StringTrie

    A string tree index class for indexing arbitrary objects by strings of characters.

    Public Methods

    [more] EST_StringTrie ()
    [more] EST_StringTrie (const EST_StringTrie &trie)
    [more] ~EST_StringTrie ()
    [more]void copy (const EST_StringTrie &trie)
    [more]void* lookup (const EST_String &key) const
    Find contents index by key, 0 if there is not contents
    [more]void add (const EST_String &key, void* item)
    Add item indexed by key, overwriting previous contents
    [more]void clear (void (*deletenode)(void* n))
    Delete the tree, apply deletenote function to each contentsDelete the tree
    [more]EST_StringTrie& operator = (const EST_StringTrie &a)


    Documentation

    A string tree index class for indexing arbitrary objects by strings of characters.

    Note this only deals with 7 but characters, and can only hold one item per index key.

    o EST_StringTrie()

    o EST_StringTrie(const EST_StringTrie &trie)

    o ~EST_StringTrie()

    ovoid copy(const EST_StringTrie &trie)

    ovoid* lookup(const EST_String &key) const
    Find contents index by key, 0 if there is not contents

    ovoid add(const EST_String &key, void* item)
    Add item indexed by key, overwriting previous contents

    ovoid clear(void (*deletenode)(void* n))
    Delete the tree, apply deletenote function to each contentsDelete the tree

    oEST_StringTrie& operator = (const EST_StringTrie &a)


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TMatrix.html0100644001741100001440000006224107327543061020100 0ustar awbusers template<class T> class EST_TMatrix

    In file ../include/EST_TMatrix.h:

    template<class T> class EST_TMatrix

    Template Matrix class.

    Inheritance:


    Public Methods

    [more] EST_TMatrix ()
    default constructor
    [more] EST_TMatrix (const EST_TMatrix<T> &m)
    copy constructor
    [more] EST_TMatrix (int rows, int cols)
    "size" constructor
    [more] EST_TMatrix (int rows, int cols, T* memory, int offset=0, int free_when_destroyed=0)
    construct from memory supplied by caller
    [more] ~EST_TMatrix ()
    EST_TMatrix
    [more] access

    [more]int num_rows () const
    return number of rows
    [more]int num_columns () const
    return number of columns
    [more]INLINE const T& a_no_check (int row, int col) const
    const access with no bounds check, care recommend
    [more]INLINE T& a_no_check (int row, int col)
    access with no bounds check, care recommend
    [more]const T& a_check (int row, int col) const
    const element access function
    [more]T& a_check (int row, int col)
    non-const element access function
    [more]const T& operator () (int row, int col) const
    const element access operator
    [more]T& operator () (int row, int col)
    non-const element access operator

    [more]void resize (int rows, int cols, int set=1)
    resize matrix.
    [more]void fill (const T &v)
    fill matrix with value v
    [more]EST_TMatrix& operator= (const EST_TMatrix &s)
    assignment operator
    [more]EST_TMatrix& add_rows (const EST_TMatrix &s)
    The two versions of what might have been operator +=
    [more] Sub-Matrix/Vector Extraction

    [more]void row (EST_TVector<T> &rv, int r, int start_c=0, int len=-1)
    Make the vector rv a window onto row r
    [more]void column (EST_TVector<T> &cv, int c, int start_r=0, int len=-1)
    Make the vector cv a window onto column c
    [more]void sub_matrix (EST_TMatrix<T> &sm, int r=0, int numr=EST_ALL, int c=0, int numc=EST_ALL)
    Make the matrix sm a window into this matrix

    [more] Copy in and out

    [more]void copy_row (int r, T* buf, int offset=0, int num=-1) const
    Copy row r of matrix to buf.
    [more]void copy_row (int r, EST_TVector<T> &t, int offset=0, int num=-1) const
    Copy row <parameter>r</parameter> of matrix to <parameter>buf</parameter>.
    [more]void copy_column (int c, T* buf, int offset=0, int num=-1) const
    Copy column c of matrix to buf.
    [more]void copy_column (int c, EST_TVector<T> &t, int offset=0, int num=-1) const
    Copy column <parameter>c</parameter> of matrix to <parameter>buf</parameter>.
    [more]void set_row (int n, const T* buf, int offset=0, int num=-1)
    Copy buf into row n of matrix.
    [more]void set_column (int n, const T* buf, int offset=0, int num=-1)
    Copy buf into column n of matrix.
    [more]void set_memory (T* buffer, int offset, int rows, int columns, int free_when_destroyed=0)
    For when you absolutely have to have access to the memory

    [more] io

    [more]EST_read_status load (const class EST_String &filename)
    load Matrix from file - Not currently implemented
    [more]EST_write_status save (const class EST_String &filename) const
    save Matrix to file filename

    Protected Fields

    [more]unsigned int p_num_rows
    Visible shape
    [more]unsigned int p_row_step
    How to access the memory

    Protected Methods

    [more]INLINE const T& fast_a_m (int r, int c) const
    quick method for returning x[m][n]
    [more]void set_values (const T* data, int r_step, int c_step, int start_r, int num_r, int start_c, int num_c )
    Get and set values from array
    [more]void copy (const EST_TMatrix<T> &a)
    private resize and copy function.
    [more]void copy_data (const EST_TMatrix<T> &a)
    just copy data, no resizing, no size check
    [more]void just_resize (int new_rows, int new_cols, T** old_vals)
    resize the memory and reset the bounds, but don't set values
    [more]void default_vals ()
    sets data and length to default values (0 in both cases)


    Inherited from EST_TVector:

    Public Fields

    oT* p_memory
    ounsigned int p_num_columns
    ounsigned int p_offset
    ostatic const T* def_val
    ostatic T* error_return

    Public Methods

    oINLINE unsigned int vcell_pos(unsigned int c, unsigned int cs) const
    oINLINE const T& fast_a_v(int c) const
    oconst T* memory() const
    ovoid empty()
    oEST_write_status save(const EST_String &filename)
    oint operator == (const EST_TVector &v) const
    oint operator != (const EST_TVector &v) const
    ovoid copy_section(T* dest, int offset=0, int num=-1) const
    ovoid sub_vector(EST_TVector<T> &sv, int start_c=0, int len=-1)
    ovoid integrity() const


    Documentation

    Template Matrix class.

    This is an extension of the EST_TVector class to two dimensions.

    ounsigned int p_num_rows
    Visible shape

    ounsigned int p_row_step
    How to access the memory

    oINLINE const T& fast_a_m(int r, int c) const
    quick method for returning x[m][n]

    ovoid set_values(const T* data, int r_step, int c_step, int start_r, int num_r, int start_c, int num_c )
    Get and set values from array

    ovoid copy(const EST_TMatrix<T> &a)
    private resize and copy function.

    ovoid copy_data(const EST_TMatrix<T> &a)
    just copy data, no resizing, no size check

    ovoid just_resize(int new_rows, int new_cols, T** old_vals)
    resize the memory and reset the bounds, but don't set values

    ovoid default_vals()
    sets data and length to default values (0 in both cases)

    o EST_TMatrix()
    default constructor

    o EST_TMatrix(const EST_TMatrix<T> &m)
    copy constructor

    o EST_TMatrix(int rows, int cols)
    "size" constructor

    o EST_TMatrix(int rows, int cols, T* memory, int offset=0, int free_when_destroyed=0)
    construct from memory supplied by caller

    o ~EST_TMatrix()
    EST_TMatrix

    o access
    Basic access methods for matrices.

    oint num_rows() const
    return number of rows

    oint num_columns() const
    return number of columns

    oINLINE const T& a_no_check(int row, int col) const
    const access with no bounds check, care recommend

    oINLINE T& a_no_check(int row, int col)
    access with no bounds check, care recommend

    oconst T& a_check(int row, int col) const
    const element access function

    oT& a_check(int row, int col)
    non-const element access function

    oconst T& operator () (int row, int col) const
    const element access operator

    oT& operator () (int row, int col)
    non-const element access operator

    ovoid resize(int rows, int cols, int set=1)
    resize matrix. If set=1, then the current values in the matirx are preserved up to the new size n. If the new size exceeds the old size, the rest of the matrix is filled with the def_val

    ovoid fill(const T &v)
    fill matrix with value v

    oEST_TMatrix& operator=(const EST_TMatrix &s)
    assignment operator

    oEST_TMatrix& add_rows(const EST_TMatrix &s)
    The two versions of what might have been operator +=

    o Sub-Matrix/Vector Extraction
    All of these return matrecies and vectors which share memory with the original, so altering values them alters the original.

    ovoid row(EST_TVector<T> &rv, int r, int start_c=0, int len=-1)
    Make the vector rv a window onto row r

    ovoid column(EST_TVector<T> &cv, int c, int start_r=0, int len=-1)
    Make the vector cv a window onto column c

    ovoid sub_matrix(EST_TMatrix<T> &sm, int r=0, int numr=EST_ALL, int c=0, int numc=EST_ALL)
    Make the matrix sm a window into this matrix

    o Copy in and out
    Copy data between buffers and the matrix.

    ovoid copy_row(int r, T* buf, int offset=0, int num=-1) const
    Copy row r of matrix to buf. buf should be pre-malloced to the correct size.

    ovoid copy_row(int r, EST_TVector<T> &t, int offset=0, int num=-1) const
    Copy row <parameter>r</parameter> of matrix to <parameter>buf</parameter>. <parameter>buf</parameter> should be pre-malloced to the correct size.

    ovoid copy_column(int c, T* buf, int offset=0, int num=-1) const
    Copy column c of matrix to buf. buf should be pre-malloced to the correct size.

    ovoid copy_column(int c, EST_TVector<T> &t, int offset=0, int num=-1) const
    Copy column <parameter>c</parameter> of matrix to <parameter>buf</parameter>. <parameter>buf</parameter> should be pre-malloced to the correct size.

    ovoid set_row(int n, const T* buf, int offset=0, int num=-1)
    Copy buf into row n of matrix.

    ovoid set_column(int n, const T* buf, int offset=0, int num=-1)
    Copy buf into column n of matrix.

    ovoid set_memory(T* buffer, int offset, int rows, int columns, int free_when_destroyed=0)
    For when you absolutely have to have access to the memory

    o io
    Matrix file io.
    Friends:
    ostream& operator << (ostream &st,const EST_TMatrix<T> &a)

    oEST_read_status load(const class EST_String &filename)
    load Matrix from file - Not currently implemented

    oEST_write_status save(const class EST_String &filename) const
    save Matrix to file filename


    This class has no child classes.
    See Also:
    matrix_example
    EST_TVector

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/set.html0100644001741100001440000000352107327543061016564 0ustar awbusers template<class T> extern EST_TVector<T> & set

    In file ../include/EST_TVector.h:

    template<class T> extern EST_TVector<T> & set

    (EST_TVector<T> &v,
      const EST_TList<T> &s)

    assignment operator: fill track with values in list <parameter>s</paramater>

    Documentation

    assignment operator: fill track with values in list <parameter>s</paramater>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Templatevector.html0100644001741100001440000000707307327543061020775 0ustar awbusers Template vector

    Template vector

    o EST_TVector

    This serves as a base class for a vector of type <type>T</type>. This acts as a higher level version of a normal C array as defined as <type>float *x</type> etc.

    The vector can be resized after declaration, access can be with or without bounds checking. Round brackets denote read-only access (for consts) while square brackets are for read-write access. In both cases references are returned.

    The standard operators () and [] should be thought of as having no bounds checking, though they may do so optionally as a compile time option. The methods <method>a_check</method> and <method>a_nocheck</method> provide explicit boundary checking/nonchecking, both const and non-const versions are provided.

    Access through () and [] are guaranteed to be as fast as standard C arrays (assuming a resonable optimizing compiler).

    <programlisting> EST_FVector x(10); int i;

    for (i=0; i < x.length(); ++i) x[i] = sqrt((float)i);

    x.resize(20);

    for (i=10; i < x.length(); ++i) x[i] = sqrt((float)i);

    </programlisting>

    To instantialte a template for a a vector of type {FooBar}

    <programlisting> include "../base_class/EST_TVector.cc"// If you want List to vector convertion (and defined a TList) include "../base_class/EST_Tvectlist.cc" template class EST_TVector<FooBar>; template ostream& operator << (ostream &st, const EST_TVector<FooBar> &v); </programlisting>

    The EST library already has template vector instantiations for <type>int</type>, <type>float</type>, <type>double</type> and <docppRef linkend='EST_String'>. Also types are defined for them in <docppRef linkend='EST_types.h'> as <docppRef linkend='EST_IVector'>, <docppRef linkend='EST_FVector'>, <docppRef linkend='EST_DVector'> and <docppRef linkend='EST_StrVector'> for <type>int</type>s, <type>float</type>s, <type>doubles</type>s and <docppRef linkend='EST_String'>s respectively.

    See Also:
    matrix_example

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TVector.html0100644001741100001440000005305407327543061020100 0ustar awbusers template<class T> class EST_TVector

    In file ../include/EST_TVector.h:

    template<class T> class EST_TVector


    Inheritance:


    Public Fields

    [more]T* p_memory
    Pointer to the start of the vector.
    [more]unsigned int p_num_columns
    Visible shape
    [more]unsigned int p_offset
    How to access the memory
    [more]static const T* def_val
    default value, used for filling matrix after resizing
    [more]static T* error_return
    A reference to this variable is returned if you try and access beyond the bounds of the matrix.

    Public Methods

    [more]INLINE unsigned int vcell_pos (unsigned int c, unsigned int cs) const
    The memory access rule, in one place for easy reference
    [more]INLINE const T& fast_a_v (int c) const
    quick method for returning \(x[n]\)
    [more]void set_values (const T* data, int step, int start_c, int num_c)
    Get and set values from array
    [more]void copy (const EST_TVector<T> &a)
    private copy function, called from all other copying functions
    [more]void copy_data (const EST_TVector<T> &a)
    just copy data, no resizing, no size check
    [more]void just_resize (int new_cols, T** old_vals)
    resize the memory and reset the bounds, but don't set values
    [more]void default_vals ()
    sets data and length to default values (0 in both cases)
    [more] EST_TVector ()
    default constructor
    [more] EST_TVector (const EST_TVector<T> &v)
    copy constructor
    [more] EST_TVector (int n)
    "size" constructor - make vector of size n
    [more] EST_TVector (int, T* memory, int offset=0, int free_when_destroyed=0)
    construct from memory supplied by caller
    [more] ~EST_TVector ()
    destructor
    [more]void resize (int n, int set=1)
    resize vector.
    [more]const T* memory () const
    For when you absolutely have to have access to the memory
    [more] access

    [more]int num_columns () const
    number of items in vector
    [more]int length () const
    number of items in vector
    [more]int n () const
    number of items in vector
    [more]INLINE const T& a_no_check (int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check (int n)
    read/write non-const access operator: without bounds checking
    [more]INLINE const T& a_no_check_1 (int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check_1 (int n)
    read/write non-const access operator: without bounds checking
    [more]const T& a_check (int n) const
    read-only const access operator: with bounds checking
    [more]T& a_check (int n)
    read/write non-const access operator: with bounds checking
    [more]const T& operator () (int n) const
    read-only const access operator: return reference to nth member
    [more]T& operator [] (int n)
    read/write non const access operator: return reference to nth member

    [more]EST_TVector& operator= (const EST_TVector &s)
    assignment operator
    [more]void fill (const T &v)
    Fill entire array will value <parameter>v</parameter>
    [more]void empty ()
    Fill vector with default value
    [more]EST_write_status save (const EST_String &filename)
    Save vector to file <parameter>filename</parameter>
    [more]int operator == (const EST_TVector &v) const
    is true if vectors are equal size and all elements are equal
    [more]int operator != (const EST_TVector &v) const
    is true if vectors are not equal size or a single elements isn't equal
    [more]void copy_section (T* dest, int offset=0, int num=-1) const
    Copy data in and out.
    [more]void sub_vector (EST_TVector<T> &sv, int start_c=0, int len=-1)
    Create a sub vector
    [more]void integrity () const


    Documentation

    oT* p_memory
    Pointer to the start of the vector. The start of allocated memory is p_memory-p_offset.

    ounsigned int p_num_columns
    Visible shape

    ounsigned int p_offset
    How to access the memory

    oINLINE unsigned int vcell_pos(unsigned int c, unsigned int cs) const
    The memory access rule, in one place for easy reference

    oINLINE const T& fast_a_v(int c) const
    quick method for returning \(x[n]\)

    ovoid set_values(const T* data, int step, int start_c, int num_c)
    Get and set values from array

    ovoid copy(const EST_TVector<T> &a)
    private copy function, called from all other copying functions

    ovoid copy_data(const EST_TVector<T> &a)
    just copy data, no resizing, no size check

    ovoid just_resize(int new_cols, T** old_vals)
    resize the memory and reset the bounds, but don't set values

    ovoid default_vals()
    sets data and length to default values (0 in both cases)

    o EST_TVector()
    default constructor

    o EST_TVector(const EST_TVector<T> &v)
    copy constructor

    o EST_TVector(int n)
    "size" constructor - make vector of size n

    o EST_TVector(int, T* memory, int offset=0, int free_when_destroyed=0)
    construct from memory supplied by caller

    o ~EST_TVector()
    destructor

    ostatic const T* def_val
    default value, used for filling matrix after resizing

    ostatic T* error_return
    A reference to this variable is returned if you try and access beyond the bounds of the matrix. The vaue is undefined, but you can check for the reference you get having the same address as this variable to test for an error.

    ovoid resize(int n, int set=1)
    resize vector. If <expr>set=1</expr>, then the current values in the vector are preserved up to the new length <parameter>n</parameter>. If the new length exceeds the old length, the rest of the vector is filled with the <variable>def_val</variable>

    oconst T* memory() const
    For when you absolutely have to have access to the memory

    o access
    Basic access methods for vectors.

    oint num_columns() const
    number of items in vector

    oint length() const
    number of items in vector

    oint n() const
    number of items in vector

    oINLINE const T& a_no_check(int n) const
    read-only const access operator: without bounds checking

    oINLINE T& a_no_check(int n)
    read/write non-const access operator: without bounds checking

    oINLINE const T& a_no_check_1(int n) const
    read-only const access operator: without bounds checking

    oINLINE T& a_no_check_1(int n)
    read/write non-const access operator: without bounds checking

    oconst T& a_check(int n) const
    read-only const access operator: with bounds checking

    oT& a_check(int n)
    read/write non-const access operator: with bounds checking

    oconst T& operator () (int n) const
    read-only const access operator: return reference to nth member

    oT& operator [] (int n)
    read/write non const access operator: return reference to nth member

    oEST_TVector& operator=(const EST_TVector &s)
    assignment operator

    ovoid fill(const T &v)
    Fill entire array will value <parameter>v</parameter>

    ovoid empty()
    Fill vector with default value

    oEST_write_status save(const EST_String &filename)
    Save vector to file <parameter>filename</parameter>

    oint operator == (const EST_TVector &v) const
    is true if vectors are equal size and all elements are equal

    oint operator != (const EST_TVector &v) const
    is true if vectors are not equal size or a single elements isn't equal

    ovoid copy_section(T* dest, int offset=0, int num=-1) const
    Copy data in and out. Subclassed by SimpleVector for speed.

    ovoid sub_vector(EST_TVector<T> &sv, int start_c=0, int len=-1)
    Create a sub vector

    ovoid integrity() const


    Direct child classes:
    EST_TSimpleVector
    EST_TMatrix
    Friends:
    ostream& operator << (ostream &st, const EST_TVector<T> &m)
    class EST_TMatrix<T>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TSimpleVector.html0100644001741100001440000002410107327543061021241 0ustar awbusers template<class T> class EST_TSimpleVector

    In file ../include/EST_TSimpleVector.h:

    template<class T> class EST_TSimpleVector

    A derived class from <tt>EST_TVector</tt> which is used for containing simple types, such as <tt>float</tt> or <tt>int</tt>

    Inheritance:


    Public Methods

    [more] EST_TSimpleVector ()
    default constructor
    [more] EST_TSimpleVector (const EST_TSimpleVector<T> &v)
    copy constructor
    [more] EST_TSimpleVector (int n)
    "size" constructor
    [more]void resize (int n, int set=1)
    resize vector
    [more]EST_TSimpleVector& operator= (const EST_TSimpleVector<T> &s)
    assignment operator
    [more]void zero (void)
    Fill entire array with 0 bits.
    [more]void empty (void)
    Fill vector with default value


    Inherited from EST_TVector:

    Public Fields

    oT* p_memory
    ounsigned int p_num_columns
    ounsigned int p_offset
    ostatic const T* def_val
    ostatic T* error_return

    Public Methods

    oINLINE unsigned int vcell_pos(unsigned int c, unsigned int cs) const
    oINLINE const T& fast_a_v(int c) const
    ovoid set_values(const T* data, int step, int start_c, int num_c)
    ovoid copy(const EST_TVector<T> &a)
    ovoid copy_data(const EST_TVector<T> &a)
    ovoid just_resize(int new_cols, T** old_vals)
    ovoid default_vals()
    oconst T* memory() const

    access

    [more]int num_columns() const
    number of items in vector
    [more]int length() const
    number of items in vector
    [more]int n() const
    number of items in vector
    [more]INLINE const T& a_no_check(int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check(int n)
    read/write non-const access operator: without bounds checking
    [more]INLINE const T& a_no_check_1(int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check_1(int n)
    read/write non-const access operator: without bounds checking
    [more]const T& a_check(int n) const
    read-only const access operator: with bounds checking
    [more]T& a_check(int n)
    read/write non-const access operator: with bounds checking
    [more]const T& operator () (int n) const
    read-only const access operator: return reference to nth member
    [more]T& operator [] (int n)
    read/write non const access operator: return reference to nth member

    ovoid fill(const T &v)
    oEST_write_status save(const EST_String &filename)
    oint operator == (const EST_TVector &v) const
    oint operator != (const EST_TVector &v) const
    ovoid copy_section(T* dest, int offset=0, int num=-1) const
    ovoid sub_vector(EST_TVector<T> &sv, int start_c=0, int len=-1)
    ovoid integrity() const


    Documentation

    A derived class from <tt>EST_TVector</tt> which is used for containing simple types, such as <tt>float</tt> or <tt>int</tt>
    o EST_TSimpleVector()
    default constructor

    o EST_TSimpleVector(const EST_TSimpleVector<T> &v)
    copy constructor

    o EST_TSimpleVector(int n)
    "size" constructor

    ovoid resize(int n, int set=1)
    resize vector

    oEST_TSimpleVector& operator=(const EST_TSimpleVector<T> &s)
    assignment operator

    ovoid zero(void)
    Fill entire array with 0 bits.

    ovoid empty(void)
    Fill vector with default value


    Direct child classes:
    EST_FVector
    EST_DVector

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_FMatrix.html0100644001741100001440000002576407327543061020073 0ustar awbusers class EST_FMatrix

    In file ../include/EST_FMatrix.h:

    class EST_FMatrix

    A matrix class for floating point numbers.

    Inheritance:


    Public Methods

    [more] EST_FMatrix (int m, int n)
    size constructor
    [more] EST_FMatrix (const EST_FMatrix &a)
    copy constructor
    [more] EST_FMatrix (const EST_FMatrix &a, int b)
    CHECK - what does this do???
    [more] EST_FMatrix ()
    default constructor
    [more]EST_write_status save (const EST_String &filename, const EST_String &type = EST_FMatrix::default_file_type )
    Save in file (ascii or binary)
    [more]EST_read_status load (const EST_String &filename)
    Load from file (ascii or binary as defined in file)
    [more]EST_write_status est_save (const EST_String &filename, const EST_String &type)
    Save in file in est format
    [more]EST_read_status est_load (const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)
    [more]void copyin (float** x, int rows, int cols)
    Copy 2-d array x of size rows x cols into matrix
    [more]EST_FMatrix& operator+= (const EST_FMatrix &a)
    Add elements of 2 same sized matrices
    [more]EST_FMatrix& operator-= (const EST_FMatrix &a)
    Subtract elements of 2 same sized matrices
    [more]EST_FMatrix& operator*= (const float f)
    elementwise multiply by scalar
    [more]EST_FMatrix& operator/= (const float f)
    elementwise divide by scalar


    Documentation

    A matrix class for floating point numbers. EST_FMatrix x should be used instead of float **x wherever possible.
    o EST_FMatrix(int m, int n)
    size constructor

    o EST_FMatrix(const EST_FMatrix &a)
    copy constructor

    o EST_FMatrix(const EST_FMatrix &a, int b)
    CHECK - what does this do???

    o EST_FMatrix()
    default constructor

    oEST_write_status save(const EST_String &filename, const EST_String &type = EST_FMatrix::default_file_type )
    Save in file (ascii or binary)

    oEST_read_status load(const EST_String &filename)
    Load from file (ascii or binary as defined in file)

    oEST_write_status est_save(const EST_String &filename, const EST_String &type)
    Save in file in est format

    oEST_read_status est_load(const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)

    ovoid copyin(float** x, int rows, int cols)
    Copy 2-d array x of size rows x cols into matrix

    oEST_FMatrix& operator+=(const EST_FMatrix &a)
    Add elements of 2 same sized matrices

    oEST_FMatrix& operator-=(const EST_FMatrix &a)
    Subtract elements of 2 same sized matrices

    oEST_FMatrix& operator*=(const float f)
    elementwise multiply by scalar

    oEST_FMatrix& operator/=(const float f)
    elementwise divide by scalar


    This class has no child classes.
    Friends:
    EST_FMatrix operator*(const EST_FMatrix &a, const float x)
    EST_FVector operator*(const EST_FMatrix &a, const EST_FVector &v)
    EST_FVector operator*(const EST_FVector &v,const EST_FMatrix &a)
    EST_FMatrix operator*(const EST_FMatrix &a, const EST_FMatrix &b)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_FVector.html0100644001741100001440000003137607327543061020065 0ustar awbusers class EST_FVector

    In file ../include/EST_FMatrix.h:

    class EST_FVector

    A vector class for floating point numbers.

    Inheritance:


    Public Methods

    [more] EST_FVector (int n)
    Size constructor
    [more] EST_FVector (const EST_FVector &a)
    Copy constructor
    [more] EST_FVector ()
    Default constructor
    [more]EST_FVector& operator*= (const EST_FVector &s)
    elementwise multiply
    [more]EST_FVector& operator+= (const EST_FVector &s)
    elementwise add
    [more]EST_FVector& operator*= (const float f)
    elementwise multiply by scalar
    [more]EST_FVector& operator/= (const float f)
    elementwise divide by scalar
    [more]EST_write_status save (const EST_String &filename, const EST_String &type)
    save vector to file <tt> filename</tt>
    [more]EST_read_status load (const EST_String &filename)
    load vector from file <tt> filename</tt>
    [more]EST_read_status est_load (const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)


    Inherited from EST_TSimpleVector:

    Public Methods

    ovoid resize(int n, int set=1)
    oEST_TSimpleVector& operator=(const EST_TSimpleVector<T> &s)
    ovoid zero(void)
    ovoid empty(void)


    Inherited from EST_TVector:

    Public Fields

    oT* p_memory
    ounsigned int p_num_columns
    ounsigned int p_offset
    ostatic const T* def_val
    ostatic T* error_return

    Public Methods

    oINLINE unsigned int vcell_pos(unsigned int c, unsigned int cs) const
    oINLINE const T& fast_a_v(int c) const
    ovoid set_values(const T* data, int step, int start_c, int num_c)
    ovoid copy(const EST_TVector<T> &a)
    ovoid copy_data(const EST_TVector<T> &a)
    ovoid just_resize(int new_cols, T** old_vals)
    ovoid default_vals()
    oconst T* memory() const

    access

    [more]int num_columns() const
    number of items in vector
    [more]int length() const
    number of items in vector
    [more]int n() const
    number of items in vector
    [more]INLINE const T& a_no_check(int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check(int n)
    read/write non-const access operator: without bounds checking
    [more]INLINE const T& a_no_check_1(int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check_1(int n)
    read/write non-const access operator: without bounds checking
    [more]const T& a_check(int n) const
    read-only const access operator: with bounds checking
    [more]T& a_check(int n)
    read/write non-const access operator: with bounds checking
    [more]const T& operator () (int n) const
    read-only const access operator: return reference to nth member
    [more]T& operator [] (int n)
    read/write non const access operator: return reference to nth member

    ovoid fill(const T &v)
    oint operator == (const EST_TVector &v) const
    oint operator != (const EST_TVector &v) const
    ovoid copy_section(T* dest, int offset=0, int num=-1) const
    ovoid sub_vector(EST_TVector<T> &sv, int start_c=0, int len=-1)
    ovoid integrity() const


    Documentation

    A vector class for floating point numbers. EST_FVector x should be used instead of float *x wherever possible.
    o EST_FVector(int n)
    Size constructor

    o EST_FVector(const EST_FVector &a)
    Copy constructor

    o EST_FVector()
    Default constructor

    oEST_FVector& operator*=(const EST_FVector &s)
    elementwise multiply

    oEST_FVector& operator+=(const EST_FVector &s)
    elementwise add

    oEST_FVector& operator*=(const float f)
    elementwise multiply by scalar

    oEST_FVector& operator/=(const float f)
    elementwise divide by scalar

    oEST_write_status save(const EST_String &filename, const EST_String &type)
    save vector to file <tt> filename</tt>

    oEST_read_status load(const EST_String &filename)
    load vector from file <tt> filename</tt>

    oEST_read_status est_load(const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/matrix_max.html0100644001741100001440000000300607327543061020140 0ustar awbusers float matrix_max

    In file ../include/EST_FMatrix.h:

    float matrix_max

    (const EST_FMatrix &a)

    find largest element

    Documentation

    find largest element

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/vector_max.html0100644001741100001440000000300607327543061020136 0ustar awbusers float vector_max

    In file ../include/EST_FMatrix.h:

    float vector_max

    (const EST_FVector &a)

    find largest element

    Documentation

    find largest element

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/inverse.html0100644001741100001440000000303407327543061017443 0ustar awbusers int inverse

    In file ../include/EST_FMatrix.h:

    int inverse

    (const EST_FMatrix &a, EST_FMatrix &inv)

    inverse

    Documentation

    inverse

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pseudo_inverse.html0100644001741100001440000000316507327543061021027 0ustar awbusers int pseudo_inverse

    In file ../include/EST_FMatrix.h:

    int pseudo_inverse

    (const EST_FMatrix &a,
      EST_FMatrix &inv)

    pseudo inverse (for non-square matrices)

    Documentation

    pseudo inverse (for non-square matrices)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/eye.html0100644001741100001440000000305407327543061016554 0ustar awbusers void eye

    In file ../include/EST_FMatrix.h:

    void eye

    (EST_FMatrix &a)

    make already square matris into I without resizing

    Documentation

    make already square matris into I without resizing

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_vector.html0100644001741100001440000000300507327543061021625 0ustar awbusers void make_random_vector

    In file ../include/EST_FMatrix.h:

    void make_random_vector

    (EST_FVector &M, const float scale)

    all elements are randomised

    Documentation

    all elements are randomised

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_matrix.html0100644001741100001440000000300507327543061021627 0ustar awbusers void make_random_matrix

    In file ../include/EST_FMatrix.h:

    void make_random_matrix

    (EST_FMatrix &M, const float scale)

    all elements are randomised

    Documentation

    all elements are randomised

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_diagonal_matrix.html0100644001741100001440000000301407327543061023465 0ustar awbusers void make_random_diagonal_matrix

    In file ../include/EST_FMatrix.h:

    void make_random_diagonal_matrix

    (EST_FMatrix &M,
      const float scale)

    used for variance

    Documentation

    used for variance

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_symmetric_matrix.html0100644001741100001440000000302207327543061023722 0ustar awbusers void make_random_symmetric_matrix

    In file ../include/EST_FMatrix.h:

    void make_random_symmetric_matrix

    (EST_FMatrix &M,
      const float scale)

    used for covariance

    Documentation

    used for covariance

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/add.html0100644001741100001440000000322607327543061016523 0ustar awbusers EST_FVector add

    In file ../include/EST_FMatrix.h:

    EST_FVector add

    (const EST_FVector &a,
      const EST_FVector &b)

    elementwise add

    Documentation

    elementwise add

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/subtract.html0100644001741100001440000000325207327543061017621 0ustar awbusers EST_FVector subtract

    In file ../include/EST_FMatrix.h:

    EST_FVector subtract

    (const EST_FVector &a,
      const EST_FVector &b)

    elementwise subtract

    Documentation

    elementwise subtract

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/symmetrize.html0100644001741100001440000000276607327543061020213 0ustar awbusers void symmetrize

    In file ../include/EST_FMatrix.h:

    void symmetrize

    (EST_FMatrix &a)

    enforce symmetry

    Documentation

    enforce symmetry

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/stack_matrix.html0100644001741100001440000000320307327543061020457 0ustar awbusers void stack_matrix

    In file ../include/EST_FMatrix.h:

    void stack_matrix

    (const EST_FMatrix &M, EST_FVector &v)

    stack columns on top of each other to make a vector

    Documentation

    stack columns on top of each other to make a vector

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/inplace_diagonalise.html0100644001741100001440000000301607327543061021742 0ustar awbusers void inplace_diagonalise

    In file ../include/EST_FMatrix.h:

    void inplace_diagonalise

    (EST_FMatrix &a)

    inplace diagonalise

    Documentation

    inplace diagonalise

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/singular.html0100644001741100001440000000276407327543061017625 0ustar awbusers int singular

    In file ../include/EST_FMatrix.h:

    int singular

    (EST_FMatrix &a)

    not implemented ??

    Documentation

    not implemented ??

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/transpose.html0100644001741100001440000000316607327543061020014 0ustar awbusers void transpose

    In file ../include/EST_FMatrix.h:

    void transpose

    (const EST_FMatrix &a, EST_FMatrix &b)

    exchange rows and columns

    Documentation

    exchange rows and columns

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/diagonalise.html0100644001741100001440000000312707327543061020252 0ustar awbusers EST_FMatrix diagonalise

    In file ../include/EST_FMatrix.h:

    EST_FMatrix diagonalise

    (const EST_FMatrix &a)

    extract leading diagonal as a matrix

    Documentation

    extract leading diagonal as a matrix

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/diagonal.html0100644001741100001440000000312107327543061017543 0ustar awbusers EST_FVector diagonal

    In file ../include/EST_FMatrix.h:

    EST_FVector diagonal

    (const EST_FMatrix &a)

    extract leading diagonal as a vector

    Documentation

    extract leading diagonal as a vector

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sum.html0100644001741100001440000000275607327543061016606 0ustar awbusers float sum

    In file ../include/EST_FMatrix.h:

    float sum

    (const EST_FMatrix &a)

    sum of elements

    Documentation

    sum of elements

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/cov_prod.html0100644001741100001440000000345707327543061017614 0ustar awbusers EST_FMatrix cov_prod

    In file ../include/EST_FMatrix.h:

    EST_FMatrix cov_prod

    (const EST_FVector &v1,
      const EST_FVector &v2)

    matrix product of two vectors (rows = length of first vector, cols = length of second vector)

    Documentation

    matrix product of two vectors (rows = length of first vector, cols = length of second vector)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/polynomial_fit.html0100644001741100001440000000314007327543061021013 0ustar awbusers bool polynomial_fit

    In file ../include/EST_FMatrix.h:

    bool polynomial_fit

    (EST_FVector &x, EST_FVector &y,
      EST_FVector &co_effs, int order)

    least squares fit

    Documentation

    least squares fit

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/polynomial_fit.2.html0100644001741100001440000000327107327543061021160 0ustar awbusers bool polynomial_fit

    In file ../include/EST_FMatrix.h:

    bool polynomial_fit

    (EST_FVector &x, EST_FVector &y,
      EST_FVector &co_effs,
      EST_FVector &weights, int order)

    weighted least squares fit

    Documentation

    weighted least squares fit

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/operator.html0100644001741100001440000000303607327543062017626 0ustar awbusers float operator*

    In file ../include/EST_FMatrix.h:

    float operator*

    (const EST_FVector &v1,
      const EST_FVector &v2)

    vector dot product

    Documentation

    vector dot product

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_DMatrix.html0100644001741100001440000002603307327543062020060 0ustar awbusers class EST_DMatrix

    In file ../include/EST_DMatrix.h:

    class EST_DMatrix

    A matrix class for double precision floating point numbers.

    Inheritance:


    Public Methods

    [more] EST_DMatrix (int m, int n)
    size constructor
    [more] EST_DMatrix (const EST_DMatrix &a)
    copy constructor
    [more] EST_DMatrix (const EST_DMatrix &a, int b)
    CHECK - what does this do???
    [more] EST_DMatrix ()
    default constructor
    [more]EST_write_status save (const EST_String &filename, const EST_String &type = EST_DMatrix::default_file_type)
    Save in file (ascii or binary)
    [more]EST_read_status load (const EST_String &filename)
    Load from file (ascii or binary as defined in file)
    [more]EST_write_status est_save (const EST_String &filename, const EST_String &type)
    Save in file in est format
    [more]EST_read_status est_load (const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)
    [more]void copyin (double** x, int rows, int cols)
    Copy 2-d array x of size rows x cols into matrix
    [more]EST_DMatrix& operator+= (const EST_DMatrix &a)
    Add elements of 2 same sized matrices
    [more]EST_DMatrix& operator-= (const EST_DMatrix &a)
    Subtract elements of 2 same sized matrices
    [more]EST_DMatrix& operator*= (const double f)
    elementwise multiply by scalar
    [more]EST_DMatrix& operator/= (const double f)
    elementwise divide by scalar


    Documentation

    A matrix class for double precision floating point numbers. EST_DMatrix x should be used instead of double **x wherever possible.
    o EST_DMatrix(int m, int n)
    size constructor

    o EST_DMatrix(const EST_DMatrix &a)
    copy constructor

    o EST_DMatrix(const EST_DMatrix &a, int b)
    CHECK - what does this do???

    o EST_DMatrix()
    default constructor

    oEST_write_status save(const EST_String &filename, const EST_String &type = EST_DMatrix::default_file_type)
    Save in file (ascii or binary)

    oEST_read_status load(const EST_String &filename)
    Load from file (ascii or binary as defined in file)

    oEST_write_status est_save(const EST_String &filename, const EST_String &type)
    Save in file in est format

    oEST_read_status est_load(const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)

    ovoid copyin(double** x, int rows, int cols)
    Copy 2-d array x of size rows x cols into matrix

    oEST_DMatrix& operator+=(const EST_DMatrix &a)
    Add elements of 2 same sized matrices

    oEST_DMatrix& operator-=(const EST_DMatrix &a)
    Subtract elements of 2 same sized matrices

    oEST_DMatrix& operator*=(const double f)
    elementwise multiply by scalar

    oEST_DMatrix& operator/=(const double f)
    elementwise divide by scalar


    This class has no child classes.
    Friends:
    EST_DMatrix operator*(const EST_DMatrix &a, const double x)
    EST_DVector operator*(const EST_DMatrix &a, const EST_DVector &v)
    EST_DVector operator*(const EST_DVector &v,const EST_DMatrix &a)
    EST_DMatrix operator*(const EST_DMatrix &a, const EST_DMatrix &b)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_DVector.html0100644001741100001440000003144407327543062020060 0ustar awbusers class EST_DVector

    In file ../include/EST_DMatrix.h:

    class EST_DVector

    A vector class for double precision floating point numbers.

    Inheritance:


    Public Methods

    [more] EST_DVector (int n)
    Size constructor
    [more] EST_DVector (const EST_DVector &a)
    Copy constructor
    [more] EST_DVector ()
    Default constructor
    [more]EST_DVector& operator*= (const EST_DVector &s)
    elementwise multiply
    [more]EST_DVector& operator+= (const EST_DVector &s)
    elementwise add
    [more]EST_DVector& operator*= (const double d)
    elementwise multiply by scalar
    [more]EST_DVector& operator/= (const double d)
    elementwise divide by scalar
    [more]EST_write_status save (const EST_String &filename, const EST_String &type)
    save vector to file <tt> filename</tt>
    [more]EST_read_status load (const EST_String &filename)
    load vector from file <tt> filename</tt>
    [more]EST_read_status est_load (const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)


    Inherited from EST_TSimpleVector:

    Public Methods

    ovoid resize(int n, int set=1)
    oEST_TSimpleVector& operator=(const EST_TSimpleVector<T> &s)
    ovoid zero(void)
    ovoid empty(void)


    Inherited from EST_TVector:

    Public Fields

    oT* p_memory
    ounsigned int p_num_columns
    ounsigned int p_offset
    ostatic const T* def_val
    ostatic T* error_return

    Public Methods

    oINLINE unsigned int vcell_pos(unsigned int c, unsigned int cs) const
    oINLINE const T& fast_a_v(int c) const
    ovoid set_values(const T* data, int step, int start_c, int num_c)
    ovoid copy(const EST_TVector<T> &a)
    ovoid copy_data(const EST_TVector<T> &a)
    ovoid just_resize(int new_cols, T** old_vals)
    ovoid default_vals()
    oconst T* memory() const

    access

    [more]int num_columns() const
    number of items in vector
    [more]int length() const
    number of items in vector
    [more]int n() const
    number of items in vector
    [more]INLINE const T& a_no_check(int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check(int n)
    read/write non-const access operator: without bounds checking
    [more]INLINE const T& a_no_check_1(int n) const
    read-only const access operator: without bounds checking
    [more]INLINE T& a_no_check_1(int n)
    read/write non-const access operator: without bounds checking
    [more]const T& a_check(int n) const
    read-only const access operator: with bounds checking
    [more]T& a_check(int n)
    read/write non-const access operator: with bounds checking
    [more]const T& operator () (int n) const
    read-only const access operator: return reference to nth member
    [more]T& operator [] (int n)
    read/write non const access operator: return reference to nth member

    ovoid fill(const T &v)
    oint operator == (const EST_TVector &v) const
    oint operator != (const EST_TVector &v) const
    ovoid copy_section(T* dest, int offset=0, int num=-1) const
    ovoid sub_vector(EST_TVector<T> &sv, int start_c=0, int len=-1)
    ovoid integrity() const


    Documentation

    A vector class for double precision floating point numbers. EST_DVector x should be used instead of float *x wherever possible.
    o EST_DVector(int n)
    Size constructor

    o EST_DVector(const EST_DVector &a)
    Copy constructor

    o EST_DVector()
    Default constructor

    oEST_DVector& operator*=(const EST_DVector &s)
    elementwise multiply

    oEST_DVector& operator+=(const EST_DVector &s)
    elementwise add

    oEST_DVector& operator*=(const double d)
    elementwise multiply by scalar

    oEST_DVector& operator/=(const double d)
    elementwise divide by scalar

    oEST_write_status save(const EST_String &filename, const EST_String &type)
    save vector to file <tt> filename</tt>

    oEST_read_status load(const EST_String &filename)
    load vector from file <tt> filename</tt>

    oEST_read_status est_load(const EST_String &filename)
    Load from file in est format (binary/ascii defined in file itself)


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/inverse.2.html0100644001741100001440000000303407327543062017604 0ustar awbusers int inverse

    In file ../include/EST_DMatrix.h:

    int inverse

    (const EST_DMatrix &a, EST_DMatrix &inv)

    inverse

    Documentation

    inverse

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pseudo_inverse.2.html0100644001741100001440000000316507327543062021170 0ustar awbusers int pseudo_inverse

    In file ../include/EST_DMatrix.h:

    int pseudo_inverse

    (const EST_DMatrix &a,
      EST_DMatrix &inv)

    pseudo inverse (for non-square matrices)

    Documentation

    pseudo inverse (for non-square matrices)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/someusefulmatrixcreators.html0100644001741100001440000000247307327543062023156 0ustar awbusers some useful matrix creators

    some useful matrix creators

    some useful matrix creatorssome useful matrix creators

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/eye.2.html0100644001741100001440000000305407327543062016715 0ustar awbusers void eye

    In file ../include/EST_DMatrix.h:

    void eye

    (EST_DMatrix &a)

    make already square matris into I without resizing

    Documentation

    make already square matris into I without resizing

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/est_seed.html0100644001741100001440000000316207327543062017566 0ustar awbusers void est_seed

    In file ../include/EST_DMatrix.h:

    void est_seed

    ()

    the user should use est_seed to seed the random number generatorthe user should use est_seed to seed the random number generator

    Documentation

    the user should use est_seed to seed the random number generatorthe user should use est_seed to seed the random number generator

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_vector.2.html0100644001741100001440000000300607327543062021767 0ustar awbusers void make_random_vector

    In file ../include/EST_DMatrix.h:

    void make_random_vector

    (EST_DVector &M, const double scale)

    all elements are randomised

    Documentation

    all elements are randomised

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_matrix.2.html0100644001741100001440000000300607327543062021771 0ustar awbusers void make_random_matrix

    In file ../include/EST_DMatrix.h:

    void make_random_matrix

    (EST_DMatrix &M, const double scale)

    all elements are randomised

    Documentation

    all elements are randomised

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_diagonal_matrix.2.html0100644001741100001440000000301507327543062023627 0ustar awbusers void make_random_diagonal_matrix

    In file ../include/EST_DMatrix.h:

    void make_random_diagonal_matrix

    (EST_DMatrix &M,
      const double scale)

    used for variance

    Documentation

    used for variance

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_random_symmetric_matrix.2.html0100644001741100001440000000302307327543062024064 0ustar awbusers void make_random_symmetric_matrix

    In file ../include/EST_DMatrix.h:

    void make_random_symmetric_matrix

    (EST_DMatrix &M,
      const double scale)

    used for covariance

    Documentation

    used for covariance

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/add.2.html0100644001741100001440000000322607327543062016664 0ustar awbusers EST_DVector add

    In file ../include/EST_DMatrix.h:

    EST_DVector add

    (const EST_DVector &a,
      const EST_DVector &b)

    elementwise add

    Documentation

    elementwise add

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/subtract.2.html0100644001741100001440000000325207327543062017762 0ustar awbusers EST_DVector subtract

    In file ../include/EST_DMatrix.h:

    EST_DVector subtract

    (const EST_DVector &a,
      const EST_DVector &b)

    elementwise subtract

    Documentation

    elementwise subtract

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/symmetrize.2.html0100644001741100001440000000276607327543062020354 0ustar awbusers void symmetrize

    In file ../include/EST_DMatrix.h:

    void symmetrize

    (EST_DMatrix &a)

    enforce symmetry

    Documentation

    enforce symmetry

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/stack_matrix.2.html0100644001741100001440000000320307327543062020620 0ustar awbusers void stack_matrix

    In file ../include/EST_DMatrix.h:

    void stack_matrix

    (const EST_DMatrix &M, EST_DVector &v)

    stack columns on top of each other to make a vector

    Documentation

    stack columns on top of each other to make a vector

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/inplace_diagonalise.2.html0100644001741100001440000000301607327543062022103 0ustar awbusers void inplace_diagonalise

    In file ../include/EST_DMatrix.h:

    void inplace_diagonalise

    (EST_DMatrix &a)

    inplace diagonalise

    Documentation

    inplace diagonalise

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/singular.2.html0100644001741100001440000000276407327543062017766 0ustar awbusers int singular

    In file ../include/EST_DMatrix.h:

    int singular

    (EST_DMatrix &a)

    not implemented ??

    Documentation

    not implemented ??

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/transpose.2.html0100644001741100001440000000316607327543062020155 0ustar awbusers void transpose

    In file ../include/EST_DMatrix.h:

    void transpose

    (const EST_DMatrix &a, EST_DMatrix &b)

    exchange rows and columns

    Documentation

    exchange rows and columns

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/diagonalise.2.html0100644001741100001440000000312707327543062020413 0ustar awbusers EST_DMatrix diagonalise

    In file ../include/EST_DMatrix.h:

    EST_DMatrix diagonalise

    (const EST_DMatrix &a)

    extract leading diagonal as a matrix

    Documentation

    extract leading diagonal as a matrix

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/diagonal.2.html0100644001741100001440000000312107327543062017704 0ustar awbusers EST_DVector diagonal

    In file ../include/EST_DMatrix.h:

    EST_DVector diagonal

    (const EST_DMatrix &a)

    extract leading diagonal as a vector

    Documentation

    extract leading diagonal as a vector

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sum.2.html0100644001741100001440000000276007327543062016742 0ustar awbusers double sum

    In file ../include/EST_DMatrix.h:

    double sum

    (const EST_DMatrix &a)

    sum of elements

    Documentation

    sum of elements

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/cov_prod.2.html0100644001741100001440000000345707327543062017755 0ustar awbusers EST_DMatrix cov_prod

    In file ../include/EST_DMatrix.h:

    EST_DMatrix cov_prod

    (const EST_DVector &v1,
      const EST_DVector &v2)

    matrix product of two vectors (rows = length of first vector, cols = length of second vector)

    Documentation

    matrix product of two vectors (rows = length of first vector, cols = length of second vector)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/polynomial_fit.3.html0100644001741100001440000000314007327543062021155 0ustar awbusers bool polynomial_fit

    In file ../include/EST_DMatrix.h:

    bool polynomial_fit

    (EST_DVector &x, EST_DVector &y,
      EST_DVector &co_effs, int order)

    least squares fit

    Documentation

    least squares fit

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/polynomial_fit.4.html0100644001741100001440000000327107327543062021163 0ustar awbusers bool polynomial_fit

    In file ../include/EST_DMatrix.h:

    bool polynomial_fit

    (EST_DVector &x, EST_DVector &y,
      EST_DVector &co_effs,
      EST_DVector &weights, int order)

    weighted least squares fit

    Documentation

    weighted least squares fit

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/operator.2.html0100644001741100001440000000304007327543062017761 0ustar awbusers double operator*

    In file ../include/EST_DMatrix.h:

    double operator*

    (const EST_DVector &v1,
      const EST_DVector &v2)

    vector dot product

    Documentation

    vector dot product

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_IMatrix.html0100644001741100001440000000755207327543062020072 0ustar awbusers class EST_IMatrix

    In file ../include/EST_IMatrix.h:

    class EST_IMatrix

    A matrix class for integers.

    Inheritance:


    Public Methods

    [more] EST_IMatrix (int m, int n)
    size constructor
    [more] EST_IMatrix (EST_IMatrix &a)
    copy constructor
    [more] EST_IMatrix (EST_IMatrix &a, int b)
    CHECK - what does this do???
    [more] EST_IMatrix ()
    default constructor


    Documentation

    A matrix class for integers. EST_IMatrix x should be used instead of int **x wherever possible.
    o EST_IMatrix(int m, int n)
    size constructor

    o EST_IMatrix(EST_IMatrix &a)
    copy constructor

    o EST_IMatrix(EST_IMatrix &a, int b)
    CHECK - what does this do???

    o EST_IMatrix()
    default constructor


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/matrix_max.2.html0100644001741100001440000000300207327543062020275 0ustar awbusers int matrix_max

    In file ../include/EST_IMatrix.h:

    int matrix_max

    (const EST_IMatrix &a)

    find largest element

    Documentation

    find largest element

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Tiltfunctions.html0100644001741100001440000000764107327543062020646 0ustar awbusers Tilt functions

    Tilt functions

    o default_rfc_params
    Fill op with sensible default parameters for RFC analysis
    o rfc_analysis
    Produce a set of RFC parameterized events given approximate event boundaries and a smoothed F0 contour.
    o tilt_analysis
    Fill op with sensible default parameters for RFC analysis
    o fill_rise_fall_values
    Fill op with sensible default parameters for RFC analysis
    o rfc_synthesis
    Generate an F0 contour given a list RFC events.
    o tilt_synthesis
    Generate an F0 contour given a list Tilt events.
    o tilt_to_rfc
    Convert a single set of local tilt parameters to local RFC parameters.
    o rfc_to_tilt
    Convert a single set of local RFC parameters to local tilt parameters.
    o tilt_to_rfc
    For each tilt events in ev_tilt, produce a set of RFC parameters.
    o rfc_to_tilt
    For each tilt events in ev_rfc, produce a set of Tiltparameters.

    Functions for: <itemizedlist> <listitem><para>Generating RFC and Tilt parameters from F0 contours</para></listitem> <listitem><para>Converting RFC to Tilt parameters and vice-versa</para></listitem> <listitem><para>Synthesizing F0 contours from RFC and Tilt events</para></listitem> </itemizedlist>

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/default_rfc_params.html0100644001741100001440000000305507327543062021615 0ustar awbusers void default_rfc_params

    In file ../include/EST_tilt.h:

    void default_rfc_params

    (EST_Features &op)

    Fill op with sensible default parameters for RFC analysis

    Documentation

    Fill op with sensible default parameters for RFC analysis

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/rfc_analysis.html0100644001741100001440000000527007327543062020452 0ustar awbusers void rfc_analysis

    In file ../include/EST_tilt.h:

    void rfc_analysis

    (EST_Track &fz,
      EST_Relation &event_list,
      EST_Features &op)

    Produce a set of RFC parameterized events given approximate event boundaries and a smoothed F0 contour.

    Documentation

    Produce a set of RFC parameterized events given approximate event boundaries and a smoothed F0 contour. See <xref linkend="ov-rfc-analysis"> for a description of this process.

    Parameters:
    f0 - : Smoothed continuous F0 contour. An error will occur if any unvoiced regions are detected in the contour. Use the function smoooth_pda to smooth and interpolate a normal contour.
    ev_list - : list of events, each containing approximate start and end times of the events. On completion each event in this list will have a set of RFC parameters.
    op - : parameters used to control analysis process.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXwhite.html0100644001741100001440000000266307327543062017372 0ustar awbusers extern EST_Regex RXwhite

    In file ../include/EST_Regex.h:

    extern EST_Regex RXwhite

    White space

    Documentation

    White space

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/tilt_analysis.html0100644001741100001440000000325707327543062020657 0ustar awbusers void tilt_analysis

    In file ../include/EST_tilt.h:

    void tilt_analysis

    (EST_Track &fz,
      EST_Relation &event_list,
      EST_Features &op)

    Fill op with sensible default parameters for RFC analysis

    Documentation

    Fill op with sensible default parameters for RFC analysis

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/fill_rise_fall_values.html0100644001741100001440000000312507327543062022317 0ustar awbusers void fill_rise_fall_values

    In file ../include/EST_tilt.h:

    void fill_rise_fall_values

    (EST_Track &fz, float amp,
      float start_f0)

    Fill op with sensible default parameters for RFC analysis

    Documentation

    Fill op with sensible default parameters for RFC analysis

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/rfc_synthesis.html0100644001741100001440000000425607327543062020663 0ustar awbusers void rfc_synthesis

    In file ../include/EST_tilt.h:

    void rfc_synthesis

    (EST_Track &f0, EST_Relation &ev_list,
      float f_shift, int no_conn)

    Generate an F0 contour given a list RFC events.

    Documentation

    Generate an F0 contour given a list RFC events.

    Parameters:
    f0 - : Generated F0 contour
    ev_list - : list of events, each containing a set of RFC parameters
    f_shift - : frame shift in seconds of the generated contour
    no_conn - : Do not join events with straight lines if set to 1

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/tilt_synthesis.html0100644001741100001440000000451507327543062021063 0ustar awbusers void tilt_synthesis

    In file ../include/EST_tilt.h:

    void tilt_synthesis

    (EST_Track &track,
      EST_Relation &ev_list, float f_shift,
      int no_conn)

    Generate an F0 contour given a list Tilt events.

    Documentation

    Generate an F0 contour given a list Tilt events.

    This function simply calls tilt_to_rfc followed by rfc_synthesis.

    Parameters:
    f0 - : Generated F0 contour
    ev_list - : list of events, each containing a set of Tilt parameters
    f_shift - : frame shift in seconds of the generated contour
    no_conn - : Do not join events with straight lines if set to 1

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/tilt_to_rfc.html0100644001741100001440000000417107327543062020304 0ustar awbusers void tilt_to_rfc

    In file ../include/EST_tilt.h:

    void tilt_to_rfc

    (EST_Features &tilt, EST_Features &rfc)

    Convert a single set of local tilt parameters to local RFC parameters.

    Documentation

    Convert a single set of local tilt parameters to local RFC parameters. <parameter>amp</parameter>

    Parameters:
    tilt - : input tilt paramaters, named <parameter>amp</parameter>, <parameter>dur</parameter> and <parameter>tilt</parameter>
    rfc - : output RFC parameters, name <parameter>rise_amp</parameter>, <parameter>fall_amp</parameter>, <parameter>rise_dur</parameter> and <parameter>fall_dur</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/rfc_to_tilt.html0100644001741100001440000000422107327543062020300 0ustar awbusers void rfc_to_tilt

    In file ../include/EST_tilt.h:

    void rfc_to_tilt

    (EST_Features &rfc, EST_Features &tilt)

    Convert a single set of local RFC parameters to local tilt parameters.

    Documentation

    Convert a single set of local RFC parameters to local tilt parameters. See <xref linkend="ov-rfc-to-tilt"> for a description of how this is performed.

    <parameter>

    Parameters:
    rfc - : input RFC parameters, named <parameter> rise_amp</parameter>, <parameter>fall_amp</parameter>, <parameter>rise_dur</parameter> and<parameter> fall_dur</parameter>
    tilt - : output tilt paramaters, named <parameter>amp</parameter>, <parameter>dur</parameter> and <parameter>tilt</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/tilt_to_rfc.2.html0100644001741100001440000000421207327543062020440 0ustar awbusers void tilt_to_rfc

    In file ../include/EST_tilt.h:

    void tilt_to_rfc

    (EST_Relation &ev_tilt)

    For each tilt events in ev_tilt, produce a set of RFC parameters.

    Documentation

    For each tilt events in ev_tilt, produce a set of RFC parameters. The tilt parameters are stored as the following features in the event:

    <ITEMIZEDLIST MARK="bullet" SPACING="compact"> <LISTITEM>tilt.amp <LISTITEM>tilt.dur <LISTITEM>tilt.tilt </itemizedlist>

    A set of features with the following names are created:

    <ITEMIZEDLIST MARK="bullet" SPACING="compact"> <LISTITEM>rfc.rise_amp</listitem> <LISTITEM>rfc.rise_dur</listitem> <LISTITEM>rfc.fall_amp</listitem> <LISTITEM>rfc.fall_dur</listitem> </itemizedlist>

    The original tilt features are not deleted.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/rfc_to_tilt.2.html0100644001741100001440000000420507327543062020442 0ustar awbusers void rfc_to_tilt

    In file ../include/EST_tilt.h:

    void rfc_to_tilt

    (EST_Relation &ev_rfc)

    For each tilt events in ev_rfc, produce a set of Tiltparameters.

    Documentation

    For each tilt events in ev_rfc, produce a set of Tiltparameters. The RFC parameters are stored as the following features in the event:

    <ITEMIZEDLIST MARK="bullet" SPACING="compact"> <LISTITEM>rfc.rise_amp</listitem> <LISTITEM>rfc.rise_dur</listitem> <LISTITEM>rfc.fall_amp</listitem> <LISTITEM>rfc.fall_dur</listitem> </itemizedlist>

    A set of features with the following names are created:

    <ITEMIZEDLIST MARK="bullet" SPACING="compact"> <LISTITEM>tilt.amp <LISTITEM>tilt.dur <LISTITEM>tilt.tilt </itemizedlist>

    The original RFC features are not deleted.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Track.html0100644001741100001440000015304107327543062017554 0ustar awbusers class EST_Track

    In file ../include/EST_Track.h:

    class EST_Track

    A class for storing time aligned coefficients.

    Inheritance:


    Public Methods

    [more] Constructor and Destructor functions

    [more] EST_Track ()
    Default constructor
    [more] EST_Track (const EST_Track &a)
    Copy constructor
    [more] EST_Track (int num_frames, int num_channels)
    resizing constructor
    [more] EST_Track (int num_frames, EST_StrList &map)
    resizing constructor
    [more] ~EST_Track ()
    default destructor

    [more] Configuring Tracks

    [more]void resize (int num_frames, int num_channels, bool preserve = 1)
    resize the track to have num_frames and num_channels.
    [more]void resize (int num_frames, EST_StrList &map, bool preserve = 1)
    resize the track to have num_frames and num_channels.
    [more]void resize_aux (EST_StrList &map, bool preserve = 1)
    resize the track's auxiliary channels
    [more]void set_num_channels (int n, bool preserve = 1)
    Change the number of channels while keeping the number of frames the same.
    [more]void set_num_frames (int n, bool preserve = 1)
    Change the number of frames while keeping the number of channels the same.
    [more]void set_channel_name (const EST_String &name, int channel)
    set the name of the channel
    [more]void set_aux_channel_name (const EST_String &name, int channel)
    set the name of the auxiliary channel
    [more]void copy_setup (const EST_Track& a)
    copy everything but data

    [more] Global track information

    [more]EST_String name () const
    name of track - redundant use access to features
    [more]void set_name (const EST_String &n)
    set name of track - redundant use access to features

    [more] Functions for sub tracks, channels and frames.

    [more]void frame (EST_FVector &fv, int n, int startf=0, int nf=EST_ALL)
    make fv a window to frame n in the track.
    [more]void channel (EST_FVector &cv, int n, int startf=0, int nf=EST_ALL)
    make fv a window to channel n in the track.
    [more]void channel (EST_FVector &cv, const char* name, int startf=0, int nf=EST_ALL)
    make fv a window to the named channel in the track.
    [more]void sub_track (EST_Track &st, int start_frame, int nframes, const EST_String &start_chan_name, int nchans=EST_ALL)
    make st refer to a portion of the track.
    [more]void sub_track (EST_Track &st, int start_frame, int nframes, const EST_String &start_chan_name, const EST_String &end_chan_name)
    make st refer to a portion of the track.
    [more]void sub_track (EST_Track &st, int start_frame=0, int nframes=EST_ALL, int start_chan=0, int nchans=EST_ALL) const
    make st refer to a portion of the track.make st refer to a portion of the track.
    [more]void copy_sub_track (EST_Track &st, int start_frame=0, int nframes=EST_ALL, int start_chan=0, int nchans=EST_ALL) const
    Copy contiguous portion of track into st.
    [more]void copy_channel_out (int n, float* buf, int offset=0, int num=EST_ALL) const
    copy channel n into pre-allocated buffer buf
    [more]void copy_frame_out (int n, float* buf, int offset=0, int num=EST_ALL) const
    copy frame n into pre-allocated buffer buf
    [more]void copy_frame_out (int n, EST_FVector &f, int offset=0, int num=EST_ALL) const
    copy frame n into EST_FVector
    [more]void copy_channel_in (int n, const float* buf, int offset=0, int num=EST_ALL)
    copy buf into pre-allocated channel n of track
    [more]void copy_channel_in (int c, const EST_Track &from, int from_c, int from_offset=0, int offset=0, int num=EST_ALL)
    copy channel buf into pre-allocated channel n of track
    [more]void copy_frame_in (int n, const float* buf, int offset=0, int num=EST_ALL)
    copy buf into frame n of track
    [more]void copy_frame_in (int n, const EST_FVector &t, int offset=0, int num=EST_ALL)
    copy t into frame n of track
    [more]void copy_frame_in (int i, const EST_Track &from, int from_f, int from_offset=0, int offset=0, int num=EST_ALL)
    copy from into frame n of track

    [more] Channel information

    [more]int channel_position (const char* name, int offset=0) const
    Return the position of channel name if it exists, otherwise return -1
    [more]int channel_position (EST_String name, int offset=0) const
    Return the position of channel name if it exists, otherwise return -1
    [more]bool has_channel (const char* name) const
    Returns true if the track has a channel named name, otherwise false
    [more]bool has_channel (EST_String name) const
    Returns true if the track has a channel named name, otherwise false

    [more] Accessing amplitudes The following functions can be used

    [more]float& a (int i, int c=0)
    return amplitude of frame i, channel c
    [more]float& a_no_check (int i, int c=0)
    return amplitude of frame i, channel c with no bounds checking.
    [more]float& a (int i, const char* name, int offset=0)
    return amplitude of point i, in the channel named name plus offset.
    [more]float& a (float t, int c=0, EST_InterpType interp=it_nearest)
    return amplitude of time t, channel c.
    [more]float& operator() (int i, int c)
    return amplitude of frame i, channel c.
    [more]float& operator() (int i)
    return amplitude of frame i, channel 0.
    [more]float& operator() (float t, int c)
    return amplitude of frame nearest time t, channel c.
    [more]float& operator() (float t)
    return amplitude of frame nearest time t, channel 0.

    [more] Timing

    [more]float& t (int i=0)
    return time position of frame i
    [more]float ms_t (int i) const
    return time of framet i in milli-seconds
    [more]void fill_time (float t, int start =1)
    set frame times to regular intervals of time t
    [more]void fill_time (EST_Track &t)
    fill times with times of other track
    [more]void fill (float v)
    fill all amplitudes with value v
    [more]void sample (float shift)
    resample track at this frame shift, specified in seconds.
    [more]void change_type (float nshift, bool single_break)
    REDO
    [more]float shift () const
    return an estimation of the frame spacing in seconds.
    [more]float start () const
    return time of first value in track
    [more]float end () const
    return time of last value in track

    [more] File i/o functions

    [more]EST_read_status load (const EST_String name, float ishift = 0.0)
    Load a file called name into the track.
    [more]EST_read_status load (EST_TokenStream &ts, float ishift = 0.0)
    Load character data from an already opened tokenstream ts into the track.
    [more]EST_read_status load (const EST_String name, const EST_String type, float ishift = 0.0)
    Load a file called name of format type into the track.
    [more]EST_write_status save (const EST_String name, const EST_String EST_filetype = "")
    Save the track to a file name of format type.
    [more]EST_write_status save (FILE* fp, const EST_String EST_filetype = "")
    Save the track to a already opened file pointerFP and write a file of format type.

    [more] Utility functions

    [more]int empty () const
    returns true if no values are set in the frame
    [more]void set_break (int i)
    set frame i to be a break
    [more]void set_value (int i)
    set frame i to be a value
    [more]int val (int i) const
    return true if frame i is a value
    [more]int track_break (int i) const
    return true if frame i is a break
    [more]int prev_non_break (int i) const
    starting at frame i, return the frame index of the first value frame before i.
    [more]int next_non_break (int i) const
    starting at frame i, return the frame index of the first value frame after i.
    [more]int index (float t) const
    return the frame index nearest time t
    [more]int index_below (float x) const
    return the frame index before time t
    [more]int num_frames () const
    return number of frames in track
    [more]int length () const
    return number of frames in track
    [more]int num_channels () const
    return number of channels in track
    [more]int num_aux_channels () const
    return number of auxiliary channels in track
    [more]void rm_excess_breaks ()
    If the contour has multiple break values between sections containing values, reduce the break sections so that each has a single break only.
    [more]bool equal_space () const
    return true if track has equal (ie.
    [more]bool single_break () const
    return true if track has only single breaks between value sections


    Inherited from EST_Featured:


    Documentation

    A class for storing time aligned coefficients.

    some stuff.

    o Constructor and Destructor functions

    o EST_Track()
    Default constructor

    o EST_Track(const EST_Track &a)
    Copy constructor

    o EST_Track(int num_frames, int num_channels)
    resizing constructor

    o EST_Track(int num_frames, EST_StrList &map)
    resizing constructor

    o ~EST_Track()
    default destructor

    o Configuring Tracks

    ovoid resize(int num_frames, int num_channels, bool preserve = 1)
    resize the track to have num_frames and num_channels. if preserve is set to 1, any existing values in the track are kept, up to the limits imposed by the new number of frames and channels. If the new track size is bigger, new positions are filled with 0

    ovoid resize(int num_frames, EST_StrList &map, bool preserve = 1)
    resize the track to have num_frames and num_channels. if preserve is set to 1, any existing values in the track are kept, up to the limits imposed by the new number of frames and channels. If the new track size is bigger, new positions are filled with 0

    ovoid resize_aux(EST_StrList &map, bool preserve = 1)
    resize the track's auxiliary channels

    ovoid set_num_channels(int n, bool preserve = 1)
    Change the number of channels while keeping the number of frames the same. if preserve is set to 1, any existing values in the track are kept, up to the limits imposed by the new number of frames and channels. If the new track size is bigger, new positions are filled with 0

    ovoid set_num_frames(int n, bool preserve = 1)
    Change the number of frames while keeping the number of channels the same. if preserve is set to 1, any existing values in the track are kept, up to the limits imposed by the new number of frames and channels. If the new track size is bigger, new positions are filled with 0

    ovoid set_channel_name(const EST_String &name, int channel)
    set the name of the channel

    ovoid set_aux_channel_name(const EST_String &name, int channel)
    set the name of the auxiliary channel

    ovoid copy_setup(const EST_Track& a)
    copy everything but data

    o Global track information

    oEST_String name() const
    name of track - redundant use access to features

    ovoid set_name(const EST_String &n)
    set name of track - redundant use access to features

    o Functions for sub tracks, channels and frames.

    ovoid frame(EST_FVector &fv, int n, int startf=0, int nf=EST_ALL)
    make fv a window to frame n in the track.

    ovoid channel(EST_FVector &cv, int n, int startf=0, int nf=EST_ALL)
    make fv a window to channel n in the track.

    ovoid channel(EST_FVector &cv, const char* name, int startf=0, int nf=EST_ALL)
    make fv a window to the named channel in the track.

    ovoid sub_track(EST_Track &st, int start_frame, int nframes, const EST_String &start_chan_name, int nchans=EST_ALL)
    make st refer to a portion of the track. No values are copied - an internal pointer in st is set to the specified portion of the the track. After this, st behaves like a normal track. Its first channel is the same as start_channel and its first frame is the same as start_frame. Any values written into st will changes values in the main track. st cannot be resized.

    Parameters:
    start_frame - first frame at which sub-track starts
    nframes - number of frames to be included in total
    start_channel_name - name of channel at which sub-track starts
    end_channel_name - name of channel at which sub-track stops

    ovoid sub_track(EST_Track &st, int start_frame, int nframes, const EST_String &start_chan_name, const EST_String &end_chan_name)
    make st refer to a portion of the track. No values are copied - an internal pointer in st is set to the specified portion of the the track. After this, st behaves like a normal track. Its first channel is the same as start_channel and its first frame is the same as start_frame. Any values written into st will changes values in the main track. st cannot be resized.

    Parameters:
    start_frame - first frame at which sub-track starts
    nframes - number of frames to be included in total
    start_channel_name - name of channel at which sub-track starts
    end_channel_name - name of channel at which sub-track stops

    ovoid sub_track(EST_Track &st, int start_frame=0, int nframes=EST_ALL, int start_chan=0, int nchans=EST_ALL) const
    make st refer to a portion of the track. (const version) No values are copied - an internal pointer in st is set to the specified portion of the the track. After this, st behaves like a normal track. Its first channel is the same as start_channel and its first frame is the same as start_frame. Any values written into st will changes values in the main track. st cannot be resized.

    make st refer to a portion of the track. No values are copied - an internal pointer in st is set to the specified portion of the the track. After this, st behaves like a normal track. Its first channel is the same as start_channel and its first frame is the same as start_frame. Any values written into st will changes values in the main track. st cannot be resized.

    Parameters:
    start_frame - first frame at which sub-track starts
    nframes - number of frames to be included in total
    start_channel - first channel at which sub-track starts
    nframes - number of channels to be included in total
    start_frame - first frame at which sub-track starts
    nframes - number of frames to be included in total
    start_channel - first channel at which sub-track starts
    nframes - number of channels to be included in total

    ovoid copy_sub_track(EST_Track &st, int start_frame=0, int nframes=EST_ALL, int start_chan=0, int nchans=EST_ALL) const
    Copy contiguous portion of track into st. Unilike the normal sub_track functions, this makes a completely new track. values written into this will not affect the main track and it can be resized.

    Parameters:
    start_frame - first frame at which sub-track starts
    nframes - number of frames to be included in total
    start_channel - first channel at which sub-track starts
    nframes - number of channels to be included in total

    ovoid copy_channel_out(int n, float* buf, int offset=0, int num=EST_ALL) const
    copy channel n into pre-allocated buffer buf

    ovoid copy_frame_out(int n, float* buf, int offset=0, int num=EST_ALL) const
    copy frame n into pre-allocated buffer buf

    ovoid copy_frame_out(int n, EST_FVector &f, int offset=0, int num=EST_ALL) const
    copy frame n into EST_FVector

    ovoid copy_channel_in(int n, const float* buf, int offset=0, int num=EST_ALL)
    copy buf into pre-allocated channel n of track

    ovoid copy_channel_in(int c, const EST_Track &from, int from_c, int from_offset=0, int offset=0, int num=EST_ALL)
    copy channel buf into pre-allocated channel n of track

    ovoid copy_frame_in(int n, const float* buf, int offset=0, int num=EST_ALL)
    copy buf into frame n of track

    ovoid copy_frame_in(int n, const EST_FVector &t, int offset=0, int num=EST_ALL)
    copy t into frame n of track

    ovoid copy_frame_in(int i, const EST_Track &from, int from_f, int from_offset=0, int offset=0, int num=EST_ALL)
    copy from into frame n of track

    o Channel information

    oint channel_position(const char* name, int offset=0) const
    Return the position of channel name if it exists, otherwise return -1

    oint channel_position(EST_String name, int offset=0) const
    Return the position of channel name if it exists, otherwise return -1

    obool has_channel(const char* name) const
    Returns true if the track has a channel named name, otherwise false

    obool has_channel(EST_String name) const
    Returns true if the track has a channel named name, otherwise false

    o Accessing amplitudes The following functions can be used
    to access to amplitude of the track at certain points. Most of these functions can be used for reading or writing to this point, thus

    tr.a(10, 5) = 10.3;

    can be used to set the 10th frame of the 5th channel and

    cout << tr.a(10, 5);

    can be used to print the same information. Most of these functions have a const equivalent for helping the compiler in read only operations.

    ofloat& a(int i, int c=0)
    return amplitude of frame i, channel c

    ofloat& a_no_check(int i, int c=0)
    return amplitude of frame i, channel c with no bounds checking.

    ofloat& a(int i, const char* name, int offset=0)
    return amplitude of point i, in the channel named name plus offset. If you have a track with say channels called F0 and voicing, you can access the 45th frame's F0 as t.a(45, "F0"); If there are 20 cepstral coefficients for each frame, the 5th can be accessed as t.a(45, "cepstrum", 5);

    ofloat& a(float t, int c=0, EST_InterpType interp=it_nearest)
    return amplitude of time t, channel c. This can be used for reading or writing to this point. By default the nearest frame to this time is used. If interp is set to it_linear, linear interpolaion is performed between the two amplitudes of the two frames either side of the time point to give an estimation of what the amplitude would have been at time t. If interp is set to it_linear_nz, interpolation is as above, unless the time requested is off the end of a portion of track in which case the nearest amplitude is returned.

    ofloat& operator() (int i, int c)
    return amplitude of frame i, channel c.

    ofloat& operator() (int i)
    return amplitude of frame i, channel 0.

    ofloat& operator() (float t, int c)
    return amplitude of frame nearest time t, channel c.

    ofloat& operator() (float t)
    return amplitude of frame nearest time t, channel 0.

    o Timing

    ofloat& t(int i=0)
    return time position of frame i

    ofloat ms_t(int i) const
    return time of framet i in milli-seconds

    ovoid fill_time(float t, int start =1)
    set frame times to regular intervals of time t

    ovoid fill_time(EST_Track &t)
    fill times with times of other track

    ovoid fill(float v)
    fill all amplitudes with value v

    ovoid sample(float shift)
    resample track at this frame shift, specified in seconds. This can be used to change a variable frame spaced track into a fixed frame track, or to change the spacing of an existing evenly spaced track.

    ovoid change_type(float nshift, bool single_break)
    REDO

    ofloat shift() const
    return an estimation of the frame spacing in seconds. This returns -1 if the track is not a fixed shift track

    ofloat start() const
    return time of first value in track

    ofloat end() const
    return time of last value in track

    o Auxiliary channels
    Auxiliary information is used to store information that goes along with frames, but which are not amplitudes and hence not appropriate for operations such as interpolation, smoothing etc. The aux() array is an array of EST_Vals which allows points to be int, float or a string.

    The following functions can be used to access to auxiliary track information. Most of these functions can be used for reading or writing to this point, thus

    tr.aux(10, "voicing") = 1;

    can be used to set the 10th frame of the "voicing" channel and

    cout << tr.a(10, "voicing");

    can be used to print the same information. Most of these functions have a const equivalent for helping the compiler in read only operations.

    Auxiliary channels are usually accessed by name rather than numerical index. The names are set using the set_aux_channel_names() function.

    o File i/o functions

    oEST_read_status load(const EST_String name, float ishift = 0.0)
    Load a file called name into the track. The load function attempts to automatically determine which file type is being loaded from the file's header. If no header is found, the function assumes the file is ascii data, with a fixed frame shift, arranged with rows representing frames and columns channels. In this case, the frame shift must be specified as an argument to this function

    oEST_read_status load(EST_TokenStream &ts, float ishift = 0.0)
    Load character data from an already opened tokenstream ts into the track. The load function attempts to automatically determine which file type is being loaded from the file's header. If no header is found, the function assumes the file is ascii data, with a fixed frame shift, arranged with rows representing frames and columns channels. In this case, the frame shift must be specified as an argument to this function

    oEST_read_status load(const EST_String name, const EST_String type, float ishift = 0.0)
    Load a file called name of format type into the track. If no header is found, the function assumes the file is ascii data, with a fixed frame shift, arranged with rows representing frames and columns channels. In this case, the frame shift must be specified as an argument to this function

    oEST_write_status save(const EST_String name, const EST_String EST_filetype = "")
    Save the track to a file name of format type.

    oEST_write_status save(FILE* fp, const EST_String EST_filetype = "")
    Save the track to a already opened file pointerFP and write a file of format type.

    o Utility functions

    oint empty() const
    returns true if no values are set in the frame

    ovoid set_break(int i)
    set frame i to be a break

    ovoid set_value(int i)
    set frame i to be a value

    oint val(int i) const
    return true if frame i is a value

    oint track_break(int i) const
    return true if frame i is a break

    oint prev_non_break(int i) const
    starting at frame i, return the frame index of the first value frame before i. If frame i is a value, return i

    oint next_non_break(int i) const
    starting at frame i, return the frame index of the first value frame after i. If frame i is a value, return i

    oint index(float t) const
    return the frame index nearest time t

    oint index_below(float x) const
    return the frame index before time t

    oint num_frames() const
    return number of frames in track

    oint length() const
    return number of frames in track

    oint num_channels() const
    return number of channels in track

    oint num_aux_channels() const
    return number of auxiliary channels in track

    ovoid rm_excess_breaks()
    If the contour has multiple break values between sections containing values, reduce the break sections so that each has a single break only.

    obool equal_space() const
    return true if track has equal (ie. fixed) frame spacing */

    obool single_break() const
    return true if track has only single breaks between value sections


    This class has no child classes.
    Friends:
    ostream& operator << (ostream& s, const EST_Track &tr)
    class EST_TIterator< EST_Track, IPointer_f, EST_Track >
    class EST_TRwIterator< EST_Track, IPointer_f, EST_Track >

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_track_aux.h.html0100644001741100001440000001216107327543062020714 0ustar awbusers EST_track_aux.h

    EST_track_aux.h

    o abs_error
    Calculate the mean absolute error between the same channel in two tracks.
    o differentiate
    Calculate the simple derivative of a track.
    o rms_error
    Calculate the root mean square error between the same channel in two tracks.
    o rms_error
    Calculate the root mean square error between each channels in two tracks.
    o align_to_track
    Move the start and end variables to the nearest frame
    o align_to_track
    Move the start and end variables to the nearest frame
    o move_to_frame_ends
    Move the start and end variables to the start and end of the nearest frame
    o nearest_boundary
    Index of the frame whose start boundary
    o set_start
    Move the track so that it starts at the indicated time
    o move_start
    Move the track by shift seconds
    o get_time_frame_size
    Return the frame size in seconds based on analysis of current time points.
    o get_frame_size
    Return the frame size in samples based on analysis of current time points.
    o get_order
    How many coefficiants in track (looks for Coef0 and coefN channels)
    o sum_lengths
    Total the length channel values
    o get_start_positions
    Find the start point in the signal of the sections of speech related to each frame
    o Analysis frame position
    o VAL_REGISTER_CLASS_DCLS

    EST_Track Auxiliary functions
    Author:
    Paul Taylor <pault@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/abs_error.html0100644001741100001440000000417507327543062017756 0ustar awbusers float abs_error

    In file ../include/EST_track_aux.h:

    float abs_error

    (EST_Track &a, EST_Track &b, int channel)

    Calculate the mean absolute error between the same channel in two tracks.

    Documentation

    Calculate the mean absolute error between the same channel in two tracks. This is given by

    See Also:
    abs_error, rms_error(EST_Track &a, EST_Track &b)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/differentiate.html0100644001741100001440000000375207327543062020611 0ustar awbusers EST_Track differentiate

    In file ../include/EST_track_aux.h:

    EST_Track differentiate

    (EST_Track &c,
      float samp_int=0.0)

    Calculate the simple derivative of a track.

    Documentation

    Calculate the simple derivative of a track. This is given by

    The values in the resultant track are spaced midway between the values in the input track, resulting in 1 fewer frames in the track. This is a very local estimation of the derivative of the track at a point in time. A smoother value can be obtained using the delta function.
    See Also:
    delta

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/rms_error.html0100644001741100001440000000415007327543062020003 0ustar awbusers float rms_error

    In file ../include/EST_track_aux.h:

    float rms_error

    (EST_Track &a, EST_Track &b, int channel)

    Calculate the root mean square error between the same channel in two tracks.

    Documentation

    Calculate the root mean square error between the same channel in two tracks. The channel is identified by its index.
    See Also:
    abs_error, float rms_error(EST_Track &a, EST_Track &b)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/rms_error.2.html0100644001741100001440000000402407327543062020143 0ustar awbusers EST_FVector rms_error

    In file ../include/EST_track_aux.h:

    EST_FVector rms_error

    (EST_Track &a,
      EST_Track &b)

    Calculate the root mean square error between each channels in two tracks.

    Documentation

    Calculate the root mean square error between each channels in two tracks. For two tracks of M channels, the result is returned as an EST_FVector of size M, with element i representing the rms error for channel i.
    See Also:
    abs_error, rms_error

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/align_to_track.html0100644001741100001440000000324007327543062020750 0ustar awbusers void align_to_track

    In file ../include/EST_track_aux.h:

    void align_to_track

    (EST_Track &tr, float &start,
      float &end)

    Move the start and end variables to the nearest frame

    Documentation

    Move the start and end variables to the nearest frame

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/align_to_track.2.html0100644001741100001440000000333107327543062021111 0ustar awbusers void align_to_track

    In file ../include/EST_track_aux.h:

    void align_to_track

    (EST_Track &tr, int &start,
      int &end, int sample_rate)

    Move the start and end variables to the nearest frame

    Documentation

    Move the start and end variables to the nearest frame

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/move_to_frame_ends.html0100644001741100001440000000344707327543062021634 0ustar awbusers void move_to_frame_ends

    In file ../include/EST_track_aux.h:

    void move_to_frame_ends

    (EST_Track &tr, int &start,
      int &end, int sample_rate,
      float offset=0.0)

    Move the start and end variables to the start and end of the nearest frame

    Documentation

    Move the start and end variables to the start and end of the nearest frame

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/nearest_boundary.html0100644001741100001440000000314607327543062021341 0ustar awbusers int nearest_boundary

    In file ../include/EST_track_aux.h:

    int nearest_boundary

    (EST_Track &tr, float time,
      int sample_rate, float offset=0)

    Index of the frame whose start boundary

    Documentation

    Index of the frame whose start boundary

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/set_start.html0100644001741100001440000000311607327543062020002 0ustar awbusers void set_start

    In file ../include/EST_track_aux.h:

    void set_start

    (EST_Track &tr, float start)

    Move the track so that it starts at the indicated time

    Documentation

    Move the track so that it starts at the indicated time

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/move_start.html0100644001741100001440000000306007327543062020153 0ustar awbusers void move_start

    In file ../include/EST_track_aux.h:

    void move_start

    (EST_Track &tr, float shift)

    Move the track by shift seconds

    Documentation

    Move the track by shift seconds

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_time_frame_size.html0100644001741100001440000000416507327543062022000 0ustar awbusers float get_time_frame_size

    In file ../include/EST_track_aux.h:

    float get_time_frame_size

    (EST_Track &pms, int i,
      int prefer_prev = 0)

    Return the frame size in seconds based on analysis of current time points.

    Documentation

    Return the frame size in seconds based on analysis of current time points. This function basically determines the local frame size (shift) by subtracting the current time point from the next time point. If the prefer_prev flag is set to true, or the index is the last in the track, the size is determined by subtracting the previous time point from the current one.

    This is most commonly used in pitch synchronous analysis to determine the local pitch period.

    See Also:
    get_frame_size

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_frame_size.html0100644001741100001440000000426607327543062020764 0ustar awbusers int get_frame_size

    In file ../include/EST_track_aux.h:

    int get_frame_size

    (EST_Track &pms, int current_pos,
      int sample_rate, int prefer_prev=0)

    Return the frame size in samples based on analysis of current time points.

    Documentation

    Return the frame size in samples based on analysis of current time points. This function basically determines the local frame size (shift) by subtracting the current time point from the next time point. If the prefer_prev flag is set to true, or the index is the last in the track, the size is determined by subtracting the previous time point from the current one.

    This is most commonly used in pitch synchronous analysis to determine the local pitch period.

    See Also:
    get_time_frame_size

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_order.html0100644001741100001440000000342407327543062017746 0ustar awbusers int get_order

    In file ../include/EST_track_aux.h:

    int get_order

    (const EST_Track &t, EST_CoefficientType type,
      int d=0)

    How many coefficiants in track (looks for Coef0 and coefN channels)

    Documentation

    How many coefficiants in track (looks for Coef0 and coefN channels)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sum_lengths.html0100644001741100001440000000320507327543062020321 0ustar awbusers int sum_lengths

    In file ../include/EST_track_aux.h:

    int sum_lengths

    (const EST_Track &t, int sample_rate,
      int start_frame=0, int end_frame=-1)

    Total the length channel values

    Documentation

    Total the length channel values

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_start_positions.html0100644001741100001440000000352307327543062022077 0ustar awbusers void get_start_positions

    In file ../include/EST_track_aux.h:

    void get_start_positions

    (const EST_Track &t,
      int sample_rate,
      EST_TBuffer<int> &pos)

    Find the start point in the signal of the sections of speech related to each frame

    Documentation

    Find the start point in the signal of the sections of speech related to each frame

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Analysisframeposition.html0100644001741100001440000000457407327543062022366 0ustar awbusers Analysis frame position

    Analysis frame position

    o get_frame
    Get the start and end of a given frame (in samples)
    o get_frame
    Get the start and end of a given frame (in seconds)
    o get_frame_o
    Get the start and end of a given frame (in samples)
    o get_frame_o
    Get the start and end of a given frame (in seconds)

    Functions which define which part of a single is associated with a given frame in a track. <p> This is defined here in one place for consistancy. They are inline since they tiend to be used in inner loops.There are two versions, the second for when there are offsets in the track.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_frame.html0100644001741100001440000000352107327543062017723 0ustar awbusers static inline void get_frame

    In file ../include/EST_track_aux.h:

    static inline void get_frame

    (const EST_Track &tr,
      int sample_rate, int f,
      int &start, int &center,
      int &end)

    Get the start and end of a given frame (in samples)

    Documentation

    Get the start and end of a given frame (in samples)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_frame.2.html0100644001741100001440000000354007327543062020064 0ustar awbusers static inline void get_frame

    In file ../include/EST_track_aux.h:

    static inline void get_frame

    (const EST_Track &tr,
      int sample_rate, int f,
      float &start,
      float &center,
      float &end)

    Get the start and end of a given frame (in seconds)

    Documentation

    Get the start and end of a given frame (in seconds)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_frame_o.html0100644001741100001440000000353607327543062020247 0ustar awbusers static inline void get_frame_o

    In file ../include/EST_track_aux.h:

    static inline void get_frame_o

    (const EST_Track &tr,
      int sample_rate, int f,
      int &start,
      int &center,
      int &end)

    Get the start and end of a given frame (in samples)

    Documentation

    Get the start and end of a given frame (in samples)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/get_frame_o.2.html0100644001741100001440000000354407327543062020406 0ustar awbusers static inline void get_frame_o

    In file ../include/EST_track_aux.h:

    static inline void get_frame_o

    (const EST_Track &tr,
      int sample_rate, int f,
      float &start,
      float &center,
      float &end)

    Get the start and end of a given frame (in seconds)

    Documentation

    Get the start and end of a given frame (in seconds)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Regex.html0100644001741100001440000006452407327543062017571 0ustar awbusers class EST_Regex

    In file ../include/EST_Regex.h:

    class EST_Regex

    A Regular expression class to go with the CSTR EST_String class.

    Inheritance:


    Public Methods

    [more] EST_Regex (void)
    Empty constructor, just for form
    [more] EST_Regex (EST_String s)
    Construct from EST_String
    [more] EST_Regex (const char* ex)
    Construct from C string
    [more] EST_Regex (const EST_Regex &ex)
    Copy constructor
    [more] ~EST_Regex ()
    Destructor
    [more]int size () const
    Size of the expression
    [more]int run (const char* on, int from, int &start, int &end, int* starts=NULL, int* ends=NULL)
    Run to find a matching substring
    [more]int run_match (const char* on, int from=0, int* starts=NULL, int* ends=NULL)
    Run to see if it matches the entire string
    [more]EST_String tostring (void) const
    Get the expression as a string
    [more] operator const char * () const
    Cast operator, disambiguates it for some compilers
    [more] Assignment

    [more]EST_Regex& operator = (const EST_Regex ex)
    [more]EST_Regex& operator = (const EST_String s)
    [more]EST_Regex& operator = (const char* s)

    Protected Methods

    [more]void compile ()
    Compile expression
    [more]void compile_match ()
    Compile expression in a form which only matches whole string
    [more]char* regularize (int match) const
    Translate the expression into the internally used syntax


    Inherited from EST_String:

    Public Fields

    ostatic const char* version
    ostatic const EST_String Empty

    Split a string into parts.

    [more]int max

    Public Methods

    oint length(void) const
    oint space(void) const
    oconst char* str(void) const
    ochar* updatable_str(void)
    ostatic EST_String FromChar(const char c)
    ostatic EST_String Number(int i, int base=10)
    ostatic EST_String Number(long i, int base=10)
    ostatic EST_String Number(double d)
    ostatic EST_String Number(float f)
    oint Int(bool &ok) const
    olong Long(bool &ok) const
    ofloat Float(bool &ok) const
    odouble Double(bool &ok) const

    Before

    [more]EST_String before(int pos, int len=0) const
    Part before position
    [more]EST_String before(const char* s, int pos=0) const
    Part before first matching substring after pos
    [more]EST_String before(const EST_String &s, int pos=0) const
    Part before first matching substring after pos
    [more]EST_String before(EST_Regex &e, int pos=0) const
    Part before first match of regexp after pos

    At

    [more]EST_String at(int from, int len=0) const
    Return part at position
    [more]EST_String at(const char* s, int pos=0) const
    Return part where substring found (not useful, included for completeness)
    [more]EST_String at(const EST_String &s, int pos=0) const
    Return part where substring found (not useful, included for completeness)
    [more]EST_String at(EST_Regex &e, int pos=0) const
    Return part matching regexp

    After

    [more]EST_String after(int pos, int len=1) const
    Part after pos+len
    [more]EST_String after(const char* s, int pos=0) const
    Part after substring
    [more]EST_String after(const EST_String &s, int pos=0) const
    Part after substring
    [more]EST_String after(EST_Regex &e, int pos=0) const
    Part after match of regular expression

    Search for something

    [more]int search(const char* s, int len, int &mlen, int pos=0) const
    Find a substring
    [more]int search(const EST_String s, int &mlen, int pos=0) const
    Find a substring
    [more]int search(EST_Regex &re, int &mlen, int pos=0, int* starts=NULL, int* ends=NULL) const
    Find a match of the regular expression

    Get position of something

    [more]int index(const char* s, int pos=0) const
    Position of substring (starting at pos)
    [more]int index(const EST_String &s, int pos=0) const
    Position of substring (starting at pos)
    [more]int index(EST_Regex &ex, int pos=0) const
    Position of match of regexp (starting at pos)

    Does string contain something?

    [more]int contains(const char* s, int pos=-1) const
    Does it contain this substring?
    [more]int contains(const EST_String &s, int pos=-1) const
    Does it contain this substring?
    [more]int contains(const char c, int pos=-1) const
    Does it contain this character?
    [more]int contains(EST_Regex &ex, int pos=-1) const
    Does it contain a match for this regular expression?

    Does string exactly match?

    [more]int matches(const char* e, int pos=0) const
    Exatly match this string?
    [more]int matches(const EST_String &e, int pos=0) const
    Exatly match this string?
    [more]int matches(EST_Regex &e, int pos=0, int* starts=NULL, int* ends=NULL) const
    Exactly matches this regular expression, can return ends of sub-expressions

    Global replacement

    [more]int gsub(const char* os, const EST_String &s)
    Substitute one string for another
    [more]int gsub(const char* os, const char* s)
    Substitute one string for another
    [more]int gsub(const EST_String &os, const EST_String &s)
    Substitute one string for another
    [more]int gsub(const EST_String &os, const char* s)
    Substitute one string for another
    [more]int gsub(EST_Regex &ex, const EST_String &s)
    Substitute string for matches of regular expression
    [more]int gsub(EST_Regex &ex, const char* s)
    Substitute string for matches of regular expression
    [more]int gsub(EST_Regex &ex, int bracket_num)
    Substitute string for matches of regular expression
    [more]int subst(EST_String source, int (&starts)[EST_Regex_max_subexpressions], int (&ends)[EST_Regex_max_subexpressions])
    Substitute the result of a match into a string

    Frequency counts

    [more]int freq(const char* s) const
    Number of occurances of substring
    [more]int freq(const EST_String &s) const
    Number of occurances of substring
    [more]int freq(EST_Regex &s) const
    Number of matches of regular expression

    Quoting

    [more]EST_String quote(const char quotec) const
    Return the string in quotes with internal quotes protected
    [more]EST_String quote_if_needed(const char quotec) const
    Return in quotes if there is something to protect (eg.
    [more]EST_String unquote(const char quotec) const
    Remove quotes and unprotect internal quotes
    [more]EST_String unquote_if_needed(const char quotec) const
    Remove quotes if any

    Operators

    [more]const char operator () (int i) const
    Function style access to constant strings
    [more]char& operator [] (int i)
    Array style access to writable strings
    [more] operator const char*() const
    Cast to const char * by simply giving access to pointer
    [more] operator char*()
    Cast to char *, may involve copying
    [more] Add to end of string.

    [more]EST_String& operator += (const char* b)
    Add C string to end of EST_String
    [more]EST_String& operator += (const EST_String b)
    Add EST_String to end of EST_String

    [more] Asignment

    [more]EST_String& operator = (const char* str)
    Assign C string to EST_String
    [more]EST_String& operator = (const char c)
    Assign single character to EST_String
    [more]EST_String& operator = (const EST_String &s)
    Assign EST_String to EST_String

    [more] Concatenation
    [more] relational operators

    [more]return b
    [more] return(a==b)
    [more]return compare(a, b)

    String comparison.

    [more]return compare(b, a)
    [more] Case folded comparison.

    [more]const EST_String& table return fcompare(a, b, (const unsigned char* )(const char* )table)

    ostatic EST_String cat(const EST_String s1, const EST_String s2 = Empty, const EST_String s3 = Empty, const EST_String s4 = Empty, const EST_String s5 = Empty, const EST_String s6 = Empty, const EST_String s7 = Empty, const EST_String s8 = Empty, const EST_String s9 = Empty )

    Public

    otypedef int EST_string_size
    o#define MAX_STRING_SIZE(INT_MAX)


    Documentation

    A Regular expression class to go with the CSTR EST_String class.

    The regular expression syntax is the FSF syntax used in emacs and in the FSF String library. This is translated into the syntax supported by Henry Spensor's regular expression library, this translation is a place to look if you find regular expressions not matching where expected.

    ovoid compile()
    Compile expression

    ovoid compile_match()
    Compile expression in a form which only matches whole string

    ochar* regularize(int match) const
    Translate the expression into the internally used syntax

    o EST_Regex(void)
    Empty constructor, just for form

    o EST_Regex(EST_String s)
    Construct from EST_String

    o EST_Regex(const char* ex)
    Construct from C string

    o EST_Regex(const EST_Regex &ex)
    Copy constructor

    o ~EST_Regex()
    Destructor

    oint size() const
    Size of the expression

    oint run(const char* on, int from, int &start, int &end, int* starts=NULL, int* ends=NULL)
    Run to find a matching substring

    oint run_match(const char* on, int from=0, int* starts=NULL, int* ends=NULL)
    Run to see if it matches the entire string

    oEST_String tostring(void) const
    Get the expression as a string

    o operator const char *() const
    Cast operator, disambiguates it for some compilers

    o Assignment

    oEST_Regex& operator = (const EST_Regex ex)

    oEST_Regex& operator = (const EST_String s)

    oEST_Regex& operator = (const char* s)


    This class has no child classes.
    Friends:
    ostream &operator << (ostream &s, const EST_Regex &str)
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk> (regular expression library by Henry Spencer, University of Toronto)
    Version:
    See Also:
    EST_String
    string_example

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Predefined_regular_expressions.html0100644001741100001440000000550007327543062024221 0ustar awbusers Predefined_regular_expressions

    Predefined_regular_expressions

    o RXwhite
    White space
    o RXalpha
    Sequence of alphabetic characters
    o RXlowercase
    Sequence of lower case alphabetic characters
    o RXuppercase
    Sequence of upper case alphabetic characters
    o RXalphanum
    Sequence of letters and/or digits
    o RXidentifier
    Initial letter or underscore followed by letters underscores or digits
    o RXint
    Integer
    o RXdouble
    Floating point number

    Some regular expressions matching common things are predefined

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXalpha.html0100644001741100001440000000273707327543062017341 0ustar awbusers extern EST_Regex RXalpha

    In file ../include/EST_Regex.h:

    extern EST_Regex RXalpha

    Sequence of alphabetic characters

    Documentation

    Sequence of alphabetic characters

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXlowercase.html0100644001741100001440000000277507327543062020242 0ustar awbusers extern EST_Regex RXlowercase

    In file ../include/EST_Regex.h:

    extern EST_Regex RXlowercase

    Sequence of lower case alphabetic characters

    Documentation

    Sequence of lower case alphabetic characters

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXuppercase.html0100644001741100001440000000277507327543062020245 0ustar awbusers extern EST_Regex RXuppercase

    In file ../include/EST_Regex.h:

    extern EST_Regex RXuppercase

    Sequence of upper case alphabetic characters

    Documentation

    Sequence of upper case alphabetic characters

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXalphanum.html0100644001741100001440000000274507327543062020060 0ustar awbusers extern EST_Regex RXalphanum

    In file ../include/EST_Regex.h:

    extern EST_Regex RXalphanum

    Sequence of letters and/or digits

    Documentation

    Sequence of letters and/or digits

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXidentifier.html0100644001741100001440000000306307327543062020367 0ustar awbusers extern EST_Regex RXidentifier

    In file ../include/EST_Regex.h:

    extern EST_Regex RXidentifier

    Initial letter or underscore followed by letters underscores or digits

    Documentation

    Initial letter or underscore followed by letters underscores or digits

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXint.html0100644001741100001440000000264707327543062017046 0ustar awbusers extern EST_Regex RXint

    In file ../include/EST_Regex.h:

    extern EST_Regex RXint

    Integer

    Documentation

    Integer

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/RXdouble.html0100644001741100001440000000271107327543062017516 0ustar awbusers extern EST_Regex RXdouble

    In file ../include/EST_Regex.h:

    extern EST_Regex RXdouble

    Floating point number

    Documentation

    Floating point number

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_String.html0100644001741100001440000017043107327543062017760 0ustar awbusers class EST_String

    In file ../include/EST_String.h:

    class EST_String

    A non-copyleft implementation of a string class to use with compilers that aren't GNU C++.

    Inheritance:


    Public Fields

    [more]static const char* version
    Global version string
    [more]static const EST_String Empty
    Constant empty string
    [more] Split a string into parts.

    [more]int max

    Public Methods

    [more] EST_String (void)
    Construct an empty string
    [more] EST_String (const char* s)
    Construct from char *
    [more] EST_String (const char* s, int start_or_fill, int len)
    Construct from part of char * or fill with given character
    [more] EST_String (const char* s, int s_size, int start, int len)
    Construct from C string
    [more] EST_String (const EST_String &s)
    Copy constructor We have to declare our own copy constructor to lie to the compier about the constness of the RHS
    [more] EST_String (const char c)
    Construct from single char.
    [more] ~EST_String ()
    Destructor
    [more]int length (void) const
    Length of string (not length of underlying chunk)
    [more]int space (void) const
    Size of underlying chunk
    [more]const char* str (void) const
    Get a const-pointer to the actual memory
    [more]char* updatable_str (void)
    Get a writable pointer to the actual memory
    [more]static EST_String FromChar (const char c)
    Build string from a single character
    [more]static EST_String Number (int i, int base=10)
    Build string from an integer
    [more]static EST_String Number (long i, int base=10)
    Build string from a long integer
    [more]static EST_String Number (double d)
    Build string from a double
    [more]static EST_String Number (float f)
    Build string from a float
    [more]int Int (bool &ok) const
    Convert to an integer
    [more]long Long (bool &ok) const
    Convert to a long
    [more]float Float (bool &ok) const
    Convert to a float
    [more]double Double (bool &ok) const
    Convert to a double
    [more] Before

    [more]EST_String before (int pos, int len=0) const
    Part before position
    [more]EST_String before (const char* s, int pos=0) const
    Part before first matching substring after pos
    [more]EST_String before (const EST_String &s, int pos=0) const
    Part before first matching substring after pos
    [more]EST_String before (EST_Regex &e, int pos=0) const
    Part before first match of regexp after pos

    [more] At

    [more]EST_String at (int from, int len=0) const
    Return part at position
    [more]EST_String at (const char* s, int pos=0) const
    Return part where substring found (not useful, included for completeness)
    [more]EST_String at (const EST_String &s, int pos=0) const
    Return part where substring found (not useful, included for completeness)
    [more]EST_String at (EST_Regex &e, int pos=0) const
    Return part matching regexp

    [more] After

    [more]EST_String after (int pos, int len=1) const
    Part after pos+len
    [more]EST_String after (const char* s, int pos=0) const
    Part after substring
    [more]EST_String after (const EST_String &s, int pos=0) const
    Part after substring
    [more]EST_String after (EST_Regex &e, int pos=0) const
    Part after match of regular expression

    [more] Search for something

    [more]int search (const char* s, int len, int &mlen, int pos=0) const
    Find a substring
    [more]int search (const EST_String s, int &mlen, int pos=0) const
    Find a substring
    [more]int search (EST_Regex &re, int &mlen, int pos=0, int* starts=NULL, int* ends=NULL) const
    Find a match of the regular expression

    [more] Get position of something

    [more]int index (const char* s, int pos=0) const
    Position of substring (starting at pos)
    [more]int index (const EST_String &s, int pos=0) const
    Position of substring (starting at pos)
    [more]int index (EST_Regex &ex, int pos=0) const
    Position of match of regexp (starting at pos)

    [more] Does string contain something?

    [more]int contains (const char* s, int pos=-1) const
    Does it contain this substring?
    [more]int contains (const EST_String &s, int pos=-1) const
    Does it contain this substring?
    [more]int contains (const char c, int pos=-1) const
    Does it contain this character?
    [more]int contains (EST_Regex &ex, int pos=-1) const
    Does it contain a match for this regular expression?

    [more] Does string exactly match?

    [more]int matches (const char* e, int pos=0) const
    Exatly match this string?
    [more]int matches (const EST_String &e, int pos=0) const
    Exatly match this string?
    [more]int matches (EST_Regex &e, int pos=0, int* starts=NULL, int* ends=NULL) const
    Exactly matches this regular expression, can return ends of sub-expressions

    [more] Global replacement

    [more]int gsub (const char* os, const EST_String &s)
    Substitute one string for another
    [more]int gsub (const char* os, const char* s)
    Substitute one string for another
    [more]int gsub (const EST_String &os, const EST_String &s)
    Substitute one string for another
    [more]int gsub (const EST_String &os, const char* s)
    Substitute one string for another
    [more]int gsub (EST_Regex &ex, const EST_String &s)
    Substitute string for matches of regular expression
    [more]int gsub (EST_Regex &ex, const char* s)
    Substitute string for matches of regular expression
    [more]int gsub (EST_Regex &ex, int bracket_num)
    Substitute string for matches of regular expression
    [more]int subst (EST_String source, int (&starts)[EST_Regex_max_subexpressions], int (&ends)[EST_Regex_max_subexpressions])
    Substitute the result of a match into a string

    [more] Frequency counts

    [more]int freq (const char* s) const
    Number of occurances of substring
    [more]int freq (const EST_String &s) const
    Number of occurances of substring
    [more]int freq (EST_Regex &s) const
    Number of matches of regular expression

    [more] Quoting

    [more]EST_String quote (const char quotec) const
    Return the string in quotes with internal quotes protected
    [more]EST_String quote_if_needed (const char quotec) const
    Return in quotes if there is something to protect (eg.
    [more]EST_String unquote (const char quotec) const
    Remove quotes and unprotect internal quotes
    [more]EST_String unquote_if_needed (const char quotec) const
    Remove quotes if any

    [more] Operators

    [more]const char operator () (int i) const
    Function style access to constant strings
    [more]char& operator [] (int i)
    Array style access to writable strings
    [more] operator const char* () const
    Cast to const char * by simply giving access to pointer
    [more] operator char* ()
    Cast to char *, may involve copying
    [more] Add to end of string.

    [more]EST_String& operator += (const char* b)
    Add C string to end of EST_String
    [more]EST_String& operator += (const EST_String b)
    Add EST_String to end of EST_String

    [more] Asignment

    [more]EST_String& operator = (const char* str)
    Assign C string to EST_String
    [more]EST_String& operator = (const char c)
    Assign single character to EST_String
    [more]EST_String& operator = (const EST_String &s)
    Assign EST_String to EST_String

    [more] Concatenation
    [more] relational operators

    [more]return b
    [more] return (a==b)
    [more]return compare (a, b)

    [more] String comparison.

    [more]return compare (b, a)
    [more] Case folded comparison.

    [more]const EST_String& table return fcompare (a, b, (const unsigned char* )(const char* )table)

    [more]static EST_String cat (const EST_String s1, const EST_String s2 = Empty, const EST_String s3 = Empty, const EST_String s4 = Empty, const EST_String s5 = Empty, const EST_String s6 = Empty, const EST_String s7 = Empty, const EST_String s8 = Empty, const EST_String s9 = Empty )
    Concatenate a number of strings.

    Public

    [more]typedef int EST_string_size
    Type of string size field
    [more]#define MAX_STRING_SIZE (INT_MAX)
    Maximum string size


    Documentation

    A non-copyleft implementation of a string class to use with compilers that aren't GNU C++.

    Strings are reference-counted and reasonably efficiant (eg you can pass them around, into and out of functions and so on without worrying too much about the cost).

    The associated class EST_Regex can be used to represent regular expressions.

    ostatic const char* version
    Global version string

    ostatic const EST_String Empty
    Constant empty string

    otypedef int EST_string_size
    Type of string size field

    o#define MAX_STRING_SIZE(INT_MAX)
    Maximum string size

    oint locate(const char* it, int len, int from, int &start, int &end) const
    Find substring

    oint locate(const EST_String &s, int from, int &start, int &end) const
    Find substring

    oint locate(EST_Regex &ex, int from, int &start, int &end, int* starts=NULL, int* ends=NULL) const
    Find match for regexp

    oEST_String chop_internal(const char* s, int length, int pos, EST_chop_direction directionult) const
    Locate subsring and chop

    oEST_String chop_internal(int pos, int length, EST_chop_direction directionult) const
    Chop at given position

    oEST_String chop_internal(EST_Regex &ex, int pos, EST_chop_direction directionult) const
    Locate match for expression and chop

    oint gsub_internal(const char* os, int olength, const char* s, int length)
    Substitute for string

    oint gsub_internal(EST_Regex &ex, const char* s, int length)
    Substitute for matches of regexp

    o EST_String(void)
    Construct an empty string

    o EST_String(const char* s)
    Construct from char *

    o EST_String(const char* s, int start_or_fill, int len)
    Construct from part of char * or fill with given character

    o EST_String(const char* s, int s_size, int start, int len)
    Construct from C string

    o EST_String(const EST_String &s)
    Copy constructor We have to declare our own copy constructor to lie to the compier about the constness of the RHS

    o EST_String(const char c)
    Construct from single char. This constructor is not usually included as it can mask errors.
    See Also:
    __FSF_COMPATABILITY__

    o ~EST_String()
    Destructor

    oint length(void) const
    Length of string (not length of underlying chunk)

    oint space(void) const
    Size of underlying chunk

    oconst char* str(void) const
    Get a const-pointer to the actual memory

    ochar* updatable_str(void)
    Get a writable pointer to the actual memory

    ostatic EST_String FromChar(const char c)
    Build string from a single character

    ostatic EST_String Number(int i, int base=10)
    Build string from an integer

    ostatic EST_String Number(long i, int base=10)
    Build string from a long integer

    ostatic EST_String Number(double d)
    Build string from a double

    ostatic EST_String Number(float f)
    Build string from a float

    oint Int(bool &ok) const
    Convert to an integer

    olong Long(bool &ok) const
    Convert to a long

    ofloat Float(bool &ok) const
    Convert to a float

    odouble Double(bool &ok) const
    Convert to a double

    o Before

    oEST_String before(int pos, int len=0) const
    Part before position

    oEST_String before(const char* s, int pos=0) const
    Part before first matching substring after pos

    oEST_String before(const EST_String &s, int pos=0) const
    Part before first matching substring after pos

    oEST_String before(EST_Regex &e, int pos=0) const
    Part before first match of regexp after pos

    o At

    oEST_String at(int from, int len=0) const
    Return part at position

    oEST_String at(const char* s, int pos=0) const
    Return part where substring found (not useful, included for completeness)

    oEST_String at(const EST_String &s, int pos=0) const
    Return part where substring found (not useful, included for completeness)

    oEST_String at(EST_Regex &e, int pos=0) const
    Return part matching regexp

    o After

    oEST_String after(int pos, int len=1) const
    Part after pos+len

    oEST_String after(const char* s, int pos=0) const
    Part after substring

    oEST_String after(const EST_String &s, int pos=0) const
    Part after substring

    oEST_String after(EST_Regex &e, int pos=0) const
    Part after match of regular expression

    o Search for something

    oint search(const char* s, int len, int &mlen, int pos=0) const
    Find a substring

    oint search(const EST_String s, int &mlen, int pos=0) const
    Find a substring

    oint search(EST_Regex &re, int &mlen, int pos=0, int* starts=NULL, int* ends=NULL) const
    Find a match of the regular expression

    o Get position of something

    oint index(const char* s, int pos=0) const
    Position of substring (starting at pos)

    oint index(const EST_String &s, int pos=0) const
    Position of substring (starting at pos)

    oint index(EST_Regex &ex, int pos=0) const
    Position of match of regexp (starting at pos)

    o Does string contain something?

    oint contains(const char* s, int pos=-1) const
    Does it contain this substring?

    oint contains(const EST_String &s, int pos=-1) const
    Does it contain this substring?

    oint contains(const char c, int pos=-1) const
    Does it contain this character?

    oint contains(EST_Regex &ex, int pos=-1) const
    Does it contain a match for this regular expression?

    o Does string exactly match?

    oint matches(const char* e, int pos=0) const
    Exatly match this string?

    oint matches(const EST_String &e, int pos=0) const
    Exatly match this string?

    oint matches(EST_Regex &e, int pos=0, int* starts=NULL, int* ends=NULL) const
    Exactly matches this regular expression, can return ends of sub-expressions

    o Global replacement

    oint gsub(const char* os, const EST_String &s)
    Substitute one string for another

    oint gsub(const char* os, const char* s)
    Substitute one string for another

    oint gsub(const EST_String &os, const EST_String &s)
    Substitute one string for another

    oint gsub(const EST_String &os, const char* s)
    Substitute one string for another

    oint gsub(EST_Regex &ex, const EST_String &s)
    Substitute string for matches of regular expression

    oint gsub(EST_Regex &ex, const char* s)
    Substitute string for matches of regular expression

    oint gsub(EST_Regex &ex, int bracket_num)
    Substitute string for matches of regular expression

    oint subst(EST_String source, int (&starts)[EST_Regex_max_subexpressions], int (&ends)[EST_Regex_max_subexpressions])
    Substitute the result of a match into a string

    o Frequency counts

    oint freq(const char* s) const
    Number of occurances of substring

    oint freq(const EST_String &s) const
    Number of occurances of substring

    oint freq(EST_Regex &s) const
    Number of matches of regular expression

    o Quoting

    oEST_String quote(const char quotec) const
    Return the string in quotes with internal quotes protected

    oEST_String quote_if_needed(const char quotec) const
    Return in quotes if there is something to protect (eg. spaces)

    oEST_String unquote(const char quotec) const
    Remove quotes and unprotect internal quotes

    oEST_String unquote_if_needed(const char quotec) const
    Remove quotes if any

    o Operators
    Friends:
    EST_String operator * (const EST_String &s, int n)

    oconst char operator () (int i) const
    Function style access to constant strings

    ochar& operator [] (int i)
    Array style access to writable strings

    o operator const char*() const
    Cast to const char * by simply giving access to pointer

    o operator char*()
    Cast to char *, may involve copying

    o Add to end of string.

    oEST_String& operator += (const char* b)
    Add C string to end of EST_String

    oEST_String& operator += (const EST_String b)
    Add EST_String to end of EST_String

    o Asignment

    oEST_String& operator = (const char* str)
    Assign C string to EST_String

    oEST_String& operator = (const char c)
    Assign single character to EST_String

    oEST_String& operator = (const EST_String &s)
    Assign EST_String to EST_String

    o Concatenation
    Friends:
    EST_String operator + (const EST_String &a, const EST_String &b)
    EST_String operator + (const char *a, const EST_String &b)
    EST_String operator + (const EST_String &a, const char *b)

    o relational operators
    Friends:
    int operator == (const char *a, const EST_String &b)
    int operator == (const EST_String &a, const char *b)
    int operator == (const EST_String &a, const EST_String &b)
    int operator != (const char *a, const EST_String &b)
    int operator != (const EST_String &a, const char *b)
    int operator != (const EST_String &a, const EST_String &b)
    inline int operator < (const char *a, const EST_String &b)
    inline int operator < (const EST_String &a, const char *b)
    inline int operator < (const EST_String &a, const EST_String &b)
    inline int operator > (const char *a, const EST_String &b)
    inline int operator > (const EST_String &a, const char *b)
    inline int operator > (const EST_String &a, const EST_String &b)
    inline int operator <= (const char *a, const EST_String &b)
    inline int operator <= (const EST_String &a, const char *b)
    inline int operator <= (const EST_String &a, const EST_String &b)
    inline int operator >= (const char *a, const EST_String &b)
    inline int operator >= (const EST_String &a, const char *b)
    inline int operator >= (const EST_String &a, const EST_String &b)

    oreturn b

    o return(a==b)

    oreturn compare(a, b)

    o String comparison.
    All these operators return -1, 0 or 1 to indicate the sort order of the strings.
    Friends:
    int compare(const EST_String &a, const EST_String &b)
    int compare(const EST_String &a, const char *b)
    inline int compare(const char *a, const EST_String &b)

    oreturn compare(b, a)

    o Case folded comparison.
    Case folded comparison.

    The table argument can defined how upper and lower case characters correspond. The default works for ASCII.

    Friends:
    int fcompare(const EST_String &a, const EST_String &b,
    int fcompare(const EST_String &a, const char *b,
    inline int fcompare(const EST_String &a, const EST_String &b,

    oconst EST_String& table return fcompare(a, b, (const unsigned char* )(const char* )table)

    o Split a string into parts.
    These functions divide up a string producing an array of substrings.
    Friends:
    int split(const EST_String & s, EST_String result[],

    oint max

    ostatic EST_String cat(const EST_String s1, const EST_String s2 = Empty, const EST_String s3 = Empty, const EST_String s4 = Empty, const EST_String s5 = Empty, const EST_String s6 = Empty, const EST_String s7 = Empty, const EST_String s8 = Empty, const EST_String s9 = Empty )
    Concatenate a number of strings. This is more efficiant than multiple uses of + or +=


    Direct child classes:
    EST_Pathname
    EST_Regex
    Friends:
    EST_String upcase(const EST_String &s)
    EST_String downcase(const EST_String &s)
    ostream &operator << (ostream &s, const EST_String &str)
    class EST_Regex
    Author:
    Alan W Black <awb@cstr.ed.ac.uk> Richard Caley <rjc@cstr.ed.ac.uk>
    Version:
    See Also:
    EST_Chunk
    EST_Regex
    string_example

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_wave_aux.html0100644001741100001440000000374407327543062020333 0ustar awbusers EST_wave_aux

    EST_wave_aux

    o wave_extract_channel
    extract lkj lkjf lkj.
    o wave_combine_channels
    extract lkj lkjf lkj.
    o wave_subwave
    extract lkj lkjf lkj.

    Auxiliary functions for processing waveforms. Auxiliary functions for processing waveforms. Auxiliary functions for processing waveforms.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/wave_extract_channel.html0100644001741100001440000000325307327543062022160 0ustar awbusers int wave_extract_channel

    In file ../include/EST_wave_aux.h:

    int wave_extract_channel

    (EST_Wave &single,
      const EST_Wave &multi,
      int channel)

    extract lkj lkjf lkj.

    Documentation

    extract lkj lkjf lkj. funcytions. function.s lkjlkj/. ;ljf ;dflj d;fljf;lj f;ljf.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/wave_combine_channels.html0100644001741100001440000000315607327543062022307 0ustar awbusers void wave_combine_channels

    In file ../include/EST_wave_aux.h:

    void wave_combine_channels

    (EST_Wave &combined,
      const EST_Wave &multi)

    extract lkj lkjf lkj.

    Documentation

    extract lkj lkjf lkj. funcytions. function.s lkjlkj/. ;ljf ;dflj d;fljf;lj f;ljf

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/wave_subwave.html0100644001741100001440000000323307327543062020470 0ustar awbusers int wave_subwave

    In file ../include/EST_wave_aux.h:

    int wave_subwave

    (EST_Wave &subsig, EST_Wave &sig,
      int offset, int length)

    extract lkj lkjf lkj.

    Documentation

    extract lkj lkjf lkj. funcytions. function.s lkjlkj/. ;ljf ;dflj d;fljf;lj f;ljf

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_rw_state.html0100644001741100001440000000424507327543062020341 0ustar awbusers enum EST_rw_state

    In file ../include/EST_rw_status.h:

    enum EST_rw_state

    State of rw

    [more] rws_ok
    ok
    [more] rws_partial
    partial
    [more] rws_failed
    failed


    Documentation

    State of rw
    o rws_ok
    ok

    o rws_partial
    partial

    o rws_failed
    failed

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_read_status.html0100644001741100001440000000542607327543062021031 0ustar awbusers enum EST_read_status

    In file ../include/EST_rw_status.h:

    enum EST_read_status

    Possible outcomes of a file reading operation.

    [more] read_ok
    The file was read in successfully
    [more] read_format_error
    The file exists but is not in the format specified
    [more] read_not_found_error
    The file does not exist
    [more] read_error
    An error occurred while reading


    Documentation

    Possible outcomes of a file reading operation. More stuff
    o read_ok
    The file was read in successfully

    o read_format_error
    The file exists but is not in the format specified

    o read_not_found_error
    The file does not exist

    o read_error
    An error occurred while reading

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_write_status.html0100644001741100001440000000547707327543062021256 0ustar awbusers enum EST_write_status

    In file ../include/EST_rw_status.h:

    enum EST_write_status

    Possible outcomes of a file writing operation

    [more] write_ok
    The file was written successfully
    [more] write_fail
    The file was not written successfully
    [more] write_error
    The file was not written successfully
    [more] write_partial
    A valid file was created, but only some of the requested data is in there


    Documentation

    Possible outcomes of a file writing operation
    o write_ok
    The file was written successfully

    o write_fail
    The file was not written successfully

    o write_error
    The file was not written successfully

    o write_partial
    A valid file was created, but only some of the requested data is in there

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_connect_status.html0100644001741100001440000000606307327543062021545 0ustar awbusers enum EST_connect_status

    In file ../include/EST_rw_status.h:

    enum EST_connect_status

    Possible outcomes of a network connection operation

    [more] connect_ok
    Connection made
    [more] connect_not_found_error
    Connection failed
    [more] connect_not_allowed_error
    Connection failed
    [more] connect_system_error
    System failure of some kind
    [more] connect_error
    The file was not written successfully


    Documentation

    Possible outcomes of a network connection operation
    o connect_ok
    Connection made

    o connect_not_found_error
    Connection failed

    o connect_not_allowed_error
    Connection failed

    o connect_system_error
    System failure of some kind

    o connect_error
    The file was not written successfully

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Wave.html0100644001741100001440000004755407327543062017425 0ustar awbusers class EST_Wave

    In file ../include/EST_Wave.h:

    class EST_Wave

    A class for storing digital waveforms.

    Inheritance:


    Public Methods

    [more] EST_Wave ()
    default constructor
    [more] EST_Wave (const EST_Wave &a)
    copy constructor
    [more] EST_Wave (int samps, int chans, short* memory, int offset=0, int sample_rate=default_sample_rate, int free_when_destroyed=0)
    Construct from memory supplied by caller
    [more] Access functions for finding ampltiudes of samples

    [more]short& a (int i, int channel = 0)
    return amplitude of sample <tt>i</tt> from channel <tt> channel</tt>.
    [more]short operator() (int i, int channel) const
    return amplitude of sample <tt>i</tt> from channel <tt> channel</tt>.
    [more]short operator() (int i) const
    return amplitude of sample <tt>i</tt> from channel 0.
    [more]short& a_safe (int i, int channel = 0)
    Version of a() that returns zero if index is out of array bounds.
    [more]float t (int i) const
    return the time position in seconds of the ith sample

    [more] Information functions

    [more]int num_samples () const
    return the number of samples in the waveform
    [more]int num_channels () const
    return the number of channels in the waveform
    [more]int sample_rate () const
    return the sampling rate (frequency)
    [more]void set_sample_rate (const int n)
    Set sampling rate to <tt>n</tt>
    [more]int length () const
    return the size of the waveform, ie.
    [more]float end ()
    return the time position of the last sample
    [more]bool have_left_context (unsigned int n) const
    Can we look N samples to the left?
    [more]EST_String sample_type () const
    returns the file format of the file from which the waveform was read.
    [more]EST_String name () const
    A string indentifying the waveform, commonly used to store the filename
    [more]void set_name (const EST_String n)
    Sets name

    [more] Waveform manipulation functions

    [more]void resize (int num_samples, int num_channels = EST_ALL, int set=1)
    resize the waveform
    [more]void resample (int rate)
    Resample waveform to <tt>rate</tt>
    [more]void rescale (float gain, int normalize=0)
    multiply all samples by a factor <tt>gain</tt>.
    [more]void clear ()
    clear waveform and set size to 0

    [more] File i/o functions

    [more]EST_read_status load (const EST_String filename, int offset=0, int length = 0, int rate = default_sample_rate)
    Load a file into the waveform.
    [more]EST_read_status load_file (const EST_String filename, const EST_String filetype, int sample_rate, const EST_String sample_type, int bo, int nc, int offset = 0, int length = 0)
    Load a file of type <tt>filetype</tt> into the waveform.

    [more]EST_Wave& operator = (const EST_Wave& w)
    Assignment operator
    [more]EST_Wave& operator += (const EST_Wave &a)
    Add to existing wave in serial.
    [more]EST_Wave& operator |= (const EST_Wave &a)
    Add wave in parallel, ie.
    [more]void integrity () const


    Inherited from EST_Featured:


    Documentation

    A class for storing digital waveforms. The waveform is stored as an arraay of 16 bit shorts. Mutliple channels are supported, but if no channel information is given the 0th channel is accessed. <p>

    The waveforms can be of any sample rate, and can be changed to another samping rate using the <tt>resample</tt> function.

    o EST_Wave()
    default constructor

    o EST_Wave(const EST_Wave &a)
    copy constructor

    o EST_Wave(int samps, int chans, short* memory, int offset=0, int sample_rate=default_sample_rate, int free_when_destroyed=0)
    Construct from memory supplied by caller

    o Access functions for finding ampltiudes of samples

    oshort& a(int i, int channel = 0)
    return amplitude of sample <tt>i</tt> from channel <tt> channel</tt>. By default the 0th channel is selected. This function can be used for assignment.

    oshort operator()(int i, int channel) const
    return amplitude of sample <tt>i</tt> from channel <tt> channel</tt>. By default the 0th channel is selected.

    oshort operator()(int i) const
    return amplitude of sample <tt>i</tt> from channel 0.

    oshort& a_safe(int i, int channel = 0)
    Version of a() that returns zero if index is out of array bounds. This is particularly useful in signal processing when you want to have windows going off the end of the waveform.

    ofloat t(int i) const
    return the time position in seconds of the ith sample

    o Information functions

    oint num_samples() const
    return the number of samples in the waveform

    oint num_channels() const
    return the number of channels in the waveform

    oint sample_rate() const
    return the sampling rate (frequency)

    ovoid set_sample_rate(const int n)
    Set sampling rate to <tt>n</tt>

    oint length() const
    return the size of the waveform, ie. the number of samples.

    ofloat end()
    return the time position of the last sample

    obool have_left_context(unsigned int n) const
    Can we look N samples to the left?

    oEST_String sample_type() const
    returns the file format of the file from which the waveform was read. If the waveform has not been read from a file, this is set to the default type

    oEST_String name() const
    A string indentifying the waveform, commonly used to store the filename

    ovoid set_name(const EST_String n)
    Sets name

    o Waveform manipulation functions

    ovoid resize(int num_samples, int num_channels = EST_ALL, int set=1)
    resize the waveform

    ovoid resample(int rate)
    Resample waveform to <tt>rate</tt>

    ovoid rescale(float gain, int normalize=0)
    multiply all samples by a factor <tt>gain</tt>. This checks for overflows and puts them to the maximum positive or negative value as appropriate.

    ovoid clear()
    clear waveform and set size to 0

    o File i/o functions

    oEST_read_status load(const EST_String filename, int offset=0, int length = 0, int rate = default_sample_rate)
    Load a file into the waveform. The load routine attempts to automatically determine which file type is being loaded. A portion of the waveform can be loaded by setting <tt> offset</tt> to the sample position from the beginning and <length> to the number of required samples after this.

    oEST_read_status load_file(const EST_String filename, const EST_String filetype, int sample_rate, const EST_String sample_type, int bo, int nc, int offset = 0, int length = 0)
    Load a file of type <tt>filetype</tt> into the waveform. This can be used to load unheadered files, in which case the fields <tt>sample_rate, sample_type, bo</tt> and <tt>nc</tt> are used to specify the sample rate, type, byte order and number of channels. A portion of the waveform can be loaded by setting <tt> offset</tt> to the sample position from the beginning and <length> to the number of required samples after this.

    oEST_Wave& operator = (const EST_Wave& w)
    Assignment operator

    oEST_Wave& operator +=(const EST_Wave &a)
    Add to existing wave in serial. Waveforms must have the same number of channels.

    oEST_Wave& operator |=(const EST_Wave &a)
    Add wave in parallel, ie. make wave <tt>a</tt> become new channels in existing waveform.

    ovoid integrity() const


    Direct child classes:
    EST_SingleChannelWave
    Friends:
    ostream& operator << (ostream& p_values, const EST_Wave &sig)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SingleChannelWave.html0100644001741100001440000002062407327543062022045 0ustar awbusers class EST_SingleChannelWave

    In file ../include/EST_SingleChannelWave.h:

    class EST_SingleChannelWave

    An alias for wave which can be used to tell the compiler you know it is a simple one channel wave.

    Inheritance:


    Public Methods

    [more] EST_SingleChannelWave ()
    default constructor


    Inherited from EST_Wave:

    Public Methods

    Access functions for finding ampltiudes of samples

    [more]short& a(int i, int channel = 0)
    return amplitude of sample <tt>i</tt> from channel <tt> channel</tt>.
    [more]short operator()(int i, int channel) const
    return amplitude of sample <tt>i</tt> from channel <tt> channel</tt>.
    [more]short operator()(int i) const
    return amplitude of sample <tt>i</tt> from channel 0.
    [more]short& a_safe(int i, int channel = 0)
    Version of a() that returns zero if index is out of array bounds.
    [more]float t(int i) const
    return the time position in seconds of the ith sample

    Information functions

    [more]int num_samples() const
    return the number of samples in the waveform
    [more]int num_channels() const
    return the number of channels in the waveform
    [more]int sample_rate() const
    return the sampling rate (frequency)
    [more]void set_sample_rate(const int n)
    Set sampling rate to <tt>n</tt>
    [more]int length() const
    return the size of the waveform, ie.
    [more]float end()
    return the time position of the last sample
    [more]bool have_left_context(unsigned int n) const
    Can we look N samples to the left?
    [more]EST_String sample_type() const
    returns the file format of the file from which the waveform was read.
    [more]EST_String name() const
    A string indentifying the waveform, commonly used to store the filename
    [more]void set_name(const EST_String n)
    Sets name

    Waveform manipulation functions

    [more]void resize(int num_samples, int num_channels = EST_ALL, int set=1)
    resize the waveform
    [more]void resample(int rate)
    Resample waveform to <tt>rate</tt>
    [more]void rescale(float gain, int normalize=0)
    multiply all samples by a factor <tt>gain</tt>.
    [more]void clear()
    clear waveform and set size to 0

    File i/o functions

    [more]EST_read_status load(const EST_String filename, int offset=0, int length = 0, int rate = default_sample_rate)
    Load a file into the waveform.
    [more]EST_read_status load_file(const EST_String filename, const EST_String filetype, int sample_rate, const EST_String sample_type, int bo, int nc, int offset = 0, int length = 0)
    Load a file of type <tt>filetype</tt> into the waveform.

    oEST_Wave& operator = (const EST_Wave& w)
    oEST_Wave& operator +=(const EST_Wave &a)
    oEST_Wave& operator |=(const EST_Wave &a)
    ovoid integrity() const


    Inherited from EST_Featured:


    Documentation

    An alias for wave which can be used to tell the compiler you know it is a simple one channel wave. This can speed up access.

    o EST_SingleChannelWave()
    default constructor


    This class has no child classes.
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Discrete.html0100644001741100001440000001773207327543062020260 0ustar awbusers class EST_Discrete

    In file ../include/EST_simplestats.h:

    class EST_Discrete

    A class for managing mapping string names to integers and back again, mainly used for representing alphabets in n-grams and grammars etc.

    Public Methods

    [more] EST_Discrete ()
    [more] EST_Discrete (const EST_Discrete &d)
    [more] EST_Discrete (const EST_StrList &vocab)
    Initialise discrete class from given list of strings
    [more] ~EST_Discrete ()
    [more]void copy (const EST_Discrete &d)
    [more]bool init (const EST_StrList &vocab)
    (re-)initialise
    [more]const int length (void) const
    The number of members in the discrete
    [more]const int index (const EST_String &n) const
    The int assigned to the given name, if it doesn't exists p_def_val is returned (which is -1 by default)
    [more]const EST_String& name (const int n) const
    The name given the index
    [more]void def_val (const EST_String &v)
    set the default value when a name isn't found (-1 by default)
    [more]int name (const EST_String &n) const
    An alternative method for getting the int form the name
    [more]EST_Discrete& operator = (const EST_Discrete &a)


    Documentation

    A class for managing mapping string names to integers and back again, mainly used for representing alphabets in n-grams and grammars etc.

    This offers an efficient way of mapping a known set of string names to integers. It is initialised from a list of names and builds a index of those names to a set of integers.

    o EST_Discrete()

    o EST_Discrete(const EST_Discrete &d)

    o EST_Discrete(const EST_StrList &vocab)
    Initialise discrete class from given list of strings

    o ~EST_Discrete()

    ovoid copy(const EST_Discrete &d)

    obool init(const EST_StrList &vocab)
    (re-)initialise

    oconst int length(void) const
    The number of members in the discrete

    oconst int index(const EST_String &n) const
    The int assigned to the given name, if it doesn't exists p_def_val is returned (which is -1 by default)

    oconst EST_String& name(const int n) const
    The name given the index

    ovoid def_val(const EST_String &v)
    set the default value when a name isn't found (-1 by default)

    oint name(const EST_String &n) const
    An alternative method for getting the int form the name

    oEST_Discrete& operator = (const EST_Discrete &a)


    This class has no child classes.
    Friends:
    ostream& operator <<(ostream& s, const EST_Discrete &d)
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SuffStats.html0100644001741100001440000001613207327543062020431 0ustar awbusers class EST_SuffStats

    In file ../include/EST_simplestats.h:

    class EST_SuffStats

    A class for cummulating ``sufficient statistics'' for a set of numbers: sum, count, sum squared.

    Public Methods

    [more] EST_SuffStats ()
    [more] EST_SuffStats (const EST_SuffStats &s)
    [more]void copy (const EST_SuffStats &s)
    [more]void reset (void)
    reset internal values
    [more]double samples (void)
    number of samples in set
    [more]double sum ()
    sum of values
    [more]double sumx ()
    sum of squared values
    [more]double mean (void) const
    mean of currently cummulated values
    [more]double variance (void) const
    variance of currently cummulated values
    [more]double stddev (void) const
    standard deviation of currently cummulated values
    [more]EST_SuffStats& operator += (double a)
    Used to cummulate new values
    [more]EST_SuffStats& operator + (double a)
    Used to cummulate new values
    [more]EST_SuffStats& operator = (const EST_SuffStats &a)


    Documentation

    A class for cummulating ``sufficient statistics'' for a set of numbers: sum, count, sum squared.

    This collects the number, sum and sum squared for a set of number. Offering mean, variance and standard deviation derived from the cummulated values.

    o EST_SuffStats()

    o EST_SuffStats(const EST_SuffStats &s)

    ovoid copy(const EST_SuffStats &s)

    ovoid reset(void)
    reset internal values

    odouble samples(void)
    number of samples in set

    odouble sum()
    sum of values

    odouble sumx()
    sum of squared values

    odouble mean(void) const
    mean of currently cummulated values

    odouble variance(void) const
    variance of currently cummulated values

    odouble stddev(void) const
    standard deviation of currently cummulated values

    oEST_SuffStats& operator +=(double a)
    Used to cummulate new values

    oEST_SuffStats& operator + (double a)
    Used to cummulate new values

    oEST_SuffStats& operator = (const EST_SuffStats &a)


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_DiscreteProbDistribution.html0100644001741100001440000004556107327543062023504 0ustar awbusers class EST_DiscreteProbDistribution

    In file ../include/EST_simplestats.h:

    class EST_DiscreteProbDistribution

    A class for representing probability distributions for a set of discrete values.

    Public Methods

    [more] EST_DiscreteProbDistribution (const EST_DiscreteProbDistribution &b)
    Create with copying from an existing distribution
    [more] EST_DiscreteProbDistribution (const EST_TList<EST_String> &vocab)
    Create with given vocabulary
    [more] EST_DiscreteProbDistribution (const EST_Discrete* d)
    Create using given EST_Discrete class as the vocabulary
    [more] EST_DiscreteProbDistribution (const EST_Discrete* d, const double n_samples, const EST_DVector &counts)
    Create using given EST_Discrete class as vocabulary plus given counts
    [more] ~EST_DiscreteProbDistribution ()
    Destructor function
    [more]void copy (const EST_DiscreteProbDistribution &b)
    Copy all data from another DPD to this
    [more]void clear (void)
    Reset, clearing all counts and vocabulary
    [more]bool init (const EST_StrList &vocab)
    Initialise using given vocabulary
    [more]void init (const EST_Discrete* d)
    Initialise using given EST_Distcrete as vocabulary
    [more]void init ()
    Initialise
    [more]double samples (void) const
    Total number of example found
    [more]void cumulate (const EST_String &s, double count=1)
    Add this observation, may specify number of occurences
    [more]void cumulate (const int i, double count=1)
    Add this observation, i must be with in EST_Discrete range
    [more]const EST_String& most_probable (double* prob = NULL) const
    Return the most probable member of the distribution
    [more]double entropy (void) const
    Return the entropy of the distribution

    [more]double probability (const EST_String &s) const
    [more]double probability (const int i) const
    [more]double frequency (const EST_String &s) const
    [more]double frequency (const int i) const
    [more]int item_start () const
    Used for iterating through members of the distribution
    [more]int item_next (int idx) const
    Used for iterating through members of the distribution
    [more]int item_end (int idx) const
    Used for iterating through members of the distribution
    [more]const EST_String& item_name (int idx) const
    During iteration ruturns name given index
    [more]void item_freq (int idx, EST_String &s, double &freq) const
    During iteration ruturns name and frequency given index
    [more]void item_prob (int idx, EST_String &s, double &prob) const
    During iteration ruturns name and probability given index
    [more]inline const EST_Discrete* const get_discrete () const
    Returns discrete vocabilary of distribution
    [more]void set_frequency (const EST_String &s, double c)
    Sets the frequency of named item, modifes num_samples accordingly.
    [more]void set_frequency (int i, double c)
    Sets the frequency of named item, modifes num_samples accordingly.
    [more]void override_frequency (const EST_String &s, double c)
    Sets the frequency of named item, without modifying num_samples
    [more]void override_frequency (int i, double c)
    Sets the frequency of named item, without modifying num_samples
    [more]void set_num_samples (const double c)
    Sets the number of samples.


    Documentation

    A class for representing probability distributions for a set of discrete values.

    This may be used to cummulate the probability distribution of a class of values. Values are actually help as frequencies so both frequency and probability information may be available. Note that frequencies are not integers because usings smoothing and backoff integers are too restrictive so they are actually represented as doubles.

    Methods are provided to iterate over the values in a distribution, for example

           EST_DiscreteProbistribution pdf;
           for (int i=pdf.item_start(); i < pdf.item_end(); i=pdf.item_next(i))
           {
              EST_String name;
              double prob;
              item_prob(i,name,prob);
              cout << name << ": prob " << prob << endl;
           }
        

    o EST_DiscreteProbDistribution(const EST_DiscreteProbDistribution &b)
    Create with copying from an existing distribution

    o EST_DiscreteProbDistribution(const EST_TList<EST_String> &vocab)
    Create with given vocabulary

    o EST_DiscreteProbDistribution(const EST_Discrete* d)
    Create using given EST_Discrete class as the vocabulary

    o EST_DiscreteProbDistribution(const EST_Discrete* d, const double n_samples, const EST_DVector &counts)
    Create using given EST_Discrete class as vocabulary plus given counts

    o ~EST_DiscreteProbDistribution()
    Destructor function

    ovoid copy(const EST_DiscreteProbDistribution &b)
    Copy all data from another DPD to this

    ovoid clear(void)
    Reset, clearing all counts and vocabulary

    obool init(const EST_StrList &vocab)
    Initialise using given vocabulary

    ovoid init(const EST_Discrete* d)
    Initialise using given EST_Distcrete as vocabulary

    ovoid init()
    Initialise

    odouble samples(void) const
    Total number of example found

    ovoid cumulate(const EST_String &s, double count=1)
    Add this observation, may specify number of occurences

    ovoid cumulate(const int i, double count=1)
    Add this observation, i must be with in EST_Discrete range

    oconst EST_String& most_probable(double* prob = NULL) const
    Return the most probable member of the distribution

    odouble entropy(void) const
    Return the entropy of the distribution

    odouble probability(const EST_String &s) const

    odouble probability(const int i) const

    odouble frequency(const EST_String &s) const

    odouble frequency(const int i) const

    oint item_start() const
    Used for iterating through members of the distribution

    oint item_next(int idx) const
    Used for iterating through members of the distribution

    oint item_end(int idx) const
    Used for iterating through members of the distribution

    oconst EST_String& item_name(int idx) const
    During iteration ruturns name given index

    ovoid item_freq(int idx, EST_String &s, double &freq) const
    During iteration ruturns name and frequency given index

    ovoid item_prob(int idx, EST_String &s, double &prob) const
    During iteration ruturns name and probability given index

    oinline const EST_Discrete* const get_discrete() const
    Returns discrete vocabilary of distribution

    ovoid set_frequency(const EST_String &s, double c)
    Sets the frequency of named item, modifes num_samples accordingly. This is used when smoothing frequencies.

    ovoid set_frequency(int i, double c)
    Sets the frequency of named item, modifes num_samples accordingly. This is used when smoothing frequencies.

    ovoid override_frequency(const EST_String &s, double c)
    Sets the frequency of named item, without modifying num_samples

    ovoid override_frequency(int i, double c)
    Sets the frequency of named item, without modifying num_samples

    ovoid set_num_samples(const double c)
    Sets the number of samples. Care should be taken on setting this as it will affect how probabilities are calculated.


    This class has no child classes.
    Friends:
    ostream & operator <<(ostream &s, const EST_DiscreteProbDistribution &p)
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Pathname.html0100644001741100001440000004576507327543062020262 0ustar awbusers class EST_Pathname

    In file ../include/EST_Pathname.h:

    class EST_Pathname

    Class representing pathnames.

    Inheritance:


    Inherited from EST_String:

    Public Fields

    ostatic const char* version
    ostatic const EST_String Empty

    Split a string into parts.

    [more]int max

    Public Methods

    oint length(void) const
    oint space(void) const
    oconst char* str(void) const
    ochar* updatable_str(void)
    ostatic EST_String FromChar(const char c)
    ostatic EST_String Number(int i, int base=10)
    ostatic EST_String Number(long i, int base=10)
    ostatic EST_String Number(double d)
    ostatic EST_String Number(float f)
    oint Int(bool &ok) const
    olong Long(bool &ok) const
    ofloat Float(bool &ok) const
    odouble Double(bool &ok) const

    Before

    [more]EST_String before(int pos, int len=0) const
    Part before position
    [more]EST_String before(const char* s, int pos=0) const
    Part before first matching substring after pos
    [more]EST_String before(const EST_String &s, int pos=0) const
    Part before first matching substring after pos
    [more]EST_String before(EST_Regex &e, int pos=0) const
    Part before first match of regexp after pos

    At

    [more]EST_String at(int from, int len=0) const
    Return part at position
    [more]EST_String at(const char* s, int pos=0) const
    Return part where substring found (not useful, included for completeness)
    [more]EST_String at(const EST_String &s, int pos=0) const
    Return part where substring found (not useful, included for completeness)
    [more]EST_String at(EST_Regex &e, int pos=0) const
    Return part matching regexp

    After

    [more]EST_String after(int pos, int len=1) const
    Part after pos+len
    [more]EST_String after(const char* s, int pos=0) const
    Part after substring
    [more]EST_String after(const EST_String &s, int pos=0) const
    Part after substring
    [more]EST_String after(EST_Regex &e, int pos=0) const
    Part after match of regular expression

    Search for something

    [more]int search(const char* s, int len, int &mlen, int pos=0) const
    Find a substring
    [more]int search(const EST_String s, int &mlen, int pos=0) const
    Find a substring
    [more]int search(EST_Regex &re, int &mlen, int pos=0, int* starts=NULL, int* ends=NULL) const
    Find a match of the regular expression

    Get position of something

    [more]int index(const char* s, int pos=0) const
    Position of substring (starting at pos)
    [more]int index(const EST_String &s, int pos=0) const
    Position of substring (starting at pos)
    [more]int index(EST_Regex &ex, int pos=0) const
    Position of match of regexp (starting at pos)

    Does string contain something?

    [more]int contains(const char* s, int pos=-1) const
    Does it contain this substring?
    [more]int contains(const EST_String &s, int pos=-1) const
    Does it contain this substring?
    [more]int contains(const char c, int pos=-1) const
    Does it contain this character?
    [more]int contains(EST_Regex &ex, int pos=-1) const
    Does it contain a match for this regular expression?

    Does string exactly match?

    [more]int matches(const char* e, int pos=0) const
    Exatly match this string?
    [more]int matches(const EST_String &e, int pos=0) const
    Exatly match this string?
    [more]int matches(EST_Regex &e, int pos=0, int* starts=NULL, int* ends=NULL) const
    Exactly matches this regular expression, can return ends of sub-expressions

    Global replacement

    [more]int gsub(const char* os, const EST_String &s)
    Substitute one string for another
    [more]int gsub(const char* os, const char* s)
    Substitute one string for another
    [more]int gsub(const EST_String &os, const EST_String &s)
    Substitute one string for another
    [more]int gsub(const EST_String &os, const char* s)
    Substitute one string for another
    [more]int gsub(EST_Regex &ex, const EST_String &s)
    Substitute string for matches of regular expression
    [more]int gsub(EST_Regex &ex, const char* s)
    Substitute string for matches of regular expression
    [more]int gsub(EST_Regex &ex, int bracket_num)
    Substitute string for matches of regular expression
    [more]int subst(EST_String source, int (&starts)[EST_Regex_max_subexpressions], int (&ends)[EST_Regex_max_subexpressions])
    Substitute the result of a match into a string

    Frequency counts

    [more]int freq(const char* s) const
    Number of occurances of substring
    [more]int freq(const EST_String &s) const
    Number of occurances of substring
    [more]int freq(EST_Regex &s) const
    Number of matches of regular expression

    Quoting

    [more]EST_String quote(const char quotec) const
    Return the string in quotes with internal quotes protected
    [more]EST_String quote_if_needed(const char quotec) const
    Return in quotes if there is something to protect (eg.
    [more]EST_String unquote(const char quotec) const
    Remove quotes and unprotect internal quotes
    [more]EST_String unquote_if_needed(const char quotec) const
    Remove quotes if any

    Operators

    [more]const char operator () (int i) const
    Function style access to constant strings
    [more]char& operator [] (int i)
    Array style access to writable strings
    [more] operator const char*() const
    Cast to const char * by simply giving access to pointer
    [more] operator char*()
    Cast to char *, may involve copying
    [more] Add to end of string.

    [more]EST_String& operator += (const char* b)
    Add C string to end of EST_String
    [more]EST_String& operator += (const EST_String b)
    Add EST_String to end of EST_String

    [more] Asignment

    [more]EST_String& operator = (const char* str)
    Assign C string to EST_String
    [more]EST_String& operator = (const char c)
    Assign single character to EST_String
    [more]EST_String& operator = (const EST_String &s)
    Assign EST_String to EST_String

    [more] Concatenation
    [more] relational operators

    [more]return b
    [more] return(a==b)
    [more]return compare(a, b)

    String comparison.

    [more]return compare(b, a)
    [more] Case folded comparison.

    [more]const EST_String& table return fcompare(a, b, (const unsigned char* )(const char* )table)

    ostatic EST_String cat(const EST_String s1, const EST_String s2 = Empty, const EST_String s3 = Empty, const EST_String s4 = Empty, const EST_String s5 = Empty, const EST_String s6 = Empty, const EST_String s7 = Empty, const EST_String s8 = Empty, const EST_String s9 = Empty )

    Public

    otypedef int EST_string_size
    o#define MAX_STRING_SIZE(INT_MAX)


    Documentation

    Class representing pathnames. Makes common filename manipulations available as methods. Different implementations are provided for different systems.

    This class has no child classes.
    Friends:
    EST_Pathname operator + (const EST_Pathname p, const EST_Pathname addition)
    EST_Pathname operator + (const char *p, const EST_Pathname addition)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_VTCandidate.html0100644001741100001440000000346107327543062020636 0ustar awbusers class EST_VTCandidate

    In file ../include/EST_viterbi.h:

    class EST_VTCandidate

    Internal class to EST_Viterbi_Decoder used to a represent a candidate.

    Documentation

    Internal class to EST_Viterbi_Decoder used to a represent a candidate.

    These objects need to be created and set by the user of the Viterbi decoder.


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_VTPath.html0100644001741100001440000000337607327543062017663 0ustar awbusers class EST_VTPath

    In file ../include/EST_viterbi.h:

    class EST_VTPath

    Internal class to EST_Viterbi_Decoder used to a represent a link in a path the candidates.

    Documentation

    Internal class to EST_Viterbi_Decoder used to a represent a link in a path the candidates.


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_VTPoint.html0100644001741100001440000000322007327543062020044 0ustar awbusers class EST_VTPoint

    In file ../include/EST_viterbi.h:

    class EST_VTPoint

    Internal class to \Ref{EST_Viterbi_Decoder used to a node in the decoder table

    Documentation

    Internal class to \Ref{EST_Viterbi_Decoder used to a node in the decoder table


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Viterbi_Decoder.html0100644001741100001440000002602207327543062021537 0ustar awbusers class EST_Viterbi_Decoder

    In file ../include/EST_viterbi.h:

    class EST_Viterbi_Decoder

    A class that offers a generalised Viterbi decoder.

    Public Fields

    [more]EST_Features f
    For holding vlaues to pass to user called functions

    Public Methods

    [more] EST_Viterbi_Decoder (uclist_f_t a, unpath_f_t b)
    Construct a decoder with given candidate function and join function, as number of states is given this implies a beam search
    [more] EST_Viterbi_Decoder (uclist_f_t a, unpath_f_t b, int num_states)
    Construct a decoder with given candidate function and join function with a state size as specified
    [more] ~EST_Viterbi_Decoder ()
    [more]void set_beam_width (int w)
    Only for use in beam search mode: number of paths to consider
    [more]void set_cand_width (int w)
    Only for use in beam search mode: number of condidates to consider
    [more]void set_debug (int d)
    Output some debugging information
    [more]void set_big_is_good (int flag)
    Define is good scores are bigger or smaller.
    [more]EST_VTCandidate* add_cand_prune (EST_VTCandidate* newcand, EST_VTCandidate* allcands)
    Add a new candidtate to list if better than others, pruning the list if required
    [more]void initialise (EST_Relation* r)
    Build the initial table from a EST_Relation
    [more]void set_pruning_parameters (float beam, float ob_beam)
    set beam widths for pruning
    [more]void search (void)
    Do the the actual search
    [more]bool result (const EST_String &n)
    Extract the result from the table and store it as a feature on the related EST_Item in the given EST_Relation named as n.
    [more]void copy_feature (const EST_String &n)
    Copy named feature from the best path to related stream item

    Public

    [more] Unfortunately using MAX_DOUBLE doesn't do the right thing
    [more] (eg.


    Documentation

    A class that offers a generalised Viterbi decoder.

    This class can be used to find the best path through a set of candidates based on liklihoods of the candidates and some combination function. The candidate list and joining are not included in the decoder itself but are user defined functions that are specified as construction time.

    Those functions need to return a list of candidates and score a join of a path to a candidate and (optionally define a state).

    Although this offers a full Viterbi search it may also be used as a generalised beam search.

    See viterbi_main.cc for an example of using this.

    oEST_Features f
    For holding vlaues to pass to user called functions

    o Unfortunately using MAX_DOUBLE doesn't do the right thing
    Unfortunately using MAX_DOUBLE doesn't do the right thing

    o (eg.
    (eg. comparison don't work with MAX_DOUBLE on alphas), so

    o EST_Viterbi_Decoder(uclist_f_t a, unpath_f_t b)
    Construct a decoder with given candidate function and join function, as number of states is given this implies a beam search

    o EST_Viterbi_Decoder(uclist_f_t a, unpath_f_t b, int num_states)
    Construct a decoder with given candidate function and join function with a state size as specified

    o ~EST_Viterbi_Decoder()

    ovoid set_beam_width(int w)
    Only for use in beam search mode: number of paths to consider

    ovoid set_cand_width(int w)
    Only for use in beam search mode: number of condidates to consider

    ovoid set_debug(int d)
    Output some debugging information

    ovoid set_big_is_good(int flag)
    Define is good scores are bigger or smaller. This allows the search to work for likelihoods probabailities, scores or whatever

    oEST_VTCandidate* add_cand_prune(EST_VTCandidate* newcand, EST_VTCandidate* allcands)
    Add a new candidtate to list if better than others, pruning the list if required

    ovoid initialise(EST_Relation* r)
    Build the initial table from a EST_Relation

    ovoid set_pruning_parameters(float beam, float ob_beam)
    set beam widths for pruning

    ovoid search(void)
    Do the the actual search

    obool result(const EST_String &n)
    Extract the result from the table and store it as a feature on the related EST_Item in the given EST_Relation named as n. Return FALSE if no path is found.

    ovoid copy_feature(const EST_String &n)
    Copy named feature from the best path to related stream item


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): July 1996

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/HashTables.html0100644001741100001440000000430307327543062020007 0ustar awbusers Hash Tables

    Hash Tables

    o EST_HashFunctions
    This is just a convinient place to put some useful hash functions
    o EST_Hash_Pair
    This class is used in hash tables to hold a key value pair.
    o EST_THash
    An open hash table.
    o EST_TStringHash
    A specialised hash table for when the key is an EST_String.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_HashFunctions.html0100644001741100001440000000667107327543062021272 0ustar awbusers class EST_HashFunctions

    In file ../include/EST_THash.h:

    class EST_HashFunctions

    This is just a convinient place to put some useful hash functions

    Inheritance:


    Public Methods

    [more]static unsigned int DefaultHash (const void* data, size_t size, unsigned int n)
    A generally useful hash function
    [more]static unsigned int StringHash (const EST_String &key, unsigned int size)
    A hash function for strings


    Documentation

    This is just a convinient place to put some useful hash functions
    ostatic unsigned int DefaultHash(const void* data, size_t size, unsigned int n)
    A generally useful hash function

    ostatic unsigned int StringHash(const EST_String &key, unsigned int size)
    A hash function for strings


    Direct child classes:
    EST_THash

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Hash_Pair.html0100644001741100001440000000452007327543062020343 0ustar awbusers template<class K, class V> class EST_Hash_Pair

    In file ../include/EST_THash.h:

    template<class K, class V> class EST_Hash_Pair

    This class is used in hash tables to hold a key value pair.

    Public Fields

    [more]K k
    The key
    [more]V v
    The value


    Documentation

    This class is used in hash tables to hold a key value pair. Not much to say beyond that.
    oK k
    The key

    oV v
    The value


    This class has no child classes.
    Friends:
    class EST_THash<K, V>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_THash.html0100644001741100001440000004564107327543062017525 0ustar awbusers template<class K, class V> class EST_THash

    In file ../include/EST_THash.h:

    template<class K, class V> class EST_THash

    An open hash table.

    Inheritance:


    Public Classes

    [more] Pair Iteration

    [more]struct IPointer_s
    A position in the table is given by a bucket number and a pointer into the bucket
    [more]void skip_blank (IPointer &ip) const
    Shift to point at something
    [more]void point_to_first (IPointer &ip) const
    Go to start of the table
    [more]void move_pointer_forwards (IPointer &ip) const
    Move pointer forwards, at the end of the bucket, move down
    [more]bool points_to_something (const IPointer &ip) const
    We are at the end if the pointer ever becomes NULL
    [more]EST_Hash_Pair<K, V> & points_at (const IPointer &ip)
    Return the contents of this entry
    [more]typedef EST_Hash_Pair<K, V> Entry
    An entry returned by the iterator is a key value pair
    [more]typedef EST_TStructIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> > Entries
    Give the iterator a sensible name

    [more] Key Iteration

    [more]struct IPointer_k_s
    A position in the table is given by a bucket number and a pointer into the bucket
    [more]void skip_blank (IPointer_k &ip) const
    Shift to point at something
    [more]void point_to_first (IPointer_k &ip) const
    Go to start of the table
    [more]void move_pointer_forwards (IPointer_k &ip) const
    Move pointer forwards, at the end of the bucket, move down
    [more]bool points_to_something (const IPointer_k &ip) const
    We are at the end if the pointer ever becomes NULL
    [more]K& points_at (const IPointer_k &ip)
    Return the key of this entry
    [more]typedef K KeyEntry
    An entry returned by this iterator is just a key
    [more]typedef EST_TIterator< EST_THash<K, V>, IPointer_k, K > KeyEntries
    Give the iterator a sensible name

    Public Methods

    [more] EST_THash (int size, unsigned int (*hash_function)(const K &key, unsigned int size)= NULL)
    Create a table with the given number of buckets.
    [more] EST_THash (const EST_THash<K, V> &from)
    Create a copy
    [more] ~EST_THash (void)
    Destroy the table
    [more]void clear (void)
    Empty the table
    [more]unsigned int num_entries (void) const
    Return the total number of entries in the table
    [more]int present (const K &key) const
    Does the key have an entry?
    [more]V& val (const K &key, int &found) const
    Return the value associated with the key.
    [more]V& val (const K &key) const
    Return the value associated with the key
    [more]void copy (const EST_THash<K, V> &from)
    Copy all entries
    [more]void map (void (*func)(K&, V&))
    Apply <parameter>func</parameter> to each entry in the table
    [more]int add_item (const K &key, const V &value, int no_search = 0)
    Add an entry to the table
    [more]int remove_item (const K &rkey, int quiet = 0)
    Remove an entry from the table
    [more]EST_THash<K,V> & operator = (const EST_THash<K, V> &from)
    Assignment is a copy operation
    [more]void dump (ostream &stream, int all=0)
    Print the table to <parameter>stream</parameter> in a human readable format


    Inherited from EST_HashFunctions:

    Public Methods

    ostatic unsigned int DefaultHash(const void* data, size_t size, unsigned int n)
    ostatic unsigned int StringHash(const EST_String &key, unsigned int size)


    Documentation

    An open hash table. The number of buckets should be set to allow enough space that there are relatively few entries per bucket on average.
    o EST_THash(int size, unsigned int (*hash_function)(const K &key, unsigned int size)= NULL)
    Create a table with the given number of buckets. Optionally setting a custom hash function.

    o EST_THash(const EST_THash<K, V> &from)
    Create a copy

    o ~EST_THash(void)
    Destroy the table

    ovoid clear(void)
    Empty the table

    ounsigned int num_entries(void) const
    Return the total number of entries in the table

    oint present(const K &key) const
    Does the key have an entry?

    oV& val(const K &key, int &found) const
    Return the value associated with the key. <parameter>found</parameter> is set to whether such an entry was found.

    oV& val(const K &key) const
    Return the value associated with the key

    ovoid copy(const EST_THash<K, V> &from)
    Copy all entries

    ovoid map(void (*func)(K&, V&))
    Apply <parameter>func</parameter> to each entry in the table

    oint add_item(const K &key, const V &value, int no_search = 0)
    Add an entry to the table

    oint remove_item(const K &rkey, int quiet = 0)
    Remove an entry from the table

    oEST_THash<K,V> & operator = (const EST_THash<K, V> &from)
    Assignment is a copy operation

    ovoid dump(ostream &stream, int all=0)
    Print the table to <parameter>stream</parameter> in a human readable format

    o Pair Iteration
    This iterator steps through the table returning key-value pairs.
    Friends:
    class EST_TStructIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> >
    class EST_TRwStructIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> >
    class EST_TIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> >
    class EST_TRwIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> >

    ostruct IPointer_s
    A position in the table is given by a bucket number and a pointer into the bucket

    ovoid skip_blank(IPointer &ip) const
    Shift to point at something

    ovoid point_to_first(IPointer &ip) const
    Go to start of the table

    ovoid move_pointer_forwards(IPointer &ip) const
    Move pointer forwards, at the end of the bucket, move down

    obool points_to_something(const IPointer &ip) const
    We are at the end if the pointer ever becomes NULL

    oEST_Hash_Pair<K, V> & points_at(const IPointer &ip)
    Return the contents of this entry

    otypedef EST_Hash_Pair<K, V> Entry
    An entry returned by the iterator is a key value pair

    otypedef EST_TStructIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> > Entries
    Give the iterator a sensible name

    o Key Iteration
    This iterator steps through the table returning just keys.
    Friends:
    class EST_TIterator< EST_THash<K, V>, IPointer_k, K >
    class EST_TRwIterator< EST_THash<K, V>, IPointer_k, K >

    ostruct IPointer_k_s
    A position in the table is given by a bucket number and a pointer into the bucket

    ovoid skip_blank(IPointer_k &ip) const
    Shift to point at something

    ovoid point_to_first(IPointer_k &ip) const
    Go to start of the table

    ovoid move_pointer_forwards(IPointer_k &ip) const
    Move pointer forwards, at the end of the bucket, move down

    obool points_to_something(const IPointer_k &ip) const
    We are at the end if the pointer ever becomes NULL

    oK& points_at(const IPointer_k &ip)
    Return the key of this entry

    otypedef K KeyEntry
    An entry returned by this iterator is just a key

    otypedef EST_TIterator< EST_THash<K, V>, IPointer_k, K > KeyEntries
    Give the iterator a sensible name


    Direct child classes:
    EST_TStringHash

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TStringHash.html0100644001741100001440000002257507327543062020715 0ustar awbusers template<class V> class EST_TStringHash

    In file ../include/EST_THash.h:

    template<class V> class EST_TStringHash

    A specialised hash table for when the key is an EST_String.

    Inheritance:


    Public Methods

    [more] EST_TStringHash (int size)
    Create a string hash table of <parameter>size</parameter> buckets

    Public

    [more]typedef EST_Hash_Pair<EST_String, V> Entry
    An entry returned by the iterator is a key value pair
    [more]typedef EST_TStructIterator< EST_THash<EST_String, V>, IPointer, EST_Hash_Pair<EST_String, V> > Entries
    Give the iterator a sensible name


    Inherited from EST_THash:

    Public Classes

    Pair Iteration

    [more]struct IPointer_s
    A position in the table is given by a bucket number and a pointer into the bucket
    [more]void skip_blank(IPointer &ip) const
    Shift to point at something
    [more]void point_to_first(IPointer &ip) const
    Go to start of the table
    [more]void move_pointer_forwards(IPointer &ip) const
    Move pointer forwards, at the end of the bucket, move down
    [more]bool points_to_something(const IPointer &ip) const
    We are at the end if the pointer ever becomes NULL
    [more]EST_Hash_Pair<K, V> & points_at(const IPointer &ip)
    Return the contents of this entry
    [more]typedef EST_Hash_Pair<K, V> Entry
    An entry returned by the iterator is a key value pair
    [more]typedef EST_TStructIterator< EST_THash<K, V>, IPointer, EST_Hash_Pair<K, V> > Entries
    Give the iterator a sensible name

    Key Iteration

    [more]struct IPointer_k_s
    A position in the table is given by a bucket number and a pointer into the bucket
    [more]void skip_blank(IPointer_k &ip) const
    Shift to point at something
    [more]void point_to_first(IPointer_k &ip) const
    Go to start of the table
    [more]void move_pointer_forwards(IPointer_k &ip) const
    Move pointer forwards, at the end of the bucket, move down
    [more]bool points_to_something(const IPointer_k &ip) const
    We are at the end if the pointer ever becomes NULL
    [more]K& points_at(const IPointer_k &ip)
    Return the key of this entry
    [more]typedef K KeyEntry
    An entry returned by this iterator is just a key
    [more]typedef EST_TIterator< EST_THash<K, V>, IPointer_k, K > KeyEntries
    Give the iterator a sensible name

    Public Methods

    ovoid clear(void)
    ounsigned int num_entries(void) const
    oint present(const K &key) const
    oV& val(const K &key, int &found) const
    oV& val(const K &key) const
    ovoid copy(const EST_THash<K, V> &from)
    ovoid map(void (*func)(K&, V&))
    oint add_item(const K &key, const V &value, int no_search = 0)
    oint remove_item(const K &rkey, int quiet = 0)
    oEST_THash<K,V> & operator = (const EST_THash<K, V> &from)
    ovoid dump(ostream &stream, int all=0)


    Inherited from EST_HashFunctions:

    Public Methods

    ostatic unsigned int DefaultHash(const void* data, size_t size, unsigned int n)
    ostatic unsigned int StringHash(const EST_String &key, unsigned int size)


    Documentation

    A specialised hash table for when the key is an EST_String.

    This is just a version of <classname>EST_THash</classname> which has a different default hash function.

    o EST_TStringHash(int size)
    Create a string hash table of <parameter>size</parameter> buckets

    otypedef EST_Hash_Pair<EST_String, V> Entry
    An entry returned by the iterator is a key value pair

    otypedef EST_TStructIterator< EST_THash<EST_String, V>, IPointer, EST_Hash_Pair<EST_String, V> > Entries
    Give the iterator a sensible name


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/KeyEntries.html0100644001741100001440000000332007327543062020051 0ustar awbusers typedef EST_TIterator< EST_THash<EST_String, V>, IPointer_k, EST_String > KeyEntries

    In file ../include/EST_THash.h:

    typedef EST_TIterator< EST_THash<EST_String, V>, IPointer_k, EST_String > KeyEntries

    Give the iterator a sensible name

    Documentation

    Give the iterator a sensible name

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/DefaultHashFunction.html0100644001741100001440000000343607327543062021675 0ustar awbusers inline static unsigned int DefaultHashFunction

    In file ../include/EST_THash.h:

    inline static unsigned int DefaultHashFunction

    (const void* data,
      size_t size,
      unsigned int n)

    The default hash function used by <classname>EST_THash</classname>

    Documentation

    The default hash function used by <classname>EST_THash</classname>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TrackMap.html0100644001741100001440000003022707327543062020212 0ustar awbusers class EST_TrackMap

    In file ../include/EST_TrackMap.h:

    class EST_TrackMap

    Track maps provide a mapping from symbolic track names to the actual position of the information within a track frame.

    Inheritance:


    Public Classes

    [more] ChannelMapping

    [more]struct ChannelMappingElement
    structure for the table
    [more] Table of type to position pairs

    Public Methods

    [more] EST_TrackMap (void)
    Default constructor
    [more] EST_TrackMap (EST_TrackMap &from, int refcount)
    Copy the mapping
    [more] EST_TrackMap (struct ChannelMappingElement map[])
    Create from static table
    [more]void clear (void)
    Empty the map
    [more]void set (EST_ChannelType type, short pos)
    Record the position of a channel
    [more]short get (EST_ChannelType type) const
    Get the position of a channel
    [more]short operator() (EST_ChannelType type) const
    Get the position of a channel
    [more]bool has_channel (EST_ChannelType type) const
    Does the mapping contain a position for this channel?
    [more]short last_channel (void) const
    Returns the index of the last known channel
    [more]EST_ChannelType channel_type (unsigned short channel) const
    Returns the type of the channel at the given position

    Public

    [more]#define NO_SUCH_CHANNEL (-1)
    Returned if we ask for a channel not in the map

    Protected Methods

    [more] EST_TrackMap (int refcount)
    Creation function used by friends to create refcounted maps
    [more] EST_TrackMap (const EST_TrackMap* parent, int offset, int refcount)
    Creation function used by friends to create sub-trak maps
    [more]void copy (EST_TrackMap &from)
    copy an exiting map
    [more]void init (void)
    Initialise the map

    Protected

    [more]#define EST_TM_REFCOUNTED (1)
    Pass to creation function to turn on refcounting


    Inherited from EST_Handleable:


    Documentation

    Track maps provide a mapping from symbolic track names to the actual position of the information within a track frame. The symbolic names are defined by the EST_ChannelType enumerated type.

    Track maps can be declared statically by code which always uses tracks of a given style, or they can be built at run time as is done by lpc_analysis to record whichinformation the user has requested. Finally they can be constructed by the Track itself from the names of the channels, for instance when a track has just been read in from a file.

    o ChannelMapping
    An auxiliary type used just to define static EST_TrackMaps. Defining one of these and then converting it to an EST_TrackMap is, unfortunatly, the only way C++ allows to define a constant EST_TrackMap.

    ostruct ChannelMappingElement
    structure for the table

    o Table of type to position pairs
    Table of type to position pairs

    o#define NO_SUCH_CHANNEL(-1)
    Returned if we ask for a channel not in the map

    o#define EST_TM_REFCOUNTED(1)
    Pass to creation function to turn on refcounting

    o EST_TrackMap(int refcount)
    Creation function used by friends to create refcounted maps

    o EST_TrackMap(const EST_TrackMap* parent, int offset, int refcount)
    Creation function used by friends to create sub-trak maps

    ovoid copy(EST_TrackMap &from)
    copy an exiting map

    ovoid init(void)
    Initialise the map

    o EST_TrackMap(void)
    Default constructor

    o EST_TrackMap(EST_TrackMap &from, int refcount)
    Copy the mapping

    o EST_TrackMap(struct ChannelMappingElement map[])
    Create from static table

    ovoid clear(void)
    Empty the map

    ovoid set(EST_ChannelType type, short pos)
    Record the position of a channel

    oshort get(EST_ChannelType type) const
    Get the position of a channel

    oshort operator() (EST_ChannelType type) const
    Get the position of a channel

    obool has_channel(EST_ChannelType type) const
    Does the mapping contain a position for this channel?

    oshort last_channel(void) const
    Returns the index of the last known channel

    oEST_ChannelType channel_type(unsigned short channel) const
    Returns the type of the channel at the given position


    This class has no child classes.
    Friends:
    class EST_Track
    ostream& operator << (ostream &st, const EST_TrackMap &m)
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:
    See Also:
    EST_Track
    EST_ChannelType
    EST_TrackMap:example

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelNameMap.html0100644001741100001440000000333607327543062021320 0ustar awbusers typedef EST_TNamedEnum<EST_ChannelType> EST_ChannelNameMap

    In file ../include/EST_TrackMap.h:

    typedef EST_TNamedEnum<EST_ChannelType> EST_ChannelNameMap

    Channel name maps map textual names for track channels to symbolic names, they are just a special case of named enums

    Documentation

    Channel name maps map textual names for track channels to symbolic names, they are just a special case of named enums

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelNameTable.html0100644001741100001440000000322607327543062021630 0ustar awbusers typedef EST_TValuedEnumDefinition<EST_ChannelType, const char *, NO_INFO> EST_ChannelNameTable

    In file ../include/EST_TrackMap.h:

    typedef EST_TValuedEnumDefinition<EST_ChannelType, const char *, NO_INFO> EST_ChannelNameTable

    Table type used to create EST_ChannelNameMaps

    Documentation

    Table type used to create EST_ChannelNameMaps

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_default_channel_names.html0100644001741100001440000000307707327543062023012 0ustar awbusers extern EST_ChannelNameMap EST_default_channel_names

    In file ../include/EST_TrackMap.h:

    extern EST_ChannelNameMap EST_default_channel_names

    Definition of standard names we use for channels

    Documentation

    Definition of standard names we use for channels

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/esps_channel_names.html0100644001741100001440000000307507327543062021623 0ustar awbusers extern EST_ChannelNameMap esps_channel_names

    In file ../include/EST_TrackMap.h:

    extern EST_ChannelNameMap esps_channel_names

    Definition of the names ESPS programs use for channels

    Documentation

    Definition of the names ESPS programs use for channels

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ChannelTypes.html0100644001741100001440000000354107327543062020371 0ustar awbusers Channel Types

    Channel Types

    o EST_CoefficientType
    Symbolic names for coefficient types.
    o Channel Type Numberring Scheme
    o EST_ChannelType
    Symbolic names for track channels.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/old_tbuffer.html0100644001741100001440000000303607327543063020267 0ustar awbusers struct old_tbuffer

    In file ../include/EST_TBuffer.h:

    struct old_tbuffer

    Structure to remember old buffers for re-use.

    Documentation

    Structure to remember old buffers for re-use.
    See Also:
    EST_TBuffer.h

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_CoefficientType.html0100644001741100001440000001233607327543062021571 0ustar awbusers enum EST_CoefficientType

    In file ../include/EST_ChannelType.h:

    enum EST_CoefficientType

    Symbolic names for coefficient types.

    [more] cot_lpc
    Linear prediction filter
    [more] cot_first
    guaranteed to be the first known type
    [more] cot_reflection
    reflection coefficients
    [more] cot_cepstrum
    Cepstral coefficients
    [more] cot_melcepstrum
    Mel Scale Cepstrum
    [more] cot_fbank
    Mel Scale filter bank
    [more] cot_lsf
    Line spectral pairs
    [more] cot_tubearea
    Tube areas for filter
    [more] cot_filter
    Unknown filter type
    [more] cot_user1
    Free for experimentation
    [more] cot_user2
    Free for experimentation
    [more] cot_free
    Guaranteed to be one more than last legal coefficient type


    Documentation

    Symbolic names for coefficient types.

    Used to record what kinds of information are in a track and anywhere else we need to refer to coefficient types.

    o cot_lpc
    Linear prediction filter

    o cot_first
    guaranteed to be the first known type

    o cot_reflection
    reflection coefficients

    o cot_cepstrum
    Cepstral coefficients

    o cot_melcepstrum
    Mel Scale Cepstrum

    o cot_fbank
    Mel Scale filter bank

    o cot_lsf
    Line spectral pairs

    o cot_tubearea
    Tube areas for filter

    o cot_filter
    Unknown filter type

    o cot_user1
    Free for experimentation

    o cot_user2
    Free for experimentation

    o cot_free
    Guaranteed to be one more than last legal coefficient type

    See Also:
    EST_ChannelType

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ChannelTypeNumberringScheme.html0100644001741100001440000001034707327543062023366 0ustar awbusers Channel Type Numberring Scheme

    Channel Type Numberring Scheme

    o EST_ChannelTypeCT
    extract the coefficient type
    o EST_ChannelTypeD
    extract the number of differentiations
    o EST_ChannelTypeSE
    extract the start/end flag
    o EST_ChannelTypeStart
    get start from end
    o EST_ChannelTypeEnd
    get end from start
    o EST_ChannelTypeIncD
    differentiate once
    o EST_ChannelTypeDelta
    differentiate N times
    o EST_ChannelTypeDecD
    integrate once
    o EST_CoefChannelId
    Build a number representing a channel type for a coeficient type.
    o EST_DiffChannelId
    Build a number representing a channel type for a single value which can N = count starting from 0 D = Number of levels of differentiation.
    o EST_ChannelId
    Build a number representing a channel type for a simple value such as length or voicing probability

    Channel types are given numbers containing the following information:
    • A numeric index.
    • A Number of differentiations 0-2
    • 0 for start, 1 for end
    Things which do not require all these features are packed in according to the following rules:
    • Single values which can be differentiated are paired as if they were start and end positions of an unuknown type of coefficient.
    • Single vaules which can't be differentiated are put in the positions where the 3rd derivatives would logically be found.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeCT.html0100644001741100001440000000270707327543062021153 0ustar awbusers #define EST_ChannelTypeCT

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeCT

    (T)

    extract the coefficient type

    Documentation

    extract the coefficient type

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeD.html0100644001741100001440000000273107327543063021026 0ustar awbusers #define EST_ChannelTypeD

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeD

    (T)

    extract the number of differentiations

    Documentation

    extract the number of differentiations

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeSE.html0100644001741100001440000000270307327543063021151 0ustar awbusers #define EST_ChannelTypeSE

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeSE

    (T)

    extract the start/end flag

    Documentation

    extract the start/end flag

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeStart.html0100644001741100001440000000267107327543063021743 0ustar awbusers #define EST_ChannelTypeStart

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeStart

    (T)

    get start from end

    Documentation

    get start from end

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeEnd.html0100644001741100001440000000266507327543063021357 0ustar awbusers #define EST_ChannelTypeEnd

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeEnd

    (T)

    get end from start

    Documentation

    get end from start

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeIncD.html0100644001741100001440000000266707327543063021470 0ustar awbusers #define EST_ChannelTypeIncD

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeIncD

    (T)

    differentiate once

    Documentation

    differentiate once

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeDelta.html0100644001741100001440000000270307327543063021673 0ustar awbusers #define EST_ChannelTypeDelta

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeDelta

    (T, N)

    differentiate N times

    Documentation

    differentiate N times

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelTypeDecD.html0100644001741100001440000000265707327543063021451 0ustar awbusers #define EST_ChannelTypeDecD

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelTypeDecD

    (T)

    integrate once

    Documentation

    integrate once

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_CoefChannelId.html0100644001741100001440000000316007327543063021127 0ustar awbusers #define EST_CoefChannelId

    In file ../include/EST_ChannelType.h:

    #define EST_CoefChannelId

    (CT, D, SE)

    Build a number representing a channel type for a coeficient type.

    Documentation

    Build a number representing a channel type for a coeficient type.

    CT = coefficient type D = Number of levels of differentiation. SE = Start=0 end=1

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_DiffChannelId.html0100644001741100001440000000327307327543063021130 0ustar awbusers #define EST_DiffChannelId

    In file ../include/EST_ChannelType.h:

    #define EST_DiffChannelId

    (N, D)

    Build a number representing a channel type for a single value which can N = count starting from 0 D = Number of levels of differentiation.

    Documentation

    Build a number representing a channel type for a single value which can N = count starting from 0 D = Number of levels of differentiation. be differentiated.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelId.html0100644001741100001440000000311507327543063020332 0ustar awbusers #define EST_ChannelId

    In file ../include/EST_ChannelType.h:

    #define EST_ChannelId

    (N)

    Build a number representing a channel type for a simple value such as length or voicing probability

    Documentation

    Build a number representing a channel type for a simple value such as length or voicing probability

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ChannelType.html0100644001741100001440000001444007327543063020722 0ustar awbusers enum EST_ChannelType

    In file ../include/EST_ChannelType.h:

    enum EST_ChannelType

    Symbolic names for track channels.

    [more] channel_unknown
    Value to return for errors, never occurs in TrackMaps
    [more] channel_order
    order of analysis
    [more] first_channel_type
    So we know how many there are
    [more] channel_peak
    Peak amplitude
    [more] channel_duration
    Duration of section of signal
    [more] channel_length
    Length of section in samples
    [more] channel_offset
    Offset from frame center to center of window
    [more] channel_voiced
    Voicing decision
    [more] channel_frame
    Number of related frame in another track
    [more] channel_time
    Time in seconds this frame refers to
    [more] channel_power
    RMS power of section of signal
    [more] channel_energy
    RMS energy of section of signal
    [more] channel_f0
    F0 in Hz
    [more] num_channel_types
    Can be used to size arrays etc


    Documentation

    Symbolic names for track channels. Used in track maps to label channels so they can be accessed without knowing exactly where in the track they are.

    o channel_unknown
    Value to return for errors, never occurs in TrackMaps

    o channel_order
    order of analysis

    o first_channel_type
    So we know how many there are

    o channel_peak
    Peak amplitude

    o channel_duration
    Duration of section of signal

    o channel_length
    Length of section in samples

    o channel_offset
    Offset from frame center to center of window

    o channel_voiced
    Voicing decision

    o channel_frame
    Number of related frame in another track

    o channel_time
    Time in seconds this frame refers to

    o channel_power
    RMS power of section of signal

    o channel_energy
    RMS energy of section of signal

    o channel_f0
    F0 in Hz

    o num_channel_types
    Can be used to size arrays etc

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:
    See Also:
    EST_CoefficientType
    EST_TrackMap
    EST_Track
    EST_TrackMap:example

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_error_behaviour.html0100644001741100001440000000572407327543063021712 0ustar awbusers enum EST_error_behaviour

    In file ../include/EST_error.h:

    enum EST_error_behaviour

    Defines the attitude of a call to possible fatal errors.

    [more] est_errors_checked
    Function will not normally return an error unless something really bad has gone wrong.
    [more] est_errors_allowed
    Function will throw errors when feature doesn't exist
    [more] est_errors_never
    No fatal errors allowed.


    Documentation

    Defines the attitude of a call to possible fatal errors. Passing one of these values to a function tells it how much care it needs to take to avoid calls to EST_error.

    These need snappier names. the numbers are their for historical reasons

    o est_errors_checked
    Function will not normally return an error unless something really bad has gone wrong. For feature lookup, will return default value if feature doesn't exist

    o est_errors_allowed
    Function will throw errors when feature doesn't exist

    o est_errors_never
    No fatal errors allowed. Function must catch all EST_error calls. Will *always* return a default value.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TBuffer.h.html0100644001741100001440000000514607327543063020276 0ustar awbusers EST_TBuffer.h

    EST_TBuffer.h

    o TBUFFER_N_OLD
    How many chunks of memory to keep around for re-use
    o TBUFFER_DEFAULT_SIZE
    Initial size for buffers created with no size specified
    o TBUFFER_DEFAULT_STEP
    Amount to increment buffer size by
    o old_tbuffer
    Structure to remember old buffers for re-use.
    o EST_TBuffer
    Extending buffer class.

    Extending buffers, ie arrays which grow as needed. I got fed up of writing equivalent code all over the place.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:
    See Also:
    EST_TBuffer

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/TBUFFER_N_OLD.html0100644001741100001440000000275207327543063020050 0ustar awbusers #define TBUFFER_N_OLD

    In file ../include/EST_TBuffer.h:

    #define TBUFFER_N_OLD

    (10)

    How many chunks of memory to keep around for re-use

    Documentation

    How many chunks of memory to keep around for re-use

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/TBUFFER_DEFAULT_SIZE.html0100644001741100001440000000276407327543063021076 0ustar awbusers #define TBUFFER_DEFAULT_SIZE

    In file ../include/EST_TBuffer.h:

    #define TBUFFER_DEFAULT_SIZE

    Initial size for buffers created with no size specified

    Documentation

    Initial size for buffers created with no size specified

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/TBUFFER_DEFAULT_STEP.html0100644001741100001440000000271207327543063021070 0ustar awbusers #define TBUFFER_DEFAULT_STEP

    In file ../include/EST_TBuffer.h:

    #define TBUFFER_DEFAULT_STEP

    Amount to increment buffer size by

    Documentation

    Amount to increment buffer size by

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TBuffer.html0100644001741100001440000001746407327543063020056 0ustar awbusers template<class TYPE> class EST_TBuffer

    In file ../include/EST_TBuffer.h:

    template<class TYPE> class EST_TBuffer

    Extending buffer class.

    Public Methods

    [more] EST_TBuffer (unsigned int size=TBUFFER_DEFAULT_SIZE, int step=TBUFFER_DEFAULT_STEP)
    Create with size and increment.
    [more] ~EST_TBuffer (void)
    Destructor.
    [more]unsigned int length (void) const
    Current available space
    [more]void set (const TYPE &set_to, int howmany=-1)
    Set to the given value.
    [more] Methods to make sure there is enough space.

    [more]void ensure (unsigned int req_size)
    Extend if needed, copying existing data
    [more]void ensure (unsigned int req_size, bool copy)
    Make sure there is enough space, copying if requested
    [more]void ensure (unsigned int req_size, const TYPE &set_to, int howmany=-1)
    Make sure there is enough space, setting to a known value

    [more] Access to the memory itself.

    [more]TYPE* b (void)
    Simple access as a pointer
    [more]const TYPE* b (void) const
    Read-only access when the EST_TBuffer is a constant
    [more]const TYPE& operator() (unsigned int i) const
    operator () is simple access


    Documentation

    Extending buffer class. <p> This class provides the convinience of arrays which change in size at run time rather more efficiantly than the full EST_TVector class would. <p> Buffers can only be expanded and when a buffer is no longer needed (i.e. when the variable goes out of scope) the memory is not deleted, rather it is saved for re-use as a new buffer. <p> A typical use would be a buffer to hold a windowed section of a signal inside a signal processing loop where the size of the window changes from iteration to iteration.

    o EST_TBuffer(unsigned int size=TBUFFER_DEFAULT_SIZE, int step=TBUFFER_DEFAULT_STEP)
    Create with size and increment. Increment can be negative for percentage growth. <p> Tries to use a buffer from EST_old_buffers[] if there is one which is suitable
    See Also:
    EST_old_buffers

    o ~EST_TBuffer(void)
    Destructor. Places the memory in EST_old_buffers[] for re-use if there is room.

    ounsigned int length(void) const
    Current available space

    ovoid set(const TYPE &set_to, int howmany=-1)
    Set to the given value. By default sets all values.

    o Methods to make sure there is enough space.

    ovoid ensure(unsigned int req_size)
    Extend if needed, copying existing data

    ovoid ensure(unsigned int req_size, bool copy)
    Make sure there is enough space, copying if requested

    ovoid ensure(unsigned int req_size, const TYPE &set_to, int howmany=-1)
    Make sure there is enough space, setting to a known value

    o Access to the memory itself.

    oTYPE* b(void)
    Simple access as a pointer

    oconst TYPE* b(void) const
    Read-only access when the EST_TBuffer is a constant

    oconst TYPE& operator() (unsigned int i) const
    operator () is simple access


    This class has no child classes.
    See Also:
    EST_TBuffer.h, Associated definitions.
    EST_TVector, class to use for more general uses.
    lpc_analyse, example of use.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Val.html0100644001741100001440000005307107327543063017235 0ustar awbusers class EST_Val

    In file ../include/EST_Val.h:

    class EST_Val

    The EST_Val class is a container class, used to store a single item which can be an int, float, string or other user-defined class.

    Public Methods

    [more] Constructor and Destructor functions

    [more] EST_Val ()
    Default constructor
    [more] EST_Val (const EST_Val &val)
    Copy constructor for another EST_Val
    [more] EST_Val (const int i)
    Copy constructor for an int
    [more] EST_Val (const float f)
    Copy constructor for a float
    [more] EST_Val (const double d)
    Copy constructor for a double
    [more] EST_Val (const EST_String &s)
    Copy constructor for a string
    [more] EST_Val (const char* s)
    Copy constructor for a string literal
    [more] ~EST_Val (void)
    Destructor

    [more] Getting cast values

    [more]const val_type type (void) const
    returns the type that the val is currently holding
    [more]const int Int (void) const
    returns the value, cast as an int
    [more]const int I (void) const
    returns the value, cast as an int
    [more]const float Float (void) const
    returns the value, cast as an float
    [more]const float F (void) const
    returns the value, cast as an float
    [more]const EST_String& String (void) const
    returns the value, cast as an string
    [more]const EST_String& string (void) const
    returns the value, cast as an string
    [more]const EST_String& S (void) const
    returns the value, cast as an string
    [more]const EST_String& string_only (void) const
    returns the value, cast as an string

    [more] Setting values

    [more]EST_Val& operator= (const int i)
    Assignment of val to an int
    [more]EST_Val& operator= (const float f)
    Assignment of val to a float
    [more]EST_Val& operator= (const double d)
    Assignment of val to a double
    [more]EST_Val& operator= (const EST_String &s)
    Assignment of val to a string
    [more]EST_Val& operator= (const char* s)
    Assignment of val to a string literal
    [more]EST_Val& operator= (const EST_Val &c)
    Assignment of val to another val

    [more] Equivalence test

    [more]int operator == (const EST_Val &a) const
    Test whether val is equal to a
    [more]int operator == (const EST_String &a) const
    Test whether val is equal to the string a
    [more]int operator == (const char* a) const
    Test whether val is equal to the char * a
    [more]int operator == (const int &i) const
    Test whether val is equal to the int a
    [more]int operator == (const float &f) const
    Test whether val is equal to the float a
    [more]int operator == (const double &d) const
    Test whether val is equal to the double a
    [more]int operator != (const EST_Val &a) const
    Test whether val is not equal to the val a
    [more]int operator != (const EST_String &a) const
    Test whether val is not equal to the string a
    [more]int operator != (const char* a) const
    Test whether val is not equal to the char * a
    [more]int operator != (const int &i) const
    Test whether val is not equal to the int a
    [more]int operator != (const float &f) const
    Test whether val is not equal to the float a
    [more]int operator != (const double &d) const
    Test whether val is not equal to the double float a
    [more] Automatic casting

    [more] operator int () const
    Automatically cast val as an int
    [more] operator float () const
    Automatically cast val as an float
    [more] operator EST_String () const
    Automatically cast val as an string

    [more] if (a.type() == val_unset)


    Documentation

    The EST_Val class is a container class, used to store a single item which can be an int, float, string or other user-defined class. It is often used as the base item in the <link linkend="est-features">EST_Features</link> class, to enable features to take on values of different types.
    o Constructor and Destructor functions

    o EST_Val()
    Default constructor

    o EST_Val(const EST_Val &val)
    Copy constructor for another EST_Val

    o EST_Val(const int i)
    Copy constructor for an int

    o EST_Val(const float f)
    Copy constructor for a float

    o EST_Val(const double d)
    Copy constructor for a double

    o EST_Val(const EST_String &s)
    Copy constructor for a string

    o EST_Val(const char* s)
    Copy constructor for a string literal

    o ~EST_Val(void)
    Destructor

    o Getting cast values

    oconst val_type type(void) const
    returns the type that the val is currently holding

    oconst int Int(void) const
    returns the value, cast as an int

    oconst int I(void) const
    returns the value, cast as an int

    oconst float Float(void) const
    returns the value, cast as an float

    oconst float F(void) const
    returns the value, cast as an float

    oconst EST_String& String(void) const
    returns the value, cast as an string

    oconst EST_String& string(void) const
    returns the value, cast as an string

    oconst EST_String& S(void) const
    returns the value, cast as an string

    oconst EST_String& string_only(void) const
    returns the value, cast as an string

    o Setting values

    oEST_Val& operator=(const int i)
    Assignment of val to an int

    oEST_Val& operator=(const float f)
    Assignment of val to a float

    oEST_Val& operator=(const double d)
    Assignment of val to a double

    oEST_Val& operator=(const EST_String &s)
    Assignment of val to a string

    oEST_Val& operator=(const char* s)
    Assignment of val to a string literal

    oEST_Val& operator=(const EST_Val &c)
    Assignment of val to another val

    o Equivalence test
    Friends:
    ostream& operator << (ostream &s, const EST_Val &a)

    oint operator ==(const EST_Val &a) const
    Test whether val is equal to a

    oint operator ==(const EST_String &a) const
    Test whether val is equal to the string a

    oint operator ==(const char* a) const
    Test whether val is equal to the char * a

    oint operator ==(const int &i) const
    Test whether val is equal to the int a

    oint operator ==(const float &f) const
    Test whether val is equal to the float a

    oint operator ==(const double &d) const
    Test whether val is equal to the double a

    oint operator !=(const EST_Val &a) const
    Test whether val is not equal to the val a

    oint operator !=(const EST_String &a) const
    Test whether val is not equal to the string a

    oint operator !=(const char* a) const
    Test whether val is not equal to the char * a

    oint operator !=(const int &i) const
    Test whether val is not equal to the int a

    oint operator !=(const float &f) const
    Test whether val is not equal to the float a

    oint operator !=(const double &d) const
    Test whether val is not equal to the double float a

    o Automatic casting

    o operator int() const
    Automatically cast val as an int

    o operator float() const
    Automatically cast val as an float

    o operator EST_String() const
    Automatically cast val as an string

    o if(a.type() == val_unset)


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_bracketed_string.html0100644001741100001440000001364607327543063022031 0ustar awbusers class EST_bracketed_string

    In file ../include/EST_SCFG.h:

    class EST_bracketed_string

    This class represents a bracted string used in training of SCFGs.

    Public Methods

    [more] EST_bracketed_string ()
    [more] EST_bracketed_string (LISP string)
    [more] ~EST_bracketed_string ()
    [more]void set_bracketed_string (LISP string)
    [more]int length () const
    [more]LISP string () const
    [more]const EST_String symbol_at (int i) const
    The nth symbol in the string
    [more]int valid (int i, int k) const
    If a bracketing from i to k is valid in string
    [more]int operator != (const EST_bracketed_string &a) const
    [more] (void)


    Documentation

    This class represents a bracted string used in training of SCFGs.

    An object in this class builds an index of valid bracketing of the string. Thus offering both a tree like access and direct access to the leafs of the tree. The definition of ``valid bracketing'' is any substring


    that doesn't cross any brackets.
    o EST_bracketed_string()

    o EST_bracketed_string(LISP string)

    o ~EST_bracketed_string()

    ovoid set_bracketed_string(LISP string)

    oint length() const

    oLISP string() const

    oconst EST_String symbol_at(int i) const
    The nth symbol in the string

    oint valid(int i, int k) const
    If a bracketing from i to k is valid in string

    oint operator !=(const EST_bracketed_string &a) const

    o (void)


    This class has no child classes.
    Friends:
    ostream& operator << (ostream &s, const EST_bracketed_string &a)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SCFG_Rule.html0100644001741100001440000001637107327543063020226 0ustar awbusers class EST_SCFG_Rule

    In file ../include/EST_SCFG.h:

    class EST_SCFG_Rule

    A stochastic context free grammar rule.

    Public Methods

    [more] EST_SCFG_Rule ()
    [more] EST_SCFG_Rule (const EST_SCFG_Rule &r)
    [more] EST_SCFG_Rule (double prob, int p, int m)
    Create a unary rule
    [more] EST_SCFG_Rule (double prob, int p, int q, int r)
    Create a binary rule
    [more]double prob () const
    The rule's probability
    [more]void set_prob (double p)
    set the probability
    [more]est_scfg_rtype type () const
    rule type
    [more]int mother () const
    [more]int daughter1 () const
    In a unary rule this is a terminal, in a binary rule it is a nonterminal
    [more]int daughter2 () const
    [more]void set_rule (double prob, int p, int m)
    [more]void set_rule (double prob, int p, int q, int r)


    Documentation

    A stochastic context free grammar rule.

    At present only two types of rule are supported: est_scfg_binary_rule and est_scfg_unary_rule. This is sufficient for the representation of grammars in Chomsky Normal Form. Each rule also has a probability associated with it. Terminals and noterminals are represented as ints using the EST_Discretes in EST_SCFG to reference the actual alphabets.

    Although this class includes a ``probability'' nothing in the rule itself enforces it to be a true probability. It is responsibility of the classes that use this rule to enforce that condition if desired.

    o EST_SCFG_Rule()

    o EST_SCFG_Rule(const EST_SCFG_Rule &r)

    o EST_SCFG_Rule(double prob, int p, int m)
    Create a unary rule

    o EST_SCFG_Rule(double prob, int p, int q, int r)
    Create a binary rule

    odouble prob() const
    The rule's probability

    ovoid set_prob(double p)
    set the probability

    oest_scfg_rtype type() const
    rule type

    oint mother() const

    oint daughter1() const
    In a unary rule this is a terminal, in a binary rule it is a nonterminal

    oint daughter2() const

    ovoid set_rule(double prob, int p, int m)

    ovoid set_rule(double prob, int p, int q, int r)


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): October 1997

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SCFG.html0100644001741100001440000002712107327543063017232 0ustar awbusers class EST_SCFG

    In file ../include/EST_SCFG.h:

    class EST_SCFG

    A class representing a stochastic context free grammar (SCFG).

    Inheritance:


    Public Methods

    [more] Constructor and initialisation functions

    [more] EST_SCFG (LISP rules)
    Initialize from a set of rules

    [more] utility functions

    [more]void set_rules (LISP rules)
    Set (or reset) rules from external source after construction
    [more]LISP get_rules ()
    Return rules as LISP list
    [more]SCFGRuleList rules
    The rules themselves
    [more]void find_terms_nonterms (EST_StrList &nt, EST_StrList &t, LISP rules)
    Find the terminals and nonterminals in the given grammar, adding them to the appropriate given string lists
    [more]EST_String nonterminal (int p) const
    Convert nonterminal index to string form
    [more]EST_String terminal (int m) const
    Convert terminal index to string form
    [more]int nonterminal (const EST_String &p) const
    Convert nonterminal string to index
    [more]int terminal (const EST_String &m) const
    Convert terminal string to index
    [more]int num_nonterminals () const
    Number of nonterminals
    [more]int num_terminals () const
    Number of terminals
    [more]double prob_B (int p, int q, int r) const
    The rule probability of given binary rule
    [more]double prob_U (int p, int m) const
    The rule probability of given unary rule
    [more]void set_rule_prob_cache ()
    (re-)set rule probability caches

    [more] file i/o functions

    [more]EST_read_status load (const EST_String &filename)
    Load grammar from named file
    [more]EST_write_status save (const EST_String &filename)
    Save current grammar to named file


    Documentation

    A class representing a stochastic context free grammar (SCFG).

    This class includes the representation of the grammar itself and methods for training and testing it against some corpus.

    At presnet of grammars in Chomsky Normal Form are supported. That is rules may be binary or unary. If binary the mother an two daughters are nonterminals, if unary the mother must be nonterminal and daughter a terminal symbol.

    The terminals and nonterminals symbol sets are derived automatically from the LISP representation of the rules at initialization time and are represented as EST_Discretes. The distinguished symbol is assumed to be the first mother of the first rule in the given grammar.

    o Constructor and initialisation functions

    o EST_SCFG(LISP rules)
    Initialize from a set of rules

    o utility functions

    ovoid set_rules(LISP rules)
    Set (or reset) rules from external source after construction

    oLISP get_rules()
    Return rules as LISP list

    oSCFGRuleList rules
    The rules themselves

    ovoid find_terms_nonterms(EST_StrList &nt, EST_StrList &t, LISP rules)
    Find the terminals and nonterminals in the given grammar, adding them to the appropriate given string lists

    oEST_String nonterminal(int p) const
    Convert nonterminal index to string form

    oEST_String terminal(int m) const
    Convert terminal index to string form

    oint nonterminal(const EST_String &p) const
    Convert nonterminal string to index

    oint terminal(const EST_String &m) const
    Convert terminal string to index

    oint num_nonterminals() const
    Number of nonterminals

    oint num_terminals() const
    Number of terminals

    odouble prob_B(int p, int q, int r) const
    The rule probability of given binary rule

    odouble prob_U(int p, int m) const
    The rule probability of given unary rule

    ovoid set_rule_prob_cache()
    (re-)set rule probability caches

    o file i/o functions

    oEST_read_status load(const EST_String &filename)
    Load grammar from named file

    oEST_write_status save(const EST_String &filename)
    Save current grammar to named file


    Direct child classes:
    EST_SCFG_traintest

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SCFG_traintest.html0100644001741100001440000002202107327543063021321 0ustar awbusers class EST_SCFG_traintest

    In file ../include/EST_SCFG.h:

    class EST_SCFG_traintest

    A class used to train (and test) SCFGs is an extention of EST_SCFG.

    Inheritance:


    Public Methods

    [more]void test_corpus ()
    Test the current grammar against the current corpus print summary.
    [more]void test_crossbrackets ()
    Test the current grammar against the current corpus.
    [more]void load_corpus (const EST_String &filename)
    Load a corpus from the given file.
    [more]void train_inout (int passes, int startpass, int checkpoint, int spread, const EST_String &outfile)
    Train a grammar using the loaded corpus.


    Inherited from EST_SCFG:

    Public Methods

    Constructor and initialisation functions

    [more] EST_SCFG(LISP rules)
    Initialize from a set of rules

    utility functions

    [more]void set_rules(LISP rules)
    Set (or reset) rules from external source after construction
    [more]LISP get_rules()
    Return rules as LISP list
    [more]SCFGRuleList rules
    The rules themselves
    [more]void find_terms_nonterms(EST_StrList &nt, EST_StrList &t, LISP rules)
    Find the terminals and nonterminals in the given grammar, adding them to the appropriate given string lists
    [more]EST_String nonterminal(int p) const
    Convert nonterminal index to string form
    [more]EST_String terminal(int m) const
    Convert terminal index to string form
    [more]int nonterminal(const EST_String &p) const
    Convert nonterminal string to index
    [more]int terminal(const EST_String &m) const
    Convert terminal string to index
    [more]int num_nonterminals() const
    Number of nonterminals
    [more]int num_terminals() const
    Number of terminals
    [more]double prob_B(int p, int q, int r) const
    The rule probability of given binary rule
    [more]double prob_U(int p, int m) const
    The rule probability of given unary rule
    [more]void set_rule_prob_cache()
    (re-)set rule probability caches

    file i/o functions

    [more]EST_read_status load(const EST_String &filename)
    Load grammar from named file
    [more]EST_write_status save(const EST_String &filename)
    Save current grammar to named file


    Documentation

    A class used to train (and test) SCFGs is an extention of EST_SCFG.

    This offers an implementation of Pereira and Schabes ``Inside-Outside reestimation from partially bracket corpora.'' ACL 1992.

    A SCFG maybe trained from a corpus (optionally) containing brackets over a series of passes reestimating the grammar probabilities after each pass. This basically extends the EST_SCFG class adding support for a bracket corpus and various indexes for efficient use of the grammar.

    ovoid test_corpus()
    Test the current grammar against the current corpus print summary.

    Cross entropy measure only is given.

    ovoid test_crossbrackets()
    Test the current grammar against the current corpus.

    Sumamry includes percentage of cross bracketing accuracy and percentage of fully correct parses.

    ovoid load_corpus(const EST_String &filename)
    Load a corpus from the given file.

    Each setence in the corpus should be contained in parentheses. Additional paranethesis may be used to denote phrasing within a sentence. The corpus is read using the LISP reader so LISP conventions shold apply, notable single quotes should appear within double quotes.

    ovoid train_inout(int passes, int startpass, int checkpoint, int spread, const EST_String &outfile)
    Train a grammar using the loaded corpus.

    Parameters:
    passes - the number of training passes desired.
    startpass - from which pass to start from
    checkpoint - save the grammar every n passes
    spread - Percentage of corpus to use on each pass, this cycles through the corpus on each pass.


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/scfg_bracketing_only.html0100644001741100001440000000306707327543063022154 0ustar awbusers LISP scfg_bracketing_only

    In file ../include/EST_SCFG.h:

    LISP scfg_bracketing_only

    (LISP parse)

    From a full parse, extract the string with bracketing only

    Documentation

    From a full parse, extract the string with bracketing only

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/count_bracket_crossing.html0100644001741100001440000000344407327543063022531 0ustar awbusers void count_bracket_crossing

    In file ../include/EST_SCFG.h:

    void count_bracket_crossing

    (const EST_bracketed_string &ref,
      const EST_bracketed_string &test,
      EST_SuffStats &vs)

    Cummulate cross bracketing information between ref and test

    Documentation

    Cummulate cross bracketing information between ref and test

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SCFG_Chart_Edge.html0100644001741100001440000000675207327543063021306 0ustar awbusers class EST_SCFG_Chart_Edge

    In file ../include/EST_SCFG_Chart.h:

    class EST_SCFG_Chart_Edge

    An internal class for EST_SCFG_Chart for representing edges in the chart during parsing with SCFGs.

    Public Methods

    [more]int pos (void)
    Postion, 0 1 or 2, where 0 is empty, 1 is incomplete 2 is complete
    [more]double prob (void)
    Edge probability
    [more]int d1 ()
    (Non)terminal of daughter 1
    [more]int d2 ()
    (Non)terminal of daughter 2


    Documentation

    An internal class for EST_SCFG_Chart for representing edges in the chart during parsing with SCFGs.

    A standard Earley type chart edge, with representations for two daughters and a position or what has been recognised. A probability is also included.

    o Constructor and initialisation functions

    oint pos(void)
    Postion, 0 1 or 2, where 0 is empty, 1 is incomplete 2 is complete

    odouble prob(void)
    Edge probability

    oint d1()
    (Non)terminal of daughter 1

    oint d2()
    (Non)terminal of daughter 2


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SCFG_Chart.html0100644001741100001440000002037707327543063020361 0ustar awbusers class EST_SCFG_Chart

    In file ../include/EST_SCFG_Chart.h:

    class EST_SCFG_Chart

    A class for parsing with a probabalistic grammars.

    Public Methods

    [more] Grammar and parse string initialisation functions

    [more]void set_grammar_rules (LISP r)
    Initialize from LISP rules set
    [more]void set_grammar_rules (EST_SCFG &grammar)
    Initialize from existing EST_SCFG grammar
    [more]void setup_wfst (EST_Relation* s, const EST_String &name="name")
    Initialize for parsing from relation using name feature setting up the "Well Fromed Substring Table"
    [more]void setup_wfst (EST_Item* s, EST_Item* e, const EST_String &name="name")
    Initialize for parsing from s to e using name feature setting up the "Well Fromed Substring Table"

    [more] parsing functions

    [more]void parse ()
    Parses the loaded WFST with the loaded grammar
    [more]LISP find_parse ()
    Return the parse in full LISP form
    [more]void extract_parse (EST_Relation* syn, EST_Relation* word, int force=0)
    Extract parse tree and add it to syn linking leafs to word
    [more]void extract_parse (EST_Relation* syn, EST_Item* s, EST_Item* e, int force=0)
    Extract parse tree and add it to syn linking leafs to items s to e


    Documentation

    A class for parsing with a probabalistic grammars.

    The chart (sort of closer to CKY table) consists of indexes of edges indexed by vertex number of mother non-terminal.

    The initial values (well-formed substring table) are taken from an EST_Stream with a given feature. The grammar may be specified as LISP rules or as an already constructed EST_SCFG.

    This produces a single best parse. It treates the grammar as structly context free in that the probability of a nonterminal over vertex n to m, is the sum of the all possible analysis of that sub-tree. Only the best anaylsis is kept for the resulting parse tree.

    o Constructor and initialisation functions

    o Grammar and parse string initialisation functions

    ovoid set_grammar_rules(LISP r)
    Initialize from LISP rules set

    ovoid set_grammar_rules(EST_SCFG &grammar)
    Initialize from existing EST_SCFG grammar

    ovoid setup_wfst(EST_Relation* s, const EST_String &name="name")
    Initialize for parsing from relation using name feature setting up the "Well Fromed Substring Table"

    ovoid setup_wfst(EST_Item* s, EST_Item* e, const EST_String &name="name")
    Initialize for parsing from s to e using name feature setting up the "Well Fromed Substring Table"

    o parsing functions

    ovoid parse()
    Parses the loaded WFST with the loaded grammar

    oLISP find_parse()
    Return the parse in full LISP form

    ovoid extract_parse(EST_Relation* syn, EST_Relation* word, int force=0)
    Extract parse tree and add it to syn linking leafs to word

    ovoid extract_parse(EST_Relation* syn, EST_Item* s, EST_Item* e, int force=0)
    Extract parse tree and add it to syn linking leafs to items s to e


    This class has no child classes.
    Author:
    Alan W Black (awb@cstr.ed.ac.uk): October 1997

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_SCFG_chart_load_relation.html0100644001741100001440000000306007327543063023303 0ustar awbusers void EST_SCFG_chart_load_relation

    In file ../include/EST_SCFG_Chart.h:

    void EST_SCFG_chart_load_relation

    (EST_Relation* s, LISP sent)

    Build a relation from a LISP list of items

    Documentation

    Build a relation from a LISP list of items

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/scfg_parse.html0100644001741100001440000000312107327543063020103 0ustar awbusers LISP scfg_parse

    In file ../include/EST_SCFG_Chart.h:

    LISP scfg_parse

    (LISP string, LISP grammar)

    Parse a given string using the given grammar

    Documentation

    Parse a given string using the given grammar

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/scfg_parse.2.html0100644001741100001440000000330007327543063020242 0ustar awbusers LISP scfg_parse

    In file ../include/EST_SCFG_Chart.h:

    LISP scfg_parse

    (LISP string, EST_SCFG &grammar)

    Parse the given string using the given EST_SCFG

    Documentation

    Parse the given string using the given EST_SCFG

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/min.html0100644001741100001440000000303307327543063016554 0ustar awbusers static inline int min

    In file ../include/EST_inline_utils.h:

    static inline int min

    (int a, int b)

    Smaller of two ints

    Documentation

    Smaller of two ints

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/scfg_parse.3.html0100644001741100001440000000356307327543063020256 0ustar awbusers void scfg_parse

    In file ../include/EST_SCFG_Chart.h:

    void scfg_parse

    (class EST_Relation* Word,
      const EST_String &name,
      class EST_Relation* Syntax,
      EST_SCFG &grammar)

    Parse named features in (list) relation Word into (tree) relation Syntax

    Documentation

    Parse named features in (list) relation Word into (tree) relation Syntax

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_WFST_Transition.html0100644001741100001440000000321007327543063021476 0ustar awbusers class EST_WFST_Transition

    In file ../include/EST_WFST.h:

    class EST_WFST_Transition

    an internal class for EST_WFST for representing transitions in an WFST

    Documentation

    an internal class for EST_WFST for representing transitions in an WFST

    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_WFST_State.html0100644001741100001440000000317007327543063020431 0ustar awbusers class EST_WFST_State

    In file ../include/EST_WFST.h:

    class EST_WFST_State

    an internal class for EST_WFST used to represent a state in a WFST

    Documentation

    an internal class for EST_WFST used to represent a state in a WFST

    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_WFST_MultiState.html0100644001741100001440000000404007327543063021441 0ustar awbusers class EST_WFST_MultiState

    In file ../include/EST_WFST.h:

    class EST_WFST_MultiState

    an internal class to EST_WFST used in holding multi-states when determinizing and find the intersections of other WFSTs

    Inheritance:


    Documentation

    an internal class to EST_WFST used in holding multi-states when determinizing and find the intersections of other WFSTs

    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_WFST.html0100644001741100001440000007235707327543063017306 0ustar awbusers class EST_WFST

    In file ../include/EST_WFST.h:

    class EST_WFST

    a call representing a weighted finite-state transducer

    Public Methods

    [more] Reseting functions

    [more]void init (int init_num_states=10)
    Clear with (estimation of number of states required)
    [more]void init (LISP in, LISP out)
    clear an initialise with given input and out alphabets
    [more]void copy (const EST_WFST &wfst)
    Copy from existing wfst
    [more]void clear ()
    clear removing existing states if any

    [more] General utility functions

    [more]int in_symbol (const EST_String &s) const
    Map input symbol to input alphabet index
    [more]const EST_String& in_symbol (int i) const
    Map input alphabet index to input symbol
    [more]int out_symbol (const EST_String &s) const
    Map output symbol to output alphabet index
    [more]const EST_String& out_symbol (int i) const
    Map output alphabet index to output symbol
    [more]LISP epsilon_label () const
    LISP for on epsilon symbols
    [more]int in_epsilon () const
    Internal index for input epsilon
    [more]int out_epsilon () const
    Internal index for output epsilon
    [more]const EST_WFST_State* state (int i) const
    Return internal state information
    [more]int final (int i) const
    True if state i is final

    [more] transduction functions

    [more]int transition (int state, int in, int out) const
    Find (first) new state given in and out symbols
    [more]EST_WFST_Transition* find_transition (int state, int in, int out) const
    Find (first) transition given in and out symbols
    [more]int transition (int state, const EST_String &in, const EST_String &out) const
    Find (first) new state given in and out strings
    [more]int transition (int state, const EST_String &inout) const
    Find (first) new state given in/out string
    [more]int transduce (int state, int in, int &out) const
    Transduce in to out from state
    [more]int transduce (int state, const EST_String &in, EST_String &out) const
    Transduce in to out (strings) from state
    [more]void transduce (int state, int in, wfst_translist &out) const
    Transduce in to list of transitions
    [more]void transition_all (int state, int in, int out, EST_WFST_MultiState* ms) const
    Find all possible transitions for given state/input/output

    [more] Cumulation functions for adding collective probabilities

    [more]int cumulate () const
    Cumulation condition
    [more]void start_cumulate ()
    Clear and start cumulation
    [more]void stop_cumulate ()
    Stop cumulation and calculate probabilities on transitions

    [more] WFST construction functions from external represenations *

    [more]int add_state (enum wfst_state_type state_type)
    Add a new state, returns new name
    [more]enum wfst_state_type ms_type (EST_WFST_MultiState* ms) const
    Given a multi-state return type (final, ok, error)
    [more]void build_wfst (int start, int end, LISP regex)
    Basic regex constructor
    [more]void build_and_transition (int start, int end, LISP conjunctions)
    Basic conjunction constructor
    [more]void build_or_transition (int start, int end, LISP disjunctions)
    Basic disjunction constructor

    [more] Basic WFST operators

    [more]void determinize (const EST_WFST &a)
    Build determinized form of a
    [more]void minimize (const EST_WFST &a)
    Build minimized form of a
    [more]void complement (const EST_WFST &a)
    Build complement of a
    [more]void intersection (EST_TList<EST_WFST> &wl)
    Build intersection of all WFSTs in given list.
    [more]void intersection (const EST_WFST &a, const EST_WFST &b)
    Build intersection of WFSTs a and b The new WFST recognizes the only the strings that are recognized by both a and b list
    [more]void uunion (EST_TList<EST_WFST> &wl)
    Build union of all WFSTs in given list.
    [more]void uunion (const EST_WFST &a, const EST_WFST &b)
    Build union of WFSTs a and b.
    [more]void compose (const EST_WFST &a, const EST_WFST &b)
    Build new WFST by composition of a and b.
    [more]void difference (const EST_WFST &a, const EST_WFST &b)
    Build WFST that accepts only strings in a that aren't also accepted by strings in b.
    [more]void concat (const EST_WFST &a, const EST_WFST &b)
    Build WFST that accepts a language that consists of any string in a followed by any string in b *

    [more] construction support fuctions

    [more]int deterministic () const
    True if WFST is deterministic
    [more]EST_WFST_MultiState* apply_multistate (const EST_WFST &wfst, EST_WFST_MultiState* ms, int in, int out) const
    Transduce a multi-state given n and out
    [more]void add_epsilon_reachable (EST_WFST_MultiState* ms) const
    Extend multi-state with epsilon reachable states
    [more]void remove_error_states (const EST_WFST &a)
    Remove error states from the WFST
    [more]EST_WFST& operator = (const EST_WFST &a)


    Documentation

    a call representing a weighted finite-state transducer
    o Constructor and initialisation functions

    o Reseting functions

    ovoid init(int init_num_states=10)
    Clear with (estimation of number of states required)

    ovoid init(LISP in, LISP out)
    clear an initialise with given input and out alphabets

    ovoid copy(const EST_WFST &wfst)
    Copy from existing wfst

    ovoid clear()
    clear removing existing states if any

    o General utility functions

    oint in_symbol(const EST_String &s) const
    Map input symbol to input alphabet index

    oconst EST_String& in_symbol(int i) const
    Map input alphabet index to input symbol

    oint out_symbol(const EST_String &s) const
    Map output symbol to output alphabet index

    oconst EST_String& out_symbol(int i) const
    Map output alphabet index to output symbol

    oLISP epsilon_label() const
    LISP for on epsilon symbols

    oint in_epsilon() const
    Internal index for input epsilon

    oint out_epsilon() const
    Internal index for output epsilon

    oconst EST_WFST_State* state(int i) const
    Return internal state information

    oint final(int i) const
    True if state i is final

    o file i/o

    o transduction functions

    oint transition(int state, int in, int out) const
    Find (first) new state given in and out symbols

    oEST_WFST_Transition* find_transition(int state, int in, int out) const
    Find (first) transition given in and out symbols

    oint transition(int state, const EST_String &in, const EST_String &out) const
    Find (first) new state given in and out strings

    oint transition(int state, const EST_String &inout) const
    Find (first) new state given in/out string

    oint transduce(int state, int in, int &out) const
    Transduce in to out from state

    oint transduce(int state, const EST_String &in, EST_String &out) const
    Transduce in to out (strings) from state

    ovoid transduce(int state, int in, wfst_translist &out) const
    Transduce in to list of transitions

    ovoid transition_all(int state, int in, int out, EST_WFST_MultiState* ms) const
    Find all possible transitions for given state/input/output

    o Cumulation functions for adding collective probabilities
    for transitions from data

    oint cumulate() const
    Cumulation condition

    ovoid start_cumulate()
    Clear and start cumulation

    ovoid stop_cumulate()
    Stop cumulation and calculate probabilities on transitions

    o WFST construction functions from external represenations *

    oint add_state(enum wfst_state_type state_type)
    Add a new state, returns new name

    oenum wfst_state_type ms_type(EST_WFST_MultiState* ms) const
    Given a multi-state return type (final, ok, error)

    ovoid build_wfst(int start, int end, LISP regex)
    Basic regex constructor

    ovoid build_and_transition(int start, int end, LISP conjunctions)
    Basic conjunction constructor

    ovoid build_or_transition(int start, int end, LISP disjunctions)
    Basic disjunction constructor

    o Basic WFST operators

    ovoid determinize(const EST_WFST &a)
    Build determinized form of a

    ovoid minimize(const EST_WFST &a)
    Build minimized form of a

    ovoid complement(const EST_WFST &a)
    Build complement of a

    ovoid intersection(EST_TList<EST_WFST> &wl)
    Build intersection of all WFSTs in given list. The new WFST recognizes the only the strings that are recognized by all WFSTs in the given list

    ovoid intersection(const EST_WFST &a, const EST_WFST &b)
    Build intersection of WFSTs a and b The new WFST recognizes the only the strings that are recognized by both a and b list

    ovoid uunion(EST_TList<EST_WFST> &wl)
    Build union of all WFSTs in given list. The new WFST recognizes the only the strings that are recognized by at least one WFSTs in the given list

    ovoid uunion(const EST_WFST &a, const EST_WFST &b)
    Build union of WFSTs a and b. The new WFST recognizes the only the strings that are recognized by either a or b

    ovoid compose(const EST_WFST &a, const EST_WFST &b)
    Build new WFST by composition of a and b. Outputs of a are fed to b, given a new WFSTs which has a's input language and b's output set. a's output and b's input alphabets must be the same

    ovoid difference(const EST_WFST &a, const EST_WFST &b)
    Build WFST that accepts only strings in a that aren't also accepted by strings in b.

    ovoid concat(const EST_WFST &a, const EST_WFST &b)
    Build WFST that accepts a language that consists of any string in a followed by any string in b *

    o construction support fuctions

    oint deterministic() const
    True if WFST is deterministic

    oEST_WFST_MultiState* apply_multistate(const EST_WFST &wfst, EST_WFST_MultiState* ms, int in, int out) const
    Transduce a multi-state given n and out

    ovoid add_epsilon_reachable(EST_WFST_MultiState* ms) const
    Extend multi-state with epsilon reachable states

    ovoid remove_error_states(const EST_WFST &a)
    Remove error states from the WFST

    oEST_WFST& operator = (const EST_WFST &a)


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_inline_utils.h.html0100644001741100001440000000774307327543063021444 0ustar awbusers EST_inline_utils.h

    EST_inline_utils.h

    o irint
    Round to nearest integer
    o irint
    Round to nearest integer
    o srint
    Round to nearest integer
    o srint
    Round to nearest integer
    o ifloor
    Round down
    o iceil
    Round up
    o min
    Smaller of two ints
    o max
    Larger of two ints
    o min
    Smaller of two floats
    o max
    Larger of two floats
    o min
    Smaller of two doubles
    o max
    Larger of two doubles
    o absval
    Absolute value
    o absval
    Absolute value
    o absval
    Absolute value
    o absval
    Absolute value

    Some simple inline functions gatherred together in one place. <p>
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/irint.html0100644001741100001440000000277207327543063017127 0ustar awbusers static inline int irint

    In file ../include/EST_inline_utils.h:

    static inline int irint

    (float f)

    Round to nearest integer

    Documentation

    Round to nearest integer

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/srint.html0100644001741100001440000000277207327543063017141 0ustar awbusers static inline int srint

    In file ../include/EST_inline_utils.h:

    static inline int srint

    (float f)

    Round to nearest integer

    Documentation

    Round to nearest integer

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/irint.2.html0100644001741100001440000000277307327543063017270 0ustar awbusers static inline int irint

    In file ../include/EST_inline_utils.h:

    static inline int irint

    (double f)

    Round to nearest integer

    Documentation

    Round to nearest integer

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/srint.2.html0100644001741100001440000000277307327543063017302 0ustar awbusers static inline int srint

    In file ../include/EST_inline_utils.h:

    static inline int srint

    (double f)

    Round to nearest integer

    Documentation

    Round to nearest integer

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ifloor.html0100644001741100001440000000274007327543063017267 0ustar awbusers static inline int ifloor

    In file ../include/EST_inline_utils.h:

    static inline int ifloor

    (float f)

    Round down

    Documentation

    Round down

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/iceil.html0100644001741100001440000000273207327543063017063 0ustar awbusers static inline int iceil

    In file ../include/EST_inline_utils.h:

    static inline int iceil

    (float f)

    Round up

    Documentation

    Round up

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/max.html0100644001741100001440000000303107327543063016554 0ustar awbusers static inline int max

    In file ../include/EST_inline_utils.h:

    static inline int max

    (int a, int b)

    Larger of two ints

    Documentation

    Larger of two ints

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/min.2.html0100644001741100001440000000304707327543063016721 0ustar awbusers static inline float min

    In file ../include/EST_inline_utils.h:

    static inline float min

    (float a, float b)

    Smaller of two floats

    Documentation

    Smaller of two floats

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/max.2.html0100644001741100001440000000304507327543063016721 0ustar awbusers static inline float max

    In file ../include/EST_inline_utils.h:

    static inline float max

    (float a, float b)

    Larger of two floats

    Documentation

    Larger of two floats

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/min.3.html0100644001741100001440000000305507327543063016721 0ustar awbusers static inline double min

    In file ../include/EST_inline_utils.h:

    static inline double min

    (double a, double b)

    Smaller of two doubles

    Documentation

    Smaller of two doubles

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/max.3.html0100644001741100001440000000305307327543063016721 0ustar awbusers static inline double max

    In file ../include/EST_inline_utils.h:

    static inline double max

    (double a, double b)

    Larger of two doubles

    Documentation

    Larger of two doubles

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/absval.html0100644001741100001440000000275107327543063017247 0ustar awbusers static inline short absval

    In file ../include/EST_inline_utils.h:

    static inline short absval

    (short n)

    Absolute value

    Documentation

    Absolute value

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/absval.2.html0100644001741100001440000000274307327543063017410 0ustar awbusers static inline int absval

    In file ../include/EST_inline_utils.h:

    static inline int absval

    (int n)

    Absolute value

    Documentation

    Absolute value

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/absval.3.html0100644001741100001440000000275107327543063017410 0ustar awbusers static inline float absval

    In file ../include/EST_inline_utils.h:

    static inline float absval

    (float n)

    Absolute value

    Documentation

    Absolute value

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/absval.4.html0100644001741100001440000000275407327543063017414 0ustar awbusers static inline double absval

    In file ../include/EST_inline_utils.h:

    static inline double absval

    (double n)

    Absolute value

    Documentation

    Absolute value

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Content_Data.html0100644001741100001440000000550107327543063021051 0ustar awbusers class EST_Content_Data

    In file ../include/EST_Contents.h:

    class EST_Content_Data

    A class for containing some other (arbitrary) class Not general enough to call itself a run-time type system Is designed to solve the problem of holding user specified information.

    Public Methods

    [more]int unref ()
    [more]int ref ()
    [more]int the_refs ()


    Documentation

    A class for containing some other (arbitrary) class Not general enough to call itself a run-time type system Is designed to solve the problem of holding user specified information. Keeps reference count to know when to delete contents

    This is done on two levels EST_Contents and Contents_Data

    oint unref()

    oint ref()

    oint the_refs()


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Contents.html0100644001741100001440000000347307327543063020311 0ustar awbusers class EST_Contents

    In file ../include/EST_Contents.h:

    class EST_Contents

    More contents

    Public Methods

    [more]int refs () const


    Documentation

    More contents
    oint refs() const


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Features.html0100644001741100001440000007412607327543063020275 0ustar awbusers class EST_Features

    In file ../include/EST_Features.h:

    class EST_Features

    A class for containing feature structures which can hold atomic values (int, float, string) or other feature structures

    Public Methods

    [more] Access functions which return EST_Val.

    [more]const EST_Val& val (const char* name) const
    Look up directly without decomposing name as path (just simple feature)
    [more]const EST_Val& val (const char* name, const EST_Val &def) const
    Look up directly without decomposing name as path (just simple feature), returning <parameter>def</paramater> if not found
    [more]const EST_Val& val_path (const EST_String &path) const
    Look up feature name, which may be simple feature or path
    [more]const EST_Val& val_path (const EST_String &path, const EST_Val &def) const
    Look up feature name, which may be simple feature or path, returning <parameter>def</paramater> if not found
    [more]const EST_Val& operator() (const EST_String &path) const
    Look up feature name, which may be simple feature or path
    [more]const EST_Val& operator() (const EST_String &path, const EST_Val &def) const
    Look up feature name, which may be simple feature or path, returning <parameter>def</paramater> if not found
    [more]const EST_Val& f (const EST_String &path)
    Look up feature name, which may be simple feature or path
    [more]const EST_Val& f (const EST_String &path, const EST_Val &def)
    Look up feature name, which may be simple feature or path, returning <parameter>def</paramater> if not found

    [more] Access functions which return types.

    [more]const float F (const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as a float
    [more]const float F (const EST_String &path, float def) const
    Look up feature name, which may be simple feature or path, and return as a float, returning <parameter>def</paramater> if not found
    [more]const int I (const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as an int
    [more]const int I (const EST_String &path, int def) const
    Look up feature name, which may be simple feature or path, and return as an int, returning <parameter>def</paramater> if not found
    [more]const EST_String S (const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as a EST_String
    [more]const EST_String S (const EST_String &path, const EST_String &def) const
    Look up feature name, which may be simple feature or path, and return as a EST_String, returning <parameter>def</paramater> if not found
    [more]EST_Features& A (const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as a EST_Features
    [more]EST_Features& A (const EST_String &path, EST_Features &def) const
    Look up feature name, which may be simple feature or path, and return as a EST_Features, returning <parameter>def</paramater> if not found

    [more] Setting features

    [more]void set (const EST_String &name, int ival)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>ival</parameter>
    [more]void set (const EST_String &name, float fval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>fval</parameter>
    [more]void set (const EST_String &name, double dval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>dval</parameter>
    [more]void set (const EST_String &name, const EST_String &sval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>sval</parameter>
    [more]void set (const EST_String &name, const char* cval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>cval</parameter>
    [more]void set_val (const EST_String &name, const EST_Val &sval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>val<parameter>.
    [more]void set_path (const EST_String &name, const EST_Val &sval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>val<parameter>, where <parameter>name<parameter> is a path
    [more]void set_function (const EST_String &name, const EST_String &f)
    Add a new feature feature or set an existing feature <parameter>name<parameter> to value <parameter>f</parameter>, which is the named of a registered feature function
    [more]void set (const EST_String &name, EST_Features &f)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>f</parameter>, which itself is a EST_Features.

    [more] Utility functions

    [more]void remove (const EST_String &name)
    remove the named feature
    [more]int length () const
    number of features in feature structure
    [more]int present (const EST_String &name) const
    return 1 if the feature is present
    [more]void clear ()
    Delete all features from object
    [more]EST_Features& operator = (const EST_Features& a)
    Feature assignment
    [more] f.save (s)

    [more] File I/O

    [more]EST_read_status load (EST_TokenStream &ts)
    load features from already opened EST_TokenStream
    [more]EST_read_status load_sexpr (EST_TokenStream &ts)
    load features from sexpression, contained in already opened EST_TokenStream
    [more]EST_write_status save (ostream &outf) const
    save features in already opened ostream
    [more]EST_write_status save_sexpr (ostream &outf) const
    save features as s-expression in already opened ostream


    Documentation

    A class for containing feature structures which can hold atomic values (int, float, string) or other feature structures
    o Access functions which return EST_Val.
    Features can either be simple features, in which their name is the name of an plain attribute (e.g. "name"), or path features where their name is a dot separated path of concatenated attributes (e.g. "df.poa.alveolar").

    oconst EST_Val& val(const char* name) const
    Look up directly without decomposing name as path (just simple feature)

    oconst EST_Val& val(const char* name, const EST_Val &def) const
    Look up directly without decomposing name as path (just simple feature), returning <parameter>def</paramater> if not found

    oconst EST_Val& val_path(const EST_String &path) const
    Look up feature name, which may be simple feature or path

    oconst EST_Val& val_path(const EST_String &path, const EST_Val &def) const
    Look up feature name, which may be simple feature or path, returning <parameter>def</paramater> if not found

    oconst EST_Val& operator() (const EST_String &path) const
    Look up feature name, which may be simple feature or path

    oconst EST_Val& operator() (const EST_String &path, const EST_Val &def) const
    Look up feature name, which may be simple feature or path, returning <parameter>def</paramater> if not found

    oconst EST_Val& f(const EST_String &path)
    Look up feature name, which may be simple feature or path

    oconst EST_Val& f(const EST_String &path, const EST_Val &def)
    Look up feature name, which may be simple feature or path, returning <parameter>def</paramater> if not found

    o Access functions which return types.
    These functions cast their EST_Val return value to a requested type, eithe float, int, string or features (A). In all cases the name can be a simple feature or a path, in which case their name is a dot separated string of concatenated attributes (e.g. "df.poa.alveolar").

    oconst float F(const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as a float

    oconst float F(const EST_String &path, float def) const
    Look up feature name, which may be simple feature or path, and return as a float, returning <parameter>def</paramater> if not found

    oconst int I(const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as an int

    oconst int I(const EST_String &path, int def) const
    Look up feature name, which may be simple feature or path, and return as an int, returning <parameter>def</paramater> if not found

    oconst EST_String S(const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as a EST_String

    oconst EST_String S(const EST_String &path, const EST_String &def) const
    Look up feature name, which may be simple feature or path, and return as a EST_String, returning <parameter>def</paramater> if not found

    oEST_Features& A(const EST_String &path) const
    Look up feature name, which may be simple feature or path, and return as a EST_Features

    oEST_Features& A(const EST_String &path, EST_Features &def) const
    Look up feature name, which may be simple feature or path, and return as a EST_Features, returning <parameter>def</paramater> if not found

    o Setting features

    ovoid set(const EST_String &name, int ival)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>ival</parameter>

    ovoid set(const EST_String &name, float fval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>fval</parameter>

    ovoid set(const EST_String &name, double dval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>dval</parameter>

    ovoid set(const EST_String &name, const EST_String &sval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>sval</parameter>

    ovoid set(const EST_String &name, const char* cval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>cval</parameter>

    ovoid set_val(const EST_String &name, const EST_Val &sval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>val<parameter>. <parameter>Name<parameter> must be not be a path.

    ovoid set_path(const EST_String &name, const EST_Val &sval)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>val<parameter>, where <parameter>name<parameter> is a path

    ovoid set_function(const EST_String &name, const EST_String &f)
    Add a new feature feature or set an existing feature <parameter>name<parameter> to value <parameter>f</parameter>, which is the named of a registered feature function

    ovoid set(const EST_String &name, EST_Features &f)
    Add a new feature or set an existing feature <parameter>name<parameter> to value <parameter>f</parameter>, which itself is a EST_Features. The information in <parameter>f</parameter> is copied into the features.

    o Utility functions
    Friends:
    ostream& operator << (ostream &s, const EST_Features &f)

    ovoid remove(const EST_String &name)
    remove the named feature

    oint length() const
    number of features in feature structure

    oint present(const EST_String &name) const
    return 1 if the feature is present

    ovoid clear()
    Delete all features from object

    oEST_Features& operator = (const EST_Features& a)
    Feature assignment

    o f.save(s)

    o Iteration

    o File I/O

    oEST_read_status load(EST_TokenStream &ts)
    load features from already opened EST_TokenStream

    oEST_read_status load_sexpr(EST_TokenStream &ts)
    load features from sexpression, contained in already opened EST_TokenStream

    oEST_write_status save(ostream &outf) const
    save features in already opened ostream

    oEST_write_status save_sexpr(ostream &outf) const
    save features as s-expression in already opened ostream


    This class has no child classes.
    Friends:
    class EST_TIterator< EST_Features, IPointer, EST_TKVI<EST_String, EST_Val> >
    class EST_TStructIterator< EST_Features, IPointer, EST_TKVI<EST_String, EST_Val> >
    class EST_TRwIterator< EST_Features, IPointer, EST_TKVI<EST_String, EST_Val> >
    class EST_TRwStructIterator< EST_Features, IPointer, EST_TKVI<EST_String, EST_Val> >

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Featured.html0100644001741100001440000000620007327543063020242 0ustar awbusers class EST_Featured

    In file ../include/EST_Featured.h:

    class EST_Featured

    A class with the mechanisms needed to give an object features and access them nicely.

    Inheritance:


    Documentation

    A class with the mechanisms needed to give an object features and access them nicely. Used as a parent class.


    Direct child classes:
    EST_Wave
    EST_Track
    Friends:
    class EST_TIterator< EST_Featured, IPointer_feat, EST_TKVI<EST_String, EST_Val> >
    class EST_TStructIterator< EST_Featured, IPointer_feat, EST_TKVI<EST_String, EST_Val> >
    class EST_TRwIterator< EST_Featured, IPointer_feat, EST_TKVI<EST_String, EST_Val> >
    class EST_TRwStructIterator< EST_Featured, IPointer_feat, EST_TKVI<EST_String, EST_Val> >
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TTI_Entry.html0100644001741100001440000000336007327543063020330 0ustar awbusers template<class CONTAINER> struct EST_TTI_Entry

    In file ../include/EST_TTimeIndex.h:

    template<class CONTAINER> struct EST_TTI_Entry

    A time index for a container.

    Documentation

    A time index for a container. The container defines how to get an object and so on, this lets you find a point in the container not far before the entry you want.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_THandle.html0100644001741100001440000000651607327543063020034 0ustar awbusers template<class BoxT, class ObjectT> class EST_THandle

    In file ../include/EST_THandle.h:

    template<class BoxT, class ObjectT> class EST_THandle

    A `smart' pointer which does reference counting.

    Documentation

    A `smart' pointer which does reference counting.

    Behaves almost like a pointer as far as naive code is concerned, but keeps count of how many handles are holding on to the conents and deletes it when there are none.

    You need to be careful there are no dumb C++ pointers to things which are being handled this way.

    Things to be handled should implement the same interface as EST_Handleable (either by taking that as a superclass or by reimplementing it) and in addition define object_ptr(). See EST_TBox for an example.

    There are two parameter types. In most cases the thing which contains the reference count and the data it represents will be the same object, but in the case of boxed values it may not be, so you can specify the type of both independently.


    This class has no child classes.
    Friends:
    int operator == (const EST_THandle< BoxT, ObjectT > &a, const EST_THandle< BoxT, ObjectT > & b)
    int operator != (const EST_THandle< BoxT, ObjectT > &a, const EST_THandle< BoxT, ObjectT > & b)
    ostream & operator << (ostream &s, const EST_THandle< BoxT, ObjectT > &a)
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:
    See Also:
    EST_Handleable
    EST_TBox
    EST_THandle:example

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Handleable.html0100644001741100001440000000452707327543063020534 0ustar awbusers class EST_Handleable

    In file ../include/EST_Handleable.h:

    class EST_Handleable

    Reference Counting Interface.

    Inheritance:


    Documentation

    Reference Counting Interface.

    This simple class does most of the things an object which is to be maniputated by EST_THandle style smart pointers needs to provide.


    Direct child classes:
    EST_TrackMap
    EST_TBox
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:
    See Also:
    EST_THandle
    EST_TBox
    EST_TrackMap

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TBox.html0100644001741100001440000000414307327543063017363 0ustar awbusers template<class T> class EST_TBox

    In file ../include/EST_TBox.h:

    template<class T> class EST_TBox

    Box for putting things in.

    Inheritance:



    Inherited from EST_Handleable:


    Documentation

    Box for putting things in. The box and the thing can then be refcounted as a unit.


    This class has no child classes.
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TIterator.html0100644001741100001440000002700607327543063020427 0ustar awbusers template<class Container, class IPointer, class Entry> class EST_TIterator

    In file ../include/EST_TIterator.h:

    template<class Container, class IPointer, class Entry> class EST_TIterator


    Public Methods

    [more] EST_TIterator ()
    Create an iterator not associated with any specific container
    [more] EST_TIterator (const Container &over)
    Create an iterator ready to run over the given container
    [more]Iter& operator = (const Iter &orig)
    Copy an iterator by assignment
    [more]Iter& operator = (const Container &over)
    Assigning a container to an iterator sets it ready to start
    [more]void begin (const Container &over)
    Set the iterator ready to run over this container
    [more]void beginning ()
    Reset to the start of the container
    [more] End Tests

    [more]bool has_more_elements () const
    True if there are more elements to look at
    [more]bool at_end () const
    True when there are no more
    [more] operator int () const
    Viewing the iterator as an integer (for instance in a test) sees a non-zero value iff there are elements still to look at

    [more] Moving Forward

    [more]void next ()
    Next moves to the next entry
    [more]Iter& operator ++ ()
    The increment operator does the same as next

    [more] Access

    [more]const Entry& current () const
    Return the element currentl pointed to
    [more]const Entry& operator * () const
    The * operator returns the current element.
    [more]const Entry& next_element ()
    Return the current element and move the pointer forwards
    [more]unsigned int n () const
    Return the current position

    Public

    [more]typedef EST_TIterator<Container, IPointer, Entry> Iter
    Name for an itterator like this

    Protected Fields

    [more]Container* cont
    The container we are looking at
    [more]unsigned int pos
    Position in the structure.
    [more]IPointer pointer
    Structure defined by the container class whcih contains the current state of the iteration


    Documentation

    oContainer* cont
    The container we are looking at

    ounsigned int pos
    Position in the structure. May or may not be useful.

    oIPointer pointer
    Structure defined by the container class whcih contains the current state of the iteration

    otypedef EST_TIterator<Container, IPointer, Entry> Iter
    Name for an itterator like this

    o EST_TIterator()
    Create an iterator not associated with any specific container

    o EST_TIterator(const Container &over)
    Create an iterator ready to run over the given container

    oIter& operator = (const Iter &orig)
    Copy an iterator by assignment

    oIter& operator = (const Container &over)
    Assigning a container to an iterator sets it ready to start

    ovoid begin(const Container &over)
    Set the iterator ready to run over this container

    ovoid beginning()
    Reset to the start of the container

    o End Tests

    obool has_more_elements() const
    True if there are more elements to look at

    obool at_end() const
    True when there are no more

    o operator int() const
    Viewing the iterator as an integer (for instance in a test) sees a non-zero value iff there are elements still to look at

    o Moving Forward

    ovoid next()
    Next moves to the next entry

    oIter& operator ++()
    The increment operator does the same as next

    o Access

    oconst Entry& current() const
    Return the element currentl pointed to

    oconst Entry& operator *() const
    The * operator returns the current element.

    oconst Entry& next_element()
    Return the current element and move the pointer forwards

    ounsigned int n() const
    Return the current position


    This class has no child classes.
    Friends:
    class EST_TStructIterator <Container, IPointer, Entry>
    class EST_TRwIterator <Container, IPointer, Entry>
    class EST_TRwStructIterator <Container, IPointer, Entry>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_TDeque.html0100644001741100001440000000776407327543063017712 0ustar awbusers template<class T> class EST_TDeque

    In file ../include/EST_TDeque.h:

    template<class T> class EST_TDeque

    Double ended queue.

    Public Fields

    [more]static const T* Filler
    Used to fill empty spaces when possible

    Public Methods

    [more]void clear (void)
    Empty it out
    [more]bool is_empty (void) const
    Is there anything to get?
    [more]ostream& print (ostream &s) const
    print picture of state.


    Documentation

    Double ended queue.

    ostatic const T* Filler
    Used to fill empty spaces when possible

    ovoid clear(void)
    Empty it out

    obool is_empty(void) const
    Is there anything to get?

    oostream& print(ostream &s) const
    print picture of state. Mostly useful for debugging.

    o stack
    An interface looking like a stack.

    o inverse stack
    The other end as a stack.

    o queue
    An interface looking like a queue.

    o perl
    For people who think in perl


    This class has no child classes.
    Friends:
    ostream& operator << (ostream &st, const EST_TDeque< T > &deq)
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/anaccumulatortobeownedbyeverymodel.html0100644001741100001440000000251207327543063025166 0ustar awbusers an accumulator to be owned by every model

    an accumulator to be owned by every model

    an accumulator to be owned by every model

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/-theunderlyingHVorFWaccumulatorsaresharedvia.html0100644001741100001440000000255607327543063026776 0ustar awbusers - the underlying HV or FW accumulators are shared via

    - the underlying HV or FW accumulators are shared via

    - the underlying HV or FW accumulators are shared via

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/CSMM_parameter_set.html0100644001741100001440000000272407327543063021451 0ustar awbusers struct CSMM_parameter_set

    In file ../include/EST_dynamic_model.h:

    struct CSMM_parameter_set

    somewhere to keep the model parameters

    Documentation

    somewhere to keep the model parameters

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/CSMM_set.html0100644001741100001440000000265407327543063017413 0ustar awbusers struct CSMM_set

    In file ../include/EST_dynamic_model.h:

    struct CSMM_set

    somewhere to keep the models

    Documentation

    somewhere to keep the models

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/E_step.html0100644001741100001440000000323407327543063017213 0ustar awbusers bool E_step

    In file ../include/EST_dynamic_model.h:

    bool E_step

    (CSMM &model,
      EST_DMatrix &mean_initial_covar_x,
      const EST_TrackList &train_data,
      const bool trace)

    at last, some interesting functions

    Documentation

    at last, some interesting functions

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_FeatureSample.html0100644001741100001440000000664707327543063021257 0ustar awbusers class EST_FeatureSample

    In file ../include/EST_FeatureData.h:

    class EST_FeatureSample

    A class for containing arbitrary multi-dimensional feature data.

    Inheritance:


    Public Fields

    [more] Information functions

    [more] set number of samples to be held in object and allocate space for storing them


    Documentation

    A class for containing arbitrary multi-dimensional feature data.

    A number of fields are defined in the EST_FeatureData class, each of which represents a measurable quantity, such as height, age or gender. Any number of fields can be defined and each field can take a float, integer or string value. The class holds mutiple instances of field values, representing samples taken from a population.

    Several statistical training, testing and analysis programs use EST_FeatureData as input and output. Member functions exist for comparing fields, extracting given named or numbered fields, can converting appropriate fields to a EST_FMatrix.

    o Information functions

    o set number of samples to be held in object and allocate space for storing them
    set number of samples to be held in object and allocate space for storing them


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_ServiceTable.html0100644001741100001440000001702507327543063021062 0ustar awbusers class EST_ServiceTable

    In file ../include/EST_ServiceTable.h:

    class EST_ServiceTable

    A global table of known services.

    Public Classes

    class Entry
    A service record.

    Public Methods

    [more] Finding What Services Are Available.

    [more]static void read_table (void)
    Read the users default table.
    [more]static void read_table (EST_String socketsFileName)
    Read a specific table
    [more]static void write_table (void)
    Write the users default table.
    [more]static void write_table (EST_String socketsFileName)
    Write a specific table
    [more]static void list (ostream &s, const EST_String type)
    List the table to given stream
    [more]static void names (EST_TList<EST_String> &names, const EST_String type="")
    Return a list of server names

    [more]static const Entry& lookup (const EST_String name, const EST_String type)
    Return the entry for the server with the given name and type.
    [more]static const Entry& create (const EST_String name, const EST_String type, int socket)
    Create an entry for a server of the given name and type which is listening on the given socket


    Documentation

    A global table of known services. Used for fringe and festival servers.

    o Finding What Services Are Available.
    Servers maintain a per-user file which lists the processes which are running in server mode by name. These functions read that table.

    ostatic void read_table(void)
    Read the users default table. <filename>~/.estServices</filename>

    ostatic void read_table(EST_String socketsFileName)
    Read a specific table

    ostatic void write_table(void)
    Write the users default table. <filename>~/.estServices</filename>

    ostatic void write_table(EST_String socketsFileName)
    Write a specific table

    ostatic void list(ostream &s, const EST_String type)
    List the table to given stream

    ostatic void names(EST_TList<EST_String> &names, const EST_String type="")
    Return a list of server names

    ostatic const Entry& lookup(const EST_String name, const EST_String type)
    Return the entry for the server with the given name and type. If no such entry is found a dummy entry with a port of 0 is returned.

    ostatic const Entry& create(const EST_String name, const EST_String type, int socket)
    Create an entry for a server of the given name and type which is listening on the given socket


    This class has no child classes.
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Entry.html0100644001741100001440000001241207327543063017073 0ustar awbusers class EST_ServiceTable::Entry

    In file ../include/EST_ServiceTable.h:

    class EST_ServiceTable::Entry

    A service record.

    Public Fields

    [more]EST_String name
    Name of the server
    [more]EST_String type
    Type of server (eg `fringe')
    [more]EST_String hostname
    Human readable hostname
    [more]EST_String address
    Numeric IP address ()
    [more]EST_String cookie
    A random string to send as authorisation
    [more]int port
    TCP port number

    Public Methods

    [more] Entry ()
    Create an empty entry
    [more] operator EST_String () const
    A suitable human readable name for the entry


    Documentation

    A service record.

    This is returned by service lookup operations, it contains enough information to contact the server and authenticate yourself.

    oEST_String name
    Name of the server

    oEST_String type
    Type of server (eg `fringe')

    oEST_String hostname
    Human readable hostname

    oEST_String address
    Numeric IP address ()

    oEST_String cookie
    A random string to send as authorisation

    oint port
    TCP port number

    o Entry()
    Create an empty entry

    o operator EST_String() const
    A suitable human readable name for the entry


    This class has no child classes.
    Friends:
    bool operator == (const Entry &a, const Entry &b)
    ostream & operator << (ostream &s, const Entry &a)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Server.html0100644001741100001440000002502407327543063017756 0ustar awbusers class EST_Server

    In file ../include/EST_Server.h:

    class EST_Server

    Client-server interface.

    Inheritance:


    Public Classes

    [more]enum Mode
    What type of server is this

    Public Methods

    [more] Client end constructors.

    [more] EST_Server (EST_String name, EST_String type)
    Create a server connection by name, defaulting to "fringe", the default server name
    [more] EST_Server (EST_String hostname, int port)
    Create a server connection by explicitly saying where to connect to

    [more]virtual ~EST_Server ()
    Destroy the connection
    [more] information about the server.

    [more]const EST_String name (void) const
    Name of server
    [more]const EST_String type (void) const
    Type of server
    [more]const EST_String hostname (void) const
    Domain name of the server
    [more]const EST_String address (void) const
    Dotted numeric IP address
    [more]const EST_String servername (void) const
    Domain name or IP number
    [more]int port (void) const
    Port number

    [more] connection management

    [more]EST_connect_status connect (void)
    Connect to the server
    [more]bool connected (void)
    Are we connected at the moment?
    [more]EST_connect_status disconnect (void)
    Disconnect


    Documentation

    Client-server interface.

    An EST_Server object represents a server, it can be at either end of a network connection. That is, a server process has an EST_Server object representing it's wait-dispatch-answer loop, while a client process has an EST_Server object which represents the server process.

    oenum Mode
    What type of server is this

    o sm_unknown
    Bizzare state

    o sm_client
    Client end of the connetion

    o sm_sequential
    Answer one client at a time

    o sm_interleaved
    Answer requests from several clients, as requests arrive

    o sm_fork
    For off a process for each client

    o sm_threded
    Muti-threaded (not implemented)

    o Client end constructors.

    o EST_Server(EST_String name, EST_String type)
    Create a server connection by name, defaulting to "fringe", the default server name

    o EST_Server(EST_String hostname, int port)
    Create a server connection by explicitly saying where to connect to

    o Server end constructors

    ovirtual ~EST_Server()
    Destroy the connection

    o information about the server.

    oconst EST_String name(void) const
    Name of server

    oconst EST_String type(void) const
    Type of server

    oconst EST_String hostname(void) const
    Domain name of the server

    oconst EST_String address(void) const
    Dotted numeric IP address

    oconst EST_String servername(void) const
    Domain name or IP number

    oint port(void) const
    Port number

    o connection management

    oEST_connect_status connect(void)
    Connect to the server

    obool connected(void)
    Are we connected at the moment?

    oEST_connect_status disconnect(void)
    Disconnect


    Direct child classes:
    EST_FringeServer
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_FringeServer.html0100644001741100001440000001461707327543063021117 0ustar awbusers class EST_FringeServer

    In file ../include/EST_FringeServer.h:

    class EST_FringeServer

    A class providing mechanisms to talk to fringe.

    Inheritance:


    Public Methods

    [more] EST_FringeServer (EST_String name="fringe")
    Create a server connection by name, defaulting to "fringe", the default server name
    [more] EST_FringeServer (EST_String hostname, int port)
    Create a server connection by explicitly saying where to connect to
    [more] ~EST_FringeServer ()
    Destroy the connection


    Inherited from EST_Server:

    Public Classes

    oenum Mode

    Public Methods

    Client end constructors.

    [more] EST_Server(EST_String name, EST_String type)
    Create a server connection by name, defaulting to "fringe", the default server name
    [more] EST_Server(EST_String hostname, int port)
    Create a server connection by explicitly saying where to connect to

    information about the server.

    [more]const EST_String name(void) const
    Name of server
    [more]const EST_String type(void) const
    Type of server
    [more]const EST_String hostname(void) const
    Domain name of the server
    [more]const EST_String address(void) const
    Dotted numeric IP address
    [more]const EST_String servername(void) const
    Domain name or IP number
    [more]int port(void) const
    Port number

    connection management

    [more]EST_connect_status connect(void)
    Connect to the server
    [more]bool connected(void)
    Are we connected at the moment?
    [more]EST_connect_status disconnect(void)
    Disconnect


    Documentation

    A class providing mechanisms to talk to fringe.

    o EST_FringeServer(EST_String name="fringe")
    Create a server connection by name, defaulting to "fringe", the default server name

    o EST_FringeServer(EST_String hostname, int port)
    Create a server connection by explicitly saying where to connect to

    o ~EST_FringeServer()
    Destroy the connection


    This class has no child classes.
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRfilter.html0100644001741100001440000000447707327543063017634 0ustar awbusers void FIRfilter

    In file ../include/sigpr/EST_filter.h:

    void FIRfilter

    (const EST_Wave &in_sig,
      EST_Wave &out_sig,
      const EST_FVector &numerator,
      int delay_correction=0)

    General purpose FIR filter.

    Documentation

    General purpose FIR filter. This function will filter the waveform sig with a previously designed filter, given as numerator. The filter coefficients can be designed using one of the designed functions, e.g. design_FIR_filter .

    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter,
    FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIR_double_filter.html0100644001741100001440000000527707327543063021324 0ustar awbusers void FIR_double_filter

    In file ../include/sigpr/EST_filter.h:

    void FIR_double_filter

    (EST_Wave &in_sig,
      EST_Wave &out_sig,
      const EST_FVector &numerator)

    General purpose FIR double (zero-phase) filter.

    Documentation

    General purpose FIR double (zero-phase) filter. This function will double filter the waveform sig with a previously designed filter, given as numerator. The filter coefficients can be designed using one of the designed functions, e.g. design_FIR_filter. Double filtering is performed by filtering the signal normally, resversing the waveform, filtering again and reversing the waveform again. Normal filtering will impose a lag on the signal depending on the order of the filter. By filtering the signal forwards and backwards, the lags cancel each other out and the output signal is in phase with the input signal.

    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter,
    FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRlowpass_filter.html0100644001741100001440000000464607327543063021402 0ustar awbusers void FIRlowpass_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRlowpass_filter

    (EST_Wave &sigin, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off low pass filtering.

    Documentation

    Quick function for one-off low pass filtering. If repeated lowpass filtering is needed, first design the required filter using design_lowpass_filter, and then use FIRfilter to do the actual filtering.

    Parameters:
    in_sig - input waveform, which will be overwritten
    - freq
    order - number of filter coefficients, eg. 99
    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter, FIRfilter, FIRhighpass_filter, FIRlowpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lpc_filter.html0100644001741100001440000000405207327543063020116 0ustar awbusers void lpc_filter

    In file ../include/sigpr/EST_filter.h:

    void lpc_filter

    (EST_Wave &sig, EST_FVector &a,
      EST_Wave &res)

    Synthesize a signal from a single set of linear prediction coefficients and the residual values.

    Documentation

    Synthesize a signal from a single set of linear prediction coefficients and the residual values.

    Parameters:
    sig - the waveform to be synthesized
    - a a single set of LP coefficients
    res - the input residual waveform

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRlowpass_filter.2.html0100644001741100001440000000502607327543063021533 0ustar awbusers void FIRlowpass_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRlowpass_filter

    (const EST_Wave &in_sig,
      EST_Wave &out_sig, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off low pass filtering.

    Documentation

    Quick function for one-off low pass filtering. If repeated lowpass filtering is needed, first design the required filter using design_lowpass_filter, and then use FIRfilter to do the actual filtering.

    Parameters:
    in_sig - input waveform
    out_sig - output waveform
    - freq cutoff frequency in Hertz
    order - number of filter coefficients , e.g. 99
    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter, FIRfilter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRhighpass_filter.html0100644001741100001440000000471707327543063021517 0ustar awbusers void FIRhighpass_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRhighpass_filter

    (EST_Wave &in_sig, int freq,
      int order)

    Quick function for one-off high pass filtering.

    Documentation

    Quick function for one-off high pass filtering. If repeated lowpass filtering is needed, first design the required filter using design_lowpass_filter, and then use FIRfilter to do the actual filtering.

    Parameters:
    in_sig - input waveform, which will be overwritten
    - freq cutoff frequency in Hertz
    order - number of filter coefficients, eg. 99
    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter
    FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRhighpass_filter.2.html0100644001741100001440000000507107327543063021651 0ustar awbusers void FIRhighpass_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRhighpass_filter

    (const EST_Wave &sigin,
      EST_Wave &out_sig, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off high pass filtering.

    Documentation

    Quick function for one-off high pass filtering. If repeated highpass filtering is needed, first design the required filter using design_highpass_filter, and then use FIRfilter to do the actual filtering.

    Parameters:
    in_sig - input waveform
    out_sig - output waveform
    - freq cutoff frequency in Hertz
    order - number of filter coefficients, eg. 99
    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter
    FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRhighpass_double_filter.html0100644001741100001440000000462507327543063023047 0ustar awbusers void FIRhighpass_double_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRhighpass_double_filter

    (EST_Wave &sigin, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off double low pass filtering.

    Documentation

    Quick function for one-off double low pass filtering.

    Normal low pass filtering (FIRlowpass_filter) introduces a time delay. This function filters the signal twice, first forward and then backwards, which ensures a zero phase lag. Hence the order parameter need only be half what it is for (FIRlowpass_filter to achieve the same effect.

    Parameters:
    in_sig - input waveform, which will be overwritten
    - freq cutoff frequency in Hertz
    order - number of filter coefficients, eg. 99
    See Also:
    FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRhighpass_double_filter.2.html0100644001741100001440000000475207327543063023210 0ustar awbusers void FIRhighpass_double_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRhighpass_double_filter

    (const EST_Wave &int_sig,
      EST_Wave &out_sig, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off double low pass filtering.

    Documentation

    Quick function for one-off double low pass filtering.

    Normal low pass filtering (FIRlowpass_filter) introduces a time delay. This function filters the signal twice, first forward and then backwards, which ensures a zero phase lag. Hence the order parameter need only be half what it is for (FIRlowpass_filter to achieve the same effect.

    Parameters:
    in_sig - input waveform
    out_sig - output waveform
    - freq cutoff frequency in Hertz
    order - number of filter coefficients, eg. 99
    See Also:
    FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRlowpass_double_filter.html0100644001741100001440000000464007327543063022726 0ustar awbusers void FIRlowpass_double_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRlowpass_double_filter

    (EST_Wave &sigin, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off zero phase high pass filtering.

    Documentation

    Quick function for one-off zero phase high pass filtering.

    Normal high pass filtering (FIRhighpass_filter) introduces a time delay. This function filters the signal twice, first forward and then backwards, which ensures a zero phase lag. Hence the order parameter need only be half what it is for (FIRhighpass_filter to achieve the same effect.

    Parameters:
    in_sig - input waveform, which will be overwritten
    - freq cutoff frequency in Hertz
    order - number of filter coefficients, eg. 99
    See Also:
    FIRlowpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FIRlowpass_double_filter.2.html0100644001741100001440000000476307327543063023074 0ustar awbusers void FIRlowpass_double_filter

    In file ../include/sigpr/EST_filter.h:

    void FIRlowpass_double_filter

    (const EST_Wave &in_sig,
      EST_Wave &out_sig, int freq,
      int order=DEFAULT_FILTER_ORDER)

    Quick function for one-off zero phase high pass filtering.

    Documentation

    Quick function for one-off zero phase high pass filtering.

    Normal high pass filtering (FIRhighpass_filter) introduces a time delay. This function filters the signal twice, first forward and then backwards, which ensures a zero phase lag. Hence the order parameter need only be half what it is for (FIRhighpass_filter to achieve the same effect.

    Parameters:
    in_sig - input waveform
    out_sig - output waveform
    - freq cutoff frequency in Hertz
    order - number of filter coefficients, eg. 99
    See Also:
    FIRlowpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/LinearPredictionfilters.html0100644001741100001440000000666007327543063022626 0ustar awbusers Linear Prediction filters

    Linear Prediction filters

    o lpc_filter
    Synthesize a signal from a single set of linear prediction coefficients and the residual values.
    o inv_lpc_filter
    Filter the waveform using a single set of coefficients so as to produce a residual signal.
    o lpc_filter_1
    Synthesize a signal from a track of linear prediction coefficients.
    o lpc_filter_fast
    Synthesize a signal from a track of linear prediction coefficients.
    o inv_lpc_filter_ola
    Produce a residual from a track of linear prediction coefficients and a signal using an overlap add technique.

    The linear prediction filters are used for the analysis and synthesis of waveforms according the to linear prediction all-pole model.

    The linear prediction states that the value of a signal at a given point is equal to a weighted sum of the previous P values, plus a correction value for that point:



    Given a set of coefficents and the original signal, we can use this equation to work out e, the residual. Conversely given the coefficients and the residual signal, an estimation of the original signal can be calculated.

    If a single set of coefficients were used for the entire waveform, the filtering process would be simple. It is usual however to have a different set of coefficients for every frame, and there are many possible ways to switch from one coefficient set to another so as not to cause discontinuities at the frame boundaries.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/inv_lpc_filter.html0100644001741100001440000000405307327543063020773 0ustar awbusers void inv_lpc_filter

    In file ../include/sigpr/EST_filter.h:

    void inv_lpc_filter

    (EST_Wave &sig, EST_FVector &a,
      EST_Wave &res)

    Filter the waveform using a single set of coefficients so as to produce a residual signal.

    Documentation

    Filter the waveform using a single set of coefficients so as to produce a residual signal.

    Parameters:
    sig - the speech waveform to be filtered
    - a a single set of LP coefficients
    res - the output residual waveform

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lpc_filter_1.html0100644001741100001440000000464607327543063020347 0ustar awbusers void lpc_filter_1

    In file ../include/sigpr/EST_filter.h:

    void lpc_filter_1

    (EST_Track &lpc, EST_Wave & res,
      EST_Wave &sig)

    Synthesize a signal from a track of linear prediction coefficients.

    Documentation

    Synthesize a signal from a track of linear prediction coefficients. This function takes a set of LP frames and a residual and produces a synthesized signal.

    For each frame, the function picks an end point, which is half-way between the current frame's time position and the next frame's. A start point is defined as being the previous frame's end. Using these two values, a portion of residual is extracted and passed to lpc_filter along with the LP coefficients for that frame. This function writes directly into the signal for the values between start and end;

    Parameters:
    sig - the waveform to be synthesized
    lpc - a track of time positioned LP coefficients
    res - the input residual waveform

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lpc_filter_fast.html0100644001741100001440000000466707327543063021147 0ustar awbusers void lpc_filter_fast

    In file ../include/sigpr/EST_filter.h:

    void lpc_filter_fast

    (EST_Track &lpc, EST_Wave & res,
      EST_Wave &sig)

    Synthesize a signal from a track of linear prediction coefficients.

    Documentation

    Synthesize a signal from a track of linear prediction coefficients. This function takes a set of LP frames and a residual and produces a synthesized signal.

    This is functionally equivalent to lpc_filter_1 except it resduces the residual by 0.5 before filtering. Importantly it is about three times faster than lpc_filter_1 but in doing so uses direct C buffers rather than the neat C++ access function. This function should be regarded as temporary and will be deleted after we restructure the low level classes to give better access.

    Parameters:
    sig - the waveform to be synthesized
    lpc - a track of time positioned LP coefficients
    res - the input residual waveform

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/inv_lpc_filter_ola.html0100644001741100001440000000460107327543063021625 0ustar awbusers void inv_lpc_filter_ola

    In file ../include/sigpr/EST_filter.h:

    void inv_lpc_filter_ola

    (EST_Wave &sig, EST_Track &lpc,
      EST_Wave &res)

    Produce a residual from a track of linear prediction coefficients and a signal using an overlap add technique.

    Documentation

    Produce a residual from a track of linear prediction coefficients and a signal using an overlap add technique.

    For each frame, the function estimates the local pitch period and picks a start point one period before the current time position and an end point one period after it.

    A portion of residual corresponding to these times is then produced using inv_lpc_filter. The resultant section of residual is then overlap-added into the main residual wave object.

    Parameters:
    sig - the speech waveform to be filtered
    lpc - a track of time positioned LP coefficients
    res - the output residual waveform

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/PrePostEmphasisfilters..html0100644001741100001440000000412307327543063022527 0ustar awbusers Pre/Post Emphasis filters.

    Pre/Post Emphasis filters.

    o pre_emphasis
    Pre-emphasis filtering.
    o pre_emphasis
    Pre-emphasis filtering.
    o post_emphasis
    Post-emphasis filtering.
    o post_emphasis
    Post-emphasis filtering.

    These functions adjust the spectral tilt of the input waveform.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pre_emphasis.html0100644001741100001440000000327307327543063020456 0ustar awbusers void pre_emphasis

    In file ../include/sigpr/EST_filter.h:

    void pre_emphasis

    (EST_Wave &sig,
      float a=DEFAULT_PRE_EMPH_FACTOR)

    Pre-emphasis filtering.

    Documentation

    Pre-emphasis filtering. This performs simple high pass filtering with a one tap filter of value a. Normal values of a range between 0.95 and 0.99.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pre_emphasis.2.html0100644001741100001440000000335707327543063020621 0ustar awbusers void pre_emphasis

    In file ../include/sigpr/EST_filter.h:

    void pre_emphasis

    (EST_Wave &sig, EST_Wave &out,
      float a=DEFAULT_PRE_EMPH_FACTOR)

    Pre-emphasis filtering.

    Documentation

    Pre-emphasis filtering. This performs simple high pass filtering with a one tap filter of value a. Normal values of a range between 0.95 and 0.99.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/post_emphasis.html0100644001741100001440000000342207327543063020651 0ustar awbusers void post_emphasis

    In file ../include/sigpr/EST_filter.h:

    void post_emphasis

    (EST_Wave &sig,
      float a=DEFAULT_PRE_EMPH_FACTOR)

    Post-emphasis filtering.

    Documentation

    Post-emphasis filtering. This performs simple low pass filtering with a one tap filter of value a. Normal values of a range between 0.95 and 0.99. The same values of a should be used when pre- and post-emphasizing the same signal.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/post_emphasis.2.html0100644001741100001440000000350607327543063021014 0ustar awbusers void post_emphasis

    In file ../include/sigpr/EST_filter.h:

    void post_emphasis

    (EST_Wave &sig, EST_Wave &out,
      float a=DEFAULT_PRE_EMPH_FACTOR)

    Post-emphasis filtering.

    Documentation

    Post-emphasis filtering. This performs simple low pass filtering with a one tap filter of value a. Normal values of a range between 0.95 and 0.99. The same values of a should be used when pre- and post-emphasizing the same signal.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Miscelaneousfilters..html0100644001741100001440000000311007327543063022063 0ustar awbusers Miscelaneous filters.

    Miscelaneous filters.

    o simple_mean_smooth
    Filters the waveform by means of median smoothing.

    Some of these filters are non-linear and therefore don't fit the normal paradigm.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/simple_mean_smooth.html0100644001741100001440000000412207327543063021653 0ustar awbusers void simple_mean_smooth

    In file ../include/sigpr/EST_filter.h:

    void simple_mean_smooth

    (EST_Wave &c, int n)

    Filters the waveform by means of median smoothing.

    Documentation

    Filters the waveform by means of median smoothing.

    This is a sort of low pass filter which aims to remove extreme values. Median smoothing works examining each sample in the wave, taking all the values in a window of size n around that sample, sorting them and replacing that sample with the middle ranking sample in the sorted samples.

    Parameters:
    sig - waveform to be filtered
    - n size of smoothing window

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FastFourierTransformfunctions.html0100644001741100001440000000745107327543063024057 0ustar awbusers Fast Fourier Transform functions

    Fast Fourier Transform functions

    o slowFFT
    Basic in-place FFT.
    o FFT
    Alternate name for slowFFT
    o slowIFFT
    Basic inverse in-place FFT int slowFFT
    o IFFT
    Alternate name for slowIFFT
    o power_spectrum
    Power spectrum using the fastFFT function.
    o power_spectrum_slow
    Power spectrum using the slowFFT function
    o fastFFT
    Fast FFT An optimised implementation by Tony Robinson to be used in preference to slowFFT

    <para> These are the low level functions where the actual FFT is performed. Both slow and fast implementations are available for historical reasons. They have identical functionality. At this time, vectors of complex numbers are handled as pairs of vectors of real and imaginary numbers. </para>

    <formalpara> <title>What is a Fourier Transform ?</title>

    <para> The Fourier transform of a signal gives us a frequency-domain representation of a time-domain signal. In discrete time, the Fourier Transform is called a Discrete Fourier Transform (DFT) and is given by:



    where \(y = (y_0,y_1,... y_{n-1})\) is the DFT (of order \(n\) ) of the signal \(x = (x_0,x_1,... x_{n-1})\), where \(\omega_{n}^{0},\omega_{n}^{1},... \omega_{n}^{n-1}\) are the n complex nth roots of 1. </para>

    <para> The Fast Fourier Transform (FFT) is a very efficient implementation of a Discrete Fourier Transform. See, for example "Algorithms" by Thomas H. Cormen, Charles E. Leiserson and Ronald L. Rivest (pub. MIT Press), or any signal processing textbook. </para>

    </formalpara>

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/slowFFT.html0100644001741100001440000000404407327543063017320 0ustar awbusers int slowFFT

    In file ../include/sigpr/EST_fft.h:

    int slowFFT

    (EST_FVector &real, EST_FVector &imag)

    Basic in-place FFT.

    Documentation

    Basic in-place FFT.

    <para>There's no point actually using this - use fastFFT instead. However, the code in this function closely matches the classic FORTRAN version given in many text books, so is at least easy to follow for new users.</para>

    <para>The length of <parameter>real</parameter> and <parameter>imag</parameter> must be the same, and must be a power of 2 (e.g. 128).</para>

    See Also:
    slowIFFT
    FastFFT

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FFT.html0100644001741100001440000000304107327543063016407 0ustar awbusers inline int FFT

    In file ../include/sigpr/EST_fft.h:

    inline int FFT

    (EST_FVector &real, EST_FVector &imag)

    Alternate name for slowFFT

    Documentation

    Alternate name for slowFFT

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/slowIFFT.html0100644001741100001440000000306107327543063017427 0ustar awbusers int slowIFFT

    In file ../include/sigpr/EST_fft.h:

    int slowIFFT

    (EST_FVector &real, EST_FVector &imag)

    Basic inverse in-place FFT int slowFFT

    Documentation

    Basic inverse in-place FFT int slowFFT

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/IFFT.html0100644001741100001440000000304507327543063016524 0ustar awbusers inline int IFFT

    In file ../include/sigpr/EST_fft.h:

    inline int IFFT

    (EST_FVector &real, EST_FVector &imag)

    Alternate name for slowIFFT

    Documentation

    Alternate name for slowIFFT

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/power_spectrum.html0100644001741100001440000000337007327543063021053 0ustar awbusers int power_spectrum

    In file ../include/sigpr/EST_fft.h:

    int power_spectrum

    (EST_FVector &real,
      EST_FVector &imag)

    Power spectrum using the fastFFT function.

    Documentation

    Power spectrum using the fastFFT function. The power spectrum is simply the squared magnitude of the FFT. The result real and imaginary parts are both set equal to the power spectrum (you only need one of them !)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/power_spectrum_slow.html0100644001741100001440000000312607327543063022116 0ustar awbusers int power_spectrum_slow

    In file ../include/sigpr/EST_fft.h:

    int power_spectrum_slow

    (EST_FVector &real,
      EST_FVector &imag)

    Power spectrum using the slowFFT function

    Documentation

    Power spectrum using the slowFFT function

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/fastFFT.html0100644001741100001440000000313507327543063017271 0ustar awbusers int fastFFT

    In file ../include/sigpr/EST_fft.h:

    int fastFFT

    (EST_FVector &invec)

    Fast FFT An optimised implementation by Tony Robinson to be used in preference to slowFFT

    Documentation

    Fast FFT An optimised implementation by Tony Robinson to be used in preference to slowFFT

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pitchmark.html0100644001741100001440000000505707327543063017763 0ustar awbusers EST_Track pitchmark

    In file ../include/sigpr/EST_pitchmark.h:

    EST_Track pitchmark

    (EST_Wave &lx,
      EST_Features &op)

    Find pitchmarks in Larynograph (lx) signal.

    Documentation

    Find pitchmarks in Larynograph (lx) signal.

    This high level function places a pitchmark on each positive peak in the voiced portions of the lx signal. Pitchmarks are stored in the time component of a EST_Track object and returned. The function works by high and low pass filtering the signal using forward and backward filtering to remove phase shift. The negative going points in the smoothed differentiated signal, corresponding to peaks in the original are then chosen.

    Parameters:
    lx - laryngograph waveform
    op - options, mainly for filter control:
    • lx_low_frequency low pass cut off for lx filtering : typical value 400
    • lx_low_order order of low pass lx filter: typical value 19
    • lx_high_frequency high pass cut off for lx filtering: typical value 40
    • lx_high_order order of high pass lx filter: typical value 19
    • median_order order of high pass lx filter: typical value 19

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/PitchmarkingFunctions.html0100644001741100001440000000506207327543063022306 0ustar awbusers Pitchmarking Functions

    Pitchmarking Functions

    o pitchmark
    Find pitchmarks in Larynograph (lx) signal.
    o pitchmark
    Find pitchmarks in Larynograph (lx) signal.
    o neg_zero_cross_pick
    Find times where waveform cross zero axis in negative direction.
    o pm_fill
    Produce a set of sensible pitchmarks.
    o pm_min_check
    Remove pitchmarks which are too close together.

    Pitchmarking involves finding some pre-defined pitch related instant for every pitch period in the speech. At present, only functions for analysing laryngograph waveforms are available - the much harder problem of doing this on actual speech has not been attempted.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pitchmark.2.html0100644001741100001440000000440307327543063020115 0ustar awbusers EST_Track pitchmark

    In file ../include/sigpr/EST_pitchmark.h:

    EST_Track pitchmark

    (EST_Wave &lx,
      int lx_lf,
      int lx_lo,
      int lx_hf,
      int lx_ho,
      int mo,
      int debug = 0)

    Find pitchmarks in Larynograph (lx) signal.

    Documentation

    Find pitchmarks in Larynograph (lx) signal. The function is the same as pitchmark but with more explicit control over the parameters.

    Parameters:
    lx - laryngograph waveform
    lx_lf - low pass cut off for lx filtering : typical value 400
    lx_fo - order of low pass lx filter : typical value 19
    lx_hf - high pass cut off for lx filtering : typical value 40
    lx_ho - : typical value 19
    mo - order of median smoother used to smoother differentiated lx : typical value 19

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/neg_zero_cross_pick.html0100644001741100001440000000344207327543063022024 0ustar awbusers void neg_zero_cross_pick

    In file ../include/sigpr/EST_pitchmark.h:

    void neg_zero_cross_pick

    (EST_Wave &lx, EST_Track &pm)

    Find times where waveform cross zero axis in negative direction.

    Documentation

    Find times where waveform cross zero axis in negative direction.

    Parameters:
    sig - waveform
    pm - pitchmark track which stores time positions of negative crossings

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pm_fill.html0100644001741100001440000000414607327543063017421 0ustar awbusers void pm_fill

    In file ../include/sigpr/EST_pitchmark.h:

    void pm_fill

    (EST_Track &pm, float new_end, float max,
      float min, float def)

    Produce a set of sensible pitchmarks.

    Documentation

    Produce a set of sensible pitchmarks.

    Given a set of raw pitchmarks, this function makes sure no pitch period is shorter that min seconds and no longer than max seconds. Periods that are too short are eliminated. If a peroid is too long, extra pitchmarks are inserted whose period is approxiamtely def seconds in duration. The approximation is to ensure that the pitch period in the interval, D, is constant, and so the actual pitch period is given by


    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pm_min_check.html0100644001741100001440000000341207327543063020406 0ustar awbusers void pm_min_check

    In file ../include/sigpr/EST_pitchmark.h:

    void pm_min_check

    (EST_Track &pm, float min)

    Remove pitchmarks which are too close together.

    Documentation

    Remove pitchmarks which are too close together.

    This doesn't work in a particularly sophisticated way, in that it removes a sequence of too close pitchmarks left to right, and doesn't attempt to find which ones in the sequence are actually spurious.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Functiontypesusedforparameterstofunctions..html0100644001741100001440000000276407327543063026703 0ustar awbusers Function types used for parameters to functions.

    Function types used for parameters to functions.

    o EST_WindowFunc
    Function which creates a window

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_WindowFunc.html0100644001741100001440000000313407327543063020571 0ustar awbusers typedef void EST_WindowFunc

    In file ../include/sigpr/EST_Window.h:

    typedef void EST_WindowFunc

    (int size,
      EST_TBuffer<float> &r_window)

    Function which creates a window

    Documentation

    Function which creates a window

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Window.html0100644001741100001440000003672007327543063017764 0ustar awbusers class EST_Window

    In file ../include/sigpr/EST_Window.h:

    class EST_Window

    The EST_Window class provides functions for the creation and use of signal processing windows.

    Public Methods

    [more] Functions for making windows.

    [more]static void make_window (EST_TBuffer<float> &window_vals, int size, const char* name)
    Make a Buffer of containing a window function of specified type.
    [more]static void make_window (EST_FVector &window_vals, int size, const char* name)
    Make a EST_FVector containing a window function of specified type.
    [more]static Func* creator (const char* name, bool report_error = false)
    Return the creation function for the given window type

    [more] Performing windowing on a section of speech.

    [more]static void window_signal (const EST_Wave &sig, EST_WindowFunc* make_window, int start, int size, EST_TBuffer<float> &frame)
    Window the waveform sig starting at point start for a duration of size samples.
    [more]static void window_signal (const EST_Wave &sig, EST_WindowFunc* make_window, int start, int size, EST_FVector &frame, int resize=0)
    Window the waveform sig starting at point start for a duration of size samples.
    [more]static void window_signal (const EST_Wave &sig, const EST_String &window_name, int start, int size, EST_FVector &frame, int resize=0)
    Window the waveform sig starting at point start for a duration of size samples.
    [more]static void window_signal (const EST_Wave &sig, EST_TBuffer<float> &window_vals, int start, int size, EST_FVector &frame, int resize=0)
    Window the waveform sig starting at point start for a duration of size samples.

    [more] Utility window functions.

    [more]static EST_String description (const char* name)
    Return the description for a given window type
    [more]static EST_String options_supported (void)
    Return a paragraph describing the available windows
    [more]static EST_String options_short (void)
    Return a comma separated list of the available window types

    Public

    [more]typedef EST_WindowFunc Func
    A function which creates a window


    Documentation

    The EST_Window class provides functions for the creation and use of signal processing windows.

    Signal processing algorithms often work by on small sections of the speech waveform known as frames. A full signal must first be divided into these frames before these algroithms can work. While it would be simple to just "cut out" the required frames from the waveforms, this is usually undesirable as large discontinuities can occur at the frame edges. Instead it is customary to cut out the frame by means of a {em window} function, which tapers the signal in the frame so that it has high values in the middle and low or zero values near the frame edges. The EST_Window class provides a wrap around for such windowing operations.

    There are several types of window function, including:

    • Rectangular, which is used to give a simple copy of the the values between the window limits.



    • Hanning. The rectangular window can cause sharp discontinuities at window edges. The hanning window solves this by ensuring that the window edges taper to 0.



    • Hamming. The hanning window causes considerable energy loss, which the hamming window attempts to rectify.



    The particular choice of window depends on the application. For instance in most speech synthesis applications Hanning windows are the most suitable as they don't have time domain discontinuities. For analysis applications hamming windows are normally used.

    For example code, see Windowing

    otypedef EST_WindowFunc Func
    A function which creates a window

    o Functions for making windows.

    ostatic void make_window(EST_TBuffer<float> &window_vals, int size, const char* name)
    Make a Buffer of containing a window function of specified type.

    ostatic void make_window(EST_FVector &window_vals, int size, const char* name)
    Make a EST_FVector containing a window function of specified type.

    ostatic Func* creator(const char* name, bool report_error = false)
    Return the creation function for the given window type

    o Performing windowing on a section of speech.

    ostatic void window_signal(const EST_Wave &sig, EST_WindowFunc* make_window, int start, int size, EST_TBuffer<float> &frame)
    Window the waveform sig starting at point start for a duration of size samples. The windowing function required is given as a function pointer *make_window which has already been created by a function such as creator. The output windowed frame is placed in the buffer frame which will have been resized accordingly within the function.

    ostatic void window_signal(const EST_Wave &sig, EST_WindowFunc* make_window, int start, int size, EST_FVector &frame, int resize=0)
    Window the waveform sig starting at point start for a duration of size samples. The windowing function required is given as a function pointer *make_window which has already been created by a function such as creator. The output windowed frame is placed in the EST_FVector frame. By default, it is assumed that this is already the correct size (i.e. size samples long), but if resizing is required the last argument should be set to 1.

    ostatic void window_signal(const EST_Wave &sig, const EST_String &window_name, int start, int size, EST_FVector &frame, int resize=0)
    Window the waveform sig starting at point start for a duration of size samples. The windowing function required is given as a string: this function will make a temporary window of this type. The output windowed frame is placed in the EST_FVector frame. By default, it is assumed that this is already the correct size (i.e. size samples long), but if resizing is required the last argument should be set to 1.

    ostatic void window_signal(const EST_Wave &sig, EST_TBuffer<float> &window_vals, int start, int size, EST_FVector &frame, int resize=0)
    Window the waveform sig starting at point start for a duration of size samples. The window shape required is given as an array of floats. The output windowed frame is placed in the EST_FVector frame. By default, it is assumed that this is already the correct size (i.e. size samples long), but if resizing is required the last argument should be set to 1.

    o Utility window functions.

    ostatic EST_String description(const char* name)
    Return the description for a given window type

    ostatic EST_String options_supported(void)
    Return a paragraph describing the available windows

    ostatic EST_String options_short(void)
    Return a comma separated list of the available window types


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/__EST_SIGPR_FRAME_H__.html0100644001741100001440000000272007327543063021347 0ustar awbusers #define __EST_SIGPR_FRAME_H__

    In file ../include/sigpr/EST_sigpr_frame.h:

    #define __EST_SIGPR_FRAME_H__

    For example code, see Windowing

    Documentation

    For example code, see Windowing

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/LinearPredictionfunctions.html0100644001741100001440000000643507327543063023166 0ustar awbusers Linear Prediction functions

    Linear Prediction functions

    o sig2lpc
    Produce the full set of linear prediction coefficients from a frame of speech waveform.
    o lpc2cep
    Calulate cepstral coefficients from lpc coefficients.
    o sig2lpc
    Produce a set linear prediction coefficients from a frame of speech waveform.
    o sig2ref
    Produce a set of reflection coefficients from a frame of speech waveform.
    o Area Functions
    o lpc2ref
    Calculate the reflection coefficients from the lpc coefficients.
    o ref2lpc
    Calculate the linear prediction coefficients from the reflection coefficients.
    o lpc2lsf
    Calculate line spectral frequencies from linear prediction coefficients.
    o lsf2lpc
    Calculate line spectral frequencies from linear prediction coefficients.

    Including, generation of coefficients from the signal, reflection coefficients, line spectral frequencies, areas.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2lpc.html0100644001741100001440000000463207327543063017342 0ustar awbusers void sig2lpc

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2lpc

    (const EST_FVector &sig, EST_FVector &acf,
      EST_FVector &ref, EST_FVector &lpc)

    Produce the full set of linear prediction coefficients from a frame of speech waveform.

    Documentation

    Produce the full set of linear prediction coefficients from a frame of speech waveform.

    Parameters:
    sig - : the frame of input waveform
    acf - : the autocorrelation coefficients
    ref - : the reflection coefficients
    lpc - : the LPC coefficients The order of the lpc analysis is given as the size of the <parameter> lpc <parameter> vector - 1. The coefficients are placed in the locations 1 - size, and the energy is placed in location 0.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lpc2cep.html0100644001741100001440000000443507327543063017330 0ustar awbusers void lpc2cep

    In file ../include/sigpr/EST_sigpr_frame.h:

    void lpc2cep

    (const EST_FVector &lpc, EST_FVector &cep)

    Calulate cepstral coefficients from lpc coefficients.

    Documentation

    Calulate cepstral coefficients from lpc coefficients.

    It is possible to calculate a set of cepstral coefficients from lpc coefficients using the relationship:



    The order of the cepstral analysis can be different from the lpc order. If the cepstral order is greater, interpolation is used (FINISH add equation). Both orders are taken from the lengths of the respective vectors. Note that these cepstral coefficients take on the assumptions (and errors) of the lpc model and hence will not be the same as cepstral coefficients calculated using DFT functions.

    Parameters:
    lpc - : the LPC coefficients (input)
    lpc - : the cepstral coefficients (output)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2lpc.2.html0100644001741100001440000000363407327543064017504 0ustar awbusers void sig2lpc

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2lpc

    (const EST_FVector &sig, EST_FVector &lpc)

    Produce a set linear prediction coefficients from a frame of speech waveform.

    Documentation

    Produce a set linear prediction coefficients from a frame of speech waveform. sig is the frame of input waveform, and lpc are the LPC coefficients. The order of the lpc analysis is given as the size of the lpc vector -1. The coefficients are placed in the locations 1 - size, and the energy is placed in location 0.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2ref.html0100644001741100001440000000370607327543064017342 0ustar awbusers void sig2ref

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2ref

    (const EST_FVector &sig, EST_FVector &ref)

    Produce a set of reflection coefficients from a frame of speech waveform.

    Documentation

    Produce a set of reflection coefficients from a frame of speech waveform. sig is the frame of input waveform, and ref are the LPC coefficients. The order of the lpc analysis is given as the size of the lpc vector -1. The coefficients are placed in the locations 1 - size, and the energy is placed in location 0.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/AreaFunctions.html0100644001741100001440000000415007327543064020534 0ustar awbusers Area Functions

    Area Functions

    o ref2truearea
    The area according to the formula.
    o ref2area
    An approximation of the area is calculate by skipping the denominator in the formula.
    o ref2logarea
    The logs of the areas.

    Using the analogy of the lossless tube, the cross-sectional areas of the sections of this tube are related to the reflection coefficients and can be calculated from the following relationship:



    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ref2truearea.html0100644001741100001440000000317407327543064020367 0ustar awbusers void ref2truearea

    In file ../include/sigpr/EST_sigpr_frame.h:

    void ref2truearea

    (const EST_FVector &ref,
      EST_FVector &area)

    The area according to the formula.

    Documentation

    The area according to the formula.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ref2area.html0100644001741100001440000000333207327543064017463 0ustar awbusers void ref2area

    In file ../include/sigpr/EST_sigpr_frame.h:

    void ref2area

    (const EST_FVector &ref,
      EST_FVector &area)

    An approximation of the area is calculate by skipping the denominator in the formula.

    Documentation

    An approximation of the area is calculate by skipping the denominator in the formula.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ref2logarea.html0100644001741100001440000000314507327543064020167 0ustar awbusers void ref2logarea

    In file ../include/sigpr/EST_sigpr_frame.h:

    void ref2logarea

    (const EST_FVector &ref,
      EST_FVector &logarea)

    The logs of the areas.

    Documentation

    The logs of the areas.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lpc2ref.html0100644001741100001440000000344307327543064017334 0ustar awbusers void lpc2ref

    In file ../include/sigpr/EST_sigpr_frame.h:

    void lpc2ref

    (const EST_FVector &lpc, EST_FVector &ref)

    Calculate the reflection coefficients from the lpc coefficients.

    Documentation

    Calculate the reflection coefficients from the lpc coefficients. Note that in the standard linear prediction analysis, the reflection coefficients are generated as a by-product. @see sig2lpc

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/ref2lpc.html0100644001741100001440000000352007327543064017330 0ustar awbusers void ref2lpc

    In file ../include/sigpr/EST_sigpr_frame.h:

    void ref2lpc

    (const EST_FVector &ref, EST_FVector &lpc)

    Calculate the linear prediction coefficients from the reflection coefficients.

    Documentation

    Calculate the linear prediction coefficients from the reflection coefficients. Use the equation:

    See Also:
    lpc2ref

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lpc2lsf.html0100644001741100001440000000342207327543064017341 0ustar awbusers void lpc2lsf

    In file ../include/sigpr/EST_sigpr_frame.h:

    void lpc2lsf

    (const EST_FVector &lpc, EST_FVector &lsf)

    Calculate line spectral frequencies from linear prediction coefficients.

    Documentation

    Calculate line spectral frequencies from linear prediction coefficients. Use the equation:

    See Also:
    lsf2lpc

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/lsf2lpc.html0100644001741100001440000000342207327543064017341 0ustar awbusers void lsf2lpc

    In file ../include/sigpr/EST_sigpr_frame.h:

    void lsf2lpc

    (const EST_FVector &lsf, EST_FVector &lpc)

    Calculate line spectral frequencies from linear prediction coefficients.

    Documentation

    Calculate line spectral frequencies from linear prediction coefficients. Use the equation:

    See Also:
    lpc2lsf

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Energyandpowerframefunctions.html0100644001741100001440000000323207327543064023730 0ustar awbusers Energy and power frame functions

    Energy and power frame functions

    o sig2pow
    Calculate the power for a frame of speech.
    o sig2rms
    Calculate the root mean square energy for a frame of speech.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2pow.html0100644001741100001440000000325607327543064017373 0ustar awbusers void sig2pow

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2pow

    (EST_FVector &frame, float &power)

    Calculate the power for a frame of speech.

    Documentation

    Calculate the power for a frame of speech. This is defined as

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2rms.html0100644001741100001440000000327307327543064017366 0ustar awbusers void sig2rms

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2rms

    (EST_FVector &frame, float &rms_energy)

    Calculate the root mean square energy for a frame of speech.

    Documentation

    Calculate the root mean square energy for a frame of speech. This is defined as

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Framebasedfilterbankandcepstralanalysis.html0100644001741100001440000000547307327543064026064 0ustar awbusers Frame based filter bank and cepstral analysis

    Frame based filter bank and cepstral analysis

    o sig2fbank
    Calculate the (log) energy (or power) in each channel of a Mel scale filter bank for a frame of speech.
    o sig2fft
    Calculate the energy (or power) spectrum of a frame of speech.
    o fft2fbank
    Given a Mel filter bank description, bin the FFT coefficients to compute the output of the filters.
    o fbank2melcep
    Compute the dicrete cosine transform of log Mel-scale filter bank output to get the Mel cepstral coeffecients for a frame of speech.
    o make_mel_triangular_filter
    Make a triangular Mel scale filter.
    o Frequency conversion functions

    These functions are Frame based signal processing functions.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2fbank.html0100644001741100001440000000440107327543064017640 0ustar awbusers void sig2fbank

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2fbank

    (const EST_FVector &sig,
      EST_FVector &fbank_frame,
      const float sample_rate,
      const bool use_power_rather_than_energy,
      const bool take_log)

    Calculate the (log) energy (or power) in each channel of a Mel scale filter bank for a frame of speech.

    Documentation

    Calculate the (log) energy (or power) in each channel of a Mel scale filter bank for a frame of speech. The filters are triangular, are evenly spaced and are all of equal width, on a Mel scale. The upper and lower cutoffs of each filter are at the centre frequencies of the adjacent filters. The Mel scale is described under Hz2Mel.

    See Also:
    Hz2Mel
    sig2fft
    fft2fbank

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2fft.html0100644001741100001440000000405307327543064017341 0ustar awbusers void sig2fft

    In file ../include/sigpr/EST_sigpr_frame.h:

    void sig2fft

    (const EST_FVector &sig,
      EST_FVector &fft_vec,
      const bool use_power_rather_than_energy)

    Calculate the energy (or power) spectrum of a frame of speech.

    Documentation

    Calculate the energy (or power) spectrum of a frame of speech. The FFT order is determined by the number of samples in the frame of speech, and is a power of 2. Note that the FFT vector returned corresponds to frequencies from 0 to half the sample rate. Energy is the magnitude of the FFT; power is the squared magnitude.

    See Also:
    fft2fbank
    sig2fbank

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/fft2fbank.html0100644001741100001440000000451507327543064017643 0ustar awbusers void fft2fbank

    In file ../include/sigpr/EST_sigpr_frame.h:

    void fft2fbank

    (const EST_FVector &fft_frame,
      EST_FVector &fbank_vec,
      const float Hz_per_fft_coeff,
      const EST_FVector &mel_fbank_frequencies)

    Given a Mel filter bank description, bin the FFT coefficients to compute the output of the filters.

    Documentation

    Given a Mel filter bank description, bin the FFT coefficients to compute the output of the filters. The first and last elements of mel_fbank_frequencies define the lower and upper bound of the first and last filters respectively and the intervening elements give the filter centre frequencies. That is, mel_fbank_frequencies has two more elements than fbank_vec.

    See Also:
    fastFFT
    sig2fft
    sig2fbank
    fbank2melcep

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/fbank2melcep.html0100644001741100001440000000506507327543064020332 0ustar awbusers void fbank2melcep

    In file ../include/sigpr/EST_sigpr_frame.h:

    void fbank2melcep

    (const EST_FVector &fbank_vec,
      EST_FVector &mfcc,
      const float liftering_parameter,
      const bool include_c0 = false)

    Compute the dicrete cosine transform of log Mel-scale filter bank output to get the Mel cepstral coeffecients for a frame of speech.

    Documentation

    Compute the dicrete cosine transform of log Mel-scale filter bank output to get the Mel cepstral coeffecients for a frame of speech. Optional liftering (filtering in the cepstral domain) can be applied to normalise the magnitudes of the coefficients. This is useful because, typically, the higher order cepstral coefficients are significantly smaller than the lower ones and it is often desirable to normalise the means and variances across coefficients.

    The lifter (cepstral filter) used is:


    A typical value of L used in speech recognition is 22. A value of L=0 is taken to mean no liftering. This is equivalent to L=1.

    See Also:
    sig2fft
    fft2fbank
    sig2fbank

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/make_mel_triangular_filter.html0100644001741100001440000000466007327543064023350 0ustar awbusers void make_mel_triangular_filter

    In file ../include/sigpr/EST_sigpr_frame.h:

    void make_mel_triangular_filter

    (const float this_mel_centre,
      const float this_mel_low,
      const float this_mel_high,
      const float Hz_per_fft_coeff,
      const int half_fft_order,
      int &fft_index_start,
      EST_FVector &filter)

    Make a triangular Mel scale filter.

    Documentation

    Make a triangular Mel scale filter. The filter is centred at this_mel_centre and extends from this_mel_low to this_mel_high. half_fft_order is the length of a power/energy spectrum covering 0Hz to half the sampling frequency with a resolution of Hz_per_fft_coeff.

    The routine returns a vector of weights to be applied to the energy/power spectrum starting at element fft_index_start. The number of points (FFT coefficients) covered by the filter is given by the length of the returned vector filter.

    See Also:
    fft2fbank
    Hz2Mel
    Mel2Hz

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Frequencyconversionfunctions.html0100644001741100001440000000325607327543064024001 0ustar awbusers Frequency conversion functions

    Frequency conversion functions

    o Hz2Mel
    Convert Hertz to Mel.
    o Mel2Hz
    Convert Mel to Hertz.

    These are functions used in Filter bank and cepstral analysis.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Hz2Mel.html0100644001741100001440000000317207327543064017077 0ustar awbusers float Hz2Mel

    In file ../include/sigpr/EST_sigpr_frame.h:

    float Hz2Mel

    (float frequency_in_Hertz)

    Convert Hertz to Mel.

    Documentation

    Convert Hertz to Mel. The Mel scale is defined by

    See Also:
    Mel2Hz
    Frequency conversion functions

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Mel2Hz.html0100644001741100001440000000300207327543064017067 0ustar awbusers float Mel2Hz

    In file ../include/sigpr/EST_sigpr_frame.h:

    float Mel2Hz

    (float frequency_in_Mel)

    Convert Mel to Hertz.

    Documentation

    Convert Mel to Hertz.

    See Also:
    Hz2Mel

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Functionsforusewithframebasedprocessing.html0100644001741100001440000000631407327543064026176 0ustar awbusers Functions for use with frame based processing

    Functions for use with frame based processing

    o sig2coef
    Produce a single set of coefficents from a waveform.
    o sigpr_base
    Produce multiple coefficients from a waveform by repeated calls to sig2coef.
    o power
    Calculate the power for each frame of the waveform.
    o energy
    Calculate the rms energy for each frame of the waveform.
    o fbank
    Mel scale filter bank analysis.
    o melcep
    Mel scale cepstral analysis via filter bank analysis.

    In the following functions, the input is a EST_Wave waveform, and the output is a (usually multi-channel) EST_Track. The track must be set up appropriately before hand. This means the track must be resized accordingly with the correct numbers of frame and channels.

    The positions of the frames are found by examination of the time array in the EST_Track, which must be filled prior to the function call. The usual requirement is for fixed frame analysis, where each analysis frame is, say, 10ms after the previous one.

    A common alternative is to perform pitch-synchronous analysis where the time shift is related to the local pitch period.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sig2coef.html0100644001741100001440000001050207327543064017472 0ustar awbusers void sig2coef

    In file ../include/sigpr/EST_sigpr_utt.h:

    void sig2coef

    (EST_Wave &sig, EST_Track &a,
      EST_String type, float factor = 2.0,
      EST_WindowFunc* wf = EST_Window::creator(DEFAULT_WINDOW_NAME))

    Produce a single set of coefficents from a waveform.

    Documentation

    Produce a single set of coefficents from a waveform. The type of coefficient required is given in the argument <parameter>type</parameter>. Possible types are:

    <variablelist>

    <varlistentry><term>lpc</term><listitem>linear predictive coding</listitem></varlistentry>

    <varlistentry><term>cep</term><listitem>cepstrum coding from lpc coefficients</listitem></varlistentry>

    <varlistentry><term>melcep</term><listitem>Mel scale cepstrum coding via fbank</listitem></varlistentry>

    <varlistentry><term>fbank</term><listitem>Mel scale log filterbank analysis</listitem></varlistentry>

    <varlistentry><term>lsf</term><listitem>line spectral frequencies</listitem></varlistentry>

    <varlistentry><term>ref</term><listitem>Linear prediction reflection coefficients</listitem></varlistentry>

    <varlistentry><term>power</term><listitem></listitem></varlistentry>

    <varlistentry><term>f0</term><listitem>srpd algorithm</listitem></varlistentry>

    <varlistentry><term>energy</term><listitem>root mean square energy</listitem></varlistentry>

    </variablelist>

    The order of the analysis is calculated from the number of channels in <parameter>fv</parameter>. The positions of the analysis windows must be given by filling in the track's time array.

    This function windows the waveform at the intervals given by the track time array. The length of each window is <parameter>factor<parameter> the local time shift. The windowing function is giveb by <parameter>wf</parameter>.

    Parameters:
    sig - : input waveform
    fv - : output coefficients. These have been pre-allocated and the number of channels in a indicates the order of the analysis.
    type - : the types of coefficients to be produced. "lpc", "cep" etc
    factor - : the frame length factor, i.e. the analysis frame length will be this times the local pitch period.
    wf - : function for windowing. See Windowing mechanisms

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sigpr_base.html0100644001741100001440000000456507327543064020123 0ustar awbusers void sigpr_base

    In file ../include/sigpr/EST_sigpr_utt.h:

    void sigpr_base

    (EST_Wave &sig, EST_Track &fv,
      EST_Features &op,
      const EST_StrList &slist)

    Produce multiple coefficients from a waveform by repeated calls to sig2coef.

    Documentation

    Produce multiple coefficients from a waveform by repeated calls to sig2coef.

    Parameters:
    sig - : input waveform
    fv - : output coefficients. These have been pre-allocated and the number of channels in a indicates the order of the analysis.
    op - : Features structure containing options for analysis order, frame shift etc.
    slist - : list of types of coefficients required, from the set of possible types that sig2coef can take.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/power.html0100644001741100001440000000405507327543064017133 0ustar awbusers void power

    In file ../include/sigpr/EST_sigpr_utt.h:

    void power

    (EST_Wave &sig, EST_Track &a, float factor)

    Calculate the power for each frame of the waveform.

    Documentation

    Calculate the power for each frame of the waveform.

    Parameters:
    sig - : input waveform
    a - : output power track
    factor - : the frame length factor, i.e. the analysis frame length will be this times the local pitch period.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/energy.html0100644001741100001440000000416407327543064017271 0ustar awbusers void energy

    In file ../include/sigpr/EST_sigpr_utt.h:

    void energy

    (EST_Wave &sig, EST_Track &a, float factor)

    Calculate the rms energy for each frame of the waveform.

    Documentation

    Calculate the rms energy for each frame of the waveform.

    This function calls sig2energy

    Parameters:
    sig - input waveform
    - a output coefficients
    factor - optional: the frame length factor, i.e. the analysis frame length will be this times the local pitch period.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/fbank.html0100644001741100001440000000576407327543064017070 0ustar awbusers void fbank

    In file ../include/sigpr/EST_sigpr_utt.h:

    void fbank

    (EST_Wave &sig, EST_Track &fbank,
      const float factor,
      EST_WindowFunc* wf = EST_Window::creator(DEFAULT_WINDOW_NAME),
      const bool up = false, const bool take_log = true)

    Mel scale filter bank analysis.

    Documentation

    Mel scale filter bank analysis. The Mel scale triangular filters are computed via an FFT (see fastFFT). This routine is required for Mel cepstral analysis (see melcep). The analysis of each frame is done by sig2fbank.

    A typical filter bank analysis for speech recognition might use log energy outputs from 20 filters.

    Parameters:
    sig - : input waveform
    fbank - : the output. The number of filters is determined from the number size of this track.
    factor - : the frame length factor, i.e. the analysis frame length will be this times the local pitch period
    wf - : function for windowing. See Windowing mechanisms
    up - : whether the filterbank analysis should use power rather than energy.
    take_log - : whether to take logs of the filter outputs
    See Also:
    sig2fbank
    melcep

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/melcep.html0100644001741100001440000000635607327543064017252 0ustar awbusers void melcep

    In file ../include/sigpr/EST_sigpr_utt.h:

    void melcep

    (EST_Wave &sig, EST_Track &mfcc_track,
      float factor, int fbank_order,
      float liftering_parameter,
      EST_WindowFunc* wf = EST_Window::creator(DEFAULT_WINDOW_NAME),
      const bool include_c0 = false,
      const bool up = false)

    Mel scale cepstral analysis via filter bank analysis.

    Documentation

    Mel scale cepstral analysis via filter bank analysis. Cepstral parameters are computed for each frame of speech. The analysis requires fbank. The cepstral analysis of the filterbank outputs is performed by fbank2melcep.

    A typical Mel cepstral coefficient (MFCC) analysis for speech recognition might use 12 cepstral coefficients computed from a 20 channel filterbank.

    Parameters:
    sig - input: waveform
    mfcc_track - : the output
    factor - : the frame length factor, i.e. the analysis frame length will be this times the local pitch period
    fbank_order - : the number of Mel scale filters used for the analysis
    liftering_parameter - : for filtering in the cepstral domain See fbank2melcep
    wf - : function for windowing. See Windowing mechanisms
    include_c0 - : whether the zero'th cepstral coefficient is to be included
    up - : whether the filterbank analysis should use power rather than energy.
    See Also:
    fbank
    fbank2melcep

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/PitchF0DetectionAlgorithmfunctions.html0100644001741100001440000000510407327543064024667 0ustar awbusers Pitch/F0 Detection Algorithm functions

    Pitch/F0 Detection Algorithm functions

    o pda
    Top level pitch (F0) detection algorithm.
    o icda
    Top level intonation contour detection algorithm.
    o default_pda_options
    Create a set sensible defaults for use in pda and icda.
    o srpd
    Super resolution pitch trackerer.
    o smooth_phrase
    Smooth selected parts of an f0 contour.
    o smooth_portion
    Smooth all the points in an F0 contour

    These functions are used to produce a track of fundamental frequency (F0) against time of a waveform.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/pda.html0100644001741100001440000000421207327543064016536 0ustar awbusers void pda

    In file ../include/sigpr/EST_sigpr_utt.h:

    void pda

    (EST_Wave &sig, EST_Track &fz,
      EST_Features &op, EST_String method="")

    Top level pitch (F0) detection algorithm.

    Documentation

    Top level pitch (F0) detection algorithm. Returns a track conatining evenly spaced frames of speech, each containing a F0 value for that point.

    At present, only the \Rref{srpd} pitch tracker is implemented, so this is always called regardless of what <parameter>method</parameter> is set to.

    Parameters:
    sig - : input waveform
    fz - : output f0 contour
    op - : parameters for pitch tracker
    method - : pda method to be used.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/icda.html0100644001741100001440000000477307327543064016706 0ustar awbusers void icda

    In file ../include/sigpr/EST_sigpr_utt.h:

    void icda

    (EST_Wave &sig, EST_Track &fz,
      EST_Track &speech, EST_Option &op,
      EST_String method = "")

    Top level intonation contour detection algorithm.

    Documentation

    Top level intonation contour detection algorithm. Returns a track conatining evenly spaced frames of speech, each containing a F0 for that point. icda differs from pda in that the contour is smoothed, and unvoiced portions have interpolated F0 values.

    Parameters:
    sig - : input waveform
    fz - : output f0 contour
    speech - : Interpolation is controlled by the <tt>speech</tt> track. When a point has a positive value in the speech track, it is a candidate for interpolation.
    op - : parameters for pitch tracker
    method - : pda method to be used.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/default_pda_options.html0100644001741100001440000000306707327543064022024 0ustar awbusers void default_pda_options

    In file ../include/sigpr/EST_sigpr_utt.h:

    void default_pda_options

    (EST_Features &al)

    Create a set sensible defaults for use in pda and icda.

    Documentation

    Create a set sensible defaults for use in pda and icda.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/srpd.html0100644001741100001440000001314407327543064016746 0ustar awbusers void srpd

    In file ../include/sigpr/EST_sigpr_utt.h:

    void srpd

    (EST_Wave &sig, EST_Track &fz,
      EST_Features &options)

    Super resolution pitch trackerer.

    Documentation

    Super resolution pitch trackerer.

    srpd is a pitch detection algorithm that produces a fundamental frequency contour from a speech waveform. At present only the super resolution pitch detetmination algorithm is implemented. See (Medan, Yair, and Chazan, 1991) and (Bagshaw et al., 1993) for a detailed description of the algorithm. </para><para>

    Frames of data are read in from <parameter>sig</parameter> in chronological order such that each frame is shifted in time from its predecessor by <parameter>pda_frame_shift</parameter>. Each frame is analysed in turn.

    </para><para>

    The maximum and minimum signal amplitudes are initially found over the duration of two segments, each of length N_min samples. If the sum of their absolute values is below two times <parameter>noise_floor</parameter>, the frame is classified as representing silence and no coefficients are calculated. Otherwise, a cross correlation coefficient is calculated for all n from a period in samples corresponding to <parameter>min_pitch </parameter> to a period in samples corresponding to <parameter>max_pitch</parameter>, in steps of <parameter>decimation_factor</parameter>. In calculating the coefficient only one in <parameter>decimation_factor</parameter> samples of the two segments are used. Such down-sampling permits rapid estimates of the coefficients to be calculated over the range N_min <= n <= N_max. This results in a cross-correlation track for the frame being analysed. </para><para>

    Local maxima of the track with a coefficient value above a specified threshold form candidates for the fundamental period. The threshold is adaptive and dependent upon the values <parameter>v2uv_coeff_thresh </parameter>, <parameter>min_v2uv_coef_thresh </parameter>, and <parameter> v2uv_coef_thresh_rati_ratio</parameter>. If the previously analysed frame was classified as unvoiced or silent (which is the initial state) then the threshold is set to <parameter>v2uv_coef_thresh</parameter>. Otherwise, the previous frame was classified as being voiced, and the threshold is set equal to [\-r] <parameter>v2uv_coef_thresh_rati_ratio </parameter> times the cross-correlation coefficient value at the point of the previous fundamental period in the former coefficients track. This product is not permitted to drop below <parameter>v2uv_coef_thresh</parameter>.

    </para><para>

    If no candidates for the fundamental period are found, the frame is classified as being unvoiced. Otherwise, the candidates are further processed to identify the most likely true pitch period. During this additional processing, a threshold given by <parameter>anti_doubling_thres</parameter> is used.

    </para><para>

    If the <parameter>peak_tracking</parameter> flag is set to true, biasing is applied to the cross-correlation track as described in (Bagshaw et al., 1993). </para><para> </para><para>

    Parameters:
    sig - : input waveform
    op - : options regarding pitch tracking parameters
    op.min_pitch - : minimum permitted F0 value
    op.max_pitch - : maximum permitted F0 value
    op.pda_frame_shift - : analysis frame shift
    op.pda_frame_length - : analysis frame length
    op.lpf_cutoff - : cut off frequency for low pass filtering
    op.lpf_order - : order of low pass filtering (must be odd)
    op.decimation -
    op.noise_floor -
    op.min_v2uv_coef_thresh -
    op.v2uv_coef_thresh_ratio -
    op.v2uv_coef_thresh -
    op.anti_doubling_thresh -
    op.peak_tracking -

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/smooth_phrase.html0100644001741100001440000000355007327543064020651 0ustar awbusers void smooth_phrase

    In file ../include/sigpr/EST_sigpr_utt.h:

    void smooth_phrase

    (EST_Track &c, EST_Track &speech,
      EST_Features &options,
      EST_Track &sm)

    Smooth selected parts of an f0 contour.

    Documentation

    Smooth selected parts of an f0 contour. Interpolation is controlled by the <tt>speech</tt> track. When a point has a positive value in the speech track, it is a candidate for interpolation.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/smooth_portion.html0100644001741100001440000000307207327543064021060 0ustar awbusers void smooth_portion

    In file ../include/sigpr/EST_sigpr_utt.h:

    void smooth_portion

    (EST_Track &c, EST_Option &op)

    Smooth all the points in an F0 contour

    Documentation

    Smooth all the points in an F0 contour

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/DeltaandAccelerationcoefficents.html0100644001741100001440000000376507327543064024245 0ustar awbusers Delta and Acceleration coefficents

    Delta and Acceleration coefficents

    o delta
    Produce a set of delta coefficents for a track
    o sigpr_delta
    Produce multiple sets of delta coefficents from a waveform.
    o sigpr_acc
    Produce multiple sets of acceleration coefficents from a waveform

    Produce delta and acceleration coefficents from a set of coefficients or the waveform.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/delta.html0100644001741100001440000000434407327543064017071 0ustar awbusers void delta

    In file ../include/sigpr/EST_sigpr_utt.h:

    void delta

    (EST_Track &tr, EST_Track &d,
      int regression_length = 3)

    Produce a set of delta coefficents for a track

    Documentation

    Produce a set of delta coefficents for a track

    The delta function is used to produce a set of coefficients which estimate the rate of change of a set of parameters. The output track <parameter>d<parameter> must be setup before hand, i.e. it must have the same number of frames and channels as <parameter>tr</parameter>.

    Parameters:
    tr - : input track of base coefficients
    d - : output track of delta coefficients.
    regression_length - : number of previous frames on which delta estimation is calculated on.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sigpr_delta.html0100644001741100001440000000514207327543064020272 0ustar awbusers void sigpr_delta

    In file ../include/sigpr/EST_sigpr_utt.h:

    void sigpr_delta

    (EST_Wave &sig, EST_Track &fv,
      EST_Features &op,
      const EST_StrList &slist)

    Produce multiple sets of delta coefficents from a waveform.

    Documentation

    Produce multiple sets of delta coefficents from a waveform.

    Calculate specified types of delta coefficients. This function is used when the base types of coefficients haven't been calculated. This function calls sig2coef to calculate the base types from which the deltas are calculated, and hence the requirements governing the setup of <parameter>fv</parameter> for sig2coef also hold here.

    Parameters:
    sig - : input waveform
    fv - : output coefficients. These have been pre-allocated and the number of channels in a indicates the order of the analysis.
    op - : Features structure containing options for analysis order, frame shift etc.
    slist - : list of types of delta coefficients required.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/sigpr_acc.html0100644001741100001440000000557207327543064017736 0ustar awbusers void sigpr_acc

    In file ../include/sigpr/EST_sigpr_utt.h:

    void sigpr_acc

    (EST_Wave &sig, EST_Track &fv,
      EST_Features &op,
      const EST_StrList &slist)

    Produce multiple sets of acceleration coefficents from a waveform

    Documentation

    Produce multiple sets of acceleration coefficents from a waveform

    Calculate specified types of acceleration coefficients. This function is used when the base types of coefficient haven't been calculated. This function calls sig2coef to calculate the base types from which the deltas are calculated, and hence the requirements governing the setup of <parameter>fv</parameter> for sig2coef also hold here.

    Parameters:
    sig - : input waveform
    fv - : output coefficients. These have been pre-allocated and the number of channels in a indicates the order of the analysis.
    op - : Features structure containing options for analysis order, frame shift etc.
    slist - : list of types of acceleration coefficients required. The delta function is used to produce a set of coefficients which estimate the rate of change of a set of parameters.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Somegenerallyusefulthings..html0100644001741100001440000000264007327543064023322 0ustar awbusers Some generally useful things.

    Some generally useful things.

    Some generally useful things.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/MiscellaneousSignalProcessingFunctions..html0100644001741100001440000000277307327543064025751 0ustar awbusers Miscellaneous Signal Processing Functions.

    Miscellaneous Signal Processing Functions.

    o Preemphasis

    Some Functions which deon't fit elsewhere.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Preemphasis.html0100644001741100001440000000345207327543064020257 0ustar awbusers Preemphasis

    Preemphasis

    o EST_pre_emphasis
    Pre process to emphasise higher frequencies
    o EST_post_deemphasis
    Post process to get the original back (eg after resynthesis)

    Used in LPC analysis and spectrogram creation. These two functions are inverses of one another.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_pre_emphasis.html0100644001741100001440000000321307327543064021164 0ustar awbusers void EST_pre_emphasis

    In file ../include/sigpr/EST_misc_sigpr.h:

    void EST_pre_emphasis

    (EST_Wave &signal,
      EST_Wave &psignal, float a)

    Pre process to emphasise higher frequencies

    Documentation

    Pre process to emphasise higher frequencies

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_post_deemphasis.html0100644001741100001440000000326307327543064021701 0ustar awbusers void EST_post_deemphasis

    In file ../include/sigpr/EST_misc_sigpr.h:

    void EST_post_deemphasis

    (EST_Wave &signal,
      EST_Wave &dsignal, float a)

    Post process to get the original back (eg after resynthesis)

    Documentation

    Post process to get the original back (eg after resynthesis)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Spectrogramgeneration.html0100644001741100001440000000340607327543064022340 0ustar awbusers Spectrogram generation

    Spectrogram generation

    o raw_spectrogram
    Compute the power-spectrogram
    o scale_spectrogram
    Manipulate the spectrogram to

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/raw_spectrogram.html0100644001741100001440000000332007327543064021170 0ustar awbusers void raw_spectrogram

    In file ../include/sigpr/EST_spectrogram.h:

    void raw_spectrogram

    (EST_Track &sp, EST_Wave &sig,
      float length, float shift, int order,
      bool slow=0)

    Compute the power-spectrogram

    Documentation

    Compute the power-spectrogram

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/scale_spectrogram.html0100644001741100001440000000320507327543064021470 0ustar awbusers void scale_spectrogram

    In file ../include/sigpr/EST_spectrogram.h:

    void scale_spectrogram

    (EST_Track &s, float range, float b,
      float w)

    Manipulate the spectrogram to

    Documentation

    Manipulate the spectrogram to

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/FilterDesign.html0100644001741100001440000000545407327543064020362 0ustar awbusers Filter Design

    Filter Design

    o design_FIR_filter
    Create an artibtrary filter or order order that attempts to give the frequecny response given by freq_response.
    o design_lowpass_FIR_filter
    Design a FIR lowpass filter of order order and cut-off freqeuncy freq.
    o design_highpass_FIR_filter
    Design a FIR highpass filter of order order and cut-off freqeuncy freq.

    FIR Filtering is a 2 stage process, first involving design and then the filtering itself. As the design is somewhat costly, it is usually desirable to design a filter outside the main loop.

    For one off filtering operations, functions are provided which design and filter the waveform in a single go.

    It is impossible to design an ideal filter, i.e. one which exactly obeys the desired frequency response. The "quality" of a filter is given by the order parameter, with high values indicating good approximations to desired responses. High orders are slower. The default is 199 which gives a pretty good filter, but a value as low as 19 is still usable if speech is important.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/design_FIR_filter.html0100644001741100001440000000455507327543064021322 0ustar awbusers EST_FVector design_FIR_filter

    In file ../include/sigpr/EST_filter_design.h:

    EST_FVector design_FIR_filter

    (const EST_FVector &freq_response,
      int filter_order)

    Create an artibtrary filter or order order that attempts to give the frequecny response given by freq_response.

    Documentation

    Create an artibtrary filter or order order that attempts to give the frequecny response given by freq_response. The vector freq_response should be any size 2**N and contain a plot of the desired frequency response with values ranging between 0.0 and 1.0. The actual filtering is done by FIRfilter.

    See Also:
    design_lowpass_FIR_filter, design_highpass_FIR_filter
    FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/design_lowpass_FIR_filter.html0100644001741100001440000000435107327543064023064 0ustar awbusers EST_FVector design_lowpass_FIR_filter

    In file ../include/sigpr/EST_filter_design.h:

    EST_FVector design_lowpass_FIR_filter

    (int sample_rate,
      int freq,
      int order)

    Design a FIR lowpass filter of order order and cut-off freqeuncy freq.

    Documentation

    Design a FIR lowpass filter of order order and cut-off freqeuncy freq. The filter coefficients are returned in the FVector and should be used in conjunction with FIRfilter.

    See Also:
    design_FIR_filter, design_highpass_FIR_filter, FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/design_highpass_FIR_filter.html0100644001741100001440000000446707327543064023212 0ustar awbusers EST_FVector design_highpass_FIR_filter

    In file ../include/sigpr/EST_filter_design.h:

    EST_FVector design_highpass_FIR_filter

    (int sample_rate,
      int freq,
      int order)

    Design a FIR highpass filter of order order and cut-off freqeuncy freq.

    Documentation

    Design a FIR highpass filter of order order and cut-off freqeuncy freq. The filter coefficients are returned in the FVector and should be used in conjunction with FIRfilter
    See Also:
    design_FIR_filter, design_lowpass_FIR_filter, design_highpass_FIR_filter
    FIRfilter, FIRlowpass_filter, FIRhighpass_filter

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Utterance.html0100644001741100001440000002643107327543064020446 0ustar awbusers class EST_Utterance

    In file ../include/ling_class/EST_Utterance.h:

    class EST_Utterance

    A class that contains <link linkend="est-item">EST_Items</link> and <link linkend="est-relation">EST_Relations</link> between them.

    Public Fields

    [more] Utterance access

    Public Methods

    [more] Constructor and initialisation Functions

    [more] EST_Utterance ()
    default constructor

    [more] Utility Functions

    [more]void init ()
    initialise utterance
    [more]void clear ()
    remove everything in utterance
    [more]void clear_relations ()
    clear the contents of the relations only
    [more]void set_highest_id (int n)
    set the next id to be <parameter>n</parameter>
    [more]int next_id ()
    return the id of the next item

    [more] File i/o

    [more]EST_read_status load (const EST_String &filename)
    load an utterance from an ascii file
    [more]EST_read_status load (EST_TokenStream &ts)
    load an utterance from a already opened token stream
    [more]EST_write_status save (const EST_String &filename, const EST_String &type="est_ascii") const
    save an utterance to an ascii file
    [more]EST_write_status save (ostream &outf, const EST_String &type) const
    save an utterance to an ostream


    Documentation

    A class that contains <link linkend="est-item">EST_Items</link> and <link linkend="est-relation">EST_Relations</link> between them. Used for holding interrelated linguistic structures.
    o Constructor and initialisation Functions

    o EST_Utterance()
    default constructor

    o Utility Functions

    ovoid init()
    initialise utterance

    ovoid clear()
    remove everything in utterance

    ovoid clear_relations()
    clear the contents of the relations only

    ovoid set_highest_id(int n)
    set the next id to be <parameter>n</parameter>

    oint next_id()
    return the id of the next item

    o File i/o

    oEST_read_status load(const EST_String &filename)
    load an utterance from an ascii file

    oEST_read_status load(EST_TokenStream &ts)
    load an utterance from a already opened token stream

    oEST_write_status save(const EST_String &filename, const EST_String &type="est_ascii") const
    save an utterance to an ascii file

    oEST_write_status save(ostream &outf, const EST_String &type) const
    save an utterance to an ostream

    o Utterance access
    Utterance access

    oEST_Features f
    Utterance level features

    ovoid evaluate_all_features()
    Evaluarte all feature functions in utterance

    oEST_Features relations
    The list of named relations

    oint num_relations() const
    number of relations in this utterance

    obool relation_present(const EST_String name) const
    returns true if utterance contains named relations. name can be either a single string or a bracketed list of strings e.g. "(Word Phone Syl)".

    obool relation_present(EST_StrList &names) const
    returns true if utterance contains all the relations named in the list name.

    oEST_Relation* relation(const char* name, int err_on_not_found=1)
    get relation by name

    oEST_Item* id(const EST_String &n)
    return EST_Item whose id is <parameter>n</parameter>

    oEST_Relation* create_relation(const EST_String &relname)
    create a new relation called <parameter>n</parameter>

    ovoid remove_relation(const EST_String &relname)
    remove the relation called <parameter>n</parameter>


    This class has no child classes.
    Friends:
    ostream& operator << (ostream &s, const EST_Utterance &u)

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Axiliaryoperationsonutterancestructures..html0100644001741100001440000000271507327543064026360 0ustar awbusers Axiliary operations on utterance structures.

    Axiliary operations on utterance structures.

    Axiliary operations on utterance structures.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/utterance_xml_try_and_open.html0100644001741100001440000000323507327543064023411 0ustar awbusers InputSource utterance_xml_try_and_open

    In file ../include/ling_class/EST_utterance_xml.h:

    InputSource utterance_xml_try_and_open

    (Entity ent)

    Export some RXP functionality for use in festival.

    Documentation

    Export some RXP functionality for use in festival.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/build_RelationList_hash_table.html0100644001741100001440000000313407327543064023736 0ustar awbusers void build_RelationList_hash_table

    In file ../include/ling_class/EST_relation_aux.h:

    void build_RelationList_hash_table

    (EST_RelationList &mlf,
      EST_hashedRelationList &hash_table,
      const bool base)

    hashed relation lists for super speed

    Documentation

    hashed relation lists for super speed

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Relation.html0100644001741100001440000004071307327543064020270 0ustar awbusers class EST_Relation

    In file ../include/ling_class/EST_Relation.h:

    class EST_Relation

    Relations are a container class for EST_Items.

    Public Fields

    [more]EST_Features f
    Features which belong to the relation rather than its items

    Public Methods

    [more] EST_Relation ()
    default constructor
    [more] EST_Relation (const EST_String &name)
    Constructor which sets name of relation
    [more] EST_Relation (const EST_Relation &r)
    Constructor which copies relation r
    [more] ~EST_Relation ()
    default destructor
    [more]void evaluate_features ()
    Evaluate the relation's feature functions
    [more]void evaluate_item_features ()
    Evaluate the feature functions of all the items in the relation
    [more]void clear ()
    Clear the relation of items
    [more]EST_Utterance* utt (void)
    Return the <link linkend="est-utterance">EST_Utterance</link> to which this relation belongs
    [more]void set_utt (EST_Utterance* u)
    Set the <link linkend="est-utterance">EST_Utterance</link> to which this relation belongs
    [more]const EST_String& name () const
    Return the name of the relation
    [more]EST_Item* head () const
    Return the head (first) item of the relation
    [more]EST_Item* root () const
    Return the root item of the relation
    [more]EST_Item* tail () const
    Return the tail (last) item of the relation
    [more]int empty () const
    return true if relation does not contain any items
    [more]void remove_item (EST_Item* item)
    remove EST_Item <parameter>item</parameter> from relation
    [more]void remove_item_feature (const EST_String &name)
    remove all occurances of feature <parameter>name</parameter> from relation's items
    [more]EST_read_status load (const EST_String &filename, const EST_String &type="esps")
    Load relation from file
    [more]EST_read_status load (const EST_String &filename, EST_TokenStream &ts, const EST_String &type)
    Load relation from already open tokenstream
    [more]EST_write_status save (const EST_String &filename, bool evaluate_ff = false) const
    Save relation to file
    [more]EST_write_status save (const EST_String &filename, const EST_String &type, bool evaluate_ff = false) const
    Save relation to file, evaluating all feature functions before hand
    [more]EST_write_status save (ostream &outf, EST_TKVL<void* , int> contents) const
    Save relation from already open ostream
    [more]EST_write_status save (ostream &outf, const EST_String &type, bool evaluate_ff) const
    Save relation from already open ostream

    Public

    [more] Return the tail (last) item of the relation
    [more] Load relation from already open tokenstream
    [more]typedef EST_Relation_Iterator Iterator
    Iteration


    Documentation

    Relations are a container class for EST_Items. Three types of relation structure are supported:

    <variablelist>

    <varlistentry><term>Linear lists</term><listitem></listitem></varlistentry> <varlistentry><term>Trees</term><listitem></listitem></varlistentry> <varlistentry><term>Multi-linear structures</term><listitem> as used in autosegmental phonology etc</listitem></varlistentry>

    </variablelist>

    o EST_Relation()
    default constructor

    o EST_Relation(const EST_String &name)
    Constructor which sets name of relation

    o EST_Relation(const EST_Relation &r)
    Constructor which copies relation r

    o ~EST_Relation()
    default destructor

    oEST_Features f
    Features which belong to the relation rather than its items

    ovoid evaluate_features()
    Evaluate the relation's feature functions

    ovoid evaluate_item_features()
    Evaluate the feature functions of all the items in the relation

    ovoid clear()
    Clear the relation of items

    oEST_Utterance* utt(void)
    Return the <link linkend="est-utterance">EST_Utterance</link> to which this relation belongs

    ovoid set_utt(EST_Utterance* u)
    Set the <link linkend="est-utterance">EST_Utterance</link> to which this relation belongs

    oconst EST_String& name() const
    Return the name of the relation

    oEST_Item* head() const
    Return the head (first) item of the relation

    oEST_Item* root() const
    Return the root item of the relation

    oEST_Item* tail() const
    Return the tail (last) item of the relation

    o Return the tail (last) item of the relation
    Return the tail (last) item of the relation

    oint empty() const
    return true if relation does not contain any items

    ovoid remove_item(EST_Item* item)
    remove EST_Item <parameter>item</parameter> from relation

    ovoid remove_item_feature(const EST_String &name)
    remove all occurances of feature <parameter>name</parameter> from relation's items

    oEST_read_status load(const EST_String &filename, const EST_String &type="esps")
    Load relation from file

    o Load relation from already open tokenstream
    Load relation from already open tokenstream

    oEST_read_status load(const EST_String &filename, EST_TokenStream &ts, const EST_String &type)
    Load relation from already open tokenstream

    oEST_write_status save(const EST_String &filename, bool evaluate_ff = false) const
    Save relation to file

    oEST_write_status save(const EST_String &filename, const EST_String &type, bool evaluate_ff = false) const
    Save relation to file, evaluating all feature functions before hand

    oEST_write_status save(ostream &outf, EST_TKVL<void* , int> contents) const
    Save relation from already open ostream

    oEST_write_status save(ostream &outf, const EST_String &type, bool evaluate_ff) const
    Save relation from already open ostream

    otypedef EST_Relation_Iterator Iterator
    Iteration


    This class has no child classes.
    Friends:
    ostream& operator << (ostream &s, const EST_Relation &u)
    class EST_Item

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Functionsforbuildingandtraversingtreerelations.html0100644001741100001440000000325707327543064027570 0ustar awbusers Functions for building and traversing tree relations

    Functions for building and traversing tree relations

    o Tree traversal functions
    o Tree building functions

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Treetraversalfunctions.html0100644001741100001440000001422507327543064022553 0ustar awbusers Tree traversal functions

    Tree traversal functions

    o parent
    return parent of <parameter>n</parameter>
    o daughter1
    return first daughter of <parameter>n</parameter>
    o daughter2
    return second daughter of <parameter>n</parameter>
    o daughtern
    return nth daughter of <parameter>n</parameter>
    o daughtern
    return last daughter of <parameter>n</parameter>
    o next_sibling
    return next sibling (sister) of <parameter>n</parameter>
    o prev_sibling
    return previous sibling (sister) of <parameter>n</parameter>
    o root
    return root node of treeprevious sibling (sister) of <parameter>n</parameter>
    o parent
    return parent of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o daughter1
    return first daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o daughter2
    return second daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o daughtern
    return last daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o next_sibling
    return next sibling (sister) of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o prev_sibling
    return previous sibling (sistem) of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o root
    return root of tree of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o first_leaf
    return the first leaf (terminal node) which is dominated by <parameter>n</parameter>.
    o last_leaf
    return the last leaf (terminal node) which is dominated by <parameter>n</parameter>.
    o next_leaf
    Return next leaf in tree given <parameter>n</parameter>.
    o num_leaves
    Return number of leaves (terminal nodes) under <parameter>n</parameter>
    o in_tree
    Given a node <parameter>t</parameter>, return true if <parameter>c</parameter> is under it in a tree

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/parent.html0100644001741100001440000000320707327543064017266 0ustar awbusers inline EST_Item* parent

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* parent

    (const EST_Item* n)

    return parent of <parameter>n</parameter>

    Documentation

    return parent of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughter1.html0100644001741100001440000000323507327543064017662 0ustar awbusers inline EST_Item* daughter1

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* daughter1

    (const EST_Item* n)

    return first daughter of <parameter>n</parameter>

    Documentation

    return first daughter of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughter2.html0100644001741100001440000000323707327543064017665 0ustar awbusers inline EST_Item* daughter2

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* daughter2

    (const EST_Item* n)

    return second daughter of <parameter>n</parameter>

    Documentation

    return second daughter of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughtern.html0100644001741100001440000000330507327543064017755 0ustar awbusers EST_Item* daughtern

    In file ../include/ling_class/EST_Relation_tree.h:

    EST_Item* daughtern

    (const EST_Item* n,
      int nth)

    return nth daughter of <parameter>n</parameter>

    Documentation

    return nth daughter of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughtern.2.html0100644001741100001440000000323307327543064020115 0ustar awbusers inline EST_Item* daughtern

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* daughtern

    (const EST_Item* n)

    return last daughter of <parameter>n</parameter>

    Documentation

    return last daughter of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/next_sibling.html0100644001741100001440000000326107327543064020462 0ustar awbusers inline EST_Item* next_sibling

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* next_sibling

    (const EST_Item* n)

    return next sibling (sister) of <parameter>n</parameter>

    Documentation

    return next sibling (sister) of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/prev_sibling.html0100644001741100001440000000327107327543064020461 0ustar awbusers inline EST_Item* prev_sibling

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* prev_sibling

    (const EST_Item* n)

    return previous sibling (sister) of <parameter>n</parameter>

    Documentation

    return previous sibling (sister) of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/root.html0100644001741100001440000000331307327543064016756 0ustar awbusers inline EST_Item* root

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* root

    (const EST_Item* n)

    return root node of treeprevious sibling (sister) of <parameter>n</parameter>

    Documentation

    return root node of treeprevious sibling (sister) of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/parent.2.html0100644001741100001440000000345407327543064017432 0ustar awbusers inline EST_Item* parent

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* parent

    (const EST_Item* n,
      const char* relname)

    return parent of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return parent of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughter1.2.html0100644001741100001440000000350207327543064020017 0ustar awbusers inline EST_Item* daughter1

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* daughter1

    (const EST_Item* n,
      const char* relname)

    return first daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return first daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughter2.2.html0100644001741100001440000000350407327543064020022 0ustar awbusers inline EST_Item* daughter2

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* daughter2

    (const EST_Item* n,
      const char* relname)

    return second daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return second daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/daughtern.3.html0100644001741100001440000000350007327543064020113 0ustar awbusers inline EST_Item* daughtern

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* daughtern

    (const EST_Item* n,
      const char* relname)

    return last daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return last daughter of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/next_sibling.2.html0100644001741100001440000000352407327543064020624 0ustar awbusers inline EST_Item* next_sibling

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* next_sibling

    (const EST_Item* n,
      const char* relname)

    return next sibling (sister) of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return next sibling (sister) of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/prev_sibling.2.html0100644001741100001440000000353607327543064020625 0ustar awbusers inline EST_Item* prev_sibling

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* prev_sibling

    (const EST_Item* n,
      const char* relname)

    return previous sibling (sistem) of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return previous sibling (sistem) of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/root.2.html0100644001741100001440000000346207327543064017123 0ustar awbusers inline EST_Item* root

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* root

    (const EST_Item* n,
      const char* relname)

    return root of tree of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return root of tree of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/first_leaf.html0100644001741100001440000000360607327543064020116 0ustar awbusers inline EST_Item* first_leaf

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* first_leaf

    (const EST_Item* n)

    return the first leaf (terminal node) which is dominated by <parameter>n</parameter>.

    Documentation

    return the first leaf (terminal node) which is dominated by <parameter>n</parameter>. Note that this is different from daughter1 etc as this descends the tree to find the lefttmost terminal node (it is like the transitive closure of daughter1).

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/last_leaf.html0100644001741100001440000000357607327543064017740 0ustar awbusers inline EST_Item* last_leaf

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* last_leaf

    (const EST_Item* n)

    return the last leaf (terminal node) which is dominated by <parameter>n</parameter>.

    Documentation

    return the last leaf (terminal node) which is dominated by <parameter>n</parameter>. Note that this is different from daughter1 etc as this descends the tree to find the right terminal node (it is like the transitive closure of daughtern).

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/next_leaf.html0100644001741100001440000000377707327543064017756 0ustar awbusers inline EST_Item* next_leaf

    In file ../include/ling_class/EST_Relation_tree.h:

    inline EST_Item* next_leaf

    (const EST_Item* n)

    Return next leaf in tree given <parameter>n</parameter>.

    Documentation

    Return next leaf in tree given <parameter>n</parameter>. If <parameter>n</parameter> is a terminal node, next_leaf() will return the next leaf in the tree. If <parameter>n</parameter> is not terminal, this will return the leftmost terminal node dominated by <parameter>n</parameter>. This will return 0 only when the last leaf in the relation has been passed.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/num_leaves.html0100644001741100001440000000321507327543064020132 0ustar awbusers int num_leaves

    In file ../include/ling_class/EST_Relation_tree.h:

    int num_leaves

    (const EST_Item* n)

    Return number of leaves (terminal nodes) under <parameter>n</parameter>

    Documentation

    Return number of leaves (terminal nodes) under <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/in_tree.html0100644001741100001440000000341107327543064017417 0ustar awbusers int in_tree

    In file ../include/ling_class/EST_Relation_tree.h:

    int in_tree

    (const EST_Item* c, const EST_Item* t)

    Given a node <parameter>t</parameter>, return true if <parameter>c</parameter> is under it in a tree

    Documentation

    Given a node <parameter>t</parameter>, return true if <parameter>c</parameter> is under it in a tree

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Treebuildingfunctions.html0100644001741100001440000000503607327543064022345 0ustar awbusers Tree building functions

    Tree building functions

    o append_daughter
    Add a daughter to node <parameter>n</parameter>, after any existing daughters, and return the next daughter.
    o append_daughter
    Add a daughter to node <parameter>n</parameter> as seen from relation <parameter>relname</parameter>, after any existing daughters, and return the next daughter.
    o prepend_daughter
    Add a daughter to node <parameter>n</parameter>, before any existing daughters, and return the next daughter.
    o prepend_daughter
    Add a daughter to node <parameter>n</parameter> as seen from relation <parameter>relname</parameter>, before any existing daughters, and return the next daughter.

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/append_daughter.html0100644001741100001440000000407007327543064021126 0ustar awbusers EST_Item* append_daughter

    In file ../include/ling_class/EST_Relation_tree.h:

    EST_Item* append_daughter

    (EST_Item* n,
      EST_Item* p=0)

    Add a daughter to node <parameter>n</parameter>, after any existing daughters, and return the next daughter.

    Documentation

    Add a daughter to node <parameter>n</parameter>, after any existing daughters, and return the next daughter. If <parameter>p</parameter> is 0, make a new node for the daughter, otherwise add <parameter>p</parameter> to this relation as <parameter>n</parameter>'s daughter.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/append_daughter.2.html0100644001741100001440000000433107327543064021266 0ustar awbusers EST_Item* append_daughter

    In file ../include/ling_class/EST_Relation_tree.h:

    EST_Item* append_daughter

    (EST_Item* n,
      const char* relname,
      EST_Item* p=0)

    Add a daughter to node <parameter>n</parameter> as seen from relation <parameter>relname</parameter>, after any existing daughters, and return the next daughter.

    Documentation

    Add a daughter to node <parameter>n</parameter> as seen from relation <parameter>relname</parameter>, after any existing daughters, and return the next daughter. If <parameter>p</parameter> is 0, make a new node for the daughter, otherwise add <parameter>p</parameter> to this relation as <parameter>n</parameter>'s daughter.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/prepend_daughter.html0100644001741100001440000000407407327543064021320 0ustar awbusers EST_Item* prepend_daughter

    In file ../include/ling_class/EST_Relation_tree.h:

    EST_Item* prepend_daughter

    (EST_Item* n,
      EST_Item* p=0)

    Add a daughter to node <parameter>n</parameter>, before any existing daughters, and return the next daughter.

    Documentation

    Add a daughter to node <parameter>n</parameter>, before any existing daughters, and return the next daughter. If <parameter>p</parameter> is 0, make a new node for the daughter, otherwise add <parameter>p</parameter> to this relation as <parameter>n</parameter>'s daughter.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/prepend_daughter.2.html0100644001741100001440000000433507327543064021460 0ustar awbusers EST_Item* prepend_daughter

    In file ../include/ling_class/EST_Relation_tree.h:

    EST_Item* prepend_daughter

    (EST_Item* n,
      const char* relname,
      EST_Item* p=0)

    Add a daughter to node <parameter>n</parameter> as seen from relation <parameter>relname</parameter>, before any existing daughters, and return the next daughter.

    Documentation

    Add a daughter to node <parameter>n</parameter> as seen from relation <parameter>relname</parameter>, before any existing daughters, and return the next daughter. If <parameter>p</parameter> is 0, make a new node for the daughter, otherwise add <parameter>p</parameter> to this relation as <parameter>n</parameter>'s daughter.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Functionsforbuildingandtraversinglistrelations.html0100644001741100001440000000276107327543064027603 0ustar awbusers Functions for building and traversing list relations

    Functions for building and traversing list relations

    o List traversal functions

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Listtraversalfunctions.html0100644001741100001440000001003307327543064022560 0ustar awbusers List traversal functions

    List traversal functions

    o next
    return next item of <parameter>n</parameter>
    o prev
    return previous item of <parameter>n</parameter>
    o last
    return last item in <parameter>n</parameter>'s relation
    o first
    return first item in <parameter>n</parameter>'s relation
    o next
    return next item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o prev
    return previous item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o first
    return first item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o last
    return last item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>
    o in_list
    Given a node <parameter>l</parameter>, return true if <parameter>c</parameter> after it in a list relation.
    o add_after
    Add a item after node <parameter>n</parameter>, and return the new item.
    o add_before
    Add a item before node <parameter>n</parameter>, and return the new item.
    o remove_item_list
    Remove the given item

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/next.html0100644001741100001440000000321107327543064016746 0ustar awbusers inline EST_Item* next

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* next

    (const EST_Item* n)

    return next item of <parameter>n</parameter>

    Documentation

    return next item of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/prev.html0100644001741100001440000000322107327543064016745 0ustar awbusers inline EST_Item* prev

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* prev

    (const EST_Item* n)

    return previous item of <parameter>n</parameter>

    Documentation

    return previous item of <parameter>n</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/last.html0100644001741100001440000000323707327543064016743 0ustar awbusers inline EST_Item* last

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* last

    (const EST_Item* n)

    return last item in <parameter>n</parameter>'s relation

    Documentation

    return last item in <parameter>n</parameter>'s relation

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/first.html0100644001741100001440000000324307327543064017124 0ustar awbusers inline EST_Item* first

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* first

    (const EST_Item* n)

    return first item in <parameter>n</parameter>'s relation

    Documentation

    return first item in <parameter>n</parameter>'s relation

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/next.2.html0100644001741100001440000000345407327543064017117 0ustar awbusers inline EST_Item* next

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* next

    (const EST_Item* n,
      const char* relname)

    return next item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return next item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/prev.2.html0100644001741100001440000000346407327543064017116 0ustar awbusers inline EST_Item* prev

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* prev

    (const EST_Item* n,
      const char* relname)

    return previous item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return previous item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/first.2.html0100644001741100001440000000346007327543064017265 0ustar awbusers inline EST_Item* first

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* first

    (const EST_Item* n,
      const char* relname)

    return first item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return first item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/last.2.html0100644001741100001440000000345407327543064017104 0ustar awbusers inline EST_Item* last

    In file ../include/ling_class/EST_Relation_list.h:

    inline EST_Item* last

    (const EST_Item* n,
      const char* relname)

    return last item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Documentation

    return last item of <parameter>n</parameter> as seen from relation <parameter>relname</parameter>

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/in_list.html0100644001741100001440000000335307327543064017440 0ustar awbusers int in_list

    In file ../include/ling_class/EST_Relation_list.h:

    int in_list

    (const EST_Item* c, const EST_Item* l)

    Given a node <parameter>l</parameter>, return true if <parameter>c</parameter> after it in a list relation.

    Documentation

    Given a node <parameter>l</parameter>, return true if <parameter>c</parameter> after it in a list relation.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/add_after.html0100644001741100001440000000432407327543064017707 0ustar awbusers EST_Item* add_after

    In file ../include/ling_class/EST_Relation_list.h:

    EST_Item* add_after

    (const EST_Item* n,
      EST_Item* p=0)

    Add a item after node <parameter>n</parameter>, and return the new item.

    Documentation

    Add a item after node <parameter>n</parameter>, and return the new item. If <parameter>n</parameter> is the first item in the list, the new item becomes the head of the list, otherwise it is inserted between <parameter>n</parameter> and it's previous current item. If <parameter>p</parameter> is 0, make a new node for the new item, otherwise add <parameter>p</parameter> to this relation as the next item in <parameter>n</parameter>'s relation.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/add_before.html0100644001741100001440000000433407327543064020051 0ustar awbusers EST_Item* add_before

    In file ../include/ling_class/EST_Relation_list.h:

    EST_Item* add_before

    (const EST_Item* n,
      EST_Item* p=0)

    Add a item before node <parameter>n</parameter>, and return the new item.

    Documentation

    Add a item before node <parameter>n</parameter>, and return the new item. If <parameter>n</parameter> is the first item in the list, the new item becomes the head of the list, otherwise it is inserted between <parameter>n</parameter> and it's previous current item. If <parameter>p</parameter> is 0, make a new node for the new item, otherwise add <parameter>p</parameter> to this relation as the previous item in <parameter>n</parameter>'s relation.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/remove_item_list.html0100644001741100001440000000312107327543064021336 0ustar awbusers void remove_item_list

    In file ../include/ling_class/EST_Relation_list.h:

    void remove_item_list

    (EST_Relation* rel, EST_Item* n)

    Remove the given item

    Documentation

    Remove the given item

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Item.html0100644001741100001440000006404707327543064017417 0ustar awbusers class EST_Item

    In file ../include/ling_class/EST_Item.h:

    class EST_Item

    A class for containing individual linguistic objects such as words or phones.

    Public Methods

    [more] Constructor Functions

    [more] EST_Item ()
    Default constructor
    [more] EST_Item (const EST_Item &item)
    Copy constructure only makes reference to contents
    [more] EST_Item (EST_Relation* rel)
    Includes reference to relation
    [more] EST_Item (EST_Relation* rel, EST_Item* si)
    Most common form of construction
    [more] ~EST_Item ()
    Deletes it and references to it in its contents

    [more] Feature access functions.

    [more]const float F (const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a float
    [more]const float F (const EST_String &name, float def) const
    return the value of the feature <parameter>name</parameter> cast as a float, returning <parameter>def</parameter> if not found
    [more]const EST_String S (const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a EST_String
    [more]const EST_String S (const EST_String &name, const EST_String &def) const
    return the value of the feature <parameter>name</parameter> cast as a EST_String, returning <parameter>def</parameter> if not found
    [more]const int I (const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a int
    [more]const int I (const EST_String &name, int def) const
    return the value of the feature <parameter>name</parameter> cast as a int returning <parameter>def</parameter> if not found
    [more]EST_Features& A (const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a EST_Features
    [more]EST_Features& A (const EST_String &name, EST_Features &def) const
    return the value of the feature <parameter>name</parameter> cast as a EST_Features, returning <parameter>def</parameter> if not found

    [more] Feature setting functions.

    [more]void set (const EST_String &name, int ival)
    set feature <parameter>name</parameter> to <parameter>val</parameter>
    [more]void set (const EST_String &name, float fval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>
    [more]void set (const EST_String &name, double fval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>
    [more]void set (const EST_String &name, const EST_String &sval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>
    [more]void set (const EST_String &name, const char* cval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>
    [more]void set_function (const EST_String &name, const EST_String &funcname)
    set feature <parameter>name</parameter> to <parameter>val</parameter>, a function registered in the feature function list.
    [more]void set (const EST_String &name, EST_Features &f)
    set feature <parameter>name</parameter> to <parameter>f</parameter>, a set of features, which is copied into the object
    [more]void set_val (const EST_String &name, const EST_Val &sval)
    set feature <parameter>name</parameter> to <parameter>f</parameter>, whose type is EST_Val

    [more] Utility feature functions

    [more]void f_remove (const EST_String &name)
    remove feature <parameter>name</parameter>
    [more]void evaluate_features ()
    find all the attributes whose values are functions, and replace them with their evaluation.
    [more]int f_present (const EST_String &name) const
    TRUE if feature is present, FALSE otherwise

    [more] Cross relational access

    [more]EST_Item* as_relation (const char* relname) const
    View item from another relation (const char *) method
    [more]int in_relation (const EST_String &relname) const
    TRUE if this item is in named relation
    [more]EST_TKVL<EST_String, EST_Val> & relations ()
    Access to the relation links
    [more]const EST_String& relation_name () const
    The relation name of this particular item
    [more]EST_Relation* relation (void) const
    The relation of this particular item
    [more]int same_item (const EST_Item* li) const
    True if li is the same item ignoring its relation viewpoint


    Documentation

    A class for containing individual linguistic objects such as words or phones.

    These contain two types of infomation. This first is specific to the EST_Relation we are viewing this ling item from, the second part constists of a set of features. These features may be shared by instances of this ling item in different <link linkend="est-relation">EST_Relation</link> within the same <link linkend="est-utterance">EST_Utterances</link>

    The shared part of an <link linkend="est-item">EST_Item</link> is represented by the class EST_Item_Content. It should not normally be accessed by the general users as reverse links from the contents to each of the EST_Items it is part of are held ensure the integrity of the structures. Changing these without maintain the appropriate links is unlikely to be stable.

    We believe this structure is the most efficient for the most natural use we envisage. Traversal of the items ....

    o Constructor Functions

    o EST_Item()
    Default constructor

    o EST_Item(const EST_Item &item)
    Copy constructure only makes reference to contents

    o EST_Item(EST_Relation* rel)
    Includes reference to relation

    o EST_Item(EST_Relation* rel, EST_Item* si)
    Most common form of construction

    o ~EST_Item()
    Deletes it and references to it in its contents

    o Feature access functions.
    These functions are wrap-around functions to the basic access functions in the EST_Features class. In all these functioms, if the optional argument <parameter>m} is set to 1, an error is thrown if the feature does not exist

    oconst float F(const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a float

    oconst float F(const EST_String &name, float def) const
    return the value of the feature <parameter>name</parameter> cast as a float, returning <parameter>def</parameter> if not found

    oconst EST_String S(const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a EST_String

    oconst EST_String S(const EST_String &name, const EST_String &def) const
    return the value of the feature <parameter>name</parameter> cast as a EST_String, returning <parameter>def</parameter> if not found

    oconst int I(const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a int

    oconst int I(const EST_String &name, int def) const
    return the value of the feature <parameter>name</parameter> cast as a int returning <parameter>def</parameter> if not found

    oEST_Features& A(const EST_String &name) const
    return the value of the feature <parameter>name</parameter> cast as a EST_Features

    oEST_Features& A(const EST_String &name, EST_Features &def) const
    return the value of the feature <parameter>name</parameter> cast as a EST_Features, returning <parameter>def</parameter> if not found

    o Feature setting functions.
    A separate function is provided for each permissable value type

    ovoid set(const EST_String &name, int ival)
    set feature <parameter>name</parameter> to <parameter>val</parameter>

    ovoid set(const EST_String &name, float fval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>

    ovoid set(const EST_String &name, double fval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>

    ovoid set(const EST_String &name, const EST_String &sval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>

    ovoid set(const EST_String &name, const char* cval)
    set feature <parameter>name</parameter> to <parameter>val</parameter>

    ovoid set_function(const EST_String &name, const EST_String &funcname)
    set feature <parameter>name</parameter> to <parameter>val</parameter>, a function registered in the feature function list.

    ovoid set(const EST_String &name, EST_Features &f)
    set feature <parameter>name</parameter> to <parameter>f</parameter>, a set of features, which is copied into the object

    ovoid set_val(const EST_String &name, const EST_Val &sval)
    set feature <parameter>name</parameter> to <parameter>f</parameter>, whose type is EST_Val

    o Utility feature functions

    ovoid f_remove(const EST_String &name)
    remove feature <parameter>name</parameter>

    ovoid evaluate_features()
    find all the attributes whose values are functions, and replace them with their evaluation.

    oint f_present(const EST_String &name) const
    TRUE if feature is present, FALSE otherwise

    o Cross relational access

    oEST_Item* as_relation(const char* relname) const
    View item from another relation (const char *) method

    oint in_relation(const EST_String &relname) const
    TRUE if this item is in named relation

    oEST_TKVL<EST_String, EST_Val> & relations()
    Access to the relation links

    oconst EST_String& relation_name() const
    The relation name of this particular item

    oEST_Relation* relation(void) const
    The relation of this particular item

    oint same_item(const EST_Item* li) const
    True if li is the same item ignoring its relation viewpoint


    This class has no child classes.
    Friends:
    int same_item(const EST_Item *l1,const EST_Item *l2)
    int move_item(EST_Item *from, EST_Item *to)
    int merge_item(EST_Item *from, EST_Item *to)
    int move_sub_tree(EST_Item *from, EST_Item *to)
    int exchange_sub_trees(EST_Item *from,EST_Item *to)
    ostream& operator << (ostream &s, const EST_Item &a)
    bool operator !=(const EST_Item &a, const EST_Item &b)
    bool operator ==(const EST_Item &a, const EST_Item &b)
    class EST_Relation
    class ling_class_init

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_Item_Content.html0100644001741100001440000001261407327543064021102 0ustar awbusers class EST_Item_Content

    In file ../include/ling_class/EST_Item_Content.h:

    class EST_Item_Content

    A class for containing individual linguistic features and references to relations.

    Public Fields

    [more]EST_Features f
    General features for this item

    Public Methods

    [more] Constructor Functions

    [more] EST_Item_Content ()
    Default constructor
    [more] EST_Item_Content (const EST_Item_Content &content)
    Copy constructor
    [more] ~EST_Item_Content ()
    destructor

    [more]const EST_String name () const
    return the name of the item, eg.
    [more]void set_name (const EST_String &s)
    set name


    Documentation

    A class for containing individual linguistic features and references to relations.

    This class contents the potentially shared part of an EST_Item. It contaisn a list of features allowing string names to be related to string, floats, ints and arbitrary objects. It also contains a reference list to the EST_Items indexed by the relation names.

    This class should not normally be accessed by anyone other than the EST_Item.

    o Constructor Functions

    o EST_Item_Content()
    Default constructor

    o EST_Item_Content(const EST_Item_Content &content)
    Copy constructor

    o ~EST_Item_Content()
    destructor

    oEST_Features f
    General features for this item

    oconst EST_String name() const
    return the name of the item, eg. the name of the phone or the text of the word

    ovoid set_name(const EST_String &s)
    set name

    o Relation related member functions


    This class has no child classes.
    Friends:
    ostream& operator << (ostream &s, const EST_Item_Content &a)
    class EST_Item

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/EST_FeatureFunctionPackage.html0100644001741100001440000000330107327543064023060 0ustar awbusers class EST_FeatureFunctionPackage

    In file ../include/ling_class/EST_FeatureFunctionPackage.h:

    class EST_FeatureFunctionPackage

    Represents a named collection of named functions.

    Documentation

    Represents a named collection of named functions.


    This class has no child classes.
    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Noncorefeaturefuntionality..html0100644001741100001440000000362207327543064023501 0ustar awbusers Non core feature funtionality.

    Non core feature funtionality.

    o Safe feature access functions.
    o VAL_REGISTER_FUNCPTR_DCLS

    Non core feature funtionality.

    Non core feature funtionality.

    Non core feature funtionality.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Safefeatureaccessfunctions..html0100644001741100001440000000454507327543064023426 0ustar awbusers Safe feature access functions.

    In file ../include/EST_features_aux.h:

    Safe feature access functions.



    Documentation

    Safe feature access functions.

    These functions are guaranteed to return a value even if there is an otherwise fatal error.Safe feature access functions.

    These functions are guaranteed to return a value even if there is an otherwise fatal error.Safe feature access functions.

    These functions are guaranteed to return a value even if there is an otherwise fatal error.

    o efs_ok
    All OK, value returned

    o efs_not_set
    No value for feature, default returned

    o efs_error
    An error occured and was caught


    This class has no child classes.

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TVector_T_MIN.html0100644001741100001440000000316607327543064022720 0ustar awbusers #define Instantiate_TVector_T_MIN

    In file ../include/instantiate/EST_TVectorI.h:

    #define Instantiate_TVector_T_MIN

    (TYPE, TAG)

    Instantiate rules for vector template.

    Documentation

    Instantiate rules for vector template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TSimpleVector.html0100644001741100001440000000320507327543064023076 0ustar awbusers #define Instantiate_TSimpleVector

    In file ../include/instantiate/EST_TSimpleVectorI.h:

    #define Instantiate_TSimpleVector

    (TYPE)

    Instantiate rules for simple-vector template.

    Documentation

    Instantiate rules for simple-vector template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TMatrix.html0100644001741100001440000000314507327543064021731 0ustar awbusers #define Instantiate_TMatrix

    In file ../include/instantiate/EST_TMatrixI.h:

    #define Instantiate_TMatrix

    (TYPE)

    Instantiate rules for matrix template.

    Documentation

    Instantiate rules for matrix template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TSimpleMatrix.html0100644001741100001440000000320507327543064023100 0ustar awbusers #define Instantiate_TSimpleMatrix

    In file ../include/instantiate/EST_TSimpleMatrixI.h:

    #define Instantiate_TSimpleMatrix

    (TYPE)

    Instantiate rules for simple-matrix template.

    Documentation

    Instantiate rules for simple-matrix template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/XMLParser.html0100644001741100001440000000414307327543064017612 0ustar awbusers XML Parser

    XML Parser

    o XML_Attribute_List
    Nice name for list of attribute-value pairs
    o XML_Parser_Class
    A Class of parsers, All parsers share callbacks and a list of known public IDs
    o XML_Parser
    An actual parser.

    Recursive descent parsing skeliton with hooks for processing. A C++ wrapper around the rxp parser.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index Hierarchy of classes


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TList_T_MIN.html0100644001741100001440000000315507327543064022367 0ustar awbusers #define Instantiate_TList_T_MIN

    In file ../include/instantiate/EST_TListI.h:

    #define Instantiate_TList_T_MIN

    (TYPE, TAG)

    Instantiate rules for list template.

    Documentation

    Instantiate rules for list template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TSortable_T.html0100644001741100001440000000317107327543064022522 0ustar awbusers #define Instantiate_TSortable_T

    In file ../include/instantiate/EST_TSortableI.h:

    #define Instantiate_TSortable_T

    (TYPE, TAG)

    Instantiate rules for sortable template.

    Documentation

    Instantiate rules for sortable template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_KVL_T.html0100644001741100001440000000314507327543064021260 0ustar awbusers #define Instantiate_KVL_T

    In file ../include/instantiate/EST_TKVLI.h:

    #define Instantiate_KVL_T

    (KEY, VAL, TAG)

    Instantiate rules for list template.

    Documentation

    Instantiate rules for list template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_THash_T_IT_IP.html0100644001741100001440000000320107327543064022610 0ustar awbusers #define Instantiate_THash_T_IT_IP

    In file ../include/instantiate/EST_THashI.h:

    #define Instantiate_THash_T_IT_IP

    (KEY, VAL, TAG, IP, IPK)

    Instantiate rules for hash template.

    Documentation

    Instantiate rules for hash template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TStringHash_T_IT.html0100644001741100001440000000320107327543064023407 0ustar awbusers #define Instantiate_TStringHash_T_IT

    In file ../include/instantiate/EST_TStringHashI.h:

    #define Instantiate_TStringHash_T_IT

    (VAL, TAG, IP)

    Instantiate rules for hash template.

    Documentation

    Instantiate rules for hash template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TValuedEnumI_T.html0100644001741100001440000000322107327543064023121 0ustar awbusers #define Instantiate_TValuedEnumI_T

    In file ../include/instantiate/EST_TNamedEnumI.h:

    #define Instantiate_TValuedEnumI_T

    (ENUM, VAL, INFO, TAG)

    Instantiate rules for named enum template.

    Documentation

    Instantiate rules for named enum template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TDEQ_T.html0100644001741100001440000000314107327543064021355 0ustar awbusers #define Instantiate_TDEQ_T

    In file ../include/instantiate/EST_TDequeI.h:

    #define Instantiate_TDEQ_T

    (T, TAG)

    Instantiate rules for list template.

    Documentation

    Instantiate rules for list template.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/Instantiate_TIterator_T.html0100644001741100001440000000315307327543064022540 0ustar awbusers #define Instantiate_TIterator_T

    In file ../include/instantiate/EST_TIteratorI.h:

    #define Instantiate_TIterator_T

    (CONTAINER, IP, ENTRY, TAG)

    Instantiate an iterator.

    Documentation

    Instantiate an iterator.

    Author:
    Richard Caley <rjc@cstr.ed.ac.uk>
    Version:

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/XML_Attribute_List.html0100644001741100001440000000314607327543064021455 0ustar awbusers typedef EST_TStringHash<EST_String> XML_Attribute_List

    In file ../include/rxp/XML_Parser.h:

    typedef EST_TStringHash<EST_String> XML_Attribute_List

    Nice name for list of attribute-value pairs

    Documentation

    Nice name for list of attribute-value pairs

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/XML_Parser_Class.html0100644001741100001440000004442407327543064021104 0ustar awbusers class XML_Parser_Class

    In file ../include/rxp/XML_Parser.h:

    class XML_Parser_Class

    A Class of parsers, All parsers share callbacks and a list of known public IDs

    Public Methods

    [more] XML_Parser_Class ()
    Create an object representing the class of parsers.
    [more]void register_id (EST_Regex id_pattern, EST_String directory)
    Add a mapping from entity ID (SYSTEM or PUBLIC) to filename.
    [more]void registered_ids (EST_TList<EST_String> &list)
    Fill in the list with the known entity ID mappings
    [more] Creating a parser

    [more]XML_Parser* make_parser (InputSource source, void* data)
    Create a parser for the RXP InputSource
    [more]XML_Parser* make_parser (InputSource source, Entity initial_entity, void* data)
    Create a parser for the RXP InputSource
    [more]XML_Parser* make_parser (FILE* input, void* data)
    Create a parser for a stdio input stream
    [more]XML_Parser* make_parser (FILE* input, const EST_String desc, void* data)
    Create a parser for a stdio input stream, giving a description for use in errors

    [more]InputSource try_and_open (Entity ent)
    Utility which tries to open an entity called ID at places specified in the mapping of this parser class

    Protected Methods

    [more]static InputSource open_entity (Entity ent, void* arg)
    Do any neccessary remappings and open a stream which reads the given entity
    [more] The callbacks.

    [more]virtual void document_open (XML_Parser_Class &c, XML_Parser &p, void* data)
    Called when starting a document
    [more]virtual void document_close (XML_Parser_Class &c, XML_Parser &p, void* data)
    Called at the end of a document
    [more]virtual void element_open (XML_Parser_Class &c, XML_Parser &p, void* data, const char* name, XML_Attribute_List &attributes)
    Called when an element starts
    [more]virtual void element_close (XML_Parser_Class &c, XML_Parser &p, void* data, const char* name)
    Called when an element ends
    [more]virtual void element (XML_Parser_Class &c, XML_Parser &p, void* data, const char* name, XML_Attribute_List &attributes)
    Called for empty elements.
    [more]virtual void pcdata (XML_Parser_Class &c, XML_Parser &p, void* data, const char* chars)
    Called for parsed character data sequences
    [more]virtual void cdata (XML_Parser_Class &c, XML_Parser &p, void* data, const char* chars)
    Called for unparsed character data sequences
    [more]virtual void processing (XML_Parser_Class &c, XML_Parser &p, void* data, const char* instruction)
    Called for processing directives
    [more]virtual void error (XML_Parser_Class &c, XML_Parser &p, void* data)
    Called when there is an error in parsing

    [more]void error (XML_Parser_Class &c, XML_Parser &p, void* data, EST_String message)
    This can be called from any of the callbacks to present "message" as an error through the error callback, thus getting filename and line information into the message
    [more]const char* get_error (XML_Parser &p)
    Get the error message for the last error


    Documentation

    A Class of parsers, All parsers share callbacks and a list of known public IDs
    ostatic InputSource open_entity(Entity ent, void* arg)
    Do any neccessary remappings and open a stream which reads the given entity

    o The callbacks.
    These methods can be overridden in a subclass to create a class of parsers to do whatever you want.

    ovirtual void document_open(XML_Parser_Class &c, XML_Parser &p, void* data)
    Called when starting a document

    ovirtual void document_close(XML_Parser_Class &c, XML_Parser &p, void* data)
    Called at the end of a document

    ovirtual void element_open(XML_Parser_Class &c, XML_Parser &p, void* data, const char* name, XML_Attribute_List &attributes)
    Called when an element starts

    ovirtual void element_close(XML_Parser_Class &c, XML_Parser &p, void* data, const char* name)
    Called when an element ends

    ovirtual void element(XML_Parser_Class &c, XML_Parser &p, void* data, const char* name, XML_Attribute_List &attributes)
    Called for empty elements.

    Defaults to element_open(...) forllowed by element_closed(...).

    ovirtual void pcdata(XML_Parser_Class &c, XML_Parser &p, void* data, const char* chars)
    Called for parsed character data sequences

    ovirtual void cdata(XML_Parser_Class &c, XML_Parser &p, void* data, const char* chars)
    Called for unparsed character data sequences

    ovirtual void processing(XML_Parser_Class &c, XML_Parser &p, void* data, const char* instruction)
    Called for processing directives

    ovirtual void error(XML_Parser_Class &c, XML_Parser &p, void* data)
    Called when there is an error in parsing

    ovoid error(XML_Parser_Class &c, XML_Parser &p, void* data, EST_String message)
    This can be called from any of the callbacks to present "message" as an error through the error callback, thus getting filename and line information into the message

    oconst char* get_error(XML_Parser &p)
    Get the error message for the last error

    o XML_Parser_Class()
    Create an object representing the class of parsers.

    ovoid register_id(EST_Regex id_pattern, EST_String directory)
    Add a mapping from entity ID (SYSTEM or PUBLIC) to filename.

    The string can contain escapes like \2 which are replaced by the text matching the Nth bracketed part of the regular expression.

    ovoid registered_ids(EST_TList<EST_String> &list)
    Fill in the list with the known entity ID mappings

    o Creating a parser
    Each of these methods creates a one-shot parser which will run over the indicated text.

    oXML_Parser* make_parser(InputSource source, void* data)
    Create a parser for the RXP InputSource

    oXML_Parser* make_parser(InputSource source, Entity initial_entity, void* data)
    Create a parser for the RXP InputSource

    oXML_Parser* make_parser(FILE* input, void* data)
    Create a parser for a stdio input stream

    oXML_Parser* make_parser(FILE* input, const EST_String desc, void* data)
    Create a parser for a stdio input stream, giving a description for use in errors

    oInputSource try_and_open(Entity ent)
    Utility which tries to open an entity called ID at places specified in the mapping of this parser class


    This class has no child classes.
    Friends:
    class XML_Parser

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/XML_Parser.html0100644001741100001440000002120107327543064017743 0ustar awbusers class XML_Parser

    In file ../include/rxp/XML_Parser.h:

    class XML_Parser

    An actual parser.

    Public Methods

    [more] ~XML_Parser ()
    Destructor, may close input if required
    [more]void track_context (bool flag)
    Request that parser keep track of the currently open elements.
    [more]void track_contents (bool flag)
    Keep track of the content of open elements.
    [more]EST_String context (int n)
    Get the name of the nth enclosing element.
    [more]void go ()
    Run the parser.

    Protected Fields

    [more]XML_Parser_Class* pclass
    The class to which this parser belogs.
    [more]XBit current_bit
    The piece of markup being processed
    [more]InputSource source
    Where we are reading from
    [more]Entity initial_entity
    The entity we started from.
    [more]void* data
    Arbitrary data which can beused by callbacks
    [more]Parser p
    The RXP parser object
    [more]EST_TDeque<EST_String> p_context
    If context is being tracked, this is a stack of element names

    Protected Methods

    [more] XML_Parser (XML_Parser_Class &parent, InputSource source, Entity initial_entity, void* data)
    Creator used by XML_Parser_Class::make_parser()
    [more]InputSource open (Entity ent)
    Open.
    [more]const char* get_error ()
    Get the error message for the last error


    Documentation

    An actual parser. Each such instance parses just one stream which is given when the parser is created.

    The behaviour of the parser is given by the class to which it belongs.

    oXML_Parser_Class* pclass
    The class to which this parser belogs. Defines the behaviour of the parser.

    oXBit current_bit
    The piece of markup being processed

    oInputSource source
    Where we are reading from

    oEntity initial_entity
    The entity we started from. May beed to be freed at the end of the parse.

    ovoid* data
    Arbitrary data which can beused by callbacks

    oParser p
    The RXP parser object

    oEST_TDeque<EST_String> p_context
    If context is being tracked, this is a stack of element names

    o XML_Parser(XML_Parser_Class &parent, InputSource source, Entity initial_entity, void* data)
    Creator used by XML_Parser_Class::make_parser()

    oInputSource open(Entity ent)
    Open. Asks the parser class to do the work.

    oconst char* get_error()
    Get the error message for the last error

    o ~XML_Parser()
    Destructor, may close input if required

    ovoid track_context(bool flag)
    Request that parser keep track of the currently open elements.

    These are recorded on a atsck. Use context() to access the information.

    ovoid track_contents(bool flag)
    Keep track of the content of open elements.

    Not yet implemented.

    oEST_String context(int n)
    Get the name of the nth enclosing element.

    context(0) is the element we are directly inside.

    ovoid go()
    Run the parser.


    This class has no child classes.
    Friends:
    class XML_Parser_Class

    Alphabetic index HTML hierarchy of classes or Java


    This page is part of the Edinburgh Speech Tools Library documentation
    Copyright University of Edinburgh 1997
    Contact: speech_tools@cstr.ed.ac.uk


    festdoc-1.4.2/speech_tools/doc/.doc++_made0100644001741100001440000000003507327543065016766 0ustar awbusersWed Jul 25 14:15:15 BST 2001 festdoc-1.4.2/speech_tools/doc/manuals_gen/0040755001741100001440000000000007327543073017401 5ustar awbusersfestdoc-1.4.2/speech_tools/doc/manuals_gen/declare_entities.sgml0100644001741100001440000000466007327543074023574 0ustar awbusers festdoc-1.4.2/speech_tools/doc/manuals_gen/include_entities.sgml0100644001741100001440000000130107327543074023605 0ustar awbusers&chwavemanualsection; &chtrackmanualsection; &chlabmanualsection; &tiltanalysismanualsection; &tiltsynthesismanualsection; &sigfvmanualsection; &sigfiltermanualsection; &pdamanualsection; &pitchmarkmanualsection; &spectgenmanualsection; &designfiltermanualsection; &dpmanualsection; &ngrambuildmanualsection; &naplaymanualsection; &ngramtestmanualsection; &viterbimanualsection; &wagonmanualsection; &xmlparsermanualsection; &wfstbuildmanualsection; &wfstrunmanualsection; &scfgmakemanualsection; &scfgtrainmanualsection; &scfgparsemanualsection; &scfgtestmanualsection; &siodmanualsection; &olsmanualsection; &olstestmanualsection; &fringeclientmanualsection; &bcatmanualsection; &narecordmanualsection; festdoc-1.4.2/speech_tools/doc/manuals_gen/ch_wave_manual_section.sgml0100644001741100001440000003754107327543066024773 0ustar awbusers <command>ch_wave</command> <emphasis>Audio file manipulation</emphasis> Synopsis ch_wave[input file0] [input file1] ... -o [output file]-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -o ofile -otype string -F int -obo string -oswap -ostype string -scale float -scaleN float -lpfilter int -hpfilter int -forder int -fafter -info -add -pc string -key ifile -divide. -divide -ext string -extract string ch_wave is used to manipulate the format of a waveform file. Operations include: file format conversion resampling (changing the sampling frequency) byte-swapping making multiple input files into a single multi-channel output file making multiple input files into a single single-channel output file extracting a single channel from a multi-channel waveform scaling the amplitude of the waveform low pass and high pass filtering extracting a time-delimited portion of the waveform ch_wave is a executable program that serves as a wrap-around for the EST_Wave class and the basic wave manipulation functions. More advanced waveform processing is performed by the signal processing library. OPTIONS -h Options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -o ofile Output filename. If not specified output is to stdout. -otype string Output file type, (optional). If no type is Specified the type of the input file is assumed. Supported types are: nist, est, esps, snd, riff, aiff, audlab, raw, ascii -F int Output sample rate in Hz. If this is different from the input sample rate, resampling will occur -obo string Output byte order: MSB, LSB, native, or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -oswap Swap bytes when saving to output -ostype string Output sample type: short, mulaw, byte or ascii -scale float Scaling factor. Increase or descrease the amplitude of the whole waveform by the factor given -scaleN float Scaling factor with normalization. The waveform is scaled to its maximum level, after which it is scaled by the factor given -lpfilter int Low pass filter, with cutoff frequency in Hz Filtering is performed by a FIR filter which is built at run time. The order of the filter can be given by -forder. The default value is 199 -hpfilter int High pass filter, with cutoff frequency in Hz Filtering is performed by a FIR filter which is built at run time. The order of the filter can be given by -forder. The default value is 199. -forder int Order of FIR filter used for lpfilter and hpfilter. This must be ODD. Sensible values range from 19 (quick but with a shallow rolloff) to 199 (slow but with a steep rolloff). The default is 199. -fafter Do filtering after other operations such as resampling (default : filter before other operations) -info Print information about file and header. This option gives useful information such as file length, sampling rate, number of channels etc No output is produced -add A new single channel waveform is created by adding the corresponding sample points of each input waveform -pc string Combine input waveforms to form a single multichannel waveform. The argument to this option controls how long the new waveform should be. If the option is LONGEST, the output wave if the length of the longest input wave and shorter waves are padded with zeros at the end. If the option is FIRST, the length of the new waveform is the length of the first file on the command line, and subsequent waves are padded or cut to this length -key ifile Label file designating subsections, for use with -divide. The KEYLAB file is a label file which specifies where chunks (such as individual sentences) in a waveform begin and end. See section of wave extraction. -divide Divide a single input waveform into multiple output waveforms. Each output waveform is extracted from the input waveform by using the KEYLAB file, which specifies the start and stop times for each chunk. The output files are named according to the filename in the KEYLAB file, with extension given by -ext. See section on wave extraction -ext string File extension for divided waveforms -extract string Used in conjunction with -key to extract a single section of waveform from the input waveform. The argument is the name of a file given in the file column of the KEYLAB file. Making multiple waves into a single wave If multiple input files are specified, by default they are concatenated into the output file. $ ch_wave kdt_010.wav kdt_011.wav kdt_012.wav kdt_013.wav -o out.wav In the above example, 4 single channel input files are converted to one single channel output file. Multi-channel waveforms can also be concatenated provided they all have the same number of input channels. Multiple input files can be made into a multi-channel output file by using the -pc option: $ ch_wave kdt_010.wav kdt_011.wav kdt_012.wav kdt_013.wav -o -pc LONGEST out.wav The argument to -pc can either be LONGEST, in which the output waveform is the length of the longest input file, or FIRST in which it is the length of the first intput file. Extracting channels from multi-channel waves The -c option is used to specify channels which should be extracted from the input. If the input is a 4 channel wave, $ ch_wave kdt_m.wav -o a.wav -c "0 2" will extract the 0th and 2nd channel (counting starts from 0). The argument to -c can be either a single number of a list of numbers (wrapped in quotes) Extracting of a single region from a waveform There are several ways of extracting a region of a waveform. The simplest way is by using the start, end, to and from commands to delimit a sub portion of the input wave. For example $ ch_wave kdt_010.wav -o small.wav -start 1.45 -end 1.768 extracts a subwave starting at 1.45 seconds and extending to 1.768 seconds. alternatively, $ ch_wave kd_010.wav -o small.wav -from 5000 -to 10000 extracts a subwave starting at 5000 samples and extending to 10000 samples. Times and samples can be mixed in sub-wave extraction. The output waveform will have the same number of channels as the input waveform. Extracting of a multiple regions from a waveform Mulitple regions can be extracted from a waveform, but as it would be too complicated to specify the start and end points on the command line, a label file with start and end points, and file names is used. The file is called a key label file and in xwaves label format looks like: separator ; # 0.308272 121 sil ; file kdt_010.01 ; 0.440021 121 are ; file kdt_010.02 ; 0.512930 121 your ; file kdt_010.03 ; 0.784097 121 grades ; file kdt_010.04 ; 1.140969 121 higher ; file kdt_010.05 ; 1.258647 121 or ; file kdt_010.06 ; 1.577145 121 lower ; file kdt_010.07 ; 1.725516 121 than ; file kdt_010.08 ; 2.315186 121 nancy's ; file kdt_010.09 ; Each line represents one region. The first column is the end time of that region and the start time of the next. The next two columns are colour and an arbitrary name, and the filename in which the output waveform is to be stored is kept as a field called file in the last column. In this example, each region corresponds to a single word in the file. If the above file is called "kdt_010.words.keylab", the command: $ ch_wave kdt_010.wav -key kdt_010.words -ext .wav -divide will divide the input waveform into 9 output waveforms called kdt_010.01.wav, kdt_010.02.wav ... kdt_010.09.wav. The -ext option specifies the extension of the new waveforms, and the -divide command specifies that division of the entire waveform is to take place. If only a single file is required the -extract option can be used, in which case its argument is the filename required. $ ch_wave kdt_010.wav -key kdt_010.words -ext .wav -extract kdt_010.03 \ -o kdt_010.03.wav Note that an output filename should be specified with this option. Adding headers and format conversion It is usually a good idea for all waveform files to have headers as this way different byte orders, sampling rates etc can be handled safely. ch_wave provides a means of adding headers to raw files. The following adds a header to a file of 16 bit shorts $ ch_wave kdt_010.raw1 -o kdt_010.h1.wav -otype nist -f 16000 -itype raw The following downsamples the input to 8 KHz $ ch_wave kdt_010.raw1 -o kdt_010.h2.wav -otype nist -f 16000 \ -F 8000 -itype raw The following takes a 8K ulaw input file and produces a 16bit, 20Khz output file: $ ch_wave kdt_010.raw2 -o kdt_010.h3.wav -otype nist -istype ulaw \ -f 8000 -F 20000 -itype raw festdoc-1.4.2/speech_tools/doc/manuals_gen/ch_wave_trace0100644001741100001440000001120507327543066022114 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ch_wave Audio file manipulation OP=id ARG=ch_wave_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 56. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_wave -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_wave -sgml_options' OP=name ARG=Making multiple waves into a single wave OP=name ARG=Extracting channels from multi-channel waves OP=name ARG=Extracting of a single region from a waveform OP=name ARG=Extracting of a multiple regions from a waveform OP=name ARG=Adding headers and format conversion combine {parent Chunk=HASH(0x8104798) title ch_wave Audio file manipulation refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id ch-wave-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title ch_wave Audio file manipulation refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ch-wave-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title ch_wave Audio file manipulation refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ch-wave-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title ch_wave Audio file manipulation refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id ch-wave-manual type top} combine {parent Chunk=HASH(0x8130d2c) title Synopsis refs ARRAY(0x8130d80) bits ARRAY(0x8130d68) decls ARRAY(0x8130d98) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 2 refs ARRAY(0x8130e04) bits ARRAY(0x8130dec) decls ARRAY(0x8130e1c) type group} combine {parent Chunk=HASH(0x8130d2c) title OPTIONS refs ARRAY(0x8131068) bits ARRAY(0x8131050) decls ARRAY(0x8131080) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 3 refs ARRAY(0x81310ec) bits ARRAY(0x81310d4) decls ARRAY(0x8131104) type group} combine {parent Chunk=HASH(0x8130d2c) title Making multiple waves into a single wave refs ARRAY(0x81324a8) bits ARRAY(0x8132490) decls ARRAY(0x81324c0) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 4 refs ARRAY(0x813264c) bits ARRAY(0x8132634) decls ARRAY(0x8132664) type group} combine {parent Chunk=HASH(0x8130d2c) title Extracting channels from multi-channel waves refs ARRAY(0x81326d0) bits ARRAY(0x81326b8) decls ARRAY(0x81326e8) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 5 refs ARRAY(0x8133b3c) bits ARRAY(0x8133b24) decls ARRAY(0x8133b54) type group} combine {parent Chunk=HASH(0x8130d2c) title Extracting of a single region from a waveform refs ARRAY(0x8133bc0) bits ARRAY(0x8133ba8) decls ARRAY(0x8133bd8) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 6 refs ARRAY(0x8133d40) bits ARRAY(0x8133d28) decls ARRAY(0x8133d58) type group} combine {parent Chunk=HASH(0x8130d2c) title Extracting of a multiple regions from a waveform refs ARRAY(0x8133dc4) bits ARRAY(0x8133dac) decls ARRAY(0x8133ddc) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 7 refs ARRAY(0x813558c) bits ARRAY(0x8135574) decls ARRAY(0x81355a4) type group} combine {parent Chunk=HASH(0x8130d2c) title Adding headers and format conversion refs ARRAY(0x8135610) bits ARRAY(0x81355f8) decls ARRAY(0x8135628) type comment} // {parent Chunk=HASH(0x8130d2c) title Unnamed Group 8 refs ARRAY(0x8136c24) bits ARRAY(0x8136c0c) decls ARRAY(0x8136c3c) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e34) P Chunk=HASH(0x8130db0) P Chunk=HASH(0x8130eb8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_wave -sgml_synopsis P Chunk=HASH(0x8130f54) P Chunk=HASH(0x81323b8) P Chunk=HASH(0x8131098) P Chunk=HASH(0x813243c) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_wave -sgml_options P Chunk=HASH(0x813267c) P Chunk=HASH(0x81324d8) P Chunk=HASH(0x8133b6c) P Chunk=HASH(0x8132700) P Chunk=HASH(0x8133d70) P Chunk=HASH(0x8133bf0) P Chunk=HASH(0x81355bc) P Chunk=HASH(0x8133df4) P Chunk=HASH(0x8136c54) P Chunk=HASH(0x8135640) festdoc-1.4.2/speech_tools/doc/manuals_gen/ch_track_manual_section.sgml0100644001741100001440000002642507327543066025134 0ustar awbusers <command>ch_track</command> <emphasis>Track file manipulation</emphasis> Synopsis ch_track[input file] -o [output file] [options]-h -itype string -ctype string -s float -c string -start float -end float -from int -to int -otype string " {ascii}" -S float -o ofile -info -track_names string -diff -delta int -sm float -smtype string -style string -t float -neg string -pos string -pc string ch_track is used to manipulate the format of a track file. Operations include: file format conversion smoothing changing the frame spacing of a track (resampling) producing differentiated and delta tracks Using a threshold to convert a track file to a label file making multiple input files into a single multi-channel output file extracting a single channel from a multi-channel track extracting a time-delimited portion of the waveform Options -h Options help -itype string Input file type (optional). If no type is specified type is automatically derived from file's header. Supported types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii -ctype string Contour type: F0, track -s float Frame spacing of input in seconds, for unheadered input file -c string Select a subset of channels (starts from 0). Tracks can have multiple channels. This option specifies a list of numbers, refering to the channel numbers which are to be used for for processing. -start float Extract track starting at this time, specified in seconds -end float Extract track ending at this time, specified in seconds -from int Extract track starting at this frame position -to int Extract track ending at this frame position -otype string " {ascii}" Output file type, if unspecified ascii is assumed, types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii, label -S float Frame spacing of output in seconds. If this is different from the internal spacing, the contour is resampled at this spacing -o ofile Output filename, defaults to stdout -info Print information about file and header. This option gives useful information such as file length, file type, channel names. No output is produced -track_names string File containing new names for output channels -diff Differentiate contour. This performs simple numerical differentiation on the contour by subtracting the amplitude of the current frame from the amplitude of the next. Although quick, this technique is crude and not recommende as the estimation of the derivate is done on only one point -delta int Make delta coefficients (better form of differentiate). The argument to this option is the regression length of of the delta calculation and can be between 2 and 4 -sm float Length of smoothing window in seconds. Various types of smoothing are available for tracks. This options specifies length of the smooting window which effects the degree of smoothing, i.e. a longer value means more smoothing -smtype string Smooth type, median or mean -style string Convert track to other form. Currently only one form "label" is supported. This uses a specified cut off to make a label file, with two labels, one for above the cut off (-pos) and one for below (-neg) -t float threshold for track to label conversion -neg string Name of negative label in track to label conversion -pos string Name of positive label in track to label conversion -pc string Combine given tracks in parallel. If option is longest, pad shorter tracks to longest, else if first pad/cut to match first input track Available track file formats: none unknown track file type esps entropic sps file est Edinburgh Speech Tools track file est_binary Edinburgh Speech Tools track file htk htk file htk_fbank htk file (as FBANK) htk_mfcc htk file (as MFCC) htk_user htk file (as USER) htk_discretehtk file (as DISCRETE) ssff Macquarie University's Simple Signal File Format xmg xmg file viewer xgraph xgraph display program format ema ema ema_swapped ema, swapped ascii ascii decimal numbers Making multiple tracks into a single track If multiple input files are specified, by default they are concatenated into the output file. $ ch_track kdt_010.tr kdt_011.tr kdt_012.tr kdt_013.tr -o out.tr In the above example, 4 multi channel input files are converted to one single channel output file. Multi-channel tracks can concatenated provided they all have the same number of input channels. Multiple input files can be made into a multi-channel output file by using the -pc option: $ ch_track kdt_010.tr kdt_011.tr kdt_012.tr kdt_013.tr -o -pc longest out.tr The argument to -pc can either be longest, in which the output track is the length of the longest input file, or first in which it is the length of the first intput file. Extracting channels from multi-channel tracks The -c option is used to specify channels which should be extracted from the input. If the input is a 4 channel track, $ ch_track kdt_m.tr -o a.tr -c "0 2" will extract the 0th and 2nd channel (counting starts from 0). The argument to -c can be either a single number of a list of numbers (wrapped in quotes). Extracting of a single region from a track There are several ways of extracting a region of a track. The simplest way is by using the start, end, to and from commands to delimit a sub portion of the input track. For example $ ch_track kdt_010.tr -o small.tr -start 1.45 -end 1.768 extracts a subtrack starting at 1.45 seconds and extending to 1.768 seconds. alternatively, $ ch_track kdt_010.tr -o small.tr -from 50 -to 100 extracts a subtrack starting at 50 frames and extending to 100 frames. Times and frames can be mixed in sub-track extraction. The output track will have the same number of channels as the input track. Adding headers and format conversion It is usually a good idea for all track files to have headers as this way different files can be handled safely. ch_track provides a means of adding headers to unheadered files. These files are assumed to be ascii floats with one channel per line. The following adds a header to an ascii file. $ ch_track kdt_010.atr -o kdt_010.h5.tr -otype est -s 0.01 ch_track can change the frame shift of a fixed frame file, or convert a variable frame shift file into a fixed frame shift. At present this is done with a very crude resampling technique and hence the output file may suffer from anti-aliasing distortion. Change to a frame spacing of 0.02 seconds: $ ch_track kdt_010.tr -o kdt_010.tr2 -S 0.02 festdoc-1.4.2/speech_tools/doc/manuals_gen/ch_track_trace0100644001741100001440000001036207327543066022261 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ch_track Track file manipulation OP=id ARG=ch-track-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 57. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_track -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_track -sgml_options' OP=name ARG=Making multiple tracks into a single track OP=name ARG=Extracting channels from multi-channel tracks OP=name ARG=Extracting of a single region from a track OP=name ARG=Adding headers and format conversion combine {parent Chunk=HASH(0x8104798) title ch_track Track file manipulation refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id ch-track-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title ch_track Track file manipulation refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ch-track-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title ch_track Track file manipulation refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ch-track-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title ch_track Track file manipulation refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id ch-track-manual type top} combine {parent Chunk=HASH(0x8130d24) title Synopsis refs ARRAY(0x8130d78) bits ARRAY(0x8130d60) decls ARRAY(0x8130d90) type comment} // {parent Chunk=HASH(0x8130d24) title Unnamed Group 2 refs ARRAY(0x8130dfc) bits ARRAY(0x8130de4) decls ARRAY(0x8130e14) type group} combine {parent Chunk=HASH(0x8130d24) title Options refs ARRAY(0x8131030) bits ARRAY(0x8131018) decls ARRAY(0x8131048) type comment} // {parent Chunk=HASH(0x8130d24) title Unnamed Group 3 refs ARRAY(0x81310b4) bits ARRAY(0x813109c) decls ARRAY(0x81310cc) type group} combine {parent Chunk=HASH(0x8130d24) title Making multiple tracks into a single track refs ARRAY(0x81323e0) bits ARRAY(0x81323c8) decls ARRAY(0x81323f8) type comment} // {parent Chunk=HASH(0x8130d24) title Unnamed Group 4 refs ARRAY(0x8132578) bits ARRAY(0x8132560) decls ARRAY(0x8132590) type group} combine {parent Chunk=HASH(0x8130d24) title Extracting channels from multi-channel tracks refs ARRAY(0x81325fc) bits ARRAY(0x81325e4) decls ARRAY(0x8132614) type comment} // {parent Chunk=HASH(0x8130d24) title Unnamed Group 5 refs ARRAY(0x8133aa8) bits ARRAY(0x81326ec) decls ARRAY(0x8133ac0) type group} combine {parent Chunk=HASH(0x8130d24) title Extracting of a single region from a track refs ARRAY(0x8133b2c) bits ARRAY(0x8133b14) decls ARRAY(0x8133b44) type comment} // {parent Chunk=HASH(0x8130d24) title Unnamed Group 6 refs ARRAY(0x8133ca0) bits ARRAY(0x8133c88) decls ARRAY(0x8133cb8) type group} combine {parent Chunk=HASH(0x8130d24) title Adding headers and format conversion refs ARRAY(0x8133d24) bits ARRAY(0x8133d0c) decls ARRAY(0x8133d3c) type comment} // {parent Chunk=HASH(0x8130d24) title Unnamed Group 7 refs ARRAY(0x81353a8) bits ARRAY(0x8135390) decls ARRAY(0x81353c0) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e2c) P Chunk=HASH(0x8130da8) P Chunk=HASH(0x8130eb0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_track -sgml_synopsis P Chunk=HASH(0x8130f4c) P Chunk=HASH(0x81310e4) P Chunk=HASH(0x8131060) P Chunk=HASH(0x8132374) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_track -sgml_options P Chunk=HASH(0x81325a8) P Chunk=HASH(0x8132410) P Chunk=HASH(0x8133ad8) P Chunk=HASH(0x813262c) P Chunk=HASH(0x8133cd0) P Chunk=HASH(0x8133b5c) P Chunk=HASH(0x81353d8) P Chunk=HASH(0x8133d54) festdoc-1.4.2/speech_tools/doc/manuals_gen/ch_lab_manual_section.sgml0100644001741100001440000001620607327543066024562 0ustar awbusers <command>ch_lab</command> <emphasis>Label file manipulation</emphasis> Synopsis ch_lab [input file1] [input file2] -o [output file]-h -S float -base -class string -combine -divide -end float -ext string -extend float -extract string -f int -itype string -key string -lablist string -length float -lf int -map string -name string -nopath -o ofile -off float -ops -otype string " {esps}" -pad string -pos string -q float -range float -sed ifile -shift float -start float -style string -vocab ifile -verify ch_lab is used to manipulate the format of label files and serves as a wrap-around for the EST_Relation class. OPTIONS -h Options help -S float frame spacing of output -base use base filenames for lists of label files -class string Name of class defined in op file -combine -divide -end float end time (secs) for label extraction -ext string filename extension -extend float extend track file beyond label file -extract string extract a single file from a list of label files -f int sample frequency of label file -itype string type of input label file: esps htk ogi -key string key label file -lablist string list of labels to be considered as blank -length float length of track produced -lf int sample frequency for labels -map string name of file containing label mapping -name string eg. Fo Phoneme -nopath ignore pathnames when searching label lists -o ofile output gile name -off float vertical offset of track -ops print options -otype string " {esps}" output file type: xmg, ascii, esps, htk -pad string Pad with "high" or "low" values -pos string list of labels to be regarded as 'pos' -q float quantize label timings to nearest value -range float different between high and low values -sed ifile perform regex editing using sed file -shift float shift the times of the labels -start float start time for label extraction -style string output stype e.g. track -vocab ifile file containing list of words in vocab -verify check that only labels in vocab file are in label file festdoc-1.4.2/speech_tools/doc/manuals_gen/ch_lab_trace0100644001741100001440000000521007327543066021707 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ch_lab Label file manipulation OP=id ARG=ch_lab_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 50. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_lab -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_lab -sgml_options' combine {parent Chunk=HASH(0x8104790) title ch_lab Label file manipulation refs ARRAY(0x8109084) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da04) id ch-lab-manual type comment} // {parent Chunk=HASH(0x8104790) title Unnamed Group 1 refs ARRAY(0x812da88) bits ARRAY(0x812da70) decls ARRAY(0x812daa0) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a10) type top} // {parent Chunk=HASH(0x8104790) title ch_lab Label file manipulation refs ARRAY(0x812da88) bits ARRAY(0x812da70) id ch-lab-manual decls ARRAY(0x812daa0) type group1 toc 1} parent Chunk=HASH(0x8104790) title ch_lab Label file manipulation refs ARRAY(0x812da88) bits ARRAY(0x812da70) id ch-lab-manual decls ARRAY(0x812daa0) type group1 toc 1 gives {parent Chunk=HASH(0x8104790) title ch_lab Label file manipulation refs ARRAY(0x812da88) toc 1 bits ARRAY(0x812da70) decls ARRAY(0x812daa0) id ch-lab-manual type top} combine {parent Chunk=HASH(0x8130d1c) title Synopsis refs ARRAY(0x8130d70) bits ARRAY(0x8130d58) decls ARRAY(0x8130d88) type comment} // {parent Chunk=HASH(0x8130d1c) title Unnamed Group 2 refs ARRAY(0x8130df4) bits ARRAY(0x8130ddc) decls ARRAY(0x8130e0c) type group} combine {parent Chunk=HASH(0x8130d1c) title OPTIONS refs ARRAY(0x8130fb0) bits ARRAY(0x8130f98) decls ARRAY(0x8130fc8) type comment} // {parent Chunk=HASH(0x8130d1c) title Unnamed Group 3 refs ARRAY(0x8131034) bits ARRAY(0x813101c) decls ARRAY(0x813104c) type group} P Chunk=HASH(0x8104790) P Chunk=HASH(0x812da1c) P Chunk=HASH(0x8130e24) P Chunk=HASH(0x8130da0) P Chunk=HASH(0x8130ea8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_lab -sgml_synopsis P Chunk=HASH(0x8130f44) P Chunk=HASH(0x8131064) P Chunk=HASH(0x8130fe0) P Chunk=HASH(0x81310e8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ch_lab -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/tilt_analysis_manual_section.sgml0100644001741100001440000002333107327543067026227 0ustar awbusers <command>tilt_analysis</command> <emphasis>Produce tilt descriptions from F0 contours</emphasis> Synopsis tilt_analysis[input f0 file] -e [input event label file] -o [output file][options]Summary: produce rfc file from events and f0 contour-h -itype string -ctype string -s float -c string -start float -end float -from int -to int -event_names string -sil_names string -e ifile -o ofile -otype string -limit float -range float -smooth -w1 float -w2 float -sf0 ofile -rfc tilt_analysis produces a Tilt or RFC analysis of a F0 contour, given a set label file containing a set of approximate intonational event boundaries. A detailed description of the Tilt intonation model can be found in the Tilt model overview section. OPTIONS -h Options help -itype string Input file type (optional). If no type is specified type is automatically derived from file's header. Supported types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii -ctype string Contour type: F0, track -s float Frame spacing of input in seconds, for unheadered input file -c string Select a subset of channels (starts from 0). Tracks can have multiple channels. This option specifies a list of numbers, refering to the channel numbers which are to be used for for processing. -start float Extract track starting at this time, specified in seconds -end float Extract track ending at this time, specified in seconds -from int Extract track starting at this frame position -to int Extract track ending at this frame position -event_names string List of labels to be classed as events. Lists are specified as quoted strings with spaces separating each item, e.g.: "a b c d" -sil_names string List of labels to be classed as silence Lists are specified as quoted strings with spaces separating each item, e.g.: "pau sil #" -e ifile Input event label file. This file contains the list of events to be parameterized, each with its approximate start and stop time marked. This file also contains silencesn which are used to decide where to insert and stop phrases -o ofile Output label file -otype string File type of output file -limit float start and stop limit in seconds. The rfc matching algorithm defines a search region within which it tries all possible rise and fall shapes. This option specifies how much before the input label start time and how much after the input label end time the search region should be. Typical value, 0.1 -range float Range of RFC search region. In addition to the limit, the range defines the limits of the rfc matching search region as a percentage of the overal input label duration. Typical value, 0.25 (the search region is the first and last 25% of the label) -smooth Smooth and Interpolate input F0 contour. rfc matching can only operate on smooth fully interpolated contours. This option must be used if the contour hasn't already been smoothed and interpolated -w1 float length in seconds of smoothing window prior to interpolation. Default value 0.05 -w2 float length in seconds of smoothing window after to interpolation. Default value 0.05 -sf0 ofile Save f0 contour that results from smoothing -rfc Save as RFC parameters instead of tilt Input Intonation Files A label file containing approximate intonational event bounaries must be given as input. A typical file in xlabel format is shown below: 0.290 146 sil 0.480 146 c 0.620 146 a 0.760 146 c 0.960 146 a 1.480 146 c 1.680 146 a 1.790 146 sil The set of intonational events can be given on the command line with the -event_names option. The default set is "a rb arb m mrb" and so the above example would not need the -event_names option. The label "c" (connection) is to separate events, in effect giving each event a start time as well as a end time. The silence labels are important also: they specify where phrases should start and end. Input F0 Files tilt_analysis can operate on all the F0 file types supported by the EST library. Tilt analysis can only operate on smooth and continuous F0 contours.(i.e. F0 values must be defined during unvoiced regons). If the input contour is not in this format, use the -smooth option. The -w1 and -w2 options can be used to control the amount of smoothing. The smoothed version of the input contour can be examined by saving it using the -sf0 option. Output Intonation Files The output will be a label file containing the tilt parameters for the events in feature format. An example, in xlabel format, is shown below: intonation_style tilt # 0.29 26 phrase_start ; ev.f0 115.234 ; time 0.29 ; 0.53 26 a ; int_event 1 ; ev.f0 118.171 ; time 0.53 ; tilt.amp 21.8602 ; tilt.dur 0.26 ; tilt.tilt -0.163727 ; 0.77 26 a ; int_event 1 ; ev.f0 112.694 ; time 0.77 ; tilt.amp 27.0315 ; tilt.dur 0.32 ; tilt.tilt -0.446791 ; 1.53 26 a ; int_event 1 ; ev.f0 100.83 ; time 1.53 ; tilt.amp 7.507 ; tilt.dur 0.22 ; tilt.tilt -0.296317 ; 1.79 26 phrase_end ; ev.f0 92.9785 ; time 1.79 ; The -rfc option will make a file containing the RFC parameters instead: intonation_style rfc # 0.29 26 phrase_start ; ev.f0 115.234 ; time 0.29 ; 0.53 26 a ; ev.f0 118.171 ; rfc.rise_amp 8.19178 ; rfc.rise_dur 0.12 ; rfc.fall_amp -13.6684 ; rfc.fall_dur 0.14 ; time 0.53 ; 0.77 26 a ; ev.f0 112.694 ; rfc.rise_amp 6.50673 ; rfc.rise_dur 0.1 ; rfc.fall_amp -20.5248 ; rfc.fall_dur 0.22 ; time 0.77 ; 1.53 26 a ; ev.f0 100.83 ; rfc.rise_amp 1.55832 ; rfc.rise_dur 0.11 ; rfc.fall_amp -6.09238 ; rfc.fall_dur 0.11 ; time 1.53 ; 1.79 26 phrase_end ; ev.f0 92.9785 ; time 1.79 ; The feature in the header, "intonation_style tilt" or "intonation_style rfc" is needed for the tilt_synthesis program to work. festdoc-1.4.2/speech_tools/doc/manuals_gen/tilt_analysis_trace0100644001741100001440000000760407327543067023370 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=tilt_analysis Produce tilt descriptions from F0 contours OP=id ARG=tilt_analysis-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 66. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_analysis -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_analysis -sgml_options' OP=name ARG=Input Intonation Files OP=name ARG=Input F0 Files OP=name ARG=Output Intonation Files combine {parent Chunk=HASH(0x81047a0) title tilt_analysis Produce tilt descriptions from F0 contours refs ARRAY(0x8109094) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da14) id tilt-analysis-manual type comment} // {parent Chunk=HASH(0x81047a0) title Unnamed Group 1 refs ARRAY(0x812da98) bits ARRAY(0x812da80) decls ARRAY(0x812dab0) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a20) type top} // {parent Chunk=HASH(0x81047a0) title tilt_analysis Produce tilt descriptions from F0 contours refs ARRAY(0x812da98) bits ARRAY(0x812da80) id tilt-analysis-manual decls ARRAY(0x812dab0) type group1 toc 1} parent Chunk=HASH(0x81047a0) title tilt_analysis Produce tilt descriptions from F0 contours refs ARRAY(0x812da98) bits ARRAY(0x812da80) id tilt-analysis-manual decls ARRAY(0x812dab0) type group1 toc 1 gives {parent Chunk=HASH(0x81047a0) title tilt_analysis Produce tilt descriptions from F0 contours refs ARRAY(0x812da98) toc 1 bits ARRAY(0x812da80) decls ARRAY(0x812dab0) id tilt-analysis-manual type top} combine {parent Chunk=HASH(0x8130e5c) title Synopsis refs ARRAY(0x8130eb0) bits ARRAY(0x8130e98) decls ARRAY(0x8130ec8) type comment} // {parent Chunk=HASH(0x8130e5c) title Unnamed Group 2 refs ARRAY(0x8130f34) bits ARRAY(0x8130f1c) decls ARRAY(0x8130f4c) type group} combine {parent Chunk=HASH(0x8130e5c) title OPTIONS refs ARRAY(0x8131108) bits ARRAY(0x81310f0) decls ARRAY(0x8131120) type comment} // {parent Chunk=HASH(0x8130e5c) title Unnamed Group 3 refs ARRAY(0x813118c) bits ARRAY(0x8131174) decls ARRAY(0x81311a4) type group} combine {parent Chunk=HASH(0x8130e5c) title Input Intonation Files refs ARRAY(0x8132028) bits ARRAY(0x8132010) decls ARRAY(0x8132040) type comment} // {parent Chunk=HASH(0x8130e5c) title Unnamed Group 4 refs ARRAY(0x81321b4) bits ARRAY(0x813219c) decls ARRAY(0x81321cc) type group} combine {parent Chunk=HASH(0x8130e5c) title Input F0 Files refs ARRAY(0x8132238) bits ARRAY(0x8132220) decls ARRAY(0x8132250) type comment} // {parent Chunk=HASH(0x8130e5c) title Unnamed Group 5 refs ARRAY(0x8132310) bits ARRAY(0x81322f8) decls ARRAY(0x8132328) type group} combine {parent Chunk=HASH(0x8130e5c) title Output Intonation Files refs ARRAY(0x8132394) bits ARRAY(0x813237c) decls ARRAY(0x8133850) type comment} // {parent Chunk=HASH(0x8130e5c) title Unnamed Group 6 refs ARRAY(0x8133a84) bits ARRAY(0x8133a6c) decls ARRAY(0x8133a9c) type group} P Chunk=HASH(0x81047a0) P Chunk=HASH(0x812da2c) P Chunk=HASH(0x8130f64) P Chunk=HASH(0x8130ee0) P Chunk=HASH(0x8130fe8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_analysis -sgml_synopsis P Chunk=HASH(0x8131084) P Chunk=HASH(0x81311bc) P Chunk=HASH(0x8131138) P Chunk=HASH(0x8131fbc) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_analysis -sgml_options P Chunk=HASH(0x81321e4) P Chunk=HASH(0x8132058) P Chunk=HASH(0x8132340) P Chunk=HASH(0x8132268) P Chunk=HASH(0x8133ab4) P Chunk=HASH(0x8133868) festdoc-1.4.2/speech_tools/doc/manuals_gen/tilt_synthesis_manual_section.sgml0100644001741100001440000001006407327543067026434 0ustar awbusers <command>tilt_synthesis</command> <emphasis>Generate F0 contours from Tilt descriptions</emphasis> Synopsis tilt_synthesis[input label file] -o [output file] [options]Summary: generate F0 file from tilt or RFC label file-h -noconn -o ofile -otype string -event_names string -s float tilt_synthesis generates a F0 contour, given a label file containing parameteriszed Tilt or RFC events. A detailed description of the Tilt intonation model can be found in the Tilt model overview section. OPTIONS -h Options help -noconn Synthesize events only - no connections in output -o ofile Output F0 file -otype string File type for output label file -event_names string List of labels to be classed as events. Lists are specified as quoted strings with spaces separating each item, e.g.: "a b c d" -s float Frame spacing of generated contour in seconds Input Intonation Files The input should be a label file containing the tilt parameters for the events in feature format. An example, in xlabel format, is shown below: intonation_style tilt # 0.29 26 phrase_start ; ev.f0 115.234 ; position 0.29 ; 0.53 26 a ; int_event 1 ; ev.f0 118.171 ; position 0.53 ; tilt.amp 21.8602 ; tilt.dur 0.26 ; tilt.tilt -0.163727 ; 0.77 26 a ; int_event 1 ; ev.f0 112.694 ; position 0.77 ; tilt.amp 27.0315 ; tilt.dur 0.32 ; tilt.tilt -0.446791 ; 1.53 26 a ; int_event 1 ; ev.f0 100.83 ; position 1.53 ; tilt.amp 7.507 ; tilt.dur 0.22 ; tilt.tilt -0.296317 ; 1.79 26 phrase_end ; ev.f0 92.9785 ; position 1.79 ; tilt_synthesis can also generate F0 contours from RFC parameters: intonation_style rfc # 0.29 26 phrase_start ; ev.f0 115.234 ; position 0.29 ; 0.53 26 a ; ev.f0 118.171 ; rfc.rise_amp 8.19178 ; rfc.rise_dur 0.12 ; rfc.fall_amp -13.6684 ; rfc.fall_dur 0.14 ; position 0.53 ; 0.77 26 a ; ev.f0 112.694 ; rfc.rise_amp 6.50673 ; rfc.rise_dur 0.1 ; rfc.fall_amp -20.5248 ; rfc.fall_dur 0.22 ; position 0.77 ; 1.53 26 a ; ev.f0 100.83 ; rfc.rise_amp 1.55832 ; rfc.rise_dur 0.11 ; rfc.fall_amp -6.09238 ; rfc.fall_dur 0.11 ; position 1.53 ; 1.79 26 phrase_end ; ev.f0 92.9785 ; position 1.79 ; The feature in the header, "intonation_style tilt" or "intonation_style rfc" is needed for the tilt_synthesis program to know which type of synthesis to perform. festdoc-1.4.2/speech_tools/doc/manuals_gen/tilt_synthesis_trace0100644001741100001440000000631107327543067023570 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=tilt_synthesis Generate F0 contours from Tilt descriptions OP=id ARG=tilt_synthesis-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 48. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_synthesis -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_synthesis -sgml_options' OP=name ARG=Input Intonation Files combine {parent Chunk=HASH(0x81047a8) title tilt_synthesis Generate F0 contours from Tilt descriptions refs ARRAY(0x810909c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da1c) id tilt-synthesis-manual type comment} // {parent Chunk=HASH(0x81047a8) title Unnamed Group 1 refs ARRAY(0x812daa0) bits ARRAY(0x812da88) decls ARRAY(0x812dab8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a28) type top} // {parent Chunk=HASH(0x81047a8) title tilt_synthesis Generate F0 contours from Tilt descriptions refs ARRAY(0x812daa0) bits ARRAY(0x812da88) id tilt-synthesis-manual decls ARRAY(0x812dab8) type group1 toc 1} parent Chunk=HASH(0x81047a8) title tilt_synthesis Generate F0 contours from Tilt descriptions refs ARRAY(0x812daa0) bits ARRAY(0x812da88) id tilt-synthesis-manual decls ARRAY(0x812dab8) type group1 toc 1 gives {parent Chunk=HASH(0x81047a8) title tilt_synthesis Generate F0 contours from Tilt descriptions refs ARRAY(0x812daa0) toc 1 bits ARRAY(0x812da88) decls ARRAY(0x812dab8) id tilt-synthesis-manual type top} combine {parent Chunk=HASH(0x8130e7c) title Synopsis refs ARRAY(0x8130ed0) bits ARRAY(0x8130eb8) decls ARRAY(0x8130ee8) type comment} // {parent Chunk=HASH(0x8130e7c) title Unnamed Group 2 refs ARRAY(0x8130f54) bits ARRAY(0x8130f3c) decls ARRAY(0x8130f6c) type group} combine {parent Chunk=HASH(0x8130e7c) title OPTIONS refs ARRAY(0x8131128) bits ARRAY(0x8131110) decls ARRAY(0x8131140) type comment} // {parent Chunk=HASH(0x8130e7c) title Unnamed Group 3 refs ARRAY(0x81311ac) bits ARRAY(0x8131194) decls ARRAY(0x81311c4) type group} combine {parent Chunk=HASH(0x8130e7c) title Input Intonation Files refs ARRAY(0x8132048) bits ARRAY(0x8132030) decls ARRAY(0x8132060) type comment} // {parent Chunk=HASH(0x8130e7c) title Unnamed Group 4 refs ARRAY(0x8132294) bits ARRAY(0x813227c) decls ARRAY(0x81322ac) type group} P Chunk=HASH(0x81047a8) P Chunk=HASH(0x812da34) P Chunk=HASH(0x8130f84) P Chunk=HASH(0x8130f00) P Chunk=HASH(0x8131008) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_synthesis -sgml_synopsis P Chunk=HASH(0x81310a4) P Chunk=HASH(0x81311dc) P Chunk=HASH(0x8131158) P Chunk=HASH(0x8131fdc) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/tilt_synthesis -sgml_options P Chunk=HASH(0x81322c4) P Chunk=HASH(0x8132078) festdoc-1.4.2/speech_tools/doc/manuals_gen/sig2fv_manual_section.sgml0100644001741100001440000003130407327543067024547 0ustar awbusers <command>sig2fv</command> <emphasis>Generate signal processing coefficients from waveforms</emphasis> Synopsis sig2fv[input file] -o [output file]-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -otype string " {ascii}" -S float -o ofile -shift float -factor float -pm ifile -coefs string -delta string -acc string -window_type string -lpc_order int -ref_order int -cep_order int -melcep_order int -fbank_order int -preemph float -lifter float -usepower -include_c0 -order string sig2fv is used to create signal processing feature vector analysis on speech waveforms. The following types of analysis are provided: Linear prediction (LPC) Cepstrum coding from lpc coefficients Mel scale cepstrum coding via fbank Mel scale log filterbank analysis Line spectral frequencies Linear prediction reflection coefficients Root mean square energy Power fundamental frequency (pitch) calculation of delta and acceleration coefficients of all of the above The -coefs option is used to specify a list of the names of what sort of basic processing is required, and -delta and -acc are used for delta and acceleration coefficients respectively. Options -h Options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -otype string " {ascii}" Output file type, if unspecified ascii is assumed, types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii, label -S float Frame spacing of output in seconds. If this is different from the internal spacing, the contour is resampled at this spacing -o ofile Output filename, defaults to stdout -shift float frame spacing in seconds for fixed frame analysis. This doesn't have to be the same as the output file spacing - the S option can be used to resample the track before saving default: 0.010 -factor float Frames lengths will be FACTOR times the local pitch period. default: 2.000 -pm ifile Pitch mark file name. This is used to specify the positions of the analysis frames for pitch synchronous analysis. Pitchmark files are just standard track files, but the channel information is ignored and only the time positions are used -coefs string list of basic types of processing required. Permissable types are: lpc linear predictive coding cep cepstrum coding from lpc coefficients melcep Mel scale cepstrum coding via fbank fbank Mel scale log filterbank analysis lsf line spectral frequencies ref Linear prediction reflection coefficients power f0 energy: root mean square energy -delta string list of delta types of processing required. Basic processing does not need to be specfied for this option to work. Permissable types are: lpc linear predictive coding cep cepstrum coding from lpc coefficients melcep Mel scale cepstrum coding via fbank fbank Mel scale log filterbank analysis lsf line spectral frequencies ref Linear prediction reflection coefficients power f0 energy: root mean square energy -acc string list of acceleration (delta delta) processing required. Basic processing does not need to be specfied for this option to work. Permissable types are: lpc linear predictive coding cep cepstrum coding from lpc coefficients melcep Mel scale cepstrum coding via fbank fbank Mel scale log filterbank analysis lsf line spectral frequencies ref Linear prediction reflection coefficients power f0 energy: root mean square energy -window_type string Type of window used on waveform. Permissable types are: none unknown window type rectangle Rectangular window triangle Triangular window hanning Hanning window hamming Hamming window default: hamming -lpc_order int Order of lpc analysis. -ref_order int Order of lpc reflection coefficient analysis. -cep_order int Order of lpc cepstral analysis. -melcep_order int Order of Mel cepstral analysis. -fbank_order int Order of filter bank analysis. -preemph float Perform pre-emphasis with this factor. -lifter float lifter coefficient. -usepower use power rather than energy in filter bank analysis -include_c0 include cepstral coefficient 0 -order string order of analyses Examples Fixed frame basic linear prediction: To produce a set of linear prediction coefficients at every 10ms, using pre-emphasis and saving in EST format: $ sig2fv kdt_010.wav -o kdt_010.lpc -coefs "lpc" -otype est -shift 0.01 -preemph 0.5 Pitch Synchronous linear prediction. The following used the set of pitchmarks in kdt_010.pm as the centres of the analysis windows. $ sig2fv kdt_010.wav -pm kdt_010.pm -o kdt_010.lpc -coefs "lpc" -otype est -shift 0.01 -preemph 0.5 F0, Linear prediction and cepstral coefficients: $ sig2fv kdt_010.wav -o kdt_010.lpc -coefs "f0 lpc cep" -otype est -shift 0.01 Note that pitchtracking can also be done with the pda program. Both use the same underlying technique, but the pda program offers much finer control over the pitch track specific processing parameters. Energy, Linear Prediction and Cepstral coefficients, with a 10ms frame shift during analis but a 5ms frame shift in the output file: $ sig2fv kdt_010.wav -o kdt_010.lpc -coefs "f0 lpc cep" -otype est -S 0.005 -shift 0.01 Delta and acc coefficients can be calculated even if ther base form is not required. This produces normal energy coefficients and cepstral delta coeficients: $ sig2fv ../kdt_010.wav -o kdt_010.lpc -coefs "energy" -delta "cep" -otype est Mel-scaled cepstra, Delta and acc coefficients, as is common in speech recognition: $ sig2fv ../kdt_010.wav -o kdt_010.lpc -coefs "melcep" -delta "melcep" -acc "melcep" -otype est -preemph 0.96 festdoc-1.4.2/speech_tools/doc/manuals_gen/sig2fv_trace0100644001741100001440000000615707327543067021713 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=sig2fv Generate signal processing coefficients from waveforms OP=id ARG=sigfv-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 95. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sig2fv -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sig2fv -sgml_options' OP=name ARG=Examples combine {parent Chunk=HASH(0x8104790) title sig2fv Generate signal processing coefficients from waveforms refs ARRAY(0x8109084) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da04) id sigfv-manual type comment} // {parent Chunk=HASH(0x8104790) title Unnamed Group 1 refs ARRAY(0x812da88) bits ARRAY(0x812da70) decls ARRAY(0x812daa0) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a10) type top} // {parent Chunk=HASH(0x8104790) title sig2fv Generate signal processing coefficients from waveforms refs ARRAY(0x812da88) bits ARRAY(0x812da70) id sigfv-manual decls ARRAY(0x812daa0) type group1 toc 1} parent Chunk=HASH(0x8104790) title sig2fv Generate signal processing coefficients from waveforms refs ARRAY(0x812da88) bits ARRAY(0x812da70) id sigfv-manual decls ARRAY(0x812daa0) type group1 toc 1 gives {parent Chunk=HASH(0x8104790) title sig2fv Generate signal processing coefficients from waveforms refs ARRAY(0x812da88) toc 1 bits ARRAY(0x812da70) decls ARRAY(0x812daa0) id sigfv-manual type top} combine {parent Chunk=HASH(0x8130e24) title Synopsis refs ARRAY(0x8130e78) bits ARRAY(0x8130e60) decls ARRAY(0x8130e90) type comment} // {parent Chunk=HASH(0x8130e24) title Unnamed Group 2 refs ARRAY(0x8130efc) bits ARRAY(0x8130ee4) decls ARRAY(0x8130f14) type group} combine {parent Chunk=HASH(0x8130e24) title Options refs ARRAY(0x8131184) bits ARRAY(0x813116c) decls ARRAY(0x813119c) type comment} // {parent Chunk=HASH(0x8130e24) title Unnamed Group 3 refs ARRAY(0x813236c) bits ARRAY(0x81311f0) decls ARRAY(0x8132384) type group} combine {parent Chunk=HASH(0x8130e24) title Examples refs ARRAY(0x813248c) bits ARRAY(0x8132474) decls ARRAY(0x81324a4) type comment} // {parent Chunk=HASH(0x8130e24) title Unnamed Group 4 refs ARRAY(0x81343f8) bits ARRAY(0x8132744) decls ARRAY(0x8134410) type group} P Chunk=HASH(0x8104790) P Chunk=HASH(0x812da1c) P Chunk=HASH(0x8130f2c) P Chunk=HASH(0x8130ea8) P Chunk=HASH(0x8130fb0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sig2fv -sgml_synopsis P Chunk=HASH(0x813104c) P Chunk=HASH(0x813239c) P Chunk=HASH(0x81311b4) P Chunk=HASH(0x8132420) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sig2fv -sgml_options P Chunk=HASH(0x8134428) P Chunk=HASH(0x81324bc) festdoc-1.4.2/speech_tools/doc/manuals_gen/sigfilter_trace0100644001741100001440000000521707327543067022477 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=sigfilter Filter waveforms OP=id ARG=sigfilter-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 58. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sigfilter -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sigfilter -sgml_options' combine {parent Chunk=HASH(0x8104798) title sigfilter Filter waveforms refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id sigfilter-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title sigfilter Filter waveforms refs ARRAY(0x812da90) bits ARRAY(0x812da78) id sigfilter-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title sigfilter Filter waveforms refs ARRAY(0x812da90) bits ARRAY(0x812da78) id sigfilter-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title sigfilter Filter waveforms refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id sigfilter-manual type top} combine {parent Chunk=HASH(0x8130cdc) title Synopsis refs ARRAY(0x8130d30) bits ARRAY(0x8130d18) decls ARRAY(0x8130d48) type comment} // {parent Chunk=HASH(0x8130cdc) title Unnamed Group 2 refs ARRAY(0x8130db4) bits ARRAY(0x8130d9c) decls ARRAY(0x8130dcc) type group} combine {parent Chunk=HASH(0x8130cdc) title Options refs ARRAY(0x8130f70) bits ARRAY(0x8130f58) decls ARRAY(0x8130f88) type comment} // {parent Chunk=HASH(0x8130cdc) title Unnamed Group 3 refs ARRAY(0x8130ff4) bits ARRAY(0x8130fdc) decls ARRAY(0x813100c) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130de4) P Chunk=HASH(0x8130d60) P Chunk=HASH(0x8130e68) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sigfilter -sgml_synopsis P Chunk=HASH(0x8130f04) P Chunk=HASH(0x8131024) P Chunk=HASH(0x8130fa0) P Chunk=HASH(0x81310a8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/sigfilter -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/sigfilter_manual_section.sgml0100644001741100001440000002012707327543067025340 0ustar awbusers <command>sigfilter</command> <emphasis>Filter waveforms</emphasis> Synopsis sigfilter[input file0] -o [output file]-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -o ofile -otype string -F int -obo string -oswap -ostype string -scale float -scaleN float -double -lpfilter int -hpfilter int -forder int -lpcfilter ifile -firfilter ifile -inv_filter sigfilter filters an input waveform and prduces a output waveform. Options -h Options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -o ofile Output filename. If not specified output is to stdout. -otype string Output file type, (optional). If no type is Specified the type of the input file is assumed. Supported types are: nist, est, esps, snd, riff, aiff, audlab, raw, ascii -F int Output sample rate in Hz. If this is different from the input sample rate, resampling will occur -obo string Output byte order: MSB, LSB, native, or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -oswap Swap bytes when saving to output -ostype string Output sample type: short, mulaw, byte or ascii -scale float Scaling factor. Increase or descrease the amplitude of the whole waveform by the factor given -scaleN float Scaling factor with normalization. The waveform is scaled to its maximum level, after which it is scaled by the factor given -double Perform double filtering by applying a forward filter, then a backward filter, leaving the filtered signla in phase with the original -lpfilter int Low pass filter, with cutoff frequency in Hz Filtering is performed by a FIR filter which is built at run time. The order of the filter can be given by -forder. The default value is 199 -hpfilter int High pass filter, with cutoff frequency in Hz Filtering is performed by a FIR filter which is built at run time. The order of the filter can be given by -forder. The default value is 199. -forder int Order of FIR filter used for lpfilter and hpfilter. This must be ODD. Sensible values range from 19 (quick but with a shallow rolloff) to 199 (slow but with a steep rolloff). The default is 199. -lpcfilter ifile Track file containing lpc filter coefficients -firfilter ifile File containing a single set of FIR filter coefficients -inv_filter use filter coefficients for inverse filtering festdoc-1.4.2/speech_tools/doc/manuals_gen/pda_manual_section.sgml0100644001741100001440000002643107327543067024120 0ustar awbusers <command>pda</command> <emphasis>Pitch Detection Algorithm</emphasis> Synopsis pda[input file] -o [output file] [options]-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -L -P -fmin float -fmax float -shift float -length float -lpfilter int -forder int -d float -n float -h float -m float -r float -t float -otype string " {ascii}" -S float -o ofile pda is a pitch detection algorithm that produces a fundamental frequency contour from a speech waveform file. At present only the super resolution pitch detetmination algorithm is implemented. See (Medan, Yair, and Chazan, 1991) and (Bagshaw et al., 1993) for a detailed description of the algorithm. The default values given below were found to optimise the performance of the pitch determination algorithm for speech data sampled at 20kHz using a 16\-bit waveform and low pass filter with a 600Hz cut-off frequency and more than \-85dB rejection above 700Hz. The best performances occur if the [\-p] flag is passed. Options -h Options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -L Perform low pass filtering on input. This option should always be used in normal processing as it usually increases performance considerably -P perform peak tracking -fmin float miniumum F0 value. Sets the minimum allowed F0 in output track. Default is 40.000. Changing this to suit the speaker usually increases performance. Typical recommended values are 60-90Hz for males and 120-150Hz for females -fmax float maxiumum F0 value. Sets the maximum allowed F0 in output track. Default is 400.000. Changing this to suit the speaker usually increases performance. Typical recommended values are 200Hz for males and 300-400Hz for females -shift float frame spacing in seconds for fixed frame analysis. This doesn't have to be the same as the output file spacing - the -S option can be used to resample the track before saving default: 0.005 -length float analysis frame length in seconds. default: 0.010 -lpfilter int Low pass filter, with cutoff frequency in Hz Filtering is performed by a FIR filter which is built at run time. The order of the filter can be given by -forder. The default value is 199 -forder int Order of FIR filter used for lpfilter and hpfilter. This must be ODD. Sensible values range from 19 (quick but with a shallow rolloff) to 199 (slow but with a steep rolloff). The default is 199. -d float decimation factor set down-sampling for quicker computation so that only one in decimation factor samples are used in the first instance. Must be in the range of one to ten inclusive. Default is four. For data sampled at 10kHz, it is advised that a decimation factor of two isselected. -n float Inoise floor. Set the maximum absolute signal amplitude that represents silence to Inoise floor. If the absolute amplitude of the first segment in a given frame is below this level at all times, then the frame is classified as representing silence. Must be a positive number. Default is 120 ADC units. -h float unvoiced to voiced coeff threshold set the correlation coefficient threshold which must be exceeded in a transition from an unvoiced classified frame of speech to a voiced frame as the unvoiced to voiced coeff threshold. Must be in the range zero to one inclusive. Default is 0.88. -m float min voiced to unvoiced coeff threshold set the minimum allowed correlation coefficient threshold which must not be exceeded in a transition from a voiced classified frame of speech to an unvoiced frame, as min voiced to unvoiced coeff threshold. Must be in the range zero to unvoiced to voiced coeff threshold inclusive. Default is 0.75. -r float voiced to unvoiced coeff threshold-ratio set the scaling factor used in determining the correlation coefficient threshold which must not be exceeded in a voiced frame to unvoiced frame transition, as voiced to unvoiced coeff threshold -ratio. The voiced to unvoiced coefficient threshold is determined by multiplying this scaling factor with the maximum cross-correlation coefficient of the previously voiced frame. If this product is less than min voiced to unvoiced coeff threshold then this is used instead. Must be in the range zero to one inclusive. Default is 0.85. -t float anti pitch doubling/halving threshold set the threshold used in eliminating (as far as possible) pitch doubling and pitch halving errors as anti pitch double/halving threshold. Must be in the range zero to one inclusive. Default is 0.77. -otype string " {ascii}" Output file type, if unspecified ascii is assumed, types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii, label -S float Frame spacing of output in seconds. If this is different from the internal spacing, the contour is resampled at this spacing -o ofile Output filename, defaults to stdout Examples Pitch detection on typical male voice, using low pass filtering: $ pda kdt_010.wav -o kdt_010.f0 -fmin 80 -fmax 200 -L festdoc-1.4.2/speech_tools/doc/manuals_gen/pda_trace0100644001741100001440000000567107327543067021257 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=pda Pitch Detection Algorithm OP=id ARG=pda-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 53. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pda -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pda -sgml_options' OP=name ARG=Examples combine {parent Chunk=HASH(0x8104780) title pda Pitch Detection Algorithm refs ARRAY(0x8109074) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812d9f4) id pda-manual type comment} // {parent Chunk=HASH(0x8104780) title Unnamed Group 1 refs ARRAY(0x812da78) bits ARRAY(0x812da60) decls ARRAY(0x812da90) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a00) type top} // {parent Chunk=HASH(0x8104780) title pda Pitch Detection Algorithm refs ARRAY(0x812da78) bits ARRAY(0x812da60) id pda-manual decls ARRAY(0x812da90) type group1 toc 1} parent Chunk=HASH(0x8104780) title pda Pitch Detection Algorithm refs ARRAY(0x812da78) bits ARRAY(0x812da60) id pda-manual decls ARRAY(0x812da90) type group1 toc 1 gives {parent Chunk=HASH(0x8104780) title pda Pitch Detection Algorithm refs ARRAY(0x812da78) toc 1 bits ARRAY(0x812da60) decls ARRAY(0x812da90) id pda-manual type top} combine {parent Chunk=HASH(0x8130ca4) title Synopsis refs ARRAY(0x8130cf8) bits ARRAY(0x8130ce0) decls ARRAY(0x8130d10) type comment} // {parent Chunk=HASH(0x8130ca4) title Unnamed Group 2 refs ARRAY(0x8130d7c) bits ARRAY(0x8130d64) decls ARRAY(0x8130d94) type group} combine {parent Chunk=HASH(0x8130ca4) title Options refs ARRAY(0x8130fa4) bits ARRAY(0x8130f8c) decls ARRAY(0x8130fbc) type comment} // {parent Chunk=HASH(0x8130ca4) title Unnamed Group 3 refs ARRAY(0x8131028) bits ARRAY(0x8131010) decls ARRAY(0x8131040) type group} combine {parent Chunk=HASH(0x8130ca4) title Examples refs ARRAY(0x813210c) bits ARRAY(0x81320f4) decls ARRAY(0x8132124) type comment} // {parent Chunk=HASH(0x8130ca4) title Unnamed Group 4 refs ARRAY(0x81321c0) bits ARRAY(0x81321a8) decls ARRAY(0x81321d8) type group} P Chunk=HASH(0x8104780) P Chunk=HASH(0x812da0c) P Chunk=HASH(0x8130dac) P Chunk=HASH(0x8130d28) P Chunk=HASH(0x8130e30) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pda -sgml_synopsis P Chunk=HASH(0x8130ecc) P Chunk=HASH(0x8131058) P Chunk=HASH(0x8130fd4) P Chunk=HASH(0x81320a0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pda -sgml_options P Chunk=HASH(0x81321f0) P Chunk=HASH(0x813213c) festdoc-1.4.2/speech_tools/doc/manuals_gen/pitchmark_manual_section.sgml0100644001741100001440000003071207327543070025325 0ustar awbusers <command> pitchmark </command> <emphasis> Find instants of glottal closure in Largynograph file</emphasis> * @toc Synopsis pitchmark[input file] -o [output file] [options]Summary: pitchmark laryngograph (lx) files-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -otype string " {ascii}" -S float -o ofile -lx_lf int -lx_lo int -lx_hf int -lx_ho int -df_lf int -df_lo int -med_o int -mean_o int -inv -fill -min float -max float -def float -pm ifile -f0 ofile -end float -wave_end -inter -style string pitchmark locates instants of glottal closure in a laryngograph waveform, and performs post-processing to produce even pitchmarks. EST does not currently provide any means of pitchmarking a speech waveform. Pitchmarking is performed by calling the pitchmark() function, which carries out the following operations: Double low pass filter the signal. This removes noise in the signal. The parameter lx_lf specifies the low pass cutoff frequency, and lx_lo specifies the order. Double filtering (feeding the waveform through the filter, then reversing the waveform and feeding it through again) is performed to reduce any phase shift beween the input and output of the filtering operation. Double high pass filter the signal. This removes the very low freqency swell that is often observed in laryngograph waveforms. The parameter lx_hf specifies the high pass cutoff frequency, and lx_ho specifies the order. Double filtering is performed to reduce any phase shift beween the input and output of the filtering operation. Calculate the delta signal. The filtered waveform is differentiated using the delta() function. Low pass filter the delta signal. Some noise may still be present in the signal, and this is removed by further low pass filtering. Experimentation has shown that simple mean smoothing is often more effective than FIR smoothing at this point. The parameter mo is used to specify the size of the mean smoothing window. If FIR smoothing is chosen, the parameter df_lf specifies the low pass cutoff frequency, and df_lo specifies the order. Double filtering is again used to avoid phase distortion. Pick zero crossings. Now simple zero-crossing is used to find the pitchmarks themselves. pitchmark also performs post-processing on the pitchmarks. This can be used to eliminate pitchmarks which occur too closely together, or to provide estimated evenly spaced pitchmarks during unvoiced regions. The -fill option switches this facility on, and -min, -max, -def, -end and -wave_end control its operation. OPTIONS -h Options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -otype string " {ascii}" Output file type, if unspecified ascii is assumed, types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii, label -S float Frame spacing of output in seconds. If this is different from the internal spacing, the contour is resampled at this spacing -o ofile Output filename, defaults to stdout -lx_lf int lx low frequency cutoff -lx_lo int lx low order -lx_hf int lx high frequency cutoff -lx_ho int lx high order -df_lf int df low frequeny cutoff -df_lo int df low order -med_o int median smoothing order -mean_o int mean smoothing order -inv Invert polarity of lx signal. Often the lx signal is upside down. This option inverts the signal prior to processing. -fill Insert and remove pitchmarks according to min, max and def period values. Often it is desirable to place limits on the values of the pitchmarks. This option enforces a minimum and maximum pitch period (specified by -man and -max). If the maximum pitch setting is low enough, this will esnure that unvoiced regions have evenly spaced pitchmarks -min float Minimum allowed pitch period, in seconds -max float Maximum allowed pitch period, in seconds -def float Default pitch period in seconds, used for a guide as to what length pitch periods should be in unvoiced sections -pm ifile Input is raw pitchmark file. This option is used to perform filling operations on an already existing set of pitchmarks -f0 ofile Calculate F0 from pitchmarks and save to file -end float Specify the end time of the last pitchmark, for use with the -fill option -wave_end Use the end of a waveform to specify when the last pitchmark position should be. The waveform file is only read to determine its end, no processing is performed -inter Output intermediate waveforms. This will output the signal at various stages of processing. Examination of these waveforms is extremely useful in setting the parameters for similar waveforms -style string "track" or "lab" Examples Basic Pitchmarking $ pitchmark kdt_010.lar -o kdt_010.pm -otype est Pitchmarking with unvoiced regions filled The following fills unvoiced regions with pitch periods that are about 0.01 seconds long. It also post-processes the set of pitchmarks and ensures that noe are above 0.02 seconds long and none below 0.003. A final unvoiced region extending to the end of the wave is specified by using the -wave_end option. $ pitchmark kdt_010.lar -o kdt_010.pm -otype est -fill -min 0.003 \ -max 0.02 -def 0.01 -wave_end festdoc-1.4.2/speech_tools/doc/manuals_gen/pitchmark_trace0100644001741100001440000000643307327543070022464 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG= pitchmark Find instants of glottal closure in Largynograph file OP=id ARG=pitchmark-manual OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_options' OP=name ARG=Examples combine {parent Chunk=HASH(0x8104798) title pitchmark Find instants of glottal closure in Largynograph file refs ARRAY(0x810908c) bits ARRAY(0x8101ba4) id pitchmark-manual decls ARRAY(0x812da0c) type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 427. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title pitchmark Find instants of glottal closure in Largynograph file refs ARRAY(0x812da90) bits ARRAY(0x812da78) id pitchmark-manual decls ARRAY(0x812daa8) type group1 toc } parent Chunk=HASH(0x8104798) title pitchmark Find instants of glottal closure in Largynograph file refs ARRAY(0x812da90) bits ARRAY(0x812da78) id pitchmark-manual decls ARRAY(0x812daa8) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 427. toc gives {parent Chunk=HASH(0x8104798) title pitchmark Find instants of glottal closure in Largynograph file refs ARRAY(0x812da90) bits ARRAY(0x812da78) id pitchmark-manual decls ARRAY(0x812daa8) type top} combine {parent Chunk=HASH(0x8130e74) title Synopsis refs ARRAY(0x8130ec8) bits ARRAY(0x8130eb0) decls ARRAY(0x8130ee0) type comment} // {parent Chunk=HASH(0x8130e74) title Unnamed Group 2 refs ARRAY(0x8130f4c) bits ARRAY(0x8130f34) decls ARRAY(0x8130f64) type group} combine {parent Chunk=HASH(0x8130e74) title OPTIONS refs ARRAY(0x813293c) bits ARRAY(0x8132924) decls ARRAY(0x8132954) type comment} // {parent Chunk=HASH(0x8130e74) title Unnamed Group 3 refs ARRAY(0x81329c0) bits ARRAY(0x81329a8) decls ARRAY(0x81329d8) type group} combine {parent Chunk=HASH(0x8130e74) title Examples refs ARRAY(0x8132ae0) bits ARRAY(0x8132ac8) decls ARRAY(0x8132af8) type comment} // {parent Chunk=HASH(0x8130e74) title Unnamed Group 4 refs ARRAY(0x8132c48) bits ARRAY(0x8132c30) decls ARRAY(0x8132c60) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130f7c) P Chunk=HASH(0x8130ef8) P Chunk=HASH(0x8131000) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_synopsis P Chunk=HASH(0x813109c) P Chunk=HASH(0x81329f0) P Chunk=HASH(0x813296c) P Chunk=HASH(0x8132a74) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_options P Chunk=HASH(0x813441c) P Chunk=HASH(0x8132b10) festdoc-1.4.2/speech_tools/doc/manuals_gen/spectgen_manual_section.sgml0100644001741100001440000001562007327543070025154 0ustar awbusers <command>spectgen</command> <emphasis>Make spectrograms</emphasis> Synopsis spectgen[input file] -o [output file]-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -otype string " {ascii}" -S float -o ofile -shift float -length float -sr float -slow -w float -b float -raw -order int spectgen is used to create spectrograms, which are 3d plots of amplitude against time and frequency. Spectgen takes a waveform and produces a track, where each channel represents one frequency bin. By default spectgen produces a "wide-band" spectrogram, that is one with high time resolution and low frequency resolution. "Narrow-band" spectrograms can be produced by using the -shift and -lengt options. Typical values for -shift and -length are: Options -h Options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -otype string " {ascii}" Output file type, if unspecified ascii is assumed, types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii, label -S float Frame spacing of output in seconds. If this is different from the internal spacing, the contour is resampled at this spacing -o ofile Output filename, defaults to stdout -shift float frame spacing in seconds for fixed frame analysis. This doesn't have to be the same as the output file spacing - the S option can be used to resample the track before saving default: 0.001 -length float input frame length in milliseconds -sr float range in which output values should lie -slow slow FFT code -w float white cut off (0.0 to 1.0) -b float black cut off (0.0 to 1.0) -raw Don't perform any scaling -order int cepstral order festdoc-1.4.2/speech_tools/doc/manuals_gen/spectgen_trace0100644001741100001440000000520607327543070022307 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=spectgen Make spectrograms OP=id ARG=spectgen-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 53. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/spectgen -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/spectgen -sgml_options' combine {parent Chunk=HASH(0x8104798) title spectgen Make spectrograms refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id spectgen-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title spectgen Make spectrograms refs ARRAY(0x812da90) bits ARRAY(0x812da78) id spectgen-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title spectgen Make spectrograms refs ARRAY(0x812da90) bits ARRAY(0x812da78) id spectgen-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title spectgen Make spectrograms refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id spectgen-manual type top} combine {parent Chunk=HASH(0x8130cdc) title Synopsis refs ARRAY(0x8130d30) bits ARRAY(0x8130d18) decls ARRAY(0x8130d48) type comment} // {parent Chunk=HASH(0x8130cdc) title Unnamed Group 2 refs ARRAY(0x8130db4) bits ARRAY(0x8130d9c) decls ARRAY(0x8130dcc) type group} combine {parent Chunk=HASH(0x8130cdc) title Options refs ARRAY(0x8130fac) bits ARRAY(0x8130f94) decls ARRAY(0x8130fc4) type comment} // {parent Chunk=HASH(0x8130cdc) title Unnamed Group 3 refs ARRAY(0x8131030) bits ARRAY(0x8131018) decls ARRAY(0x8131048) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130de4) P Chunk=HASH(0x8130d60) P Chunk=HASH(0x8130e68) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/spectgen -sgml_synopsis P Chunk=HASH(0x8130f04) P Chunk=HASH(0x8131060) P Chunk=HASH(0x8130fdc) P Chunk=HASH(0x8131f78) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/spectgen -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/design_filter_manual_section.sgml0100644001741100001440000000565507327543070026171 0ustar awbusers <command>design_filter</command> Synopsis design_filter[input file0] -o [output file]-h -forder int -double -o ofile designfilter computes the coefficients of a FIR filter with a given frequency response. The user supplies the frequency response as a vector of evenly spaced gains ranging from 0 to half the sampling frequency. The length of this vector must be a power of 2. The filter coefficients can be used by the \Ref{sigfilter} program. Options -h Options help -forder int Order of FIR filter. This must be ODD. Sensible values range from 19 (quick but with a shallow rolloff) to 199 (slow but with a steep rolloff). The default is 199. -double Design a filter suitable for double (zero-phase) filtering -o ofile output filter file Example Designing a bandpass filter The frequency response vector must be placed in a file, in either ascii of EST headered format. For example: EST_File fvector version 1 DataType ascii length 128 EST_Header_End 0.0 0.0 .....[etc] 1.0 1.0 1.0 .....[etc] 0.0 0.0 0.0 .....[etc] And the filter is simply designed using $ design_filter -o filter.coefficients filter.freq_response where filter.freq_response is the above file, and filter.coefficients is the output file which can be used by \Ref{sigfilter}. festdoc-1.4.2/speech_tools/doc/manuals_gen/design_filter_trace0100644001741100001440000000552307327543070023317 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=design_filter OP=id ARG=designfilter-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 50. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/design_filter -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/design_filter -sgml_options' OP=name ARG=Example combine {parent Chunk=HASH(0x81047a0) title design_filter refs ARRAY(0x8109094) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da14) id designfilter-manual type comment} // {parent Chunk=HASH(0x81047a0) title Unnamed Group 1 refs ARRAY(0x812da98) bits ARRAY(0x812da80) decls ARRAY(0x812dab0) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a20) type top} // {parent Chunk=HASH(0x81047a0) title design_filter refs ARRAY(0x812da98) bits ARRAY(0x812da80) id designfilter-manual decls ARRAY(0x812dab0) type group1 toc 1} parent Chunk=HASH(0x81047a0) title design_filter refs ARRAY(0x812da98) bits ARRAY(0x812da80) id designfilter-manual decls ARRAY(0x812dab0) type group1 toc 1 gives {parent Chunk=HASH(0x81047a0) title design_filter refs ARRAY(0x812da98) toc 1 bits ARRAY(0x812da80) decls ARRAY(0x812dab0) id designfilter-manual type top} combine {parent Chunk=HASH(0x8130be4) title Synopsis refs ARRAY(0x8130c38) bits ARRAY(0x8130c20) decls ARRAY(0x8130c50) type comment} // {parent Chunk=HASH(0x8130be4) title Unnamed Group 2 refs ARRAY(0x8130cbc) bits ARRAY(0x8130ca4) decls ARRAY(0x8130cd4) type group} combine {parent Chunk=HASH(0x8130be4) title Options refs ARRAY(0x8130ea8) bits ARRAY(0x8130e90) decls ARRAY(0x8130ec0) type comment} // {parent Chunk=HASH(0x8130be4) title Unnamed Group 3 refs ARRAY(0x8130f2c) bits ARRAY(0x8130f14) decls ARRAY(0x8130f44) type group} combine {parent Chunk=HASH(0x8130be4) title Example refs ARRAY(0x8131f48) bits ARRAY(0x8131f30) decls ARRAY(0x8131f60) type comment} // {parent Chunk=HASH(0x8130be4) title Unnamed Group 4 refs ARRAY(0x813214c) bits ARRAY(0x8132134) decls ARRAY(0x8132164) type group} P Chunk=HASH(0x81047a0) P Chunk=HASH(0x812da2c) P Chunk=HASH(0x8130cec) P Chunk=HASH(0x8130c68) P Chunk=HASH(0x8130d70) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/design_filter -sgml_synopsis P Chunk=HASH(0x8130e0c) P Chunk=HASH(0x8130f5c) P Chunk=HASH(0x8130ed8) P Chunk=HASH(0x8131edc) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/design_filter -sgml_options P Chunk=HASH(0x813217c) P Chunk=HASH(0x8131f78) festdoc-1.4.2/speech_tools/doc/manuals_gen/dp_manual_section.sgml0100644001741100001440000001145007327543070023744 0ustar awbusers <command>dp</command> <emphasis> Perform dynamic programming on label sequences</emphasis> Synopsis dpUsage:-vocab string -place_holder string -show_cost -o string -p int -i float -d float -s float -cost_matrix string dp provides simple dynamic programming to find the lowest cost alignment of two symbol sequences. Possible uses include: Label alignment (e.g. speech recogniser output scoring) The costs of inserting/deleting/substituting symbols can be given either with command line options, or as a file containing a full matrix of costs. In the former case, all insertions will have the same cost. In the latter case, each row of the file contains the cost of replacing a symbol in sequence 1 with each possible symbol in the vocabulary to align with sequence 2, including a special "place holder" symbol used for insertions/deletions. See the examples below. The place holder can be redefined. The output is an EST utterance with three Relations: the first two are the input sequences, and the third shows the alignment found by dynamic programming. Options -vocab string file containing vocabulary -place_holder string which vocab item is the place holder (default is ) -show_cost show cost of matching path -o string output file -p int 'beam' width Either: -i float insertion cost -d float deletion cost -s float substitution cost Or: -cost_matrix string file containing cost matrix Examples Align two symbol sequences: $ dp -vocab vocab.file "a b c" "a b d c" -i 1 -d 2 -s 3 where vocab.file contains "a b c d" Or, using a full cost matrix: $ dp -vocab vocab2.file -cost_matrix foo "a b c" "a b d c" where vocab2.file contains "a b c d " and the file foo contains: 0 3 3 3 2 3 0 3 3 2 3 3 0 3 2 3 3 3 0 2 1 1 1 1 0 Each row of foo shows the cost of replacing an input symbol with each symbol in the vocabulary to match an output symbol. Each row corresponds to an item in the vocabulary (in the order they appear in the vocabulary file). In the example, replacing 'a' with 'a' costs 0, replacing 'a' with any of 'b' 'c' or 'd' costs 3 (a substitution), and replacing 'a' with the place holder symbol 'null' costs 2 (a deletion). The cost of replacing 'null' with anything other than 'null' costs 1 (an insertion). The costs of 1,2 and 3 used here are only for illustration. The cost matrix meed not have the form above - for example, replacing 'a' with 'a' need not cost 0. The entries in foo are read as floats. festdoc-1.4.2/speech_tools/doc/manuals_gen/dp_trace0100644001741100001440000000603207327543070021100 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=dp Perform dynamic programming on label sequences OP=id ARG=dp-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 112. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/dp -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/dp -sgml_options' OP=name ARG=Examples combine {parent Chunk=HASH(0x8104780) title dp Perform dynamic programming on label sequences refs ARRAY(0x8109074) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812d9f4) id dp-manual type comment} // {parent Chunk=HASH(0x8104780) title Unnamed Group 1 refs ARRAY(0x812da78) bits ARRAY(0x812da60) decls ARRAY(0x812da90) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a00) type top} // {parent Chunk=HASH(0x8104780) title dp Perform dynamic programming on label sequences refs ARRAY(0x812da78) bits ARRAY(0x812da60) id dp-manual decls ARRAY(0x812da90) type group1 toc 1} parent Chunk=HASH(0x8104780) title dp Perform dynamic programming on label sequences refs ARRAY(0x812da78) bits ARRAY(0x812da60) id dp-manual decls ARRAY(0x812da90) type group1 toc 1 gives {parent Chunk=HASH(0x8104780) title dp Perform dynamic programming on label sequences refs ARRAY(0x812da78) toc 1 bits ARRAY(0x812da60) decls ARRAY(0x812da90) id dp-manual type top} combine {parent Chunk=HASH(0x8130d84) title Synopsis refs ARRAY(0x8130dd8) bits ARRAY(0x8130dc0) decls ARRAY(0x8130df0) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 2 refs ARRAY(0x8130e5c) bits ARRAY(0x8130e44) decls ARRAY(0x8130e74) type group} combine {parent Chunk=HASH(0x8130d84) title Options refs ARRAY(0x81310c0) bits ARRAY(0x81310a8) decls ARRAY(0x81310d8) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 3 refs ARRAY(0x8131144) bits ARRAY(0x813112c) decls ARRAY(0x813115c) type group} combine {parent Chunk=HASH(0x8130d84) title Examples refs ARRAY(0x8132358) bits ARRAY(0x8132340) decls ARRAY(0x8132370) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 4 refs ARRAY(0x81325d4) bits ARRAY(0x81325bc) decls ARRAY(0x81325ec) type group} P Chunk=HASH(0x8104780) P Chunk=HASH(0x812da0c) P Chunk=HASH(0x8130e8c) P Chunk=HASH(0x8130e08) P Chunk=HASH(0x8130f10) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/dp -sgml_synopsis P Chunk=HASH(0x8130fac) P Chunk=HASH(0x8132268) P Chunk=HASH(0x81310f0) P Chunk=HASH(0x81322ec) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/dp -sgml_options P Chunk=HASH(0x8132604) P Chunk=HASH(0x8132388) festdoc-1.4.2/speech_tools/doc/manuals_gen/ngram_build_manual_section.sgml0100644001741100001440000001622407327543070025630 0ustar awbusers <command>ngram_build</command> <emphasis>Train n-gram language model</emphasis> Synopsis ngram_build[input file0] [input file1] ... -o [output file]-p ifile -order int -smooth int -o ofile -input_format string -otype string -sparse -dense -backoff int -floor double -freqsmooth int -trace -save_compressed -oov_mode string -oov_marker string -prev_tag string -prev_prev_tag string -last_tag string -default_tags ngram_build offers basic ngram language model estimation. Input data format Two input formats are supported. In sentence_per_line format, the program will deal with start and end of sentence (if required) by using special vocabulary items specified by -prev_tag, -prev_prev_tag and -last_tag. For example, the input sentence: the cat sat on the mat would be treated as ... prev_prev_tag prev_prev_tag prev_tag the cat sat on the mat last_tag where prev_prev_tag is the argument to -prev_prev_tag, and so on. A default set of tag names is also available. This input format is only useful for sliding-window type applications (e.g. language modelling for speech recognition). The second input format is ngram_per_line which is useful for either non-sliding-window applications, or where the user requires an alternative treatment of start/end of sentence to that provided above. Now the input file simply contains a complete ngram per line. For the same example as above (to build a trigram model) this would be: prev_prev_tag prev_tag the prev_tag the cat the cat sat cat sat on sat on the on the mat the mat last_tag Representation \[V^N\] The internal representation of the model becomes important for higher values of N where, if V is the vocabulary size, \(V^N\) becomes very large. In such cases, we cannot explicitly hold pobabilities for all possible ngrams, and a sparse representation must be used (i.e. only non-zero probabilities are stored). Getting more robust probability estimates The common techniques for getting better estimates of the low/zero frequency ngrams are provided: namely smoothing and backing-off Testing an ngram model Use the ngram_test program. OPTIONS -w ifile filename containing word list (required) -p ifile filename containing predictee word list (default is to use wordlist given by -w) -order int order, 1=unigram, 2=bigram etc. (default 2) -smooth int Good-Turing smooth the grammar up to the given frequency -o ofile Output file for constructed ngram -input_format string format of input data (default sentence_per_line) may be sentence_per_file, ngram_per_line. -otype string format of output file, one of cstr_ascii cstr_bin or htk_ascii -sparse build ngram in sparse representation -dense build ngram in dense representation (default) -backoff int build backoff ngram (requires -smooth) -floor double frequency floor value used with some ngrams -freqsmooth int build frequency backed off smoothed ngram, this requires -smooth option -trace give verbose outout about build process -save_compressed save ngram in gzipped format -oov_mode string what to do about out-of-vocabulary words, one of skip_ngram, skip_sentence (default), skip_file, or use_oov_marker -oov_marker string special word for oov words (default !OOV) (use in conjunction with '-oov_mode use_oov_marker' Pseudo-words : -prev_tag string tag before sentence start -prev_prev_tag string all words before 'prev_tag' -last_tag string after sentence end -default_tags use default tags of !ENTER,!EXIT and !EXIT respectively festdoc-1.4.2/speech_tools/doc/manuals_gen/ngram_build_trace0100644001741100001440000000534207327543070022763 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ngram_build Train n-gram language model OP=id ARG=ngram_build_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 49. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_build -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_build -sgml_options' combine {parent Chunk=HASH(0x8104798) title ngram_build Train n-gram language model refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id ngram-build-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title ngram_build Train n-gram language model refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ngram-build-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title ngram_build Train n-gram language model refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ngram-build-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title ngram_build Train n-gram language model refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id ngram-build-manual type top} combine {parent Chunk=HASH(0x8130d84) title Synopsis refs ARRAY(0x8130dd8) bits ARRAY(0x8130dc0) decls ARRAY(0x8130df0) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 2 refs ARRAY(0x8130e5c) bits ARRAY(0x8130e44) decls ARRAY(0x8130e74) type group} combine {parent Chunk=HASH(0x8130d84) title OPTIONS refs ARRAY(0x813257c) bits ARRAY(0x8132564) decls ARRAY(0x8132594) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 3 refs ARRAY(0x8132600) bits ARRAY(0x81325e8) decls ARRAY(0x8132618) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e8c) P Chunk=HASH(0x8130e08) P Chunk=HASH(0x8130f10) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_build -sgml_synopsis P Chunk=HASH(0x8130fac) P Chunk=HASH(0x8132630) P Chunk=HASH(0x81325ac) P Chunk=HASH(0x81326b4) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_build -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/na_play_manual_section.sgml0100644001741100001440000002064607327543071024774 0ustar awbusers <command>na_play</command><emphasis> Audio Playback</emphasis> Synopsis na_play[input file0] [input file1] ...-h -itype string -n int -f int -ibo string -iswap -istype string -c string -start float -end float -from int -to int -p string -command string -basic -r* -quality string -server string -audiodevice string -scale float -v -wait na_play is a general playback program for playing sound files on a variety of platforms and sound cards. Currently, the following audio devices are supported: sunaudio: 8k ulaw direct to /dev/audio found on most Sun machines. This is also found under Linux and FreeBSD, and possibly others. This is the default if netaudio is not supported. netaudio: NCD's network transparent audio system (NAS). This allows use of audio devices across a network. NAS has support for, Suns, Linux, FreeBSD, HPs and probably other machines by now. sun16audio: This is only available on newer Sun workstations and has been enabled at compile time. This provides 16bit linear PCM at various sample rates. linux16audio: This is only available on Linux workstations and has been enabled at compile time. This provides 16bit linear PCM at various sample rates. freebsd16audio: This is only available on workstations running FreeBSD and has been enabled at compile time. This provides 16bit linear PCM at various sample rates. mplayeraudio: This is only available under Windows NT 4.0 and Windows 95 and has been enabled at compile time. This provides 16bit linear PCM at various sample rates. win32audio This is only available under Windows NT 4.0 and Windows 95 and has been enabled at compile time. This provides 16bit linear PCM at various sample rates, playing the audio directly rather than saving to a file as with mplayeraudio. irixaudio Audio support for SGI's IRIX 6.2. Audio_Command: Allows the specification of an arbitrary UNIX command to play the waveform. This won't normally be used with na_play as you could just use the command directly but is necessary with some systems using the speech tools. The default audio is netaudio if it is supported. If not the platform specific auido mode is the default (e.g. sun16audio, linux16audio, freebsd16audio or mplayeraudio). If none of these is supported, sunaudio is the default. OPTIONS -h options help -itype string Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii -n int Number of channels in an unheadered input file -f int Sample rate in Hertz for an unheadered input file -ibo string Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -iswap Swap bytes. (For use on an unheadered input file) -istype string Sample type in an unheadered input file: short, mulaw, byte, ascii -c string Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. -start float Extract sub-wave starting at this time, specified in seconds -end float Extract sub-wave ending at this time, specified in seconds -from int Extract sub-wave starting at this sample point -to int Extract sub-wave ending at this sample point -p string audio device protocol. Ths supported types are sunaudio audio_command linux16audio -command string command to play wave when protocol is audio_command -basic HTML audio/basic format, if unheadered treat as ulaw 8K -r* ESPS compatible way of selecting subrange of file. The options -start, -end, -to and -from are recommended -quality string either [ high | low ] . "high" will ensure that proper resampling is used. "low" means play as fast as possible, with a minimum of processing -server string play sound on machine (when protocol is server-based) -audiodevice string use specified audiodevice if approrpriate for protocol -scale float change the gain (volume) of the signal. 1.0 is default -v verbose. Print file names when playing -wait wait for a key to be pressed between each file festdoc-1.4.2/speech_tools/doc/manuals_gen/na_play_trace0100644001741100001440000000515107327543071022122 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=na_play Audio Playback OP=id ARG=na_play_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 46. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_play -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_play -sgml_options' combine {parent Chunk=HASH(0x8104798) title na_play Audio Playback refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id na-play-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title na_play Audio Playback refs ARRAY(0x812da90) bits ARRAY(0x812da78) id na-play-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title na_play Audio Playback refs ARRAY(0x812da90) bits ARRAY(0x812da78) id na-play-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title na_play Audio Playback refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id na-play-manual type top} combine {parent Chunk=HASH(0x8130cd4) title Synopsis refs ARRAY(0x8130d28) bits ARRAY(0x8130d10) decls ARRAY(0x8130d40) type comment} // {parent Chunk=HASH(0x8130cd4) title Unnamed Group 2 refs ARRAY(0x8130dac) bits ARRAY(0x8130d94) decls ARRAY(0x8130dc4) type group} combine {parent Chunk=HASH(0x8130cd4) title OPTIONS refs ARRAY(0x8132770) bits ARRAY(0x8132758) decls ARRAY(0x8132788) type comment} // {parent Chunk=HASH(0x8130cd4) title Unnamed Group 3 refs ARRAY(0x81327f4) bits ARRAY(0x81327dc) decls ARRAY(0x813280c) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130ddc) P Chunk=HASH(0x8130d58) P Chunk=HASH(0x8130e60) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_play -sgml_synopsis P Chunk=HASH(0x8130efc) P Chunk=HASH(0x8132824) P Chunk=HASH(0x81327a0) P Chunk=HASH(0x81328a8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_play -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/ngram_test_manual_section.sgml0100644001741100001440000001316007327543071025505 0ustar awbusers <command>ngram_test</command> <emphasis> Test n-gram language model </emphasis> Synopsis ngram_test[input file0] [input file1] ...-w ifile -S ifile -raw_stats -brief -f -input_format string -prev_tag string -prev_prev_tag string -last_tag string -default_tags ngram_test is for testing ngram models generated from ngram_build. How do we test an ngram model ? ngram_test will compute the entropy (or perplexity, see below) of some test data, given an ngram model. The entropy gives a measure of how likely the ngram model is to have generated the test data. Entropy is defined (for a sliding-window type ngram) as: \[H = -\frac{1}{Q} \sum_{i=1}^{Q} log P(w_i | w_{i-1}, w_{i-2},... w_{i-N+1}) \] where \(Q\) is the number of words of test data and \(N\) is the order of the ngram model. Perplexity is a more intuitive mease, defined as: \[B = 2^H \] The perplexity of an ngram model with vocabulary size V will be between 1 and V. Low perplexity indicates a more predictable language, and in speech recognition, a models with low perplexity on test data (i.e. data NOT used to estimate the model in the first place) typically give better accuracy recognition than models with higher perplexity (this is not guaranteed, however). test_ngram works with non-sliding-window type models when the input format is ngram_per_line. Input data format The data input format options are the same as ngram_build, as is the treatment of sentence start/end using special tags. Note: To get meaningful entropy/perplexity figures, it is recommended that you use the same data input format in both ngram_build and ngram_test, and the treatment of sentence start/end should be the same. See also ngram_build OPTIONS -g ifile grammar file (required) -w ifile filename containing word list (required for some grammar formats) -S ifile script file -raw_stats print unnormalised entropy and sample count -brief print results in brief format -f print stats for each file -input_format string format of input data (default sentence_per_line) may also be sentence_per_file, or ngram_per_line. Pseudo-words : -prev_tag string tag before sentence start -prev_prev_tag string all words before 'prev_tag' -last_tag string after sentence end -default_tags use default tags of !ENTER,!EXIT and !EXIT respectively Hints I got a perplexity of Infinity - what went wrong ? A perplexity of Infinity means that at least one of the ngrams in your test data had a probility of zero. Possible reasons for this include: The training data had no examples of this ngram, and you did not specify a floor for zero frequency ngrams in \Ref{build_ngram} You used differing input formats for \Ref{ngram_build} and \Ref{ngram_test}. You used differing sentence start/end treatments in \Ref{ngram_build} and \Ref{ngram_test}. festdoc-1.4.2/speech_tools/doc/manuals_gen/ngram_test_trace0100644001741100001440000000607407327543071022647 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ngram_test Test n-gram language model OP=id ARG=ngram_test_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 45. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_test -sgml_synopsis' OP=see ARG=ngram_build OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_test -sgml_options' OP=name ARG=Hints combine {parent Chunk=HASH(0x8104798) title ngram_test Test n-gram language model refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id ngram-test-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title ngram_test Test n-gram language model refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ngram-test-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title ngram_test Test n-gram language model refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ngram-test-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title ngram_test Test n-gram language model refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id ngram-test-manual type top} combine {parent Chunk=HASH(0x8130d84) title Synopsis refs ARRAY(0x8130dd8) bits ARRAY(0x8130dc0) decls ARRAY(0x8130df0) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 2 refs ARRAY(0x8130e5c) bits ARRAY(0x8130e44) decls ARRAY(0x8130e74) type group} combine {parent Chunk=HASH(0x8130d84) title OPTIONS refs ARRAY(0x81329ec) bits ARRAY(0x81329d4) decls ARRAY(0x8132a04) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 3 refs ARRAY(0x8132a70) bits ARRAY(0x8132a58) decls ARRAY(0x8132a88) type group} combine {parent Chunk=HASH(0x8130d84) title Hints refs ARRAY(0x8132b90) bits ARRAY(0x8132b78) decls ARRAY(0x8132ba8) type comment} // {parent Chunk=HASH(0x8130d84) title Unnamed Group 4 refs ARRAY(0x8132ca4) bits ARRAY(0x8132c8c) decls ARRAY(0x8132cbc) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e8c) P Chunk=HASH(0x8130e08) P Chunk=HASH(0x8130f10) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_test -sgml_synopsis P Chunk=HASH(0x8130fac) P Chunk=HASH(0x8132aa0) P Chunk=HASH(0x8132a1c) P Chunk=HASH(0x8132b24) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ngram_test -sgml_options P Chunk=HASH(0x8132cd4) P Chunk=HASH(0x8132bc0) festdoc-1.4.2/speech_tools/doc/manuals_gen/viterbi_manual_section.sgml0100644001741100001440000001523007327543071025006 0ustar awbusers <command>viterbi</command> <emphasis>Combine n-gram model and likelihoods to estimate posterior probabilities</emphasis> Synopsis viterbi[observations file] -o [output file]-ngram string -given string -vocab string -ob_type string -lm_floor float -lm_scale float -ob_floor float -ob_scale float -prev_tag string -prev_prev_tag string -last_tag string -default_tags -observes2 string -ob_floor2 float -ob_scale2 float -ob_prune float -n_prune int -prune float -trace viterbi is a simple time-synchronous Viterbi decoder. It finds the most likely sequence of items drawn from a fixed vocabulary, given frame-by-frame observation probabilites for each item in that vocabulary, and a ngram grammar. Possible uses include: Simple speech recogniser back end viterbi can optionally use two sets of frame-by-frame observation probabilites in a weighted-sum fashion. Also, the ngram language model is not restricted to the conventional sliding window type in which the previous n-1 items are the ngram context. Items in the ngram context at each frame may be given. In this case, the user must provide a file containing the ngram context: one (n-1) tuple per line. To include items from the partial Viterbi path so far (i.e. found at recognition time, not given) the special notation <-N> is used where N indicates the distance back to the item required. For example <-1> would indicate the item on the partial Viterbi path at the last frame. See \Ref{Examples}. Pruning Three types of pruning are available to reduce the size of the search space and therefore speed up the search: Observation pruning Top-N pruning at each frame Fixed width beam pruning Options -ngram string Grammar file, required -given string ngram left contexts, per frame -vocab string File with names of vocabulary, this must be same number as width of observations, required -ob_type string Observation type : likelihood .... and change doc"probs" or "logs" (default is "logs") Floor values and scaling (scaling is applied after floor value) -lm_floor float LM floor probability -lm_scale float LM scale factor factor (applied to log prob) -ob_floor float Observations floor probability -ob_scale float Observation scale factor (applied to prob or log prob, depending on -ob_type) -prev_tag string tag before sentence start -prev_prev_tag string all words before 'prev_tag' -last_tag string after sentence end -default_tags use default tags of !ENTER,!EXIT and !EXIT respectively -observes2 string second observations (overlays first, ob_type must be same) -ob_floor2 float -ob_scale2 float -ob_prune float observation pruning beam width (log) probability -n_prune int top-n pruning of observations -prune float pruning beam width (log) probability -trace show details of search as it proceeds Examples Example 'given' file (items f and g are in the vocabulary), the ngram is a 4-gram. <-2> g g <-1> g f <-1> f g <-2> g g <-3> g g <-1> g f festdoc-1.4.2/speech_tools/doc/manuals_gen/viterbi_trace0100644001741100001440000000633507327543071022150 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=viterbi Combine n-gram model and likelihoods to estimate posterior probabilities OP=id ARG=viterbi-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 112. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/viterbi -sgml_synopsis' OP=name ARG=Options DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/viterbi -sgml_options' OP=name ARG=Examples combine {parent Chunk=HASH(0x8104798) title viterbi Combine n-gram model and likelihoods to estimate posterior probabilities refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id viterbi-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title viterbi Combine n-gram model and likelihoods to estimate posterior probabilities refs ARRAY(0x812da90) bits ARRAY(0x812da78) id viterbi-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title viterbi Combine n-gram model and likelihoods to estimate posterior probabilities refs ARRAY(0x812da90) bits ARRAY(0x812da78) id viterbi-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title viterbi Combine n-gram model and likelihoods to estimate posterior probabilities refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id viterbi-manual type top} combine {parent Chunk=HASH(0x8130f0c) title Synopsis refs ARRAY(0x8130f60) bits ARRAY(0x8130f48) decls ARRAY(0x8130f78) type comment} // {parent Chunk=HASH(0x8130f0c) title Unnamed Group 2 refs ARRAY(0x8130fe4) bits ARRAY(0x8130fcc) decls ARRAY(0x8130ffc) type group} combine {parent Chunk=HASH(0x8130f0c) title Options refs ARRAY(0x813270c) bits ARRAY(0x81312d8) decls ARRAY(0x8132724) type comment} // {parent Chunk=HASH(0x8130f0c) title Unnamed Group 3 refs ARRAY(0x8132790) bits ARRAY(0x8132778) decls ARRAY(0x81327a8) type group} combine {parent Chunk=HASH(0x8130f0c) title Examples refs ARRAY(0x81328b0) bits ARRAY(0x8132898) decls ARRAY(0x81328c8) type comment} // {parent Chunk=HASH(0x8130f0c) title Unnamed Group 4 refs ARRAY(0x81329c4) bits ARRAY(0x81329ac) decls ARRAY(0x81329dc) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8131014) P Chunk=HASH(0x8130f90) P Chunk=HASH(0x8131098) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/viterbi -sgml_synopsis P Chunk=HASH(0x8131134) P Chunk=HASH(0x81327c0) P Chunk=HASH(0x813273c) P Chunk=HASH(0x8132844) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/viterbi -sgml_options P Chunk=HASH(0x81329f4) P Chunk=HASH(0x81328e0) festdoc-1.4.2/speech_tools/doc/manuals_gen/wagon_manual_section.sgml0100644001741100001440000002246107327543071024461 0ustar awbusers <command>wagon</command> <emphasis>CART building program</emphasis> Synopsis wagon[options]-desc ifile -data ifile -stop int " {50}" -test ifile -frs float " {10}" -dlist -dtree -output ofile -o ofile -distmatrix ifile -quiet -verbose -predictee string -ignore string -count_field string -stepwise -swlimit float " {0.0}" -swopt string -balance float -held_out int -heap int " {210000}" -noprune wagon is used to build CART tress from feature data, its basic features include: both decisions trees and decision lists are supported predictees can be discrete or continuous input features may be discrete or continuous many options for controling tree building fixed stop value balancing held-out data and pruning stepwise use of input features choice of optimization criteria correct/entropy (for classification and rmse/correlation (for regression) A detailed description of building CART models can be found in the CART model overview section. OPTIONS -desc ifile Field description file -data ifile Datafile, one vector per line -stop int " {50}" Minimum number of examples for leaf nodes -test ifile Datafile to test tree on -frs float " {10}" Float range split, number of partitions to split a float feature range into -dlist Build a decision list (rather than tree) -dtree Build a decision tree (rather than list) default -output ofile -o ofile File to save output tree in -distmatrix ifile A distance matrix for clustering -quiet No questions printed during building -verbose Lost of information printing during build -predictee string name of field to predict (default is first field) -ignore string Filename or bracket list of fields to ignore -count_field string Name of field containing count weight for samples -stepwise Incrementally find best features -swlimit float " {0.0}" Percentage necessary improvement for stepwise -swopt string Parameter to optimize for stepwise, for classification options are correct or entropy for regression options are rmse or correlation correct and correlation are the defaults -balance float For derived stop size, if dataset at node, divided by balance is greater than stop it is used as stop if balance is 0 (default) always use stop as is. -held_out int Percent to hold out for pruning -heap int " {210000}" Set size of Lisp heap, should not normally need to be changed from its default, only with *very* large description files (> 1M) -noprune No (same class) pruning required Building Trees To build a decision tree (or list) Wagon requires data and a desccription of it. A data file consists a set of samples, one per line each consisting of the same set of features. Features may be categorial or continuous. By default the first feature is the predictee and the others are used as preditors. A typical data file will look like this 0.399 pau sh 0 0 0 1 1 0 0 0 0 0 0 0.082 sh iy pau onset 0 1 0 0 1 1 0 0 1 0.074 iy hh sh coda 1 0 1 0 1 1 0 0 1 0.048 hh ae iy onset 0 1 0 1 1 1 0 1 1 0.062 ae d hh coda 1 0 0 1 1 1 0 1 1 0.020 d y ae coda 2 0 1 1 1 1 0 1 1 0.082 y ax d onset 0 1 0 1 1 1 1 1 1 0.082 ax r y coda 1 0 0 1 1 1 1 1 1 0.036 r d ax coda 2 0 1 1 1 1 1 1 1 ... The data may come from any source, such as the festival script dumpfeats which allos the creation of such files easily from utetrance files. In addition to a data file a description file is also require that gives a name and a type to each of the features in the datafile. For the above example it would look like ((segment_duration float) ( name aa ae ah ao aw ax ay b ch d dh dx eh el em en er ey f g hh ih iy jh k l m n nx ng ow oy p r s sh t th uh uw v w y z zh pau ) ( n.name 0 aa ae ah ao aw ax ay b ch d dh dx eh el em en er ey f g hh ih iy jh k l m n nx ng ow oy p r s sh t th uh uw v w y z zh pau ) ( p.name 0 aa ae ah ao aw ax ay b ch d dh dx eh el em en er ey f g hh ih iy jh k l m n nx ng ow oy p r s sh t th uh uw v w y z zh pau ) (position_type 0 onset coda) (pos_in_syl float) (syl_initial 0 1) (syl_final 0 1) (R:Sylstructure.parent.R:Syllable.p.syl_break float) (R:Sylstructure.parent.syl_break float) (R:Sylstructure.parent.R:Syllable.n.syl_break float) (R:Sylstructure.parent.R:Syllable.p.stress 0 1) (R:Sylstructure.parent.stress 0 1) (R:Sylstructure.parent.R:Syllable.n.stress 0 1) ) The feature names are arbitrary, but as they appear in the generated trees is most useful if the trees are to be used in prediction of an utterance that the names are features and/or pathnames. Wagon can be used to build a tree with such files with the command wagon -data feats.data -desc fest.desc -stop 10 -output feats.tree A test data set may also be given which must match the given data description. If specified the built tree will be tested on the test set and results on that wil be presented on completion, without a test set the results are given with respect to the training data. However in stepwise case the test set is used in the multi-level training process thus it cannot be considered as true test data and more reasonable results should found on applying the generate tree to truely held out data (via the program wagon_test). festdoc-1.4.2/speech_tools/doc/manuals_gen/wagon_trace0100644001741100001440000000524307327543071021614 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=wagon CART building program OP=id ARG=wagon_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 58. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wagon -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wagon -sgml_options' OP=name ARG=Building Trees combine {parent Chunk=HASH(0x8104788) title wagon CART building program refs ARRAY(0x810907c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812d9fc) id wagon-manual type comment} // {parent Chunk=HASH(0x8104788) title Unnamed Group 1 refs ARRAY(0x812da80) bits ARRAY(0x812da68) decls ARRAY(0x812da98) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a08) type top} // {parent Chunk=HASH(0x8104788) title wagon CART building program refs ARRAY(0x812da80) bits ARRAY(0x812da68) id wagon-manual decls ARRAY(0x812da98) type group1 toc 1} parent Chunk=HASH(0x8104788) title wagon CART building program refs ARRAY(0x812da80) bits ARRAY(0x812da68) id wagon-manual decls ARRAY(0x812da98) type group1 toc 1 gives {parent Chunk=HASH(0x8104788) title wagon CART building program refs ARRAY(0x812da80) toc 1 bits ARRAY(0x812da68) decls ARRAY(0x812da98) id wagon-manual type top} combine {parent Chunk=HASH(0x8130cc4) title Synopsis refs ARRAY(0x8130d18) bits ARRAY(0x8130d00) decls ARRAY(0x8130d30) type comment} // {parent Chunk=HASH(0x8130cc4) title Unnamed Group 2 refs ARRAY(0x8130d9c) bits ARRAY(0x8130d84) decls ARRAY(0x8130db4) type group} combine {parent Chunk=HASH(0x8130cc4) title OPTIONS refs ARRAY(0x8131024) bits ARRAY(0x813100c) decls ARRAY(0x813103c) type comment} // {parent Chunk=HASH(0x8130cc4) title Unnamed Group 3 refs ARRAY(0x8132204) bits ARRAY(0x8131090) decls ARRAY(0x813221c) type group} P Chunk=HASH(0x8104788) P Chunk=HASH(0x812da14) P Chunk=HASH(0x8130dcc) P Chunk=HASH(0x8130d48) P Chunk=HASH(0x8130e50) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wagon -sgml_synopsis P Chunk=HASH(0x8130eec) P Chunk=HASH(0x8132234) P Chunk=HASH(0x8131054) P Chunk=HASH(0x81322b8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wagon -sgml_options P Chunk=HASH(0x8132354) festdoc-1.4.2/speech_tools/doc/manuals_gen/xml_parser_manual_section.sgml0100644001741100001440000000276007327543071025522 0ustar awbusers <command>xml_parser</command> Synopsis xml_parser[file] [options]-sysdir string xml_parser is a simple program giving access to the RXP &xml; parser. It parses an input file and prints the results out in a simple indented format. It's main use is as a development tool, to check that files intended for input to an &xml; application, for instance &festival;, parse as you expect. OPTIONS -sysdir string Look for unqualified system entities in this directory-h Options help festdoc-1.4.2/speech_tools/doc/manuals_gen/xml_parser_trace0100644001741100001440000000474007327543071022656 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=xml_parser OP=id ARG=xml_parser_manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 100. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/xml_parser -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/xml_parser -sgml_options' combine {parent Chunk=HASH(0x8104798) title xml_parser refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id xml-parser-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title xml_parser refs ARRAY(0x812da90) bits ARRAY(0x812da78) id xml-parser-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title xml_parser refs ARRAY(0x812da90) bits ARRAY(0x812da78) id xml-parser-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title xml_parser refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id xml-parser-manual type top} combine {parent Chunk=HASH(0x8130b9c) title Synopsis refs ARRAY(0x8130bf0) bits ARRAY(0x8130bd8) decls ARRAY(0x8130c08) type comment} // {parent Chunk=HASH(0x8130b9c) title Unnamed Group 2 refs ARRAY(0x8130c74) bits ARRAY(0x8130c5c) decls ARRAY(0x8130c8c) type group} combine {parent Chunk=HASH(0x8130b9c) title OPTIONS refs ARRAY(0x8130e60) bits ARRAY(0x8130e48) decls ARRAY(0x8130e78) type comment} // {parent Chunk=HASH(0x8130b9c) title Unnamed Group 3 refs ARRAY(0x8130ee4) bits ARRAY(0x8130ecc) decls ARRAY(0x8130efc) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130ca4) P Chunk=HASH(0x8130c20) P Chunk=HASH(0x8130d28) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/xml_parser -sgml_synopsis P Chunk=HASH(0x8130dc4) P Chunk=HASH(0x8130f14) P Chunk=HASH(0x8130e90) P Chunk=HASH(0x8131e54) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/xml_parser -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/wfst_build_manual_section.sgml0100644001741100001440000000632107327543072025506 0ustar awbusers <command>wfst_build</command> <emphasis>Build a weighted finite-state transducer</emphasis> Synopsis wfst_build[option] [rulefile0] [rulefile1] ...-type string " {kk}" -determinize -detmin -o ofile -heap int " {210000}" -q Build and.or process weighted finite state transducers (WFSTs) form various input formats. This program accepts descriptions in the following formats and converts them to WFSTs regular expressions regular grammars Koskenniemi/Kay/Kaplan context restriction rules In addition various operations can be performed on two WFSTs compose: form new WFST feeding output of first WFSTs into second WFSTs. union: form new WFST accepting the language both WFSTs intersect: form new WFST accepting only the language common to both WFSTs concat: form new WFST accepting the language from the concatenation of all strings in the first WFST to all strings in the second. The newly formed WFSTs can be optionally determinized and minimzed. The option asis allows a single WFSTs to be loaded and determinized and/or minimized OPTIONS -type string " {kk}" Input rule type: kk, lts, rg, compose, regex union, intersect, concat, asis -determinize Determinize WFST before saving it -detmin Determinize and minimize WFST before saving it -o ofile Output file for saved WFST (default stdout) -heap int " {210000}" Set size of Lisp heap, needed for large rulesets -q Quiet mode, no summary generated festdoc-1.4.2/speech_tools/doc/manuals_gen/wfst_build_trace0100644001741100001440000000542507327543072022646 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=wfst_build Build a weighted finite-state transducer OP=id ARG=wfst-build-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 66. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_build -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_build -sgml_options' combine {parent Chunk=HASH(0x8104798) title wfst_build Build a weighted finite-state transducer refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id wfst-build-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title wfst_build Build a weighted finite-state transducer refs ARRAY(0x812da90) bits ARRAY(0x812da78) id wfst-build-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title wfst_build Build a weighted finite-state transducer refs ARRAY(0x812da90) bits ARRAY(0x812da78) id wfst-build-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title wfst_build Build a weighted finite-state transducer refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id wfst-build-manual type top} combine {parent Chunk=HASH(0x8130db4) title Synopsis refs ARRAY(0x8130e08) bits ARRAY(0x8130df0) decls ARRAY(0x8130e20) type comment} // {parent Chunk=HASH(0x8130db4) title Unnamed Group 2 refs ARRAY(0x8130e8c) bits ARRAY(0x8130e74) decls ARRAY(0x8130ea4) type group} combine {parent Chunk=HASH(0x8130db4) title OPTIONS refs ARRAY(0x813115c) bits ARRAY(0x8131144) decls ARRAY(0x8131174) type comment} // {parent Chunk=HASH(0x8130db4) title Unnamed Group 3 refs ARRAY(0x81323cc) bits ARRAY(0x81323b4) decls ARRAY(0x81323e4) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130ebc) P Chunk=HASH(0x8130e38) P Chunk=HASH(0x8130f40) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_build -sgml_synopsis P Chunk=HASH(0x8130fdc) P Chunk=HASH(0x81323fc) P Chunk=HASH(0x813118c) P Chunk=HASH(0x8132480) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_build -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/wfst_run_manual_section.sgml0100644001741100001440000000462707327543072025222 0ustar awbusers <command>wfst_run</command> <emphasis>Run a weighted finite-state transducer</emphasis> Synopsis wfst_run[WFSTFILE] [input file0] ... [-o output file]-wfst ifile -transduce -recog -cumulate_into ofile -itype string -quiet -o ofile This program runs a WFST on some given data. It works in either recognize mode where both inputs and output are specified, but also in transduction mode where an input is transduced to the output. OPTIONS -wfst ifile The WFST to use -transduce Transduce input to output (default) -recog Recognize input consists of pairs -cumulate_into ofile Cumulate transitions to give new weights save new WFST into ofile -itype string char or token -quiet No extraneous messages -o ofile Output file for transduced forms festdoc-1.4.2/speech_tools/doc/manuals_gen/wfst_run_trace0100644001741100001440000000535707327543072022357 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=wfst_run Run a weighted finite-state transducer OP=id ARG=wfst-run-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 52. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_run -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_run -sgml_options' combine {parent Chunk=HASH(0x8104798) title wfst_run Run a weighted finite-state transducer refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id wfst-run-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title wfst_run Run a weighted finite-state transducer refs ARRAY(0x812da90) bits ARRAY(0x812da78) id wfst-run-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title wfst_run Run a weighted finite-state transducer refs ARRAY(0x812da90) bits ARRAY(0x812da78) id wfst-run-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title wfst_run Run a weighted finite-state transducer refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id wfst-run-manual type top} combine {parent Chunk=HASH(0x8130dac) title Synopsis refs ARRAY(0x8130e00) bits ARRAY(0x8130de8) decls ARRAY(0x8130e18) type comment} // {parent Chunk=HASH(0x8130dac) title Unnamed Group 2 refs ARRAY(0x8130e84) bits ARRAY(0x8130e6c) decls ARRAY(0x8130e9c) type group} combine {parent Chunk=HASH(0x8130dac) title OPTIONS refs ARRAY(0x813104c) bits ARRAY(0x8131034) decls ARRAY(0x8131064) type comment} // {parent Chunk=HASH(0x8130dac) title Unnamed Group 3 refs ARRAY(0x81310d0) bits ARRAY(0x81310b8) decls ARRAY(0x81310e8) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130eb4) P Chunk=HASH(0x8130e30) P Chunk=HASH(0x8130f38) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_run -sgml_synopsis P Chunk=HASH(0x8130fd4) P Chunk=HASH(0x8131100) P Chunk=HASH(0x813107c) P Chunk=HASH(0x8131184) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/wfst_run -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_make_manual_section.sgml0100644001741100001440000000465207327543072025270 0ustar awbusers <command>scfg_make</command> <emphasis>Make the rules for a stochastic context free grammar</emphasis> Synopsis scfg_make[options]-nonterms string -terms string -domain string " {nlogp}" -values string " {equal}" -o ofile Builds a stochastic context free grammar from a vocabulary of non-terminal and testminal symbols. An exhaustive set of all possible binary rules are generated with random (or equal) probabilities (or negative log probabilities). This program is designed for making grammars that can be trained using scfg_train. OPTIONS -nonterms string Number of nonterminals or file containing them -terms string Number of terminals or file containing them -domain string " {nlogp}" Values to be nlogp (negative log probabilities) or prob (probabilities) -values string " {equal}" General initial scores on rules as equal or random -o ofile File to save grammar (default stdout) festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_make_trace0100644001741100001440000000550307327543072022420 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=scfg_make Make the rules for a stochastic context free grammar OP=id ARG=scfg-make-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 67. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_make -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_make -sgml_options' combine {parent Chunk=HASH(0x8104798) title scfg_make Make the rules for a stochastic context free grammar refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id scfg-make-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title scfg_make Make the rules for a stochastic context free grammar refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-make-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title scfg_make Make the rules for a stochastic context free grammar refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-make-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title scfg_make Make the rules for a stochastic context free grammar refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id scfg-make-manual type top} combine {parent Chunk=HASH(0x8130e44) title Synopsis refs ARRAY(0x8130e98) bits ARRAY(0x8130e80) decls ARRAY(0x8130eb0) type comment} // {parent Chunk=HASH(0x8130e44) title Unnamed Group 2 refs ARRAY(0x8130f1c) bits ARRAY(0x8130f04) decls ARRAY(0x8130f34) type group} combine {parent Chunk=HASH(0x8130e44) title OPTIONS refs ARRAY(0x81310fc) bits ARRAY(0x81310e4) decls ARRAY(0x8131114) type comment} // {parent Chunk=HASH(0x8130e44) title Unnamed Group 3 refs ARRAY(0x8131180) bits ARRAY(0x8131168) decls ARRAY(0x8131198) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130f4c) P Chunk=HASH(0x8130ec8) P Chunk=HASH(0x8130fd0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_make -sgml_synopsis P Chunk=HASH(0x813106c) P Chunk=HASH(0x81311b0) P Chunk=HASH(0x813112c) P Chunk=HASH(0x8131fc0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_make -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_train_manual_section.sgml0100644001741100001440000000623107327543072025463 0ustar awbusers <command>scfg_train</command> <emphasis>Train the parameters of a stochastic context free grammar</emphasis> Synopsis scfg_train[options-grammar ifile -corpus ifile -method string " {inout}" -passes int " {50}" -startpass int " {0}" -spread int -checkpoint int -heap int " {210000}" -o ofile scfg_train takes a stochastic context free grammar (SCFG) and trains the probabilities with repsect to a given bracket corpus using the inside-outside algorithm. This is basically an implementation of Pereira and Schabes 1992. Note using this program properly may require months of CPU time. OPTIONS -grammar ifile Grammar file, one rule per line. -corpus ifile Corpus file, one bracketed sentence per line. -method string " {inout}" Method for training: inout. -passes int " {50}" Number of training passes. -startpass int " {0}" Starting at pass N. -spread int Spread training data over N passes. -checkpoint int Save grammar every N passes -heap int " {210000}" Set size of Lisp heap, needed for large corpora -o ofile Output file for trained grammar. festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_train_trace0100644001741100001440000000554507327543072022626 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=scfg_train Train the parameters of a stochastic context free grammar OP=id ARG=scfg-make-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 59. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_train -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_train -sgml_options' combine {parent Chunk=HASH(0x8104798) title scfg_train Train the parameters of a stochastic context free grammar refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id scfg-make-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title scfg_train Train the parameters of a stochastic context free grammar refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-make-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title scfg_train Train the parameters of a stochastic context free grammar refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-make-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title scfg_train Train the parameters of a stochastic context free grammar refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id scfg-make-manual type top} combine {parent Chunk=HASH(0x8130e84) title Synopsis refs ARRAY(0x8130ed8) bits ARRAY(0x8130ec0) decls ARRAY(0x8130ef0) type comment} // {parent Chunk=HASH(0x8130e84) title Unnamed Group 2 refs ARRAY(0x8130f5c) bits ARRAY(0x8130f44) decls ARRAY(0x8130f74) type group} combine {parent Chunk=HASH(0x8130e84) title OPTIONS refs ARRAY(0x813113c) bits ARRAY(0x8131124) decls ARRAY(0x8131154) type comment} // {parent Chunk=HASH(0x8130e84) title Unnamed Group 3 refs ARRAY(0x81311c0) bits ARRAY(0x81311a8) decls ARRAY(0x81311d8) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130f8c) P Chunk=HASH(0x8130f08) P Chunk=HASH(0x8131010) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_train -sgml_synopsis P Chunk=HASH(0x81310ac) P Chunk=HASH(0x81311f0) P Chunk=HASH(0x813116c) P Chunk=HASH(0x8132038) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_train -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_parse_trace0100644001741100001440000000560307327543072022616 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=scfg_parse Parse text using a pre-trained stochastic context free grammar OP=id ARG=scfg-parse-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 57. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_parse -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_parse -sgml_options' combine {parent Chunk=HASH(0x8104798) title scfg_parse Parse text using a pre-trained stochastic context free grammar refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id scfg-parse-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title scfg_parse Parse text using a pre-trained stochastic context free grammar refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-parse-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title scfg_parse Parse text using a pre-trained stochastic context free grammar refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-parse-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title scfg_parse Parse text using a pre-trained stochastic context free grammar refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id scfg-parse-manual type top} combine {parent Chunk=HASH(0x8130eb4) title Synopsis refs ARRAY(0x8130f08) bits ARRAY(0x8130ef0) decls ARRAY(0x8130f20) type comment} // {parent Chunk=HASH(0x8130eb4) title Unnamed Group 2 refs ARRAY(0x8130f8c) bits ARRAY(0x8130f74) decls ARRAY(0x8130fa4) type group} combine {parent Chunk=HASH(0x8130eb4) title OPTIONS refs ARRAY(0x8131184) bits ARRAY(0x813116c) decls ARRAY(0x813119c) type comment} // {parent Chunk=HASH(0x8130eb4) title Unnamed Group 3 refs ARRAY(0x8131208) bits ARRAY(0x81311f0) decls ARRAY(0x8131220) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130fbc) P Chunk=HASH(0x8130f38) P Chunk=HASH(0x8131040) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_parse -sgml_synopsis P Chunk=HASH(0x81310dc) P Chunk=HASH(0x8131238) P Chunk=HASH(0x81311b4) P Chunk=HASH(0x81320c0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_parse -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_parse_manual_section.sgml0100644001741100001440000000422207327543072025456 0ustar awbusers <command>scfg_parse</command> <emphasis>Parse text using a pre-trained stochastic context free grammar</emphasis> Synopsis scfg_parse[options]-grammar ifile -corpus ifile -brackets -o ofile This parses given text with a given stochastic context free grammar. Note this program is not designed as an arbitrary parser for unrestricted English. It simply parses the input non-terminals with the given grammar. If you want to English (or other language) parses consider using the festival script scfg_parse which does proper tokenization and part of speech tagging, before passing it to a SCFG. OPTIONS -grammar ifile Grammar file, one rule per line. -corpus ifile Corpus file, one bracketed sentence per line. -brackets Output bracketing only. -o ofile Output file for parsed sentences. festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_test_manual_section.sgml0100644001741100001440000000420107327543072025320 0ustar awbusers <command>scfg_test</command> <emphasis>Test the output of a parser</emphasis> Synopsis scfg_test[options]-grammar ifile -corpus ifile -crossbrackets -heap int " {210000}" -o ofile This program applies a stochastic context free grammar to a given corpus and reports the parsing accuracy and cross bracketing accuracy of the grammar with respect to the grammar. OPTIONS -grammar ifile Grammar file, one rule per line. -corpus ifile Single Corpus file, one bracketed sentence per line. -crossbrackets Measure cross bracket performance. -heap int " {210000}" Set size of Lisp heap, needed for large corpora -o ofile Output file for parsed sentences. festdoc-1.4.2/speech_tools/doc/manuals_gen/scfg_test_trace0100644001741100001440000000530607327543072022463 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=scfg_test Test the output of a parser OP=id ARG=scfg-make-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 57. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_test -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_test -sgml_options' combine {parent Chunk=HASH(0x8104798) title scfg_test Test the output of a parser refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id scfg-make-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title scfg_test Test the output of a parser refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-make-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title scfg_test Test the output of a parser refs ARRAY(0x812da90) bits ARRAY(0x812da78) id scfg-make-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title scfg_test Test the output of a parser refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id scfg-make-manual type top} combine {parent Chunk=HASH(0x8130d5c) title Synopsis refs ARRAY(0x8130db0) bits ARRAY(0x8130d98) decls ARRAY(0x8130dc8) type comment} // {parent Chunk=HASH(0x8130d5c) title Unnamed Group 2 refs ARRAY(0x8130e34) bits ARRAY(0x8130e1c) decls ARRAY(0x8130e4c) type group} combine {parent Chunk=HASH(0x8130d5c) title OPTIONS refs ARRAY(0x8130ffc) bits ARRAY(0x8130fe4) decls ARRAY(0x8131014) type comment} // {parent Chunk=HASH(0x8130d5c) title Unnamed Group 3 refs ARRAY(0x8131080) bits ARRAY(0x8131068) decls ARRAY(0x8131098) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e64) P Chunk=HASH(0x8130de0) P Chunk=HASH(0x8130ee8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_test -sgml_synopsis P Chunk=HASH(0x8130f84) P Chunk=HASH(0x81310b0) P Chunk=HASH(0x813102c) P Chunk=HASH(0x8131134) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/scfg_test -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/siod_manual_section.sgml0100644001741100001440000000417607327543073024311 0ustar awbusers <command>siod</command> <emphasis>Scheme Interpreter</emphasis> Synopsis siod[options] [input files]-b --batch -i --interactive --pipe -heap int " {512000}" siod is a command line interface to the Scheme In One Defun Scheme interpreter, as modified by CSTR for use in &theEST;. It is essentially &festival; without the speech synthesis code. OPTIONS -b Run in batch mode (no interaction) --batch Run in batch mode (no interaction) -i Run in interactive mode (default) --interactive Run in interactive mode (default) --pipe Run in pipe mode, reading commands from stdin, but no prompt or return values are printed (default if stdin not a tty) -heap int " {512000}" Initial size of heap festdoc-1.4.2/speech_tools/doc/manuals_gen/siod_trace0100644001741100001440000000512307327543073021436 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=siod Scheme Interpreter OP=id ARG=siod-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 53. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/siod -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/siod -sgml_options' combine {parent Chunk=HASH(0x8104788) title siod Scheme Interpreter refs ARRAY(0x810907c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812d9fc) id siod-manual type comment} // {parent Chunk=HASH(0x8104788) title Unnamed Group 1 refs ARRAY(0x812da80) bits ARRAY(0x812da68) decls ARRAY(0x812da98) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a08) type top} // {parent Chunk=HASH(0x8104788) title siod Scheme Interpreter refs ARRAY(0x812da80) bits ARRAY(0x812da68) id siod-manual decls ARRAY(0x812da98) type group1 toc 1} parent Chunk=HASH(0x8104788) title siod Scheme Interpreter refs ARRAY(0x812da80) bits ARRAY(0x812da68) id siod-manual decls ARRAY(0x812da98) type group1 toc 1 gives {parent Chunk=HASH(0x8104788) title siod Scheme Interpreter refs ARRAY(0x812da80) toc 1 bits ARRAY(0x812da68) decls ARRAY(0x812da98) id siod-manual type top} combine {parent Chunk=HASH(0x8130c9c) title Synopsis refs ARRAY(0x8130cf0) bits ARRAY(0x8130cd8) decls ARRAY(0x8130d08) type comment} // {parent Chunk=HASH(0x8130c9c) title Unnamed Group 2 refs ARRAY(0x8130d74) bits ARRAY(0x8130d5c) decls ARRAY(0x8130d8c) type group} combine {parent Chunk=HASH(0x8130c9c) title OPTIONS refs ARRAY(0x8130f48) bits ARRAY(0x8130f30) decls ARRAY(0x8130f60) type comment} // {parent Chunk=HASH(0x8130c9c) title Unnamed Group 3 refs ARRAY(0x8130fcc) bits ARRAY(0x8130fb4) decls ARRAY(0x8130fe4) type group} P Chunk=HASH(0x8104788) P Chunk=HASH(0x812da14) P Chunk=HASH(0x8130da4) P Chunk=HASH(0x8130d20) P Chunk=HASH(0x8130e28) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/siod -sgml_synopsis P Chunk=HASH(0x8130ec4) P Chunk=HASH(0x8130ffc) P Chunk=HASH(0x8130f78) P Chunk=HASH(0x8131e2c) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/siod -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/ols_manual_section.sgml0100644001741100001440000000502407327543073024141 0ustar awbusers <command>ols</command> <emphasis>Train linear regression model</emphasis> Synopsis ols[options]-desc ifile -data ifile -test ifile -robust -stepwise -swlimit float " {0.0}" -quiet -output ofile -otype string OPTIONS -desc ifile Field description file -data ifile Datafile, one vector per line -test ifile Datafile, for testing -robust Robust, may take longer -stepwise Order the features by contribution, implies robust. -swlimit float " {0.0}" Percentage necessary improvement for stepwise -quiet No summary -output ofile Output file for coefficients -otype string Output types: festival or raw festdoc-1.4.2/speech_tools/doc/manuals_gen/ols_trace0100644001741100001440000000517407327543073021303 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ols Train linear regression model OP=id ARG=ols-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 53. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols -sgml_options' combine {parent Chunk=HASH(0x8104780) title ols Train linear regression model refs ARRAY(0x8109074) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812d9f4) id ols-manual type comment} // {parent Chunk=HASH(0x8104780) title Unnamed Group 1 refs ARRAY(0x812da78) bits ARRAY(0x812da60) decls ARRAY(0x812da90) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a00) type top} // {parent Chunk=HASH(0x8104780) title ols Train linear regression model refs ARRAY(0x812da78) bits ARRAY(0x812da60) id ols-manual decls ARRAY(0x812da90) type group1 toc 1} parent Chunk=HASH(0x8104780) title ols Train linear regression model refs ARRAY(0x812da78) bits ARRAY(0x812da60) id ols-manual decls ARRAY(0x812da90) type group1 toc 1 gives {parent Chunk=HASH(0x8104780) title ols Train linear regression model refs ARRAY(0x812da78) toc 1 bits ARRAY(0x812da60) decls ARRAY(0x812da90) id ols-manual type top} combine {parent Chunk=HASH(0x8130cd4) title Synopsis refs ARRAY(0x8130d28) bits ARRAY(0x8130d10) decls ARRAY(0x8130d40) type comment} // {parent Chunk=HASH(0x8130cd4) title Unnamed Group 2 refs ARRAY(0x8130dac) bits ARRAY(0x8130d94) decls ARRAY(0x8130dc4) type group} combine {parent Chunk=HASH(0x8130cd4) title OPTIONS refs ARRAY(0x8130f50) bits ARRAY(0x8130f38) decls ARRAY(0x8130f68) type comment} // {parent Chunk=HASH(0x8130cd4) title Unnamed Group 3 refs ARRAY(0x8130fd4) bits ARRAY(0x8130fbc) decls ARRAY(0x8130fec) type group} P Chunk=HASH(0x8104780) P Chunk=HASH(0x812da0c) P Chunk=HASH(0x8130ddc) P Chunk=HASH(0x8130d58) P Chunk=HASH(0x8130e60) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols -sgml_synopsis P Chunk=HASH(0x8130efc) P Chunk=HASH(0x8131004) P Chunk=HASH(0x8130f80) P Chunk=HASH(0x8131088) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/ols_test_manual_section.sgml0100644001741100001440000000355307327543073025205 0ustar awbusers <command>ols_test</command> <emphasis>Test linear regression model</emphasis> Synopsis ols_test[options]-desc ifile -data ifile -coeffs ifile -predict -o ofile OPTIONS -desc ifile Field description file -data ifile Datafile, one vector per line -coeffs ifile File containing OLS coefficients -predict Predict for each vector returning value -o ofile File to save output in festdoc-1.4.2/speech_tools/doc/manuals_gen/ols_test_trace0100644001741100001440000000527507327543073022344 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=ols_test Test linear regression model OP=id ARG=ols-test-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 54. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols_test -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols_test -sgml_options' combine {parent Chunk=HASH(0x8104798) title ols_test Test linear regression model refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id ols-test-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title ols_test Test linear regression model refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ols-test-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title ols_test Test linear regression model refs ARRAY(0x812da90) bits ARRAY(0x812da78) id ols-test-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title ols_test Test linear regression model refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id ols-test-manual type top} combine {parent Chunk=HASH(0x8130d5c) title Synopsis refs ARRAY(0x8130db0) bits ARRAY(0x8130d98) decls ARRAY(0x8130dc8) type comment} // {parent Chunk=HASH(0x8130d5c) title Unnamed Group 2 refs ARRAY(0x8130e34) bits ARRAY(0x8130e1c) decls ARRAY(0x8130e4c) type group} combine {parent Chunk=HASH(0x8130d5c) title OPTIONS refs ARRAY(0x8130fd8) bits ARRAY(0x8130fc0) decls ARRAY(0x8130ff0) type comment} // {parent Chunk=HASH(0x8130d5c) title Unnamed Group 3 refs ARRAY(0x813105c) bits ARRAY(0x8131044) decls ARRAY(0x8131074) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e64) P Chunk=HASH(0x8130de0) P Chunk=HASH(0x8130ee8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols_test -sgml_synopsis P Chunk=HASH(0x8130f84) P Chunk=HASH(0x813108c) P Chunk=HASH(0x8131008) P Chunk=HASH(0x8131110) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/ols_test -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/fringe_client_manual_section.sgml0100644001741100001440000000447507327543073026165 0ustar awbusers <command>fringe_client</command> <emphasis>Send commands to a running fringe server</emphasis> Synopsis fringe_client[options] [command]-h -n string -f ifile -l -v fringe_client is a simple program for sending commands to a fringe process which is running in server mode. OPTIONS -h Options help -n string Name of fringe to connect to (default 'fringe'). -f ifile File containing fringe connection information. -l List available fringe servers. -v Print what is being done. Finding Fringe. Each fringe which runs in server mode registers it's location in a file called .estServices in the users home directory. Multiple servers can be present if they are given different names, and the can be used to select which fringe a command is sent to. festdoc-1.4.2/speech_tools/doc/manuals_gen/fringe_client_trace0100644001741100001440000000556307327543073023320 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=fringe_client Send commands to a running fringe server OP=id ARG=fringe-client-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 49. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/fringe_client -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/fringe_client -sgml_options' OP=name ARG=Finding Fringe. combine {parent Chunk=HASH(0x81047a0) title fringe_client Send commands to a running fringe server refs ARRAY(0x8109094) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da14) id fringe-client-manual type comment} // {parent Chunk=HASH(0x81047a0) title Unnamed Group 1 refs ARRAY(0x812da98) bits ARRAY(0x812da80) decls ARRAY(0x812dab0) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a20) type top} // {parent Chunk=HASH(0x81047a0) title fringe_client Send commands to a running fringe server refs ARRAY(0x812da98) bits ARRAY(0x812da80) id fringe-client-manual decls ARRAY(0x812dab0) type group1 toc 1} parent Chunk=HASH(0x81047a0) title fringe_client Send commands to a running fringe server refs ARRAY(0x812da98) bits ARRAY(0x812da80) id fringe-client-manual decls ARRAY(0x812dab0) type group1 toc 1 gives {parent Chunk=HASH(0x81047a0) title fringe_client Send commands to a running fringe server refs ARRAY(0x812da98) toc 1 bits ARRAY(0x812da80) decls ARRAY(0x812dab0) id fringe-client-manual type top} combine {parent Chunk=HASH(0x8130e54) title Synopsis refs ARRAY(0x8130ea8) bits ARRAY(0x8130e90) decls ARRAY(0x8130ec0) type comment} // {parent Chunk=HASH(0x8130e54) title Unnamed Group 2 refs ARRAY(0x8130f2c) bits ARRAY(0x8130f14) decls ARRAY(0x8130f44) type group} combine {parent Chunk=HASH(0x8130e54) title OPTIONS refs ARRAY(0x81310f4) bits ARRAY(0x81310dc) decls ARRAY(0x813110c) type comment} // {parent Chunk=HASH(0x8130e54) title Unnamed Group 3 refs ARRAY(0x8131178) bits ARRAY(0x8131160) decls ARRAY(0x8131190) type group} P Chunk=HASH(0x81047a0) P Chunk=HASH(0x812da2c) P Chunk=HASH(0x8130f5c) P Chunk=HASH(0x8130ed8) P Chunk=HASH(0x8130fe0) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/fringe_client -sgml_synopsis P Chunk=HASH(0x813107c) P Chunk=HASH(0x81311a8) P Chunk=HASH(0x8131124) P Chunk=HASH(0x813122c) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/fringe_client -sgml_options P Chunk=HASH(0x8131f54) festdoc-1.4.2/speech_tools/doc/manuals_gen/bcat_manual_section.sgml0100644001741100001440000000250107327543073024252 0ustar awbusers <command>bcat</command> <emphasis>Binary safe version of cat</emphasis> Synopsis bcat-o [ofile] [files...]-o ofile bcat is a trivial file concatenation program. It exists to allow testing of various file splitting operations under the cygwin environment on Windows where the distinction between binary and text data is important. OPTIONS -o ofile Ouptut file of binary data festdoc-1.4.2/speech_tools/doc/manuals_gen/bcat_trace0100644001741100001440000000517307327543073021416 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=bcat Binary safe version of cat OP=id ARG=bcat-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 53. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/bcat -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/bcat -sgml_options' combine {parent Chunk=HASH(0x8104788) title bcat Binary safe version of cat refs ARRAY(0x810907c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812d9fc) id bcat-manual type comment} // {parent Chunk=HASH(0x8104788) title Unnamed Group 1 refs ARRAY(0x812da80) bits ARRAY(0x812da68) decls ARRAY(0x812da98) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a08) type top} // {parent Chunk=HASH(0x8104788) title bcat Binary safe version of cat refs ARRAY(0x812da80) bits ARRAY(0x812da68) id bcat-manual decls ARRAY(0x812da98) type group1 toc 1} parent Chunk=HASH(0x8104788) title bcat Binary safe version of cat refs ARRAY(0x812da80) bits ARRAY(0x812da68) id bcat-manual decls ARRAY(0x812da98) type group1 toc 1 gives {parent Chunk=HASH(0x8104788) title bcat Binary safe version of cat refs ARRAY(0x812da80) toc 1 bits ARRAY(0x812da68) decls ARRAY(0x812da98) id bcat-manual type top} combine {parent Chunk=HASH(0x8130cd4) title Synopsis refs ARRAY(0x8130d28) bits ARRAY(0x8130d10) decls ARRAY(0x8130d40) type comment} // {parent Chunk=HASH(0x8130cd4) title Unnamed Group 2 refs ARRAY(0x8130dac) bits ARRAY(0x8130d94) decls ARRAY(0x8130dc4) type group} combine {parent Chunk=HASH(0x8130cd4) title OPTIONS refs ARRAY(0x8130f74) bits ARRAY(0x8130f5c) decls ARRAY(0x8130f8c) type comment} // {parent Chunk=HASH(0x8130cd4) title Unnamed Group 3 refs ARRAY(0x8130ff8) bits ARRAY(0x8130fe0) decls ARRAY(0x8131010) type group} P Chunk=HASH(0x8104788) P Chunk=HASH(0x812da14) P Chunk=HASH(0x8130ddc) P Chunk=HASH(0x8130d58) P Chunk=HASH(0x8130e60) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/bcat -sgml_synopsis P Chunk=HASH(0x8130efc) P Chunk=HASH(0x8131028) P Chunk=HASH(0x8130fa4) P Chunk=HASH(0x81310ac) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/bcat -sgml_options festdoc-1.4.2/speech_tools/doc/manuals_gen/na_record_manual_section.sgml0100644001741100001440000000715707327543074025312 0ustar awbusers <command>na_record</command> <emphasis>Audio file recording</emphasis> Synopsis na_record[options]-h -f int -audiodevice string -time float -o ofile -otype string -F int -obo string -oswap -ostype string -p string na_record records wavefors from an audio device. It only supports recording for N seconds (default is 10). Specifiying the frequency defines the recording frequency (if supported by the hardward). This currently doesn't support NAS audio in. OPTIONS -h options help -f int Input sample rate -audiodevice string use specified audiodevice if appropriate for protocol -time float Wave length in seconds -o ofile Output filename. If not specified output is to stdout. -otype string Output file type, (optional). If no type is Specified the type of the input file is assumed. Supported types are: nist, est, esps, snd, riff, aiff, audlab, raw, ascii -F int Output sample rate in Hz. If this is different from the input sample rate, resampling will occur -obo string Output byte order: MSB, LSB, native, or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) -oswap Swap bytes when saving to output -ostype string Output sample type: short, mulaw, byte or ascii -p string audio device protocol. Ths supported types are sunaudio audio_command linux16audio festdoc-1.4.2/speech_tools/doc/manuals_gen/na_record_trace0100644001741100001440000000524307327543074022440 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=na_record Audio file recording OP=id ARG=na-record-manual Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 47. OP=toc ARG= OP=name ARG=Synopsis DO 'synopsis' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_record -sgml_synopsis' OP=name ARG=OPTIONS DO 'options' '/amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_record -sgml_options' combine {parent Chunk=HASH(0x8104798) title na_record Audio file recording refs ARRAY(0x810908c) toc 1 bits ARRAY(0x8101ba4) decls ARRAY(0x812da0c) id na-record-manual type comment} // {parent Chunk=HASH(0x8104798) title Unnamed Group 1 refs ARRAY(0x812da90) bits ARRAY(0x812da78) decls ARRAY(0x812daa8) type group} collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101be0) decls ARRAY(0x8113a18) type top} // {parent Chunk=HASH(0x8104798) title na_record Audio file recording refs ARRAY(0x812da90) bits ARRAY(0x812da78) id na-record-manual decls ARRAY(0x812daa8) type group1 toc 1} parent Chunk=HASH(0x8104798) title na_record Audio file recording refs ARRAY(0x812da90) bits ARRAY(0x812da78) id na-record-manual decls ARRAY(0x812daa8) type group1 toc 1 gives {parent Chunk=HASH(0x8104798) title na_record Audio file recording refs ARRAY(0x812da90) toc 1 bits ARRAY(0x812da78) decls ARRAY(0x812daa8) id na-record-manual type top} combine {parent Chunk=HASH(0x8130d1c) title Synopsis refs ARRAY(0x8130d70) bits ARRAY(0x8130d58) decls ARRAY(0x8130d88) type comment} // {parent Chunk=HASH(0x8130d1c) title Unnamed Group 2 refs ARRAY(0x8130df4) bits ARRAY(0x8130ddc) decls ARRAY(0x8130e0c) type group} combine {parent Chunk=HASH(0x8130d1c) title OPTIONS refs ARRAY(0x8130fc8) bits ARRAY(0x8130fb0) decls ARRAY(0x8130fe0) type comment} // {parent Chunk=HASH(0x8130d1c) title Unnamed Group 3 refs ARRAY(0x813104c) bits ARRAY(0x8131034) decls ARRAY(0x8131064) type group} P Chunk=HASH(0x8104798) P Chunk=HASH(0x812da24) P Chunk=HASH(0x8130e24) P Chunk=HASH(0x8130da0) P Chunk=HASH(0x8130ea8) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_record -sgml_synopsis P Chunk=HASH(0x8130f44) P Chunk=HASH(0x813107c) P Chunk=HASH(0x8130ff8) P Chunk=HASH(0x8131e94) COMMAND /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/na_record -sgml_options festdoc-1.4.2/speech_tools/doc/.manuals_made0100644001741100001440000000003507327543074017533 0ustar awbusersWed Jul 25 14:15:22 BST 2001 festdoc-1.4.2/speech_tools/doc/g000004.gif0100644001741100001440000000557507327542224016477 0ustar awbusersGIF89a5}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,5H*\ȰÇ#JHŋ3jȱǂZ LI} CP$ C@0Th@͙yNܢr,a 4AA2 LsR>1HGA5nƠ4C X>'<m Ƞ>PpTj Dބ*1["Jŷ v0d(_ D h P H@t-"a `''E|:A2Q @er8gsŴ^ MV!Da#O /P4$%*2a9W;<@VH$ Jvp\gd Œ$@3UR@:A-cd.C#v)! n'| IMu Ł&mL4j{4$RU`3mbagnL$ d hN0:̤3 i TG H LgҢEdF Gɰ%F6$ "dMsP`8$&> cӈ",N\ !@b./,"!$U^|" X#&6dB1A'0M#)H$COG Y SnLB yWdLN ;festdoc-1.4.2/speech_tools/doc/g000048.gif0100644001741100001440000000570207327542225016500 0ustar awbusersGIF89aB}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,BH*\ȰÇ#JHŋ3jȱǏ_&Hd>R ҞvRLYFD)SPbL; @&4 y(ff1M栂 DA A ZWBy惂L,i 

    ! #_0 T4NB!HF70)J,j\@ e1I0LB^@҉'}8%LB`AEMiDcЄAXT1CA$A@'a@) S4 UgIsVKLPEhT1@b =XA)@nA@qp`|2QHC-`H24%r @FT HY!#1 T8( U\(K!q FB2 DAmIR@f|+BNQ@c0C@E0*<@g{48@4BɢEZ'@@ĥ`$ŧ Z qBh*BpofA1Bt@JPgz`^a-b1Ag 4|A A@pxIBtv9 d!  rNC)pAq EkԈ!a@"蠰@lp 4{Cdv(1Ao%%@"\La gdxd, Cz$)/}~Gl)L@ P\ *@Ed3 A BDq8h;$ @P 1 ݬ+ d" ZP Ln @Af'Qt $@La&#/pd1Oh-5<$u ` B Y @A.0 D ! 'x` q;/ " C@v 8<3B  )y O#dGiH ZbP`Ha%X(G%+ /RT.M`ӗ S S0Ahv\Fse{0NX"8hC: BGuo![B.bg2 |."@`60@d A+A`+$Hd + ;& V0-bDA@ڻꭠ@JЂ0C('X bBHi dHh%L&M8uUhX$ :9)\oh %<@+юbJKؖ ʏ'UH ¥\0,!wAB `nfG5"Q ' ZЂ 4:`o| r  0JA$ЂHYXKi@v(;8͝g)>H$0^heTd"I.@jPa-@vO!Đ2`?@@:i)iH0xBKBJ>><<<:::888666444222000...,,,***(((&&&$$$"""  !,H*\ȰÇ#JHŋ3jȱǏ CI/Q\raH0 EC0s4#A )p3'4#Y &С3Q& D0^p b`p'1|K0]fPB42"ˮV@]Qp^rX1XA`,A"<=45 ~ d-TfGyX%SblAGqFI B%Pa$EI,hrz@ AA# LoR؀>H(ox@%TU΁BOxC& D (9 !LA:0BPPQ/_"@gOȐփ\Al BJ1%`KNdA)2 n 7a71'78@A'g XV.I$`L@@ZÔn@c0T"cy@>Ł'xBB@B\W9Ta t@@|) ;`@L)?,&D]HlXB=@h\ $ 12TP'&ht@!3$ dj PXdO!E<"q(BHB TX!٨A@Mv ri cE}1c 41 V젛=*W@$ĐQA@2 B T% P( 0D DcLA +JL$j<3 <`=by` (KCAuj AK g(" H !da_Qa)("D<7P@.-1@#Ł24( `s)Q Q Y "6xN`R7T@~}eej[;4b6N.`dlXXx! UIc 0 @+ odB D(v 3(Twh2 s1B$SNALCd*H`[`72e-cOUk+9A`Q2/0` P&ҲK'a$bIFlObpE!(C&g 0!HB%B" 7PaJ(BW`$  O '֗_`@BhkyP[@f l}XckQj(E E e*kD^>agq} :IV`Ѽ.@3ͅ+p"(Qn .$H,418U]Gi1+D w9fp16 +BP F>I]NWBZ1hr-@ R`os '"$EBA qDhf @@dBn e[ .q@ TB pLx@ b6xqqhu'Xa $ 58@^#G~*`t0q2aS?qd4Q3ppVm/OppyaW_"HZ %W:wf#v|!0qUuRBTtkpu2y @P*PaCU$E@D09 p]s E jZ >`B1pA 3? 0-5pLFZPpJ0 z+-P " 0c=Le@9Q9}n)P~ppp [)pPd$Lbi8` 3k$4p',f:o@:AZHFy|s0Q/ )8PpFD4?0Z<4 qQ9a720:a 7$"0A:AKS #{ 0@H TY43;#`@Viq(fi;@xg:-k!}1V@q>[r !Up`'!`"pky6QR)qٙ;festdoc-1.4.2/speech_tools/doc/g000018.gif0100644001741100001440000000552707327542227016504 0ustar awbusersGIF89a2}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,2H*\ȰÇ#JHŋ3jȱ/AzI>R Ҟ#RL AD)S( PbL'Tsb H&Jṙ5|C|P0A Z35P8CҴd:2z%h7c 9Ly"* 0Ĕ.3|J@7tCI) HNB80 [DAxc߬dҕ095"O4i 1"Y i…O^by"|:P S$@r@" 0e~@b(DQDqQCaQUA<G a*TD&'QSPJ4AEtourZTԽ@ P#I_r|WD#IB@6^]`N@s \ebHC,HP2t`x`],@"QN HY1T8T(;!`j2J2WlЅ@3 O0~iA,y@Q0")RW2bZR1@;!P @>!PA rZTl*hhxz(ChCgPGP*]@@f8^Bt @J LyF2 Dmil*e` 4 A`8D ]PDIDbli EhQo&CġAc rRL"tTXL6ɻf$^W`ou:Y; Q̶H~C^iA/(AVh#QgW 0 mR#n@"DB$@taJ"4Ҝ@`*|r& @!]qyAxLq%f%G(AbfSI ȰDd anL[A8"RUǮǑ)rbqBd*w^ܜBStAP@"T dbaB.0։A!>P&#D=@4|`b 1)"a؄E@H D 1@A)P?K ^ %  ^d3|SA0*@ (<"8`Bd14 8+ H$E68u! ;A GHE|ź@bSņl!e1D+P)),Pf 1qp^mIKvaȂ@ 0TH hQBB)żD(C y@XH!2yj% r#~ AJ $E+Av` SL0Azz)]MP"p2.T@V'CxB0}2Oގ!5@ VQ&@5![PD !To x"n@H+LH 4!}*P >L*68a g-y48vC $ L@6&bQ愜hրNE4:Rѩf ٌ@)!Bjp4yV\bX@rx ~@@ "9$-LT 1xAgC+>V pq$d M.$&g? PiBg /KBA(,A&bPb A.):#0  Sp@F[ӥ+_P Hp8`%.vOHU@&J"ňd 3d` ;festdoc-1.4.2/speech_tools/doc/g000036.gif0100644001741100001440000000621607327542230016472 0ustar awbusersGIF89aZ}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,ZH*\ȰÇ#JHŋ3jȱǏ #zxeKȓ(5yr>4ò&K2 bF;6kHIt $*0|@4|BP>)) 6 !2h b@7!d)aK1K,hEET! )\@ psHzl!H8 6d<9(C*s,Grx1#@H1@#'9 f"/60%&A9y > t` !$Ck& fpDmlbEAR :PQL4g5' f8%Gl !DRVP@E8‡@MJ@j" CvpGXFLAOGP>9ta!E|eb@+d0A r`CGp@R%TD(R1"PTE(@LP> ^Z@IB@9@b5ŽAm% t &AlA`B`$4 )Pux#T@o80P ^( Tf\ P1-PBiH] |% $~ %.4d J`Af`m!^0 N|m D1YIP %^dԀD R4xq&! 4aΥLx*]m&tIy r ,$;p\%I,%mP zu,Mx6ք/@6qR,`P rf%BpD`a R`J!AE(¤`d Bl;;!T`@x@`;^$_ ^0=6b>o? @b`~!M̀ *@ /3^”<c$'|@2FД9r0<|{"H J@.;C o \ P@j q51E\6 Hd +:@\2 t4*Z x\r }@l 1@ a@ ^) ( I(TBs G0A00ю$ IqPeȂ)PI rrJ6/#@!!j T>><<<:::888666444222000...,,,***(((&&&$$$"""  !,H*\ȰÇ Hŋ3jtH& CIt1ɲ˗ 5IM[4Zϟ@ ̀C7fPJ8 LIr4! ^g@,1z#"IdACEYl @R0Ey='@` bGBt 7O d dHȁJLɌSPP9cu%G(ĂU`  =HsdF(PEXuP#;Bb{pE10`_aAaHC"%P A& 5(z dCuІ dHatY1'!e*j4fAfDBlD pFF }pg(P  ɯ{П1=ó=dEdÜ W@ )!@-pd.bAA쁩djA~@W ™ɝ} `}0 1+=!@o ɑAeT!+Ap Z= |ub+AI!P=B "ǼK)2A$B `K!-;"=li;-@!L@W Q4A8`'6 }UL)+5p ҆$Q_[5Ad(nnXRm"a  Uu- 4\4F 'J@GuDSQQF( l<%{A@@i{,?O)E ) A)TBG>OA ʐ<GC0` Cp а9+I"L *`*p0@ "HU$*'eP%w(ILe! 2`\PH@^haEڐ gN `68C~ +K0,0FX%f` <5 e A8'ET5 jKS2At@#:u$DH`0!X>Χzu#7Н@$ BLD %PA!Rն& ;festdoc-1.4.2/speech_tools/doc/g000014.gif0100644001741100001440000000231107327542231016457 0ustar awbusersGIF89aHmmmYYYEEE!!!222 !,H0I8ͻ`(dihl2pmTsP' ;E 8<]7J`%1N4IO,Q4(o LTLME%l tqpZZ!(i GAJu 9 HhþAQg  AkK! $"]z%ج *@ZB$ F )A (jU 6#(vG3i`0B. k@ҰCsOH" hNdzhد-* NQ޺p@`CG)H+QBN8m۬À\F ULˢNdkDS8al[Um[KM -j[gQ3srEWL `*KRIɝ@=6OW(Y2sH}Q*t$g"vOuVƄbS0? W ZƃvЉW$ԡ5[ݍzyMauVɀm=Dҁ?#;Daf,'A\ JULB&QK&Ȱm_J#[ XRi_(nƩ(P)U!%͖I ͝ |i\q:3' 5ZAV2e$SZ[E4,~֖A dӆEIAc3fIcm*MnqzEEu|MC~b jnHS23(aFBpxQf@7얪X1#!ƒhhB%Fr$6%K@ Dt 4[/;3FL' d:XVLIoR‘npΔbvZٔ wte/€*e ؙ+`dhRz.PԣMP+PDb,Fz2B(]y[cy/G7}.C5B!koڐ ㈗}yBPO4Og(P|Ge340pboB/x/o? ;festdoc-1.4.2/speech_tools/doc/g000025.gif0100644001741100001440000000317507327542232016473 0ustar awbusersGIF89a}}}{{{yyywwwqqqooommmiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOKKKIIIGGGEEECCC???===;;;999777555333111///---)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^ZZZXXXVVVTTTRRRNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,H*\ȰÇ#J4he"D(R V )4Hi`0Ξ' pP @IB B3 dChƹ$9&4 m4m( A,J(N,@ @D Y[ "b*AU7#G14 cx`HPyDpF jm4P%y0CB:4[LÑ+TX%AN@0[24P&.! PBt ,XKx `E0\>P@PG2@a@` Da"ilI!\]{Q)@{ FV! DBL$$zA wYfQ"^[f@V$Avt!"d4"A%A+ DjY8TA)vNA@S A[.|G`Z@PAkԈc呗@ $HH  |<9KDA-TAAb@|$B@El4?4 @n$GUY QP5R@@p`*"0PzVA(6QH;} GX胎(K$ry@oK  4C!( : _AWa$UIG C  H_' P$O+LAPy@#. T8!.F]MsԈ@% =P|1UEiɴQŔ£ FDPP @3ҹDrQ@pĕC8/|B;festdoc-1.4.2/speech_tools/doc/g000023.gif0100644001741100001440000000322307327542233016464 0ustar awbusersGIF89a}){{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777333111---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000,,,***(((&&&$$$""" !,})H:Y0Ç#JHTt!âǏ Cz`I J"S\ `I͂;zTϟ"LQ$!pӃ ̘իXjʵAŠK֐׳Xɂ۷oXDڻ4iơfI4D$ BMT.x'JZ 젩  D€f XGT"û7. QX"o@r4*b|K6(<{SU$ og~5dk|pԣ;festdoc-1.4.2/speech_tools/doc/g000008.gif0100644001741100001440000000562007327542234016473 0ustar awbusersGIF89a:}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,:H*\ȰÇ#JHŋ3jȱG^&H$I>R 瑞#RLIFD)S$ Pb:'Ȝ@&A  ვg>!E+A4FDcʧ.|@KVv!DG@ mN_]D'u Z6 Hl, #"1h Z45D2`1D2S``"|` X4  1)8T =c`F6 ~!N!IR/jKEI{ > %0  L `HD 5F1 d&rX5:' T`KT08E 1l0F2!ZmR>P m& Q@(\ ` 輎Zgr'e!A@@Q+DaQ頴 ,0,ؓ@`YȂƠCGp m (r:Ԁz=@| ?@B."kX9R t\ Ӏw@@\ak@UjЎ5 @aΨ ]@O4@ .+YOBp-(PA"4 Bw10afP >~& @2@@MЀ@ 0u[!5hb9 (! Ep A9P:ѡ RG bwM6<ԇX| ))˜蚢'0ZXǁdQ  Da|T* CB @@N֡'BF !%Jdl Rta H@ |?`MB5DC& D5' (I3IUq4-<&[B$Ra&<$EIQcc"/*P"@"&<x -L(fI3f.11E#+ȄBqW 0Ę %ؠ@&VS&[LB( ` <,0&lho: u0 `2D&>G0Z=xxL>|˜p @"`.χNtB,D0AN1y"4շ \";\E&ἚXN TeilN$ ;festdoc-1.4.2/speech_tools/doc/g000011.gif0100644001741100001440000000232407327542235016464 0ustar awbusersGIF89aHmmmYYYEEE!!!222 !,H0I8ͻ`(dihl2pmTsP' ;E 8aB38()+8^d0D"~KtEP Ni1fm#\HMZ# p4 4rho?uV"  VYh 2GW F A9G# x$cZdG(!rfYPi`ΦDFfH(ڦo7;2r !5H2)7PI]d ;5AD8v(NW`8A uI&crˀu9%9A||;#tDU%{Y~Tf39 (sd$#AVh&W7A[i D X@!N`7#PngH0{pOC*V^!xkRwܾdzF9Qb9 [@*L D.6HXrTBOr#m\rPƣM0!? =Al=6Z[e!q~* O^¡P"*7f4r::p4Z!,1&%{lAam5%.z9JX7XMYTn"btQV刋 L̊-MHp#lG*L :a3 C M85H.* ΅N8FuMl&/sV9V2B7܈J{=U% !dBfB@)|]u@G?&$@-͛5BoȘ_ꗢ|o? `Pv/;festdoc-1.4.2/speech_tools/doc/g000041.gif0100644001741100001440000000231407327542236016467 0ustar awbusersGIF89aHmmmYYYEEE!!!222 !,H0I8ͻ`(dihl2pmTsP' ;E 8]?f5J:R3.%$r#[~qzxA|%u{"DqMY$ p4 4||r x  XJ|GAKG  2H 9 !#A]G<#@=dAVXHbtTIyE`u"H1L[|VSB14 |Y!gr5I)*\1DžQysC%) C$Ɂ'>mHﰑABa6ӮhU^bjH(&C t,E(1uʆBb8 =mK 7eJ[f]%'?X2pf7B/O|Q]3϶3 ѧL-  x9t1UHEai`'dT( ,A[l2uP+ &KJ(JԜ Md֣AأT1aƇIDB^҉-.Yf,?tGEv ɔ^!X9N.Y$ड़'oIsWeEɆmuXtPOfDM Av~&C!<(5^48uPz^z f3-4DD=#"K G=P$![I4KEbGAWŜ)Z!E8 ,|CgVZihKI?{DaUbi) j+iX@hIw!Ty!𑫐Iw+B+s,<kGAk늀oڜZ/s<@aG4!BL1@kkܛ(0B|PP=рċ|>/ .tU,<6}lO4XN-cd>g#P:s 3eX9yRÊP 8Npʓ0XG77Oc$@@ؓmB߼_oB;festdoc-1.4.2/speech_tools/doc/g000042.gif0100644001741100001440000000650307327542237016475 0ustar awbusersGIF89ar}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,rH*\ȰÇ#JHŋ3jȱǏ C2(S^%~ i(͖2Ţ$nڼpyCq` #H1>$. yÇ|CP->( xep` <!g ! L a v"*h JڀZ S,X`&R\ࠃ60A!p!17!b * Ч [>Dj%@"_5 @ 0^"HAgB<` $P vp'/ x7DnX) wn@d0 _D |Pk?8B,I T$B)?C%WB8K1dIibP9k C`Z 2<m K :mǒA s )a`-(‘Tb@$R\- U@ H"+BS@ 6o]gy jba AG=DvAxAجX@t ANueO L"`S(|0D&@\I<\@9t p@"D HahB8&5 +8 j0`Z YM HJ rC,ECc [A4 Ds DgvDZп.@))$x@&@ V(H +a:JA 9t"@(LZQ@`jh!W Q`>><<<:::888666444222000...,,,***(((&&&$$$"""  !,*#H*\ȰÇ#JHŋ3:ĢƏ CIId$rG ^aF l48)zQdI8( FH(,#5jԈӁ@Qe3Б!.,v)rE Uti 1G`KBBVlAD-6p ,1E*',ybjU($iN6t WX @t"`p)  |=L@`ˁ4,A9D*L@+=| !0J ()hEQ? \APoLmu 1Pp0$A#E(@!5)}W;RI$@hA]U@7z5A00P wH"lXA Lx"29 L\" pd 0@ 0N=" ?Lqu7ݔ*Ն N{ރ2 B2`b| }@N$2rcc8YA\&:$`m (zA XB^g;@vCư- !a4[6>@k.A D#qiyH&@> "Z(z, pV~R A" $ @lb! @c5HD"WBU‡OğH Pd0nEp& @%pc dPB`Ja 1\q P*[>.C)*!4,hJ*@jp"IxFVD#[^XXn=4X佀v &00츋)0)P6H~ ^_ 6*=9-R0dHZ0lkৈ80yJPJ@"u( P&a /!>j+` o#4[ _'p{~p{2c<  %c[PW d<P0ox"p-zٷDXk@RFL'%ՄR8"MPxTZHX`[`b({;festdoc-1.4.2/speech_tools/doc/g000051.gif0100644001741100001440000000573407327542241016475 0ustar awbusersGIF89aE}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,EH*\ȰÇ#JHŋ3jȱǏLRɓ #!8 (B@aH@M@(-BDC5a7Ʊx><q *',%- C chpJ)`{1^=}RX6xHKڢx ˁ<UP0k nTqNæS `(T 2 )5L!-\C(; Bm 3MAd KV406T #`TF'`-afZx604dA64 @ِEeM5ـ$'Ր ^IC衣$rC`V?PP(Wb& WipykDв @(1|ibIPl2`'zo<8"W 3TFq"졩ohR&Q b% NJ-ۓacW.@(z(;4n;2|V@ ; ԁ6MX)`bi8D4PtH h39` AψU2 ,IOSxk]@i &c#X/s#"1$e% b+$3hJUE5Bj_4<"b 15 hIbliM<!4Ķ2l! 59V $P/AA@& HD&Ht'LAMG<H&0=2(MDIEH\(uK ,e.8`it* a\GP̼3$ h DD?i}` )oE"3QM~OWz;festdoc-1.4.2/speech_tools/doc/g000029.gif0100644001741100001440000000353707327542242016502 0ustar awbusersGIF89a)}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIEEECCC???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***&&&$$$"""  !,)H*\p#JHE[XfĈ C 3˗0'^,c=m0h s\@ԠK f}eӯ`!#$@B]` #.B3k֠Kx&+6xxcǍK&`"!3k|sg ӨQ9ϰH`M R$" thcJyW^L5b) = Z(V ޥ/&*i D  .CyȠ}4`YHDT%PC).Pp#]1D rC}pPcZCR)H@ ɑA&mC hA|@KW WH_'d ßP@ADȠz!@BW<}8A 0D\D,tF N-` 4@a -9)čmG@0@aI!$RuGNÑ)ƺ@%fTI /!! a!@!:  qk= W"\G2'0 ݾ!D|}H$qt1 ~ $VQp P2UlRD]A^d<<"Ge@ "(Px %@H(5':;@xA@iћvPoЃ.R G,u#9D !At"%"D|&B{3HE|eB$aBr 3TZ]HF! T_"Tщ0IA ,q!~ 0A%6(>PA@Jw%_-u5$MjM%{ o3 ek~$!8F@F~ RJG  ? l& D~@XFJ5#W 1`{$!1% y`tP;!DGHT^@r8$SX Q`RȋL`s$>5c!w) ND=&PI̅8H;ZD#;aDM#FYyZ3aAȶK䏲"7pIʇ7NTchI~‰`'Zaw@FʼnM) 5ed%A$ 8L܏јA` !ѹ"Lcie5x޼0+Jق %ZI8 T¡f z!/ Ji!Ahx˾jH]KF7qZ-d'n=fxI{X%.u!V!cfq8AagDt &! BR=d   3B]P(]ZD񀋒5DEI8l1ge6@Ján9"GH9Z'3d#abjA(LN%kfd]"T4r\h_a80Q1CX4Eh<4CS`IFI X)Vƛvnٰܲ:: *&1d {DS= tuv C\TJ"!%z$LuafI pwu[k{+&9/<x$aTpwB$A1 zLOА}DfӳϤ n:uMnD,vA cfe=C*vWKb B!GHzwB,9HBĮl o|=dr`-GHJog=;festdoc-1.4.2/speech_tools/doc/g000024.gif0100644001741100001440000000355607327542243016477 0ustar awbusersGIF89a(}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeeaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCC???===;;;777333///---+++)))%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666222000...,,,***(((&&&$$$"""  !,(H*\ȰÇ#JH"*jȱG[<8Ћ(S\0AI.Ph͛8=vQ(j G`͜H*UhF$$<՜&T B)*}(pُa>r۷pʝKݻxWB߿+TR$cIJdQRd`C3P`HQ|IrM!2m4AVQI)$C*$7j"UZa"TEPSੴ Y:C H A0C@PA~`ѓ(4 C切B:q QJ0 AKaPiu(A$8 S @ ! :l".'1S]~BV0gCCDZb %1@BpHoT:JhfBaYANSPpA`AtPl)p@qh"HDgB(@ PPbrA/'<~ʱX!;*9jq Pl!P#p&  Ddfn Kкb@"=4+GV a C, Hf0 s 7pjEo8QBwpKT0Q'H "aE7E `@ItD&8@tL"9P!%'=BdCV {A DW|iJwB| _#ʆ*Xr8L" x;R%L^_tj L0 gD|!!. CO$`!=aL3(\2($Ph"xd0"1 C/,*;festdoc-1.4.2/speech_tools/doc/g000002.gif0100644001741100001440000000300507327542244016461 0ustar awbusersGIF89aS'}}}{{{wwwuuusssqqqooommmkkkiiigggeeeaaa___]]][[[YYYWWWUUUQQQMMMKKKIIICCCAAA???===;;;999777555333111///---)))###!!! ~~~|||xxxvvvrrrpppnnnllljjjhhhfffddd```\\\ZZZXXXTTTRRRPPPNNNHHHFFFDDDBBB@@@>>><<<:::666444222000...***(((&&&$$$"""  !,S'H`&R!`Ç#J(PE!9"Pȱ)ǣɓ!P'@7gP=#M@%")0D ,r$S2> 4*ի2bQk ŠKV3@( ʍ[ mfZu<`0-dKC<}РаC#i"f1 j ql+!PIT,bXI<8FY9#,OƱaBm. L(8@D?? x:dA PAMހEa_{n@U`&gPC`DQ}l0If6p~R =g( P%d1@ qx 7PLdQH_QRGbD & ` 0IVE pB p=H馎q5 d̔ oLiR{A DC-L" r x5b}$A ECqrjC`HKnD8@ 4oCFMt@4dK; !;ntGLIEꕈdCE(T#kCOU0@@ F(Q07(8<5tEmH'!3A]aT;s(=a,\;festdoc-1.4.2/speech_tools/doc/g000006.gif0100644001741100001440000000704507327542245016476 0ustar awbusersGIF89a}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,H*\ȰÇ#JHŋ3jȱǏ CD$SU@Ӑ˛.'C㥎upsʇ.3@*0LL\I@K2!@K^!Q2LFC@L jnЦ1$ p(ǐ@.s`>\xxf@'|0Е\腇PH*,Ω`$"pMt ` J" &@Q@gpq#&RH`$3& T胑"xBh"BF@D^AMA(I TLerY ) @$L1?|IX,% PRC'?f P0Dh"@AT \X$$@8$ (A" dc "$K4B} D_aJa HY|Ry2@{Fc€Dgr)I]& HD\@|aBZZIF 1 pIBI"G6 br3|`n=FDUAE@rXPCW<?(%U1b#!AЀN GPzM@|Pp@0A|0^a@,@$[XYx`dlwF[dAL"`Gf ÁH*f$aM!!}$ Nݘ@ @l e@:$ rB]y`7kJZ1P x@&|0!0 &@>APCAcBH֋`. 1"u܀) aD'P@x E%O>.D ` " 싟%RHP'_H=h"39p@tAh`*L0 9q Lk`@0рD|Bi/,H$p\Ǭi 0ubS Q('BQUx7-`^ ְ1@c֨ pHWʹ5d 8@L0 @Z4, @"@lX(9a[@DziZ 9 $@+@88Ha|6iJzDqX]]$!"/)""  !,`3lDRMa# : o 5@S6$(("qzOL ,j7(A .H aҴ-O@X$ @Ȩ|-@ UHzdž, 029`Ye#\Im# q*R^ Zi_d+Sj" :A '(^v2 H!6{To0. %d,-lO :_ a L"S D )hAa̠3@ç ru! g0&!AD .aRѭd<&) )ܼܔE °9,20PBJ/pT [L5*^Аt WqB*\v. ;XArB01) `1AX0z`Q/ P P$X\(BjP3ܗs#a :(A!^0`) Ɛ{} @h{A" Yu Q$,:؀a0Ev:.?%AťpI%$E^@` = Ep1l =hrZ\`B@+Ȉ}Jy xxK0yzs^@~++8qmBT ! CA4DnW$7s 01` :AD .a?!H@ 0YG2Y  50 j3ZV.RN TU0&hN DF  6 3 h)c8](PCX@E 3p^p4 gmg:g,sp8P&=q^83~pypq7(X9K 7} 4\,0wpq7AnJ:kP7AUt|2068">)`p p^P0/jN:qS\sT8!4(S wEQ;L;8>Bِz!S!,(  `{:$is)p%ْr .94Y6y;festdoc-1.4.2/speech_tools/doc/g000016.gif0100644001741100001440000000577107327542246016504 0ustar awbusersGIF89aE}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,EH*\ȰÇ#JHŋ3jȱǏL I} CP$ C@04Th@͙&YL_@0 `4A7 MA I6 6S0L6|RP f D O =[f*L,fH\pL!hʘ`*X`#'#:`V< / 2B" # xHCH<2-8@ P)tA Xj@p B'yQF R,%k A#%,R (3v #PŸ< bCgG @((Lx^ІI9# bO/! @&"Q 7 . BZ&Bt +^@v9!4@ aXl@oYMĊ$& @ιY LBd)p ($Bv 0dN 4X A'p2(bRZ88A1h'dpí1X@ xiN)p*jԡ6ۀѤ' -/n60<1:*A :6& $8@nL̡C,@\X\87+pO""T %QqR^Jf X Bd'oVxYkKyHdOZ CIC2AxԻ^#ICab@;festdoc-1.4.2/speech_tools/doc/g000012.gif0100644001741100001440000000112607327542247016467 0ustar awbusersGIF89a}}}{{{sssooommmgggeeeccc[[[KKKIIIEEE???;;;333---%%%###!!! zzzxxxvvvbbb```\\\XXXVVVRRRPPPNNNHHHBBB@@@>>><<<:::666&&&$$$""" !,7!I@G==?H' /8&D:11E&24v($"BFl0` %Q#@ * P 1lЁ;festdoc-1.4.2/speech_tools/doc/g000050.gif0100644001741100001440000000645207327542250016472 0ustar awbusersGIF89ar}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,rH*\ȰÇ#JHŋ3jȱǏ C2ȓ(/ĒA?4&`bQ6kAhgXHkбDM@b11i>hÇ|2P8t1a|COb`:h,S!Y1$ aH4"*h JĔڀ[ɛX:MA'! [p.ɂ6 ("⃨GS+>10B5L4m( 12BrJ$0Q=@%)sP@12B @b !R 4z6D IAAl"oF 9QM4@h8DI' P6 d!%GuOQ~lG6RAXj \h"| 94 !WPC" @ ANG9}(@2 IcC E YWDf81,AS(eEVGr(Ot 0]UZ@o< ^3m!bd9A& 1%$e n0b dFfq`)p\ $Wi@kQ@֡@hC W`)@"@Ю#CD!K v QX?G2 v+'"W+tYA#`*(LPV"`B % 3@(4@i BMTH&L°D<$kc v)H$6`À @@ %Hy6+@-cM~xh,@*XBIuYl[` )DBd aK'pF!E `" =$&x7 @@bL A Q Dr'skk/2\BA@t BOW #H$օ(DߊRPa  0D2L͒P4 ec.DBGQQ6 'B &3E'[48\)pK22#%I *‚dW@B<,x[ lnxpy d_ 4  C-H; =Ki6rnBą[qRtYN W&P U@L d%,2a9dk9y‚d KtB2\)*D# 2dedE33xkT@!(hꁫ  |I!D`5)uQ8`>Q08d4jMH&RRM":>><<<:::888666444222000...,,,***(((&&&$$$"""  !,]H*\ȰÇ#JHŋ3jȱǏ /~ Kȓ(5ĒA\2 & `BG6k8h'(לx ّR$AAnB@xZA|K0LEAL1r+ˇ) 843#Hk1 B9Ua*^6I=]^\'S $cʑ L2@BlX$a9(3)P$i\p/]/bd%d A=l9R'GA$a!|Ce@#@rL\ !"2@x@BP bZQ@AX4!EbUL@v0@@x"^zT@%Q 1{H$uxRs|! vU e/L2'4豉@1H2a!1E@)@d D %!AQHZ a0 N PO\1#R$ }!U8t@@a@`A<@`W](AQn܅ [A+Pd&m`|@bp'P1lP\ -VfAIT"Prv@A'y -gV!G!9P^81#1 ja=p ZP WVkaBbPlhx6!@&hGp-P#}!<€(q1|`"&o4TAw 2p !%@@#l'9AGf,1 CF(0')A@V y҂{`&̅@L6>PI2@d@8pM 5"5Vj mRBQD 8(K;88;Tr`S C%/A@}Ї*@ EpSA@34+AA7)\A,@M ={Rd  ,t* "?@D!"! A S (F?L'G@Z^A Po D ER HBf6CfzF@ Z R-*M2VDA:+ly@L h򉩘@V#:| Q|aV0#EH&ĪDd `A1AN$z\0J /PIB 00\B Lt< ̎KP4DkD9IRK%Bq 3(>2#@A_ޏs@8 t%4A/HmD!-}A4&fC@ dw )"ETfb1Xt +@v !AdM[Uh" d8Q-1,hp Aq r`<A :а@9&TāX D!+sح@,4 Vpܥ](0W+pBEf\A0 ' %R$ Bat6$:HB  3QsNjƙ ~  " yBuf 8`0GDw(hΩ >CTZ][ ! @wIdo=yWPhpr0G즠XjM^7#$AĨH2&CF`" 啡x3wAR x CLLїהAَ5_8u8 sNa$x`|,t).9Wt ԀN =J Li4ih!og;'T %X)WCbNI*y<' Px@K_nDD`QJR!,*Hdxk3Lf&%VR02P.@b8P;{e,< C I´ ߯ڨ/v\&Qu8S*uTv_; pګ'0E9I?8IM**<'Qׁg3UݛaMBA)H!gK| _BDUmApP(ZKxȀg`1gy ݹhh#IJardy(WM@Ǎƺ7@1nV;򵗡> 5$P`k@yH 31RQTPIC>><<<:::888666444222000...,,,***(((&&&$$$"""  !,BH*\ȰÇ#JHŋ3jȱǏ_&Hd>R ўmR>P@&R!%fd>r`G&v sPW  >-e+TAAA& @m C>Dx2|#PLڊ% A ATZe, G\  )Q0`FOvPrN*q%/ 0ILbF΁; (ʌ}ىBhG: HJ +P*@"HDP< LFQME t >%A`%#e1ELҥ@ku@pi @ YН M@\CA`APLu1E>$LFfHݓ4444@@ "P \@YxZC(PEB3`x@)@ : 0A.0 D t! '@g!`H@*C@`"S N#- =`㓌Ј@; 0.aEI(0Bv}A $S7pJ  ;(A"$Q4 NKp‹I-8Lf8@ma 0;ܷHrϹS6Q ep @u!`@E ")df繆 Q#2@: - @R-$:8)\)`;9<@  O}Ip^,N^|H XdžBXXp .XLmv(l!@@qWP45hj8XA3 g PhA Ep 3K5L!%30N< dUP)xE.`Q)8=P=wp8 |S)|; ))B(`k؁T @%J)2;DH01L&ujP+/  +A,L.$a&m @.$Ep)`o'hyCBDCX$ &L+ DJR )3 L1WV3$p w L,D@B@@Xqx =x!X#5W syý{Nt)*EHF]'} {B1ш.RϺF(pLh[`v%"YD<\+mN$ ;festdoc-1.4.2/speech_tools/doc/g000017.gif0100644001741100001440000000614407327542253016476 0ustar awbusersGIF89aR}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,RH*\ȰÇ#JHŋ3jȱǏ \Q K(Sj%~ ih͖eI2ōxnqA/ -pX" q`xiR_~@ TTBq fIPGX>L-`|7|3py "Ah ATYZPxtINb PDBdh"B403%@j2`D@>U@$M'KABÑHHF҄P,-609 8Ip1NTY2 G #DB31I8yLA\N "(Ht ozULPă@&$2 L@h"pBhC1P-VB=%V@b(Tա^AmT" D 1~!@ B !E@G L4DƄBh | c}%qA8<@9<6ћĀP" ? $@JplXB|@%. OA@ePAhd1%`P qy>@ŘXhp[s<"@WvV0h]w@A $@m&I mJ@6ڥQ{@\|0@-Pam,'@  S@_q`Ey`CD!4: _Xr@@FC 7`*$%B' uEbEϑ`ƾ^q)# I]/ O,|]<'x2< a͝~: y#@:?H`Gl >$SpD|@DfT b5 @p'I쏿;CX'eD&Z+aPTaE(#&]w& $h$'s$SNKL /9ap<xAZ +Yx "pxT@@ 5o '5EMp`F BnU@XҒ C&LK0<$e TB-Ak :H&vL̠@^//d0zC)ȄZTP4~D J^ 02a`Ј! D"f% d@a6 h#n" C3A*-&-ykl\g\@2`4B"`. d6nۖdA d6)-a8&!v4x`[ F-wH` &!Ɍ\" gXw 44>*J90t#oIB\7BTy_?>><<<:::888666444222000...,,,***(((&&&$$$"""  !,MH*\ȰÇ#JHŋ3jȱǏL Ɏ} CP$ C@04Th@͙&P` H8*pL;a@11  tu-|pS& |*av@AZC0O*Ω`=EP"pMXtpeӋ+sJD$jY) 0] %ar;s]Z!өB )rP ZB& xiE= DSч@6X@gpaBd@% A54H'PGngEtu@bPDcAATAC?P7$ّ@#v@(! $T$ 4@ ЗPP\TD&10!^DZ@w8 AD )q@WI5 1A@'Ad&@|@<( !AP4$! 7H4W HA_aA]OBB d @I VC!@zH"9\ D_@3F(cl[ml!@e]td$Ai @ ʣAW F$ Nlz)2djA6o&@hd6aP  ?xA(Xyc Hg`!0 &@\r5P*bBHA G$p y07$B`A'.$0)kx@@)0ig!SFuQ t l="'11|@4_f@rl"#L5!slC9K˳@La!@ %"ST ;sS@>` /AA}Ї*@ EA63 +AAжԁ [A,@M4 w0Aa @R ApbRd'ӂ҅8behf'$\)$0 N@ L@)5 H!i@:@# xHCȳD -`A' p)PD-T-\Хu)2)q3$H k@V` PJ  K4EO P$A0p0P'$_&!R@KA %ĕeC@- d N7`? BJ2B.u +lǮ"A9)$ !+>UTލ&yc'L, j5ͮB/pDQ,B=ta!',G zA@AT# 2PCg妁 ,A0|~D`שPY8!0Jhz%ˆn /Rp6D6,@@:D5DJ@ @(\:~z9,N@CAs `T#`~8ZrNu y-AM` %Q ! `; ~)`@ S h`8 SÑBq#$*ą@! ZiAn)$P4B-x+Gb[rgqN8@+ @p,@$ ( #A8}`TPB0,`SX)DQ0sȄ!-C.=fPdЄ'aA3oJ5L' .Āē PSTdK0L@βB̤h@|&!N"f O0L 9SW/uK@T `M9Xm;?&  M[Eܦkj s&I,&wvyPnRUB${ɓtd'8 ]FeE7Tt21@@ilU)(W Pp: H`Uws^J8$vnԥ@,Z,XM=0(%̷|E 5q6U`@~I$'Y "5N EKjDevT^UTt3rK'-6L,=@}a݈E/\FqkMP[Jy6YQM%A+5 y.y ebUgxXb02g&M4ah༑o'6"oGIr*g~%iX?Gs"z%A)ةIqJJ+-w@) 8RC3FSR/d)^ U 9hB_-e;aaZP XR/;uyZ/t3AjHM $Z$apIBza1M.˂)PD5!8< 1kg]JEotq QxTЧ. [}FVxd.2~:!3UCoX#F^'֚҇K k'4m)Y6@S &b8,̶ Nb'GnBeTl4~59PzbD1ƞ[0^}u@ .*dm̆KP GOR+%^bDbPTUE8:DGC?<…@1@TQ,GFδm 1;festdoc-1.4.2/speech_tools/doc/g000009.gif0100644001741100001440000000237707327542256016506 0ustar awbusersGIF89aPmmmYYYEEE!!!222 !,P0I8ͻ`(dihl-2pmTsP' ;E 8ܭ&@EQ (v.jx/?ʁVjw?a~&VJMN$| wtsh_&h& GA x 9<fHm¦Vچ@? EAnGg+.(%D0cJE,JAɑa17;$DL Q/$#+%$,hD8#H:ni@- tOB<~ySR_<jj1Q %etF8s&,okXox1(=]eCCU4R ҫkDd#Kg( E 'it,&At h؋A,OVhB)l W}Z]j`Q=ːaݹ$m%ཏܤMW[vU0i$:z@G@-" 0Hveǡ8Sm8fx0=2UlQv̑f ]WW`UBvAܱxJ5ь{ rq&8')HIݽ)ͣK2V:a0? ]Qa#&@ʀcFwZonУjG:D0:CåRO1eqfA /q$pRUN*=9 3lF@y(GNyXy'zPrtTcQ *De >V}@,fAWd*nbCBAϥʰVBfK n+)^ T7#VxzT{r|>' VN k 'ZQ͘YԊТm#2Һ Kpr? QiQ$ZqSVbd\ⲏȈ!]lq(dKf slt&Cm~Ӵl1"R [Mwp-VD yNzíރ7+$wFdv`Jnd,S}Enwz@ p.?d﷼~ cVpߝ"$@@EʸAG+=1X O 7zp;festdoc-1.4.2/speech_tools/doc/g000026.gif0100644001741100001440000000356307327542257016504 0ustar awbusersGIF89a#}}}{{{yyywwwuuusssqqqooommmkkkiiieeecccaaa___]]][[[YYYSSSQQQMMMKKKIIIGGGEEEAAA???===;;;999777555333111---+++)))'''%%%!!! ~~~|||zzzxxxvvvrrrnnnlllhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666222000...,,,***(((&&&$$$"""  !,#H*\ȰÇ#J4`ч3jq%!tIR@"0r(A$bq\XbƞC@A`#)d"`R9=iƭ]:bcࠥ ?LeF5F -EMAv¶[`B:@@8!6hh86Y0M* ! ᅈQf8hqQ@@  (ӇW#Lݰ@&=P:/:%<+W85rDa9A(~BYrr%A&aIB^BIr@H`RX X Cj j< >><<<:::888666444222000...,,,***(((&&&$$$"""  !,H*D1 #b((ȱǏ/0HX6 <`͛8 JT8@C̞HF<0dҟA dUy TPl̼J F >eTc 9zrb y@%V! gH" zKmJXEc:Dx39$HKFhg$AX(: AtAi 88%)6'&)$'5JHhR5ĥXv{Q@_ByvT @O@!S8)D8@‰( !8ԠMܱA 1@& Gx17ih+PA# ՁDF,+Ti #H`$ B3dq+GpP M] EAJPWEBA$@ 'ЈXP #AfP$50?Xsʤ0%H2AQFJq́AA!, 2:H)NwB6uQ}DZEAW@ @ 0(`ZHhi("gCD@d"o@WP4G{30HCؑBL0=Q };X#E 1.DAF3nqkBMaB <@Ppt@wALH"S JuAq0BiMh4M,U! UQ 3dpS`Mv ?X%]$;<U ]PS"VQAa@x+$U g:,^UIjo~A bJ%D g$gJ@DPA3 @CR A"R'H;festdoc-1.4.2/speech_tools/doc/g000035.gif0100644001741100001440000000600307327542261016467 0ustar awbusersGIF89aJ}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,JH*\ȰÇ#JHŋ3jȱǏL I} DA= 0T͙v9B# 8A4`$~P, !6 @m nAP YnqhBAnٚE3AjCOX,$=L"0hE ,H…@ Ġ"" @A8*>|$ @M"Y З"s|q*z0[0aD^QG rA|tHI2)),$$R2 A@C[A"QH!T@EA@ TzhR\E=4aULP ă@&$2 kL@!P HFo1U'FtPPEqr /Ѓ ]]A4E60"  CPp@! G  E~h2CI)P 6! [}lED“Y#1 T8(`(P@ki "&2 0Pjy* RL )Q5 C!!Hvf@<6A@$H4YU`0 Fe* pH : Jl)Ё()%A1 ?.ATB5pY0Z*`*M\P )x@f0H:j†FD4(D$, drDAHPbVɪ80e$2=4fXHhB! w ("H%~y'B݊Ȅ"\SG M 2 *r|d*P&PB$ڱWN}D",wGhPH jH qvQ8"I+a]8Oz4zWlo #貾 8Cʙ"r؊OH@;festdoc-1.4.2/speech_tools/doc/g000013.gif0100644001741100001440000000236207327542261016467 0ustar awbusersGIF89aPmmmYYYEEE!!!222 !,P0I8ͻ`(dihl,BpmTsP' ;E 8qtD%@7kA ]ė"Fs@+[~]Kԁ?zj]"YJMN%Vv4 lrZ$pW!9GAG YKHɥk2AO Vs ! EA_GVK4` FDFR.)$% *&fmǐHjҨCK /9B*S/( &J&!pP%?Y+FCK$dˬ%>?e0@BEZӨě/H,9$C>dUs~ h\ŀ,;pg,-<2:*6P>+jўTq(8ȹa9&<seFeR.LwTO=9wJsJTA xlyr L^ٍfEqR]R$P@7vWO=sрtzf?>D[qlɍF4DslԑJ(Qvޙc>1C F`ZrA6t&&WQ-MZC0cԲ 882?pBv&H+G֜F5啙pZA#g lUWA1<4W8Rj) FUsuRv@rEğFq \BV7!L +s0pֵ%"́%C021^kO:$4cXypQH4xlNQ,6_lj!,zY.x (&~Uj5UDQEXsgMP˼V[V Q)  OgjX/T̚, 4lItVyK] ҠežБq \3-mς8$` CIB]md5aDhM LA 1⣡df\{q̸'8C.;QOt?Yά˾^I -UF-0 Ə>2CoןQ0}!t~>><<<:::888666444222000...,,,***(((&&&$$$"""  !,{3H*\ȰÇ#J͢3jȱG(i(S\ɲ˗,98s|hsϟ?{JTТH.<L'`Ņ O&* #^nJ ׈iiclٷ\`ԢKdmY(ˑ(!J1 d3C͜=>:r;R^h`Q۸q;롱  e l2#r@ n&hNj<Ҡ}*gk,C pOt1S!7 eQ>0\R <"$N9R3̬e b0$̕ve[|z^x%rogk!`UGL"X3 3zx3yx w`F@JFU  G@8 "dB#!OBQp +4m `\0. %h娘%ifia;xi&I!ꔈ_…'CH+ tm)< 9)6)0 ;e"K˖Qth;J0q1^ WGm HV" b&HG8m[Ԋ ┺m]8 0{J8j)['o$@1ԵB(W!tc|tP|G\r  Me-^5?i=tHG1&\t>և.+nh0fIU20(p#(ils:;4C/A>9dpi)cMJ*З\T:>6q|NqH+1@Hl*e`ԆIciElbJ86mR&0EL JRT h+*B$E*BF]U,) "T,3CKҚQ%,q>e v!dprEo2AU!PTDX󚧙F<᧎\/gۺK0Ĥ,JMwi0KT2{$q G!w6>Ea_OP*ګAx1mS!Tt!AnAD7C$j]hx|k CD$Xت7DT*xe|GS}1ՆJTR&EwOB{Sr(GH6iƺ W#n$J{4ĿmÐ<ЏmWos;festdoc-1.4.2/speech_tools/doc/g000001.gif0100644001741100001440000000570507327542264016473 0ustar awbusersGIF89aE}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,EH*\ȰÇ#JHŋ3jȱǏȓ(;ĒA\2 &3`Q6k %XA>HU!tA A-dZ ̇S$F`cLC6%`p‡ ]8倁^* FP//4Q8 yqE;\It"Nu<1( A) (PĈ@@K:ѝT `K$l*&B:hPO q! 0GA UBA d<@"Db@Z!_@ h 4` GNA&y"I!A`5 @<*Yb*I:z=Q "S|q0I@.L?~l/fNAbql qK 7`&*$4Jzd2E4 %*@*0 (OdlV C~db+< JAJ%.%85%thMP)$`V9bo:c҇P!i` \T6x(' W0:tP fhH!*4040a{[6a|'z'2!o4^Dr< YF`; #:/yAoAt %S!B*Tfi7+VLAP,@YX<4`L@aD a(# `!gH %x#4.3xOH1-!N@zP ` %^`P!udy@8KB 0$'|"O&x(<^A&Qˁa,!o <@pQ%!ab@!@mK ! CaӔPY $52aQ7t `@'YD$X&>ɨ w> 38$3{\]@LRD́O}^$0 fAB`tMh*4 HA&>><<<:::888666444222000...,,,***(((&&&$$$"""  !,:H*\ȰÇ#JHŋ3jȱLJ_&Hd>R Ҟ#RLYFD)S( PbL;'3- ,T'g8*"|`oA d!(Æ $ bEUa)]f 'n`Q6DA%<%@̓ n-PD\t V|JtPT zEF) `щ BQ`@,Oq'PglDiiA 'O d%X yI) dH3|PCg (PDm$!A a]zh"E=4aULP%Iă@z$2k@Ed"P{! @B PsAK`D 0 5 U@$@(ՠ@?0"7Pƈ Y@:@(40 q@dt!1(F&?! $ BZd(ĀPP))@bQ"b$$ EYy l Aq@pX`T"& Pˢ2# 'Ag $]@m(A@%`dH|i$_s|BDZ!&(@@$-|♨ɌQ0 ^1l` 40qAe* CRPR  Ph  r8i T@j 1%|KC[ H[1)-LJ$*A*fA@@ęD@ ^ChPo(I.LD@ aXbD N\C E7@!$ntEs \ H@Qd)vDZP%` .@xb1g]ir(`@ [ @ /tfPsBPtK :EQcH"4!7LU 1‡>IC@-J.``B \ ,O gXA8iq0WvHjFpjt X,YDF" E\* G/ Fq E"908@`.1yhaAY f`:'G`a\LS`@`@L@ 8, Dc(!bLrI PZJV`B !@K:aB B@0H@ش)G!O3Hd +} $5@NxVlA +(@0`@H!/ 8 @(trHfAH 4\ `U @Rp Q_g1d@@@ HD}j @o $:)t4 B*uAZzt@Q  bG|p 4Nh@BNp!KӢXlhpQh%"\Q @ B Ĭ2PH &S M 0nt E BJDh I T4QK &$Asb4EN@j0֬x-)Qi6 j&:ȶ P4Kx 6  * Ȅ!8`\ (p!H@j  9FSpnLCJ-nPJJdFxB%l<@x$Y"Gu"pk</@ /3/fX!@zN4xїNR2 jxhDߧ["r@ү{`'H@;festdoc-1.4.2/speech_tools/doc/g000046.gif0100644001741100001440000000607007327542266016502 0ustar awbusersGIF89aR}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,RH*\ȰÇ#JHŋ3jȱǏ |82ɓ@ZɇH{YIseaLq#4G$h't R6hn(xhA A9J  9ئ+p I|`pc C-d B0p ,혩a%0PD%qgJm@%`U,V`A!(\00  :ph0sD% r)u&b#L HVȘç T4"_p*7&PQuđ!E0 ip\r }. tH3|H!QIpFHhFPQME8D' t &@+T!49B8iPh!QEqD€xXa$Abx@_hT~aф܀@A(#8LH W)p ( u@P!@VD& B!Q d"MV#1 2(=ml O0l@x)4B~'ҩ]ADIX[s`E WԆ. =F m ͪ0kC jmc@ @|crG55-}` %T $*3DnjBX9 t<ȠD R@$<|=)^Jw0(1|<1ApfB@'t:_)ȶG@>8hٰ_\JY0E5` la$@|qAIALB@ B N22 ] !R B/2x>  R+"8xf t$Qԭ $YV $ H@GAa&yP$! Ha%H"@Ix  1! ltQT 3 0`n@^PgUSwCYe (=]XOgL ֪uCy@] ?\ exBd `\HBL@R Il!L)#Db U :`q0BxqV0pE%QB B DBBj @ЇpU-'H@ BO9!1Z< qtQ&| | q5( HD r^;PC+@ ]2e˂=`FA7;E| dVʁt! :@6̎ 8@)DQA@(-4)Oa` TP@v`*2x B-x!"H n2  |@V@?0A ^(E A _B3v3ɀ:k n0թr4YU/IP&NːZ+d[ N0D&90%;^(t4*$hX+X(`H\@+h Z0 ָF dj8d5o! Ђ!`CnŰ'Ls/~ěLPr(Tx?@[y)rbgh_D0J`>+hI&P0 Їfl  ')UʯUYHf $XoI [$VY *pnY8H0AlPta  u0x 8hLOZDd]&ĔGPj $JHb%:8j¬|a ~lH0b{Xp!.S2`ͺO~/";festdoc-1.4.2/speech_tools/doc/g000020.gif0100644001741100001440000000622607327542267016476 0ustar awbusersGIF89a]}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,]H*\ȰÇ#JHŋ3jȱǏ 1~82ɓ@Zɇ H-XIs`hL#4Mlpa+!@"ƀTgbn>@-xCeԓHm IP!>`0h%|` Nf`+', **Ω`$P"pMt `Ӌ+sJDx6i˰ G<0İ8@J $ eƇRjt t"SX18B5I R``) T|X@c|R@A"@GbC'?@&,pDp!@AT Q$$@5A"9 4c t(E#qxACB0P$PS! [VG D #d|5D!(! D@ ч@N1P&t&! D&X !A{ ]x(FDou}1E$7rXPCW<%XPAa`B|Ei] ZtA@X|0orqY[ $)~ [(c`is"H.)H  ֣jpW0 !֦:jC,"$W b a8rHw{rd!0 t9@  @ !n`qBW>DBN0 @? "_tr8dD'_D#D]iLaGl$$!L|p)qB7̕<:ACv9pDa 60Z a@6.| "pCVAP nx H| P/2 ȀD ` s Y b^AA,@M  "@ J I@ p3$a/&` $@  qb0 |N A h*)h 4GY^A0 3`MI8&8,'~QT׿1T. *aFAXCSJ9C ҅O JP PF(`BP YpxܨPP(DBrAM V($JL<5C$10@I:E\B#n(e  `‚(QH` {(},*  |"pd"((DlBV&\ 8 Vf]a@ N)V %"!H}>1Vm$a@# (  u rptZpBV2! 28P;p'\خܱ@tPlaD@2‎wA)%iNT\谸 "e} '4X H #/b$M'ɍϔ~@@TQ]$!*ۣ42ax `i@&D$V8/&X[09B9b7) HlGc]  2 1]5:0A&ffLdVXa$̀YP}|ۃK22Im)-,&w@M >,<p &t w0B@@ՠ 3A@a & S=\VB4atM6dAE631:`3@|z| DQUJV> V(A[n27<!LL8^(#,$ W*,؂.;festdoc-1.4.2/speech_tools/doc/g000038.gif0100644001741100001440000000243507327542270016477 0ustar awbusersGIF89a`mmmYYYEEE!!!222 !,`0I8ͻ`(dihlpsl*nH" $pPH); joELA'Cw`)l%?MNo#|S5 5ltKP'I! l 3:ž BR "u BkHa %,B(ʙK/Ivl(J QL%OÎ 3(ꕗCp(=آ @! H0"`(7j/UjE]*y·̄Rp ۅd0 Sa ws29Kf8I!%DFFRYG:G WV&zJ_[B &vVp bF@&AgI@ 5-@HIK4X@-`W6)[/m-xl G<dQ i^'sq2^wCxs\@cjc PhB|4Lxs0w-S@tق L&2'"RF8Π4=œrv!*GR̸z-VW5ghfaf&C%J;;+\"~ӽd0~[ %g\wP(dHuHQРe'LewA9G,Eu9!Isa4AQ1~Zpߌ#)309c_Ֆ !9GS: Va&X4@&)] ۝-oY9WI ۪\ Dq^Z ,pwl g{m{Sx^!Ԑ#2(郌AbɟE4`hwk,1EP΋BRifI:(a Gn Hq` /RQbG*e>]Ч Uoyk+5>R:KI +@6-elƩL6@蛍εu<#sG*If#@I(c:&*_Q7o3lMΠO^e_R g0a&OH!=FD|#Nl AeXfr|V3o4,-=?}*r@,_0z@u_sƠAH4 ڟG@:p. @! W-@0 gHD;festdoc-1.4.2/speech_tools/doc/g000030.gif0100644001741100001440000000201407327542271016461 0ustar awbusersGIF89aU }}}{{{wwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSMMMIIIGGGEEECCCAAA???===;;;333111///---)))'''%%%###!!! ~~~|||zzzxxxrrrpppnnnllljjjhhhfffdddbbb^^^\\\ZZZRRRNNNLLLJJJHHHFFFDDDBBB@@@:::888666444222000...,,,***&&&$$$""" !,U  HC>W pG wD\'sC1lcZ >m K{UP"S!3CF-X$ =Zqn3BB89 &'+JO7[G_>q$F@" b !-'ǁ{". D$$ ~XCaD{CE>* J828#( d8r< hb(eɟf&#\F$d5.!P1$퐐R u^bIcr#kF$rր' dWdKVtc˞,5s Jh Lj9#+?9q'̈>E I5P¨L7YVpp<5` +ۇ_ю s q_~"h,aC](HT"NC 741<" T !9XG\"A)B@i*XkA# hDG T5Q`L`d" |e `HF .9TXh5^}X|H)5sW 2q)^,H0ҥ";festdoc-1.4.2/speech_tools/doc/g000037.gif0100644001741100001440000000243607327542272016501 0ustar awbusersGIF89a`mmmYYYEEE!!!222 !,`0I8ͻ`(dihl0sl+nH" $pPLq$`Pl)l%[)HʚBr?q$?MNl$| g5 5qifKQ-  i 3H ze=:՛#%^[Hv ң+䫎U@KȌ0~)7g)N@(k;:HN\m)P1w3-+JX8דPZukLEt.$` UGS {L 8@ł=X&c9+Dom@܇F0k x<= Z]dY2d"[\d;aB#{\f(I!#b^Y4#-)DIc#m(#e#Y>r_YDة>FRpV)   fhXTJ'v@hickT ct*zvDlaYM-lĦ|WÝV a|Eg8OkY磋_UWVMpDzR3LJP 3Uyo&4o*4xBbaIi/ =M,M"+i+iҎKpΙAZi\_3,|hGGO#S5< [K D0p˺^L6@ܚI!G$Fb;J@h2 wF`m;UB\ƄFȆ-'@:<_,=nQIRa*CT |wuHz(_kzS:SPh8"P@S@hA0r*BP'4c  ):hZ. gH ;festdoc-1.4.2/speech_tools/doc/g000031.gif0100644001741100001440000000316107327542273016470 0ustar awbusersGIF89ah'}}}yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]]YYYWWWQQQOOOMMMKKKIIIGGGEEECCCAAA===;;;999333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjfffddd```^^^\\\ZZZNNNLLLJJJHHHFFFDDD@@@>>><<<:::888666444222000,,,***(((&&&  !,h'H*\P0 #JHbDXcǏ'l$(SN q%ШISNF!3j E $ РЧ JԪX^ʵւK졮h|%!ʕkE sKڨS R9((;gƄf (2T:TYdCM]R@ MX8PPKdw>By&BVjؤ&M!4`;;"@ hb8"h Tq (P @$ 4fZDD D4aM e`T$WB0~%b_Lq% ŏ@JaAid$d$/ P@]Xy\%J&fT"4P~e9LdA !VY> @ 63Tj oG}*Arȁ@jX` z A"Bde2j@rkZiЩBa @3@fD+1`o$Tu!Fd\/(Vx![J 2G!DAu~) e05q |NĴky8)x`qDKHip%t@İi™fBDM ;g:zX> aXcG3m@5á Il} .Xl DQp17W'$]S.L СCU¡1TnXJ@J.ؙo$HP榣 M@Ʈ{@;festdoc-1.4.2/speech_tools/doc/g000021.gif0100644001741100001440000000222707327542274016472 0ustar awbusersGIF89a8mmmYYYEEE!!!222 !,80I8ͻ`(dihlrtMJNP `N AtPaz1P;T+D`|->aES”x~I{3$s ilkVzVN F@I 8bGd c Եe>%D@fF^ט"ϯ^ĀɃ/F@=ßw , L>?>QAuQyJ<@aI|doJ. F--=hA %A0Zς>Jg#ea j,1+5QCTpJPZ"34]+1\%^H! b%$ *k,0Y0#:Gg`QcA 4ʦSNHGc-WQ)[9*Mr ܶQ*Ii%4V $,UEXtMVHz{f5oud X$uPVo:BUb r  }Y0e <šFq!ݥ%ICpYRH0*cb!0MRhbwZ(Y;#ʏ)Ub3a Ta00aٰ[%d tB"aMRN&w!PF+ nŁJe)C9eƧ'MB6#ex"yB0 vDab91)W0&1;16ͷ$7n=utJhs܉LV6;ӝz1~D4&5JU 3QEk3w,YcE;iˑ.b%s*]1AZH%(@A E 0n`@NXaY>-Є7 AҢv>><<<:::888666444222000...,,,***(((&&&$$$"""  !,#H*\ȰÇ#JHŋ3Ə CIɅa4p3>ja@E AN.>@D@X\@LɊB;t M`mB! q@$ H(W@MG(iR@`M6(_=PA@[ @ j@}?|E.#+C0 xC&&D @bV- VA<\ѦDa p *RI'D(@ ':@L Ѐ@dxD:@ sXA D. S@R0bD9d , A@l*(A@Ja,Ar Nh5Sv ZBdꀃ4 tH:xB?((4AlB 0i8+ ?! %p8|T!Dဢ8eE!Ll 3Ptpp> $ff0K̀I1@ a]DRi,ARH0,F, aw`+҅FE& ) 0ZJЇ>hI WCv>l=؀f*AgQ *}qg mIPs",Bert"gC )8% F-j #5(!i`5" kؔMohO|3ttUdG(7 HBl./҅ᵰEUV9I >A~B *H̺I — T v{7A )"D cHzǐA * +wKfRphe L` 脉Zw A&L ! {X9!DZ0 GBhEsp}A@cDF"ᴊlA=!z0"X]E*Prel\C.[ $P \Պd!OЄyάtc8)B@Z NzG`V1a*"CBԡs@|}X /8XDsh2 ZJ[1&H GXL;5ȁzHAȀ,l A0Ѐ6eF<<6ȯqa{"˖->`1E )at`@ p `9p!. 0Iƻ l8tM[enWR "k 8".HBqPT05$tvd)ˈl-@,"湡B"H:I"a*)N:A!P;C-Y!.P/@ @t͆Pxa 1  iqANh@@"Sl /8+apgo9 -Bqd g [DB=387 ܠpQi. O~a - 1쏿rϿy;festdoc-1.4.2/speech_tools/doc/g000019.gif0100644001741100001440000000226307327542275016502 0ustar awbusersGIF89a@mmmYYYEEE!!!222 !,@0I8ͻ`(dihltMJNP `N AtP K!@R Jb[ [3G)<9gL'`CTIOL r"3 hn>D7!8F@F QTJGg1@ ?϶E% @ZFJ-#@b(V% P{Vm_'tmXe^D@R@Xi1CL#3z)mj&n50p72@ x /:\SV$VSCc%m׫i'HJ ? Unjlm%:'FU@PU5Wb8oϑ(]qCBUUكňJD : <"aDaY+ mUJf1)"2C9ޒ@H8%6G0T&udBVGDkR  xrBuwRzE:sك<ǐ3_ZCF9&cTE"{ "gRgյ)}NBes NJMB4v{rPKVw*h7JQSÐS*0-LR1عZ]n,CeW(Ԙ&H Efq"Mb @i0DvP)!wR@D\6H3|NB)O!ztSh*7܇?97NS!d&7\Fh|2nwP"Mؐ¡" o֮{ 9 w_P$|?/}[1aܛE݇/A;festdoc-1.4.2/speech_tools/doc/g000022.gif0100644001741100001440000000626207327542276016500 0ustar awbusersGIF89ab}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,bH*\ȰÇ#JHŋ3jȱǏ C~82ɓ@ZɇH{YIseaL(4Gt0B8 1lÛZ,c!YI1a]9"*Z JĔ.ۀmX:M=``*̡]0~, RA( hC F@4"ƀ:h,%N2I` (b@L |&,4$R2 C@Hfp DnprEA8 qb'!E=4aU%ă@y$2l@Dh" jTc #JmRDpgPI@2!U@OEQ^A$ 5|!0I,B0 :TpL J+q3HPEh %@rQȢJx|_B8O}Q>p ,h/'$& SL(9٥`?  :45H,A>pcp*i r-PWPa$H4+ Jm - ~O!AQH)``$-B  a@K HO#H5CmG@jpBB b%O,*EЃlab`1iL 8@paJ[J$~׽ ]HVjfC`T -"M`$0sЅ@x boAe0* $zX+M EKP@h<ꄿ @w0O<QR5Bk*@p?2"hyb̀,jĻ$QW E]~0 BDOb0bB/b%EC"*+hm* Ds@*GA@%(;"f BS cOA)&ǴC@*D` KP.O0x D-WD8DAT C& Q0<7ad q-TB+j E$57 #3@  MV`^fC"Z$1& hK  Lu N8 DAe1٥ h"@/_P^YX!L6ݰk H@@t!@"`&"@hb $л˲՚h(+9AVꁈ&u98)MJ 7[4侀Dʜ H!ȶcC>TDPыPAIH-b;gW'd!,W#` d @nxqs'!U@'( Ղf 0x!Xq8؃>@;festdoc-1.4.2/speech_tools/doc/g000003.gif0100644001741100001440000000063007327542277016471 0ustar awbusersGIF89a8 uuummmgggaaa[[[YYYSSSQQQOOOKKKIIIEEE555---)))!!! |||zzznnnjjjdddbbbLLLBBB>>>444222&&&$$$ !,8 pH,Ȥrl:s.%zZn2BGI ft@M`X G#C! G!Cvxz|~C 'D E{^D1& */DTF,+ 0 fnFB(C^K).C$$EKLnTA;festdoc-1.4.2/speech_tools/doc/g000049.gif0100644001741100001440000000253007327542300016467 0ustar awbusersGIF89ahmmmYYYEEE!!!222 !,h0I8ͻ`(dihlp!#-߸I(΀G $BO{r6911VvП J`mAOBlodurvmHs$@O^#c~sU}zG LM  ;vJxؐcZ!$ \! dC HL`mI`<}Vh`Kj'R@6q lB VEQ7M42@;]ja)*ā[8,1 2 #W6e)U h@j6@ oUQZP ;NJQ j6U;P`NB =ym<1*ݽj[ ia.CK H.5hK$F.m }!)V6Nd$h3 `AS)7n5[eDXYR' (&>I+vL\W2;_ 7M4KUh%P@x֌P Fz3 鵲p=34WL\]W8( g:\# Jr6ͱG3-ӔPBAc^MD+9V0 _v' x Ǝ66a6Q.P(0x,Rߌ=FeLZz(vUY ǩP)px%c=(P;x CqM6Wo\ɥ4쑥}sfDFhi. HhvlH-bhΰ@"I`)T4>+KK!nT;(Y{qq4EJGJK4t[ BA+%jŸ-jr] [z6!ۺ|T-HWsjd̄:&(ɲ,$/x`js>AvDA"PjS+ IĮzvSABWM#a-Dv[g(ʞ3O3p#lBbDp l~-x= iW^?{ $?~g@!^3rTS`>><<<:::888666444222000...,,,***(((&&&$$$"""  !,BH*\ȰÇ#JHŋ3jȱǏHɓ'@ZH{YIseLq#@4(f%if \4`"=|@c0AFB l|𐌖#|h3pPeVePH, L"0Z E H2&H4t% U :{PeGOAVI!3@pG` ! 8D N4QX"F $&$ *t@;DZUTu 4 wABGY 4D v@X'@a@A:(A}0 _$A.P)&`pxS(@11x_#F-6P  A% rD K j7[% ! O 6&bv%$#L L0>d+ 4%,;P,4,G? s ЍhDNG7)W `Z}36 H Rd A"A)$TІQ xF gXA8 tpPE%d!A Q 1@0A?`(j`Xh `9nEIb2@DÂH29! LL qĀ(]n]C@)&΋1P&xd]WE8be;$ 8< @2AP 1 @XNTDR x ѸApI@RjiM9H=PAL( "O#5@(4P>+@>!:a yeRDVBI0A YHH%5TN0.]Gt'&*DxBO{Q؛)JN\P @ v'.$JB56$,B aP38RL J;`Xx9 dUVȠ<"Q 'i Z4 @TXd@84`y /ȐE" k89Qx( pC \WRxL@H4&pBl*4! ^B$VBKHrUcrN@p R dIA$ǁxNw'jdIX@|CV"1Bh5|@X1va "(140aY0x 5P@ Ȅ!搉B;@qH܄ AJtUr!A ' ~) za"NLj$L N8#Y҆L 3 4 q $1>Ay2+x7S&āBd4q ddL",MVM67?Y 5 2fb"B"vwHݘջ;B0H 9D0J6m#@ 9}#\r"A$ KN}"EH7"Tvay*Nxx y2 mDp[~"O7{ ;festdoc-1.4.2/speech_tools/doc/g000052.gif0100644001741100001440000000605207327542302016466 0ustar awbusersGIF89aR}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeecccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGEEECCCAAA???===;;;999777555333111///---+++)))'''%%%###!!! ~~~|||zzzxxxvvvrrrpppnnnllljjjhhhfffdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLJJJHHHFFFDDDBBB@@@>>><<<:::888666444222000...,,,***(((&&&$$$"""  !,RH*\ȰÇ#JHŋ3jȱǏ(ɓ@ZɇH{YIseaLq#4G @ʄ6hn(xiz%~@ˇQB` fPX>1aLXc>yBAnٚE3AjCЕ,$=L"  8y ,H2@ Fs6g`Ȉ8c \Jh( c@Q@sT` iQˡ@2B &# hl qp%J@I(!B@" 4 $1Q7W&XCUVCAtB@'\0 a@|S1Xd9AkrD8 WTEIU2 !!V"GxUP PԆ`^@8 @0F@=A@~l1 AaCRX0VLfD8QA4ДA qA e1JO[(@ 9%lw)4TWB>X:&s _Z ة|[0]1EK@$EőbYlqFHlU Imi yPQno (An tI쁈@rx WdЦyZ!CD /āwtFd#Tl ^@([Zd %Rp$ /p:X+ O|p @B RD3بEaJ |tI"I0EU|@e@u qP-(r$%Bh  " l (5 4^~PCflFdžE|ğG.DA eJ6L]q@/,IS hD`Vc #5 ҃ UnhMf@=hQ kĀ)Yl lB8`P@[ CJ`o!6) C*b?5PЃXVr4#e/ festdoc-1.4.2/speech_tools/doc/examples_gen/include_entities.sgml0100644001741100001440000000054207327543075023772 0ustar awbusers&matrixexamplesection; &lingexamplesection; &trackexamplesection; &sigprexamplesection; &deqexamplesection; &errorexamplesection; &handleexamplesection; &hashexamplesection; &kvlexamplesection; &listexamplesection; &matrixexamplesection; &namedenumexamplesection; &pathnameexamplesection; &stringexamplesection; &tokenexamplesection; &xmlexamplesection; festdoc-1.4.2/speech_tools/doc/examples_gen/matrix_example_section.sgml0100644001741100001440000001305307327543075025207 0ustar awbusers EST_TMatrix The EST_TMatrix class is a generl purpose 2 dimensional array container class. It handles memory allocation and (if required) bounds checking and is reasonably efficiant, so there should be little need to use bare &cpp; arays. See also EST_TMatrix EST_TVector #include "EST_TMatrix.h" #include "EST_String.h" Basic Matrix Use Instances of the TMatrix class are intended to behave as you would expect two dimensional arrays to work. Declaration Matrixes are declared by giving the type and the number of rows and columns. Here we create a 10 row by 5 column matrix. EST_TMatrix<float> m(10, 5); Access Access to values in the matrix is via the a() member function. This returns a reference, so you can assign values to matrix cells. As is usually the case in &cpp;, column and row indecies start from 0. for(int i=0; i<m.num_rows(); i++) for(int j=0; j<m.num_columns(); j++) m.a(i,j) = i+j/100.0; // Just something easy to recognise Output A simple output method is supplied, it just outputs a row at a time, tab separated to a named file. A filename of "-" means standard output. cout << "Initial Matrix\n"; m.save("-"); cout << "\n"; Resizing Resize to 20 rows by 10 columns This fills the new area with def_val, which is 0.0 for floats. m.resize(20,10); Copying Data to/from a buffer Whole rows or columns can be extracted into a buffer, or can be filled with data from a buffer. The buffer must be pre-declared, and it is up to you to ensure it is big enough. Data can be extracted into a buffer in one operation float *buf = new float[max(m.num_rows(),m.num_columns())]; m.copy_row(5, buf); And data can be inserted in a similar manner. m.set_column(5,buf); Sub-Matrices and Sub-Vectors A sub-vector or sub-matrix is a window onto a matrix. If you obtain a sub vector representing a row, for instance, you can treat it a normal vector, any changes you make affecting the underlying matrix. Here is how we can create new variables which refer to the 11th row, 4th column and a 5X3 rectnagle with top left hand corner (8,2). (since the first column or row is numbered 0, the numbers may be one less than you expect). EST_TVector<float> row; EST_TVector<float> column; EST_TMatrix<float> rectangle; m.row(row, 10); m.column(column, 3); m.sub_matrix(rectangle, 8, 5, 2, 3); If we update the sub-vector, the main matrix changes. // 10th row becomes squares of the index for(int i2=0; i2<row.n(); i2++) row[i2] = i2*i2; // 3rd column becomes cubes of the index for(int i3=0; i3<column.n(); i3++) column[i3] = i3*i3*i3; // Central rectangle filled with -1 for(int i4=0; i4<rectangle.num_rows(); i4++) for(int j4=0; j4<rectangle.num_columns(); j4++) rectangle.a(i4, j4) = -1; We can even extract rows and columns from a sub-matrix as follows. EST_TVector<float> rrow; EST_TVector<float> rcolumn; // 3rd row of sub-matrix, part of 12th row of main matrix rectangle.row(rrow, 2); // 2nd column of sub-matrix, part of 8th column of main matrix rectangle.column(rcolumn, 1); Template Instantiation. Some &cpp; compilers requre explicit guidance about which types of Matrix will be used. For many common types, including float, this guidance is included in the &est; libraries. However, if you need to use matrecies of your own types, you will need to include declarations similar to the following. Declare_TMatrix(MyType) #if defined(INSTANTIATE_TEMPLATES) #include "../base_class/EST_TMatrix.cc" Instantiate_TMatrix(MyType) #endif By using this form of declaration, you should ensure that your code will compile anywhere where the speech tools libraries will. festdoc-1.4.2/speech_tools/doc/examples_gen/matrix_trace0100644001741100001440000000717607327543075022176 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=EST_TMatrix OP=see ARG=EST_TMatrix OP=see ARG=EST_TVector OP=name ARG=Basic Matrix Use OP=name ARG=Declaration OP=name ARG=Access OP=name ARG=Output OP=name ARG=Resizing OP=name ARG=Copying Data to/from a buffer OP=name ARG=Sub-Matrices and Sub-Vectors OP=name ARG=Template Instantiation. combine {parent Chunk=HASH(0x8104ac0) title EST_TMatrix refs ARRAY(0x8104af0) bits ARRAY(0x8101b5c) decls ARRAY(0x812daa4) type comment} // {parent Chunk=HASH(0x8104ac0) title Unnamed Group 1 refs ARRAY(0x812db64) bits ARRAY(0x812db4c) decls ARRAY(0x812db7c) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 297. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 297. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114518) type top} // {parent Chunk=HASH(0x8104ac0) title EST_TMatrix refs ARRAY(0x812db64) bits ARRAY(0x812db4c) id decls ARRAY(0x812db7c) type group1 toc } parent Chunk=HASH(0x8104ac0) title EST_TMatrix refs ARRAY(0x812db64) bits ARRAY(0x812db4c) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 297. id decls ARRAY(0x812db7c) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 297. toc gives {parent Chunk=HASH(0x8104ac0) title EST_TMatrix refs ARRAY(0x812db64) bits ARRAY(0x812db4c) decls ARRAY(0x812db7c) type top} combine {parent Chunk=HASH(0x812db94) title Basic Matrix Use refs ARRAY(0x8130bfc) bits ARRAY(0x8130be4) decls ARRAY(0x8130c14) type comment} // {parent Chunk=HASH(0x812db94) title Unnamed Group 2 refs ARRAY(0x8130c98) bits ARRAY(0x8130c80) decls ARRAY(0x8130cb0) type group} combine {parent Chunk=HASH(0x812db94) title Copying Data to/from a buffer refs ARRAY(0x8131fd0) bits ARRAY(0x8131fb8) decls ARRAY(0x8131fe8) type comment} // {parent Chunk=HASH(0x812db94) title Unnamed Group 3 refs ARRAY(0x8132084) bits ARRAY(0x813206c) decls ARRAY(0x813209c) type group} combine {parent Chunk=HASH(0x812db94) title Sub-Matrices and Sub-Vectors refs ARRAY(0x813354c) bits ARRAY(0x8133534) decls ARRAY(0x8133564) type comment} // {parent Chunk=HASH(0x812db94) title Unnamed Group 4 refs ARRAY(0x8133600) bits ARRAY(0x81335e8) decls ARRAY(0x8133618) type group} combine {parent Chunk=HASH(0x812db94) title Template Instantiation. refs ARRAY(0x8135a88) bits ARRAY(0x8135a70) decls ARRAY(0x8135aa0) type comment} // {parent Chunk=HASH(0x812db94) title Unnamed Group 5 refs ARRAY(0x8135b54) bits ARRAY(0x8135b3c) decls ARRAY(0x8135b6c) type group} P Chunk=HASH(0x8104ac0) P Chunk=HASH(0x812dabc) P Chunk=HASH(0x8130b84) P Chunk=HASH(0x8130cc8) P Chunk=HASH(0x8130c2c) P Chunk=HASH(0x8130d4c) P Chunk=HASH(0x8130df4) P Chunk=HASH(0x8130e90) P Chunk=HASH(0x8131cf4) P Chunk=HASH(0x8131da8) P Chunk=HASH(0x8131e44) P Chunk=HASH(0x8131ee0) P Chunk=HASH(0x8131f7c) P Chunk=HASH(0x81320b4) P Chunk=HASH(0x8132000) P Chunk=HASH(0x8133324) P Chunk=HASH(0x81333b4) P Chunk=HASH(0x8133450) P Chunk=HASH(0x81334e0) P Chunk=HASH(0x8133630) P Chunk=HASH(0x813357c) P Chunk=HASH(0x8133f30) P Chunk=HASH(0x8133fd8) P Chunk=HASH(0x81340bc) P Chunk=HASH(0x8134140) P Chunk=HASH(0x8134260) P Chunk=HASH(0x81342e4) P Chunk=HASH(0x8135b84) P Chunk=HASH(0x8135ab8) P Chunk=HASH(0x8135c08) P Chunk=HASH(0x8135d04) festdoc-1.4.2/speech_tools/doc/examples_gen/ling_example_section.sgml0100644001741100001440000003743107327543074024641 0ustar awbusers Linguistic Classes Example Code Adding basic information to an EST_Item An item such as is constructed as follows: (note that the atttributes are in capitals by linguistic convention only: attirbute names are case sensitive and can be upper or lower case). EST_Item p; p.set("POS", "Noun"); p.set("NAME", "example"); p.set("FOCUS", "+"); p.set("DURATION", 2.76); p.set("STRESS", 2); The type of the values in features is a EST_Val class, which is a union which can store ints, floats, EST_Strings, void pointers, and EST_Features. The overloaded function facility of C++ means that the set() can be used for all of these. Accessing basic information in an Item When accessing the features, the type must be specified. This is done most easily by using of a series of functions whose type is coded by a capital letter: <function>F()</function> return value as a float <function>I()</function> return value as a integer <function>S()</function> return value as a <function>A()</function> return value as a EST_Features cout << "Part of speech for p is " << p.S("POS") << endl; cout << "Duration for p is " << p.F("DURATION") << endl; cout << "Stress value for p is " << p.I("STRESS") << endl; Output "Noun" 2.75 1 A optional default value can be given if a result is always desired cout << "Part of speech for p is " << p.S("POS") << endl; cout << "Syntactic Category for p is " << p.S("CAT", "Noun") << endl; // noerror Nested feature structures in items Nested feature structures such as Example eq11 can be created in a number of ways: p.set("NAME", "d"); p.set("VOICE", "+"); p.set("CONTINUANT", "-"); p.set("SONORANT", "-"); EST_Features f; p.set("PLACE OF ARTICULATION", f); // copy in empty feature set here p.A("PLACE OF ARTICULATION").set("CORONAL", "+"); p.A("PLACE OF ARTICULATION").set("ANTERIOR", "+"); or by filling the values in an EST_Features object and copying it in: EST_Features f2; f2.set("CORONAL", "+"); f2.set("ANTERIOR", "+"); p.set("PLACE OF ARTICULATION", f2); Nested features can be accessed by multiple calls to the accessing commands: cout << "Anterior value is: " << p.A("PLACE OF ARTICULATION").S("ANTERIOR"); cout << "Coronal value is: " << p.A("PLACE OF ARTICULATION").S("CORONAL"); The first command is A() because PLACE is a feature structure, and the second command is S() because it returns a string (the value or ANTRIOR or CORONAL). A shorthand is provided to extract the value in a single statement: cout << "Anterior value is: " << p.S("PLACE OF ARTICULATION.ANTERIOR"); cout << "Coronal value is: " << p.S("PLACE OF ARTICULATION.CORONAL"); Again, as the last value to be returned is a string S() must be used. This shorthand can also be used to set the features: p.set("PLACE OF ARTICULATION.CORONAL", "+"); p.set("PLACE OF ARTICULATION.ANTERIOR", "+"); this is the easiest and most commonly used method. */ //@} /** @name Utility functions for items The presence of a attribute can be checked using f_present(), which returns true if the attribute is in the item: cout << "This is true: " << p.f_present("PLACE OF ARTICULATION"); cout << "This is false: " << p.f_present("MANNER"); A attirbute can be removed by f_remove p.f_remove("PLACE OF ARTICULATION"); Building a linear list relation It is standard to store the phones for an utterance as a linear list in a EST_Relation object. Each phone is represented by one EST_Item, whereas the complete list is stored as a EST_Relation. The easiest way to build a linear list is by using the EST_Relation.append(), which when called without arguments, makes a new empty EST_Item, adds it onto the end of the relation and returns a pointer to it. The information relevant to that phone can then be added to the returned item. EST_Relation phones; EST_Item *a; a = phones.append(); a->set("NAME", "f"); a->set("TYPE", "consonant"); a = phones.append(); a->set("NAME", "o"); a->set("TYPE", "vowel"); a = phones.append(); a->set("NAME", "r"); a->set("TYPE", "consonant"); Note that the -> operator is used because the EST_Item a is a pointer here. The same pointer variable can be used multiple times because every time append() is called it allocates a new item and returns a pointer to it. If you already have a EST_Item pointer and want to add it to a relation, you can give it as an argument to append(), but this is generally inadvisable as it involves some unecessary copying, and also you have to allocate the memory for the next EST_Item pointer yourself everytime (if you don't you will overwrite the previous one): a = new EST_Item; a->set("NAME", "m"); a->set("TYPE", "consonant"); phones.append(a); a = new EST_Item; a->set("NAME", "ei"); a->set("TYPE", "vowel"); Items can be prepended in exactly the same way: a = phones.prepend(); a->set("NAME", "n"); a->set("TYPE", "consonant"); a = phones.prepend(); a->set("NAME", "i"); a->set("TYPE", "vowel"); Iterating through a linear list relation Iteration in lists is performed with next() and prev(), and an EST_Item, used as an iteration pointer. EST_Item *s; for (s = phones.head(); s != 0; s = next(s)) cout << s->S("NAME") << endl; Output name:i type:vowel name:n type:consonant name:f type:consonant name:o type:vowel name:r type:consonant name:m type:consonant for (s = phones.tail(); s != 0; s = prev(s)) cout << s->S("NAME") << endl; Output name:m type:consonant name:r type:consonant name:o type:vowel name:f type:consonant name:n type:consonant name:i type:vowel head() and tail() return EST_Item pointers to the start and end of the list. next() and prev() returns the next or previous item in the list, and returns 0 when the end or start of the list is reached. Hence checking for 0 is a useful termination condition of the iteration. Taking advantage of C shorthand allows us to write: for (s = phones.head(); s; s = next(s)) cout << s->S("NAME") << endl; Building a tree relation It is standard to store information such as syntax as a tree in a EST_Relation object. Each tree node is represented by one EST_Item, whereas the complete tree is stored as a EST_Relation. The easiest way to build a tree is by using the append_daughter(), which when called without arguments, makes a new empty EST_Item, adds it as a daughter to an existing item and returns a pointer to it. The information relevant to that node can then be added to the returned item. The root node of the tree must be added directly to the EST_Relation. Example prog01 EST_Relation tree; EST_Item *r, *np, *vp, *n; r = tree.append(); r->set("CAT", "S"); np = append_daughter(r); np->set("CAT", "NP"); n = append_daughter(np); n->set("CAT", "PRO"); n = append_daughter(n); n->set("NAME", "John"); vp = append_daughter(r); vp->set("CAT", "VP"); n = append_daughter(vp); n->set("CAT", "VERB"); n = append_daughter(n); n->set("NAME", "loves"); np = append_daughter(vp); np->set("CAT", "NP"); n = append_daughter(np); n->set("CAT", "DET"); n = append_daughter(n); n->set("NAME", "the"); n = append_daughter(np); n->set("CAT", "NOUN"); n = append_daughter(n); n->set("NAME", "woman"); cout << tree; Output (S (NP (N (John)) ) (VP (V (loves)) (NP (DET the) (NOUN woman)) ) ) Obviously, the use of recursive functions in building trees is more efficient and would eliminate the need for the large number of temporary variables used in the above example. Iterating through a tree relation Iteration in trees is done with daughter1() daughter2() daughtern() and parent(). Pre-order traversal can be achieved iteratively as follows: n = tree.head(); // initialise iteration variable to head of tree while (n) { if (daughter1(n) != 0) // if daughter exists, make n its daughter n = daughter1(n); else if (next(n) != 0)// otherwise visit its sisters n = next(n); else // if no sisters are left, go back up the tree { // until a sister to a parent is found bool found=FALSE; for (EST_Item *pp = parent(n); pp != 0; pp = parent(pp)) if (next(pp)) { n = next(pp); found=TRUE; break; } if (!found) { n = 0; break; } } cout << *n; } A special set of iterators are available for traversal of the leaf (terminal) nodes of a tree: Leaf iteration for (s = first_leaf(tree.head()); s != last_leaf(tree.head()); s = next_leaf(s)) cout << s->S("NAME") << endl; Building a multi-linear relation Iterating through a multi-linear relation Relations in Utterances The EST_Utterance class is used to store all the items and relations relevant to a single utterance. (Here utterance is used as a general linguistic entity - it doesn't have to relate to a well formed complete linguistic unit such as a sentence or phrase). Instead of storing relations separately, they are stored in utterances: EST_Utterance utt; utt.create_relation("Word"); utt.create_relation("Syntax"); EST_Relations can be accessed though the utterance object either directly or by use of a temporary EST_Relation pointer: EST_Relation *word, *syntax; word = utt.relation("Word"); syntax = utt.relation("Syntax"); The contents of the relation can be filled by the methods described above. Adding items into multiple relations A major aspect of this system is that an item can be in two relations at once, as shown in . In the following example, using the syntax relation as already created in , shows how to put the terminal nodes of this tree into a word relation: adding existing items to a new relation word = utt.relation("Word"); syntax = utt.relation("Syntax"); for (s = first_leaf(syntax->head()); s != last_leaf(syntax->head()); s = next_leaf(s)) word->append(s); Thus the terminal nodes in the syntax relation are now stored as a linear list in the word relation. Hence cout << *utt.relation("Syntax") << "\n"; produces Output (S (NP (N (John)) ) (VP (V (loves)) (NP (DET the) (NOUN woman)) ) ) whereas cout << *utt.relation("Word") << "\n"; produces Output John loves the woman Changing the relation an item is in as_relation, in relation etc Feature functions evaluate functions setting functions festdoc-1.4.2/speech_tools/doc/examples_gen/ling_trace0100644001741100001440000001753607327543074021623 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=Linguistic Classes Example Code OP=name ARG=Adding basic information to an EST_Item OP=name ARG=Accessing basic information in an Item OP=name ARG=Nested feature structures in items OP=name ARG=Building a linear list relation OP=name ARG=Iterating through a linear list relation OP=name ARG=Building a tree relation OP=name ARG=Iterating through a tree relation OP=name ARG=Building a multi-linear relation OP=name ARG=Iterating through a multi-linear relation OP=name ARG=Relations in Utterances OP=name ARG=Adding items into multiple relations OP=name ARG=Changing the relation an item is in OP=name ARG=Feature functions combine {parent Chunk=HASH(0x8104ac0) title Linguistic Classes Example Code refs ARRAY(0x8104af0) bits ARRAY(0x8101b5c) decls ARRAY(0x812daa4) type comment} // {parent Chunk=HASH(0x8104ac0) title Unnamed Group 1 refs ARRAY(0x812db10) bits ARRAY(0x812daf8) decls ARRAY(0x812db28) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 651. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 651. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114518) type top} // {parent Chunk=HASH(0x8104ac0) title Linguistic Classes Example Code refs ARRAY(0x812db10) bits ARRAY(0x812daf8) id decls ARRAY(0x812db28) type group1 toc } parent Chunk=HASH(0x8104ac0) title Linguistic Classes Example Code refs ARRAY(0x812db10) bits ARRAY(0x812daf8) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 651. id decls ARRAY(0x812db28) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 651. toc gives {parent Chunk=HASH(0x8104ac0) title Linguistic Classes Example Code refs ARRAY(0x812db10) bits ARRAY(0x812daf8) decls ARRAY(0x812db28) type top} combine {parent Chunk=HASH(0x812db40) title Adding basic information to an EST_Item refs ARRAY(0x812db94) bits ARRAY(0x812db7c) decls ARRAY(0x812dbac) type comment} // {parent Chunk=HASH(0x812db40) title Unnamed Group 2 refs ARRAY(0x8130a78) bits ARRAY(0x8130a60) decls ARRAY(0x8130a90) type group} combine {parent Chunk=HASH(0x812db40) title Accessing basic information in an Item refs ARRAY(0x8130c94) bits ARRAY(0x8130c7c) decls ARRAY(0x8130cac) type comment} // {parent Chunk=HASH(0x812db40) title Unnamed Group 3 refs ARRAY(0x8130db4) bits ARRAY(0x8130d9c) decls ARRAY(0x81320f0) type group} combine {parent Chunk=HASH(0x812db40) title Nested feature structures in items refs ARRAY(0x813239c) bits ARRAY(0x8132384) decls ARRAY(0x81323b4) type comment} // {parent Chunk=HASH(0x812db40) title Unnamed Group 4 refs ARRAY(0x8132474) bits ARRAY(0x813245c) decls ARRAY(0x813248c) type group} combine {parent Chunk=HASH(0x81324a4) refs ARRAY(0x8134a78) bits ARRAY(0x8134a60) decls ARRAY(0x8134a90) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 5 refs ARRAY(0x8134b44) bits ARRAY(0x8134b2c) decls ARRAY(0x8134b5c) type group} combine {parent Chunk=HASH(0x81324a4) title Building a linear list relation refs ARRAY(0x8135f6c) bits ARRAY(0x8135f54) decls ARRAY(0x8135f84) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 6 refs ARRAY(0x813608c) bits ARRAY(0x8136074) decls ARRAY(0x81360a4) type group} combine {parent Chunk=HASH(0x81324a4) title Iterating through a linear list relation refs ARRAY(0x8137524) bits ARRAY(0x813750c) decls ARRAY(0x813753c) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 7 refs ARRAY(0x81388c8) bits ARRAY(0x81388b0) decls ARRAY(0x81388e0) type group} combine {parent Chunk=HASH(0x81324a4) title Building a tree relation refs ARRAY(0x8139b68) bits ARRAY(0x8139b50) decls ARRAY(0x8139b80) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 8 refs ARRAY(0x8139ca0) bits ARRAY(0x8139c88) decls ARRAY(0x8139cb8) type group} combine {parent Chunk=HASH(0x81324a4) title Iterating through a tree relation refs ARRAY(0x813b2bc) bits ARRAY(0x813b2a4) decls ARRAY(0x813b2d4) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 9 refs ARRAY(0x813b37c) bits ARRAY(0x813b364) decls ARRAY(0x813b394) type group} combine {parent Chunk=HASH(0x81324a4) title Building a multi-linear relation refs ARRAY(0x813d060) bits ARRAY(0x813d048) decls ARRAY(0x813d078) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 10 refs ARRAY(0x813d0e4) bits ARRAY(0x813d0cc) decls ARRAY(0x813db20) type group} combine {parent Chunk=HASH(0x81324a4) title Iterating through a multi-linear relation refs ARRAY(0x813db8c) bits ARRAY(0x813db74) decls ARRAY(0x813dba4) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 11 refs ARRAY(0x813dc10) bits ARRAY(0x813dbf8) decls ARRAY(0x813dc28) type group} combine {parent Chunk=HASH(0x81324a4) title Relations in Utterances refs ARRAY(0x813dc94) bits ARRAY(0x813dc7c) decls ARRAY(0x813dcac) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 12 refs ARRAY(0x813dd84) bits ARRAY(0x813dd6c) decls ARRAY(0x813dd9c) type group} combine {parent Chunk=HASH(0x81324a4) title Adding items into multiple relations refs ARRAY(0x813f0dc) bits ARRAY(0x813f0c4) decls ARRAY(0x813f0f4) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 13 refs ARRAY(0x813f1b4) bits ARRAY(0x813f19c) decls ARRAY(0x813f1cc) type group} combine {parent Chunk=HASH(0x81324a4) title Changing the relation an item is in refs ARRAY(0x81422b8) bits ARRAY(0x81422a0) decls ARRAY(0x81422d0) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 14 refs ARRAY(0x8142348) bits ARRAY(0x8142330) decls ARRAY(0x8142360) type group} combine {parent Chunk=HASH(0x81324a4) title Feature functions refs ARRAY(0x81423cc) bits ARRAY(0x81423b4) decls ARRAY(0x81423e4) type comment} // {parent Chunk=HASH(0x81324a4) title Unnamed Group 15 refs ARRAY(0x8142468) bits ARRAY(0x8142450) decls ARRAY(0x8142480) type group} P Chunk=HASH(0x8104ac0) P Chunk=HASH(0x812dabc) P Chunk=HASH(0x8130aa8) P Chunk=HASH(0x812dbc4) P Chunk=HASH(0x8130b2c) P Chunk=HASH(0x8130c04) P Chunk=HASH(0x8132108) P Chunk=HASH(0x8130cc4) P Chunk=HASH(0x813218c) P Chunk=HASH(0x8132228) P Chunk=HASH(0x8132324) P Chunk=HASH(0x81324a4) P Chunk=HASH(0x81323cc) P Chunk=HASH(0x81336b4) P Chunk=HASH(0x81337b0) P Chunk=HASH(0x8133840) P Chunk=HASH(0x8133900) P Chunk=HASH(0x8133990) P Chunk=HASH(0x8133a20) P Chunk=HASH(0x81348e0) P Chunk=HASH(0x8134970) P Chunk=HASH(0x8134a0c) P Chunk=HASH(0x8134b74) P Chunk=HASH(0x8134aa8) P Chunk=HASH(0x8134bf8) P Chunk=HASH(0x8135e94) P Chunk=HASH(0x8135f18) P Chunk=HASH(0x81360bc) P Chunk=HASH(0x8135f9c) P Chunk=HASH(0x8136140) P Chunk=HASH(0x81371e8) P Chunk=HASH(0x81372f0) P Chunk=HASH(0x81373d4) P Chunk=HASH(0x8137458) P Chunk=HASH(0x81388f8) P Chunk=HASH(0x8137554) P Chunk=HASH(0x813897c) P Chunk=HASH(0x8138a24) P Chunk=HASH(0x8138b38) P Chunk=HASH(0x8138be0) P Chunk=HASH(0x8139b08) P Chunk=HASH(0x8139cd0) P Chunk=HASH(0x8139b98) P Chunk=HASH(0x8139d54) P Chunk=HASH(0x813b178) P Chunk=HASH(0x813cd18) P Chunk=HASH(0x813b2ec) P Chunk=HASH(0x813cd9c) P Chunk=HASH(0x813cf40) P Chunk=HASH(0x813cfd0) P Chunk=HASH(0x813db38) P Chunk=HASH(0x813d090) P Chunk=HASH(0x813dc40) P Chunk=HASH(0x813dbbc) P Chunk=HASH(0x813ddb4) P Chunk=HASH(0x813dcc4) P Chunk=HASH(0x813de38) P Chunk=HASH(0x813dee0) P Chunk=HASH(0x813efd4) P Chunk=HASH(0x813f07c) P Chunk=HASH(0x813f1e4) P Chunk=HASH(0x813f10c) P Chunk=HASH(0x813f268) P Chunk=HASH(0x81409f8) P Chunk=HASH(0x8140aac) P Chunk=HASH(0x8140b30) P Chunk=HASH(0x8140c98) P Chunk=HASH(0x8140d1c) P Chunk=HASH(0x8142378) P Chunk=HASH(0x81422e8) P Chunk=HASH(0x8142498) P Chunk=HASH(0x81423fc) festdoc-1.4.2/speech_tools/doc/examples_gen/track_example_section.sgml0100644001741100001440000003772207327543074025017 0ustar awbusers EST_Track class example code Some examples of track manipulations. Initialising and Resizing a Track The constructor functions can be used to create a track with zero frames and channels or a track with a specfied number of frames and channels EST_Track tr; // default track declaration EST_Track tra(500, 10); // allocate track with 500 frames and 10 channels tracks can be resized at any time: tr.resize(10, 500); // resize track to have 10 frames and 500 channels tr.resize(500, 10); // resize track to have 500 frames and 10 channels by default, resizing preserves values in the track. This may involve copying some information, so if the existing values are not needed, a flag can be set which usually results in quicker resizing tr.resize(250, 5, 0); // throw away any existing values If only the number of channels or the number of frames needs to be changed, this an be done with the following functions: tr.set_num_channels(10); // makes 10 channels, keeps same no of frames tr.set_num_frames(400); // makes 400 frames, keeps same no of channels The preserve flag works in the same way with these functions Simple Access Values in the track can be accessed and set by frame number and channel number. The following resizes a track to have 500 frames and 10 channels and fills every position with -5. tr.resize(500, 10); for (i = 0; i < tr.num_frames(); ++i) for (j = 0; j < tr.num_channels(); ++j) tr.a(i, j) = -5.0; A well formed track will have a time value, specified in seconds, for every frame. The time array can be filled directly: for (i = 0; i < tr.num_frames(); ++i) tr.t(i) = (float) i * 0.01; which fills the time array with values 0.01, 0.02, 0.03... 5.0. However, A shortcut function is provded for fixed frame spacing: tr.fill_time(0.1); which performs the same operation as above. Frames do not have to be evenly spaced, in pitch sychronous processing the time array holds the time position of each pitch period. In such cases each position in the time array must obviously be set individually. Some representations have undefined values during certain sections of the track, for example the F0 value during unvoiced speech. The break/value array can be used to specify if a frame has an undefined value.. If a frame in this array is 1, that means the amplitude is defined at that point. If 0, the amplitude is undefined. By default, every frame has a value. Breaks (undefined values) can be set by set_break() . The following sets every frame from 50 to 99 as a break: for (i = 50; i < 100; ++i) tr.set_break(i); frames can be turned back to values as follows: for (i = 50; i < 100; ++i) tr.set_value(i); It is up to individual functions to decide how to interpret breaks. A frame's status can be checked as follows: if (tr.val(60)) cout << "Frame 60 is not a break\n"; if (tr.track_break(60)) cout << "Frame 60 is a break\n"; Naming Channels While channels can be accessed by their index, it is often useful to give them names and refer to them by those names. The set_channel_name() function sets the name of a single channel: tr.set_channel_name("F0", 0); tr.set_channel_name("energy", 1); An alternative is to use a predefined set of channel names stored in a map.A track map is simply a String List strings which describe a channel name configuration. The resize function can take this and resize the number of channels to the number of channels indicated in the map, and give each channel its name from the map. For exmaple: EST_StrList map; map.append("F0"); map.append("energy"); tr.resize(500, map); // this makes a 2 channel track and sets the names to F0 and energy A convention is used for channels which comprise components of a multi-dimensional analysis such as cepstra. In such cases the channels are named TYPE_I. The last coefficient is always names TYPE_N regardless of the number of coefficients. This is very useful in extracting a set of related channels without needing to know the order of the analysis. For example, a track map might look like: map.clear(); map.append("F0"); map.append("energy"); map.append("cep_0"); map.append("cep_1"); map.append("cep_2"); map.append("cep_3"); map.append("cep_4"); map.append("cep_5"); map.append("cep_6"); map.append("cep_7"); map.append("cep_N"); tr.resize(500, map); // makes a 11 channel track and sets the names This obviously gets unwieldy quite quickly, so the mapping mechanism provides a short hand for multi-dimensional data. map.clear(); map.append("F0"); map.append("energy"); map.append("$cep-0+8"); tr.resize(500, map); // does exactly as above Here $ indicates the special status, "cep" the name of the coefficents, "-0" that the first is number 0 and "+8" that there are 8 more to follow. Access single frames or single channels. Often functions perform their operations on only a single frame or channel, and the track class provides a general mechanism for doing this. Single frames or channels can be accessed as EST_FVectors: Given a track with 500 frames and 10 channels, the 50th frame can be accesed as: EST_FVector tmp_frame; tr.frame(tmp_frame, 50); now tmp_frame is 10 element vector, which is a window into tr: any changes to the contents of tmp_frame will change tr. tmp_frame cannot be resized. (This operation can be thought in standard C terms as tmp_frame being a pointer to the 5th frame of tr). Likewise with channels: EST_FVector tmp_channel; tr.channel(tmp_channel, 5); Again, tmp_channel is 500 element vector, which is a window into tr: any changes to the contents of tmp_channel will change tr. tmp_channel cannot be resized. Channels can also be extracted by name: tr.channel(tmp_channel, "energy"); not all the channels need be put into the temporary frame. Imagine we have a track with a F0 channel,a energy channel and 10 cepstrum channels. The following makes a frame from the 50th frame, which only includes the cepstral information in channels 2 through 11 tr.frame(tmp_frame, 50, 2, 9); Likewse, the 5th channel with only the last 100 frames can be set up as: tr.channel(tmp_channel, 5, 400, 100); Access multiple frames or channels. In addition to extracting single frames and channels, multiple frame and channel portions can be extacted in a similar way. In the following example, we make a sub-track sub, which points to the entire cepstrum portion of a track (channels 2 through 11) EST_Track sub; tr.sub_track(sub, 0, EST_ALL, 2, 9); sub behaves exactlty like a normal track in every way, except that it cannot be resized. Its contents behave like a point into the designated portion of tr, so changing sub will change tr. The first argument is the sub track. The second states the start frame and the total number of frames required. EST_ALL is a special constant that specifies that all the frames are required here. The next argument is the start channel number (remember channels are numbered from 0), and the last argument is the total number of channels required. This facility is particularly useful for using standard signal processing functions efficiently. For example, the melcep in the signal procesing library takes a waveform and produces a mel-scale cepstrum. It determines the order of the cepstral analysis by the number of channels in the track it is given, which has already been allocated to have the correct number of frames and channels. The following will process the waveform sig, produce a 10th order mel cepstrum and place the output in sub. (For explanation of the other options see melcep EST_Wave sig; melcep(sig, sub, 1.0, 20, 22); because we have madesub a window into tr, the melcep function writes its output into the correct location, i.e. channels 2-11 of tr. If it were no for the sub_track facility, either a separate track of the right size would be passed into melcep and then it would be copied into tr (wasteful), or else tr would be passed in and other arguments would have to specify which channels should be written to (messy). Sub-tracks can also be set using channel names. The following example does exactly as above, but is referenced by the name of the first channel required and the number of channels to follow: tr.sub_track(sub, 0, EST_ALL, "cep_0", "cep_N"); and this specfies the end by a string also: tr.sub_track(sub, 0, EST_ALL, "cep_0", "cep_N"); sub_tracks can be any set of continuous frames and channels. For example if a word started at frame 43 and ended and frame 86, the following would set a sub track to that portion: tr.sub_track(sub, 47, 39, "cep_0", "cep_N"); We can step through the frames of a Track using a standard itterator. The frames are returned as one-frame sub-tracks. EST_Track::Entries frames; // print out the time of every 50th track cout << "Times:"; for (frames.begin(tr); frames; ++frames) { const EST_Track &frame = *frames; if (frames.n() % 50 ==0) cout << " " << frames.n() << "[" << frame.t() << "]"; } cout << "\n"; The channel, frame and sub_track functions are most commonly used to write into a track using a convenient sub-portion. Sometimes, however a simple copy is required whose contents can be written without affecting the original. The copy_cub_track function does this EST_Track tr_copy; // tr.copy_sub_track(tr_copy, 47, 39, "cep_0", "cep_N"); Indvidual frames and channels can be copied out into pre-allocated float * arrays as follows: float *channel_buf, *frame_buf; channel_buf = new float[tr.num_frames()]; frame_buf = new float[tr.num_channels()]; tr.copy_channel_out(5, channel_buf); // copy channel 5 into channel_buf tr.copy_frame_out(43, frame_buf); // copy frame 4 into frame_buf Indvidual frames and channels can be copied into the track from float * arrays as follows: tr.copy_channel_in(5, channel_buf); // copy channel_buf into channel 5 tr.copy_frame_in(43, frame_buf); // copy frame_buf into frame 4 Auxiliary Channels Auxiliary channels are used for storing frame information other than amplitude coefficients, for example voicing decsions and points of interest in the track. Auxiliary channels always have the same number of frames as the amplitude channels. They are resized by assigning names to the channels that need to be created: EST_StrList aux_names; aux_names.append("voicing"); aux_names.append("join_points"); aux_names.append("cost"); tr.resize_aux(aux_names); The following fills in these three channels with some values: for (i = 0; i < 500; ++i) { tr.aux(i, "voicing") = i; tr.aux(i, "join_points") = EST_String("stuff"); tr.aux(i, "cost") = 0.111; } File I/O Tracks in various formats can be saved and loaded: Save as a HTK file: if (tr.save("tmp/track.htk", "htk") != write_ok) EST_error("can't save htk file\n"); Save as a EST file: if (tr.save("tmp/track.est", "est") != write_ok) EST_error("can't save est file\n"); Save as an ascii file: if (tr.save("tmp/track.ascii", "ascii") != write_ok) EST_error("can't save ascii file\n"); The file type is automatically determined from the file's header during loading: EST_Track tr2; if (tr2.load("tmp/track.htk") != read_ok) EST_error("can't reload htk\n"); If no header is found, the function assumes the file is ascii data, with a fixed frame shift, arranged with rows representing frames and columns channels. In this case, the frame shift must be specified as an argument to this function: if (tr.load("tmp/track.ascii", 0.01) != read_ok) EST_error("can't reload ascii file\n"); festdoc-1.4.2/speech_tools/doc/examples_gen/track_trace0100644001741100001440000001341207327543074021763 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=EST_Track class example code Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 51. OP=toc ARG= OP=name ARG=Initialising and Resizing a Track OP=name ARG=Simple Access OP=name ARG=Naming Channels OP=id ARG=tr-example-naming-channels OP=name ARG=Access single frames or single channels. OP=id ARG=tr-example-frames-and-channels OP=name ARG=Access multiple frames or channels. OP=id ARG=tr-example-sub-tracks OP=name ARG=Auxiliary Channels OP=name ARG=File I/O combine {parent Chunk=HASH(0x8104ac0) title EST_Track class example code refs ARRAY(0x8104af0) bits ARRAY(0x8101b5c) decls ARRAY(0x812daa4) type comment toc 1} // {parent Chunk=HASH(0x8104ac0) title Unnamed Group 1 refs ARRAY(0x812db28) bits ARRAY(0x812db10) decls ARRAY(0x812db40) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 545. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114518) type top} // {parent Chunk=HASH(0x8104ac0) title EST_Track class example code refs ARRAY(0x812db28) bits ARRAY(0x812db10) id decls ARRAY(0x812db40) type group1 toc 1} parent Chunk=HASH(0x8104ac0) title EST_Track class example code refs ARRAY(0x812db28) bits ARRAY(0x812db10) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 545. id decls ARRAY(0x812db40) type group1 toc 1 gives {parent Chunk=HASH(0x8104ac0) title EST_Track class example code refs ARRAY(0x812db28) bits ARRAY(0x812db10) decls ARRAY(0x812db40) type top toc 1} combine {parent Chunk=HASH(0x812db58) title Initialising and Resizing a Track refs ARRAY(0x812dbac) bits ARRAY(0x812db94) decls ARRAY(0x812dbc4) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 2 refs ARRAY(0x8130a90) bits ARRAY(0x8130a78) decls ARRAY(0x8130aa8) type group} combine {parent Chunk=HASH(0x812db58) title Simple Access refs ARRAY(0x81322c0) bits ARRAY(0x81322a8) decls ARRAY(0x81322d8) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 3 refs ARRAY(0x8132374) bits ARRAY(0x813235c) decls ARRAY(0x813238c) type group} combine {parent Chunk=HASH(0x812db58) title Naming Channels refs ARRAY(0x81343d0) bits ARRAY(0x81343b8) id tr-example-naming-channels decls ARRAY(0x81343e8) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 4 refs ARRAY(0x8134484) bits ARRAY(0x813446c) decls ARRAY(0x813449c) type group} combine {parent Chunk=HASH(0x812db58) title Access single frames or single channels. refs ARRAY(0x81375f4) bits ARRAY(0x81375dc) id tr-example-frames-and-channels decls ARRAY(0x813760c) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 5 refs ARRAY(0x81376cc) bits ARRAY(0x81376b4) decls ARRAY(0x81376e4) type group} combine {parent Chunk=HASH(0x812db58) title Access multiple frames or channels. refs ARRAY(0x8139690) bits ARRAY(0x8139678) id tr-example-sub-tracks decls ARRAY(0x81396a8) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 6 refs ARRAY(0x813975c) bits ARRAY(0x8139744) decls ARRAY(0x8139774) type group} combine {parent Chunk=HASH(0x812db58) title Auxiliary Channels refs ARRAY(0x813e2b8) bits ARRAY(0x813e2a0) decls ARRAY(0x813e2d0) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 7 refs ARRAY(0x813e384) bits ARRAY(0x813e36c) decls ARRAY(0x813e39c) type group} combine {parent Chunk=HASH(0x812db58) title File I/O refs ARRAY(0x813f934) bits ARRAY(0x813f91c) decls ARRAY(0x813f94c) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 8 refs ARRAY(0x813f9d0) bits ARRAY(0x813f9b8) decls ARRAY(0x813f9e8) type group} P Chunk=HASH(0x8104ac0) P Chunk=HASH(0x812dabc) P Chunk=HASH(0x8130ac0) P Chunk=HASH(0x8130a18) P Chunk=HASH(0x8130b44) P Chunk=HASH(0x8130bd4) P Chunk=HASH(0x8130c58) P Chunk=HASH(0x8130ce8) P Chunk=HASH(0x8130d90) P Chunk=HASH(0x8132140) P Chunk=HASH(0x81321d0) P Chunk=HASH(0x813226c) P Chunk=HASH(0x81323a4) P Chunk=HASH(0x81322f0) P Chunk=HASH(0x8132428) P Chunk=HASH(0x81324e8) P Chunk=HASH(0x8132e8c) P Chunk=HASH(0x8132f1c) P Chunk=HASH(0x8132fb8) P Chunk=HASH(0x8133048) P Chunk=HASH(0x8133180) P Chunk=HASH(0x813419c) P Chunk=HASH(0x8134220) P Chunk=HASH(0x81342b0) P Chunk=HASH(0x813434c) P Chunk=HASH(0x81344b4) P Chunk=HASH(0x8134400) P Chunk=HASH(0x8134538) P Chunk=HASH(0x81356f4) P Chunk=HASH(0x81357c0) P Chunk=HASH(0x8135874) P Chunk=HASH(0x8135958) P Chunk=HASH(0x813742c) P Chunk=HASH(0x81374bc) P Chunk=HASH(0x8137588) P Chunk=HASH(0x81376fc) P Chunk=HASH(0x8137624) P Chunk=HASH(0x8137780) P Chunk=HASH(0x81385b0) P Chunk=HASH(0x813867c) P Chunk=HASH(0x8138718) P Chunk=HASH(0x81387cc) P Chunk=HASH(0x8138850) P Chunk=HASH(0x8138904) P Chunk=HASH(0x81395ac) P Chunk=HASH(0x813963c) P Chunk=HASH(0x813978c) P Chunk=HASH(0x81396c0) P Chunk=HASH(0x8139810) P Chunk=HASH(0x81398b8) P Chunk=HASH(0x813b128) P Chunk=HASH(0x813b1c4) P Chunk=HASH(0x813b2cc) P Chunk=HASH(0x813b35c) P Chunk=HASH(0x813b3e0) P Chunk=HASH(0x813c8f8) P Chunk=HASH(0x813c9a0) P Chunk=HASH(0x813ca3c) P Chunk=HASH(0x813cacc) P Chunk=HASH(0x813cbe0) P Chunk=HASH(0x813dfdc) P Chunk=HASH(0x813e078) P Chunk=HASH(0x813e108) P Chunk=HASH(0x813e1c8) P Chunk=HASH(0x813e258) P Chunk=HASH(0x813e3b4) P Chunk=HASH(0x813e2e8) P Chunk=HASH(0x813f724) P Chunk=HASH(0x813f814) P Chunk=HASH(0x813f898) P Chunk=HASH(0x813fa00) P Chunk=HASH(0x813f964) P Chunk=HASH(0x813fa84) P Chunk=HASH(0x8140768) P Chunk=HASH(0x81407ec) P Chunk=HASH(0x814087c) P Chunk=HASH(0x8140900) P Chunk=HASH(0x8140990) P Chunk=HASH(0x8140a20) P Chunk=HASH(0x814181c) P Chunk=HASH(0x81418c4) festdoc-1.4.2/speech_tools/doc/examples_gen/sigpr_example_section.sgml0100644001741100001440000004626207327543074025036 0ustar awbusers Signal processing example code Producing a single type of feature vector for an utterance A number of types of signal processing can be performed by the sig2coef function. The following code demonstrates a simple case of calculating the linear prediction (LP) coefficients for a waveform. First set the order of the lpc analysis to 16 (this entails 17 actual coefficients) and then load in the waveform to be analysed. int lpc_order = 16; sig.load(DATA "/kdt_001.wav"); Now allocate enrough space in the track to hold the analysis. The following command resizes fv to have enough frames for analysis frames at 0.01 intervals up to the end of the waveform, (sig.end()), and enough channels to store lpc_order + 1 coefficients. The channels are named so as to take lpc coefficients. int num_frames; num_frames = (int)ceil(sig.end() / 0.01); fv.resize(num_frames, lpc_order + 1); The positions of the frames, corresponding to the middel of their analysis window also needs to be set. For fixed frame analysis, this can be done with the fill_time() function: fv.fill_time(0.01); The simplest way to do the actual analysis is as follows, which will fill the track with the values from the LP analysis using the default processing controls. sig2coef(sig, fv, "lpc"); In this style of analysis, default values are used to control the windowing mechanisms which split the whole signal into frames. Specifically, each frame is defined to start a certain distance before the time interval, and extending the same distance after. This distance is calculated as a function of the local window spacing and can be adjusted as follows: Extending one time period before and one time period after the current time mark: sig2coef(sig, fv, "lpc", 2.0); Extending 1.5 time periods before and after the current time mark, etc; sig2coef(sig, fv, "lpc", 3.0); The type of windowing function may be changed also as this can be passed in as an optional argument. First we create a window function (This is explained more in \Ref{Windowing}). EST_WindowFunc *wf = EST_Window::creator("hamming"); and then pass it in as the last argument sig2coef(sig, fv, "lpc", 3.0, wf); Pitch-Synchronous vs fixed frame analysis. Most of the core signal processing functions operate on individual frames of speech and are oblivious as to how these frames were extracted from the original speech. This allows us to take the frames from anywhere in the signal: specifically, this facilitates two common forms of analysis: fixed frame The time points are space at even intervals throughout the signal. pitch-synchronous The time points represent pitchmarks and correspond to a specific position in each pitch perdiod, e.g. the instant of glottal closure. It is a simple matter to fill the time array, but normally pitchmarks are read from a file or taken from another signal processing algorithm (see \Ref{Pitchmark functions.}). There are many ways to fill the time array for fixed frame analysis. manually: int num_frames = 300; fv.resize(num_frames, lpc_order + 1); shift = 0.01; // time interval in seconds for (i = 0; i < num_frames; ++i) fv.t(i) = shift * (float) i; or by use of the member function \Ref{EST_Track::fill_time} fv.fill_time(0.01); Pitch synchronous values can simply be read from pitchmark files: fv.load(DATA "/kdt_001.pm"); make_track(fv, "lpc", lpc_order + 1); Regardless of how the time points where obtain, the analysis function call is just the same: sig2coef(sig, fv, "lpc"); Naming Channels Multiple types of feature vector can be stored in the same Track. Imagine that we want lpc, cepstrum and power coefficients in that order in a track. This can be achieved by using the \Ref{sig2coef} function multiple times, or by the wrap around \Ref{sigpr_base} function. It is vitally important here to ensure that before passing the track to the signal processing functions that it has the correct number of channels and that these are appropriately named. This is most easily done using the track map facility, explained in Naming Channels For each call, we only us the part of track that is relevant. The sub_track member function of \Ref{EST_Track} is used to get this. In the following example, we are assuming here that fv has sufficient space for 17 lpc coefficients, 8 cepstrum coefficients and power and that they are stored in that order. int cep_order = 16; EST_StrList map; map.append("$lpc-0+" Stringtoi(lpc_order)); map.append("$cepc-0+" Stringtoi(cep_order)); map.append("power"); fv.resize(EST_CURRENT, map); An alternative is to use add_channels_to_map() which takes a list of coefficient types and makes a map. The order of each type of processing is extracted from op. EST_StrList coef_types; coef_types.append("lpc"); coef_types.append("cep"); coef_types.append("power"); map.clear(); add_channels_to_map(map, coef_types, op); fv.resize(EST_CURRENT, map); After allocating the right number of frames and channels in {\tt fv}, we extract a sub_track, which has all the frames (i.e. between 0 and EST_ALL) and all the lpc channels fv.sub_track(part, 0, EST_ALL, 0, "lpc_0", "lpc_N"); now call the signal processing function on this part: sig2coef(sig, part, "lpc"); We repeat the procedure for the cepstral coefficients, but this time take the next 8 channels (17-24 inclusive) and calculate the coefficients: fv.sub_track(part, 0, EST_ALL, "cep_0", "cep_N"); sig2coef(sig, part, "cep"); Extract the last channel for power and call the power function: fv.sub_track(part, 0, EST_ALL, "power", 1); power(sig, part, 0.01); While the above technique is adequate for our needs and is a useful demonstration of sub_track extraction, the \Ref{sigpr_base} function is normally easier to use as it does all the sub track extraction itself. To perform the lpc, cepstrum and power analysis, we put these names into a StrList and call \Ref{sigpr_base}. base_list.clear(); // empty the list, just in case base_list.append("lpc"); base_list.append("cep"); base_list.append("power"); sigpr_base(sig, fv, op, base_list); This will call \Ref{sigpr_track} as many times as is necessary. Producing delta and acceleration coefficients Delta coefficients represent the numerical differentiation of a track, and acceleration coefficients represent the second order numerical differentiation. By convention, delta coefficients have a "_d" suffix and acceleration coefficicents "_a". If the coefficient is mulit-dimensional, the numbers go after the "_d" or "_a". map.append("$cep_d-0+" Stringtoi(cep_order)); // add deltas map.append("$cep_a-0+" Stringtoi(cep_order)); // add accs fv.resize(EST_CURRENT, map); // resize the track. Given a EST_Track of coefficients {\tt fv}, the \Ref{delta} function is used to produce the delta equivalents {\tt del}. The following uses the track allocated above and generates a set of cepstral coefficients and then makes their delta and acc: EST_Track del, acc; fv.sub_track(part, 0, EST_ALL, 0, "cep_0", "cep_N"); // make subtrack of coefs sig2coef(sig, part, "cep"); // fill with cepstra // make subtrack of deltas fv.sub_track(del, 0, EST_ALL, 0, "cep_d_0", "cep_d_N"); delta(part, del); // calculate deltas of part, and place answer in del // make subtrack of accs fv.sub_track(acc, 0, EST_ALL, 0, "cep_a_0", "cep_a_N"); delta(del, acc); // calculate deltas of del, and place answer in acc It is possible to directly calculate the delta coefficients of a type of coefficient, even if we don't have the base type. \Ref{sigpr_delta} will process the waveform, make a temporary track of the required type "lpc" and calculate the delta of this. The following makes a set of delta reflection coefficients: map.append("$ref_d-0+" Stringtoi(lpc_order)); // add to map fv.resize(EST_CURRENT, map); // resize the track. sigpr_delta(sig, fv, op, "ref"); an equivalent function exists for acceleration coefficients: map.append("$lsf_a-0+" Stringtoi(lpc_order)); // add acc lsf fv.resize(EST_CURRENT, map); // resize the track. sigpr_acc(sig, fv, op, "ref"); Windowing The \Ref{EST_Window} class provides a variety of means to divide speech into frames using windowing mechanisms. A window function can be created from a window name using the \Ref{EST_Window::creator} function: EST_WindowFunc *hamm = EST_Window::creator("hamming"); EST_WindowFunc *rect = EST_Window::creator("rectangular"); This function can then be used to create a EST_TBuffer of window values. In the following example the values from a 256 point hamming window are stored in the buffer win_vals: EST_FVector frame; EST_FVector win_vals; hamm(256, win_vals); The make_windoe function also creates a window: EST_Window::make_window(win_vals, 256, "hamming"); this can then be used to make a frame of speech from the main EST_Wave sig. The following example extracts speech starting at sample 1000: Alternatively, exactly the same operation can be performed in a single step by passing the window function to the \Ref{EST_Window::window_signal} function which takes a \Ref{EST_Wave} and performs windoing on a section of it, storing the output in the \Ref{EST_FVector} {\tt frame}. EST_Window::window_signal(sig, hamm, 1000, 256, frame, 1); The window function need not be expliticly created, the window signal can work on just the name of the window type: EST_Window::window_signal(sig, "hamming", 1000, 256, frame, 1); Frame based signal processing The signal processing library provides an extensize set of functions which operate on a single frame of coefficients. The following example shows one method of splitting the signal into frames and calling a signal processing algorithm. First set up the track for 16 order LP analysis: map.clear(); map.append("$lpc-0+16"); fv.resize(EST_CURRENT, map); In this example, we take the analysis frame length to be 256 samples long, and the shift in samples is just the shift in seconds times the sampling frequency. int s_length = 256; int s_shift = int(shift * float(sig.sample_rate())); EST_FVector coefs; Now we set up a loop which calculates the frames one at a time. {\tt start} is the start position in samples of each frame. The \Ref{EST_Window::window_signal} function is called which makes a \Ref{EST_FVector} frame of the speech via a hamming window. Using the \Ref{EST_Track::frame} function, the EST_FVector {\tt coefs} is set to frame {\tt k} in the track. It is important to understand that this operation involves setting an internal smart pointer in {\tt coefs} to the memory of frame {\tt k}. This allows the signal processing function \Ref{sig2lpc} to operate on an input and output \Ref{EST_FVector}, without any copying to or from the main track. After the \Ref{sig2lpc} call, the kth frame of {\tt fv} is now filled with the LP coefficients. for (int k1 = 0; k1 < fv.num_frames(); ++k1) { int start = (k1 * s_shift) - (s_length/2); EST_Window::window_signal(sig, "hamming", start, s_length, frame, 1); fv.frame(coefs, k1); // Extract a single frame sig2lpc(frame, coefs); // Pass this to actual algorithm } A slightly different tack can be taken for pitch-synchronous analysis. Setting up fv with the pitchmarks and channels: fv.load(DATA "/kd1_001.pm"); fv.resize(EST_CURRENT, map); Set up as before, but this time calculate the window starts and lengths from the time points. In this example, the length is a {\tt factor} (twice) the local frame shift. Note that the only difference between this function and the fixed frame one is in the calculation of the start and end points - the windowing, frame extraction and call to \Ref{sig2lpc} are exactly the same. float factor = 2.0; for (int k2 = 0; k2 < fv.num_frames(); ++k2) { s_length = irint(get_frame_size(fv, k2, sig.sample_rate())* factor); int start = (irint(fv.t(k2) * sig.sample_rate()) - (s_length/2)); EST_Window::window_signal(sig, wf, start, s_length, frame, 1); fv.frame(coefs, k2); sig2lpc(frame, coefs); } Filtering In the EST library we so far have two main types of filter, {\bf finite impulse response (FIR)} filters and {\bf linear prediction (LP)} filters. {\bf infinite impulse response (IIR)} filters are not yet implemented, though LP filters are a special case of these. Filtering involves 2 stages: the design of the filter and the use of this filter on the waveform. First we examine a simple low-pass filter which attempts to supress all frequencies about a cut-off. Imagine we want to low pass filter a signal at 400Hz. First we design the filter: EST_FVector filter; int freq = 400; int filter_order = 99; filter = design_lowpass_FIR_filter(sig.sample_rate(), 400, 99); And now use this filter on the signal: FIRfilter(sig, filter); For one-off filtering operations, the filter design can be done in the filter function itself. The \Ref{FIRlowpass_filter} function takes the signal, cut-off frequency and order as arguments and designs the filter on the fly. Because of the overhead of filter design, this function is expensive and should only be used for one-off operations. FIRlowpass_filter(sig, 400, 99); The equivalent operations exist for high-pass filtering: filter = design_highpass_FIR_filter(sig.sample_rate(), 50, 99); FIRfilter(sig, filter); FIRhighpass_filter(sig, 50, 99); Filters of arbitrary frequency response can also be designed using the \Ref{design_FIR_filter} function. This function takes a EST_FVector of order $2^{N}$ which specifies the desired frequency response up to 1/2 the sampling frequency. The function returns a set of filter coefficients that attempt to match the desired reponse. EST_FVector response(16); response[0] = 1; response[1] = 1; response[2] = 1; response[3] = 1; response[4] = 0; response[5] = 0; response[6] = 0; response[7] = 0; response[8] = 1; response[9] = 1; response[10] = 1; response[11] = 1; response[12] = 0; response[13] = 0; response[14] = 0; response[15] = 0; filter = design_FIR_filter(response, 15); FIRfilter(sig, response); The normal filtering functions can cause a time delay in the filtered waveform. To attempt to eliminate this, a set of double filter function functions are provided which guarentess zero phase differences between the original and filtered waveform. FIRlowpass_double_filter(sig, 400); FIRhighpass_double_filter(sig, 40); Sometimes it is undesirable to have the input signal overwritten. For these cases, a set of parallel functions exist which take a input waveform for reading and a output waveform for writing to. EST_Wave sig_out; FIRfilter(sig, sig_out, response); FIRlowpass_filter(sig, sig_out, 400); FIRhighpass_filter(sig, sig_out, 40); festdoc-1.4.2/speech_tools/doc/examples_gen/sigpr_trace0100644001741100001440000001454107327543074022007 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=Signal processing example code Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 515, line 49. OP=toc ARG= OP=name ARG=Producing a single type of feature vector for an utterance OP=name ARG=Pitch-Synchronous vs fixed frame analysis. OP=name ARG=Naming Channels OP=id ARG=sigpr-example-naming-channels OP=name ARG=Producing delta and acceleration coefficients OP=name ARG=Windowing Use of uninitialized value in array dereference at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 232, line 431. UNKNOWN '}' Use of uninitialized value in array dereference at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 232, line 434. UNKNOWN '}' OP=name ARG=Frame based signal processing OP=id ARG=sigpr-example-frames OP=name ARG=Filtering combine {parent Chunk=HASH(0x8104ac0) title Signal processing example code refs ARRAY(0x8104af0) bits ARRAY(0x8101b5c) decls ARRAY(0x812daa4) type comment toc 1} // {parent Chunk=HASH(0x8104ac0) title Unnamed Group 1 refs ARRAY(0x812db28) bits ARRAY(0x812db10) decls ARRAY(0x812db40) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 641. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114518) type top} // {parent Chunk=HASH(0x8104ac0) title Signal processing example code refs ARRAY(0x812db28) bits ARRAY(0x812db10) id decls ARRAY(0x812db40) type group1 toc 1} parent Chunk=HASH(0x8104ac0) title Signal processing example code refs ARRAY(0x812db28) bits ARRAY(0x812db10) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 641. id decls ARRAY(0x812db40) type group1 toc 1 gives {parent Chunk=HASH(0x8104ac0) title Signal processing example code refs ARRAY(0x812db28) bits ARRAY(0x812db10) decls ARRAY(0x812db40) type top toc 1} combine {parent Chunk=HASH(0x812db58) title Producing a single type of feature vector for an utterance refs ARRAY(0x812dbac) bits ARRAY(0x812db94) decls ARRAY(0x812dbc4) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 2 refs ARRAY(0x8130acc) bits ARRAY(0x8130ab4) decls ARRAY(0x8130ae4) type group} combine {parent Chunk=HASH(0x812db58) title Pitch-Synchronous vs fixed frame analysis. refs ARRAY(0x81336a0) bits ARRAY(0x8133688) decls ARRAY(0x81336b8) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 3 refs ARRAY(0x8133814) bits ARRAY(0x81337fc) decls ARRAY(0x813382c) type group} combine {parent Chunk=HASH(0x812db58) title Naming Channels refs ARRAY(0x81359dc) bits ARRAY(0x81359c4) id sigpr-example-naming-channels decls ARRAY(0x81359f4) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 4 refs ARRAY(0x8135b44) bits ARRAY(0x8135b2c) decls ARRAY(0x8135b5c) type group} combine {parent Chunk=HASH(0x812db58) title Producing delta and acceleration coefficients refs ARRAY(0x8138c94) bits ARRAY(0x8138c7c) decls ARRAY(0x8138cac) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 5 refs ARRAY(0x8139234) bits ARRAY(0x813921c) decls ARRAY(0x813924c) type group} combine {parent Chunk=HASH(0x812db58) title Windowing refs ARRAY(0x813b4d4) bits ARRAY(0x813b4bc) decls ARRAY(0x813b4ec) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 6 refs ARRAY(0x813b594) bits ARRAY(0x813b57c) decls ARRAY(0x813b5ac) type group} combine {parent Chunk=HASH(0x812db58) title Frame based signal processing refs ARRAY(0x813e134) bits ARRAY(0x813e11c) id sigpr-example-frames decls ARRAY(0x813e14c) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 7 refs ARRAY(0x813e200) bits ARRAY(0x813e1e8) decls ARRAY(0x813e218) type group} combine {parent Chunk=HASH(0x812db58) title Filtering refs ARRAY(0x8140758) bits ARRAY(0x8140740) decls ARRAY(0x8140770) type comment} // {parent Chunk=HASH(0x812db58) title Unnamed Group 8 refs ARRAY(0x814086c) bits ARRAY(0x8140854) decls ARRAY(0x8140884) type group} P Chunk=HASH(0x8104ac0) P Chunk=HASH(0x812dabc) P Chunk=HASH(0x8130afc) P Chunk=HASH(0x8130a30) P Chunk=HASH(0x8130b80) P Chunk=HASH(0x8130c28) P Chunk=HASH(0x8130cdc) P Chunk=HASH(0x8130d78) P Chunk=HASH(0x8132398) P Chunk=HASH(0x813241c) P Chunk=HASH(0x81324b8) P Chunk=HASH(0x813253c) P Chunk=HASH(0x8132614) P Chunk=HASH(0x8132698) P Chunk=HASH(0x8132728) P Chunk=HASH(0x81334a8) P Chunk=HASH(0x8133544) P Chunk=HASH(0x81335c8) P Chunk=HASH(0x813364c) P Chunk=HASH(0x8133844) P Chunk=HASH(0x81336d0) P Chunk=HASH(0x813492c) P Chunk=HASH(0x81349ec) P Chunk=HASH(0x8134a70) P Chunk=HASH(0x8134af4) P Chunk=HASH(0x8134b84) P Chunk=HASH(0x8134c14) P Chunk=HASH(0x8135988) P Chunk=HASH(0x8135b74) P Chunk=HASH(0x8135a0c) P Chunk=HASH(0x8135bf8) P Chunk=HASH(0x8135cdc) P Chunk=HASH(0x8137610) P Chunk=HASH(0x8137718) P Chunk=HASH(0x81377b4) P Chunk=HASH(0x8137838) P Chunk=HASH(0x81378bc) P Chunk=HASH(0x8137940) P Chunk=HASH(0x8138904) P Chunk=HASH(0x81389a0) P Chunk=HASH(0x8138a24) P Chunk=HASH(0x8138ac0) P Chunk=HASH(0x8138b80) P Chunk=HASH(0x8138c40) P Chunk=HASH(0x8139264) P Chunk=HASH(0x8138cc4) P Chunk=HASH(0x81392e8) P Chunk=HASH(0x813939c) P Chunk=HASH(0x813945c) P Chunk=HASH(0x8139570) P Chunk=HASH(0x813b324) P Chunk=HASH(0x813b3cc) P Chunk=HASH(0x813b450) P Chunk=HASH(0x813b5c4) P Chunk=HASH(0x813b504) P Chunk=HASH(0x813b648) P Chunk=HASH(0x813c520) P Chunk=HASH(0x813c5bc) P Chunk=HASH(0x813c664) P Chunk=HASH(0x813c6e8) P Chunk=HASH(0x813c76c) P Chunk=HASH(0x813c7fc) P Chunk=HASH(0x813dfcc) P Chunk=HASH(0x813e050) P Chunk=HASH(0x813e0e0) P Chunk=HASH(0x813e230) P Chunk=HASH(0x813e164) P Chunk=HASH(0x813e2b4) P Chunk=HASH(0x813e374) P Chunk=HASH(0x813f50c) P Chunk=HASH(0x813f5a8) P Chunk=HASH(0x813f6b0) P Chunk=HASH(0x813f788) P Chunk=HASH(0x813f818) P Chunk=HASH(0x81405b4) P Chunk=HASH(0x8140680) P Chunk=HASH(0x814089c) P Chunk=HASH(0x8140788) P Chunk=HASH(0x8140920) P Chunk=HASH(0x81421d4) P Chunk=HASH(0x8142258) P Chunk=HASH(0x81422dc) P Chunk=HASH(0x814239c) P Chunk=HASH(0x8142420) P Chunk=HASH(0x81424a4) P Chunk=HASH(0x8142fb4) P Chunk=HASH(0x8143074) P Chunk=HASH(0x81431e8) P Chunk=HASH(0x8143290) P Chunk=HASH(0x8143320) P Chunk=HASH(0x8144bd0) festdoc-1.4.2/speech_tools/doc/examples_gen/deq_example_section.sgml0100644001741100001440000000045407327543074024454 0ustar awbusers EST_TDeque:example Examples of stack and queue use. See also EST_TDeque festdoc-1.4.2/speech_tools/doc/examples_gen/deq_trace0100644001741100001440000000343207327543074021431 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=EST_TDeque:example OP=see ARG=EST_TDeque Use of uninitialized value in array dereference at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 232, line 125. UNKNOWN '}' combine {parent Chunk=HASH(0x8104ab8) title EST_TDeque:example refs ARRAY(0x8104ae8) bits ARRAY(0x8101b5c) decls ARRAY(0x812da9c) type comment} // {parent Chunk=HASH(0x8104ab8) title Unnamed Group 1 refs ARRAY(0x812db2c) bits ARRAY(0x812db14) decls ARRAY(0x812db44) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 142. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 142. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114510) type top} // {parent Chunk=HASH(0x8104ab8) title EST_TDeque:example refs ARRAY(0x812db2c) bits ARRAY(0x812db14) id decls ARRAY(0x812db44) type group1 toc } parent Chunk=HASH(0x8104ab8) title EST_TDeque:example refs ARRAY(0x812db2c) bits ARRAY(0x812db14) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 142. id decls ARRAY(0x812db44) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 142. toc gives {parent Chunk=HASH(0x8104ab8) title EST_TDeque:example refs ARRAY(0x812db2c) bits ARRAY(0x812db14) decls ARRAY(0x812db44) type top} P Chunk=HASH(0x8104ab8) P Chunk=HASH(0x812dab4) festdoc-1.4.2/speech_tools/doc/examples_gen/error_example_section.sgml0100644001741100001440000000000007327543074025017 0ustar awbusersfestdoc-1.4.2/speech_tools/doc/examples_gen/error_trace0100644001741100001440000000045607327543074022014 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP can't open ../testsuite/error_example.cc - No such file or directory at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 107. festdoc-1.4.2/speech_tools/doc/examples_gen/handle_example_section.sgml0100644001741100001440000000076107327543075025140 0ustar awbusers EST_THandle:example Example of using the THandle reference counted pointer type. See also EST_THandle A simple object which can be handled and reference counted. A simple object which doesn't understand reference counting. festdoc-1.4.2/speech_tools/doc/examples_gen/handle_trace0100644001741100001440000000325307327543075022115 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=EST_THandle:example OP=see ARG=EST_THandle combine {parent Chunk=HASH(0x8104ac0) title EST_THandle:example refs ARRAY(0x8104af0) bits ARRAY(0x8101b5c) decls ARRAY(0x812daa4) type comment} // {parent Chunk=HASH(0x8104ac0) title Unnamed Group 1 refs ARRAY(0x812db34) bits ARRAY(0x812db1c) decls ARRAY(0x812db4c) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 238. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 238. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114518) type top} // {parent Chunk=HASH(0x8104ac0) title EST_THandle:example refs ARRAY(0x812db34) bits ARRAY(0x812db1c) id decls ARRAY(0x812db4c) type group1 toc } parent Chunk=HASH(0x8104ac0) title EST_THandle:example refs ARRAY(0x812db34) bits ARRAY(0x812db1c) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 238. id decls ARRAY(0x812db4c) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 238. toc gives {parent Chunk=HASH(0x8104ac0) title EST_THandle:example refs ARRAY(0x812db34) bits ARRAY(0x812db1c) decls ARRAY(0x812db4c) type top} P Chunk=HASH(0x8104ac0) P Chunk=HASH(0x812dabc) P Chunk=HASH(0x8130aa4) P Chunk=HASH(0x8130b28) festdoc-1.4.2/speech_tools/doc/examples_gen/hash_trace0100644001741100001440000000024607327543075021604 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP P Chunk=HASH(0x8104ac0) festdoc-1.4.2/speech_tools/doc/examples_gen/hash_example_section.sgml0100644001741100001440000000002507327543075024621 0ustar awbusers festdoc-1.4.2/speech_tools/doc/examples_gen/kvl_example_section.sgml0100644001741100001440000001441307327543075024500 0ustar awbusers EST_KVL:example some stuff about lists See also EST_KVL EST_KVI EST_Option KVL_Addition // add item simply appends key value pairs onto the end of the list. // This function is useful for the initial building of a list. kvl.add_item("street", "South Bbridge"); kvl.add_item("city", "Edinburgh"); kvl.add_item("post code", "EH1 1HN"); kvl.add_item("country", "United Kingdom"); // by default, if a new entry has the same key name as an existing key, // it will not overwrite this, leaving 2 items with the same key. // The first will be the one accessed. // You can overwrite existing keys by adding a flag to this function. // Note that this is much slower as all the existing keys must // be checked. kvl.add_item("country", "Scotland", 1); // This is equivalent to the change_item function, which is // used to overwrite existing entries: kvl.change_val("country", "Caledonia"); KVL_Access The usual way to access the list is to pass in the name of the key to the {\tt val} function, which then returns the value associated with that key. // Items are accessed by the val function, indexed by the key: // This prints the value associated with the key "country". cout << kvl.val("country") << endl; // An error is given if the key doesn't exist: cout << kvl.val("state") << endl; // This can be turned off by use of a flag. In this case the default // value is returned. cout << kvl.val("state", 0) << endl; // A on-the fly default value can be specified by putting using the // val_def function: cout << kvl.val_def("state", "unknown") << endl; // present() returns true of the key exists: if (kvl.present("state")) cout << kvl.val("state") << endl;; // Normally, direct access to the list is not needed, but for // efficiency's sake, it is sometimes useful to be able to directly // access items. The {\tt list} variable contains the key/value // list, from this, \Ref{EST_Litem} pointers can be set to items, and // then used in access functions: for (p=kvl.head(); p != 0; p=next(p)) cout << kvl.val(p) << " " << kvl.key(p) << endl; // this can also be used to change values: the following changes the // value of the pair pointed to by p to "Scotland". kvl.change_val(p, "Scotland"); // The name of the key can be changed similarly: kvl.change_key(p, "Nation"); EST_Option_General The EST_Option class is a high level version of the EST_KVL class with strings for both keys and values. It is often used for lists of options, especially command line arguments. // load in options from file. The file is in the form of one key // value pair per line. The key ends at the end of the first // whitespace delimited token, which allows the values to have // spaces. Eg. // Country Scotland // Street South Bridge // Number 80 // Height 23.45 // load in file op.load(DATA "/options.file"); // All the normal EST_KVL accessing and addition functions // work. Although the type of the value is a String, functions are // provided to allow easy casting to ints and floats. cout << op.val("Street") << endl; // print out number as an integer cout << op.ival("Number") << endl; // print out height as a float cout << op.fval("Height") << endl; // Often, one wishes to override an existing value if a new value // has been set. The override_val function is useful for this. In // the following example, the command line argument is held in the // {\tt al} object. A default value is put in the length field. If // the command line option is present, it overrides "length", // otherwise "length" is left unchanged: op.add_fitem("length", 39.78); op.override_fval("length", al.fval("-l", 0)); // This is quicker than the alternative: op.add_fitem("length", 39.78); if (al.present("-l")) op.override_fval("length", al.fval("-l", 0)); festdoc-1.4.2/speech_tools/doc/examples_gen/kvl_trace0100644001741100001440000000355307327543075021461 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=EST_KVL:example OP=see ARG=EST_KVL OP=see ARG=EST_KVI OP=see ARG=EST_Option OP=name ARG=KVL_Addition OP=name ARG=KVL_Access OP=name ARG=EST_Option_General combine {parent Chunk=HASH(0x8104ab8) title EST_KVL:example refs ARRAY(0x8104ae8) bits ARRAY(0x8101b5c) decls ARRAY(0x812da9c) type comment} // {parent Chunk=HASH(0x8104ab8) title Unnamed Group 1 refs ARRAY(0x812db44) bits ARRAY(0x812db2c) decls ARRAY(0x812db5c) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 191. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 191. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114510) type top} // {parent Chunk=HASH(0x8104ab8) title EST_KVL:example refs ARRAY(0x812db44) bits ARRAY(0x812db2c) id decls ARRAY(0x812db5c) type group1 toc } parent Chunk=HASH(0x8104ab8) title EST_KVL:example refs ARRAY(0x812db44) bits ARRAY(0x812db2c) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 191. id decls ARRAY(0x812db5c) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 191. toc gives {parent Chunk=HASH(0x8104ab8) title EST_KVL:example refs ARRAY(0x812db44) bits ARRAY(0x812db2c) decls ARRAY(0x812db5c) type top} P Chunk=HASH(0x8104ab8) P Chunk=HASH(0x812dab4) P Chunk=HASH(0x81309ac) P Chunk=HASH(0x8130a30) P Chunk=HASH(0x8130ba4) P Chunk=HASH(0x8130c4c) P Chunk=HASH(0x81325b8) P Chunk=HASH(0x8132660) festdoc-1.4.2/speech_tools/doc/examples_gen/list_example_section.sgml0100644001741100001440000001510407327543075024655 0ustar awbusers EST_TList:example some stuff about lists See also EST_TList EST_TKVL EST_Option Inserting items into a list There is no easy way to initialise a list so we'll just set it from the strings array. // append adds items on to the end of a list for (unsigned int i1 = 0; i1 < sizeof(strings) /sizeof(strings[0]); i1++) slist.append(strings[i1]); // add item to start of list slist.prepend("dove"); // find pointer to "eagle", add "hawk" before it, and then add sparrow // after "hawk" for (p = slist.head(); p != 0; p = next(p)) if (slist(p) == "eagle") { p = slist.insert_before(p,"hawk"); p = slist.insert_after(p,"sparrow"); } Iteration over a list A dummy pointer of type \Ref{EST_Litem} is used to iterate through a list. This acts somewhat like the index in an array in that it is used to access an item, in the list but does not contain a value itself. Iteration is usually done in a for loop. Initialisation involves setting the pointer to the head() function. Increments are done by the next() function. At the end of the list, the pointer will be set to null, and this can be used to check for the end. Items in the list are accessed by passing the pointer is as the argument to the function operator(), as in the following example. cout << "[ List Accessed by LItem\n"; // print out contents of array. for (p = slist.head(); p != 0; p = next(p)) cout << " " << slist(p) << "\n"; cout << "]\n"; // items can also be accessed by their position in the list by using the // nth() function. The length() function returns the number of items // in a list. cout << "\n[ List Accessed by integer index\n"; for (int i2 = 0; i2 < slist.length(); ++i2) cout << " " << slist.nth(i2) << "\n"; cout << "]\n"; Accessing elements of a list The normal way to access an item is to use the \Ref{EST_Litem} in conjunction with the () operator. Other functions also exist, eg. first(), last() and nth(). Const and non-const version of each access function exist, allowing both reading and writing. // Capital;ise all 'e's in all strings for (p = slist.head(); p != 0; p = next(p)) slist(p).gsub("e", "E"); // print out last item in list p = slist.tail(); cout << "Last item: " << slist(p) << endl; // but a more direct method is cout << "Last item: " << slist.last() << endl; // likewise with the head of the list: cout << "First item: " << slist.first() << endl; // print out the 4th item: cout << "4th item: " << slist.nth(4) << endl; // All these can be used for overwriting existing members in the list. // To add new members use append(), prepend(), insert_before() or // insert_after() as shown in \Ref{Addition} slist.first() = "Swallow"; slist.last() = "TurkEy"; slist.nth(2) = "SEagull"; Removing items from a list. Removing items from lists is done by having the EST_Litem point to a particular item, and then passing this pointer to the remove function. This can be tricky as this leaves the EST_Litem pointer pointing to a non-existant item. To get round this, the remove() function returns a pointer to the previous item in the list. // In the following example, the item "eagle" is removed and a // pointer to the previous item is returned. The for loop then // points this to the next item in the loop, giving the appearance // of seamless iteration. for (p = slist.head(); p != 0; p = next(p)) if (slist(p) == "EaglE") p = slist.remove(p); reverse the list. Sorting a list A number of sort routines for lists are defined. The most useful are probably sort (a simple bubble sort, quick for small lists) and qsort (quick-sort, faster for long lists). If the default collation order is not what you want you can pass a comparison operator to the sort routine. // Sort into alphbetical order sort(slist); cout << "\n[ Sorted\n"; for(p=slist.head(); p ; p=next(p)) cout << " " << slist(p) << "\n"; cout << "]\n"; // Sort by second character. qsort(slist,&second_char_gt ); cout << "\n[ Sorted by second character\n"; for(p=slist.head(); p ; p=next(p)) cout << " " << slist(p) << "\n"; cout << "]\n"; Comparison Operation Used in Sort Compares the second character of Strings. bool second_char_gt(const EST_UItem *uv1, const EST_UItem *uv2) { const EST_TItem<EST_String> *val1 = (const EST_TItem<EST_String> *)uv1; const EST_TItem<EST_String> *val2 = (const EST_TItem<EST_String> *)uv2; return (bool)(val1->val(1) > val2->val(1)); } festdoc-1.4.2/speech_tools/doc/examples_gen/list_trace0100644001741100001440000000500007327543075021625 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=EST_TList:example OP=see ARG=EST_TList OP=see ARG=EST_TKVL OP=see ARG=EST_Option OP=name ARG=Inserting items into a list OP=name ARG=Iteration over a list OP=name ARG=Accessing elements of a list OP=name ARG=Removing items from a list. OP=name ARG=reverse the list. OP=name ARG=Sorting a list OP=name ARG=Comparison Operation Used in Sort combine {parent Chunk=HASH(0x8104ac0) title EST_TList:example refs ARRAY(0x8104af0) bits ARRAY(0x8101b5c) decls ARRAY(0x812daa4) type comment} // {parent Chunk=HASH(0x8104ac0) title Unnamed Group 1 refs ARRAY(0x812db4c) bits ARRAY(0x812db34) decls ARRAY(0x812db64) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 268. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 268. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114518) type top} // {parent Chunk=HASH(0x8104ac0) title EST_TList:example refs ARRAY(0x812db4c) bits ARRAY(0x812db34) id decls ARRAY(0x812db64) type group1 toc } parent Chunk=HASH(0x8104ac0) title EST_TList:example refs ARRAY(0x812db4c) bits ARRAY(0x812db34) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 268. id decls ARRAY(0x812db64) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 268. toc gives {parent Chunk=HASH(0x8104ac0) title EST_TList:example refs ARRAY(0x812db4c) bits ARRAY(0x812db34) decls ARRAY(0x812db64) type top} combine {parent Chunk=HASH(0x812db7c) title reverse the list. refs ARRAY(0x8133b74) bits ARRAY(0x8133b5c) decls ARRAY(0x8133b8c) type comment} // {parent Chunk=HASH(0x812db7c) title Unnamed Group 2 refs ARRAY(0x8133bf8) bits ARRAY(0x8133be0) decls ARRAY(0x8133c10) type group} P Chunk=HASH(0x8104ac0) P Chunk=HASH(0x812dabc) P Chunk=HASH(0x8130a24) P Chunk=HASH(0x8130ac0) P Chunk=HASH(0x8130bf8) P Chunk=HASH(0x8130cf4) P Chunk=HASH(0x8132594) P Chunk=HASH(0x8132648) P Chunk=HASH(0x81327ec) P Chunk=HASH(0x81328b8) P Chunk=HASH(0x8133c28) P Chunk=HASH(0x8133ba4) P Chunk=HASH(0x8133cac) P Chunk=HASH(0x8133d84) P Chunk=HASH(0x8133ebc) P Chunk=HASH(0x8134dcc) festdoc-1.4.2/speech_tools/doc/examples_gen/named_enum_example_section.sgml0100644001741100001440000000002507327543075026006 0ustar awbusers festdoc-1.4.2/speech_tools/doc/examples_gen/named_enum_trace0100644001741100001440000000024607327543075022771 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP P Chunk=HASH(0x8104ac0) festdoc-1.4.2/speech_tools/doc/examples_gen/pathname_example_section.sgml0100644001741100001440000000002507327543075025473 0ustar awbusers festdoc-1.4.2/speech_tools/doc/examples_gen/pathname_trace0100644001741100001440000000024607327543075022456 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP P Chunk=HASH(0x8104ac0) festdoc-1.4.2/speech_tools/doc/examples_gen/string_example_section.sgml0100644001741100001440000000002507327543075025204 0ustar awbusers festdoc-1.4.2/speech_tools/doc/examples_gen/string_trace0100644001741100001440000000024607327543075022167 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP P Chunk=HASH(0x8104ac0) festdoc-1.4.2/speech_tools/doc/examples_gen/token_example_section.sgml0100644001741100001440000000002507327543075025016 0ustar awbusers festdoc-1.4.2/speech_tools/doc/examples_gen/token_trace0100644001741100001440000000024607327543075022001 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP P Chunk=HASH(0x8104ac0) festdoc-1.4.2/speech_tools/doc/examples_gen/xml_example_section.sgml0100644001741100001440000000154107327543075024502 0ustar awbusers XML_Parser:example Simple XML processing example. See also XML_Parser Any data needed during processing has to be passed around, here we just keep track of the nesting depth. Define a subset of XML_Parser_Class which which has callbacks for what we want to do. In a real application we might not need to define them all. Rewriting rules for pulic and system IDs can be used to locate local copies etc. An individual parser runs over a single source. Run the parser. Now we define the callbacks. festdoc-1.4.2/speech_tools/doc/examples_gen/xml_trace0100644001741100001440000000340507327543075021461 0ustar awbusersName "main::rcsId" used only once: possible typo at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 3. SP OP=name ARG=XML_Parser:example OP=see ARG=XML_Parser combine {parent Chunk=HASH(0x8104ab8) title XML_Parser:example refs ARRAY(0x8104ae8) bits ARRAY(0x8101b5c) decls ARRAY(0x812da9c) type comment} // {parent Chunk=HASH(0x8104ab8) title Unnamed Group 1 refs ARRAY(0x812db2c) bits ARRAY(0x812db14) decls ARRAY(0x812db44) type group} Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 249. Use of uninitialized value in join at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 269, line 249. collapse {refs ARRAY(0x8101b50) bits ARRAY(0x8101b68) decls ARRAY(0x8114510) type top} // {parent Chunk=HASH(0x8104ab8) title XML_Parser:example refs ARRAY(0x812db2c) bits ARRAY(0x812db14) id decls ARRAY(0x812db44) type group1 toc } parent Chunk=HASH(0x8104ab8) title XML_Parser:example refs ARRAY(0x812db2c) bits ARRAY(0x812db14) Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 249. id decls ARRAY(0x812db44) type group1 Use of uninitialized value in concatenation (.) at /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/cxx_to_docbook line 272, line 249. toc gives {parent Chunk=HASH(0x8104ab8) title XML_Parser:example refs ARRAY(0x812db2c) bits ARRAY(0x812db14) decls ARRAY(0x812db44) type top} P Chunk=HASH(0x8104ab8) P Chunk=HASH(0x812dab4) P Chunk=HASH(0x8130a54) P Chunk=HASH(0x8130ae4) P Chunk=HASH(0x8130b80) P Chunk=HASH(0x8130c10) P Chunk=HASH(0x8130c94) P Chunk=HASH(0x8130d18) festdoc-1.4.2/speech_tools/doc/.examples_made0100644001741100001440000000003507327543075017712 0ustar awbusersWed Jul 25 14:15:23 BST 2001 festdoc-1.4.2/speech_tools/doc/g000007.gif0100644001741100001440000000413707327542223016472 0ustar awbusersGIF89a)}}}{{{yyywwwuuusssqqqooommmkkkiiigggeeeccc___[[[YYYWWWUUUSSSQQQOOOMMMKKKGGGEEECCCAAA???===;;;999555333111---+++)))'''###!!! zzzxxxvvvrrrpppnnnlllhhhfffdddbbb```\\\ZZZXXXVVVTTTRRRPPPNNNLLLHHHFFFDDD>>><<<:::888222000...***((($$$"""  !,)HILÇ#JHŋ*`A D$dIɓ(")cʜId xRϟ5)d  H*F`CqJ:%〡ʵk.]뵬ٳhӪ]˶۷mK7p" 6񧐠ztT)dfefNY'4lp%4gԠFԞB4D5j.93 l R] }"6b I;V>cRX"=$Rt`61p>A=TL~軁"AxA5@Ni@I)A {+p1P=@I,0P]@ @M@ @/0@&HTq"4 T4OPƓtX1Pt@Z4JySUApA /PB=PP@x 9P f(2ThAXyȁ B1 x`-p`timA   З@k%pAǙ* Z 78 L`@EtGY~@]aÙYz:G:TEyn@U b@ߦ+PfuTq:Fu@yD1T lC Зʞ ETL耮0_GD31Da,pA"6OA o>m5"Ƿ 1w={EhBt {X۬CpǾ\ ͮ(þx]6{.*nvw jfML>;vLE$@B `| "1@*ʨ DHGd2B8bͻ/~BkAx`?а 1Q"B CP8` A@" |@@x# |h?4 r(–@ > hG N*@T G=6إk$'0%@ ! "! "Y ,1H !>iQ D'UՁ(@IPA O؀BJ"a Z}(:p8D b4JҒ% ;festdoc-1.4.2/speech_tools/doc/index.sgml0100644001741100001440000000004607327542316017077 0ustar awbusers INDEX festdoc-1.4.2/speech_tools/doc/speechtools/0040755001741100001440000000000007327543102017431 5ustar awbusersfestdoc-1.4.2/speech_tools/doc/speechtools/images_gen/0040755001741100001440000000000007327543100021525 5ustar awbusersfestdoc-1.4.2/speech_tools/doc/speechtools/edcrest.gif0100644001741100001440000000711307327543102021550 0ustar awbusersGIF89aqsU>U,LQQixj&qv8{Z/5???)'&^ S9B97.UH/kkl5PkُQVQ>!SzQ ҳvP...n2obS|Ơf((@!/,qspH,d 0~@ tJZI%K.qQAAzگRL%$hEsvuoB zIQG!%f jEFyG CU _FE np/E,pDFzxF eH vZBkwDL  SD^؃y^3X B0]3,h,@>PػJ@JB0cʜYLA%%AieH` @)&L\I#D%B.h hӪ]l]$dE!e˷ LP*@6#'`**\V\/C,aڽ9 y@i9G֚HLȦMܯ[@>^zSYb!"[7T(1SO<|-[QŸ?2",ЇD_!۸0K)}6RK5ef VPd<k(,/^@o @)DiA~v xP ѱ \fV—_~!E&<@ioQ&p)dSHD!DUwe"L`衈@ 2 ,`.@.@4h # *)ۀC6&5h&JAJB 0i& "ZꝮvrNL{Zl f餕𫵟;R'w{!FRyZҎk @Bګ2 䚚9zIPAQci %{^zo/ hNz"DI8к# l |i rȪA!P/AC[p%]ZרAy`oY -%2 i@ ][$O@T؋PB+`&ca 5(ꮨWP<Н4o>B"ls;v @e; #OyA8?@ 3x_UzԀVOrArDM٠*׼k#>V*,_tm.0X & !x G8( `0± u#88 54ؓ"p` =UC8*e@(SJ h VdAPKB (,x'"S`E+1[B@%)]``"j%-T  J8*NIx%S#0O1rb_j9&tBV˴#W2*Ѐ 9S t HCƵv BUR@Lis4=9:/36^H-U+e:̊fՐ h"_U/$kR0xiLUpP ba]Z5LJw dE@Yy( 3N֟ f+960[T0lS~|!^C[1u5d(}r=nX&[*܄;fٶ[x)a3B;^|paIp^rqMT䲥mX*67Z zTA/3$B l>bT, V4݀*`fuvUlMmqW"R .& iJtwYUFT-܂R:Ϩ>uS$fs0Oջw5`0v]dG lҋB)u 8lMl[bhshAfF-85aF )\`k7{P! 6Er'Yjqysm>^[pyu Ga  j~0B-j}ԜĴNHq0 x ;7Nq'[>9Iv}shTwIPaz5WiO# v5$lb_1^Z]^RliyKۥ^{@6^ݛ_0 ^d4 }~-|NgqJ,_n} ";}37xW~ ly GOm0I kO#O0Lj$s6!l(  [5:kg|p[7.w08BH fp{7BW+eї tW>o(@ nw\0-fU| _e+:FsCVTagw+%W2Uxp)pdrMG;؀WP%S"_{X `h}0PjC2Gϲ _GSag&Y%W _eqrY=EVSvSq6Z{|DyPWP$E>рJS 7j| VUK6|RKzgR(@WI[$ivE$ U}NjXKPlS?Q zXq$jX1eQVjAg>UK0y{KQf)&P$X؍SRf`7(.Ga&vg}bRGOMQ PPKG?uN6$sB>xqAvb[wtp2dqz1(1Uy[q3jH&Fh3 bIN>-cp=hKqB+?9!tI y!0g >p ?~SQۓ*dxGQ!oMP9f^ iܷ mt` n2"sM:,}g7 a@ }0uiqD 9; Z1ӗF N١W$I`GP3% 4j 0T٣WE$@`H4ءA;festdoc-1.4.2/speech_tools/doc/speechtools/cstr.gif0100644001741100001440000000132407327543102021070 0ustar awbusersGIF87a|?,|? ؋޼x BgL Ģ1P)ULǦ)<6jUi܊ǽbJl)|fG~`hԇVxuhWRItxy虩6:4!*sPs;s*k3Qgtz z[% C, Y=ʨ\[[NȘ|-E̥Hpvn\;Sw@4Qo8hjc.8XG7BN|$L^i\fGVHZrZI}"m©N%arhϘLK"wXD4*ԈdWD~hlm,[ J0Ybys^>`W.UCJ+0yݧΝ"n&nY&ٗx颾YpŮ~YkrC?H k̯#$6m$x ꛻8U6,SˈG`6ց[늣YkĮ{e].RdίM9ڠw~1TPJ So1*i1y׌ʰ݅PG`(n{#BE0hh\}H*GY*NN)VHسS*&WRv1^iȑ4e@FfctGfҽ gQBg5uQ@ygy'J2l;P;festdoc-1.4.2/speech_tools/doc/speechtools/est.jpg0100644001741100001440000001045607327543102020731 0ustar awbusersJFIFICREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 60, Smoothing = 15 C    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( )2((h((h(Ƞ(hy՟cCGd"X's@Er;?_X>AaxoO&X>A`k?O&5_B,@S"a@Eg}yv9ǵ_S@ EPEPEPX>-Ե]7NI4[4(X*[ 43]g]x)ԃQ?X8,pcEQџXT>;Ost?h qn|ytFFFm)~" M?|Vt rhǽUzz[`H 9F"  pGP"PM@5? ^NYVp>g޽79w̭AǾ3Տ*( tPk!qe#?+ƚfEmiwGX\⼋bD)l!R*#C$bD֋"({=\^D9:~Tѭ@Ҧe~\r>ӛg3>=T+ھ }+<+qj7WrG+>Pxs€:-5ٱދ˰َ+Y:(((5-s1SOIN΀t j0BF_IZxz:Eu= NERk<;4 q,CD꺝݃vc {8Hcgo{%9y\rs^M'${{Xө? |k2r>+Դh0<-n>ldO5l[c}SOJ:Q@GZ((iuhY XZNCE2ph^an#3HGp?/#=x&ԼM;J=1&Kc[0oBjx]dXM&ĜV|9K `9ټz& #Q}zy`j|5^}.@I?҆.oBω5)9vCLDy |~g3Vr SV?NG }Mfkn_g k&EFĨ1ZlPfh~ F9`GЏjx|IgĪ0<].}( T6^Qv+N8Zvֹ>{ =~mj9Vr8>vvA4\m .+TAN{W){_ew vv#!RT2A5c&m-I@Q@+85NKiI-Rgp@@{{_{6䏽X8ܓA(s2:Yu)ȍ fBiZiW9gb^TKm'Hι `u :^cAUڿ*:/ GmEҡr^H!럮k06i spobǖ6+Ǝ ndmc*Z^4^W+cM߼p?{lcJGiH-ƼQOaʞfzbv f2ݏZ>U8_.d^du$.WU&*r^OGwn#*ξڼ[Kt+"im.eIm?_j'{u5{+U?<\>.Uwz*c x$b?&Bg$SZGCI9j`WWqjbrZ60n vd?csfz-9=Q{Z}cGex G1Cڹǹ4^RĝE9i8:n]NG. !L㬀c?n3ȁcI&prwMI.[E3*ԈUM1v'D-Ypmd[s֊d@?v>󁚯, 1G3H&m+(g=+r<OZRcq(:0I k]k=;~zӃL8:W"8}+vht"@1Yit If@9;hdbQ('->=+$ۖBpvoZkX>5 +T-"zJ1(yuĵkrנ[a.b -G6~q6lkj~ i? P]^Vqrʧ?ҼS+ $V,A: AqNѤq._ֺX`[! x3-U|ʗ1HtNMi^O֎hQd2&bNk綟XHHd`wM:fG6? l,7o5χ#iFK{ ceöY*hyVN:y [ɦ8*ՄLjuʔm< ]_JOn4j0:{|OqС#d4 u"5EUŒ B/+° DSt D S((festdoc-1.4.2/speech_tools/doc/speechtools/est_small.jpg0100644001741100001440000000371707327543102022123 0ustar awbusersJFIFICREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 60, Smoothing = 15 C    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO?d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( LZC%ń<X+o[i77/`@FH vcY+^sEc;5$F6L^(:TM$}Auk4ˋH l\ } Mrwz_ Z8<8m#`ep/ּÚ: ZD$"=2mvE $[APjΙkQqpwyQu?ֹ }b)RK>r@#cvݢ ;GnMoZ$ddFT5Ӟ ͐1_ daAšX  4w↥vXoiX8>{ט|)c+| 9*m Q Q   + ]@)] I*yVO ` + ו"(  k  )UM@)@%0ˁ1@}1@Au&Kc<0`PHo(6%{"PkShYD@"0 A4ElPQ`T0L_,2 xS*3(8BD `\ &h~bpڧ.DAm6 [x-"lCؾ"7@49R'TIHv x4(+ty&dqKtiTD"Q4C( 2S|NXU;lP7E0D9NXSވD4 ,~ׂ @H0D PI.-PAd"B8PyI47;d% Â]4AGS]D\LI&udO F`rQ&u $;W~THAe0U" +Du񡗀:3`2}eKhA0 H.NZD?R`F8\X\e\ PL($Q#iIhRpN@H &Qٻņsi[AJW3n pG|_l31 P@i1E"#Nj "5Vd`|AU㍂LLꩈLt`P.DA-+p\K'4<:O[W݉7 <} eA[S)Ԣ0{Z~W釀+X@}@S}$K|̗`,2X,Ų8T8NYP(Q1}DbH 3a!@ [H4<̢$䁣`C3``BNaQ$B.Č3+vU$^&GTyL@T5)VLZnDAQ1{RP%: yEi(Y\:vv1q1g0i@ ovF(D(JK֘XA.5"R{ոAꋉRvRC0L@@|# '-PJ 5[l3J:EYtOZĜ<`Q ERJEAՈe|=iEBQ23(LP7E;.ʚYC ]&)$\ߐe.` = hZD |qmMcu7_7sHPhu*CcWX0i`Y*KS;Cc5CB,t3ѦSf^1d7D ~3Yw(7tЌڃ z\CfR j, /ɒBJX>i?o2!jxqD/P8 ;A", HRy1TeC}% aQ#Acn)q b̏ReK^r &1W<yXY/!44(:PNwaS鳦MM( HO < l_X  1L>L- YnJ", ޲ lkAR%6(Y0-)R"[X0c%x&[OqQ<4 j )$!b=&PpA @bS%i+khrH1V;#h7 t8ɇ(CPl-Z.(@1&.4Bos0vpsшR":i :94>/&p|X:&΁o9@^'| hrQ*Z[_}]8lhv|P:H7ĊL _Vq;,@m!:{1]^\]aiq`Cc18Y4̦_t2@}8тC6!qHIm, M`ߎQh< i䫅8I%-2a}} ZM2YB5Z&@::A #+f E9™b7 C=F&gj-(7xgVwYueF .Ӣn-x.c 'h %m` P+yoEq=er)# n9[I"1 hNË0z@l, Gû .oKֆGcpRe0c)6 C|TB0Ã׫sԔv^= =RQN9O=y#%pە$"ؕY0# ppbQNMwPx ZhUУe۵F( 1(w0ꒊUd]yv&2]CbG"EAiq9hPm `]m gQR`Ї'00n6 [6uUTd%+]}'LkTf!5Q6@V+3ym^1pE#owF  PHUK-pQ`-%4.z1ogpޖWY= gzv"x 7i2]-Zn,!Kx~ajڥL|m{I5VX٬KS`;#D)2;m aHaDڗ#n\kp+Nbjȹ_ `ABJjN䮔P윧AyqZ<RЩj=РPnᒻPJ @ aȔ?b [xk"( *,!J=4 ?֛Lm89FJ{R8CP,0-4`*DD1.Xtb4RXiNH"ƞqH[GXj$ GpI6}\DuG#qE!@C})Kǰ+#J0,A4cԟ0=]'IQё\ !4)DͧHeNXbiY-*mJ`v74>Z@ c`/㲲%r8 E'$2< ™n-{P@H`NsmD&*-Q8X|.tY$ܹ9y @J?rp =09]? :0a LbN=ӸTQ{Ht@ E-8bGG5QRItQ:ѫva^ W֩>B + i9QYEnX@6Cmjg<?)X.[j*ڇU,z6 [P"pj3"JbfU'*? i=KX$RmaYRu fZ2e\HLtJ%0i9`f(oK+4 SeyXb*)Y Δ]l!\:tU|dB%˪`XY&C-3(@" *06Ё+(e(Bcpic4AVhnY#-4u@.oO-CzjkFTJY{|#?˜D" pH7B9`9jY6qڍ-pJ,oQ]q=PѾUwHD*VA8Ƣ˲$ۗ8AҒ;>8W΂RR}Uݸ 0uQ2"A}2LLlA; ;JyIUBDN/V ;OJ)20-%DЩӗ^v [~GŭHa@IқWm$V2nY-Tp*ׯ^wQ*xKtuqlm*;2Y&{j7M1rɅ.va^0zB,\fdF'2'{Y>5_%d^ho"7;&03N|:+xhtz :yG'5s&YL L1HԸh2H)LC^Γ^{:HhwRen'So3emq)0=g.G&ABpw*qP71qP[^rkbJoUez@_F#P6uAc1EsbRN Bt{G\ppt3Pt7=PWQv&VFVv&7p Xuo9OFrSu| 0 ;!gDgaB#ףK<=>2Ihh1?ldVL0yvR kOxD&BVc@l8d^3Kdc{N&uGn>hS1ԄT7tQ0agPq﵈reڇ?eNJdzƋEb苫8dg u5 w%,W~cWFZVؘZhcPhX8Seh ͨS'W @X؏);festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/eq04.gif0100644001741100001440000000406007327543102022430 0ustar awbusersGIF87a̻wwwfffUUUDDD333""",I8ͻ`(dihlp,tmx|pH,rp)NF"ah 3a6wG{c]wt6}~4524seUefF 3x    M 2Y  F եn L үD1 Ϡ\ ` y0J1A E}_PH58wJ~9 ؑ!A $@/2@?G0 ^aLX$Y`FB^S(0KIJpNRU/ORK0ɄM܄MnƢtdw \em]9OE%!&x;( 0*m9Eh P(4-Zq1@WGa%j4vX~PaB@qA%v ":¬`!+ڰ*q/pmprCLkL⦇6Œv5 PmP/N7չݗBxP}SD2q_b߱Gܨ_% Wg? ʩw&y%vN( PARI&wcld(zrŬQmh4;$٨uH.JX4YjɥMSw唔|Q-fEe*{tNL|+<&r9m@[ZD2>lv%) 0<D٨, )":YN6mw`Tɷ!D%6vF6goQЫw JNZ9S6GVރϡNLXA}L' ǝU*E ,` )f 9'N?sf7HB @5$~q@+$1 DfLATDd2Iʊ&X>>'Bx9@T%%Dtu_t"6;iQ4*H c@ qwum Qv}@Zi%o6⍓"!P["7IVY|'-%ۡCZl)BҎC_ēf.+#` >5 =|A]{%3rl?L?@ 调 Lv# -8Yff,I(<5&=]Fh3hģl]8#H ' =)x7ZB3` {'%v}d&5G%I@Ԕ9frz:ͦa''A%PLd\Ms#@=JpXRݎv_1.@(^4Uf Tl+2*W83"^J׽f3^3T" FN 6d:Y\yN)#G6 #|WOF>r_\%3Yɘ}ϐd uV^,&GPC8\׭`Y氂pLgD;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/eq05.gif0100644001741100001440000000574207327543102022441 0ustar awbusersGIF87a7̻wwwfffUUUDDD333""",7I8ͻ`(dihlp,tmx|pH,Ȥrl:ШtJZMvpzZH$ ߴfN8Ɖ|>kn# |5~432s1_0U/P.~h~9 x-    : y,n  7 y\xeB %< 5nh+KGhpYʴ#Dp X1c ["$tJP~q < Eؔ1;t36%QB,TS6 pPρjK#ԤE8ZAFFn%Dka IXB+=}$9~bKZF'V^g 4΋dق'LM%GAƌ9mv",Έy ,N"{EQ?"B 4"n݁=x}`Za MP ̣aqa{#~ pY?قS67B-b&:Lb@T%I>Q- "PV3;L5XABX!IPM9pP)En<IhYe (q6 Z h :$-zjK$$IiVȇ^)*2*^C@@ hQGQAjf(7`M#\eK `a^@dnbW5Y~Afj `)*+-Y9P)@[,/ִv//6=Xji1]T/]ͣ@?Ex`csAIx|E|2$tŋ+U-FxLw!,f0ésV?:rX5dȇR"@#9]p<!rrEDPdF(llFfemqJgr61ьJf65l54ag[1g$4SΟ;aLN]l"!R&'Q17fbM'j-* %zPUPuTpB@ľjL4 R."8VMGeEVs|쟌H%,*uJJ^jA6e_[ͩc|R!= [qz\J g[62,66=zIi0UwWp%BRx:bk}1z=bA)(.2 SX+"\gGOp k c`O̺uƔ}qTbs ɂ&`/G@#9LWF<\.L90 _A@CQezQ2&"%TénӜzT (a E#]TOۇ]]?=Fvh4j ʅihhԔu0g(- U R-kuf`= ̻ D֬~#tٿczDV['h{RȊ_|ڦzIBy# +7W c읧o yz̸/7fLoܲhr(P4y4gx :j a Hh!z3F.t~tr8tC1SYS3; "xɢDիZqDIO޻9t dө\Q) Y˜fO;h͂ĺϝa`cUm,βSU22fyІ*岀oWry}[q"uI&(tul ֞X>^_xmdyIwg֢b6rTmU?9C Y[B}|>:$eA`?W`# &-Xl7 xz60@l&#QrOcJqU2>Pr*f~3gqtX‚T89FwSH9 pvm3>_W]5 J5كH_HbUQ3LJ`]K6f\7~GPUZM46{6u}Mw 0(*E;'0ix_Wq8j׸ha6bx;XhKFNd7 eV҈W9Yy0;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/eq06.gif0100644001741100001440000000431407327543102022434 0ustar awbusersGIF87av̻wwwfffUUUDDD333""",vI8ͻ`(dihlp,tmx|pH,Ȥrl:ШtJZجV x۰AsM'5<#|>~=<;:9y8t7~k~=6    xi  տ:5 ` ]8B<4@+ћ#@ 0 A837<%A)@.@)xRBtYx8c @n$85 x5%pw?zv W(d`CncP`%Ak ؁ D@)^ @pw)- d$}R;v0j~>N\YŰY~a9uR2X-fQ||]#iV]^gsF2}'+xxWfY]+ Q'@hͽDs%Z38!6!#H 5`HWN,4n5$a t3ά"c*b7 r&!rB3>qa;_:dB.VMPOS"J&\؏%eLBtJg 8QWK]miA>9X[%˥Ȥ6'xזuZZ=m$i9ΘQpZ9ssZynڤ1r dH%=H|,$ь tizbfTlЖsG:Aȣ۞V,27d.^DB䊾`fݴh|ιwOTȤ^g3Q6SUer-KƸ,U.mK<\,Pus3² (2i'[nebW5%so?\+S \4^d-/:TI10Y bpEd[Ƙ?$Op2 ,,RM^yw( 8/萳NðlN@] & 08ՄWg sA?PU3XYUG\ ICqS= +~QtRLğ"A?|A g& "19 !IO֣4KJ1PE]w ҉_SV%$M2l78Y+Z$?,s>*XexNz0 Ň04HO'D4 L>w`BJhjQ2|#ipt1y,(4 op,$G9O2ܩ!9B`pU"̀6Ɂ;z$B"I@T~8+o6nK2 ~ KW1`:B drGA3)d )c>f/죠PACJFQpΚUAZ%wsH7=@Djš"p@T?$?# T(`y,*Xjr"s͊BяXIW:$فE0YŠD("t Lu=ԣ`i) hvPQ~LD͗N3ҁ?oH΄?>{ӠRSK>d]QФR4)P{>Vm~u0vp,n?Û>B@$(9cx2Y#1f) Eo$HjPαu&0*aγ-`̀o˂b`Uq/`X+ʃWbCXUЀM|/ F$%J&'A(FiCeZpY1Da`+M>c3u4i "䑡R*ah\˂un.Sj_|5a0to\G5usa'06ceWFs d[v ]Em{Mr ;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/eq07.gif0100644001741100001440000001254307327543102022440 0ustar awbusersGIF87a̻wwwfffUUUDDD333""",I8ͻ`(dihlp,tmx|pH,Ȥrl:ШtJZجvzxL.zpn\zF`$~gt }B 22!10/n._-U,y  +     *߀(XP!\ >̵/7 ˖@6(A;̱xY,Ipإ-EN>i˃HF!9HσHC;su !}b`P`` NhF('PvnPac|H""rw"HF.r(2HcZܘJ$#>{|`8ÆH&}x_ȣ؁I*EޢdbFdvbIޚQ99!YL'fp>ꔥI 'hv5Zw姼Ta"D1jCƚO,tvzK k,0P~(Z g?hť-D-8X)D;)Z(!1VWw`w8O@ t\N z0t П901%qWP mGN?N+6,`K)@$M S6좀2,w$(p11tϾREUh5A O23HJ3>Q]\u!pMMCr}N.Z@D&K%dޚs 8bTװh,2UJ  z1z;ͳqs;!z1֥Nl" 4 =eZ;Zki4m8 G;o.2b<,} 1Ylb+-9"@tXN8@U.sdۜrFx`8 V* ,H45bV@ 6.%jCD +  !N`3 X0_en Je7WUh,\ ɸur,ǸX& t$ۘE:dUcI8ȸ$cȶ6:AwwP  p(9+"g'C݂FEa { Ϝ *,$N HjSҤwvnqXњ0pG N㳰;d>4gZ%e"Pm*[Y0iej[eAs(`V.Vx GX^P5br7wVd*OM ~$5Kqa'#2sx8ü}hLmҝBbqBeO%s$JSfɏ~:Q9w iO}Vns- TEބo| (X1]H7 ]UY}_[Wպ:K>.IF1t'Įu~:ݡN$ԔrX#Kp=iMndif2LJ. iHZ!v$KA<Tm9~Qy-/*2;t$E&Qc.$A/E1I墳7Mޙ#KU* )25 OTxi5\Ivٹ@ yq=&TspT.b@MP6u[RN8ጉ9,,hEKN]2.r. ZWHZҚ0V9NUÊ޽,q5,{V_|,lV%Ř%`o ^;=)˭RtaD֗g#-.܌Cd>(ӷ.Q'ѹ@5HMVֆwEzu!iPOXSdcWwq6x [Œql \vN~(;IՕ ]4igֲ@wX=7 1HhuK[K.ü$6yAx.wĘ7{ &Xtb GZP<|.#|$T+ ;bRJlH#J=ɜwwgPA>k$ 1Bɸ豾ھ\2@Evd4LXM,h/i!qKv9Iųë|  jdAGz+PV2DeŴof+),rulӸfk{:Ӱ᪐$لh^sxĩc輨r#j:U7+$70ԸB1CR?n' $t=i؇̧`h-F} aR$ -쟆Re5gedteQfS ,&,%,3:3;uXFy19AV.Gppp\RHrIcUd{5s^]*DqStuu{H [ic#>Qo}]d'yR[$iݑz'S )+mchzH_BW7d[$hfvqk@C W]= u,Y(|,# |HV;=ve x=THz8RsehX(H$x/t~^0 pj%rd r1+"i$9&UmSl7l<+#= zU<Y2C,CR%Ar}+i&phBq(D0GVA'ypC-@]&gFEUWNW\'T9(w'0 hMgHQ1S2A}Iu5|vU8yTI9GXE7 x3WȐݸѨSG^Y5U']p\Pba0V1 6g7'p}xC.75ܙcbi:yk 9ÀJdQTA+dV"`3VKIgh>h o2XW>ZEfHhU%yؑ$iqH1"`a!#8)(jf#+CB1zI-Zj7yPQ8gVvʟ9I}ʎ6 栧#j J?ڤ )"*Zr)\dXZ @ V68'$۳Ʋ9fBk?)H; :\F@PKKGj!O[!%㑟|\ ױ4-.7:R˴l-%Ҵr[tkmv Lr*̰gY[KY6+`Wik K K[ + Ht3"++`}T `@ƥVb @aY6vk1k v B搖U\`[0@\%!@ QmѻWts^y])p4I6gCA\!ȰH#H^,1 ہG!*y~ K3` \¿ ۸ S>t&N! , 4p5.'T72P&| =Eܐz'.:eR<< Αu^snU?x2Q#( U10cLU쫵a>TGsZ*DW̓F2V[B UȖ˻lLʮKl5P [ !X7F 8H)YJ)  ^}PyEØ;Aho!ܦp( $7cYT !Ac 7LPQh>% ]~i8iYh ̴D:ji #&AH=qvɊ=!7LƥUICUDqx˞FzH7zp4)VEtQQ xR{+·. @I`ig*=^ɻ=ݟFʎ{ʬ|]ʺK Ng;ߝ05"[&mʲKĦl,<] 0ٱ}l Btz I%3νQP>p:ԚQ%uPЌ; G22'Jߜߪ7y#Gaj ]7U9vgkPʋi3W6}1UYd^v4$\>tQ'gUg  !ik{ ~J@ۚmM}qs=DSeQ9xvXMj,S KU(+r\t5}í.rJk)Cэ+C롡w^ ֟[߬.!uV-Hj^NNn C{Z~&P'n~,9 04_,8:-5> AO"&E/)NPR?T_VX';festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/eq08.gif0100644001741100001440000000712707327543102022443 0ustar awbusersGIF87aI̻wwwfffUUUDDD333""",II8ͻ`(dihlp,tmx|p( x$J0zf=/H$ 9 4h ]5{b ' n"vY# `iAõ=̘Ȳ#chO\lv;NPA!0`B(` )P@hdS%nbE th 1J2)Z6ۙAXSPD3H&:% !FHP@@%+ 0JLՆ@vٴk)w M[§^}%x`r 2fRk-fÚk^g6CPB ́=-, |/gAl kO[i{{NkjӦ[f\˻;'(x ;\x3jǛlT#4@@}@^}uF~^$~|䗂 Rv7!!{u `.GrȢY.vx ƈ_ @9gWBM D(IIa$Mi@&8݈`8Ƙbh&𣅍g$v.I&OF)%VV@Q$pZ E0Z~vEHEǡnfb:fGj \ghZ蜉lU*ᮧ:j a"[m|ҨFa;,0ۀT56Qg4_7p)U";_2k$.|˽c<,YtU0#qv݀,m(-T|˨hjuJp@!f֏ Dvq~%35L~5M?.M򅐩^9Fu"V-4/6\u&f 4֒M0^=%[8EJM6p 9 5{j9|,~e[.YڸрP.tu~8&:s:_PI肓^ 埿~[ _6QV  * Ї:9R3`'83Ă qM<(Ls엾a^n(!Vh:>!h1ꀈ@"DX@@J M(BA\c(vMd(qǧY&|Q##pF=ج9aP&5hs!ӘHld(/0J^rsDrA c ĥ"G-ҟ]v?: VBj4ˆDâZ  a4+)K Җۄ%2LF֤1Wyp*S2<3k z :PG1 S f:G9"VI&gͮ,Z-ix9?)dj 4h8zRIJ(<$j$4(f"6* 3 o 37fR~=Dc@SnLԲui6I*SAxU/D;Ң:/iX@jPr6 W/`vT*YXULLb[,Υc@*PY~Oi1C_,eہZ,`) :vp,PyBpb-.'pm- RΊ u{׆,lp/DŪnߊͫu^r!eTN"1UŢ)6$Z"@W< 098uҙ@ (KҚXe.1vNlOWQDVn gL=*ǎ[|@9J~% .XCwyIl]֚ Je)7;e"LFU,+B(AE}, 8 q]b!4|-h$EMemfen& LcJZ2:=RHߨ7iK5e &J!zK>od\;ӳVĺΑxߣ"5`P '5 x&2ql)q^9KPE`gky|?Y;9='o<].{g@B|vg0X;d ' B!Y6|aYg!14w9H +-0%l]~`"Qh@/58 ^FBRu3S`B 1x1yZuB"')6 UUcgXT houY'57Segd{!B^ր"!4"OxVȃ0,H9QrgJk7 buЁ0`hiq1؆)Q'6H\8b[Z$Yyk&G]R8gr(%(`x(G%Ԇ2NŊN[CEyB)rd\Ȍvdi>^JhʒA؊Wь{_X,؍Ëe(RChT8/75Ž莫HfFcY[Vu2ӎ@/` Eq@8hO 1 )$f9r#9Y,Cpc)ӏ+7|:N3 1"  hF}sȒD )1(8!sddZ}N9NhcfYc'gXHZR/ARdY6Cz6PÖAHd2qPO}G5rb>rf2fsjkg=S9C:?(92:0i$eGQrvBVד<; `9h?=}Ӄ)w%"I).d@>c0Atq+锠Hl(r);ɛ)ɩ)<0|sn{D-#ْy!)˹(Y-i# ) H 0yq qt*WogpME p%*pjv,*(p.o wA3Z9Aup5,p=jKjCIYpC rO ;ڢ1*S AJMYJ00`ঘq/@Y ,d dK z|j ~⧃J/:Zzک:Zzo;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/eq09.gif0100644001741100001440000000757307327543102022451 0ustar awbusersGIF87aQ̻wwwfffUUUDDD333""",QI8ͻ`(dihlp,tmx|pH,Ȥrl:ШtJZجvzxL.odlκ:slf}/ Y gh. _ i]+\ði'Ygū0Wedɷكh#TrpۼP%4Sq L @ &"@Pᓁ 8@ONi/b\5!G+H%q\j8!#LIˈCe0JěUEDJ28x9Y HX뀀 P-QԲ[B t'04{V Xb#} WBful5†q] 0/Ppusgbh _S8ވa`@.o5҅AmX6dEX <&|T)4@@W} GqF 4 w( ا][f! 0 `( p/R!p 6|'@#J:.H 8AEl9G&9DL*WWPf(%VN\#*)!y8d"CQNi@p@;i',K$:r'XtJ^P6 RR F<^0$yY& tJʍZzi)'린i[jj)+zv>f"FN[E=WnV@BK{xWqASkR"%/|{y i{d lo`$0 On;o slA;+%WRL@j;7h z"Lk5|w5[HBTCznFbN?>wbjM5=Sէ۹+8GLD6  4(@9˵h*:}k4 9w* f~xi7ޚKkȾ9?P_z,BwMʗ} [hk.~ o= hzԿۏ_-I!Ał帎Ag@0\cQ`z G% `(L ; `0! mpA"'j `30dCJAEMaF2(ԡ"`Q0b`>b5@xE4N c;V7<0HdQsȊ| G +Bǩь3>rs .K]$Ft) { Zj8k#L,9 ,0KQ|ҥxgG%V%CTf+ɴ_2e/ L lFA6%pZ 3myhFg;x-zD3{`:fHQX TdrgG- 8LXEuemJ)<_ɕ04$Z*$E%YZҘt20eKszP[64I,@u3 Sz5*gUBa x6[6MI# 4mJyMvXdRD,(Neg )w9@{0,Q1VB]lc?KςjAZ֒J-!/ٶW6Dg: ݕj^)4d͸|l;[b `_f0GU!!歲.Do|wx#)%SczT)^*T-{w1삏+y.w͍pz3ZBJeqIe Iv` YeuBoC_(H2a#Yذ~cE1S) 7p~S3XdΌOdȞYAz ly;D '#)% Z"BM@KKOZsk{vi;66h:~ۭ#W$pB:*('@ɾygl\H+s4G"z?` @ӗ9] knlY' c^v0@JHxܐPGGT+OOڧ~#v.ڻ/ 9UR>{ħ=jk6 IػΛDk~]GH+ h> e#7Jk1?K1wE|3_=Ed_e2}c Tԡy/? w|24)B!\ dPAP D@A DD[` dDbāZ c@ gAX6a`!sZ B@#FmF&{:o)PHhf ]yyCPLn W9#-[PK1>BhR3G> MaYу@(q&Wd7|8}؆X{qFW Hiqs1yp  ;vvXW(r18\؅D@`.8"@2wQ xnj8Lb%b4r"Z8h5 %rzyugSۆH5 3wbCQSq Rp!ᡐߘ(9(cw(la!58Nd (䏊B!$b"NȎD&َ1;i=Y#!@T.$IeK.b&>pV YY [@Mi,"d3y_Y% 4CWQk'NObmA$1 V^,v_R'ivYt$8:(ْ?y"w98P< tYP)2r%VJR= Y,tYMFJ|roy"qyzL=H|D:I>%xٝ{ LYCS3(]s`" oVVoқ]b ù0@);$1zW)@ss +9)R;o7C/#Ygu&rZ}Ze CFVBkcyo@)+Q:)L*3q%O3G5slQʟVcw s|zy&-a:6jN.n]q_oϢטz-k+7…9d1bX$Z,xZwXy<űIF9|ˣNB<[Ti'S>̗HJ遨<=+H]0jTRQA=SR̮v$Dlؤc%L,[m$<7^{*{x⥁m=*T<.y,znugղk;ݼ{ <1Or\$lBsGKW~]K۫+:I1xo(o"z'둴^ػyuk_|dX`ݗ18a} |y酶{!Hb&b*b|Z0.U5HLj;ㅰ!Gb8. cQ"ʎQQ`V)1]^|vғI cnZ] .w` Fk lKPlnչB>'\n*8p% )L$g7w3r:;Yvܦt0VO' Wϛ-تȰ/fߴv3 zqvߍwzwxl[vךT6wONy_G18l/nz:h꙯z뮿{$vn㦏~{{|O||/|m}e*}j}}_ax[R-x9'r&OjڿERR80X Osa*h B2" ~&3  ԭHPNF9?kQ0CV̆(tQmG ,!1RVD/]aE$a1D '.p1rB+e~Y}( 5#Gx(,ч39ҢdO;ks`MX8Fm"G鰎LANz$DVi `(hh,Yh3b+nESiVR/ ?a,H519M:Vg$e.7MlV0Mh 0ٴ9ŹNtR|d2ILyⓚ씟WVZh

    $@Cw\*km%ZȘ]-'z: "f {ţ UÕ۷;wρEɢ,slYY6:B@ݦ.b1G")v[eY5lY*t&u0rImdmxnzo eKGͩ)E2Zuʱx,aˑ<9[Sf;SE F\׻K^,}TM62ީRO}H*%1 Jz UψH{:`,v:֡o:` MzI|M~o%+=[1ەF77ƫ [V_PKE{o^q]w Y=ow2gt}87w7ws6ݠ&Eu9R&WUwVr$8nǂсw \&Akvw3'uq=9Apc6pE OHUc2m&tBu6rm27+)AeG+&FE|gb(%.$wHTv`q.gr#Ȇgm7yt7ķwD]xxCRt{\+yjUtgYÅu&XyKv(Ȋhڂ{\Ȉ\aȈzzt߈gшDGCf4 4ܰ^bPndXʜ(Dy)ud$ Z:  u0j]sI`*eڙ)gY:j+Z$3hPDl vulmyŗJvD D!ZҫGj;hbhšVzpbG(IJD*VAspE91j*J+#d)zns鹮6Vج֯h)qg7ꐏǷbG*ڰwZ2[ֱ=V*;ն"{q.;(_:{8q6وEKhܑZ*SKjy:s:f"Wnõ mUik+涾FcKfrk"`K8UFl jɺygk{"&_[KkŸ֚|;%k󹒻\ַV  [6˻Zպ{8Rzuq3 +ּx[b{˽ +Kˍ5CѪCK=ZOK(@;I0J\Kni8 x̸3ewKlZ/Top܄D)Ms|ʔ$n+| ,FscmӊIBAܸD4G"PCDEPHM*PlӕIZb̓vd% ǯ^ܪcuDjjdft[̇qL6n\,i*ȣ8/©7|!i6ኵt×,ʙlNRfɆ,&㸱sį<3˅z˄\ˤ|Fˬʾ\ɒ,~9LY̸̺ \̜ʜ\uYTch[ ;4ϳ\m оR;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/figure02.gif0100644001741100001440000000552307327543102023307 0ustar awbusersGIF87aK,Kڋ޼H扦ʶ L ĢL*̦ JԪjܮ N)}qVC(xbXxHY0)iҹ Z8 !ǁjڊڰZ6 j˫K|5 q\|4||<=Mmt}-^'q];./</nQ﯂.l 6ὀ!"Q8fȑ"AJ)W| 4̬3Ν<{ 4(5:8pC;1<o,sh8ao;o葴Qi}Ƒ7/MC` HаL%]k7zD‚JXXnU4aa^\Hљ 1RUhg,4u8h(u Յ󫐎@JW1a *p\XF/Llo\rt ~B<F+c [tD'j=shOXS?Ѥ83b/ کjv9Z.E}R!y#5fN\tlQz~ ;u#׫{O"D,)&v:Һ: >:;<"ӎ&;˞;jXİoo7sr/_^3[e+36/??<@뛟җ=D oo#!Ӡ۠$nr_⠮Qe&&T@H9$ EȐe!g" ujƗ6pS&=4$&)>zTΐD)NfFUY,nmU/ *2S\\0wKDLf$L鱪фjb61=.Yΰ Ӱ:kB'@+PRLOpiMy5CX AEKo.Q"<#}$6MS^4 _)5*Kmb7` áV)BSutW+ԮVe9Ĥ+N"E F Xͯ{@Gp6˪?H{,fYJkfuOC5@84bUV-E <-;{!\N6 ]Is\#k>iTGo"lC$ Roxkb ɀzdzW9dUrmHg2moJf]V'_H4eoGC (2+k KIW6 swL^LaXL0D|0XN8fm8 \m񈉬8Ban.PF=O?"}M_<0… :|1ĉ+Z1;z2rH"4)BYWL}/78Ν<{ 4Сn> %22SԍS Ut֭\z 6XYEtb7kM\8suXw޽| 8`#ynÊ2V8an8[9͜;{ :ѤK>:լ[~ ;ٴk۾;;'M7pO ǠMGI+qS)ܹsOu{߈XMzIvjܘ/F9@hY<'he.W{1ZpY_馧)] boB kJkފkk.0k$r#ajj,IM .H)t[{mv:. 6*Ry ri(N:%!ٮ]oI\ kïQ# /a  kh$(5o2DHY\r\+K;qΒ2S-քLDӜ6] ͵L=s=p[qieI(mHQ>ĨMbހs1y2^wF>%W"zf]㧷:k3?{{|O||/|?}OO}_}o}~O~柏~~Oߏ p,*p lJp/ jp=-#?4Ǥ%X99*#K*A$ ƈ,)OOL[,'3J$ƕD-o\~x,kU:Ad,Od*s̄1JX2<滌9M<7 ps,9ωts&.N*J ڥfyuit ;9=Ijű&3;ֹk$7QMeϊ;<@m$PEu'T:׭2`crZ76?2)2QNYmilРjtK*.)7UˡФKS(bt_J aR-)Thǩ|q5n^zIm(ci_U& PVbQd]LaiQ -)P(QYiOԪvmmT{U13X.LqVmHGY+;l:ӦZ'Ti!œ&]!zv3Ű{ْ\3z5RiyެAsE Vor1UC{YWCrm ޤ~5bUՒ >.[(</.K-f(5n ,ha31W;̟`R8PEXgҩ|-y͚T9' fCzo!b=02sdp<8n]lD61/(0ANꦊhqNtJA}c̵n+2v,լVYݚ.ծXZvl[{^ hK{̠cAlk{ܦ3];yBgs{J#鶻 x6|O 0_07Mn`=o Ep~u<)ݳxp>Q_=xc;ׅksď[r48ŵw^#o,n/=ù͐c4!/Ep;Zs>qșFljYUy[?EN0.^_سgbVsn ~w^ 1k/k~?Ћ~/Oԫ~o_~o~ /+oKԯk/Ϗ͘4TܯpG8q[OseT o$^h_paDPdFa0[HDo]D2Ɓ7(QFFxQ5B$8/`e ؂68~:<H@DuG"ꇄIKȄMxNJՔMTQnSXIVHO_{X(blLU6p sWmgTwtVfhvɖswh:`4 \$(t)3يҕIp]Gbu(V񙍹%eu&fxt9xyEeg)|e>8ũ6_/{ɓZhٕY`ɛW64:?;"ՑH-vSU1v92W|I2sğ/x!BP *Jj["dpToe,/yxe&_ iP%*2+fӕÂrrI憣.) z5(wqr@ "B:Glb'DtUv OW tZ)\ڗO&SsbjdYWESwhlZx T%OޕI^Y&ÚHirTbbE$iəi7wH/o(kx3H*% vӨ򙩚!S(jw:7x b4sקJÚ Yi-ztj\v2Ūnp*cz)mzdgb8-Z$cVaiWctWkAyWygŊ\YxfRv˱ !+#K%kW;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/figure04.gif0100644001741100001440000001633607327543102023315 0ustar awbusersGIF87aAi,Aiڋ޼H扦ʶ L ĢL*̦ JԪjܮ N{XGXh50x(yɣX *x)zBj`  ){kٚ닺 K\Lh9l -=M]m}]Y=N(h$^Ծ?3x9^? N/HMR/\s*1$8}?& ѵ 1D 59Xz`L|%4'u)d8?l1$I>q fK=" 1kDDA5צcmWVԫ qUR gx]Q{E_~Zw]a>V/MxSV9gfɍy.Ѥ?.:uǪ[^°R nhs z08guAۿ?~ ԟ&vp`J$h8s/9uWa~b9H'D8 S*Rȡ.V7Hc>dIA'nӌU#Pd}Ene^eTZ^M^iP#jzg hF)gSwֈ0(oYHzfhni#Xi% Pndj>iƒykJꮾV檍Ɖ)l.l>ANKm^mnm"TfԸ掛ǹ. Ct / ½6q/LpD˟5۰+1SyW% q1M# Rrx'3б-?2z+8" `߽u5StI]tHl0K{]F1,"W\W[[٣朲_M;m]?jxDc7[,7߂ 6 k6(uֳs᫐M< w܎댶8Z>9-=8뢫8bb^둇N26zǎ;d5 ᙟ.<궣,S[o{L y+*y4<#Qzh>7*Ύ>O| },MO̠fIW ?cwtBG@3:*Ǩ*=FPRiPN Ԥ4ySJkSPTw]}TW=[ճҭv_a95eV1V=QV^K1 #hםu\S~vflU2n)Ye-]MKM.qWW[&h .o{k6sq_.R~jUIJ7kRNrp%o[^%z[ZVl]3u˂r_k00_c۰ax-wMFN8Dqax?&v̷HT㠉a\z6{1~vőRd3֒eD,Y,ggmU2M33d6JC#5YDs{,3R "sp`h.yÑAќ{4s.ڪ~`:]OO'O eP#գV|YRG֮1%V_Zּv!k.d+{%}^˒,^J2]m^ܺ"ɍ,o+Q;wi|{ |G >0An,HQE:pZ.vq̄=~>c\1/Je4;6KF^NP͜zbp svGQak3ުa\pMY/IAKv=!WG^mf'Y,~4{BJн;˕OyEq| nnYrpv=+m<䂺9sz}TROأ}#{%wE^'/aC-ͧ~MOkWZp1ݏ#a7D]ϪMVn>Թao(w+ضX ӠGqhq4â#"tBMXS m  #"H,*W5(#/؂&m%=X ?8hHh7(!|r&U W,*ȂM8`1KxGCƦo q(@>8^( p+w8&6~{Hu%/хa{/6m(4h(' h}xx})8^(؉2SA9T 6^x(+YyȇrAېr0Mm ׈wLx x'A~$  Ct~4i1w> g~=v @JYTPjafAG ؐwnle9Yuؑaa6b.aqS2epk-&t1Iz!3Rr1sYǒ%WV'*|I]${Xs2|CKqƐمf6T #64C_w\xő;拯^jkT %`i<,CghdZRd7|^S7^E|YvrvxfgmYy[YU'icQb9ty)_喨ՙ隐\Xda$9vIUɚS降Ōs&)TȌ䘜 rCBzvn*F]i/YܙdT5~0dSFq*&SvCĝdY~ԏDM eJy zK՝f֞QH"tUNSOTeC5ĢWx zSL4eԢX&P1G# ~0ʣ6ip N-A:5TW픐L9?TMj;Y*^.%hUzWj%ʠNFLzmWqX$OPYE R'%R_d}l 3I/1R|LRWYun [*~C|%u^_"TiiKgCi:馳 x5Uʜj۵`%ڠiX+ڜRǫ Y١VYsY}*٭zZy)|}]j ڮ*ɵ::ʮFz ^ʬ}F )ٛiȭ)VJ׺u1z{{Ŋ*)# +(J e -} p +/[iG Zv k9:Ceky[`sIvV+2cgaQ[C&BxP9`0V.Ɠ\ٷ1zd{W1t¦7 ji3а+tJ;`:mᚹJQ{%[ ~˲+k +KOkX,K m숂x;xȼ{?ȯۼKʸ-īH4xI؇;Ⱦڊ- ҿGVK;OH[P8\- b  brD FеԘh(-|y\nFh6-ʐUHiYM [}YX$cͅimo q-sMumwy{} ؁-؃M؅m؇؉؋؍؏ ّ-ٓMٕmٗٙٛـԟ}4(-ڣMlзݹk1Uq+jm=&]ڵqD(k@Ma]=W)Ccn"ܼMʥ Vϧm<}~|e橣;;ŧ9K=4EQf-7Vїl1~df뛈LW-JxFX J%ދXG~۹ n8nxL!b֦H>-%Ž3} Z@M{Ǻ ޿)r}6|k):Xcwf~-gPے]A\ Op yنĨ}d@ƌ=tu@n]^<QdrZ>{v\> l u2vӂb_w.ANL.oWmwqw?i1}x}~zҬt~Ay1ݮw9KЍ^!B#K}ҼneJ/]> u~;l륫9 hˁlڌN9Enا->L.;h^en<\rl}LpéL%7 X{:x l"  .,熃\2o6rd%Aq!?_e =*/@,Te1}.D1TGe]>?z]gvZI_~<4/ b_L&jd#np rUm^BQf6\>2EkmI܍U|/߉ni5֚ݭ<̝: ֫T?GoUr~R,ɯaOm OH;ڿ<Կ-{o//?\_O@O1ua<*q֛wP<ѴTmKAO(!ɝsdVgZYa>\67ivc^jK  &,#S0u63:o@UD9=MOdHQY[]_QUagikmoqsuwVGy|脁5a/qy-8 A)&L8B8qAqO m}/ȍH0ʋ(;q94SZI !DtPL:A4TOżD#Q]8>bhl[{A{6^M]4nK:\IT`4:FrK‹/e!?Vbg!v3gWZM´ؚva p͵#\x$$X+,{xs3cnW#8:wdxOgQj'=l6o@J1>~O"0oD-@lM9#|J(Y_$Ŝ^JN<&Tm1&YD!k#KqDKTEE]`҆K%I3O62RMj' W}vPRϼ5WVSn-鄷V-]q=] 4^@|S_wH[BCT=[5\I޴ݭW{ XᐷdmeilTTQY)6I~wևYd*VAumfr-ͤq1.❣^rW>VM ]]aNRnBCiJ=K?{I{[@f={::+g0D(y?xt;{㯇{>ҽ??]_|WMw(S m=跾剎hW6)%`@p0qa§B}% A:Çpo}B,zhEJ\0C'1WrAsE,)ZnCڄ!"h3p)@plӈG؍ HA4!ɇ>&#!sH%1IMn'SJQA4)QJUa2\+'’0+HZrU /2.ghLeC\3dBԐfgfSn~ۨXNuBb^jgM~N- 'vFiLA63YHDC Ь lӄE)8լ8G]>IQ* n.2-e ]-42yST;)`DS:C5jpzTbKu*nT4jKjën$WOXC5J%YEf5mu[WΕu]W}_X5a؇;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/figure05.gif0100644001741100001440000005177207327543102023321 0ustar awbusersGIF87a5b,5bڋ޼H扦ʶ L ĢL*̦ JԪjܮ N ~'7HXhx#0p pIV7Y c @6zJz3k[[%K[v{P KlлI|8K$-]-͝=!H>?NA?#\P0C\ W_3ztl4v-xGI#6dpmD=ԧ-!htC`-eWrΉRMmh5 ԥЩTCJ骪֭ '“_ÚȒγgӪuƖLDՄ4RxJ~69fcK@{rY^[0\M6&'.<:-zRm_v֤kGrf{%/|eqεw=xәޑqٓ__֢|ם'o[u (^``>aNH! p bTuU$Sl8x!b:˴%Hي6ވc:!>$}AI$E#~($4d7.=68BL"V~ fb"fciɦvGv$8(fZ"ewbe9cJYhʹhF裒)p%N[5)' * k*kwk~j"뉱8 ^m JmZmO _O>}/E?:z<{oߋˀ=٘}קoCďo>%| ؿE.c HH/-@`0`v#3( dG@ P/3L Iʰ9)R=PC@_ o#GLab =KD7 kP"!H/*}9hctc^άqstGQ~4GjD.:/~d#x HBfk#sW1cFV ౓d)cH4ҕK-U9EQ5(Zn$,!IH"0c)2Ӎ4eXbRә$]Aj>< 2 9Q"hR3(Ɣe3Mh9-qL~ҟ֜6sNt$ I˂v,)LΡtg<s,ў(C~'h!A9M\4(BWP4hRt SG7#FŹGov=f*IP9iPAFg(:mHVUձv jXNZ(DɉnZY׏u8XDdE<5fT,G$2֮+j^yTuacT-=hFRrT7^vUjR,s=miDUMlnە 5nsK\>t. ˧Rq5-vMpjh͋ZVA#wu9]Wo.}mUpv׵.~ \^W½o+`Ѿ/| g0uhT#mz aX+9\cߘ./󸿽#r< '9 -w[#KQ.]{Ds"-s2d¬1vf6Sure {γa\4k=ި fv](~.@=Ҝ? PzԤ.OT7n76XCL֡K2Zm޵f 2ZgwhՄ _#{پ`g{׮2vͤ]7gT=)k&7vtHv hڦw٭WhƷ~g[DHm)%eo7<1g|Y83w"DVLXCk?樈9n;:gS-~n%_7NGɼ_=yӟtK6S[crZzφNrgU쳣}j_>rG]pWׅNc]_w ~wa">Hm'KdqPv<2ˋCYU~]^Ҕ7w }ҁ)r /xz |i^0>gbе)t滅}׳A'ߏ; ~Zs}d ';|#;m >&whmx4yas9F%)HxbTF,vPQ.(Y$(LG[UekK[[څ1+c˼›㦼kU۽{K6[;[zBڧJ;aKNiu[̫k{;;ዯ+Kn!Fa7,|hjR[,\f!ܿ% zG | "+57 <4"*#*{ |Ɗ:?_8M żKb xr=~\Ơ6@Dlp'g$>@d #v@eܢwl+25 {LjʾiB Hvt֓#-'je+ȫ3eiɼ;?Z KmTz|Ajcx bTHQ c5lbZηc|"9Lê,(*+F,ov"q3\q{0}e{ gx|‰(5\rp̉j п<(t ǟv\+W6z$ݞwѶ[-yFI{'7)?%}/[:j2=B8 {6_>D-{4FH^NJVX :Y9U-lQՕb֋6^Z`=;^ d=?A}G]Wh}Mc.}]{}=ՐMmЕ퇔m2˙ ٟ-ڣ=q-NG'nr+xک}δ!`kk?k ) gܡCŭ~lɫУ֭/ս 3,ʲq> >MC6ޕͳڻl]km߷mMthvq-w= o~u > ^ n=e/];W4;n*9@+6~2't,DNM>$^(FoByVa>WN[Jk.}\pHu6i^N;|e^mg~;.N>wԜ烮s^z=Nn..켮.k~^^ڹ~2.=^nwlNoľ.ڎ^N~6/AJ 4"!΍tMm8O9_44о\ʎnnL oBVWY(_ObOe[ovYjq/$puy+mzo+yw{+Tm-քԊ?Op&@]ԀҐؚ_m֞~xkiOD??oט?_j/ظ_O_ͯ_۟֟؟_=ʬel߸ /?L#aӨEq֛wPOCLlA |P )Lۂӫ %.û+GL1:Ulal$aDB1c:Pl*R)!{J*C RH$(,s3l|S,f0U%/s8InN™Oܡk1:Hc*eN4@Ew Tԗe!U*4ݔSD0QOX5_UUد b_SvW=N]uV&u:o^evYqA} rɋ[u]_ɋ\w{YF]s-]dURvD=]q bznx^99c?Wň_Eik /ng(Z?u9Yt69+ŸdWޗ5^%F|zhMza~ W>)sH╇ZE{x{xts>zݞ*K{1 }S+csפĿh{[R|kv=|+}^-M 6x.i0G#$l<v#՟0d͐,DJdKW !Wt#*M" EX+"?bkLI_'QSfDqؕэ-Q&udpE81Y(1jqmI-SU$!H!%M$!̀ 9ђ< Vn\4@ RF+@Qu,"#y<\/J+/]iQ~X&) iax9҈&/Mm&$$IpD/?e`g;àI*S'>cyT\aXg̓.ԝnQJsa M*eMuԆDEoɂ3٧DR~hʖ3 mJLgQ4$Z ONT)F LOQésT4jh\jҊbiW*&5eeXͪ6u Lj[WΕu]W}_òM#la!vX:L1@E6awWv,,:ς+J۴Ӛ*:[m8Z c垆ڪ 1[[6Dmq{ \D=+{Pܘ:ʹsцWBw\Bvݪ|x{WNXEtKֹ7-m}k߰/l7`pz\ m/\ 7„0";.jj^bxp1a2IL 8>)jLn2m$דoZQ\b 2B3AU.qM`1 f1)U]5skW!w]-ٔHy~<FmrmSʳZ\8׈7y؟u{Powns7vf|6e\lyⱷ_^~DOYƹyag˕k>]ӌ7+ {'ހ7rc=wr~Sw--xroŶ=1'?s\ao|쓾/?Y>;~OXO/H//Oc"'PO+PCP6PPzO;>[P' ُk0ma)ap{whPM E/9-T2\^+ʢ _E -Ĵ_δ /, ?Oаg GGjP>S TD#R4UB&-UQl8b: NsrAk@af\Q$?&Mu; Zo%Ͳ*ggCTekvi@h30jE4sv@sj/b2j/iͶwV92Bl6UG;ykS-Z4Vbvfulg66_?ovbvu5Hiam!< 6#r99ϱ3;&wutq5M$6m'o7kyr:l=]vs3?PcW&uun2rx1vuXWxAvWVtIoW g(ve9wsO#ތ{A|P3nJL`%#*b"0".~w~~W~7W뷀 kx%xX7Zo W(Rs\W׃IDE]Ka6C1pawduhN\u]ksg8WM` vu0.X+mYMwAxS#mkxf$ ?8qD } T}&424d&҄vp(.w18bĐI8xcF/NoLU"f~`PsFz=@u!k` l?@YYYUOy5lnVqOCYstK0ҐUЅcaK)4q-U[XWV؊5Yڙ9y#X5ZYFR⹹U:Lx5ҴS*7MbIm{O{rx.s3-'uyOΡ[FU?z@9-zr{tF~Yqcid9Z}񸪗ڑ榷::X[٫HJcYךZd뺢5ZGXGMC7dqYWI)v88 =Vse/ۍ4{$H%@=InGt?#{v?{Ry6ng[;;ճE';$d¸w$Jvh=ن_+*7aOi/pKTz`ɱ9YEvd;h!w;; 0{KBCJUaռ|;7ɾ{35<vM1[}.i@ ٛxW<{fߛ_ǡ_uđGŝ\<Gܵʵ?1<+\|_;˧xRHܞ;|#Ӝ Γɜ3v˛Sj}ˏϳ5jοrj7=υ*۴֛w~ި_i+`\Խp&R17z7zJtA(RooqYvv uYRkm{q^/w6 w?>hR (#_zr E ?rRVZ/?&"Y'+rKvp\7n+9t #2l3*6vjQ.8,V]Lt^_@߱-oazco:` ՟a"UHD$J&g'%G)@gi++nn"h"0 +p/-spu1655tSlUL2v:gx*yzt+8o|)oL\a: ^2:t 7rܗbI㳁C1g F#ʜ:+RIT1m=3ğ8-ڏhœ,W}w*V^,R"l TFz*,G[UiB7M%kOnˊۻZ-Q-R ^Z8.O2NvJrںbZU;4"7m1g=Φm1Jmw%hppa[qMߡd3HΟsݳJO6ww%8o}A_o,{Wd5\郗|!]fo2vԃ ga; w6pdɊf b G`7#xɳgP$PIf\yam3$ɘL2i`v4E q^T8H$i&] beqyBfPf*V!*Zh;9^;nbiHD iq٨<) pY%|Zꬥ**b*_v(vJk)+e$lYs,J㥚)(.nvi'ul-Qg/ʩs*{ ˓o)W[|, _ M߿"G1rl29`5i&6s-0l? ^ I+rKqKK=uG7]Tk7\5_edؽ*9l$ka}.s[Ȫ++a7rG d.b؄quڸ.z;؋$衋>:饛~:ꩫ: W-Kj*76G;h.µ/{C>><}-vNSOn]'y\K ^ܷC?Zyjy;h6| P4gE$u ra '3! S.|`(.w4pL`ax foBC$KTE'FIh,rq^"()Qa,ch1_Dt(9ұv#=~# )A<$"E2|$$#)IR$&3Mr$(C)Q<%*SU|%,c)YҲ%.s]򲗾%0)a<&2e2|&4)iRּ&6mr&8)q<':өu|'<)yҳ'>}'@*Ё=(BЅ2}(D#*щRh٘FэjܨG9ю 5)IOҔt.)LC*St+)McST7iOySbF=*Rԥ2N}*T*թRV*Vխr^*X*ֱf=+ZVoNNUTR|HcCMծM^u@QJI7"ӱ_, Ȳ K^)UBk*f5qD/OMS"R{el2Uՠre$=kEM[kBBŮ^¬n ^WZƕMPyǪWؘT{d ;'Kwq FXԂ+*f=aj&8K,#-?Nb0dj=<vta<Dcx2.Yݮ~OܑFe/&vVb0sXZ01 5Hv9Et26K=OH3!g$<$lw|eERX.PG;~k4֑v !bst^01jz`'Қ~5sjO+P;vO3֨~AVAG{Ah#GwfvSm LPۄVvcT[bjٵ-(o/Kp٭H;ƁaKlIFnoYx֓|o|/oJj;|=?ʚ+N>3(UD~.&ϡrpx^3`B<]ы~u'J2ܞ48+NfKB.NuT `Kjۍ>v:q{~»Hc`vvgW:wK~t_ !GL<*#Qo쑟|ߤ_Z_c/ޓn~od=/˿}4ş `65 k< *HN!] v~  `5`9׭ q`\ i`I ![ 8N Zj&!Ně`J<[.ajVYYa!]!f$M&N{4 {䡪  "缊tسKb R!"$n$^:vz"%r?ebb!vb%Vb+ #b-}b,"")("M0*Z)nb3"c2.3J0 4#v6.22pb51n(:#9ڡ&D"$Ϊ:F#9nI0c8v}8}A^5$&̣7:(敚dM% >$/haF"VXBdB":4C:2K}&MJ@ GNLDA֊E^\>6BzLqMe'&e^ e`ec.xZ@dSV&!hZ?NZ%H\q\Qh\eO&̹"BPfKTL&a%Y E֣V\f#`I&oeK df_F%VM\hreAϙEV忡k&f[ $%5fkkbgjfcLdVL*frgpVd fWVs2ft&tglu~ mS9PfT&3֦y'gfXp2Dzgmqd\§șHKu*}OAb}e&"`c&/lg4Npڊmڋo'ma%g`3H6qBhf6%zhh:( YP"ڡ"䂎NhKd#[)@n:hibi{ZiyJjBi:R钚iN2)2*ihii鑞cםzii"2\Brj W*;F)j:z**֩jje.n9j~j"ꮶjꯎ*M ᤮ުj@u!&!&)>j!a"v璽QkEk堽tk췒`""|ha>,FN,V^,fn,v~,ȆȎ,ɖɞ,ʦʮ,˶˾,Ƭ,֬,,,--&.-6>-FN-V^-fn-v~-؆؎-ٖٞ-ڦڮ-۶۾-ƭNG퉹 L* .4 .nLΡV֥冮Dg.VZȴc.=Sְ.]lnM\.R R .7/ܡ~n&[o#Bol.Za܂nV"No!.z2o$܁֭ r*6mjo6cf:k/Z`*-p/[,I06C0f%UP wQp P 1EqqP W7f[͎`Z;"NJ]'6>I,ed:v$-ks~ K\NfZ .y "1eGnOкY%O 1jkp#_ "*C#\EK/+a.)%űY:!0 (2H1sqdfT3Y36_6g37o7w38$83993:: .5==s;>3>?4@9s ޒ4ÛA)4<{B/4O3r=2}jv.4c!>ɳHDfo\2%M21ONcn_1L# c ~T; $K'C1$`Gh.kEUUYVf9uzݟP\$õVI"tאW`Zδa; "5aɨv .,]6`#Eb{uyNfLj+6iCn6_\cvHC gXoWD.+bGvMRCg7-]qz\j7pXx27lurWYiXtdtxCz#plwՉFgf"mSe q%IoG'Ӝ}l7PrԂgx;HhL[8[rb=tCww[CWJ\FN^+ވ7ksjbn@wr{4)AG#=}k+cr{ƕS|+˸|ϵ8W}儋687o_Ib`~88fk}+dSQ{=o&wCS>zcs#MlHeϒvq*f\F(7:,YyߴEv7 2K˅arx!y؍,iRURgCLΘ?;mSwЅ:{ٮ;wZߧ8˻<𲯻Pǵdj`abtp?; 9n!TKVU^ḥ;ʼ [l(([]u|%VD;:{8޼rSϛ}=Z2_ҵ#CaK6ZsY գS ~ͼ7) yE÷9{ϽCvq3{K=fɾb0>>~Dy~~?B~+??";?H[D6ScC{h{s?W .?>,#+Sw?$FNX}ScBq$KDSu%AԤwk 6wu|#'4&KfbQmZ\ CU||Fkvmsz~{4 $,3DLTti|TaD -58:emu}ER]meMV^Dr^ɹ̚]tfnVg"2wB'" ƮROy_g%w=g`{ $|Pq YHQHD;y T(v㒙gjęs@/rB  I-MR㩦OQd겚A*8`۴uJ>a`MdV2nl?}-VfgtE\ߺv F2Y '-faQ2:Si;mpgvy"_œj,e[ۛ4'{lxӭ \臉Ӗo t}&嬋R8qyͧ pr гGd QB Kq&8B2<E9+QV;XZ F5e00axh$VjFt)no8zG{?m߾FZgoM~Ѐ"X  Af `E8BЄ%sl M"#6 sx"@&6Y~4O2aE3DeE!AxD$h"D&ps"EPd<Ə]F8ұQͨ9"$qfF<bG==|N8 FJRed!gLΰ$DŽD!)J>ғ4S(1Ohe iZҗ *{KbД_1LH0әI{͢9MQ3UUuc՚E-WAWְ5a.ֱ:ؠ{V^'R=Ȏִ]iUmR"(eE8{]dF[%nFŒc7EL>z.'l: fvp u*"uOF:gwKP~5I5M|Kowr WO]Ջv27ӊ !\FЯ{kXjM}"kIΡ5|?r=}}m5 .vƣn˦%E` '8qԎ(2z#Ӕe/)e0Ya>wJdN3f:ǹssg4#2d op]PcITz)_LʦDEJ4Ǘ<IP 6WP2U准iT"yn5O ..5k蚹mlh): vE҉f։?9ms:z!&GdlOR\ gw'| .cgVA޿ A=!k–ҿk#sn[ కTMܸ9 N؞a%8-o$;ÒM˿vqj S湦i~K)_-&>v 7Ɏ&&@;Ge~?G)-K*NzJ ~.{s s?쏇ٛN;F|5yDž<` zo$.3'J/j+k\,Z9F}믮krV*P;'cOzh7k!a?U}dm?{>귔B?S&ʩR3f;. g/\ٸeZ7ЂBk mA{#< d9츕:B4@ :=$cCU;?9o˶#Ai1^kBt y>#CEBQ/,EJ ?BC&5 B׉;4?1$ACCTqkT'dEB[B,JD C|RcD;DAD,Df8Cod[8EV4DY?'l>&\22+H_-f2CX{P-*Kl&=j:\lhLƃEfc'4,GXFJE$lGZCGL̐qz8]?3yĽRAKTEmT3v@ GTDcDDTHTGl_%ZFgXk,ɌT޺>cI5kI9{ɕtI33II첟ɕtɠ(ȗKH^Ƥ\JhGtE|F\LNJJ.񝐳JĐ|JyǦ HGw|Cdʴ39dEKKl\GFtE+2TLLDb| ;M4HռCʀK͓\ l<7Ͷ*qbMzl!TCtDSNd ìNR4Om!Tdtd<m.;hlTt-BTW,ucs?v]Tj](kK2媶!ȩ0pHnh}V{;^ŖEFukBcznN#|(%{5ٍMj`Fz4_NO>5^O`~X` vY F`UQ]`n`Na.a~aaB=aF_`P\r >^.b$a&Iea"^b'f~b%b(a*>b,U)b >b3b4a^e)v2bv`/]65$Vc;a?aBa dA04dFbE>d@b>~d16%9~c1X%ceфSFv!veCURe Z \MEd_4^vQWeeV:gV>h.>8.LiFQh.fflSfjpq&-r6sFtVufvvwxyz{|}~;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/figure06.gif0100644001741100001440000000364007327543102023311 0ustar awbusersGIF87a,ڋ޼H扦ʶ L ĢL*̦ JԪjܮ N h08hx(GȨy(iyCɩ I*jzz@ک J[k{7K뛦[;L\< ľ`0Nwa91G xٛ9jch\g\ީ'Fv狏)2^nL(.X墣ThzZ{Z Z7Q窥뫌'*zP%B dY,$ YP&XSl bo.:ÿ&/llž2 %qŲM"lqچwB2SQK2gLipP2#/R11;\tmК8tRPGjuO7]2ӊ\ 5/L-RkSLnw,v̽j6 xGyC.8LGπx 'o߅Wrڐ,šZVז3t+L^0oxt:JCX(&.Yd DN{|J?Aft^[}_0k(FcHl*3Cz{LH)1.#XƱ5""snJnN4# Fh$ ZJvKsoTYY(ӕl0Wm˜b33:1Y2j]C,Mnn" Zr NsMbN;rkΓd8+uAt<}3 APy.Ԝ?TP^Ĩ@۴UԠUYIMsRfT4+>]QŔTM=:Җ$EO Ԡ u/f>Mzj&՞:5*OTPKiUsUSESU5]UL3VY6uYjZ$Ҍ•iMGZWUee^zV\D-aXJ4`ݪ^UƊW) nl+Hbyvf/{ZZe`Y{Nve[qY%nC Szv-DSZCuroSvfTFj ZWgk;u[ [޴74w x.+x n Kx/ kx? x$.P;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/figure07.gif0100644001741100001440000000425407327543102023314 0ustar awbusersGIF87a,ڋ޼H扦ʶ L ĢL*̦ JԪjܮ ǁ\>^ۆ7^ߧX8x(ȸH9)YywiH Y :ښJ:K[ kۤ,<jL|˱ }EMbM{\,^M N΋=ν\n:Oid,.'!  !P PH%CJ6xY̙$<4y6(ƈo:} 5ԩTZ5֭\z 6رPۑ9CIFP.[&+dPFEޝ}]jo0b{Ni υ X98l3g)fŏWF}Ft;4c=-u6ưlԕ8[zQ8ƅPP5q _:_+AF x>P\jrNHgu ZgEȂ&gJ')~&+").Ψ",b:c<#2$ChE BbN> eRNIeV^eZne^~ fbIfffjfn grIgvމgzg~t䒂Jh ih&(ꨢ2%h'}iڟsr*6?盪(ZJگ ,L{8|QQ mN[BeQhȶͲ>%담q+F.a:L{қڵF;[rYcWŌ=(,r'?Eg<4GyL,$W5 7P+KS,wF6c]l#vf/\q׽ڡwo=`,v={q7DטWNh5ĵσ+d" &ΆKN^X6mAb7-1X|\F'QKk$QF^mR;w1RɎ~aWG:l (Q Jk$'!YTc%wI7fpd4IR R(¸lC|a*x=SFrzT%ZIUzJxZїx"1?Sȼ2qf>q5-XlzG7aR"eNJEJD8YNxRdg= |s? Ѐ t-AЄ*t mC шJtqgSTڜ7œtO_{no8< ,`%^5iANCT)#i} I{dـaX'vXiёs(j k~6W(O^F)#Zi~ jNZjj`(JkJk*T,%k{)=8{^ "+frx$Q8ӛx&b*.}V+źKѹ<; ;8ծ1Ӛ" 4l[Tz r"Lr&r*,u2?00ͪl08s> tBMtFkw4EIO9PPg"V_uZo͵k]CPa5vBexvjvn wrMwvߍ7i ~+Q5qsᄿ #W嘷0o876^:`2o> >㎂/įn'7Cԇ = S }׀_/.?J ~οOR -ZѢKg?ilt_# %P$ <X} `/wd& FҠ;4pQIm8Dp)"6dja9_IT@9qhqΡV!A,>QOQT)[ՠ02>c*hC6lw$ZA y31 hF?.@8"*1W|"1H6p<\kd]2 :2=I2Mʦ!DùՑ>L-c˹ҕ 'AƤ;aK+DOs7: ά:&"eāFԂ7F*y۩uɝ<'Y?q3Y',OE3 @9\hJЂӡ DÉP}$)3DrY4"h4RNԤ]i@;ڦS0g`Q c)xS bgiMSxT6D,3*S ըJu궬լju\W9Fԯ/b5O:'F Z+,`+]cuֻ@[zՎ5 j؁5YZ,cdžή]e+;b6lfY-52$-G6ڲ6%kXUҩ5m7;{Wbe'̞ģ nocZNB- 'k:ԹhƺqD}eΕ.,(^5&tHR6pJ9;Q9;:6qu^[J)9OЙ9 K|vkb=-]mElcNR͎.xu0K eN!B`"YƜ,onyL]0צms_XaA gX9s?\g|^nxe6?5X|91aK7IҦqiGπ+\JP'7}wFQOU?.#.{Tՙ$u%t\ր|rrfsnvhdٚ~nGd]cU5N.7k7{7Ä6qexk;%wYn|Z{ 6Vk=p]˛ǂ*m|C _6ӝngv'cn-rs{MxQqOZ5/OyfHrE],o˞G{37zQLS}>U A]d:3d/;ܯ='}uz^OΝT>6esCw-L1E?)yz oMR}3^G{Gze~qnu#OX{êXŝ}y|տyN˳~#? qw:|+?V!U~wXFRa\Kzw{~8b (`UA~z}"(2fa?vO~g$X.((!*c4M"}2| BcVfNJ"w@CX|P V!JHGL؃%|_S)Ak(CeHb1O4h|mHQ(hhsp~/0HzG"jg_m lXz]h|È0vLFGǸȘrT?Ȅv7m㘉䘀ڸ0hhX؎qH8݃RxȉȎ9~RHvo^h 94 I(7ő̇%{GÒ2i()%5n#'h-ɏ3=)xA^>/K3OyH CY)SSK 0Ig3a)1IbIx6FkɐJij3rYSY\94_$"ٕx9Y9ٔsG{9LRy2{^ٗə#ٓ 29F㙟X&y&YIyiIٜ2P霪 )4)ɚyI2⢗ɖy;>cʙ9ѝyiB-9Y 2ڟ^)i IIYz3i≡yȩI%*":17$Z+ʢ9j?:iI@! ɠ Lz2ڢĥ(0M Q "TCJYjGIʡإjaRʡfz`jmښ~ZyBJ9dZiڡʦY o ZJJک /J;NW*ʨpY"HzjsR:zhJΚpʪxp!JϪZ!Zzz*ګj:Z犮L*ZSJ#jʯSz1 ʮ㺰&;?ʮ#;Kª$ L* ʩ-#12+6۱NY$۰*E˳.1'zk,czPKY 3Ay>U%ѵ:RۮI[k;#۶O`s8̿L [83Rl-Ĝ̕XЬ, BZͼόŬ¼(̧,<ݼ)Y<,V|ϩ X\8UXl,],!,'l-]30 r;m]4mBMm ]u ie@=|π=uMct ZY2mlϓׂ֏,-ُ٦ؘm١ Ճ-҉]٤mզ]ص]ًړۑΝn۷ݧۅ}=ܢbȉ,ݑ|Ȋl=8l)܍ ߍݘޕe]L -}04pKo{o҂Sbl!MuFVh n RI~#N-~⯰,[{.E7.+NCNEnG^I;..;NPY%=Χ Zn4YnVU.\~^.i63lɳo">w&RSN .w]~>n闎ΰəg%s>unNw;vakNꢮ ޷g^㷾d>|t^^=쿎ѮоN^̮.n~ynL@n~2.o6~ﯮnՎ4?N?(.؎3Q5o<N7"F2GQfJB,^/KOW?cDbg_a6ϴx?8 /OobC*)"-M?r/O"913!eeun?k?mϭ޷vN RLO(q_;AWO߬o[_MZ:#gYo>oX__B}2xnH-o9݋ 뵵eN9MþɜVU^Ya]cKkme/Q'D:B/;-A(a47 #oŷ7SZqM׏HSE}co0EH 6= CǍăEQ#])ra@<3e^S"0c&jyʂhR:o)Ҧ$2%:VJC++sE{lb6> E;l(o *l&r3S~C}yB.׽J4T,W7}b4f:3^0hΥ]Y\SN|'tl#^w/= nw ݵu ?s+ lEAǾhzƯXhr^&N y"e; ?P $ s! ܎2LF+J-,C5 +C c DN/8Rԯ>C+)8.1P4"qDI$R=}\\XD/͏~Gxm]25isI N9ɺ3L)s@/lB ͒+GG6mXR..-1c6S>?=0THT*UPFT5TIORzto6\5WX9u?[EvUe_e5YqqbN`^ͳ]}6h0KX]g=7fE5rHpyv_- wQ-FU]n]f-xiũ'}^mx!C~8axOUMn]o9eqXgEؔW-~vYa݅(Hi~\sźW1&uy螄ZFj|o5m}NZFoFaמX[o|n n)-| ir:jiut^tkA]^JY7xqF_9۱W.T}kXځN}pf?}{  z[220tH>I0|`O.辞l/C ?X0 Ӷ~_:NSE_6X4;\(]Wh3 NЅX):DxαCLLXF2ҋ!,o!H)dGDLb%#^l!B HOPV #>:L#p/MZl!ͨc[$yK\җ5K)BA2l&Ǎm2k7Y4s%0Dʳd6mxGW1uʬ?^:ݔJz6r'B=~]&:9P4l4yʃѣU7;p޴WKttCZS^39iIjR2%Fҋ*uֻ0wJu>&P{*T^}QIV4|*;jUe[Uet *tud*8ֶn5T[j"vrmIZd5 8T)4ضֱHd6˿R%+i[Ѻ&6W-lYֶ~VWbR}"qY Xmmkڪ궹mCϟ~UG]k+zՕa;]>+P~7bok ?uo~ *\Rw  xO-[vN%/9 7E/c _TWqx3~eK 3n$_E0`)Mg`HdxHnLw qG+bK__%tֲ=,7&n}Ole?yip)ulDxf6RyQ-i2ΏYhкcvtcUxgnuMMԝuEmXf] lX{&AM\wwn!=kNZ`U^+m+wNomSڲ&]P1hk9v6}os;w >˻4GL{noỦvlZy_.M퉿^lO.f?1\se3cfh*nh۞57{tb@xM;=Ug{o޺?ml\B:+kz}f:ta|IGzN,K,Ͼw:)U-}o|xK>򁇼{qm `+?yˣ^x7`~sgz^vQGݍW<kɛgvaO~pQ0ϋ<]ArI̻'lMs߯hkO{'*ѯvD?Wd/p/v-P04Ho0m/.oTo/#n8ݒ`UM oT0X/JNOKNhN,<P3N OM l J o p а0 p w ð%0 qugW 00m OI+Q$lw w0pT 0 /$/511_>LB1ېQ1[diߑƌQyQCt6 ' 2)q11WO+ 1 "q2"ݰnLGQKQ%OQ"gq$c#WqJp21 'dR$irY#2 Eѻ qP(!ɑ$o"% %R_0*%='$&/7R {R_p o#ﳴ(k! KS)W1[r*%m/˫*Rr(!2,ݱ,Yr+3ㅹ s&s4R!u,sr.wY/,s$r2Cs-O-i)428R1SSZn/-6]n)ߊ3"#q䠑48;s0V36ē.R6u/7q;4s7I.:S,9s90K?r003S3#329s;˳5Ba<3=AE?m2sB t831Wt1s"TFFR)"3/R:3REyTTD3Du3;I4",C'I%FSBT09o+?GHt4KHדHaGOG{GTNA,kt4OFjIgS !SQ'$ 3E1LY4SAU2!5DEuVGծ4IPtPyRC:]JSOuOU]EN͔IctXsDS5) REORI_AuF*.H,.W_Wu^u\QX5TKst>tYUYL_tO[ՕK5baNCv_a5_5!4ZqP^PIdd\RVa>7QUS@f-ve_;g76akU[M~['h%]cig5\=hNtG6N6kV?aXÖa#u+kufU`/Ug bReul}vje3jvHQgmb3YlVnZWu`uLOVj/ nm!VmSums qhZsnppRm?samECrQHMn4qqq!WvAq9niux/t+jVsff_xcUUu[HvYC$MFt^"ΗwַwAwCy'|wMew{eA#mmBc:XJ?΁KS^ll{kyw7WLI=|y²4.V8-,*Y[xjqTVx„ubIC-Sjxr7V7 x1mCT#<<\9\*%آ\7#؃ Aσa#Gp|̓Λ<-k<܎<}J^5[3~u%<<$ϥ<:&=O,eI] a5\cw;G#|eO=+$dӱחYI؝;Ώ]lt}յÜ<PR3}<|93۹f-;wۗ{[v8Xvi u6kA0wz[ ޿AxSzɚ[g ]ݻݥz +ɵйǜ9zl9pHV^xjѳo~}>Gdi[@雞~Q>~빾>G;i~پ>~~Ӿ>~?x ?^ط%_:!1?)u^2?EڧqGYKٝM['> ?}Qb%~mag??_?_??|_qß+__M >bjp.I 瀡2̙+ۺ/3]7뻩$ CEq,/M칛R+6r3'*ev_k/<.;>v#V K^"c#d ""%O$h(i)Vf'',i-nc*-R/S0.r2nj1stau6w7uf6Zgyl7{r48ۺ} =|?/Vhp?` -!Ĉ}!,X ,fMĐ"G6 $#ƏŁK2geRtji!5-Jʔ,yI)EFR R0ЫCVǒ-{֋jQM6۴fҭ z/.l0Ċ3nq_'SV2̚73ТG.m4ԪWnOزgӮsXۺwme‡ eʗ3o9ҧSn:u;xn/o|гo^Q>( X*x _ "JZxafb!HD^8pz1!)"-"18#5x#9#=#A 9$Ey$I*$M:`;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq01.gif0100644001741100001440000000125707327543102023466 0ustar awbusersGIF87ammUHHU$$,0 J1`N0 ).+ m7CmU(@Ό(EދZZWJ4id`弯'4x ]7Uk~ rs=P- }zb &}|Mw 7= qW @rT6k6M'M60mB.U,I۾l+|tac)>@50 W}<"d&TC&05Ԅ Z s΄ԫc* %؏0+GݺU&@ JѣH˘=#|25C p#kD.Q"<.P[K ,xĩ HEDI*^fAn|b4 /THiX[ujЄg2RN\B" %to=S=8Ƽ~ЪS KZhjnn2T9$x|tD8(=;p!~+P~`,ppx,-0G,QPX Aw4s.礳& NQa_C9sP#ϴ(M:w2V8!{SA!CW 1 7AeO;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq02.gif0100644001741100001440000000105107327543102023457 0ustar awbusersGIF87ammUHHU$$,0(xjj`(SBAp,/Gw@=al\`R*`r>_tZ!] lWF D eS>|fT)pHqQR \9]] Jhbd|PV( kTX1q'1aa](oD?RLWr jZ">9Pٲl ^;Ç#JHaY28} H.,ਤZ#!'F^&t𳌑ք+< eTe-+ibD>@c6P)iCsoy)2|Ⴇ|@^%]V9#4%:3޿:4xΜ ]bS@ANQv裫[dfM\i ⦬}29=圁CtvF?\;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq03.gif0100644001741100001440000000203507327543102023463 0ustar awbusersGIF87ammUHHU$$,0:!k۽4`(dIN0h2*k0|ٸ@BA(!XR7\DӪdJH!]E/8 A trd yUc D +aX T  Nn M H8N=)J =HN/|/W ǛU/w*5u9=HCHTTrSCn ;-W/)8]聽[6EHiГ.R CI/IBYj H 6q>_dLRtbaz#y.e:ؔp+L oK^0ZQ|x%G+BTbc1+zKE U;1PWR?ّ`_ l9dhZ\1_~ɕˠC&JX$;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq06.gif0100644001741100001440000000070307327543102023466 0ustar awbusersGIF87ammUHHU$$,0I 6_ͻ 7 ‚q%  +0QE英chȊ@@L*[!6Fw\q ,KW)IY K.D| $6u6K {`*2~C |A bKi(%K)$o$+}sZ)o3fdA)AKF*R dWSE9)!`O bs,R &}Ex)΁^fz/ԋ$`_(0u; EѪ. 4Ɂ(S\ɲ˗0_.uD~8sBf3 27btģlS!*VY"$\gtvXg7Vh X$"Gl#[%NpVi!Pi11qh#%2&2u;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq07.gif0100644001741100001440000000067407327543103023477 0ustar awbusersGIF87ammUHHU$$,0I 6_ͻ 7 ‚q%  +0QE: 3pю`T]$lgs1a*TZ+䈃`!N {@ 5baJQJE**!j p&3)l>d _@)@2Ncp,6 bUź9)!Tlv/6ރ&xsf2>ie ҙ{BAIe۝m8 ba^<Iɓ(S\reԊ@ DrBd,G-#g|R8!WI=!p CȊtf#bP`iʉ nIa&_:N7Cf-hŎ sf0Y;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq08.gif0100644001741100001440000000071407327543103023473 0ustar awbusersGIF87ammUHHU$$,0I+ 6/07'(fl+  *r`8$PcHk*pX*BzB]%x}UT/f6-E_j( $%x= `o B6di6ZAOB}C#s,6z/85"B { o!",v\Hq ^7kPYuf TuXTP.;hX wGh$d!45B۔ 4 : Ț Y2 9O N0cʜI͛8qA@D@Z0Ip$qwYP= h=@IH*i"F>Z( lN´AO?A" I(p a UG "r3O-aRg<Ҧ;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq09.gif0100644001741100001440000000072107327543103023472 0ustar awbusersGIF87ammUHHU$$,0I+ 6+07 @4) m] 1r`T$`r.T* F(%P_4gn hT7.E (AOBhz> /wB6.}BZ| DcRL 8ru[wH7q" hW7d!#6)jV"[iU/T*ŸW["B5te 2!ry!y9HUQXI(`$s*@)SC`Ū% 7b GI | DpJ5XZ8@͛8sɳgK(QB$ $Qj,%KO dυ:JU٬3RYm'r j%vu2e;Fz+8H[ rN-jy ;gě[J ;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq10.gif0100644001741100001440000000321207327543103023460 0ustar awbusersGIF87a-%mmUHHU$$,-%0I8F`(dih j,SxN3m0”`ptLGOʵ,S2]EmU;{]Ap` "P6k !a}6 z 7/,|PJ Dip@q"   } Di ͎{Q. @` %tzr A>_290-51dSPA8+HT%)̣$F|GOAazPFݔTB<;sTe Γw ~9h P MڱlyѺQ  bz"^kSp1t %-wU(t\a‚gQ1:$W$`L<]b.Xv bn H H!+Crgn Au;CAфN@zw֡ w@ .e/sB]j@j ̿ߧ^ s;PY5.SW bwV M<Y!z5D3 Q_Tؖ0FVs>(fu3҄J>j-@D]:Ԥ+eԕY1%#zd#Hu M<3fb[u&"[ьB0AIIM d ` *ኟzLYH z(#H[r <ؽpB>eV)#nb tP KB& u;AZe ˧iE D o!v+JRO 0uc9Ȓୱ]gHE8Y nNTo }vȞG,Wl\KAk\QFP[<($_s1 Щ,цXMl q8Aby|#'Ru1L%Ã(Kz"pM.,|!'{Lw=5_3HO٧o^nLV)Bpg{ 9dC!ǩ[s7Q'֭ԅC*Ϥ|$d6PT(DHK iIbަTN@ )qOAU #eow;f4sb` \bZCEV*l1 bg07D$1@pL٪ \fw)}oH4)ͨ|xn'4 i"0y'ȆzJΎa֡< Rv*!`ĭ0щ<,q]ȏf{XsD9`8Rs="QBMrF& 1B዇ GCbdԈ{좑DNM@}H. H:ȒLH)MJ0wH)2|E-M((&5nj0ý;ՀS{l(A=PB8T.ȹZR&J2l"PW!Vǐ@[.VZ}hN |Up% *W2u+*l]:8(1fW4yHu]VqAy#1v LtnfRa<I3L6Q' ./eX;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_eq11.gif0100644001741100001440000000131307327543103023461 0ustar awbusersGIF87ammUHHU$$,H8k7m&$ B%QbMʬʸ/m(4d 'QNKUUe>! [pA1ٜŸPpWC|iC!;}^Hl @"cQLx Qx aW\C: B| gL U;VkU]KWW n_Ogp;^ ꖨD&m.JXMRvO\5iւy` ;&à'qGv J GoΟ2e*<`9TNM #ɀBxt)R DU`.܌ƭ[lי<A` `볽INPyIQNz6L% ~8 G?+,po^u0'QA@bqS޺Y-o=[jIub. X8esi3Bx/㻚|]FOz*0 Sza2d2`(Ye@7:qVbO+XUc5e]Un,2X :\\X8N?4mb^_^"n1';Vq 1PYt Gݳ#|_31vS^lD#G 9G_ >뱇{qn<@aelfRVetdyHO\X-eFjwT0VP!r(NZt aAH(aH+ DhC|iJ 'jO!:'չ@p(!Fn>3c )Q=9F`'x̣>X{ĉ !Q ű5?}' HFR@M9r"(e @TyPM^Pd R|de."[f+AYb@)8җ؁`wG͊|8 @k/?̧3-7Wxqs*˞Z:ґK4ԛ}-T<"cB.,wBۋp]`;ƞudܰG.1ouB/fjw|ώi<慎xO:euO/}]?uXg]uܣR0}}xJ'+o}5;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_fig02.fig0100644001741100001440000000322707327543103023627 0ustar awbusers#FIG 3.2 Portrait Center Inches Letter 100.00 Single -2 1200 2 2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 0 1 2 0 0 2.00 120.00 240.00 975 6900 1950 6900 2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 0 1 2 0 0 2.00 120.00 240.00 7125 6900 6150 6900 2 1 2 2 0 7 0 0 -1 4.500 0 0 7 0 0 2 900 2625 900 7500 2 1 2 2 0 7 0 0 -1 4.500 0 0 7 0 0 2 3000 2625 3000 7500 2 1 1 2 0 7 0 0 -1 6.000 0 0 -1 0 0 2 2100 2625 2100 7500 2 1 1 2 0 7 0 0 -1 6.000 0 0 -1 0 0 2 6000 2625 6000 7500 2 1 2 2 0 7 0 0 -1 4.500 0 0 7 0 0 2 7200 2625 7200 7500 2 1 2 3 0 7 0 0 -1 6.000 0 0 7 0 0 2 5100 2625 5100 7500 2 1 0 2 0 7 0 0 -1 6.000 0 0 7 1 1 2 0 0 2.00 120.00 240.00 0 0 2.00 120.00 240.00 5250 4500 7125 4500 2 1 0 2 0 7 0 0 -1 6.000 0 0 7 1 1 2 0 0 2.00 120.00 240.00 0 0 2.00 120.00 240.00 1050 4500 2925 4500 3 2 0 2 0 7 0 0 -1 6.000 0 0 0 16 525 3506 1350 3506 2081 3412 2606 3413 2849 3338 3412 3507 4256 4725 5231 5588 5568 5813 6374 6113 7199 6375 8231 6263 8381 6282 8831 6300 10293 6319 12131 6263 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000 4 0 0 0 0 16 14 0.0000 4 210 1020 1725 8025 input start \001 4 0 0 0 0 16 14 0.0000 4 210 900 1800 8325 boundary\001 4 0 0 0 0 16 14 0.0000 4 210 825 5625 8025 inpu end\001 4 0 0 0 0 16 14 0.0000 4 210 900 5625 8325 boundary\001 4 0 0 0 0 16 14 0.0000 4 165 855 1125 6675 start limit\001 4 0 0 0 0 16 14 0.0000 4 165 780 6225 6675 end limit\001 4 0 0 0 0 16 14 0.0000 4 210 600 1200 5100 region\001 4 0 0 0 0 16 14 0.0000 4 165 1170 975 4800 start search\001 4 0 0 0 0 16 14 0.0000 4 210 600 6300 5100 region\001 4 0 0 0 0 16 14 0.0000 4 165 1095 6075 4800 end search\001 festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/tilt_fig02.gif0100644001741100001440000000652007327543103023626 0ustar awbusersGIF87a$,$ڋ޼H扦ʶ L ĢL*̦ JԪjܮ N (8HXhx)9IYiy *:JZjz +;K[k{ , -:լ[~ ;vIh7-n{wt߬}2NrZ˓jn@7ګ a?<^O}#[?*ߏ[UwNO C]7 D݄m w`"x` eXXT")Њx0&C-qcoe >nώZd$z$NIe#Z()Yn _&,ҳ)gY)ʚlB~xӜ.iO gKM92a( A%Z:LAzh^ nzrۘn'r:Ū*ƨ:^]ᚫ뫅`+pfeZҮz-|B̖gx:NЦQx Xj+il =a+b /2 1FL1vܻG]<0Cgk `ր=ͷ/G8l'G؃KN=zW#W_Yۏ7D9\95&߃a毗ke?}A]_˗v17۟w#m[Iګz_!)FdsMz7lr\/ AjY{Nd* 4U$ B%_# чy$oOSvh;F`ڃx8D"(L-r%Ѐd+(VbD.jfE/^iEMI[b/~1Ca9k"4r#ߘCH1!gP.yyJ(Ҋ4/eAL(L`%L!0P$8HIgTP(H)j3$61Yb&*i- ')ӟg %P\ Ѐ iY(E j`4(GP~!fIF:mj)S"bKYI8T)mES=R6uhˠK(#BјդNj5#Eeݒ~Goj5WI u\ei~bn&+< q󐪬87ȣT~k0KjVĆUb-vt2vM,rNx^'.ΡVֲ7SպHr_QQqd YŒvlOJ%-/:% |V2PCw:nx;G MzWVp^-s|we Qpx_@t8gQJQp/_?Tp,\6DaxO!T1$(₩(NW%x5%@_Ynuia(Rap>Wb+W9 [ Y%-zcmu. L 6sPQrNf1D֛YkNWl'w x4R#LVhѠ}HB(6mg3,4p&8jv8@U{bvtn_ =~u〛%+H"t5Q?=ZSu-pVkc&r=Զ~Ж}3~vivDahRH&YGbrg({:҅ĀW;buhw%{x@k}Hy8kfydvg~H_H(8O0zQxoH^Ȇp%(ThPXvNJׇ8(HJvt3,PؤŨi(h׈٨ȍ(Hh爎騎Ȏ(HhSh'vF$T7j'Z5Z N7M4{nt{S&zZGEtKD(&})K|Ǎ(IMYa%NLYW-2+ٍ6{KLؒE}txGU9jד>N~~g./_?o/SO_D

    h3ww^#'qQyN{A7o=j6 q~7mr=}?Q vN0G Kho5p! >DYH omB08'@[2" 7 G1hcɠ iE&܈2$sLr!Uve?T'fBXֈn֦5#㚯I(q*bgIa&6:Ş4@_옇H5',3DRX沬ti 뫠7iEHbE8lv7eu}E:x?5i ٍd4]Wdx 3y-޵=(S5VϪ DCjyKHԼR]yj C8|c/\d 3\D;o]X}+IV,-e3` K~Oml_L(ׯK9E+dGNl'.y{nɊv!m滝>/w o;|#ghk^G5].`|qLRȱ1AF%93Gq !;tȕ,Ƶjsd$8TȆpKdSG8 _ ŨVSɒB'¸ё3% F"D#TYHT텳dm_͢lsjԏL?G#/g-B[f uɖǜKX@J_Ά6G-΀Hr\5A]%O|_۝]!}쮦;پ{o+}a+7~xh<[ ^*Z|`}f{C8L_JԻc'.!Xi.'sgAsPT{w}$ɯ`,PyP'prww?OZ{~CW]W9? s|1/|"ޒQvr'xzx;dQ6wS|($@ 9eF#yz"|))I^ÒYđM*ى/i:1 &B9|@Fy3JYxvn{}~%WÔzS_WɂY?`=bb4v1h0mo'p)h"gt jNEvXG =9Ki[JYiIUdd  W+)3ə{}*54]tVf՚4=JiԘ2C9ƤyVAE G)G yɝ )Ii4xiyVi#wiR=cx Wyw*Jjʡ !*#J%zC;festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/track_fig01.fig0100644001741100001440000000466607327543103023766 0ustar awbusers#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 1500 1200 7800 4875 6 1800 1200 4200 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1800 1200 1800 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 2100 1200 2100 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 2400 1200 2400 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 2700 1200 2700 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3000 1200 3000 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3300 1200 3300 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3900 1200 3900 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 4200 1200 4200 4875 -6 6 4500 1200 6900 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 4500 1200 4500 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 4800 1200 4800 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 5100 1200 5100 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 5400 1200 5400 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 5700 1200 5700 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6000 1200 6000 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6600 1200 6600 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6900 1200 6900 4875 -6 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 1500 1200 7800 1200 7800 4875 1500 4875 1500 1200 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 1500 7800 1500 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 1800 7800 1800 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 2100 7800 2100 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 2400 7800 2400 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 2700 7800 2700 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3000 7800 3000 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3300 7800 3300 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3600 7800 3600 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 3900 7800 3900 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 4200 7800 4200 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 1500 4500 7800 4500 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 7200 1200 7200 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 7500 1200 7500 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 7800 1200 7800 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 6300 1200 6300 4875 2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2 3600 1200 3600 4875 -6 2 2 0 1 0 7 0 0 -1 4.000 1 0 7 0 0 5 1500 5700 7800 5700 7800 6000 1500 6000 1500 5700 2 2 0 1 0 7 0 0 -1 4.000 1 0 7 0 0 5 1500 5100 7800 5100 7800 5400 1500 5400 1500 5100 4 0 0 0 0 0 12 0.0000 4 180 735 675 3375 amplitude\001 4 0 0 0 0 0 12 0.0000 4 135 495 600 5925 values\001 4 0 0 0 0 0 12 0.0000 4 135 330 675 5250 time\001 festdoc-1.4.2/speech_tools/doc/speechtools/arch_doc/track_fig01.gif0100644001741100001440000000653107327543103023757 0ustar awbusersGIF87ag,gڋ޼H扦ʶ L ĢL*̦ JԪjܮ N (8HXhx)9IYiy *:Z`z +;K[k{ < pAla\L<, !@`݀͠ ~@n`>\~ ,Ll?_ퟍeu1H0[ֽ{<(޳>8dAHv3 e8Xsyf:#lPN$9 T+5'ެxbҌK76cԐSKw~ꤷ}JzӮãns?#L}Oo}o/sz-Ox=O'>/# z3_)=ԟ@9l(A O`7<4( LHBJp5l]p۝DBmTl/ a|1 sh<(֏λ{Vbi#n+, a<b&.1~a|,r^S3*)8wH!rlHG&2GLfP &=8Uяv#h>d_ y*Br ] q$(^y,&*ydTԙ-Mf!$5esd%\Mmvf/?y0PS|X e,ZIk<6bfEZ~-kmSz6]Ij: ʴqc\&˥jsVnt]Z7۽ml@/AZR7.t^n}k&Ur5yԠXU{  No `Kx 0Qlaa0?]6Vl+_*TaSaؽ10K-xFX%}_,fܨLfV(U{f\޲,!< cH4gCVݜxms]$ϜsCT9ȃf/\d8 KN~BhLэ{FKwl0K]dFhDYq˦wum]k_ H8fh/޵k`LMl6v-fcܚ7m`ox{eɍ s%ܰmz{7>C-uYrſL[\Y. ?mɝ=r\ ǂ6|2/t^U8qܠ$NglV