Fórum Ubuntu CZ/SK

Ostatní => Tipy a triky pro Linux => Téma založeno: pim 05 Listopadu 2008, 09:07:38

Název: Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: pim 05 Listopadu 2008, 09:07:38
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 (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: [Vybrat]
#!/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

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:-)
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: kkaarreell 05 Listopadu 2008, 13:31:06
diky za update, vlozim info i do puvodniho vlakna
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 06 Listopadu 2008, 17:58:59
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: [Vybrat]
#!/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
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: kkaarreell 09 Listopadu 2008, 15:18:54
pim: Jakou pouzivas verzi xsel?
Kód: [Vybrat]
karel@stazka:~/devel/bash/reknito$ xsel --version
xsel version 0.9 by Conrad Parker <conrad@vergenet.net>
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?
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: kkaarreell 09 Listopadu 2008, 16:25:39
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: [Vybrat]
(voice_czech_ph)
(SayText "příšerně žluťoučký kůň úpěl ďábelské ódy")
Nyni vyzkousime funkcnost prikazem:
Kód: [Vybrat]
$ uconv -f utf-8 -t iso-8859-2 demo.txt | festival 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: [Vybrat]
eposd --voice violkaa vyzkouset
Kód: [Vybrat]
say-epos nazdarEpos vnitrne pouziva (alespon v te stare verzi, co mam ja) iso-8859-2, takze aby fungovala diakritika, je treba nejdriv provest konverzi
Kód: [Vybrat]
echo "červená modrá fiala" | uconv -f utf-8 -t iso-8859-2 | say-epos -
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: [Vybrat]
killall eposd
4. Vytvorime skript samotny:
Vytvorime soubor "reknito" s nasledujicim obsahem:
Kód: [Vybrat]
#!/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

* Zda pouzivate TTS Festival nebo Epos se nastavuje odkomentovanim/zakomentovanim radku
Kód: [Vybrat]
tts="epos" 
#tts="festival"
* 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: [Vybrat]
use_aplay="true"
Pokud chcete misto aplay pouzit jiny program, provedte prislusnou upravu radku
Kód: [Vybrat]
aplay said.wav* pro starou verzi programu xsel vyuzivajici iso8859-1 nahradte radek
Kód: [Vybrat]
uconv -f utf-8 -t iso-8859-2 --output $tmpfile.2 $tmpfile.1
radkem
Kód: [Vybrat]
uconv -x 'Hex/Java-Any' -f iso-8859-1 -t iso-8859-2 --output $tmpfile.2 $tmpfile.1

5. Nyni udelame soubor "reknito" spustitelnym.
Kód: [Vybrat]
$ chmod a+x reknitoVyzkousime funkcnost programu. Oznacime mysi nejaky text (pouze oznacime, nic vic) a spustime program "reknito"
Kód: [Vybrat]
$ ./reknitoPocitac 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.
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 10 Listopadu 2008, 22:08:00
pim: Jakou pouzivas verzi xsel?
Kód: [Vybrat]
karel@stazka:~/devel/bash/reknito$ xsel --version
xsel version 0.9 by Conrad Parker <conrad@vergenet.net>
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?

Aktualizuj si xsel. Verze 1.2.0 nemá s českou diakritikou potíže.
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Martin Kiklhorn 24 Května 2009, 04:58:45
Hezký skriptík.
4. Vytvorime skript samotny:
Vytvorime soubor "reknito" s nasledujicim obsahem:
Kód: [Vybrat]
...
fi
na konec bych přihodil minimálně úklidový
Kód: [Vybrat]
rm $tmpfile
rm $tmpfile.1
rm $tmpfile.2
rm $tmpfile.3
rm said.wav
neřeší to sice stav když skript předčasně skončí protože nenbylo co číst, ale nestane se vám že se přítelkyně přihlásí do jejího účtu a při kliknutí na ikonku jí to bude číst to co to naposledy četlo vám...
(A)nebo temp soubory vytvářet v ~/ namísto v /tmp/,   

//edit: na přepínání jazyka by se snad nějak mohla dát využít automatika přes sonnet http://www.abclinuxu.cz/clanky/recenze/co-prinasi-kde-4-technologie
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 04 Listopadu 2009, 18:30:02
Violka (hlas Eposu) má krásný přednes, ale hrozně dlouhé mezery po každé větě (vlastně po kterékoliv tečce). Proto jsem až doteď používal pouze Festival. Leč doba nazrála, jak pravil klasik, tak jsem se pokusil přijít na to, jak Violku umravnit. Řešení bylo překvapivě prosté. Stačilo hlasový výstup prohat přes prográmek sox. Violka pak čte s přijatelnými mezerami a jsme opět o krok blíže dokonalosti:-). Vygenerovaný zvukový soubor nechávám přečíst pomocí vlc, ale je samozřejmě možné použít jakýkoliv jiný program, třeba i přímo sox.

Změna:
- Na Kiklhornovo doporučení přidán samoúklid pozůstatků po běhu skriptu.
- Vyřešen problém Eposu, že občas zůstane nečinně viset v procesech. V takovém případě nyní stačí skript spustit podruhé a ten předčítání pošťouchne ke zdárnému konci.
- Upraveno chování při předčítání vět neukončených tečkou (například nadpisy). Doteď Violka četla bez pauzy a bez nádechu, jako by první slovo dalšího řádku bylo jenom pokračování posledního slova předchozího.
- Pokud skript nalezne uz zpracovaný wav, zkopíruje ten nalezený zvuk na plochu a smaže originál.
- Jako bonus po nainstalování knihovny libnotify se bude zobrazovat upozornění, co skript míní dělat.

Aktuální verze skriptu následuje:

Kód: [Vybrat]
#!/bin/bash
# skript na cteni textu ze schranky pomoci TTS programu Epos hlasem violka

echo 'nastaveni adresare pro docasne soubory'
mkdir -p /tmp/PrectiTo/
cd /tmp/PrectiTo
touch PrectiTo
echo 'nastaveni promennych'
tmpfile="PrectiTo"
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
time=$(date +%d.%m_%T) # cas spusteni skriptu

if [ -e /tmp/PrectiTo/said2.wav ]; then
echo 'zvuk jiz byl minule uspesne vygenerovan, bude zalohovan na plochu'
cp /tmp/PrectiTo/said2.wav ~/Plocha/Precti_to_$time.wav
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Právě byl zálohován na plochu jako 'Precti_to_$time.wav'"
echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/
exit
else
if [ -e /tmp/PrectiTo/PrectiTo.2 ]; then
echo 'problem - pri predchozim behu nebyl skript korektne ukoncen'
# text co zbyl z minula
text=$(cat $tmpfile)
notify-send --urgency=low --icon=$icon "Z minula zůstal nepřečtený text" "$text"
echo 'dalsi pokus o vygenerovani wav z nalezenych dat'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'minule se say-epos asi zaseklo, nutno uvolnit'
killall say-epos
echo 'say-epos jiz v procesech nevisi, koncim'
exit
else
echo 'zacatek zpracovani textu'
# protoze epos zachazi se zvukovkou dost hrube a pri prehravani chrci, je lepsi pouzivat na prehrani zvuku treba aplay
#use_aplay="true"

echo 'ziskani obsahu clipboardu'
xsel -o > $tmpfile
# oznameni,co se bude predcitat
text=$(cat $tmpfile)
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"

echo 'odstraneni uvozovek' # pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
sed -e 's/"/ /g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1
echo 'nahrazeni koncu radku teckou pro srozumitelnejsi prednes'
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $tmpfile.1 > $tmpfile.2

echo 'spusteni eposd'
eposd --voice violka
echo 'vygenerovani wav'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav said2.wav silence 0 -1 00:00:00.9 1%
sox said.wav said2.wav silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
fi
fi

echo 'prehrani oblibenym prehravacem'
# aplay said2.wav
vlc "/tmp/PrectiTo/said2.wav"

echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/

