Ostatní > Tipy a triky pro Linux
Festival/Epos čtoucí pohotově hezky česky
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