Ostatní > Tipy a triky pro Linux

Festival/Epos čtoucí pohotově hezky česky

(1/8) > >>

pim:
Nainstalil jsem TTS program Festival a neb lenost vládne světem, hledal jsem způsob, jak jeho ovládání co nejvíce zesnadnit. Téma http://forum.ubuntu.cz/index.php/topic,13588.0.html bylo to pravé. Konkrétně skript pro čtení textu označeného myší od maestro "kkaarreell". Ale prográmek "xclip" má své mouchy a výsledný text byl samý otazník. Proto zájemcům doporučuju místo něj použít "xsel", což vše mimořádně zjednoduší. Nová verze skriptu nepotřebuje "xclip" a hlavne objemny balik "Java-JDK" kvůli "native2ascii". Tedy stačí balík "xsel", "cstocs", doinstalovaná čeština a upravený skript bude vypadat takto:


--- Kód: ---#!/bin/bash
# skript RekniTo cte text ze schranky pomoci TTS programu festival

# nastavime nazev pro docasne soubory
tmpfile="/tmp/reknito.tmp"

# ziskame obsah schranky
xsel -o > $tmpfile
# odstranime uvozovky, pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
sed -e 's/"//g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1

# vytvorime docasny soubor pro festival
echo "(voice_czech_ph)" > $tmpfile.4
echo '(SayText "' >> $tmpfile.4
cat $tmpfile.1 >> $tmpfile.4
echo '")' >> $tmpfile.4

# prevedeme text zpet do iso-8859-2 a nechame festival text precist
cstocs utf8 il2 $tmpfile.4 | festival --pipe
--- Konec kódu ---

Nastavil jsem si na spuštění toho skriptu klávesovou zkratku a funguje perfektně. Stačí označit text myší, cvak a už se zvesela čte:-)

kkaarreell:
diky za update, vlozim info i do puvodniho vlakna

pim:
Ještě jsem ten kód změnil, aby umožňoval výber jazyka, kterým bude text předčítán. Po spuštění vyskočí tabulka s předvolenou češtinou a nabídne možnost ho přečíst anglicky. Další jazyky se dají přidat snadno. Autodetekci bych jednak nezvládl a jednak se vyskytuje spousta textů, kde to podle diakritiky poznat nejde. Lide casto pisi cesky bez hacku a carek.
Mám s tím skriptem ale jeden problém. To dialogové okno se vždy objeví na pozadí místo v popředí. Netuším, čím to změnit. Poradíte?
Změna: Chyba byla v nastavení Compiz managera. V menu General, kartě Focus & Raise Behaviour stačilo snížit Focus Prevention Level.


--- Kód: ---#!/bin/bash
# skript PrectiTo cte text ze schranky pomoci TTS programu festival

# nastavime nazev pro docasne soubory
tmpfile="/tmp/PrectiTo.tmp"

# ziskame obsah clipboardu
xsel -o > $tmpfile
# odstranime uvozovky, pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
sed -e 's/"//g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1

# vytvorime docasny soubor pro festival
echo "" > $tmpfile.4

# preptame se na rec
ans=$(zenity --list --title  "Přečti to" --text "Jakou řečí je vybraný text napsán?" --radiolist --column "výběr" --column "jazyk" TRUE česky FALSE anglicky # Je libo dalsi jazyky? -->  #FALSE hindsky
)

ex=1
if [ $ans == "česky" ];then
echo "(voice_czech_ph)" >> $tmpfile.4
ex=0
fi

if [ $ans == "anglicky" ];then
echo "" >> $tmpfile.4
ex=0
fi

# Je libo dalsi jazyky?__
# |
# V
#if [ $ans == "hindsky" ];then
# echo "(voice_hindi_ph)" >> $tmpfile.4
# ex=0
#fi

# predcitani zruseno
if [ $ex -eq 1 ];then
exit
fi


echo '(SayText "' >> $tmpfile.4
cat $tmpfile.1 >> $tmpfile.4
echo '")' >> $tmpfile.4

# prevedeme text zpet do iso-8859-2 a nechame festival text precist
cstocs utf8 il2 $tmpfile.4 | festival --pipe

exit
--- Konec kódu ---

kkaarreell:
pim: Jakou pouzivas verzi xsel?

--- Kód: ---karel@stazka:~/devel/bash/reknito$ xsel --version
xsel version 0.9 by Conrad Parker <conrad@vergenet.net>

--- Konec kódu ---
moje verze mi totiz ze znaku s diakritikou vytvari escape kody, kvuli kterym jsem prave potreboval ten native2ascii. Napriklad misto "kukuřice" je vystup "kuku\u0159ice". tobe to nedela?

kkaarreell:
Jedna se o jednoduchy skript, ktery cte text oznaceny mysi.

Poznamky:
1. pouziva se bud festival nebo epos (hlas violka).
2. Nove je pouzit xsel namisto xclip.
3. Neni treba native2ascii a cstocs, oboji lze nahradit pomoci uconv (diky pim za info).
4. Skript je udelan tak, aby mluvil cesky. Ale sikovny clovek si jej jiste upravi i pro anglictinu. Z toho take vyplyva, ze skript neobsahuje vyber jazyku, jak to ma ve svem skriptu "pim" (vyse).
5. Jelikoz Epos je ke zvukovce dost agresivni a pri prehravani hrci (alespon mne), je moznost nechat jej jen vygenerovat wav a ten prehrat programem aplay.

Instalace:

1. Nainstalujte balik xsel se vsemi jeho zavislostmi.

2. Pokud si prejete pouzivat TTS festival:
Nainstalujte "festival-czech" a "festvox-czech-ph" se vsemi jejich zavislostmi. Vytvorte soubor demo.txt s obsahem:

