diff --git a/dictsource/an_list b/dictsource/an_list index 65a0ee0c..8894fe5d 100644 --- a/dictsource/an_list +++ b/dictsource/an_list @@ -57,6 +57,7 @@ _y je y je $atend ch tSe ll 'El^e +ny n^e á 'a||akTEntw'aDa é 'e||akTEntw'aDa í 'i||akTEntw'aDa @@ -118,9 +119,10 @@ _x#º %o // for 1º 2º 3º _x#ª %a º orDin'al||maskul'in ª orDin'al||femen'in -ºc gr'aUs||T'e -ºf gr'aUs||'Efe -ºk gr'aUs||k'a +(1 ºc) un||gr'aU||T'e +ºc gr'aUs||Tentigr'aUs +ºf gr'aUs||f'arEnxeI +ºk gr'aUs||k'elBin _1ox prim'Er _2ox seQ'und @@ -183,6 +185,7 @@ $ d'olar \ kontraBaRRa | b'aRRaBertik'al ° graUs +(1 °) un||gr'aU _- gj'on ! TaRR'ar||eksklamaTj'on @@ -471,40 +474,56 @@ witsa $abbrev // exceptions -barça b'arsa -holio x'olio -jazz dZ'as +banjo Banjo +barça barsa +desenyermar DesenjErmar +halar xalar +halma xalma +harcia xarTja +hibo xiBo +hoder xoDer +holgorio xolg'orio +holio x'olio +hopar xopar +huerga xuerga +huerza xuerTa +jacuzzi jakusi +jazz jas +jet jet +judo juDo // Foreign words -android andr'oId -apple 'apEl -at 'at -chat tS'at -chrome kr'ome -espeak isp'ik -(e speak) isp'ik -facebook f'eIsbuk -firefox f'aIrfoks -google g'ugEl -hotmail xotm'eIl +android androId +apple 'apEl +at at +chat tSat +chrome krome +espeak ispik +(e speak) ispik +facebook f'eIsbuk +firefox f'aIrfoks +google g'ugEl +hardware x'ardwer +hockey xokeI +hotmail xotmeIl (i phone) 'aIfon -iphone 'aIfon -(i pod) 'aIpod -ipod 'aIpod -hardware x'ardwer -linux $1 -live l'aIB -messenger m'esendZer -mozilla moT'ila -nvda ene|be|de|'a -office 'ofis -skype esk'aIp +iphone 'aIfon +(i pod) 'aIpod +ipod 'aIpod +junior j'unior +linux $1 +live laIB +messenger m'esendZer +mozilla moTila +nvda ene|be|de|'a +office ofis +skype eskaIp software s'oftwer -thunderbird Tanderb'ird -twitter tw'iter -unix j'uniks -whatsapp was'app -windows w'indows +thunderbird Tanderbird +twitter tw'iter +unix j'uniks +whatsapp wasap +windows w'indows //mobile _^_EN diff --git a/dictsource/an_rules b/dictsource/an_rules index 731e9acc..797547a0 100644 --- a/dictsource/an_rules +++ b/dictsource/an_rules @@ -1,3 +1,4 @@ + // Aragon translation rules // This file is UTF-8 encoded @@ -111,6 +112,7 @@ i i i (u_ i i (A j + .group j @@ -168,6 +170,7 @@ .group q +q k qu (A kw qü kw qu (e k @@ -204,6 +207,9 @@ u) t (_ t# ei) t (_ t# n) t (_ = // silent, but stress on last vowel + n) t (m // Silent + _pos) t (h t + _pos) t (C // Silent tz T ue) t (_ t# ui) t (_ t# diff --git a/dictsource/en_list b/dictsource/en_list index 92b93d45..31d7f517 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -593,6 +593,7 @@ oem $abbrev ok $abbrev omg $abbrev os $abbrev +osx $abbrev otoh $abbrev pcie $abbrev pcmcia $abbrev @@ -1641,6 +1642,7 @@ gentlemen dZEnt@Lm@n genuine dZEnju:I#n geode dZi:oUd geologist $2 +gettin gEt#n- geyser gi:z3 ?3 geyser gaIz3 gibbon gIb@n @@ -1680,6 +1682,7 @@ gurus gu:ru:z habitual $alt3 haggis hagIs haha hA:h'A: +halation $alt3 // in- halleluiah halI2'lu:j@ hallelujah halI2'lu:j@ halloween $3 @@ -2419,6 +2422,7 @@ puny pju:ni purist pju:r-Ist purport $2 purportedly $2 +puttin pUt#n- pyjama p@dZA:m@ pyrites paIr'aIti:z pythagoras paIT'ag@r@s @@ -3258,6 +3262,7 @@ Korean kOr'i:@n Kosovo k0s@voU Kuala kwA:la# Lagos leIg0s +Lahore $alt3 Lebanon lEb@n0n Leipzig laIpsIg Leone li:'oUn @@ -3681,6 +3686,7 @@ Persephone p3s'Ef@ni Phoebe fi:bi: Rachael reItS@L Rachel reItS@L +Rae reI Rafael rA:faI'El Rashid rA:S'i:d Raul raU'u:l @@ -3713,6 +3719,7 @@ Siobhán S@vO:n Sonia s0nj@ Sophie soUfi Stephen sti:v@n +Stevie sti:vi Stewart stju:3t ?3 Stewart stu:3t Stuart stju:3t diff --git a/dictsource/en_rules b/dictsource/en_rules index 4683f324..4370796b 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -979,6 +979,7 @@ u) ar (ish e@r ?3 _) ar (istocrat a#r log) ar (i @r + marg) ar (AtA_ 3r' m) ar (it ar p) ar (i ar p) ar (in e@ @@ -2715,6 +2716,7 @@ g (eek g _) g (ert g _) g (ek g + g (eld g ge (nic_ dZ'E genesis dZ'EnI2sIs geous dZ=@s @@ -3200,7 +3202,7 @@ .group in @) ing (_+S3dve %IN - @) ings (_S4dve %INz + @) ings (_S1m z @) ingly (_S5dve %INl%I @) ingment (_S7dve %INm@nt logu) ing (_S4v %IN @@ -4102,7 +4104,7 @@ o (tion oU m) o (tiv oU r) o (to oU - pr) oto oUtoU + pr) oto (C oUtoU pr) oto (n oUt0 m) otor oUt3 n) o (tor oU @@ -4217,6 +4219,7 @@ Cd) on (_ @n ?3 ag) on (_ 0n rg) on (_ @n + &k) on (_ @n &s) on (_ @n &t) on (_ @n &tr) on (_ 0n @@ -4955,7 +4958,6 @@ _) re (arm %ri: _) re (au@P2 ,ri: re (ck rE - reckon rEk@n reco (g rEk@ _) re (comP2 r,i: _) re (conP2 ,ri: @@ -5129,7 +5131,7 @@ @) s (hill_ s @) s (hous s _) she' %Si: - A) sh (i_ =S + A) sh (A_ =S &) ship (_S4 SIp &) ships (_S5 SIps &) shire (_S5 S3 @@ -5210,6 +5212,7 @@ _) sus (A su:z su (al Zu: n) su (al sju: +?3 n) su (al Su: _) su (b sV _) su (bdi s,V su (bdue s%V @@ -5297,6 +5300,7 @@ ttu (r t@ tz ts tze (_ tsi +?3 @@A) t (Ary_ t2 .group th th T @@ -5503,7 +5507,7 @@ d) u (ly ju: z) u (l_ 'u: &) um (_ @m - vol) u (m ju: + vol) u (me ju: u (ma_ 'u: h) u (man ju: u (me ju: @@ -6009,7 +6013,7 @@ .group ' - 's (_S2 z + 's (_S2m z f) 's (_S2 s p) 's (_S2 s t) 's (_S2 s diff --git a/dictsource/fr_rules b/dictsource/fr_rules index a8c085ef..e31034c2 100644 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -698,7 +698,7 @@ _quatrevin) gts (_ z2 _) game (X _^_en girl _^_en // girl gh (K _^_en - gy (_ _^_en + @) gy (_ _^_en .group h @@ -1497,7 +1497,7 @@ A) wn _^_en y (nn i // group y: English section -_C) y (_ _^_en +//_C) y (_ _^_en AC) y (_ _^_en C) y (e_ _^_en %C) y (_ _^_en diff --git a/dictsource/hi_rules b/dictsource/hi_rules index 5b6ccf83..76592172 100644 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -171,6 +171,9 @@ क़ qV क़ (B q + क्ष kSV + क्ष (B kS + .group ख ख k#V ख (B k# @@ -206,15 +209,20 @@ ज (B J ज़ zV ज़ (B z + + ज्ञ gjV + ज्ञ (B gj .group झ झ J#V झ (B J# + .group ञ ञ n^V ञ (B n^ - ्) ञ (_ n^ + ्) ञ (_ n^@ + .group ट ट t.V @@ -239,7 +247,7 @@ ढ़ (B r.h // nukta .group ण - ण n.V // (temporary) same as dental [n] + ण n.V ण (B n. ्) ण (_ n.@ @@ -304,10 +312,11 @@ .group र र rV र (B r + र (_ r ्) र (_ r@ .group ऱ // rra - ऱ rV // (temporary) same as [r] + ऱ rV // (temporary) same as [r] should this be [r.] or perhaps [z.] ? ऱ (B r ्) ऱ (_ r@ @@ -338,15 +347,15 @@ श (B S .group ष - ष s.V //?? or retroflex [S] - ष (B s. //?? + ष s.V + ष (B s. .group स स sV स (B s .group ह - ह H + ह HV ह (B H diff --git a/dictsource/pt_list b/dictsource/pt_list index c4400fd9..b1e7c337 100644 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -115,6 +115,7 @@ _[ ,abRikowS'etSi _\ b,ax&,iNvertS'id& _] f,ES&kowS'etSi _^ s,irku~Nfl'Eksu +_´ as'eINtu,ag'udU __ s,ublin^'adu _` gR'avi _{ ,abRiS'avi @@ -127,8 +128,8 @@ _¡ ,eskl&mas,&U~,iNvertS'id& _¿ ,iNtex,ogas,&U~,iNvertS'id& _" 'abRi;'asp&||d'upl&s# -_º Oz'in^U -_ª az'in^U +_º o*@-dZin'almaskul'i~nU +_ª o*@-dZin'alfemin'i~nU ° gR'aU @@ -662,6 +663,7 @@ apneia $alt apoio $alt $verb arredores $alt arremesso $alt2 $noun +arroto $alt2 $noun arroz $alt2 assembleia $alt ateia $alt @@ -691,7 +693,7 @@ bordo $alt borra $alt2 $noun bosque $alt boto $alt2 $noun -boxe $alt +boxe $alt brejo $alt bromelha $alt cabelo $alt2 @@ -700,26 +702,30 @@ cacete $alt2 cachorra $alt2 caderneta $alt2 cadete $alt2 +caibro k'aIbRU camelha $alt camelo $alt2 -caminhonete $alt +caminhonete $alt camiseta $alt2 cantora $alt2 capacete $alt2 caractere $alt carbureto $alt2 careta $alt2 +carrapeta $alt2 carreta $alt2 carroça $alt casebre $alt cateto $alt2 catorze $alt2 cebola $alt2 +cedro $alt cefaleia $alt centopeia $alt cerca $alt cerca $alt2 $noun cerco $alt $verb +cetro $alt chamego $alt2 chefe $alt checam $alt @@ -839,7 +845,7 @@ explore $alt faceta $alt2 fantoche $alt farofa $alt -farolete $alt2 +farolete $alt2 febre $alt fera $alt feitora $alt2 @@ -865,7 +871,7 @@ fulgores $alt2 galera $alt galileia $alt gameta $alt2 -garçonete $alt2 +garçonete $alt2 geleia $alt gelo $alt2 gelo $alt $verb @@ -894,17 +900,18 @@ jogo $alt2 $noun joguete $alt2 lagosta $alt2 lambreta $alt2 -lanchonete $alt +lanchonete $alt lebre $alt lembrete $alt2 lepra $alt leste $alt2 $verb +?2 lhe ly lingueta $alt2 lopes $alt macete $alt2 maior $alt maleta $alt2 -marionete $alt +marionete $alt marreta $alt2 megera $alt melhor $alt @@ -923,7 +930,7 @@ miolos $alt modelo $alt2 modelo $alt $verb moeda $alt -moem $alt +moem $alt mofo $alt $verb molho $alt2 $noun monera $alt @@ -949,8 +956,8 @@ novos $alt obstetra $alt odisseia $alt onu $1 -olho $alt2 $noun -olhos $alt +olho $alt2 $noun +olhos $alt onomatopeia $alt opereta $alt2 ordens $alt @@ -968,7 +975,7 @@ pangeia $alt pantera $alt parede $alt2 pastora $alt2 -patinete $alt +patinete $alt pedra $alt pela $alt $verb pelo $alt2 @@ -1012,17 +1019,18 @@ relevo $alt2 $noun remorso $alt renovo $alt $verb retorno $alt $verb -reuva x'EUv& +reuva x'EUv& rigores $alt2 rixa x'iS& rocha $alt rock $alt -roem $alt +roem $alt rola $alt2 $noun rolo $alt2 $noun rota $alt2 rota $alt $noun rumores $alt2 +saibro s'aIbRU saleta $alt2 sarjeta $alt2 seborreia $alt @@ -1047,12 +1055,13 @@ sossego $alt2 $noun suborno $alt $verb sufoco $alt2 $noun sufocos $alt2 +super s'Uper suporto $alt suor swOr tapete $alt2 temores $alt2 tempero $alt2 $noun -tenores $alt2 +tenores $alt2 terrores $alt2 teta $alt2 tetra $alt @@ -1110,10 +1119,9 @@ book buk ?1 download d'a,wnl'oud ?2 download daUNl'owd ?3 download dau~Nl'owd -drive dR'aivy -driver dR'aiver -drivers dR'aiveRs -?1 end 'end +drive dR'aIv +driver dR'aIver +drivers dR'aIveRs?1 end 'end ?2 esc 'Esk ?3 esc 'EskI ?1 explorer ,ekspl'O:*&r- @@ -1195,15 +1203,16 @@ chrome kR'owmi ?1 express ,Ekspr'Es espeak isp'i:k ?1 espeakedit isp'i:kEd,it -facebook feisybuk +facebook feIsybuk ?1 fedora _^_EN firefox f'ai@fOks ?1 front fr'ont ?1 jaws dZ'au:z ?1 linux l,in'uks ?2 linux l'inUks -?1 live l'aiv + live l'aiv ?1 maker m'eIk&r- +mac mEk ?1 media m'Ed,i& ?1 messenger m'Es&ndZ&r- ?1 microsoft m,ik:r'os,Oft diff --git a/dictsource/pt_rules b/dictsource/pt_rules index d2f26045..62abc1c7 100644 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -99,7 +99,7 @@ ái (s ''aI á (iCK ''a áy ''aI - ál (C ''aU + ál (B ''aU áu ''aU áu (s ''aU ?1 ál ''Al @@ -544,7 +544,7 @@ _entorp) e (çL03_ e éi (s ''EI é (iCK ''E éy ''eI - él (C ''EU + él (B ''EU éu ''EU éu (s ''EU é (uCK ''E @@ -566,7 +566,7 @@ _entorp) e (çL03_ e .group f ?1 _) f (_W Ef; // within an acronym ?1 _) f (_ Ef // individual letter or end-of-acronym - _) f (_ 'Efe + _) f (_ 'Efy f f f (f ?3 f (B fI @@ -668,7 +668,7 @@ _entorp) e (çL03_ e ím (C ''im ín (K ''iN ính ''in^ - íl (C ''IU + íl (B ''IU .group j @@ -692,12 +692,10 @@ _entorp) e (çL03_ e .group l ?1 _) l (_W El; // within an acronym ?1 _) l (_ El - _) l (_ 'Ele + _) l (_ 'Ely l l l) l - lh lj - A) lh lj - A) lh l^ + lh l^ ?4 A) lh l^ @@ -786,8 +784,8 @@ _entorp) e (çL03_ e m) o (vam_ o o (veCs_ O -?1 o (l_ 'O -?2 ol (_ Ow + o (l_ 'O +?2 ol (B ow om (_ oN o (ma_ o @@ -852,6 +850,7 @@ _pormen) o (L05_ O _af) o (bL04_ O _esn) o (bL04_ O _engl) o (bL04_ O + _) o (cL03_ o br) o (chL04_ O _deb) o (chL04_ O _m) o (fL01_ O @@ -895,6 +894,7 @@ _remem) o (rL04_ O _enr) o (squL02_ O p) ostos (_ Ost=Us# // dispostos etc. _gar) o (tL03_ o + _mar) o (tL03_ O pr) o (vL03_ O _g) o (zL04_ O _esb) o (çL01_ O @@ -935,7 +935,7 @@ _remem) o (rL04_ O ?3 p (s p ?3 p (t p ?3 p (_C p_ -?1 ph f //Didn’t use in European Portuguese (eg: English) + ph f ?1 ple (_ _^_EN @@ -952,7 +952,8 @@ _remem) o (rL04_ O ?1 _) qua kwa // quatro, etc. ?1 _) que ke // quente, etc. ?1 _) quei (C k'eI // queira, queima, etc - quên kw'eN // quinquênio, etc. + A) quên kw'eN // frequência, etc. + C) quên kw'eN // quinquênio, etc. ade) qu (e kw _a) qu (idade_ kw _a) qu (ífero_ kw @@ -990,7 +991,7 @@ _remem) o (rL04_ O A) r (_A * rr x XC) r (A R - C) r (A * + C) r (A R _) r x l) r x n) r (+ x @@ -1001,7 +1002,7 @@ _remem) o (rL04_ O .group s ?1 _) s (_W Es|; // within an acronym [s]+[;] not [s;] phoneme ?1 _) s (_ Es -?2 _) s (_ 'Ese +?2 _) s (_ 'Esy s s ss s sc (Y s @@ -1024,14 +1025,8 @@ _remem) o (rL04_ O ?1 A) s (G+ Z ?1 A) s (_KS1 s# ?1 A) s (_G+S1 Z - s (b z - s (d z - s (g z - s (l z - s (m z - s (n z + s (G z sr zx - s (v z _) sobre (@P5 sob*e diff --git a/espeak-data/mbrola_ph/fr1_phtrans b/espeak-data/mbrola_ph/fr1_phtrans index 72b605c6..dc0fcef7 100644 Binary files a/espeak-data/mbrola_ph/fr1_phtrans and b/espeak-data/mbrola_ph/fr1_phtrans differ diff --git a/espeak-data/voices/!v/m3 b/espeak-data/voices/!v/m3 index 581cd883..00479dc3 100644 --- a/espeak-data/voices/!v/m3 +++ b/espeak-data/voices/!v/m3 @@ -13,4 +13,5 @@ formant 6 100 100 100 formant 7 100 100 100 formant 8 100 100 100 +consonants 100 stressAdd 10 10 0 0 0 0 -30 -30 diff --git a/phsource/mbrola/fr1 b/phsource/mbrola/fr1 index 8a06e133..58553a08 100644 --- a/phsource/mbrola/fr1 +++ b/phsource/mbrola/fr1 @@ -1,3 +1,4 @@ +volume 17 0 l/2 NULL 0 l 0 l/ NULL 0 l @@ -10,7 +11,6 @@ 0 j/ NULL 0 j 0 ; NULL 0 NULL 0 g- NULL 0 NULL -0 @- NULL 0 NULL 0 @3 NULL 0 NULL 0 * NULL 0 R 0 : NULL 0 NULL @@ -43,6 +43,7 @@ 0 z2 NULL 0 z 0 z3 NULL 0 z +0 @- NULL 0 @ 0 a- NULL 0 a 0 e- NULL 0 e 0 y- NULL 0 y diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 461bbb44..6d204b12 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -24,6 +24,11 @@ phoneme V vowel flag1 starttype #@ endtype #@ length 130 + IF thisPh(isWordStart) THEN + FMT(vowel/V_3) + RETURN + ENDIF + IF thisPh(isNotStressed) THEN IF prevPh(H) THEN ChangePhoneme(@) @@ -33,7 +38,7 @@ phoneme V ChangePhoneme(NULL) ENDIF - IF NOT nextVowel(isFlag1) THEN + IF prev2PhW(isVowel) AND NOT nextVowel(isFlag1) THEN IF thisPh(isSeqFlag1) THEN // delete the last inherent vowel of a sequence ChangePhoneme(NULL) @@ -513,3 +518,22 @@ phoneme #X2 // click, use for indicating combining long vowels endphoneme +phoneme r + liquid rhotic + lengthmod 3 + + IF thisPh(isWordEnd) THEN + CALL base/r/ + ELSE + IF prevPhW(isVowel) THEN + IF nextPhW(isNotVowel) OR nextPhW(V) THEN + ChangePhoneme(*) + ENDIF + ENDIF + + CALL base/r + ENDIF + ipa ɾ +endphoneme + + \ No newline at end of file diff --git a/platforms/riscos/cpp/speak_riscos b/platforms/riscos/cpp/speak_riscos index 420137be..0b08f6e9 100644 --- a/platforms/riscos/cpp/speak_riscos +++ b/platforms/riscos/cpp/speak_riscos @@ -75,7 +75,7 @@ char path_home[N_PATH_HOME] = ""; char wavefile[120]; char textbuffile[L_tmpnam]; int sample_rate_index; // current value -int current_voice_num=0; +char current_voice_name[40] = {0}; int n_voice_files = 0; int n_voice_variant_files = 0; @@ -194,6 +194,9 @@ void ReadVoiceNames2(char *directory) path_len = strlen(directory); + voice_variant_names[0] = "(none)"; + n_voice_variant_files = 1; + while(regs.r[3] > 0) { error = _kernel_swi(0x0c+os_X,®s,®s); /* OS_GBPB 10, read directory entries */ @@ -452,6 +455,7 @@ void speak_text_string(char *data, int terminator, int len, int wait, int voice_ { int c; int ix; + char *vname; static static_length=0; static int user_token=0; /* increment for each call of translate() */ _kernel_swi_regs regs; @@ -462,12 +466,13 @@ void speak_text_string(char *data, int terminator, int len, int wait, int voice_ option_endpause = 1; - if((voice_num >= 0) && (voice_num != current_voice_num) && (voice_num < N_VOICE_NAMES)) + vname = voice_names[voice_num]; + if((voice_num >= 0) && (strcmp(vname, current_voice_name) != 0) && (voice_num < N_VOICE_NAMES)) { SetVoiceByName(voice_names[voice_num]); - WavegenSetVoice(voice); + WavegenSetVoice(voice); } - current_voice_num = voice_num; + strcmp(current_voice_name, vname); /* don't count CR as terminator if length is specified */ if(len > 0) terminator = 0; @@ -593,8 +598,16 @@ void set_say_options(int reg2, int reg3) option_waveout = 0; option_multibyte = 0; // auto option_capitals = 0; - option_punctuation = 0; - option_punctlist[0] = 0; + if(reg2 >= 0) + { + // not using SWI_SPEAK+14 to set voice and punctiation option + option_punctuation = 0; + option_punctlist[0] = 0; + } + else + { + SetParameter(espeakPUNCTUATION,option_punctuation,0); + } } /* end of set_say_options */ @@ -621,7 +634,7 @@ void jsd_swi_functions(int *r) case 3: // translate into phonemes use_ipa = 0; - if((r[2] >= 1) && (use_ipa <= 3)) + if((r[2] >= 1) && (use_ipa <= 4)) use_ipa = r[2]; TranslateClause(translator,NULL,(char *)r[1],NULL,NULL); GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); @@ -641,7 +654,7 @@ void jsd_swi_functions(int *r) if(r[1] < N_VOICE_NAMES) { SetVoiceByName(voice_names[r[1]]); - current_voice_num = r[1]; + strcmp(current_voice_name, voice_names[r[1]]); WavegenSetVoice(voice); } break; @@ -675,6 +688,8 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) int value; int value2; int q_length; + char *p; + int ix; value = r[0]; switch(swi_no) @@ -682,16 +697,17 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) case 0: // ready ? // returns the index into the source text of the currently speaking word - if(current_source_index > 0) - r[1] = current_source_index-1; + ix = current_source_index & 0x7ff; + if(ix > 0) + r[1] = ix-1; else - r[1] = current_source_index; /* source index */ + r[1] = ix; /* source index */ r[2] = 0; /* source tag */ r[3] = 0; /* for future expansion */ r[4] = 0; r[5] = 0; - if(WcmdqUsed() < 5) + if((WcmdqUsed() < 5) && (more_text == 0)) { r[0] = -1; /* ready, or nearly */ } @@ -774,8 +790,30 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) break; case 14: // set voice by name - SetVoiceByName((char *)r[0]); - WavegenSetVoice(voice); + p = (char *)r[0]; + if(strcmp(p, current_voice_name) != 0) + { + SetVoiceByName(p); + WavegenSetVoice(voice); + strcpy(current_voice_name, p); + } + option_punctuation = 0; + if(r[1] != 0) + { + p = (char *)r[1]; + if(p[0] == 0) + option_punctuation = 1; + else + { + for(ix=0; ix < N_PUNCTLIST; ix++) + { + if((option_punctlist[ix] = p[ix]) == 0) + break; + } + option_punctlist[N_PUNCTLIST-1] = 0; + option_punctuation = 2; + } + } break; } return(NULL); diff --git a/src/dictionary.cpp b/src/dictionary.cpp index fb51399a..15e9d3e5 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -645,6 +645,7 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) char *buf; int count; int flags; + int separate_phonemes = 0; char phon_buf[30]; char phon_buf2[30]; PHONEME_LIST *plist; @@ -652,6 +653,13 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) static const char *stress_chars = "==,,''"; static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner + if(use_ipa == 4) + { + // separate individual phonemes with underscores + use_ipa = 1; + separate_phonemes = '_'; + } + if(phon_out != NULL) { for(ix=1; ix<(n_phoneme_list-2); ix++) @@ -661,6 +669,13 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) plist = &phoneme_list[ix]; if(plist->newword) *buf++ = ' '; + else + { + if((separate_phonemes != 0) && (ix > 1)) + { + *buf++ = separate_phonemes; + } + } if(plist->synthflags & SFLAG_SYLLABLE) { @@ -683,6 +698,8 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) if(c != 0) { buf += utf8_out(c, buf); + if(separate_phonemes) + *buf++ = separate_phonemes; } } } diff --git a/src/espeak.cpp b/src/espeak.cpp index 5fd81d45..8db7b2d1 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -67,7 +67,7 @@ static const char *help_text = "\t Compile pronunciation rules and dictionary from the current\n" "\t directory. specifies the language\n" "--ipa Write phonemes to stdout using International Phonetic Alphabet\n" -"\t --ipa=1 Use ties, --ipa=2 Use ZWJ\n" +"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" "--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n" @@ -620,7 +620,7 @@ int main (int argc, char **argv) { value = -1; sscanf(optarg2,"%d",&value); - if((value<0) || (value>2)) + if((value<0) || (value>3)) { fprintf(stderr,"Bad value for -ipa=\n"); value = 0; diff --git a/src/speak.cpp b/src/speak.cpp index e1fa4b55..c2e30a62 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -101,7 +101,7 @@ static const char *help_text = "\t Compile pronunciation rules and dictionary from the current\n" "\t directory. specifies the language\n" "--ipa Write phonemes to stdout using International Phonetic Alphabet\n" -"\t --ipa=1 Use ties, --ipa=2 Use ZWJ\n" +"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" "--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n" @@ -739,7 +739,7 @@ int main (int argc, char **argv) { value = -1; sscanf(optarg2,"%d",&value); - if((value<0) || (value>2)) + if((value<0) || (value>3)) { fprintf(stderr,"Bad value for -ipa=\n"); value = 0; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 6d6eae4c..ea85a3f3 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.47.04 02.Apr.13"; +const char *version_string = "1.47.04a 05.Apr.13"; const int version_phdata = 0x014701; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 5d1da5bc..303c563f 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1955,7 +1955,7 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) { int use_ipa = 0; if(option_phonemes >= 3) - use_ipa = option_phonemes-2; // 1=ipa, 2=ipa with tie, 3=ipa with ZWJ + use_ipa = option_phonemes-2; // 1=ipa, 2=ipa with tie, 3=ipa with ZWJ, 4=ipa with separators GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); if(option_phonemes > 0) diff --git a/src/voice.h b/src/voice.h index 2346dfb7..36be098f 100644 --- a/src/voice.h +++ b/src/voice.h @@ -21,6 +21,7 @@ typedef struct { char v_name[40]; + char language_name[20]; int phoneme_tab_ix; // phoneme table number int pitch_base; // Hz<<12 diff --git a/src/voices.cpp b/src/voices.cpp index c0486025..cac1f094 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -421,7 +421,7 @@ void VoiceReset(int tone_only) voice->n_harmonic_peaks = 5; voice->peak_shape = 0; voice->voicing = 64; - voice->consonant_amp = 90; // change to 85 for v.1.47 was 100 + voice->consonant_amp = 90; // change from 100 to 90 for v.1.47 voice->consonant_ampv = 100; voice->samplerate = samplerate_native; memset(voice->klattv,0,sizeof(voice->klattv)); @@ -750,6 +750,7 @@ voice_t *LoadVoice(const char *vname, int control) new_translator = SelectTranslator(translator_name); langopts = &new_translator->langopts; + strncpy0(voice->language_name, language_name, sizeof(voice->language_name)); } } break; @@ -1818,6 +1819,7 @@ espeak_ERROR SetVoiceByName(const char *name) } DoVoiceChange(voice); + voice_selector.languages = voice->language_name; SetVoiceStack(&voice_selector, variant_name); return(EE_OK); } @@ -1834,6 +1836,7 @@ espeak_ERROR SetVoiceByName(const char *name) LoadVoice(variant_name,2); } DoVoiceChange(voice); + voice_selector.languages = voice->language_name; SetVoiceStack(&voice_selector, variant_name); return(EE_OK); } @@ -1884,8 +1887,8 @@ void FreeVoiceList() ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) {//======================================================================== char path_voices[sizeof(path_home)+12]; - - + + #ifdef PLATFORM_RISCOS if(n_voices_list == 0) {