exit
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: boonn 29 Listopadu 2009, 20:02:09
Violka (hlas Eposu) má krásný přednes, ale hrozně dlouhé mezery po každé větě (vlastně po kterékoliv tečce). Proto jsem až doteď používal pouze Festival. Leč doba nazrála, jak pravil klasik, tak jsem se pokusil přijít na to, jak Violku umravnit. Řešení bylo překvapivě prosté. Stačilo hlasový výstup prohat přes prográmek sox. Violka pak čte s přijatelnými mezerami a jsme opět o krok blíže dokonalosti:-). Vygenerovaný zvukový soubor nechávám přečíst pomocí vlc, ale je samozřejmě možné použít jakýkoliv jiný program, třeba i přímo sox.

Změna:
- Na Kiklhornovo doporučení přidán samoúklid pozůstatků po běhu skriptu.
- Vyřešen problém Eposu, že občas zůstane nečinně viset v procesech. V takovém případě nyní stačí skript spustit podruhé a ten předčítání pošťouchne ke zdárnému konci.
- Upraveno chování při předčítání vět neukončených tečkou (například nadpisy). Doteď Violka četla bez pauzy a bez nádechu, jako by první slovo dalšího řádku bylo jenom pokračování posledního slova předchozího.
- Pokud skript nalezne uz zpracovaný wav, zkopíruje ten nalezený zvuk na plochu a smaže originál.
- Jako bonus po nainstalování knihovny libnotify se bude zobrazovat upozornění, co skript míní dělat.

Aktuální verze skriptu následuje:

Kód: [Vybrat]
#!/bin/bash
# skript na cteni textu ze schranky pomoci TTS programu Epos hlasem violka

echo 'nastaveni adresare pro docasne soubory'
mkdir -p /tmp/PrectiTo/
cd /tmp/PrectiTo
touch PrectiTo
echo 'nastaveni promennych'
tmpfile="PrectiTo"
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
time=$(date +%d.%m_%T) # cas spusteni skriptu

if [ -e /tmp/PrectiTo/said2.wav ]; then
echo 'zvuk jiz byl minule uspesne vygenerovan, bude zalohovan na plochu'
cp /tmp/PrectiTo/said2.wav ~/Plocha/Precti_to_$time.wav
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Právě byl zálohován na plochu jako 'Precti_to_$time.wav'"
echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/
exit
else
if [ -e /tmp/PrectiTo/PrectiTo.2 ]; then
echo 'problem - pri predchozim behu nebyl skript korektne ukoncen'
# text co zbyl z minula
text=$(cat $tmpfile)
notify-send --urgency=low --icon=$icon "Z minula zůstal nepřečtený text" "$text"
echo 'dalsi pokus o vygenerovani wav z nalezenych dat'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'minule se say-epos asi zaseklo, nutno uvolnit'
killall say-epos
echo 'say-epos jiz v procesech nevisi, koncim'
exit
else
echo 'zacatek zpracovani textu'
# protoze epos zachazi se zvukovkou dost hrube a pri prehravani chrci, je lepsi pouzivat na prehrani zvuku treba aplay
#use_aplay="true"

echo 'ziskani obsahu clipboardu'
xsel -o > $tmpfile
# oznameni,co se bude predcitat
text=$(cat $tmpfile)
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"

echo 'odstraneni uvozovek' # pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
sed -e 's/"/ /g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1
echo 'nahrazeni koncu radku teckou pro srozumitelnejsi prednes'
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $tmpfile.1 > $tmpfile.2

echo 'spusteni eposd'
eposd --voice violka
echo 'vygenerovani wav'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav said2.wav silence 0 -1 00:00:00.9 1%
sox said.wav said2.wav silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
fi
fi

echo 'prehrani oblibenym prehravacem'
# aplay said2.wav
vlc "/tmp/PrectiTo/said2.wav"

echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/

exit

Ten tvůj skript nemůžu tak nějak rozchodit, i když vypadá líp ... když to spustím v terminálu, píše to:

Kód: [Vybrat]
urgulak@urgulakthegreat:~$ sudo ./reknito
nastaveni adresare pro docasne soubory
nastaveni promennych
zacatek zpracovani textu
ziskani obsahu clipboardu
./reknito: řádek 45: notify-send: příkaz nenalezen
odstraneni uvozovek
nahrazeni koncu radku teckou pro srozumitelnejsi prednes
spusteni eposd
vygenerovani wav
osekani zbytecne dlouhych mezer na konci kazde vety
sox FAIL formats: can't open input file `said.wav': No such file or directory
prehrani oblibenym prehravacem
VLC is not supposed to be run as root. Sorry.
If you need to use real-time priorities and/or privileged TCP ports
you can use vlc-wrapper (make sure it is Set-UID root and
cannot be run by non-trusted users first).
uklidove prace
-ukonceni zbylych procesu
say-epos: no process found
eposd: no process found
-odstraneni nepotrebnych souboru
urgulak@urgulakthegreat:~$ sudo ./reknito
nastaveni adresare pro docasne soubory
nastaveni promennych
zacatek zpracovani textu
ziskani obsahu clipboardu
./reknito: řádek 45: notify-send: příkaz nenalezen
odstraneni uvozovek
nahrazeni koncu radku teckou pro srozumitelnejsi prednes
spusteni eposd
vygenerovani wav
vijol@kaIv%z�vor@ceh%las%B'eposum�Ak@r�s%n�Bp^�ed@nes%#F,'aleIh%roz%�eBd@loOuh�AmezeriBpoka�%d�Bv%je�eAz�vor@kaBv%las%t@�eBpok^ter�kolif%Ate�%ceBz�vor@kuB'uzav%��t^#######################################################################################################################################################T
osekani zbytecne dlouhych mezer na konci kazde vety
prehrani oblibenym prehravacem
VLC is not supposed to be run as root. Sorry.
If you need to use real-time priorities and/or privileged TCP ports
you can use vlc-wrapper (make sure it is Set-UID root and
cannot be run by non-trusted users first).
uklidove prace
-ukonceni zbylych procesu
say-epos: no process found
-odstraneni nepotrebnych souboru

ps: kkaarreell  mi fachá, tak nevím ... kdybys věděl čím to je, kdyžtak napiš, díky ...
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Martin Kiklhorn 30 Listopadu 2009, 17:48:47
Kód: [Vybrat]
sudo apt-get install libnotify-bin
a proč spouštíte tento skript se sudo?
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 30 Listopadu 2009, 21:26:42
Teze jsem se chtel zeptat k cemu sudo:-). Libnotify to neovlivni. Pokud neni nainstalovan, jednoduse se nezobrazi zprava s bublinou a skript pracuje dal.
Udelal jsem od te doby ve skriptu par kosmetickych zmen. Na funkci (rostlinare) by to nemelo mit vliv. Pokud ti to ani nadale nepujde, napis, jake soubory se ti pri spusteni skriptu vytvori ve slozce /tmp/PrectiTo/.

Kód: [Vybrat]
#!/bin/bash
# skript na cteni textu ze schranky pomoci TTS programu Epos hlasem violka

echo 'nastaveni adresare pro docasne soubory'
mkdir -p /tmp/PrectiTo/
cd /tmp/PrectiTo
touch PrectiTo
echo 'nastaveni promennych'
tmpfile="PrectiTo"
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
time=$(date +%d.%m_%T) # cas spusteni skriptu

if [ -e /tmp/PrectiTo/said2.wav ]; then
echo 'zvuk jiz byl minule uspesne vygenerovan, bude zalohovan na plochu'
cp /tmp/PrectiTo/said2.wav ~/Plocha/Precti_to_$time.wav
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Právě byl zálohován na plochu jako 'Precti_to_$time.wav'"
echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/
exit
else
if [ -e /tmp/PrectiTo/PrectiTo.2 ]; then
echo 'problem - pri predchozim behu nebyl skript korektne ukoncen'
# text co zbyl z minula
#text=$(cat $tmpfile)
text=$(sed 2q $tmpfile)
notify-send --urgency=low --icon=$icon "Z minula zůstal nepřečtený text" "$text"
echo 'dalsi pokus o vygenerovani wav z nalezenych dat'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'minule se say-epos asi zaseklo, nutno uvolnit'
killall say-epos
echo 'say-epos jiz v procesech nevisi, koncim'
exit
else
echo 'zacatek zpracovani textu'
# protoze epos zachazi se zvukovkou dost hrube a pri prehravani chrci, je lepsi pouzivat na prehrani zvuku treba aplay
#use_aplay="true"