--- Kód: ---(voice_czech_ph)
(SayText "příšerně žluťoučký kůň úpěl ďábelské ódy")
--- Konec kódu ---
Nyni vyzkousime funkcnost prikazem:

--- Kód: ---$ uconv -f utf-8 -t iso-8859-2 demo.txt | festival
--- Konec kódu ---
Meli bychom slyset libe ceske skrehotani.

3. Pokud si prejete pouzivat TTS Epos (kvalitnejsi zvukovy vystup):
Nainstalujte program "epos" se vsemi jeho zavislostmi.  Pote stahnete z http://epos.ure.cas.cz/ dodatecne hlasy (violku) a rozbalte ziskany archiv jako root do /usr/share/epos/inv. Pak by jiz melo stacit pustit

--- Kód: ---eposd --voice violka
--- Konec kódu ---
a vyzkouset

--- Kód: ---say-epos nazdar
--- Konec kódu ---
Epos vnitrne pouziva (alespon v te stare verzi, co mam ja) iso-8859-2, takze aby fungovala diakritika, je treba nejdriv provest konverzi

--- Kód: ---echo "červená modrá fiala" | uconv -f utf-8 -t iso-8859-2 | say-epos -

--- Konec kódu ---
Nicmene mne epos krapet chrci. Z toho duvodu je lepsi jej jen nechat vygenerovat wav a ten prehrat necim jinym.
Po dokonceni experimentovani s eposem je vhodne jej ukoncit, protoze blokuje zvukovku. Treba jej rovnou zabit pomoci

--- Kód: ---killall eposd
--- Konec kódu ---

4. Vytvorime skript samotny:
Vytvorime soubor "reknito" s nasledujicim obsahem:

--- Kód: ---#!/bin/bash
# skript RekniTo cte text ze schranky pomoci TTS programu festival nebo Epos hlasem violka

# nastavim na TTS Epos
tts="epos" 
#tts="festival"

# protoze epos zachazi se zvukovkou dost hrube a pri prehravani chrci, je lepsi pouzivat na prehrani zvuku treba aplay
use_aplay="true"

# nastavime nazev pro docasne soubory
cd /tmp
tmpfile="RekniTo.tmp"

# ziskame obsah clipboardu
xsel -o > $tmpfile
# odstranime uvozovky, pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
sed -e 's/"//g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1

# prevedeme vstup do iso-8859-2, zaroven nahradime unicode escape sekvence - nutne pouze pro starsi verzi xsel vyuzivajici iso8859-1
#uconv -x 'Hex/Java-Any' -f iso-8859-1 -t iso-8859-2 --output $tmpfile.2 $tmpfile.1
# naopak tento radek je pro xsel vyuzivajici jiz utf8
uconv -f utf-8 -t iso-8859-2 --output $tmpfile.2 $tmpfile.1

# pokud pouzivam tts epos...
if [ $tts == "epos" ]; then
  #spustim eposd
  eposd --voice violka
  # pokud mam pouzit aplay, vygeneruji wav soubor a ten prehraji
  if [ "$use_aplay" == "true" ]; then
    # vygeneruji wav
    cat $tmpfile.2 | say-epos -w -
    # ukoncim eposd, jelikoz blokuje zvukovku
    killall eposd
    # prehraji wav
    aplay said.wav

  else
    # reknu text rovnou
    cat $tmpfile.2 | say-epos -
    # ukoncim eposd, jelikoz blokuje zvukovku
    killall eposd
     
  fi

elif [ $tts == "festival" ]; then
  # vytvorime docasny soubor pro festival
  echo "" > $tmpfile.3
  echo "(voice_czech_ph)" > $tmpfile.3
  echo '(SayText "' >> $tmpfile.3
  cat $tmpfile.2 >> $tmpfile.3
  echo '")' >> $tmpfile.3
  # nechame festival text precist
  cat $tmpfile.3 | festival --pipe

fi

--- Konec kódu ---

* Zda pouzivate TTS Festival nebo Epos se nastavuje odkomentovanim/zakomentovanim radku

--- Kód: ---tts="epos" 
#tts="festival"

--- Konec kódu ---
* V pripade pouziti programu Epos muzete nastavit/zakazat, aby zvuk byl prehravan eposem samotnym a nebo externim programem (aplay).
Nastavite odkomentovanim/zakomentovanim radku

--- Kód: ---use_aplay="true"

--- Konec kódu ---
Pokud chcete misto aplay pouzit jiny program, provedte prislusnou upravu radku

--- Kód: ---aplay said.wav
--- Konec kódu ---
* pro starou verzi programu xsel vyuzivajici iso8859-1 nahradte radek

--- Kód: ---uconv -f utf-8 -t iso-8859-2 --output $tmpfile.2 $tmpfile.1

--- Konec kódu ---
radkem

--- Kód: ---uconv -x 'Hex/Java-Any' -f iso-8859-1 -t iso-8859-2 --output $tmpfile.2 $tmpfile.1

--- Konec kódu ---

5. Nyni udelame soubor "reknito" spustitelnym.

--- Kód: ---$ chmod a+x reknito
--- Konec kódu ---
Vyzkousime funkcnost programu. Oznacime mysi nejaky text (pouze oznacime, nic vic) a spustime program "reknito"

--- Kód: ---$ ./reknito
--- Konec kódu ---
Pocitac by mel precist oznaceny text.

Pokud vse funguje jak ma, staci jiz vytvorit nejaky hezky spoustec pro program "reknito" (ci si nastavit klavesovou zkratku) a pretahnout jej treba do panelu.

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi