From 70915e2a92a47b3e565bc11a09e552055f354855 Mon Sep 17 00:00:00 2001 From: jonsd Date: Wed, 6 Mar 2013 10:24:43 +0000 Subject: [PATCH] [1.46.42] Command line option -X now lists *_list flags by name. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@308 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 16 ++--- dictsource/en_list | 11 +++- dictsource/en_rules | 1 + dictsource/ml_rules | 39 ++++++++--- dictsource/nl_list | 5 ++ dictsource/nl_rules | 20 ++++-- dictsource/pt_list | 47 +------------ dictsource/pt_rules | 30 ++++++--- dictsource/ro_list | 2 +- dictsource/ro_rules | 2 + dictsource/ta_list | 6 ++ phsource/compile_report | 24 +++---- platforms/windows/espeakedit/src/speech.h | 2 +- .../windows/espeakedit/src_copy/speech.h | 2 +- platforms/windows/make_espeak.iss | 10 ++- src/compiledict.cpp | 33 ++++++++-- src/dictionary.cpp | 66 +++++-------------- src/espeak_command.cpp | 46 ++++++------- src/numbers.cpp | 26 ++------ src/speech.h | 2 +- src/synthdata.cpp | 2 +- src/tr_languages.cpp | 14 ++-- src/translate.cpp | 13 ++-- src/translate.h | 13 ++-- src/voices.cpp | 48 +++++++++----- src/wave.cpp | 2 +- src/wave_pulse.cpp | 2 +- src/wave_sada.cpp | 2 +- 28 files changed, 251 insertions(+), 235 deletions(-) diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 7937746a..c82db939 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -103,7 +103,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2013-03-02 +Dictionary en_dict 2013-03-06 0 0# 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 @@ -205,7 +205,7 @@ q r r. s S s. t T t. th th. v w x z -Dictionary ta_dict 2013-03-03 +Dictionary ta_dict 2013-03-05 a a: aI aU e E e: i I i: o o: u U u2 u: @@ -330,7 +330,7 @@ k l m n p R s S t tS v w x -Dictionary nl_dict 2013-03-03 +Dictionary nl_dict 2013-03-05 8 @ @- a A a: A~ e E e# E2 e: EI eU i I @@ -338,9 +338,9 @@ o O O: o: O~ u VU Wy y Y: yU * : ; b d D dZ f -g h j k l m n N -n^ p Q r s S t tS -v v# w x z Z +g h j k l L m n +N n^ p Q r s S t +tS v v# w x z Z Dictionary no_dict 2011-03-07 @@ -378,7 +378,7 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2013-03-02 +Dictionary pt_dict 2013-03-06 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -392,7 +392,7 @@ S s# s; t T tS ts v w x z Z -Dictionary ro_dict 2011-07-21 +Dictionary ro_dict 2013-03-04 @ @- @I @U a aI aU e ea eI eo eU i i/ I^ iI diff --git a/dictsource/en_list b/dictsource/en_list index a521e25b..106e12f9 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -19,6 +19,7 @@ // $alt1 use strong ending (-table, -inal) // $alt2 use weak ending // $alt3 use weak first vowel, a->[a#], e->[@], o->[0#] +// $alt6 'to' // letter names, as they are spoken as a single character in text @@ -261,11 +262,12 @@ _hi h'Indi _bn bEng'A:li _gur g'U@mUki _gu gu:dZ3r'A:ti -_or 0r'i@ +_or O:r'ia: _ta t'amI2l +_te t'Elugu _kn k'A:na#d@ _ml maleI'A:l@m -_si sI2nh'A:l@ +_si s'INh@l@ _th t'aI _lo l'aU _ti tI2b'Et@n @@ -3773,7 +3775,7 @@ for fO@ $u (for a while) f@@||w'aIl (for one) fO@w0n $2 $atend -to t@5 $verbf // @ change to U before vowel +to t@5 $verbf $alt6 // @ change to U before vowel (to be) t@b%i $pastf (to be) t@||'bi: $atend (to to) %tU_t@5 $verbf @@ -4036,6 +4038,9 @@ thou DaU thy ,DaI thine ,DaIn +(i had) aI||h'ad $atend +(he had) hi:||h'ad $atend + me ,mi: $only me mi: $atstart $atend him ,hIm $only diff --git a/dictsource/en_rules b/dictsource/en_rules index 5a6576c4..7e92b8fd 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -2768,6 +2768,7 @@ h (_ _B) h @) hammed h'amId + d) h (am_ A) han (_ han // places e) han (_ h@n ha (st heI diff --git a/dictsource/ml_rules b/dictsource/ml_rules index ef9e9d87..49c0d321 100644 --- a/dictsource/ml_rules +++ b/dictsource/ml_rules @@ -5,6 +5,9 @@ // A means vowel letters (not vowel signs) // B means a combining vowel sign or a virama +// change (k t. t p) to (g d. d b) if followed by a vowel, unless at start of a word or preceeded by an unvoiced stop consonant ?? +.L01 _ ക് ച് ട് ത് പ് + .replace ൦ 0 // Convert Malayalam numbers @@ -24,8 +27,13 @@ .group ക - ക ka - ക (B k + ക് k + L01) ക ka + L01) ക (B k + ക ga + ക (B g + ക്ക k:a + ക്ക (B k: .group ഖ ഖ kha @@ -64,8 +72,13 @@ ഞ (B n^ .group ട - ട t.a - ട (B t. + ട് t. + L01) ട t.a + L01) ട (B t. + ട d.a + ട (B d. + ട്ട t.:a + ട്ട (B t.: .group ഠ ഠ th.a @@ -84,8 +97,13 @@ ണ (B n. .group ത - ത ta - ത (B t + ത് t + L01) ത ta + L01) ത (B t + ത da + ത (B d + ത്ത t:a + ത്ത (B t: .group ഥ ഥ tha @@ -104,8 +122,13 @@ ന (B n .group പ - പ pa - പ (B p + പ് p + L01) പ pa + L01) പ (B p + പ ba + പ (B b + പ്പ p:a + പ്പ (B p: .group ഫ ഫ pha diff --git a/dictsource/nl_list b/dictsource/nl_list index 8842911f..4bca6835 100644 --- a/dictsource/nl_list +++ b/dictsource/nl_list @@ -1,6 +1,7 @@ // This file in UTF8 encoded +// $alt2, remove s from plural, remove en from plural // Use $alt3 where 'ng' and 'nk' is 'n+g' not [N] // Letters @@ -1408,6 +1409,7 @@ armand _^_FR augustus VUQ'8st8s bacterie bAkt'I:ri banengids $alt3 +bascule $2 beha be:_h'a: beige bEZ@ benard b@nArt @@ -1444,6 +1446,8 @@ damascering damA;s'e:rIN december $2 dieet $2 diesel diz@l +discipline $3 +//discussie $2 divers div'Ers diftongering dIft,ON'e:rIN doordat $2 @@ -1474,6 +1478,7 @@ januari $3 kadaster $2 mangat $alt3 materie ma:t'e:ri +maatregel ma:tre:Q@l $alt2 maxima $1 meteen mEt'e:n metro me:tro: diff --git a/dictsource/nl_rules b/dictsource/nl_rules index a33f4c04..655f8a62 100644 --- a/dictsource/nl_rules +++ b/dictsource/nl_rules @@ -4,6 +4,7 @@ // Suffix rule: SUFX_E eg. S2e means double the vowel before the final consonant .L01 g k +.L02 _ t_ d_ de_ den_ // verb endings .group a @@ -65,6 +66,7 @@ &) bare (_S4 =ba:r@ _) bij (C@P3 b'EI bij (zond b%i + _) bijeen bEI'e:n _) binnen (P6 b'In@n _) boven (P5 b'o:v@n _) brand br'And @@ -188,7 +190,8 @@ ig) e (_+S1qd @ ea (_ 'e:a: - eau o: //words with French origin + eau 'o: //words with French origin +// eau (_ 'o: @) ee (_ 'e: @) ee (X_ 'e: @) ee (r_ 'I @@ -214,6 +217,7 @@ &) el (ingen_$p_alt =@l @) elen (_ 'e:l@n + @) el (en_$p_alt2 @L &) elijks @l@ks &) em (_ @m &) e (ment @ @@ -256,7 +260,6 @@ @) etten (_S3 @n @) es (_$p_alt @s // for wors which end on [@] with multiple on 's'. - eau (_ 'o: euille @'y eum (_$w_alt 'e:8m @mus) eum (_ ,e:8m // compounds @@ -360,11 +363,13 @@ ie i ieuw iw iee ie: + ii i d) ie (_ 'i g) ie (_ 'i m) ie (_ 'i p) ie (_ 'i + ss) ie (_ =i ieus (_ ij'Y:s ieuze (_ ij'Y:z@ ieuzer (_ ij'Y:z@r @@ -407,6 +412,7 @@ io (nage iO io (de_ i'o: iodes (_ i'o:d@s + _) in (scrip In is (_ Is @) isch (_ =is @) ische (_ =is@ @@ -521,6 +527,7 @@ _) inn (@P2 'I // ?? inneren @@C) o (_ =o: obsc (u opsk oe (X_ 'u + office Of@s oir (_ 'v#a:r pl) oi (t v#A c) oi (ffu v#A @@ -532,6 +539,7 @@ _) inn (@P2 'I // ?? inneren _) oost (@P4 o:st _) op (@@P2 'Op _) open (@P4 'o:p@n + _) op (enen 'o:p _) openings (P8 'o:p@nINs _) op (era 'o:p _) op (tion Op @@ -620,7 +628,8 @@ _) inn (@P2 'I // ?? inneren A) s (A z s (b z s (d z - sc s + sc (e s + sc (i s sch sx sch (_ s sch (e_ s @@ -633,11 +642,14 @@ _) inn (@P2 'I // ?? inneren a) s (_ s @) s (_$w_alt =s - _) samen(@P5 s'a:m@n + _) samen(@P5 s'a:m@n + _) scan (L02 skEn + science saI@ns sc (oop sk sc (opi sk &) sel (_ =s@l &) selen (_ =s@l@n + service s8v@s @) si (o S A) si (o Z @) ssi (o S diff --git a/dictsource/pt_list b/dictsource/pt_list index f7005d56..3d8a3d0b 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -631,8 +631,8 @@ abacaxi abakaSy abordo $alt aborto $alt $verb acerto $alt2 $noun -acordo $alt $verb acertos $alt2 +acordo $alt $verb acervo $alt2 adepto $alt adereço $alt2 @@ -663,8 +663,6 @@ ateia $alt aterro $alt2 $noun atmosfera $alt atrozes $alt -austera $alt -austero $alt autora $alt2 avesso $alt2 axé aSE @@ -706,8 +704,6 @@ cefaleia $alt cerca $alt cerca $alt2 $noun cerco $alt $verb -cesta $alt2 -cesto $alt2 chamego $alt2 chefe $alt checam $alt @@ -737,8 +733,6 @@ consolo $alt2 $noun contivermos $alt controle $alt2 $noun controlo $alt2 $noun -copa $alt -copo $alt coreia $alt corneta $alt2 cornos $alt @@ -751,8 +745,6 @@ couberdes $alt coubermos $alt cratera $alt crede $alt2 -cresce $alt -crescem $alt der $alt derdes $alt desapego $alt2 $noun @@ -779,14 +771,7 @@ encosto $alt $verb endereço $alt2 endereço $alt $verb enforco $alt -enforque $alt -enforquem $alt engordo $alt -ensopa $alt -ensopam $alt -ensope $alt -ensopem $alt -ensopo $alt enredo $alt $verb enterro $alt2 $noun enumerem $alt @@ -877,16 +862,10 @@ houvermos $alt ideia $alt insonoro $alt interesse $alt2 $noun -joga $alt -jogam$alt -jogo $alt $verb -jogos $alt -jogue $alt -joguem $alt +jogo $alt2 $noun joguete $alt2 lambreta $alt2 lebre $alt -líderes $alt2 lopes $alt maior $alt maleta $alt2 @@ -913,7 +892,6 @@ minueto $alt2 miolo $alt2 miolos $alt moeda $alt -modo $alt modos $alt molho $alt2 $noun monera $alt @@ -1001,20 +979,12 @@ reitora $alt2 relevo $alt2 $noun remorso $alt reprovo $alt -resolve $alt -resolvem $alt retorno $alt $verb rixa x'iS& rocha $alt rock $alt -rogas $alt rola $alt2 $noun rolo $alt2 $noun -rosna $alt -rosnam $alt -rosne $alt -rosnem $alt -rosno $alt rumores $alt2 saleta $alt2 sarjeta $alt @@ -1029,17 +999,10 @@ sexteto $alt2 ?1 senhora $alt2 senhores $alt2 sinopse $alt -sobe $alt -sobem $alt soco $alt2 soco $alt $verb -sofrem $alt -sofre $alt -sofreste $alt2 sogra $alt -sopre $alt -soprem $alt -sopro $alt $verb +sopro $alt2 $noun soro $alt2 sorvete $alt2 sossego $alt2 $noun @@ -1058,10 +1021,6 @@ tiverdes $alt tivermos $alt tocha $alt toga $alt -tola $alt2 -tolo $alt2 -tolhe $alt -tolhem $alt topo $alt $verb torno $alt $verb torre $alt2 $noun diff --git a/dictsource/pt_rules b/dictsource/pt_rules index ec031928..a40fdb92 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -413,8 +413,8 @@ respond) e (L07_ e // cor- _estr) ei (L03_ EI _inv) e (jL04_ E _dec) e (pL04_ E - _s) e (quL02_ E _p) e (quL02_ E + _s) e (quL02_ E l) e (que_ E _sug) e (rL02_ E _imp) e (rL03_ E @@ -442,24 +442,26 @@ respond) e (L07_ e // cor- _f) e (rvL03_ e _p) e (sL01_ E _d) e (scL02_ E + _cr) e (scL02_ E _p) e (scL03_ E _m) e (sclL04 E _l) e (ssL02_ e _esp) e (ssL03_ e + _c) e (stL03_ e _m) e (tL03_ e + _pr) e (tL03_ e _com) e (tL03_ e _rem) e (tL03_ e prom) e (tL03_ e // com- _derr) e (tL03_ e _obsol) e (tL03_ e - _pr) e (tL03_ e _sol) e (trL03_ E _pen) e (trL04_ E - scr) e (vL03_ e // e- in- pre- ree- de- _d) e (vL03_ e + scr) e (vL03_ e // e- in- pre- ree- de- _atr) e (vL03_ e -_embel) e (zL04_ E pr) e (zL04_ E / des- menos- +_embel) e (zL04_ E _acont) e (çL01_ e _arref) e (çL01_ e par) e (çL03_ e // a- re- com- rea- desa- @@ -469,7 +471,6 @@ _arref) e (çL01_ e _mer) e (çL03_ e _pad) e (çL03_ e // com- _per) e (çL03_ e -_rejuven) e (çL03_ e conh) e (çL03_ e // re- _esqu) e (çL03_ e _forn) e (çL03_ e @@ -488,6 +489,7 @@ _envelh) e (çL03_ e _esclar) e (çL03_ e _estrem) e (çL03_ e _fortal) e (çL03_ e +_rejuven) e (çL03_ e //endsort @@ -779,26 +781,34 @@ _fortal) e (çL03_ e //sort _engl) o (bL01_ O + _s) o (bL02_ O _esn) o (bL04_ O _deb) o (chL04_ O _desabr) o (chL04_ O + _s) o (frL02_ O + _j) o (gL04_ O _r) o (gL04_ O _adv) o (gL04_ O _ref) o (gL04_ O _ap) oi (L01_ OI - _esc) o (lhL02_ O + _t) o (lL03_ o + c) o (lhL02_ O / es- en- re- + _t) o (lhL02_ O _m) o (lhL04_ O + env) o (lvL02_ O / des- _abs) o (lvL02_ O - _env) o (lvL02_ O + _res) o (lvL02_ O _rev) o (lvL02_ O -_desenv) o (lvL02_ O _ent) o (pL02_ O + _c) o (pL03_ O + _ens) o (pL04_ O + _s) o (prL04_ O + _enf) o (rquL02_ O c) o (rrL01_ o // escorra, incorra, corra, recorra _m) o (rrL01_ o + _r) o (snL04_ O _c) o (spL02_ O p) ostos (_ Ost=Us# // dispostos etc. - _s) o (bL02_ O - _s) o (prL02_ O //endsort .group ô diff --git a/dictsource/ro_list b/dictsource/ro_list index 05970422..ebfcb482 100644 --- a/dictsource/ro_list +++ b/dictsource/ro_list @@ -2291,7 +2291,7 @@ vindeţi $1 vinovăţi $alt vinovăţii $4 virgulă $1 -vis-a-vis vizav'i +(vis-a vis) vizav'i viscol $1 vitreg $1 vitrege $1 diff --git a/dictsource/ro_rules b/dictsource/ro_rules index 975461b9..984d6ae4 100644 --- a/dictsource/ro_rules +++ b/dictsource/ro_rules @@ -198,6 +198,8 @@ ţi-) i (_ _ // combined with previous word as [iI] Cr) i (_+++ i V&) i (N_ 'i // verb + + @) i (A$p_alt1 i // i is not [j] ăC) ia (_ 'ia âC) ia (_ 'ia ăC) ie (_ 'ie diff --git a/dictsource/ta_list b/dictsource/ta_list index 083ff0e2..03a308a2 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -113,6 +113,12 @@ U+bf9 ru:ba:j ½ araI ¾ mukka:l +// alphabet names +_ar arVbU +_cyr sirillik +_he ;ebire:jVm + + // abbreviations ரூ ru:ba:j $dot $only (பி . ஏ) bije: $dot diff --git a/phsource/compile_report b/phsource/compile_report index 1019b474..7f15008c 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -433,8 +433,8 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [l#] base - [X)]] base +l/l@ [¨\-] base + [l#] base [l] fr [l/2] fr [K] nso @@ -467,16 +467,16 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [l#] base - [X)]] base +l/la [¨\-] base + [l#] base [l] fr [l/2] fr [K] nso [K] tn l/l_a [l/3] base [l/] fr -l/le [l#] base - [X)]] base +l/le [¨\-] base + [l#] base [l] fr [l/2] fr [K] nso @@ -487,8 +487,8 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [l#] base - [X)]] base +l/li [¨\-] base + [l#] base [l] fr [l/2] fr [l] zh @@ -501,8 +501,8 @@ ll/ll [L] base ll/_ll [L] base l/l_long [l] base [l] fr -l/lo [l#] base - [X)]] base +l/lo [¨\-] base + [l#] base [l/2] fr [K] nso [K] tn @@ -512,8 +512,8 @@ l^/l_rfx [l.] base [l;] lt [l] ru [l^] ru -l/lu [l#] base - [X)]] base +l/lu [¨\-] base + [l#] base [l] fr [l/2] fr [K] nso diff --git a/platforms/windows/espeakedit/src/speech.h b/platforms/windows/espeakedit/src/speech.h index a004b157..a3e9b203 100755 --- a/platforms/windows/espeakedit/src/speech.h +++ b/platforms/windows/espeakedit/src/speech.h @@ -37,7 +37,7 @@ #define mkdir(p1,p2) mkdir(p1) #define PATHSEP '\\' -#define USE_PORTAUDIO +//#define USE_PORTAUDIO //#define USE_NANOSLEEP #define NO_VARIADIC_MACROS #define __cdecl diff --git a/platforms/windows/espeakedit/src_copy/speech.h b/platforms/windows/espeakedit/src_copy/speech.h index a004b157..a3e9b203 100755 --- a/platforms/windows/espeakedit/src_copy/speech.h +++ b/platforms/windows/espeakedit/src_copy/speech.h @@ -37,7 +37,7 @@ #define mkdir(p1,p2) mkdir(p1) #define PATHSEP '\\' -#define USE_PORTAUDIO +//#define USE_PORTAUDIO //#define USE_NANOSLEEP #define NO_VARIADIC_MACROS #define __cdecl diff --git a/platforms/windows/make_espeak.iss b/platforms/windows/make_espeak.iss index 24368b09..53bc3866 100755 --- a/platforms/windows/make_espeak.iss +++ b/platforms/windows/make_espeak.iss @@ -2,7 +2,7 @@ [Setup] AppName=eSpeak -AppVerName=eSpeak version 1.46.31 +AppVerName=eSpeak version 1.46.42 AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). WindowVisible=yes @@ -18,6 +18,11 @@ Name: "{group}\TTSApp"; Filename: "{app}\TTSApp.exe"; WorkingDir: "{app}" [InstallDelete] Type: files; Name: "{app}\espeak.dll" +Type: files; Name: "{app}\espeak-data\voices\*" +Type: filesandordirs; Name: "{app}\espeak-data\voices\en" +Type: filesandordirs; Name: "{app}\espeak-data\voices\asia" +Type: filesandordirs; Name: "{app}\espeak-data\voices\europe" +Type: filesandordirs; Name: "{app}\espeak-data\voices\other" Type: filesandordirs; Name: "{app}\espeak-data\voices\test" Type: filesandordirs; Name: "{app}\docs" @@ -161,6 +166,7 @@ begin $41: Result := 'sw'; //$44: Result := 'tt'; $49: Result := 'ta'; + $46: Result := 'pa'; $4b: Result := 'kn'; //$50: Result := 'mn'; $52: Result := 'cy'; @@ -208,6 +214,7 @@ begin 'an': value := $40a; // Aragon, use code for Spanish 'az': value := $42c; 'bg': value := $402; + 'bn': value := $445; 'bs': value := $41a; // should be $141a but Jaws crashes on startup 'ca': value := $403; 'cs': value := $405; @@ -247,6 +254,7 @@ begin 'ne': value := $461; 'nl': value := $413; 'no': value := $414; + 'pa': value := $446; 'pl': value := $415; 'pt': value := $416; 'ro': value := $418; diff --git a/src/compiledict.cpp b/src/compiledict.cpp index bb4f7860..10427913 100644 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -192,12 +192,35 @@ const char *LookupMnemName(MNEM_TAB *table, const int value) } /* end of LookupMnemValue */ -char *print_dictionary_flags(unsigned int *flags) -{//============================================== - static char buf[20]; +void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len) +{//======================================================================== + int stress; + int ix; + const char *name; + int len; + int total = 0; - sprintf(buf,"%s 0x%x/%x",LookupMnemName(mnem_flags,(flags[0] & 0xf)+0x40), flags[0], flags[1]); - return(buf); + buf[0] = 0; + if((stress = flags[0] & 0xf) != 0) + { + sprintf(buf, "%s", LookupMnemName(mnem_flags, stress + 0x40)); + total = strlen(buf); + buf += total; + } + + for(ix=8; ix<64; ix++) + { + if(((ix < 30) && (flags[0] & (1 << ix))) || ((ix >= 0x20) && (flags[1] & (1 << (ix-0x20))))) + { + name = LookupMnemName(mnem_flags, ix); + len = strlen(name) + 1; + total += len; + if(total >= buf_len) + continue; + sprintf(buf, " %s", name); + buf += len; + } + } } diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 720c5723..30079784 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -37,7 +37,7 @@ int dictionary_skipwords; char dictionary_name[40]; -extern char *print_dictionary_flags(unsigned int *flags); +extern void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len); extern char *DecodeRule(const char *group_chars, int group_length, char *rule, int control); // accented characters which indicate (in some languages) the start of a separate syllable @@ -770,7 +770,7 @@ static int IsLetterGroup(Translator *tr, char *word, int group, int pre) { w = word; } - while(*p == *w) + while((*p == *w) && (*w != 0)) { w++; p++; @@ -2715,7 +2715,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c p += (wc_bytes-1); } - if(((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->language != 0) && (alphabet->offset != tr->letter_bits_offset)) + if(((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->flags & AL_WORDS) && (alphabet->offset != tr->letter_bits_offset)) { // switch to the nominated language for this alphabet sprintf(phonemes,"%c%s",phonSWITCH, WordToString2(alphabet->language)); @@ -2808,8 +2808,6 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c } } - // any language specific changes ? - ApplySpecialAttribute(tr,phonemes,dict_flags0); memcpy(p_start,word_copy,strlen(word_copy)); return(0); @@ -2853,46 +2851,6 @@ void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags) } // end of ApplySpecialAttribute2 -void ApplySpecialAttribute(Translator *tr, char *phonemes, int dict_flags) -{//======================================================================= -// Amend the translated phonemes according to an attribute which is specific for the language. - int len; - char *p_end; - - if((dict_flags & (FLAG_ALT_TRANS | FLAG_ALT2_TRANS)) == 0) - return; - - len = strlen(phonemes); - p_end = &phonemes[len-1]; - - switch(tr->translator_name) - { -#ifdef deleted -// this is now done in de_rules - case L('d','e'): - if(p_end[0] == PhonemeCode2('i',':')) - { - // words ends in ['i:], change to [=I@] - p_end[-1] = phonSTRESS_PREV; - p_end[0] = PhonemeCode('I'); - p_end[1] = phonSCHWA; - p_end[2] = 0; - } - break; -#endif - - case L('r','o'): - if(p_end[0] == PhonemeCode('j')) - { - // word end in [j], change to ['i] - p_end[0] = phonSTRESS_P; - p_end[1] = PhonemeCode('i'); - p_end[2] = 0; - } - break; - } -} // end of ApplySpecialAttribute - //============================================================================================= @@ -3045,6 +3003,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor const char *word1; int wflags = 0; char word_buf[N_WORD_BYTES+1]; + char dict_flags_buf[80]; if(wtab != NULL) { @@ -3265,6 +3224,11 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor if(tr->expect_verb || (tr->expect_verb_s && (end_flags & FLAG_SUFX_S))) { // OK, we are expecting a verb + if((tr->translator_name == L('e','n')) && (tr->prev_dict_flags[0] & FLAG_ALT6_TRANS) && (end_flags & FLAG_SUFX_S)) + { + // lang=en, don't use verb form after 'to' if the word has 's' suffix + continue; + } } else { @@ -3294,7 +3258,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor if(dictionary_flags & FLAG_ALT2_TRANS) { // language specific - if((tr->translator_name == L('h','u')) && !(tr->prev_dict_flags & FLAG_ALT_TRANS)) + if((tr->translator_name == L('h','u')) && !(tr->prev_dict_flags[0] & FLAG_ALT_TRANS)) continue; } @@ -3308,7 +3272,8 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor { if(option_phonemes == 2) { - fprintf(f_trans,"Flags: %s %s\n",word1,print_dictionary_flags(flags)); + print_dictionary_flags(flags, dict_flags_buf, sizeof(dict_flags_buf)); + fprintf(f_trans,"Flags: %s %s\n", word1, dict_flags_buf); } return(0); // no phoneme translation found here, only flags. So use rules } @@ -3331,19 +3296,20 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor if(textmode == translator->langopts.textmode) { // only show this line if the word translates to phonemes, not replacement text - if((dictionary_skipwords) && (wtab != NULL)) + if((dictionary_flags & FLAG_SKIPWORDS) && (wtab != NULL)) { // matched more than one word // (check for wtab prevents showing RULE_SPELLING byte when speaking individual letters) memcpy(word_buf,word2,word_end-word2); word_buf[word_end-word2-1] = 0; - fprintf(f_trans,"Found: '%s %s",word1,word_buf); + fprintf(f_trans,"Found: '%s %s\n",word1,word_buf); } else { fprintf(f_trans,"Found: '%s",word1); } - fprintf(f_trans,"' [%s] %s\n",ph_decoded,print_dictionary_flags(flags)); + print_dictionary_flags(flags, dict_flags_buf, sizeof(dict_flags_buf)); + fprintf(f_trans,"' [%s] %s\n", ph_decoded,dict_flags_buf); } } diff --git a/src/espeak_command.cpp b/src/espeak_command.cpp index c0030e63..d8460c75 100644 --- a/src/espeak_command.cpp +++ b/src/espeak_command.cpp @@ -46,14 +46,14 @@ t_espeak_command* create_espeak_text(const void *text, size_t size, unsigned int { goto text_error; } - - a_text = malloc( size ); + + a_text = malloc( size+1 ); if (!a_text) { goto text_error; } memcpy(a_text, text, size); - + a_command->type = ET_TEXT; a_command->state = CS_UNDEFINED; data = &(a_command->u.my_text); @@ -102,7 +102,7 @@ t_espeak_command* create_espeak_terminated_msg(unsigned int unique_identifier, v { goto msg_error; } - + a_command->type = ET_TERMINATED_MSG; a_command->state = CS_UNDEFINED; data = &(a_command->u.my_terminated_msg); @@ -234,7 +234,7 @@ t_espeak_command* create_espeak_char(wchar_t character, void* user_data) { goto char_error; } - + a_command->type = ET_CHAR; a_command->state = CS_UNDEFINED; a_command->u.my_char.user_data = user_data; @@ -270,11 +270,11 @@ t_espeak_command* create_espeak_parameter(espeak_PARAMETER parameter, int value, { goto param_error; } - + a_command->type = ET_PARAMETER; a_command->state = CS_UNDEFINED; data = &(a_command->u.my_param); - data->parameter = parameter; + data->parameter = parameter; data->value = value; data->relative = relative; a_error=0; @@ -308,7 +308,7 @@ t_espeak_command* create_espeak_punctuation_list(const wchar_t *punctlist) { goto list_error; } - + a_command->type = ET_PUNCTUATION_LIST; a_command->state = CS_UNDEFINED; @@ -350,7 +350,7 @@ t_espeak_command* create_espeak_voice_name(const char *name) { goto name_error; } - + a_command->type = ET_VOICE_NAME; a_command->state = CS_UNDEFINED; a_command->u.my_voice_name = strdup( name); @@ -381,7 +381,7 @@ t_espeak_command* create_espeak_voice_spec(espeak_VOICE *voice) { goto spec_error; } - + a_command->type = ET_VOICE_SPEC; a_command->state = CS_UNDEFINED; { @@ -451,11 +451,11 @@ int delete_espeak_command( t_espeak_command* the_command) break; case ET_TERMINATED_MSG: - { + { // if the terminated msg is pending, - // it must be processed here for informing the calling program + // it must be processed here for informing the calling program // that its message is finished. - // This can be important for cleaning the related user data. + // This can be important for cleaning the related user data. t_espeak_terminated_msg* data = &(the_command->u.my_terminated_msg); if (the_command->state == CS_PENDING) { @@ -491,7 +491,7 @@ int delete_espeak_command( t_espeak_command* the_command) free((void*)(the_command->u.my_voice_name)); } break; - + case ET_VOICE_SPEC: { espeak_VOICE* data = &(the_command->u.my_voice_spec); @@ -542,23 +542,23 @@ void process_espeak_command( t_espeak_command* the_command) case ET_TEXT: { t_espeak_text* data = &(the_command->u.my_text); - sync_espeak_Synth( data->unique_identifier, data->text, data->size, - data->position, data->position_type, - data->end_position, data->flags, data->user_data); + sync_espeak_Synth( data->unique_identifier, data->text, data->size, + data->position, data->position_type, + data->end_position, data->flags, data->user_data); } break; case ET_MARK: { t_espeak_mark* data = &(the_command->u.my_mark); - sync_espeak_Synth_Mark( data->unique_identifier, data->text, data->size, - data->index_mark, data->end_position, data->flags, + sync_espeak_Synth_Mark( data->unique_identifier, data->text, data->size, + data->index_mark, data->end_position, data->flags, data->user_data); } break; case ET_TERMINATED_MSG: - { + { t_espeak_terminated_msg* data = &(the_command->u.my_terminated_msg); sync_espeak_terminated_msg( data->unique_identifier, data->user_data); } @@ -654,8 +654,8 @@ void display_espeak_command( t_espeak_command* the_command) { t_espeak_terminated_msg* data = &(the_command->u.my_terminated_msg); - SHOW("display_espeak_command > (0x%x) TERMINATED_MSG uid=%d, user_data=0x%x, state=%d\n", - the_command, data->unique_identifier, data->user_data, + SHOW("display_espeak_command > (0x%x) TERMINATED_MSG uid=%d, user_data=0x%x, state=%d\n", + the_command, data->unique_identifier, data->user_data, the_command->state); } break; @@ -670,7 +670,7 @@ void display_espeak_command( t_espeak_command* the_command) case ET_PARAMETER: { t_espeak_parameter* data = &(the_command->u.my_param); - SHOW("display_espeak_command > (0x%x) PARAMETER=%d, value=%d, relative=%d\n", + SHOW("display_espeak_command > (0x%x) PARAMETER=%d, value=%d, relative=%d\n", the_command, data->parameter, data->value, data->relative); } break; diff --git a/src/numbers.cpp b/src/numbers.cpp index bbc78423..ecd5d288 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -631,25 +631,6 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) return(0); } -#ifdef deleted - if((ph_buf[0] == 0) && (tr->translator_name != L('e','n'))) - { - // speak as English, check whether there is a translation for this character - SetTranslator2("en"); - save_option_phonemes = option_phonemes; - option_phonemes = 0; - LookupLetter(translator2, letter, word[n_bytes], ph_buf, control & 1); - SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table - option_phonemes = save_option_phonemes; - - if(ph_buf[0] != 0) - { - sprintf(phonemes,"%cen",phonSWITCH); - return(0); - } - } -#endif - alphabet = AlphabetFromChar(letter); if(alphabet != current_alphabet) { @@ -892,7 +873,7 @@ static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB nextflags = TranslateWord(tr, &word_end[2], 0, NULL, NULL); } -if((tr->prev_dict_flags & FLAG_ALT_TRANS) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || iswdigit(c2))) +if((tr->prev_dict_flags[0] & FLAG_ALT_TRANS) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || iswdigit(c2))) ordinal = 0; // TEST 09.02.10 if(nextflags & FLAG_ALT_TRANS) @@ -903,7 +884,7 @@ if((tr->prev_dict_flags & FLAG_ALT_TRANS) && ((c2 == 0) || (wtab[0].flags & FLAG if(word[-2] == '-') ordinal = 0; // eg. december 2-5. között - if(tr->prev_dict_flags & (FLAG_ALT_TRANS | FLAG_ALT3_TRANS)) + if(tr->prev_dict_flags[0] & (FLAG_ALT_TRANS | FLAG_ALT3_TRANS)) ordinal = 0x22; } } @@ -1052,7 +1033,8 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) } } - tr->prev_dict_flags = 0; + tr->prev_dict_flags[0] = 0; + tr->prev_dict_flags[1] = 0; TranslateNumber(tr, &number_chars[2], p, flags, wtab, num_control); if(tr->langopts.numbers & NUM_ROMAN_AFTER) diff --git a/src/speech.h b/src/speech.h index 8f37f343..d4d4cb7d 100644 --- a/src/speech.h +++ b/src/speech.h @@ -51,7 +51,7 @@ #endif #ifdef _ESPEAKEDIT -#define USE_PORTAUDIO +//#define USE_PORTAUDIO #define USE_ASYNC #define LOG_FRAMES // write keyframe info to log-espeakedit #endif diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 318b8fa8..9959794f 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.41 03.Mar.13"; +const char *version_string = "1.46.42 06.Mar.13"; const int version_phdata = 0x014640; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index e71750e1..4f66bb59 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -73,25 +73,25 @@ ALPHABET alphabets [] = { {"_el", OFFSET_GREEK, 0x380, 0x3ff, L('e','l'), AL_DONT_NAME | AL_NOT_LETTERS}, {"_cyr", OFFSET_CYRILLIC, 0x400, 0x52f, 0, 0}, - {"_hy", OFFSET_ARMENIAN, 0x530, 0x58f, L('h','y'), 0}, + {"_hy", OFFSET_ARMENIAN, 0x530, 0x58f, L('h','y'), AL_WORDS}, {"_he", OFFSET_HEBREW, 0x590, 0x5ff, 0, 0}, {"_ar", OFFSET_ARABIC, 0x600, 0x6ff, 0, 0}, {"_dv", OFFSET_THAANA, 0x780, 0x7bf, 0, 0}, - {"_hi", OFFSET_DEVANAGARI, 0x900, 0x97f,L('h','i'), 0}, + {"_hi", OFFSET_DEVANAGARI, 0x900, 0x97f,L('h','i'), AL_WORDS}, {"_bn", OFFSET_BENGALI, 0x0980, 0x9ff, 0, 0}, {"_gur", OFFSET_GURMUKHI, 0xa00, 0xa7f, 0, 0}, {"_gu", OFFSET_GUJARATI, 0xa80, 0xaff, 0, 0}, {"_or", OFFSET_ORIYA, 0xb00, 0xb7f, 0, 0}, - {"_ta", OFFSET_TAMIL, 0xb80, 0xbff, L('t','a'), 0}, - {"_te", OFFSET_TELUGU, 0xc00, 0xc7f, 0, 0}, - {"_kn", OFFSET_KANNADA, 0xc80, 0xcff, L('k','n'), 0}, - {"_ml", OFFSET_MALAYALAM,0xd00, 0xd7f, L('m','l'), 0}, + {"_ta", OFFSET_TAMIL, 0xb80, 0xbff, L('t','a'), AL_WORDS}, + {"_te", OFFSET_TELUGU, 0xc00, 0xc7f, L('t','e'), 0}, + {"_kn", OFFSET_KANNADA, 0xc80, 0xcff, L('k','n'), AL_WORDS}, + {"_ml", OFFSET_MALAYALAM,0xd00, 0xd7f, L('m','l'), AL_WORDS}, {"_si", OFFSET_SINHALA, 0xd80, 0xdff, 0, 0}, {"_th", OFFSET_THAI, 0xe00, 0xe7f, 0, 0}, {"_lo", OFFSET_LAO, 0xe80, 0xeff, 0, 0}, {"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0}, {"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0}, - {"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), 0}, + {"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS}, {"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0}, {"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0}, {NULL, 0, 0, 0, 0, 0} diff --git a/src/translate.cpp b/src/translate.cpp index 8125d76f..16cc4347 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -1374,9 +1374,6 @@ if(end_type & SUFX_UNPRON) { // don't retranslate, use the original lookup result strcpy(phonemes,phonemes2); - - // language specific changes - ApplySpecialAttribute(tr,phonemes,dictionary_flags[0]); } else { @@ -2059,7 +2056,8 @@ return(FLAG_SPELLWORD); pre_pause--; } tr->end_stressed_vowel = 0; // forget about the previous word - tr->prev_dict_flags = 0; + tr->prev_dict_flags[0] = 0; + tr->prev_dict_flags[1] = 0; } if((option_capitals==1) && (word_flags & FLAG_FIRST_UPPER)) @@ -2208,7 +2206,7 @@ return(FLAG_SPELLWORD); { if(first_phoneme && tr->langopts.param[LOPT_IT_DOUBLING]) { - if(((tr->prev_dict_flags & FLAG_DOUBLING) && (tr->langopts.param[LOPT_IT_DOUBLING] & 1)) || + if(((tr->prev_dict_flags[0] & FLAG_DOUBLING) && (tr->langopts.param[LOPT_IT_DOUBLING] & 1)) || (tr->end_stressed_vowel && (tr->langopts.param[LOPT_IT_DOUBLING] & 2))) { // italian, double the initial consonant if the previous word ends with a @@ -2264,7 +2262,7 @@ return(FLAG_SPELLWORD); ph_list2[max_stress_ix].synthflags |= SFLAG_PROMOTE_STRESS; } - tr->prev_dict_flags = flags; + tr->prev_dict_flags[0] = flags; return(flags); } // end of TranslateWord2 @@ -2623,7 +2621,8 @@ p = source; tr->expect_verb_s=0; tr->phonemes_repeat_count = 0; tr->end_stressed_vowel=0; - tr->prev_dict_flags = 0; + tr->prev_dict_flags[0] = 0; + tr->prev_dict_flags[1] = 0; word_count = 0; single_quoted = 0; diff --git a/src/translate.h b/src/translate.h index 2d9ff38e..5e3fa336 100644 --- a/src/translate.h +++ b/src/translate.h @@ -48,8 +48,11 @@ #define FLAG_ALT_TRANS 0x8000 // language specific #define FLAG_ALT2_TRANS 0x10000 // language specific #define FLAG_ALT3_TRANS 0x20000 // language specific -#define FLAG_COMBINE 0x40000 // combine with the next word +#define FLAG_ALT4_TRANS 0x40000 // language specific +#define FLAG_ALT5_TRANS 0x80000 // language specific +#define FLAG_ALT6_TRANS 0x100000 // language specific +#define FLAG_COMBINE 0x800000 // combine with the next word #define FLAG_ALLOW_DOT 0x01000000 // ignore '.' after word (abbreviation) #define FLAG_NEEDS_DOT 0x02000000 // only if the word is followed by a dot #define FLAG_WAS_UNPRONOUNCABLE 0x04000000 // the unpronounceable routine was used @@ -79,7 +82,7 @@ #define FLAG_ONLY_S 0x8000 #define FLAG_STEM 0x10000 // must have a suffix #define FLAG_ATEND 0x20000 /* use this pronunciation if at end of clause */ -#define FLAG_ATSTART 0x30000 // use this pronunciation if at start of clause +#define FLAG_ATSTART 0x40000 // use this pronunciation if at start of clause #define BITNUM_FLAG_ALLCAPS 0x2a #define BITNUM_FLAG_HYPHENATED 0x2c @@ -272,7 +275,7 @@ extern ALPHABET *current_alphabet; // alphabet flags #define AL_DONT_NAME 0x01 // don't speak the alphabet name #define AL_NOT_LETTERS 0x02 // don't use the language for speaking letters -#define AL_NOT_WORDS 0x04 // don't use the language to speak words +#define AL_WORDS 0x04 // use the language to speak words #define N_LOPTS 21 @@ -585,7 +588,6 @@ typedef struct unsigned char groups2_start[256]; // index into groups2 const short *frequent_pairs; // list of frequent pairs of letters, for use in compressed *_list - int expect_verb; int expect_past; // expect past tense int expect_verb_s; @@ -601,7 +603,7 @@ typedef struct int prepause_timeout; int end_stressed_vowel; // word ends with stressed vowel - int prev_dict_flags; // dictionary flags from previous word + int prev_dict_flags[2]; // dictionary flags from previous word int clause_terminator; } Translator; @@ -703,7 +705,6 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f void MakePhonemeList(Translator *tr, int post_pause, int new_sentence); int ChangePhonemes_ru(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch); -void ApplySpecialAttribute(Translator *tr, char *phonemes, int dict_flags); void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags); void AppendPhonemes(Translator *tr, char *string, int size, const char *ph); diff --git a/src/voices.cpp b/src/voices.cpp index 68dcc5c7..db43a34e 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -554,12 +554,13 @@ voice_t *LoadVoice(const char *vname, int control) const char *language_type; char buf[200]; char path_voices[sizeof(path_home)+12]; - char langname[4]; int stress_amps[8]; int stress_lengths[8]; int stress_add[8]; char names[8][40]; + char name2[80]; + const char *voice_dir; int pitch1; int pitch2; @@ -568,6 +569,12 @@ voice_t *LoadVoice(const char *vname, int control) static char voice_name[40]; // voice name for current_voice_selected static char voice_languages[100]; // list of languages and priorities for current_voice_selected + // which directory to look for a named voice + static const char *voices_asia = + "fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue "; + static const char *voices_europe = + "bg bs ca cs cy da el es et fi fr-be hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv "; + strcpy(voicename,vname); if(voicename[0]==0) strcpy(voicename,"default"); @@ -581,27 +588,34 @@ voice_t *LoadVoice(const char *vname, int control) else { sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP); - sprintf(buf,"%s%s",path_voices,voicename); + sprintf(buf,"%s%s",path_voices,voicename); // first, look in the main voices directory if(GetFileLength(buf) <= 0) { - // look for the voice in a sub-directory of the language name - langname[0] = voicename[0]; - langname[1] = voicename[1]; - langname[2] = 0; - sprintf(buf,"%s%s%c%s",path_voices,langname,PATHSEP,voicename); + // then look in the appropriate subdirectory + if((voicename[0]=='m') && (voicename[1]=='b')) + { + voice_dir = "mb"; // mbrola voices + } + else + { + sprintf(name2, "%s ", voicename); + if(strstr(voices_europe, voicename) != NULL) + voice_dir = "europe"; + else + if(strstr(voices_asia, voicename) != NULL) + voice_dir = "asia"; + else + voice_dir = "other"; - if(GetFileLength(buf) <= 0) - { - // look in "extra" sub-directory - sprintf(buf,"%sextra%c%s",path_voices,PATHSEP,voicename); + sprintf(buf,"%s%s%c%s", path_voices,voice_dir,PATHSEP,voicename); - if(GetFileLength(buf) <= 0) - { - // look in "test" sub-directory - sprintf(buf,"%stest%c%s",path_voices,PATHSEP,voicename); - } - } + if(GetFileLength(buf) <= 0) + { + // if not found, look in "test" sub-directory + sprintf(buf,"%stest%c%s",path_voices,PATHSEP,voicename); + } + } } } diff --git a/src/wave.cpp b/src/wave.cpp index b3d25992..b3e6593a 100644 --- a/src/wave.cpp +++ b/src/wave.cpp @@ -1195,7 +1195,7 @@ void *wave_test_get_write_buffer() // notdef USE_PORTAUDIO -int wave_init(int srate) {} +int wave_init(int srate) {return 1;} void* wave_open(const char* the_api) {return (void *)1;} size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;} int wave_close(void* theHandler) {return 0;} diff --git a/src/wave_pulse.cpp b/src/wave_pulse.cpp index 85cab2d6..1bcb593a 100644 --- a/src/wave_pulse.cpp +++ b/src/wave_pulse.cpp @@ -870,7 +870,7 @@ void *wave_test_get_write_buffer() // notdef USE_PULSEAUDIO -int wave_init() {} +int wave_init(return 1;) {} void* wave_open(const char* the_api) {return (void *)1;} size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;} int wave_close(void* theHandler) {return 0;} diff --git a/src/wave_sada.cpp b/src/wave_sada.cpp index f44c30fd..23d53c77 100644 --- a/src/wave_sada.cpp +++ b/src/wave_sada.cpp @@ -535,7 +535,7 @@ int wave_get_remaining_time(uint32_t sample, uint32_t* time) #else // notdef USE_SADA -init wave_init() {} +init wave_init() {return 1;} void* wave_open(const char* the_api) {return (void *)1;} size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;} int wave_close(void* theHandler) {return 0;}