echo 'ziskani obsahu clipboardu'
xsel -o > $tmpfile
# oznameni,co se bude predcitat
text=$(sed 2q $tmpfile)
# echo ${tmpfile:4:7}
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"

# pomoci souboru
#echo 'odstraneni uvozovek' # pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
#sed -e 's/"/ /g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1
#echo 'nahrazeni koncu radku teckou pro srozumitelnejsi prednes'
#sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $tmpfile > $tmpfile.2
#echo 'odstraneni zavorek'
#sed -e 's/(/ /g' $tmpfile.2 > $tmpfile.1
#sed -e 's/)/ /g' $tmpfile.1 > $tmpfile.2
#echo 'nahrada "atd."'
#sed -e 's/atd./ a tak dále /g' $tmpfile.2 > $tmpfile.1
#echo 'nahrada "mj."'
#sed -e 's/mj./ mimo jiné /g' $tmpfile.1 > $tmpfile.2
#echo 'nahrada "apod."'
#sed -e 's/apod./ a podobně /g' $tmpfile.2 > $tmpfile.1
#echo 'nahrada "aj."'
#sed -e 's/aj./ a jiné /g' $tmpfile.1 > $tmpfile.2

# pomoci roury
echo 'nahrazeni koncu radku teckou pro srozumitelnejsi prednes a dalsi textove upravy'
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $tmpfile | sed 's/(/ /g;s/)/ /g;s/atd./ a tak dále /g;s/mj./ mimo jiné /g;s/apod./ a podobně /g;s/aj./ a jiné /g' > $tmpfile.2



echo 'spusteni eposd'
eposd --voice violka
echo 'vygenerovani wav'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav said2.wav silence 0 -1 00:00:00.9 1%
sox said.wav said2.wav silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
fi
fi

echo 'prehrani oblibenym prehravacem'
# aplay said2.wav
vlc "/tmp/PrectiTo/said2.wav"

echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/

exit
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: boonn 02 Prosince 2009, 14:22:24
Teze jsem se chtel zeptat k cemu sudo:-). Libnotify to neovlivni. Pokud neni nainstalovan, jednoduse se nezobrazi zprava s bublinou a skript pracuje dal.
Udelal jsem od te doby ve skriptu par kosmetickych zmen. Na funkci (rostlinare) by to nemelo mit vliv. Pokud ti to ani nadale nepujde, napis, jake soubory se ti pri spusteni skriptu vytvori ve slozce /tmp/PrectiTo/.

Kód: [Vybrat]
#!/bin/bash
# skript na cteni textu ze schranky pomoci TTS programu Epos hlasem violka

echo 'nastaveni adresare pro docasne soubory'
mkdir -p /tmp/PrectiTo/
cd /tmp/PrectiTo
touch PrectiTo
echo 'nastaveni promennych'
tmpfile="PrectiTo"
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
time=$(date +%d.%m_%T) # cas spusteni skriptu

if [ -e /tmp/PrectiTo/said2.wav ]; then
echo 'zvuk jiz byl minule uspesne vygenerovan, bude zalohovan na plochu'
cp /tmp/PrectiTo/said2.wav ~/Plocha/Precti_to_$time.wav
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Právě byl zálohován na plochu jako 'Precti_to_$time.wav'"
echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/
exit
else
if [ -e /tmp/PrectiTo/PrectiTo.2 ]; then
echo 'problem - pri predchozim behu nebyl skript korektne ukoncen'
# text co zbyl z minula
#text=$(cat $tmpfile)
text=$(sed 2q $tmpfile)
notify-send --urgency=low --icon=$icon "Z minula zůstal nepřečtený text" "$text"
echo 'dalsi pokus o vygenerovani wav z nalezenych dat'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'minule se say-epos asi zaseklo, nutno uvolnit'
killall say-epos
echo 'say-epos jiz v procesech nevisi, koncim'
exit
else
echo 'zacatek zpracovani textu'
# protoze epos zachazi se zvukovkou dost hrube a pri prehravani chrci, je lepsi pouzivat na prehrani zvuku treba aplay
#use_aplay="true"

echo 'ziskani obsahu clipboardu'
xsel -o > $tmpfile
# oznameni,co se bude predcitat
text=$(sed 2q $tmpfile)
# echo ${tmpfile:4:7}
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"

# pomoci souboru
#echo 'odstraneni uvozovek' # pokud je chceme cist, staci prikaz zamenit tim zakomentovanym
#sed -e 's/"/ /g' $tmpfile > $tmpfile.1
#sed -e 's/"/ uvozovky /g' $tmpfile > $tmpfile.1
#echo 'nahrazeni koncu radku teckou pro srozumitelnejsi prednes'
#sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $tmpfile > $tmpfile.2
#echo 'odstraneni zavorek'
#sed -e 's/(/ /g' $tmpfile.2 > $tmpfile.1
#sed -e 's/)/ /g' $tmpfile.1 > $tmpfile.2
#echo 'nahrada "atd."'
#sed -e 's/atd./ a tak dále /g' $tmpfile.2 > $tmpfile.1
#echo 'nahrada "mj."'
#sed -e 's/mj./ mimo jiné /g' $tmpfile.1 > $tmpfile.2
#echo 'nahrada "apod."'
#sed -e 's/apod./ a podobně /g' $tmpfile.2 > $tmpfile.1
#echo 'nahrada "aj."'
#sed -e 's/aj./ a jiné /g' $tmpfile.1 > $tmpfile.2

# pomoci roury
echo 'nahrazeni koncu radku teckou pro srozumitelnejsi prednes a dalsi textove upravy'
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $tmpfile | sed 's/(/ /g;s/)/ /g;s/atd./ a tak dále /g;s/mj./ mimo jiné /g;s/apod./ a podobně /g;s/aj./ a jiné /g' > $tmpfile.2



echo 'spusteni eposd'
eposd --voice violka
echo 'vygenerovani wav'
cstocs utf8 il2 $tmpfile.2 | say-epos -w -
echo 'osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav said2.wav silence 0 -1 00:00:00.9 1%
sox said.wav said2.wav silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
fi
fi

echo 'prehrani oblibenym prehravacem'
# aplay said2.wav
vlc "/tmp/PrectiTo/said2.wav"

echo 'uklidove prace'
echo '-ukonceni zbylych procesu'
killall say-epos
killall eposd
echo '-odstraneni nepotrebnych souboru'
rm -rf /tmp/PrectiTo/

exit

Díky - sudo jsem napsal ... abych řekl pravdu nezáměrně, pravď. proto že jsem zároveŇ s tím ještě něco instaloval/nastavoval. Každopádně nainstalování libnotify-bin pomohlo -- tušil jsem to, ale nemohl to nějak najít v synapticu, nebo nevím. Dík  ;)
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: boonn 02 Prosince 2009, 17:15:56
jj, díky, sudo byl omyl, s libnotify funguje
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: 1x23 20 Prosince 2009, 14:44:26
ahoj snažim se ted rozchodit čtení ale hodilo mi to chybu

čtu:

a zvuk nikde, nevi někdo co stim?


Kód: [Vybrat]
./reknito
'az%vuk@I�ig@de#F,neviI�eg@docos%�im@#######################################################################################################################################################Q?
Client side error: 463 Segment number 1360 occurred, but the maximum is 442
said.wav: No such file or directory

a zvuk nikde, nevi někdo co stim?

