Magyar nyelvű gépi fölolvasás.

A következőkben az ahhoz szükséges lépéseket írom le, hogy egy linux rendszeren a gép fölolvasson egy tetszőleges magyar nyelvű szöveget (mbrola és az itt leírt összes program működik windowson is, ehhez lásd mbwin.htm ).

1. Letöltés:


Az mbrola szövegfelolvasó rendszer a weben a http://tcts.fpms.ac.be/synthesis/mbrola.html oldalon található. Innen kell a letöltési oldalról: http://tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html a linuxon végrehajtható programot:
http://tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip -t letölteni, és a magyar hangot: http://tcts.fpms.ac.be/synthesis/mbrola/dba/hu1/hu1.zip

2. Installálás:


mbr301.zip-et kipakolás után pl. a /usr/local/mbrola direktoriba kell irni, és ezalatt kell egy hu1 aldirektorit létrehozni, ahova a hu1 adatbankot kell kopírozni, azaz a hu1.zip-et ide kipakolni, a lényeg a hu1 adatbank fájl a /usr/local/mbrola/hu1 direktoriban.
A folyamat a linuxon így néz ki (/en/direktorim a lehozási direktorit jelenti):
  bash# cd /usr/local
  bash# mkdir mbrola
  bash# cd mbrola
  bash# unzip /en/direktorim/mbr301h.zip
  bash# unzip /en/direktorim/hu1.zip

A /usr/local/bin direktoriban egy szimbolikus linket kell a végrehajtható mbrola állományra tenni, mint superuser:
  bash# cd /usr/local/bin
  bash# ln -s /usr/local/mbrola/mbrola-linux-i386 mbrola
Ezzel az mbrola végrehajtható lett mbrola néven

3. Szöveg-fonéma átalakítás


Majd a szöveg-fonéma átalakító szükséges, ez lehozható:
http://tkltrans.sf.net/magyar/hunpho.tar.gz

A szöveg-fonéma átalakítóhoz szükséges a perl interpreter és az awk segédprogram.

Működési feltételek:
1. A szövegnek szövegformátumban kell léteznie. *.doc, *.pdf, stb formátumokat előbb tiszta szöveggé kell átalakítani.
2. A szöveg két szűrőn kell hogy átmenjen, mielőtt hanggá (fonémák sorozatává) válik:
  2.a szam.awk kiszűri a zárójeleket és idézőjeleket, az önálló betűket kimondhatóvá teszi, bizonyos rövidítéseket kimondhatóvá tesz, problematikus szókapcsolatokat szétválaszt és a számjegyeket szavakká alakítja.
  2.b xttp.pl a szűrt szöveget fonémákká alakítja.
3. A fonéma állományra alkalmazni kell az mbrola programot a hu1 adatbázissal.

2. és 3. linux szkript formájában (do.sh):
  awk -f szam.awk <$1.txt >$11.txt
  perl xttp.pl $2 < $11.txt >$1.pho
  mbrola /usr/local/mbrola/hu1/hu1 $1.pho $1.wav
  play $1.wav
  rm -f $11.txt

xttp.pl paramétere, melyet nem kötelező megadni, lehet m, f1, f2 vagy f3. A paraméter hiánya a legmélyebb női hangot jelenti, azaz megfelel az f1 paraméternek, f2 és f3 egyre magasabb hangokat jelent, m pedig férfihangot.

Ha egy tetszőleges szövegállományt sikeresen átalakítottál szöveg.pho formátumba, mbrola azt wav formátumú állománnyá alakítja, melyet egy tetszőleges hanglejátszó le tud játszani. A legegyszerűbben a
  play szöveg.wav
paranccsal.

do.sh (vagy do2.sh) fölhívása a parancssorból két példával illusztrálva a szoveg.txt állományra:
  sh do.sh szoveg f1
  sh do.sh szoveg

4. További szöveg-fonéma átalakító segédeszközök


