| @@ -12,6 +12,7 @@ include(cmake/deps.cmake) | |||
| include(cmake/config.cmake) | |||
| add_subdirectory(src) | |||
| include(cmake/data.cmake) | |||
| include(cmake/docs.cmake) | |||
| include(cmake/package.cmake) | |||
| include(CPack) | |||
| @@ -29,3 +30,7 @@ message(STATUS " libpcaudio: ${USE_LIBPCAUDIO} (${PCAUDIO_LIB} ${PCAUDIO_INC})" | |||
| message(STATUS " klatt: ${USE_KLATT}") | |||
| message(STATUS " speech-player: ${USE_SPEECHPLAYER}") | |||
| message(STATUS " async: ${USE_ASYNC}") | |||
| install( | |||
| DIRECTORY vim/ftdetect vim/syntax DESTINATION share/vim/vimfiles | |||
| ) | |||
| @@ -17,7 +17,7 @@ updated languages: | |||
| * be (Belarusian) -- Andiv06, bespsm, Alaksiej Stankievič | |||
| * cmn (Mandarin) -- Cameron Wong | |||
| * en (English) -- Bill Dengler | |||
| * es (Spanish) -- Sukil Etxenike | |||
| * es (Spanish) -- Sukil Etxenike, Rmcpantoja, gregodejesus | |||
| * fa (Persian) -- MH | |||
| * gn (Guarani) -- Andiv06 | |||
| * he (Hebrew) -- Omer I.S, Andiv06 | |||
| @@ -12,3 +12,5 @@ if (HAVE_PTHREAD) | |||
| else() | |||
| set(USE_ASYNC OFF) | |||
| endif() | |||
| option(ESPEAK_COMPAT "Install compat binary symlinks" OFF) | |||
| @@ -0,0 +1,28 @@ | |||
| find_program(RONN ronn) | |||
| option(ESPEAK_BUILD_MANPAGES "Build manpages" ${RONN}) | |||
| if (RONN AND ESPEAK_BUILD_MANPAGES) | |||
| add_custom_command( | |||
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/espeak-ng.1 | |||
| COMMAND ${RONN} --roff -o ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src/espeak-ng.1.ronn | |||
| ) | |||
| add_custom_command( | |||
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/speak-ng.1 | |||
| COMMAND ${RONN} --roff -o ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src/speak-ng.1.ronn | |||
| ) | |||
| add_custom_target( | |||
| docs ALL | |||
| DEPENDS | |||
| ${CMAKE_CURRENT_BINARY_DIR}/espeak-ng.1 | |||
| ${CMAKE_CURRENT_BINARY_DIR}/speak-ng.1 | |||
| ) | |||
| install( | |||
| FILES | |||
| ${CMAKE_CURRENT_BINARY_DIR}/espeak-ng.1 | |||
| ${CMAKE_CURRENT_BINARY_DIR}/speak-ng.1 | |||
| DESTINATION share/man/man1 | |||
| ) | |||
| endif() | |||
| @@ -15,3 +15,21 @@ list(APPEND CPACK_SOURCE_IGNORE_FILES | |||
| /tools/ | |||
| /vim/ | |||
| ) | |||
| set(PACKAGE_NAME ${PROJECT_NAME}) | |||
| set(VERSION ${PROJECT_VERSION}) | |||
| set(prefix ${CMAKE_INSTALL_PREFIX}) | |||
| set(exec_prefix ${CMAKE_INSTALL_PREFIX}) | |||
| set(libdir "\${exec_prefix}/lib") | |||
| set(includedir "\${prefix}/include") | |||
| configure_file( | |||
| ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in | |||
| ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc | |||
| @ONLY | |||
| ) | |||
| install( | |||
| FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION lib/pkgconfig | |||
| ) | |||
| @@ -3052,6 +3052,7 @@ purport $2 | |||
| purportedly $2 | |||
| puree pjU@reI | |||
| ?3 puttin pU?n | |||
| puyallup pju:'al@p | |||
| pyjama p@dZA:m@ | |||
| pyrites paIr'aIti:z | |||
| pythagoras paIT'ag@r@s | |||
| @@ -284,7 +284,7 @@ n Ene | |||
| ñ En^e | |||
| p pe | |||
| q ku | |||
| r ERRe | |||
| r ER2e | |||
| ?2 r ER2e | |||
| s Ese | |||
| t te | |||
| @@ -310,12 +310,17 @@ _ó 'o||aTEntw'aDa | |||
| ç $accent | |||
| // Abbreviations | |||
| aprox Aproximadamente $text | |||
| a. c antes||de||cristo $text $capital $dot | |||
| d. c después||de||cristo $text $capital $dot | |||
| dña doña $text | |||
| DNI $abbrev | |||
| dpto departamento $text | |||
| dr doctor $text $capital $dot | |||
| dra doctora $text $capital $dot | |||
| (ee.uu) Est'aDos||un'iDos | |||
| ej Ejemplo $text $dot | |||
| etc etcétera $text | |||
| Excmo excelentísimo $text $dot | |||
| Excma excelentísima $text $dot | |||
| Ilmo ilustrísimo $text $dot | |||
| @@ -325,12 +330,18 @@ izqda izquierda $text $dot | |||
| izqdo izquierdo $text $dot | |||
| kg kilogramo $text $dot | |||
| Mª maría $text $capital $dot | |||
| pag página $text $dot | |||
| Pte presidente $text $capital $dot | |||
| SAR su||alt'eTa||R2e'al $abbrev | |||
| SNM soBre||el|niB'el||del||m'ar $abbrev | |||
| Sr señor $text $capital $dot | |||
| Sra señora $text $capital $dot | |||
| Sras señoras $text $capital $dot | |||
| Sres señores $text $capital $dot | |||
| Srta señorita $text $capital $dot | |||
| SSS serB'iTjo||soTj'al||sustitut'orjo $abbrev | |||
| tel teléfono $text $dot | |||
| tqm te||kj'ero||m'utSo | |||
| Ud usted $text $capital $dot | |||
| Uds ustedes $text $capital $dot | |||
| // (/ h) por||'ora | |||
| @@ -350,26 +361,36 @@ vietnam $2 | |||
| android 'androId | |||
| apple 'ap@l | |||
| copyright k'opiRR2,aIt | |||
| copyright k'opiR2,aIt | |||
| chrome kr'owm | |||
| curriculum $2 | |||
| diem d'i:em $only | |||
| down d'awn | |||
| eloquence 'elokwens | |||
| english ínglish $text | |||
| espeak 'isp'ik | |||
| ETI itj'aI $capital | |||
| eyes 'aIs | |||
| facebook f'eIsbuk | |||
| file f'aIl | |||
| files f'aIls | |||
| firefox f'aIrfoks | |||
| free fr'i | |||
| google g'ug@l | |||
| hardware h'ardwer | |||
| hitler x'itler | |||
| instagram $1 | |||
| iphone 'aIfon | |||
| ipod 'aIpod | |||
| jaws dZ'os | |||
| jazz dZ'as | |||
| junior dZ'unjor | |||
| kepler $1 | |||
| linux $1 | |||
| live l'aIB | |||
| drive dr'aIB | |||
| freedom fr'idom | |||
| gmail dZimeIL | |||
| reaper R2'iper | |||
| messenger m'esendZer | |||
| microsoft m'aIkrosoft | |||
| @@ -377,16 +398,21 @@ mozilla moT'ila | |||
| office 'ofis | |||
| platform pl'atfom | |||
| power p'awer | |||
| scientific $2 | |||
| service s'erBis | |||
| skype sk'aIp | |||
| snapshot sn'apS,ot // _^_en | |||
| software s'oftwer | |||
| spanish sp'aniS | |||
| speech sp'itS | |||
| telegram $1 | |||
| thunderbird t'anderbird | |||
| twit tw'it | |||
| twitter tw'iter | |||
| unigram $1 | |||
| up ap | |||
| window w'indow | |||
| YouTube iut'uB $capital | |||
| (e speak) 'isp'ik | |||
| (i phone) 'aIfon | |||
| @@ -394,4 +420,4 @@ window w'indow | |||
| // Main nouns Dictionary | |||
| cataplum $3 | |||
| progrom $3 | |||
| @@ -35153,6 +35153,8 @@ | |||
| бонусная $1 | |||
| бонусной $1 | |||
| бонусную $1 | |||
| бонусные $1 | |||
| бонусный $1 | |||
| бонусных $1 | |||
| бонусов $1 | |||
| бонусом $1 | |||
| @@ -44161,8 +44163,6 @@ | |||
| варварство $1 | |||
| варварством $1 | |||
| варварству $1 | |||
| варвару $1 | |||
| варвары $1 | |||
| варган $2 | |||
| варджаяны $3 | |||
| вареанты $3 | |||
| @@ -44473,9 +44473,7 @@ | |||
| варьирующуюся $2 | |||
| варьируясь $2 | |||
| варьяциями $2 | |||
| варю $2 | |||
| варюсь $2 | |||
| варя $2 | |||
| варясь $2 | |||
| варят $1 | |||
| варятся $1 | |||
| @@ -56794,6 +56792,7 @@ | |||
| видеопленки $4 | |||
| видеопленку $4 | |||
| видеоподсистема $6 | |||
| видеоподсистемами $6 | |||
| видеопособие $5 | |||
| видеопотока $5 | |||
| видеопрезентацию $6 | |||
| @@ -128722,7 +128721,6 @@ | |||
| гордого $1 | |||
| гордое $1 | |||
| гордому $1 | |||
| гордон $2 | |||
| гордостей $1 | |||
| гордости $1 | |||
| гордость $1 | |||
| @@ -131854,8 +131852,6 @@ | |||
| гренаж $2 | |||
| гренами $1 | |||
| гренгуара $3 | |||
| гренков $2 | |||
| гренком $2 | |||
| гренландец $2 | |||
| гренландок $2 | |||
| гренобль $2 | |||
| @@ -137292,7 +137288,6 @@ | |||
| двоюродными $2 | |||
| двоюродных $2 | |||
| двоюсь $2 | |||
| двоя $2 | |||
| двояковогнут $4 | |||
| двояковогнута $4 | |||
| двояковогнуто $4 | |||
| @@ -153366,31 +153361,6 @@ | |||
| домелют $2 | |||
| домеля $3 | |||
| домен $2 | |||
| доменен $1 | |||
| доменна $1 | |||
| доменнее $1 | |||
| доменней $1 | |||
| доменно $1 | |||
| доменной $1 | |||
| доменном $1 | |||
| доменному $1 | |||
| доменною $1 | |||
| доменную $1 | |||
| доменны $1 | |||
| доменные $1 | |||
| доменный $1 | |||
| доменными $1 | |||
| доменных $1 | |||
| доменщик $1 | |||
| доменщика $1 | |||
| доменщикам $1 | |||
| доменщиками $1 | |||
| доменщиках $1 | |||
| доменщике $1 | |||
| доменщики $1 | |||
| доменщиков $1 | |||
| доменщиком $1 | |||
| доменщику $1 | |||
| домеренная $2 | |||
| домеренного $2 | |||
| домеренное $2 | |||
| @@ -166157,7 +166127,6 @@ | |||
| ешиботе $3 | |||
| еще $2 | |||
| ещеж $2 | |||
| ёзефа $2 | |||
| ёмиури $3 | |||
| ёситака $3 | |||
| ёфикатор $3 | |||
| @@ -189341,6 +189310,7 @@ | |||
| замещал $3 | |||
| замещала $3 | |||
| замещало $3 | |||
| замещаться $3 | |||
| замещаю $3 | |||
| замещая $3 | |||
| замещен $3 | |||
| @@ -225729,6 +225699,7 @@ | |||
| ильчиным $1 | |||
| илью $2 | |||
| илья $2 | |||
| ильяс $2 | |||
| ильяшенко $3 | |||
| имажинизм $4 | |||
| имажинизма $4 | |||
| @@ -227973,6 +227944,7 @@ | |||
| инклюзив $3 | |||
| инклюзива $3 | |||
| инклюзиве $3 | |||
| инклюзивно $3 | |||
| инклюзиву $3 | |||
| инклюзивы $3 | |||
| инкорпорации $4 | |||
| @@ -267391,7 +267363,6 @@ | |||
| кривеющими $2 | |||
| кривеющих $2 | |||
| кривеющую $2 | |||
| криви $2 | |||
| кривившаяся $2 | |||
| кривившегося $2 | |||
| кривившееся $2 | |||
| @@ -293818,7 +293789,6 @@ | |||
| матвеенко $3 | |||
| матвей $2 | |||
| матвиенко $3 | |||
| мате $2 | |||
| матевосяна $4 | |||
| мателота $3 | |||
| мателоте $3 | |||
| @@ -303456,8 +303426,6 @@ | |||
| минеральна $3 | |||
| минерально $3 | |||
| минеральны $3 | |||
| минет $1 | |||
| минете $1 | |||
| минздрав $2 | |||
| миниаквапарк $5 | |||
| миниально $3 | |||
| @@ -306699,6 +306667,7 @@ | |||
| модерированию $3 | |||
| модерирования $3 | |||
| модерируемой $3 | |||
| модерируемые $3 | |||
| модерирующие $3 | |||
| модерирующим $3 | |||
| модерирующих $3 | |||
| @@ -311996,6 +311965,7 @@ | |||
| мульчирование $2 | |||
| мульчирования $2 | |||
| мульчировать $2 | |||
| мулюков $4 | |||
| мулюр $2 | |||
| муляж $2 | |||
| муляжа $3 | |||
| @@ -312128,13 +312098,11 @@ | |||
| муниципальными $4 | |||
| муниципальных $4 | |||
| мунэатэ $3 | |||
| мура $2 | |||
| мурав $2 | |||
| мурава $3 | |||
| муравах $3 | |||
| мураве $3 | |||
| муравей $3 | |||
| муравейдревоточец $6 | |||
| муравленая $2 | |||
| муравленее $2 | |||
| муравленей $2 | |||
| @@ -325237,6 +325205,7 @@ | |||
| накручивалось $2 | |||
| накручивался $2 | |||
| накручиванием $2 | |||
| накручивания $2 | |||
| накручивать $2 | |||
| накручиваться $2 | |||
| накручиваюсь $2 | |||
| @@ -346615,6 +346584,7 @@ | |||
| неиндексированных $4 | |||
| неиндуктивный $4 | |||
| неинженеров $4 | |||
| неинклюзивную $4 | |||
| неинклюзивным $4 | |||
| неинспирированный $4 | |||
| неинтегрированная $4 | |||
| @@ -347091,7 +347061,6 @@ | |||
| нейросетевой $5 | |||
| нейросетевом $5 | |||
| нейросетей $4 | |||
| нейросети $4 | |||
| нейротерапию $5 | |||
| нейротоксина $4 | |||
| нейрофизиолог $5 | |||
| @@ -363281,8 +363250,6 @@ | |||
| обеляющиеся $3 | |||
| обеляющимися $3 | |||
| обеляющуюся $3 | |||
| оберег $1 | |||
| оберега $1 | |||
| оберегавшая $4 | |||
| оберегавшейся $4 | |||
| оберегавшемся $4 | |||
| @@ -387369,6 +387336,11 @@ | |||
| октавиана $4 | |||
| октавиане $4 | |||
| октавианом $4 | |||
| октагон $3 | |||
| октагона $3 | |||
| октагоне $3 | |||
| октагону $3 | |||
| октагоны $3 | |||
| октан $2 | |||
| октановая $2 | |||
| октановее $2 | |||
| @@ -430879,10 +430851,6 @@ | |||
| пашалыке $3 | |||
| пашалыки $3 | |||
| пашалыку $3 | |||
| пашам $2 | |||
| пашах $2 | |||
| паше $2 | |||
| пашей $2 | |||
| пашемая $1 | |||
| пашемого $1 | |||
| пашемое $1 | |||
| @@ -462110,7 +462078,6 @@ | |||
| платки $2 | |||
| платков $2 | |||
| платком $2 | |||
| платку $2 | |||
| платная $1 | |||
| платнее $1 | |||
| платники $1 | |||
| @@ -502471,6 +502438,7 @@ | |||
| полномасштабная $4 | |||
| полномасштабное $4 | |||
| полномасштабный $4 | |||
| полномасштабным $4 | |||
| полномасштабными $4 | |||
| полномасштабных $4 | |||
| полномерна $3 | |||
| @@ -507471,7 +507439,7 @@ | |||
| помезентеральней $5 | |||
| помезоморфнее $4 | |||
| помезоморфней $4 | |||
| помела $3 | |||
| помела $2 | |||
| помеланхоличнее $5 | |||
| помеланхоличней $5 | |||
| помеле $3 | |||
| @@ -507555,7 +507523,7 @@ | |||
| помелом $3 | |||
| помелочнее $2 | |||
| помелочней $2 | |||
| помелу $2 | |||
| помелу $3 | |||
| помелькай $3 | |||
| помелькайте $3 | |||
| помелькал $3 | |||
| @@ -589465,8 +589433,6 @@ | |||
| пупсиком $1 | |||
| пупсику $1 | |||
| пупсинька $1 | |||
| пупу $2 | |||
| пупы $2 | |||
| пупыре $3 | |||
| пупырей $3 | |||
| пупырем $3 | |||
| @@ -682414,7 +682380,6 @@ | |||
| соревнующимися $3 | |||
| соревнующуюся $3 | |||
| соревнуя $3 | |||
| сори $2 | |||
| соригинальничавшая $4 | |||
| соригинальничавшего $4 | |||
| соригинальничавшее $4 | |||
| @@ -703405,6 +703370,7 @@ | |||
| субфебрилитеты $5 | |||
| субфедеральная $4 | |||
| субфедеральные $4 | |||
| субфлагманским $2 | |||
| субчик $1 | |||
| субчика $1 | |||
| субчикам $1 | |||
| @@ -715717,6 +715683,7 @@ | |||
| теплопродукция $4 | |||
| теплопрозрачность $4 | |||
| теплопрозрачный $4 | |||
| теплорассеивателя $4 | |||
| теплорассеивающая $4 | |||
| теплорассеивающей $4 | |||
| теплорассеивающими $4 | |||
| @@ -769243,7 +769210,6 @@ | |||
| ховард $1 | |||
| ховарда $1 | |||
| ховрина $1 | |||
| ховы $2 | |||
| хогсхед $1 | |||
| ходакова $3 | |||
| ходам $2 | |||
| @@ -799632,6 +799598,7 @@ | |||
| энергопотребитель $6 | |||
| энергопотребление $6 | |||
| энергопотреблении $6 | |||
| энергопотреблений $6 | |||
| энергопотреблению $6 | |||
| энергопотребления $6 | |||
| энергораспределения $7 | |||
| @@ -138,6 +138,8 @@ _, zVpit'aja | |||
| или $atend // stressed at the end | |||
| ибо $u $pause // for | |||
| но $u $pause // but | |||
| при $u | |||
| при $atend | |||
| хотя $2 $pause // although | |||
| чтобы $pause // in order that | |||
| @@ -155,7 +155,7 @@ | |||
| р) д (ц // Silent D(не произносимая д) | |||
| мо) де (м dE% | |||
| н) де (кс dE2 // яндекс, индекс/ yandex, index | |||
| мо) де (л dE | |||
| _мо) де (л dE | |||
| _мо) де (лир dE% | |||
| мо) де (льер dE% | |||
| мо) де (лист dE% | |||
| @@ -19,10 +19,18 @@ endif() | |||
| if (NOT WIN32) | |||
| add_custom_target( | |||
| speak-ng ALL | |||
| ${CMAKE_COMMAND} -E create_symlink espeak-ng ${CMAKE_CURRENT_BINARY_DIR}/speak-ng | |||
| COMMENT "Link espeak-ng to speak-ng" | |||
| COMMAND ${CMAKE_COMMAND} -E create_symlink espeak-ng ${CMAKE_CURRENT_BINARY_DIR}/speak-ng | |||
| COMMAND ${CMAKE_COMMAND} -E create_symlink espeak-ng ${CMAKE_CURRENT_BINARY_DIR}/espeak | |||
| COMMAND ${CMAKE_COMMAND} -E create_symlink espeak-ng ${CMAKE_CURRENT_BINARY_DIR}/speak | |||
| COMMENT "Link espeak-ng to compat names" | |||
| DEPENDS espeak-ng-bin | |||
| ) | |||
| endif() | |||
| install(TARGETS espeak-ng-bin) | |||
| install(DIRECTORY include/espeak include/espeak-ng TYPE INCLUDE) | |||
| if (ESPEAK_COMPAT AND NOT WIN32) | |||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/speak-ng DESTINATION bin) | |||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/espeak DESTINATION bin) | |||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/speak DESTINATION bin) | |||
| endif() | |||
| @@ -77,6 +77,8 @@ static const char *help_text = | |||
| "\t Write speech to this WAV file, rather than speaking it directly\n" | |||
| "-b\t Input text encoding, 1=UTF8, 2=8 bit, 4=16 bit \n" | |||
| "-m\t Interpret SSML markup, and ignore other < > tags\n" | |||
| "--ssml-break=<percentage>\n" | |||
| "\t Set SSML break time multiplier, default is 100\n" | |||
| "-q\t Quiet, don't produce any speech (may be useful with -x)\n" | |||
| "-x\t Write phoneme mnemonics to stdout\n" | |||
| "-X\t Write phonemes mnemonics and translation trace to stdout\n" | |||
| @@ -331,6 +333,7 @@ int main(int argc, char **argv) | |||
| { "compile-intonations", no_argument, 0, 0x10f }, | |||
| { "compile-phonemes", optional_argument, 0, 0x110 }, | |||
| { "load", no_argument, 0, 0x111 }, | |||
| { "ssml-break", required_argument, 0, 0x112 }, | |||
| { 0, 0, 0, 0 } | |||
| }; | |||
| @@ -361,6 +364,7 @@ int main(int argc, char **argv) | |||
| int phoneme_options = 0; | |||
| int option_linelength = 0; | |||
| int option_waveout = 0; | |||
| int ssml_break = -1; | |||
| bool deterministic = 0; | |||
| espeak_VOICE voice_select; | |||
| @@ -586,6 +590,9 @@ int main(int argc, char **argv) | |||
| case 0x111: // --load | |||
| flag_load = 1; | |||
| break; | |||
| case 0x112: // --ssml-break | |||
| ssml_break = atoi(optarg2); | |||
| break; | |||
| default: | |||
| exit(0); | |||
| } | |||
| @@ -677,6 +684,8 @@ int main(int argc, char **argv) | |||
| espeak_SetParameter(espeakWORDGAP, wordgap, 0); | |||
| if (option_linelength > 0) | |||
| espeak_SetParameter(espeakLINELENGTH, option_linelength, 0); | |||
| if (ssml_break > 0) | |||
| espeak_SetParameter(espeakSSML_BREAK_MUL, ssml_break, 0); | |||
| if (option_punctuation == 2) | |||
| espeak_SetPunctuationList(option_punctlist); | |||
| @@ -416,8 +416,8 @@ typedef enum { | |||
| espeakWORDGAP=7, | |||
| espeakOPTIONS=8, // reserved for misc. options. not yet used | |||
| espeakINTONATION=9, | |||
| espeakSSML_BREAK_MUL=10, | |||
| espeakRESERVED1=10, | |||
| espeakRESERVED2=11, | |||
| espeakEMPHASIS, /* internal use */ | |||
| espeakLINELENGTH, /* internal use */ | |||
| @@ -38,6 +38,8 @@ add_library(espeak-ng | |||
| espeak_api.c | |||
| ) | |||
| target_include_directories(espeak-ng BEFORE PRIVATE $<TARGET_PROPERTY:espeak-include,INTERFACE_INCLUDE_DIRECTORIES>) | |||
| if (NOT MSVC) | |||
| target_compile_options(espeak-ng PRIVATE | |||
| "-fPIC" | |||
| @@ -113,4 +115,9 @@ if (MINGW) | |||
| target_link_options(espeak-ng PRIVATE "-static-libstdc++" "-static") | |||
| endif() | |||
| set_target_properties(espeak-ng PROPERTIES | |||
| SOVERSION ${PROJECT_VERSION_MAJOR} | |||
| VERSION ${PROJECT_VERSION} | |||
| ) | |||
| install(TARGETS espeak-ng LIBRARY) | |||
| @@ -1200,14 +1200,15 @@ static int LookupNum2(Translator *tr, int value, int thousandplex, const int con | |||
| sprintf(ph_out, "%s%s%s%s", ph_tens, ph_and, ph_digits, ph_ordinal); | |||
| used_and = 1; | |||
| } else { | |||
| if ((tr->langopts.numbers & NUM_SINGLE_VOWEL) && ph_digits[0] != 0) { | |||
| if (tr->langopts.numbers & NUM_SINGLE_VOWEL) { | |||
| // remove vowel from the end of tens if units starts with a vowel (LANG=Italian) | |||
| ix = strlen(ph_tens) - 1; | |||
| if ((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) | |||
| next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; | |||
| if (((ix = strlen(ph_tens)-1) >= 0) && (ph_digits[0] != 0)) { | |||
| if ((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) | |||
| next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; | |||
| if ((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL)) | |||
| ph_tens[ix] = 0; | |||
| if ((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL)) | |||
| ph_tens[ix] = 0; | |||
| } | |||
| } | |||
| if ((tr->langopts.numbers2 & NUM2_ORDINAL_DROP_VOWEL) && (ph_ordinal[0] != 0)) { | |||
| @@ -336,6 +336,8 @@ espeak_ng_STATUS SetParameter(int parameter, int value, int relative) | |||
| translator->langopts.intonation_group = new_value & 0xff; | |||
| option_tone_flags = new_value; | |||
| break; | |||
| case espeakSSML_BREAK_MUL: | |||
| break; | |||
| default: | |||
| return EINVAL; | |||
| } | |||
| @@ -349,7 +349,7 @@ const int param_defaults[N_SPEECH_PARAM] = { | |||
| 0, // wordgap | |||
| 0, // options | |||
| 0, // intonation | |||
| 0, | |||
| 100, // ssml break mul | |||
| 0, | |||
| 0, // emphasis | |||
| 0, // line length | |||
| @@ -882,6 +882,8 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con | |||
| if ((attr2 = GetSsmlAttribute(px, "time")) != NULL) { | |||
| value2 = attrnumber(attr2, 0, 1); // pause in mS | |||
| value2 = value2 * speech_parameters[espeakSSML_BREAK_MUL] / 100; | |||
| int wpm = speech_parameters[espeakRATE]; | |||
| espeak_SetParameter(espeakRATE, wpm, 0); | |||
| @@ -119,7 +119,7 @@ int wcmdq_tail = 0; | |||
| // pitch,speed, | |||
| const int embedded_default[N_EMBEDDED_VALUES] = { 0, 50, espeakRATE_NORMAL, 100, 50, 0, 0, 0, espeakRATE_NORMAL, 0, 0, 0, 0, 0, 0 }; | |||
| static const int embedded_max[N_EMBEDDED_VALUES] = { 0, 0x7fff, 750, 300, 99, 99, 99, 0, 750, 0, 0, 0, 0, 4, 0 }; | |||
| static const int embedded_max[N_EMBEDDED_VALUES] = { 0, 0x7fff, 2000, 300, 99, 99, 99, 0, 2000, 0, 0, 0, 0, 4, 0 }; | |||
| #if USE_LIBSONIC | |||
| static sonicStream sonicSpeedupStream = NULL; | |||
| @@ -7,4 +7,3 @@ target_include_directories(speechPlayer PUBLIC include) | |||
| if(NOT MSVC) | |||
| target_compile_options(speechPlayer PRIVATE "-fPIC") | |||
| endif() | |||
| install(TARGETS speechPlayer ARCHIVE) | |||
| @@ -7,4 +7,3 @@ add_library(ucd STATIC | |||
| src/tostring.c | |||
| ) | |||
| target_include_directories(ucd PUBLIC src/include) | |||
| install(TARGETS ucd ARCHIVE) | |||
| @@ -30,3 +30,4 @@ test_phon lv "d'esmit d'ivdesmit tR'i:sdesmit tS'etRdesmit p'ietsd,esmit s'eSdes | |||
| test_phon lv "s'imts s'imts v'iens d'ivi s'imti d'ivi tR'i:s s'imti s'eSdesmit p'ietsi" "100 101 202 365" "hundreds" | |||
| test_phon lv "s'imts t'u:kstuo:tis m'iljo:ns m'iljaRds tR'iljons kv'adRiljo:ns kv'intiljo:ns s'ekstiljo:ns s'eptiljo:ns 'oktiljo:ns n'oniljo:ns" "100 1000 1000000 1000000000 1000000000000 1000000000000000 1000000000000000000 1000000000000000000000 1000000000000000000000000 1000000000000000000000000000 1000000000000000000000000000000" "large" # 10^2 10^3 10^6 10^9 10^12 10^15 10^18 10^21 10^24 10^27 10^30 | |||
| test_phon lv "p'ietsi s'eSdesmit tS'etRi s'imts d'ivdesmit tR'i:s tS'etRi t'u:kstuo:Si tR'i:s s'imti p'ietsd,esmit s'eptin^i tS'etRpadsmit t'u:kstuo:Si_! s'eSi s'imti_ 'astuon^desmit tR'i:s s'eptin^i s'imti tS'etRdesmit d'ivi t'u:kstuo:Si_! tR'i:s s'imti p'ietsd,esmit d'evin^i s'eSi m'iljo:ni_! tS'etRi s'imti s'eptin^desmit p'ietsi t'u:kstuo:Si_! tR'i:s s'imti d'ivdesmit 'astuon^i" "5 64 123 4357 14683 742359 6475328" "mixed" | |||
| test_phon it "dz'E*o_| 'items" "0 items" "NUM_SINGLE_VOWEL" | |||
| @@ -8,10 +8,11 @@ test_ssml_audio() { | |||
| TEST_NAME=$1 | |||
| EXPECTED=$2 | |||
| TEST_TEXT=$3 | |||
| OPTS=$4 | |||
| echo "testing ${TEST_NAME}" | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" \ | |||
| $VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} \ | |||
| > actual.txt || exit 1 | |||
| < actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||
| echo "${EXPECTED}" > expected.txt | |||
| @@ -56,3 +57,6 @@ test_ssml_audio "<prosody 200%><break 1000ms>" 64213dbaf593b139b0b21840ba938cf59 | |||
| ( test_ssml_audio "<prosody 260%><break 1000ms>" 4b4e30a2cfff1889972f013e514e81c1108283a4 "<speak><prosody rate=\"260%\">Break<break time=\"1000ms\"/>test</prosody></speak>" ) || \ | |||
| ( test_ssml_audio "<prosody 260%><break 1000ms>" 9849f0d27f5641db6da1a8aea82578e83656d323 "<speak><prosody rate=\"260%\">Break<break time=\"1000ms\"/>test</prosody></speak>" ) || \ | |||
| ( test_ssml_audio "<prosody 260%><break 1000ms>" 32a9c2887ec5b7d9d33d5503518ac0d384e43448 "<speak><prosody rate=\"260%\">Break<break time=\"1000ms\"/>test</prosody></speak>" ) || exit 1 | |||
| # Test break multiplier | |||
| test_ssml_audio "<break 1000ms> mul=10" 9f3b0f34eb605fcecfc573fc215626f634b46756 "<speak>Break<break time=\"1000ms\"/>test</speak>" "--ssml-break=10" | |||