použivam epos
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Habo 21 Prosince 2009, 16:02:41
...
(A)nebo temp soubory vytvářet v ~/ namísto v /tmp/,   
...
Nie to by nebolo lepsie, pretoze docasne subory patria do /tmp pretoze to sa automaticky pri starte PC zmazava a teda je vyriesena situacia ked to skape napr. pri vypadku prudu; lepsie je nastavit tmpfile="RekniTo-$USER.tmp"
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 26 Prosince 2009, 09:52:10
1x23: Uz jsem se s tim take setkal,ale nevybavuju si presne, v cem spocivala potiz. Mas spravne nainstalovany hlas Violka?
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: LuciusMare 23 Ledna 2010, 18:42:50
Juu, ozivovani! ;D (Nevím kde se ptát jinde)
Takže, chtěl bych aby na mě můj počítač mluvil, a to nejlépe česky, bohužel, google je nesdílný (přece jenom, "festival česky"...) a mě to hází chyby.
Takže, v souboru demo.txt mám
Kód: [Vybrat]
(voice_czech_ph)
(SayText "příšerně žluťoučký kůň úpěl ďábelské ódy")]
Ale festival mi hází:
Kód: [Vybrat]
SIOD ERROR: unbound variable : voice_czech_ph
SIOD ERROR: unbound variable : p���ern�
:(
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Martin Kiklhorn 23 Ledna 2010, 19:46:18
iconv , cstocs nebo recode

nebo se mrkni na http://forum.ubuntu.cz/index.php/topic,35358.0.html kde jsem to řešil v pythonu
Citace
#musim upravit CP jinak cte nesmysly a ne cestinu
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: LuciusMare 23 Ledna 2010, 19:49:04
Jo, pardon, to jsem zapomnel zminit, ano, pajpoval jsem mu to pres cstocs, presne jak to bylo v tom puvodnim threadu. A muj ani necte, jen vypise chybu a umre.
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Kocuro Pablo 10 Února 2010, 19:20:32
Zdravím, skript je dobrý, ale mě nechtěl fungovat. Zjistil jsem, že xsel nenačítá obsah schránky. Pokud jsem spustil samotný xsel z konzole, šlo to, ale za běhu skriptu ne.  Proto jsem za pomoci man xsel přidal některé parametry,  příkaz vypadá potom takto:
Kód: [Vybrat]
xsel -o -b -t 1500  > $tmpfile. -b určuje čtení schránky, -t 1500 značí, že má k dispozici na čtení 1500 milisekund. Přidání parametru -t možná nebylo potřeba, ale mě taky trochu pomohlo. Potom mi všechny zde uvedené skripty začaly fungovat. Pouze občas se zasekne, zřejmě na úpravě získaného textu, ale opětovným spuštěním se čtení rozběhne.
  Verzi programu xsel mám 1.2.0, systém Ubuntu 9.04.

Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: kiflik 11 Února 2010, 01:27:11
ahoj snažim se ted rozchodit čtení ale hodilo mi to chybu

čtu:

a zvuk nikde, nevi někdo co stim?


Kód: [Vybrat]
./reknito
'az%vuk@I�ig@de#F,neviI�eg@docos%�im@#######################################################################################################################################################Q?
Client side error: 463 Segment number 1360 occurred, but the maximum is 442
said.wav: No such file or directory

a zvuk nikde, nevi někdo co stim?

použivam epos

nemáš nahraný hlas...

mít rozbaleno v /usr/share/epos/inv/tdp  violku nebo i machace
hlasy jsou na http://epos.ufe.cz/download/inv/epos-tdp.tgz (http://epos.ufe.cz/download/inv/epos-tdp.tgz)



ls /usr/share/epos/inv/tdp
machac.tdi  violka.tdi


spustit démona s violkou

eposd --voice violka -D
Base directory is /usr/share/epos
Loading config from fixed.ini
Loading config from ansi.ini
Adding language czech
Loading language from czech.ini
Loading charset 8859-2
Loading voice from kubec-vq.ini
Loading voice from machac.ini
Loading voice from violka.ini
Loading voice from machac8.ini
Loading voice from violka16.ini
Loading voice from violka8.ini
Loading voice from vichova-f.ini
Loading voice from vichova-vq.ini
Loading voice from vichova.ini
Loading voice from kubec-f.ini
Loading voice from kubec.ini
Loading voice from theimer.ini
Loading voice from mbr.ini
Loading voice from jiri.ini
Loading voice from machac_bang.ini
Loading voice from machac_bang_smooth.ini
Loading voice from machac_lpc_bang.ini
Loading voice from machac_lpc_bang_phone.ini
Loading voice from machac_lpp.ini
Loading voice from machac_bang8.ini
Loading voice from machac_lpc_bang8.ini
Loading voice from machac_lpc_bang_phone8.ini
Loading voice from machac_lpp8.ini
Adding language slovak
Loading language from slovak.ini
Loading voice from igor.ini
Adding language latin
Loading language from latin.ini
Loading voice from hildegard.ini
Loading voice from caesar.ini
Loading voice from benedictus.ini
Loading voice from linnaeus.ini
Adding language vogon
Loading language from vogon.ini
Loading voice from jeltz.ini
Compiling czech language rules
Compiling slovak language rules
Compiling latin language rules
Compiling vogon language rules
Loading SAMPA mappings
Loading alternate SAMPA mappings

no a test hovoření

say-epos "co chceš žbleptnout"
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Peterx 11 Února 2010, 08:10:55
Sorac za otazku trochu mimo, ale ja zhanam opacny program, ktory mi zo zvukoveho, alebo filmoveho suboru spravi text. Je taky?
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: LuciusMare 11 Února 2010, 14:56:00
A me festival porad necte... :(
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 02 Června 2010, 18:27:46
V názvu vlákna už je "Festival" jen z historických důvodů. Už dávno jsem mu dal vale. V Lucidu zacal Epos nějak podezřele často chybovat, tak jsem se pokusil najít důvod a když už jsem byl v tom, skript jsem překopal. Od té doby mi už přes měsíc funguje bezporuchově, tak tu novou verzi přidávám.

Hlavní změnou je ošetření vyjímek a chyb. Pokud něco nevyjde, uloží chybovou hlášku na plochu.

Ovládá se a funguje stále stejně: po spuštění skript koukne, jestli už něco není rozpracováno a pokusí se to obnovit/zálohovat na plochu. Pokud nic nenajde, přečte text ze schránky.

Kód: [Vybrat]
#!/bin/bash
# skript na cteni textu ze schranky pomoci TTS programu Epos hlasem Violka
# potreba je: xsel, sox, cstocs, epos
# hlasy z http://epos.ufe.cz/download/inv/epos-tdp.tgz rozbalit do /usr/share/epos/inv/
# neni nutne,ale hodi se: libnotify-bin, vlc

#TODO
# pro chybe zkontrolovat, elsi vse nainsatlovane; / instalacni skript ?
# zmensit i éíáščě kapitalky? - awk - Je vubec potreba?
# function s vicesovnymi argumenty pro libnotify - zbytecne
# Plocha unverzalni nazev


echo '- Jde se na vec:-)'

Jmeno=$(basename "$0") # nazev souboru skriptu
echo '- Nastaveni adresare pro docasne soubory'
mkdir -p /tmp/$Jmeno/
cd /tmp/$Jmeno

echo '- Zacatek logovani chyb'
exec 2> >(tee -a log)

echo '- Nastaveni promennych'
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
time=$(date +%d.%m_%T) # cas spusteni skriptu
n=5 # pocet pokusu o prevedeni textu na zvuk, nez to skript vzda




# Overime, zda skript byl minule ukoncen normalnim zpusobem
if [ -e /tmp/$Jmeno/$Jmeno.pid ]; then
echo '! Po predchozim spusteni nebyl skript korektne ukoncen'
# notify-send --urgency=low --icon=$icon "Naposledy nebyl skript korektně ukončen" "Pokusím se obnovit data z minula"
PID1=$(ps -p $(cat $Jmeno.pid)) # zjisti, zda je zjistene PID aktivni
# echo '- PID1 = '$PID1
PID2=$(echo $PID1 | gawk '{print $8}') # zjisti nazev programu s danym PID
# echo '- PID2 = '$PID2
PID3=$(echo $Jmeno | gawk '{print substr($(basename "$0"),1,15)}') # oreze na 15 znaku (protoze 'ps' mi vyhazuje nazev kdoviproc zkraceny)
# echo '- PID3 = '$PID3
if [ "$PID2" == "$PID3" ]; then # porovnanim overi, zda se pod danym PID neskryva jiz jiny program
echo '! Skript jiz jednou bezi s PID '$(cat $Jmeno.pid)', pred pokracovanim je nutno ho sestrelit'
kill -9 $(cat $Jmeno.pid)
echo '- Prave se tak stalo, muzeme pokracovat'
fi
fi

# Skript stoprocentne bezi pouze jednou, nastala vhodna chvile se podepsat
echo $$ > $Jmeno.pid


# FUNKCE
# pauza pro odhmyzovaci ucely
function pauza(){
   read -p “$*”
}

# osekani moc dlouhych pauz
function trim() {
echo '- Osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav said2.wav silence 0 -1 00:00:00.9 1%
sox said.wav said2.wav silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
}

# zobrazeni bublinove zpravy
#function notify() {
# notify-send --urgency=$1 --icon=$icon $2 $3
#}



#HLAVNI CAST
if [ ! -e $Jmeno ]; then
echo '- Ziskani obsahu clipboardu'
xsel -o > $Jmeno # Pokud by nefungovalo, "Kocuro Pablo" by misto tohoto pouzil nasledujici radek
# xsel -o -b -t 1500  > $Jmeno
text=$(sed 2q $Jmeno) # oznameni, co se bude predcitat
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"
else
echo '! Nalezen surovy text z minula'
text=$(sed 2q $Jmeno) # oznameni, co se bude predcitat
notify-send --urgency=low --icon=$icon "Bude obnoven text:" "$text"
fi
#pauza 'enter'

if [ ! -e $Jmeno.2 ]; then
echo '- Upravy textu pro srozumitelnejsi prednes'
# všechno malým, ať Violka nehláskuje?
# tr '[:upper:]' '[:lower:]' < $Jmeno > $Jmeno.1
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $Jmeno | sed 's/"/ /g;s/(/ /g;s/)/ /g;s/atd\./ a tak dále /g;s/mj\./ mimo jiné /g;s/apod\./ a podobně /g;s/aj\./ a jiné /g' > $Jmeno.2 #  Nahrazeni koncu radku teckou, nahrada nekterych obvyklych zkratek celymi frazemi, odstraneni zavorek, uvozovek...
else
echo '! Nalezen upraveny text z minula'
fi
#pauza 'enter'

if [ ! -e said.wav ]; then
echo '- Zacina synteza zvuku. Obcas to nevyjde napoprve, zkusime to nanejvys '$n' krat.'
while [ $n -gt 0 ]; do
echo '- Zbyva' $n 'pokusu'
let n=n-1
echo '- Spusteni eposd'
eposd --voice violka
echo '- Vygenerovani wav'
cstocs utf8 il2 $Jmeno.2 | say-epos -w -
echo '- Pokus o syntezu ukoncen'
if [ -e said.wav ]; then
echo '- Surovy zvukovy zaznam je hotov'
n=0;
fi
done;
else
echo '! Nalezen surovy zvukovy zaznam'
fi
#pauza 'enter'

if [ ! -e said2.wav ]; then
trim
if [ -e said2.wav ]; then
echo '- Finalni zaznam je hotovy, nyni bude prehran'
vlc "/tmp/$Jmeno/said2.wav" # nejaky vhodny prehravac
else
chyba=$(sed 2q log)
notify-send --urgency=low --icon=$icon "Text se nepodařilo převést na hlas" "$chyba"
cp log ~/Plocha/Precti_to_log_$time
notify-send --urgency=low --icon=$icon "Chyby byly zaznamenány do logu" "Právě byl zálohován na plochu pod jménem 'Precti_to_log_$time'"
fi
else
echo '! Zvuk jiz byl minule uspesne upraven do finalni podoby, tak ho jenom zalohujeme na plochu'
cp said2.wav ~/Plocha/Precti_to_$time.wav
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Právě byl zálohován na plochu pod jménem 'Precti_to_$time.wav'"
fi
#pauza 'enter'


echo '- Zacinaji uklidove prace'
echo '- Ukonceni zbylych procesu'
killall say-epos
#killall eposd
echo '- Odstraneni nepotrebnych souboru'
rm -rf /tmp/$Jmeno/
echo '- Tak zase nekdy...'

exit
Máte-li se skriptem problémy či návrhy na vylepšení - sem s nimi:-)
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: standa 02 Června 2010, 20:06:05
U mě nečte. Hláška z LOG
Kód: [Vybrat]
Error: Already running
 (872)
/home/standa/reknito: řádek 106: cstocs: příkaz nenalezen
Client side error: Input text too funny
Error: Already running
 (872)
/home/standa/reknito: řádek 106: cstocs: příkaz nenalezen
Client side error: Input text too funny
Error: Already running
 (872)
/home/standa/reknito: řádek 106: cstocs: příkaz nenalezen
Client side error: Input text too funny
Error: Already running
 (872)
/home/standa/reknito: řádek 106: cstocs: příkaz nenalezen
Client side error: Input text too funny
Error: Already running
 (872)
/home/standa/reknito: řádek 106: cstocs: příkaz nenalezen
Client side error: Input text too funny
sox FAIL formats: can't open input file `said.wav': No such file or directory
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: pim 03 Června 2010, 15:19:04
Pardon. Ma chyba. Omylem jsem do zavislosti napsal "uconv" misto "cstocs". V puvodnim prispevku bude vzapeti upraveno.
Název: Re: Festival čtoucí pohotově hezky česky
Přispěvatel: Martin Kiklhorn 13 Srpna 2010, 01:44:50
pokud by někdo měl problém se změnou hlasu - typicky při say-epos --voice violka to čte stále výchozím mužským hlasem -
tak ať se podívá do /etc/epos/restr.ini a zakomentuje příslušný parametr.


Sám nevím který, teď to zkoušet nebudu - soubor jsem přejmenoval celý na restr.ini.old a parametr pro změnu hlasu z say-epos funguje. Tento můj líný hack (povolí měnit všechny parametry z klienta) může teoreticky kompromitovat bezpečnost... takže pokud máte více času tak si zkuste
1. zakomentovat všechny (středník),
2. restartovat epos /etc/init.d/epos restart
3. vyzkoušet say-epos --voice violka...  
4. pokud bude opět skřehotat mužským hlasem tak poslední odkomentovaný parametr je ten který brání změně hlasu
5. jeden parametr odkomentovat
5. pokračovat bodem 2.

nebo se prokousejte dost podrobným manuálem /usr/share/doc/epos/html/epos.html
Název: Re: Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: pim 15 Prosince 2010, 18:27:39
O vikendu jsem strávil jednu noc u monitoru, dalsi tri dny usilovne testoval a nova verze je zde. Rozdeluje text vytazeny ze schranky na casti, ktere zpracovava seriove, takze dusledkem je:

S vychozim nastavenim jsem zatim naraz bez problemu nacetl 80 stran z e-booku v pdf, coz odpovidalo:

Temito parametry se da nastavit chovani skriptku:
l=5k # text bude delen na casti po "l" bytech. 1 kB textu ~ 915 znaků ~ 1 min zvuku ~ 4 MB zvukoveho zaznamu ve .wav formatu
n=5 # pocet pokusu o prevedeni textu na zvuk, nez to skript vzda

Mensi "l" vyusti v hodne rychle zpracovani textu, ale zase vysledkem bude vice souboru (hur se v nich orientuje)
Vetsi "l" ma vetsi chybovost a neuskodi zvyseni parametru "n"

Kód: [Vybrat]
#!/bin/bash
# skript na cteni textu ze schranky pomoci TTS programu Epos hlasem violka
# potreba je: gawk, xsel, sox, cstocs, epos, VLC
# hlasy z http://epos.ufe.cz/download/inv/epos-tdp.tgz rozbalit do /usr/share/epos/inv/
# neni nutne,ale hodi se k zobrazovani bublinovych informaci: libnotify-bin

#TODO
# pro chybe zkontrolovat, elsi vse nainsatlovane; / instalacni skript ?
# zmensit i éíáščě kapitalky? - awk - Je potreba?
# function s vicesovnymi argumenty - zbytecne
# Plocha/Desktop atd. - unverzalni nazev
# backup mode - ukoncit VLC / nahradit jeho Playlist aktualnim umistenim souboru.
# backup mode - sloucit vysledek do jednoho souboru a enkodovat do ogg/mp3.
# pri ukonceni VLC v prubehu zpracovani prerusit dalsi zpracovavani textu.

echo '- Jde se na vec:-)'

echo '- Nastaveni promennych'
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
Jmeno=$(basename "$0") # nazev souboru skriptu
time=$(date +%d.%m_%T) # cas spusteni skriptu
l=5k # text bude delen na casti po "l" bytech. 1 kB textu ~ 915 znaků ~ 1 min zvuku ~ 4 MB zvukoveho zaznamu ve .wav formatu
n=5 # pocet pokusu o prevedeni textu na zvuk, nez to skript vzda

echo '- Nastaveni adresare pro docasne soubory'
mkdir -p /tmp/$Jmeno/
cd /tmp/$Jmeno

echo '- Zacatek logovani chyb'
#exec 1>log 2>&1
#exec 2>log
#exec 2>&1 | tee -a log
#exec 3>&1 > >(tee -a /dev/fd/3 | logger -p "$LOG_FACILITY" -t "$LOG_TOPIC_OUT" )
exec 2> >(tee -a log)

# Overime, zda skript byl minule ukoncen normalnim zpusobem
if [ -e /tmp/$Jmeno/$Jmeno.pid ]; then
echo '! Po predchozim spusteni nebyl skript korektne ukoncen'
# notify-send --urgency=low --icon=$icon "Naposledy nebyl skript korektně ukončen" "Pokusím se obnovit data z minula"
PID1=$(ps -p $(cat $Jmeno.pid)) # zjisti, zda je zjistene PID aktivni
# echo '- PID1 = '$PID1
PID2=$(echo $PID1 | gawk '{print $8}') # zjisti nazev programu s danym PID
# echo '- PID2 = '$PID2
PID3=$(echo $Jmeno | gawk '{print substr($(basename "$0"),1,15)}') # oreze na 15 znaku (protoze 'ps' mi vyhazuje nazev kdoviproc zkraceny)
# echo '- PID3 = '$PID3
if [ "$PID2" == "$PID3" ]; then # porovnanim overi, zda se pod danym PID neskryva jiz jiny program
echo ' ! Skript jiz jednou bezi s PID '$(cat $Jmeno.pid)', pred pokracovanim je nutno ho sestrelit'
kill -9 $(cat $Jmeno.pid)
echo ' - Prave se tak stalo, muzeme pokracovat'
fi
fi

# Skript stoprocentne bezi pouze jednou, nastala vhodna chvile se podepsat
echo $$ > $Jmeno.pid














# FUNKCE
# pauza pro odhmyzovaci ucely
function pauza(){
   read -p “$*”
}

# osekani moc dlouhych pauz
function trim() {
echo '- Osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav $1.wav silence 0 -1 00:00:00.9 1%
sox said.wav $1 silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
}

# zpracovani hlasu 1 - nacteni
function Voice_read() {
nn=$n
echo '- Zacina synteza zvuku. Obcas to nevyjde napoprve, zkusime to nanejvys '$nn' krat.'
while [ $nn -gt 0 ]; do
echo '- Zbyva' $nn 'pokusu'
#let n=n-1
let nn=nn-1
echo '- Spusteni eposd'
eposd --voice violka
echo '- Vygenerovani wav'
cstocs utf8 il2 $1 | say-epos -w -
echo '- Pokus o syntezu ukoncen'
if [ -e said.wav ]; then
echo '- Surovy zvukovy zaznam je hotov'
nn=0;
fi
done;
}

# zpracovani hlasu 2 - zkraceni mezer a vlozeni do fronty k prehrani
function Voice_process() {
if [ -z $1 ]; then
echo '! Chybi vstupni parameter s nazvem souboru ke zpracovani, zkusime vychozi surovy zaznam.'
set 1=said.wav
fi
if [ ! -e $1 ]; then
echo '- Pokus o zpracovani '$1
trim $1
if [ -e $1 ]; then
echo '- Finalni zaznam '$1' je hotovy, nyni bude prehran'
vlc --started-from-file --playlist-enqueue "/tmp/$Jmeno/$1" & # Spust v rezimu jedine instance, pridej do playlistu a pokracuj
if [ -z "$pid_player" ]; then
pid_player=$!
echo '- Spusten prehravac s PID='$pid_player
fi
else
chyba=$(sed 2q log)
notify-send --urgency=low --icon=$icon "Text se nepodařilo převést na hlas" "$chyba"
cp -u log ~/Plocha/Precti_to_log_$time
notify-send --urgency=low --icon=$icon "Chyby byly zaznamenány do logu" "Právě byl zálohován na plochu pod jménem 'Precti_to_log_$time'"
fi
else
echo '! Nalezen z minula zvuk jiz uspesne upraveny do finalni podoby'
if [ ! "$backup" = "1" ]; then
echo ' - prepnuto do modu zalohovani'
backup=1
mkdir -p ~/Plocha/$Jmeno-$time/
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Zpracovaný záznam bude zálohován na Plochu do adresáře jménem '$Jmeno-$time'"
fi
fi
#pauza 'enter'
}

# zobrazeni bublinove zpravy
#function notify() {
# notify-send --urgency=$1 --icon=$icon $2 $3
#}









#HLAVNI CAST
if [ ! -e $Jmeno ]; then
echo '- Ziskani obsahu clipboardu'
xsel -o > $Jmeno # Pokud by nefungovalo, "Kocuro Pablo" by misto tohoto pouzil nasledujici radek
# xsel -o -b -t 1500  > $Jmeno
text=$(sed 2q $Jmeno) # oznameni, co se bude predcitat
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"
else
echo '! Nalezen surovy text z minula'
text=$(sed 2q $Jmeno) # oznameni, co se bude predcitat
notify-send --urgency=low --icon=$icon "Bude obnoven text:" "$text"
fi
#pauza 'enter'

if [ ! -e $Jmeno.2 ]; then
echo '- Upravy textu pro srozumitelnejsi prednes'
# všechno malým, ať Violka nehláskuje?
#tr '[:upper:]' '[:lower:]' < $Jmeno > $Jmeno.1
awk '{print tolower($0)}' < $Jmeno > $Jmeno.1
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $Jmeno.1 | sed 's/"/ /g;s/(/ /g;s/)/ /g;s/atd\./ a tak dále /g;s/mj\./ mimo jiné /g;s/apod\./ a podobně /g;s/aj\./ a jiné /g' > $Jmeno.2 #  Nahrazeni koncu radku teckou, nahrada nekterych obvyklych zkratek celymi frazemi, odstraneni zavorek, uvozovek...
else
echo '! Nalezen upraveny text z minula'
fi
#pauza 'enter'

if [ ! -e $Jmeno.2.aa ]; then
echo '- Rozdeleni textu na casti po '$l' bytech'
split --bytes=$l $Jmeno.2 $Jmeno.2.
else
echo '! Nalezen rozdeleny text z minula'
fi
#pauza 'enter'

for f in $Jmeno.2.??; do
rm -rf /tmp/$Jmeno/said.wav
if [ ! -e $f.wav ]; then
Voice_read $f
fi
Voice_process $f.wav
if [ "$backup" = "1" ]; then
echo ' - Zaznam zkopirovan do ~/Plocha/'$Jmeno'-'$time'/'$f'.wav'
cp $f.wav ~/Plocha/$Jmeno-$time/$f.wav
fi
done
#pauza 'enter'

echo '- Ceka se na ukonceni prehravace s PID='$pid_player
wait $pid_player
echo '- Prehravac ukoncen'
echo '- Zacinaji uklidove prace'
echo '- Ukonceni zbylych procesu'
killall say-epos
#killall eposd
echo '- Odstraneni nepotrebnych souboru'
rm -rf /tmp/$Jmeno/
echo '- Tak zase nekdy...'

exit

Preji prijemny poslech.
Název: Re: Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: Filip Dominec 15 Prosince 2010, 23:01:56
pim: ještě si k tomu připiš závislost na gawk

Musím ale přiznat, že u mne se to nedá používat - zvuk je nesmírně trhaný, zní to, jako kdyby to každou druhou hlásku nahradilo tichem... Věřím, že se to nějak povede napravit, protože skript to může být hodně užitečný. Každopádně díky.
Název: Re: Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: pim 16 Prosince 2010, 22:57:11
Copak gawk neni uz v cistem systemu? Dobroje. Budiz doplneno.

Pokud se ti to prehrava trhane, muze to byt vytizenim cpu v prubehu zpracovavani dalsi casti textu. V tom pripade pomuze zvysit prioritu VLC procesu (v nastaveni VLC).

Chybejici hlasky, to vypada na osekavani mezer neboli sox. Zkus pozastavit prehravani a podivat se do temp slozky vytvorene skriptem. Tam jsou ulozeny docasne soubory v ruznem stupni zpracovani. Zkontroluj text a poslechni si "said.wav". Pokud ten je jeste v poradku a divne zni jenom finalni zvukovy zaznam, pak je chyba v uprave pomoci sox. Vysvetleni parametru sox mas ve skriptu hned u inkriminovaneho prikazu. Jestli se ti to podari doladit, nahod vysledek sem:-).
Název: Re: Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: pim 17 Prosince 2010, 20:45:07
Jeste dve vylepseni:

Kód: [Vybrat]
#!/bin/bash

#Popis
# - skript na cteni textu ze schranky pomoci TTS programu Epos hlasem violka
# - potreba je: gawk, xsel, sox, cstocs, epos, VLC
# - hlasy z http://epos.ufe.cz/download/inv/epos-tdp.tgz rozbalit do /usr/share/epos/inv/
# - neni nutne, ale hodi se k zobrazovani bublinovych informaci: libnotify-bin

#TODO
# - pro chybe zkontrolovat, elsi vse nainsatlovane; / instalacni skript ?
# - function s vicesovnymi argumenty - zbytecne
# - Plocha/Desktop atd. - unverzalni nazev
# - pri ukonceni VLC v prubehu zpracovani prerusit dalsi zpracovavani textu.

echo '- Jde se na vec:-)'

echo '- Nastaveni promennych'
icon="/usr/share/icons/Humanity/devices/48/audio-input-microphone.svg" # ikona zobrazena v bublinove napovede
Jmeno=$(basename "$0") # nazev souboru skriptu
time=$(date +%d.%m_%T) # cas spusteni skriptu
Format=ogg # pripadna zaloha vygenerovaneho zvuku bude ve zvolenem formatu
l=5k # text bude delen na casti po "l" bytech. 1 kB textu ~ 1 min zvuku ~ 4 MB zvukoveho zaznamu ve .wav formatu
n=5 # pocet pokusu o prevedeni textu na zvuk, nez to skript vzda