A signe2test.pl szkript Demeter F. Tamás munkája, és a különféle beszédjeleket, mint kettőspont vagy per jel alakítja szöveggé, valamint szűri a html paramétereket. Ennek hívása a do2.sh szkriptben történik. Köszönet neki és Gyuris Szabolcsnak a szam.awk szkript kijavításához nyújtott segítségükért. Gyuris Szabolcs munkája a szintén mellékelt normalizal.pl szkript, amely perl nyelvű számátalakító és előfeldolgozó perl-barátoknak. Ehhez a programhoz installálni kell a Text::Iconv perl modult, mely általában a linux disztribúciók részeként installálható.

A szintén mellékelt uml.awk program akkor segít, ha a fölolvasandó szöveg UTF8 vagy email (=x) kódolásban van.

4. Az mbrola program kapcsolói:

KapcsolóLeírásPélda
hsegítség a kapcsolókhozmbrola -h
ifonéma-adatbank információmbrola -i /usr/local/mbrola/hu1/hu1
enem létező difonéma ne okozzon megállástmbrola -e /usr/local/mbrola/hu1/hu1 test.pho test.wav
vhangerő 1: alapállás, <1: halkabb, >1: hangosabbmbrola -v 1.1 /usr/local/mbrola/hu1/hu1 test.pho test.wav
fhangmagasság 1: alapállás, <1: magasabb, >1: mélyebbmbrola -f 0.6 /usr/local/mbrola/hu1/hu1 test.pho test.wav
tbeszédsebesség 1: alapállás, <1: gyorsabb, >1: lassabbmbrola -t 1.2 /usr/local/mbrola/hu1/hu1 test.pho test.wav

5. A .pho fájlok formátuma és működése.


Egy minta .pho fájl így néz ki:

_ 51 25 114
b 62
O 127 48 170 55 180
Z 110 53 116
u: 211
r 150 50 91
_ 91

A .pho fájl az mbrola szintetizátor bemenő formátuma. Minden sor egy fonéma névvel kezdődik, azután jön a hosszúság (ms-ban), majd a hanglejtés (pitch) megadása, mely számpárokból áll: Az első szám a fonémán belüli hanglejtés kezdetét adja meg, a második a frekvenciát hertzben (Hz).
A példa első sora:
_ 51 25 114

51 ms-nyi szünet, az 51 ms 25%-ánál a frekvencia 114 Hz lesz. A hanglejtési pontok egy lineáris hanglejtési görbét definiálnak.

A hangerősség változtatására a .pho fájlon belül nincs lehetőség. A hangerősség változtatása lehetséges pl. a de6 és de7 hangadatbankokban; az ötlet annyi, hogy ezek a hangadatbankok megháromszorozva terjedelmüket, minden difonémát hangos és halk módban is bemondanak.

6. Éneklés


A mellékelt boci.txt állomány a boci-boci tarkát énekli. A további dalok a dam-dam (damdam.txt), a király és a bolond (bolond.txt), szeretnék szántani (szantani.txt). Az alaphangok frekvenciája hertzben:
c3d3e3f3g3a3h3c4
262294.5327.5349393440491524

Felhívása a segedeszkozok direktoriból:
sh do.sh szoveg/boci.txt

Éneklés négy oktávnyi távolságon lehetséges. A hangok cn, ciszn, dn, diszn, en, fn, fiszn, gn,giszn, an, aiszn, hn alakban adandók meg, az n szám, és a magasságot jelzi, 1 a legalacsonyabb, 4 a legmagasabb oktáv. A normál zenei á hang (440 Hz) jele a3. Minden hang előtt meg kell adni a hosszúságot, 1 a leghosszabb, 16 a legrövidebb.

A formátum:

{Singing: 8,c2,8,e2,8,c2,8,e2,4,g2,4,g2}.
Boci boci tarka.

