Kas yra Espeak

2014-02-12

Espeak

Espeak Logo

http://espeak.sourceforge.net/

Šiame puslapuje yra pristatoma „eSpeak“ balso sintezavimo sistema, pagrinde dėmesio skiriama lietuvių kalbos palaikymui.

Wikipedijoje Espeak yra aprašoma kaip kompaktiška atvirojo kodo programinė įranga balso sintezavimui. Ji veikia ant MS Windows ir Linux operacinių sistemų. Šnekos sintezavimo variklis naudoja formančių sintezavimą ir palaiko daugelių kalbų. Projektai NVDA, Ubuntu ir OLPC, Google Translate naudojo ar naudoja eSpeak.

eSpeak projekto kilmė yra naudojimas Acorn RISC OS sintezatorius, kuris buvo pradėtas rašyti 1995 Jonathan Duddington. Perrašyta versija Linux OS pasirodė 2006, o 2007 sausį pasirodė Windows SAPI 5 sudrinama versija.

Sintezatorius palaiko 68 kalbas. Kokybė sintezuojamų kalbų yra skirtinga, kadangi sintezavimo staklėmis aprašyti naudojama grįžtamoji informaciją iš gimtosios kalbos kalbėtojų ne visada yra pakankama.

Sintezatorius susideda iš dviejų dalių: grafema fonema transformacija ir fonema garsas transformacija. fonema->garsas galima naudoti ir kitus variklius(MBROLA) (P. Kasparaitis. Diphone databases for Lithuanian text-to-speech synthesis. Informatica. 2005)

Sintezatorius palaikos standartus:

paslėptų Markovo akustinių modelių (HMMs) ir n-gram statistiniu kalbos modeliu.

Espeak programavimo pavyzdžiai

Daugiau informacijos galima rasti: github.com/mondhs/espeak-sample.

Komandinė eilutė

Norint patikrinti ar espeak veikia lietuviškai galima paleisti komandą komandinėje eilutėje:

    $espeak  -vlt  "11 valandų 56 minutės" -x 
    # Turi būti matomas fonemos v;ien'uol;ika val'andu: p;'ENk;ez;d;eS;imtS;eS'I m;in'ut;ees
    # turi būti girdima lietuviškais skaitmenimis tariama šneka

Audio pavyzdys: Wav klatt2 balsas

C++ kalboje

C++ pavyzdys

    #include <./src/speak_lib.h>
    int main(int argc, char* argv[] ) {
        char text[32] = {"1. Labas. Šauk. Laikas. Taika"};//Tariamas tekstas
        espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, NULL, 0 ); // paruošiamas eSpeak variklis
        espeak_SetVoiceByName("mb-lt1");// nustatomas Mbrola lietuvių 1 garas
        unsigned int size = 0; // saičius kiek tariamų simbolių yra masyve
        while(text[size]!='\0') size++;//suskaičiuojam pilnu perinkimu tariamus simbolius ==strlen(text)
        unsigned int flags=espeakCHARS_AUTO | espeakENDPAUSE;//Auto: utf8 ar 8bit,
        espeak_Synth( text, size+1, 0,POS_CHARACTER,0, flags, NULL, NULL );// grafema->fonema->garsas transformacija
        espeak_Synchronize( ); //Lukterėti kol pasibaigs viską ištarti.
        return 0;
    }

Audio pavyzdys: Wav MBROLA balsas

Espeak Versijos

Pagrindinis kodas

Dabartinė žinoma versija 1.48.02 espeak.sourceforge.net/download.html

Lietuvių kalba

Lietuvių kalba espeak yra palaikoma nuo 2012 metų 1.46.20 versijos. Dabartinė žinoma versija github.com/mondhs/espeak. Grafemų-fonemų transformacijų taisyklės aprašytos: github.com/mondhs/…/dictsource/lt_list

Kiti eSpeak susieją projektai

Espeak pasiruošimas tobulinimui

Detalesnė informacija pateikta Prisijungimas prie tobulinimo. Parsiųsti galima iš github kodo saugyklos git clone https://github.com/mondhs/espeak

Duomenų redagavimas

Toliau pateiktas svarbiausių aspektų aprašas lietuvių kalba.

Grafema->Phonemos transformacijos taisyklės

Už jas atsako ‘'’espeak-data/dictsource’’’ kataloge esantys failai.

lt_rules

Čia talpinamos pagrindinės transformacijos taisyklės. Jos aprašomos pagal tokią struktūrą:

    [ženklai prieš )] raidė(s) [( ženklai po] raidės tarimas.

Pavyzdžiui:

        d (_         t      // [d] žodžio gale tariami dusliai: kad – kat
     _) ie (šm       jie    // „ie“ žodžio pradžioje prieš „šm“ tariama [jie]: iešmas [jiešmas]
        i (A         ;      // A didžioji raidė reiškia bet kokį balsį, 
                            // kabliataškis (;) – minkštumo ženklą.
        k (CL06      k;     // C didžioji raidė reiškia bet kokį priebalsį, 
                            // L su dviem skaitmenimis nurodo tam tikrą raidžių derinių grupę, 
                            // kuri aprašoma to failo viršuje
     @) ė (jL12_     ee=    // lygu (=) nurodo, kad raidė yra kirčiuota, 
                            // eta (@) – prieš raidę yra bent vienas skiemuo: 
                            // priesaga -ėjas: siuvėjas

lt_list

Čia aprašomi išimtiniai žodžių tarimo atvėjai. Pavyzdys: manęs $2 // kirčiuojamas antras skiemuo

lt_listx

lt_listx failas papildo lt_list failą, skrita kalboms kurios turi per daug išimtinių atvėjų.

Fonemos

Už fonemas atsako espeak-data/phsource/ kataloge esantys failai.

ph_lithuanian

Ši interpretacija naudojama, kai pasirenkamas lt balsas.

mbrola/lt1 ir mbrola/lt2

espeak-data/phsource/mbrola/ kataloge esantys failai aprašo espeak ir mbrola fonemų sąsajas; būtent lt1 ir lt2 failai aprašo fonemų interpretavimą, kai naudojamas mb/mb-lt1 arba mb/mb-lt2 balsas.

Fonemų ir žodyno kompiliavimas

Jį reikia atlikti, jei atlikote pakeitimus espeak-data/dictsource/lt_rules (tarimo taisyklės), espeak-data/dictsource/lt_list (įvardžių, sutrumpinimų, skaičių ir t.t tarimas), espeak-data/dictsource/lt_listx ar espeak-data/phsource/ph_lithuanian, reikia iš naujo sukompiliuoti espeak-data/ espeak-data/lt_dict. Tam espeakedit grafinėje programoje eikite per meniu Compile > phoneme data ir Compile > dictionary lt

Jei keitėte espeak-data/phsource/mbrola/lt1 arba espeak-data/phsource/mbrola/lt2, tuomet prieš tai dar reikia espeakedit grafinėje programoje eiti per meniu Compile > Compile mbrola phonemes list.

Nuorodos