echo '- Nastaveni adresare pro docasne soubory'
mkdir -p /tmp/$Jmeno/
cd /tmp/$Jmeno

echo '- Zacatek logovani chyb'
#exec 1>log 2>&1
#exec 2>log
#exec 2>&1 | tee -a log
#exec 3>&1 > >(tee -a /dev/fd/3 | logger -p "$LOG_FACILITY" -t "$LOG_TOPIC_OUT" )
exec 2> >(tee -a log)

# Overime, zda skript byl minule ukoncen normalnim zpusobem
if [ -e /tmp/$Jmeno/$Jmeno.pid ]; then
echo '! Po predchozim spusteni nebyl skript korektne ukoncen'
# notify-send --urgency=low --icon=$icon "Naposledy nebyl skript korektně ukončen" "Pokusím se obnovit data z minula"
PID1=$(ps -p $(cat $Jmeno.pid)) # zjisti, zda je zjistene PID aktivni
# echo '- PID1 = '$PID1
PID2=$(echo $PID1 | gawk '{print $8}') # zjisti nazev programu s danym PID
# echo '- PID2 = '$PID2
PID3=$(echo $Jmeno | gawk '{print substr($(basename "$0"),1,15)}') # oreze na 15 znaku (protoze 'ps' mi vyhazuje nazev kdoviproc zkraceny)
# echo '- PID3 = '$PID3
if [ "$PID2" == "$PID3" ]; then # porovnanim overi, zda se pod danym PID neskryva jiz jiny program
echo ' ! Skript jiz jednou bezi s PID '$(cat $Jmeno.pid)', pred pokracovanim je nutno ho sestrelit'
kill -9 $(cat $Jmeno.pid)
echo ' - Prave se tak stalo, muzeme pokracovat'
fi
fi