A "{Singing:" betűsorozatnak kell első helyen állni. Ezt követik a hosszúság/hang párok vesszővel elválasztva. A legvégső jelpárnak }.-nak kell lenni, a pont fontos a sor végén. A "{Singing:"-es sort követő sorban van az énekelendő szöveg, melynek ugyanannyi szótagból kell állnia, ahány hangot megadtunk, és ennek a végén is pontnak kell lennie. A "{Singing:"-et megelőzö szövegrészt ponttal kell lezárni (.), különben ez elnyelődik.

7. Egy mondat hanglejtésének grafikus ábrázolása


A http://pascal.kgw.tu-berlin.de/expressive-speech/online/synthesis/hungarian/en/ia-en.php oldalon van egy program, mely lehetővé teszi egy mondat hanglejtésének grafikus megtekintését. (Köszönet Astrid Paeschkének a berlini egyetemről a magyar adatbank integrálásáért!). Hasonlót segítséget ad a mellékelt show.pl perl illetve a graph5.pl program, mely a megadott mondatot egy grafikus állományba, show.pl:teszt.png graph5.pl:file3.png írja ki, melyet bármely böngészővel meg lehet tekinteni. Ezek az eszközök jobb fonetika kidolgozásában segítenek, azaz az xttp.pl program javításában.

8. Hosszabb szöveg felolvasása


Mivel hosszabb szövegek nagyon nagy wav fájlt hoznának létre, célszerű őket kisebb darabokba szabdalni és úgy fölolvastatni. Erre jó a mesel.pl állomány. Ez a segedeszkozok direktoriból futtatandó. Az olvasandó állomány a program paramétere (a .txt végződés nélkül), az eredmény részére hozzuk létre a test aldirektorit. Kizárólag olvassa a fölolvasandó állományt, nem változtat benne semmit. Az éppen fölolvasott részt a kwrite szerkesztőprogrammal a képernyőn is mutatja. A szerkesztőprogram a $szerkeszto változóval ízlés szerint változtatható. A $sor belső változó az egyszerre fölolvasott sorok száma, szintén ízlés szerint beállítható. A mesel.pl program hívása, ha a fölolvasandó szöveg a szoveg/olvasnivalo.txt állomány:
  perl mesel.pl szoveg/olvasnivalo
A mellékelt mesel.sh állományt használva:
  sh mesel.sh szoveg/olvasnivalo

Mesel.pl megjegyzi, hogy hol tart az olvasásban a mesel_sorok.txt állományban. Ha felhívásakor a második paraméter a "last" szó, akkor a mesel_sorok.txt állományban levő szám által kijelölt sornál kezdi el a szöveg olvasását. Ha a harmadik paraméter szám, akkor az annyiadik sorban kezdi meg a fölolvasást.

Példák:
  perl mesel.pl szoveg/olvasnivalo last
Ez esetben mesel_sorok.txt tartalma szabja meg, hogy hol kezdi el az olvasást.
  perl mesel.pl szoveg/olvasnivalo 256
Ekkor a 256-odik sornál kezdi el a fölolvasást.

9. ptkspeak.pl a grafikus felületek kedvelőinek


Ehhez a programhoz szükséges a perl-tk csomag installálása. Ez a program lehetővé teszi egy fájl kiválasztását, annak megtekintését egy szerkesztő felületen, és annak elmondását. A grafikus felületek kedvelőinek. Hívása:
  perl ptkspeak.pl

10. Általános


Problémák esetén értesíts ezen a címen: eleonora45_KUKAC_gmx_PONT_net. Küldd el a problematikus szöveget, illetve annak problematikus részét a probléma leírásával. Köszönöm.

Az mbrola kezelésének leírása németül:
http://www.mathematik.uni-marburg.de/~wetzmj/index.php?viewPage=tts.html

Hogy hogyan lehet egy mbrola adatbankot előállítani, arról bmrolamod.htm címen találsz részletes magyar nyelvű leírást.