# Skript stoprocentne bezi pouze jednou, nastala vhodna chvile se podepsat
echo $$ > $Jmeno.pid














# FUNKCE
# pauza pro odhmyzovaci ucely
function pauza(){
   read -p “$*”
}

# osekani moc dlouhych pauz
function trim() {
echo '- Osekani zbytecne dlouhych mezer na konci kazde vety'
#sox said.wav $1.wav silence 0 -1 00:00:00.9 1%
sox said.wav $1 silence -l 1 0.1 1% -1 0.6 1%
# vysvetleni parametru modulu silence: -l = orezat mezery na jistou mez, 1 = oriznout pripadnou mezeru na zacatku zvukove stopy, 0.1 = minimalni delka zvuku, po niz se prestava orezavat, 1% = prah citlivost k sumu, -1 = odstranovat vsechny ostatni mezery az do konce, 0.6 = nastaveni delky ponechaneho useku ticha, 1% = prah citlivosti k sumu
}

# zpracovani hlasu 1 - nacteni
function Voice_read() {
nn=$n
echo '- Zacina synteza zvuku. Obcas to nevyjde napoprve, zkusime to nanejvys '$nn' krat.'
while [ $nn -gt 0 ]; do
echo '- Zbyva' $nn 'pokusu'
#let n=n-1
let nn=nn-1
echo '- Spusteni eposd'
eposd --voice violka
echo '- Vygenerovani wav'
cstocs utf8 il2 $1 | say-epos -w -
echo '- Pokus o syntezu ukoncen'
if [ -e said.wav ]; then
echo '- Surovy zvukovy zaznam je hotov'
nn=0;
fi
done;
}

# zpracovani hlasu 2 - zkraceni mezer a vlozeni do fronty k prehrani
function Voice_process() {
if [ -z $1 ]; then
echo '! Chybi vstupni parameter s nazvem souboru ke zpracovani, zkusime vychozi surovy zaznam.'
set 1=said.wav
fi
if [ ! -e $1 ]; then
echo '- Pokus o zpracovani '$1
trim $1
if [ -e $1 ]; then
echo '- Finalni zaznam '$1' je hotovy, nyni bude prehran'
vlc --started-from-file --playlist-enqueue "/tmp/$Jmeno/$1" & # Spust v rezimu jedine instance, pridej do playlistu a pokracuj
if [ ! -e player.pid ]; then
pid_player=$!
echo $pid_player > player.pid
echo '- Spusten prehravac s PID='$pid_player
else
pid_player=$(cat player.pid)
fi
else
chyba=$(sed 2q log)
notify-send --urgency=low --icon=$icon "Text se nepodařilo převést na hlas" "$chyba"
cp -u log ~/Plocha/Precti_to_log_$time
notify-send --urgency=low --icon=$icon "Chyby byly zaznamenány do logu" "Právě byl zálohován na plochu pod jménem 'Precti_to_log_$time'"
fi
else
echo '! Nalezen z minula zvuk jiz uspesne upraveny do finalni podoby'
if [ ! "$backup" = "1" ]; then
echo ' - prepnuto do modu zalohovani'
backup=1
#mkdir -p ~/Plocha/$Jmeno-$time/
notify-send --urgency=low --icon=$icon "Z minula zůstal zvukový záznam" "Zpracovaný záznam bude zálohován na Plochu. Zpracování může zabrat nějaký čas."
fi
fi
#pauza 'enter'
}

# zobrazeni bublinove zpravy
#function notify() {
# notify-send --urgency=$1 --icon=$icon $2 $3
#}














#HLAVNI CAST
if [ ! -e $Jmeno ]; then
echo '- Ziskani obsahu clipboardu'
xsel -o > $Jmeno # Pokud by nefungovalo, "Kocuro Pablo" by misto tohoto pouzil nasledujici radek
# xsel -o -b -t 1500  > $Jmeno
text=$(sed 2q $Jmeno) # oznameni, co se bude predcitat
notify-send --urgency=low --icon=$icon "Bude přečten text:" "$text"
else
echo '! Nalezen surovy text z minula'
text=$(sed 2q $Jmeno) # oznameni, co se bude predcitat
notify-send --urgency=low --icon=$icon "Bude obnoven text:" "$text"
fi
#pauza 'enter' AÁBCČDĎEĚÉFGHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽ

if [ ! -e $Jmeno.2 ]; then
echo '- Upravy textu pro srozumitelnejsi prednes'
# všechno malým, ať Violka nehláskuje?
# tr '[:upper:]' '[:lower:]' < $Jmeno > $Jmeno.1 # ignoruje kapitálky s diakritikou
# tr '[AÁBCČDĎEĚÉFGHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽ]' '[aábcčdďeěéfghiíjklmnňoópqrřsštťuúůvwxyýzž]' < $Jmeno > $Jmeno.1 # przní "Ě"
awk '{print tolower($0)}' < $Jmeno > $Jmeno.1
sed -e :a -e '$!N;s/\n/. /;ta' -e 'P;D' $Jmeno.1 | sed 's/"/ /g;s/(/ /g;s/)/ /g;s/atd\./ a tak dále /g;s/mj\./ mimo jiné /g;s/apod\./ a podobně /g;s/aj\./ a jiné /g' > $Jmeno.2 # Nahrazeni koncu radku teckou, nahrada nekterych obvyklych zkratek celymi frazemi, odstraneni zavorek, uvozovek...
else
echo '! Nalezen upraveny text z minula'
fi
#pauza 'enter'

if [ ! -e $Jmeno.2.aa ]; then
echo '- Rozdeleni textu na casti po '$l'B'
split --bytes=$l $Jmeno.2 $Jmeno.2.
else
echo '! Nalezen rozdeleny text z minula'
fi
#pauza 'enter'

echo ' --- Zacina smycka ---'
for f in $Jmeno.2.??; do
echo ' -- Zacatek zpracovani souboru '$f' --'
rm -rf /tmp/$Jmeno/said.wav
if [ ! -e $f.wav ]; then
Voice_read $f
fi
Voice_process $f.wav
if [ "$backup" = "1" ]; then
PlayList="$PlayList $f.wav"
fi
echo ' -- Konec zpracovani souboru '$f' --'
done
echo ' --- Konci smycka ---'
#pauza 'enter'


if [ "$backup" = "1" ]; then
echo '- Slouceni zvukovych souboru a jejich ulozeni na Plochu'
sox --combine concatenate$PlayList ~/Plocha/$Jmeno-$time.$Format
notify-send --urgency=low --icon=$icon "Záloha zvukového záznamu umístěna do:" "~/Plocha/$Jmeno-$time.$Format"
echo '- Ukonceni prehravace z minuleho behu skriptu'
echo ' - player.pid = '$pid_player
PID1=$(ps -p $pid_player) # zjisti, zda je zjistene PID aktivni
echo ' - PID1 = '$PID1
PID2=$(echo $PID1 | gawk '{print $8}') # zjisti nazev programu s danym PID
echo ' - PID2 = '$PID2
if [ "$PID2" == "vlc" ]; then # porovnanim overi, zda se pod danym PID neskryva jiz jiny program
kill $pid_player
echo ' - Prehravac ukoncen'
else
echo ' - Prehravac nenalezen'
fi
#pauza 'enter'
#echo '- Prehrani zalohovaneho souboru.'
#vlc ~/Plocha/$Jmeno-$time.$Format & disown
else
echo '- Ceka se na ukonceni prehravace s PID = '$pid_player
wait $pid_player
echo '- Prehravac ukoncen'
fi
echo '- Zacinaji uklidove prace'
echo '- Ukonceni zbylych procesu'
killall say-epos
#killall eposd
echo '- Odstraneni nepotrebnych souboru'
rm -rf /tmp/$Jmeno/
echo '- Tak zase nekdy...'

exit
Název: Re:Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: augustin 04 Ledna 2012, 20:22:28
Poradil by mi někdo, jak napsat skript, který by přes epos jednoduše konvertoval obsah souboru do mp3?
studoval sem ten skript výše, ty funkce trim(), Voice_read() a Voice_process() by asi šly použít, ale nějak jsem se v tom stejně ztratil :/
Název: Re:Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: Filip Dominec 04 Ledna 2012, 21:49:40
Poradil by mi někdo, jak napsat skript, který by přes epos jednoduše konvertoval obsah souboru do mp3?
studoval sem ten skript výše, ty funkce trim(), Voice_read() a Voice_process() by asi šly použít, ale nějak jsem se v tom stejně ztratil :/

Měl by ti vzniknout soubor /tmp/(jméno)/said.wav, tak jen ze skriptu nahraď řádek na jeho smazání řádkem na jeho konverzi do mp3:

Kód: [Vybrat]
lame -V3 input.wav output.mp3
Název: Re:Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: augustin 04 Ledna 2012, 22:18:30
už sem na to přišel sám, postup je:

Kód: [Vybrat]
cat souborkprecteni | iconv --from-code UTF-8 --to-code ISO-8859-2 | say-epos -w - && sox said.wav said2.wav silence -l 1 0.1 1% -1 0.6 1% && lame said2.wav said.mp3 && rm -rf said.wav said2.wav
(možná by to šlo ještě zjednodušit, ale takhle to taky funguje)
Název: Re:Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: pim 05 Ledna 2012, 18:50:03
Kdyz uz jsi na to prisel sam, tak prima, ale pokud bys chtel pouzit skript PrectiTo, tak v nem je primo na 21. radku:
Kód: [Vybrat]
Format=flac # pripadna zaloha vygenerovaneho zvuku bude ve zvolenem formatu. Pro seznam podporovanych zadat v terminalu $manTakze nejrychlejsi reseni by bylo prepsat string Format=flac na Format=mp3
Název: Re:Festival/Epos čtoucí pohotově hezky česky
Přispěvatel: Ludek 13 Února 2014, 15:36:59
Zdravím, tak jsem postupně vyzkoušel všechny skripty a mé nadšení rostlo. Předně moc děkuji pim za všechnu práci. Sice existuje Gespeaker
http://www.muflone.com/gespeaker/english/index.html
ale tento skript je ve všech směrech mnohem použitelnější.
Jen poslední verze mi přestala fungovat... violka čte stále dokola "zrvácené lomítko, zvrácené lomítko".
Předchozí skript funguje skvěle. Škoda jen, že se mi do něj nevejde celá kniha :-)
Ještě jednou díky! :-)