Linuxová kouzla II: využití hlasové syntézy k oznamování událostí

- Kategorie:

Další z kouzel vytažených Jirkou Bencem a Milanem Vančurou z magického kufříku byla mluvící pošta. V KDE je možnost různých druhů notifikací včetně hlasových oznámení. A to nejen předem připravených statických hlášení, ale systém může např. přečíst předmět nově příchozího e-mailu. Ukážeme si tedy, jak pomocí hlasové syntézy přimět počítač k tomu, aby nám předčítal nadpisy došlé pošty lidským hlasem. Po předchozím díle plném náročných konfigurací si tentokrát trochu odpočineme. Samotná instalace hlasové syntézy není v openSuSE složitá:

Nainstalování systému EPOS

  1. Nainstalujeme balíček epos (v distribuci openSUSE).
  2. Přidáme si nové hlasy, např. tento: http://switch.dl.sourceforge.net/sourceforge/epos/epos-tdp.tgz
  3. Hlasy je třeba rozbalit do adresáře /usr/share/epos/inv/

Zprovoznění v KDE

  1. Nejpohodlnější je použít KTTSD (KDE speech system) v balíčku kdeaccessibility3.
  2. Je vhodné v KDE povolit aRts, zejména pokud karta nemá HW mixer.
  3. Konfigurace: Ovládací centrum -> Místní zvyklosti a zpřístupnění -> Hlasová syntéza:
    • Obecné: Povolit
    • Přidat hlasy: epos, čeština, klient --voice machac nebo --voice violka
    • Zvuk: přes aRts (pokud jsme je předtím zapnuli)

Přímo v nastavení lze nastavit hlášení z různých programů, např. Kopete, Kmail a podobně. Nejsme ale omezeni jen předvolenými variantami. Pomocí hlasové syntézy si můžeme nechat přečíst libovolný text, např. voláním ze skriptu pomocí dcop klienta:

dcop kttsd KSpeech sayText "můj text" 0

Je dobré vědět, že kódování textu se kttsd snaží uhodnout z nastavení locales (tj. např. proměnná prostředí LC_CTYPE). Protože není žádný způsob, jak kttsd říci, že chceme jiné kódování, je pravděpodobně nejlepší nastavit locale s kódováním UTF-8 (například "cs_CZ.UTF-8", což je v mnoha počeštěných distribucích defaultní nastavení) a případně převést text z jiného kódování do UTF-8 vhodným programem (jak na to, uvidíme níže).

Implementace efektu z přednášky

Rozhraní dcop využijeme k efektu ukazovaném na přednášce: systém nás upozorní na příchozí poštu a přečte nám předmět došlého dopisu.

Záhy zjistíme, že pro tyto účely nelze použít přednastavené notifikace v Kmailu. Naopak, jeho (hlasové) notifikace potřebujeme zcela vypnout. Důvod je prostý: notifikace z Kmailu se váží k události "Přijmout/poslat poštu", což je dávková úloha obsahující pouze údaj, kolik mailů v této právě stažené skupině bylo. Nemá konkrétní data každého z nich - např. předmět. Proto na to půjdeme jinak.

Tradičním programem spouštějícím se při příchodu mailu, je na UNIXových serverech program procmail. Někteří administrátoři na dnešních Linuxových serverů se procmailu, resp. syntaxe jeho konfiguračního souboru, obávají. My si ukážeme, jak je to snadné.

Standardně nainstalovaným poštovním serverem v SuSE linuxu je postfix a pomocí YaSTu si zvolíme i použití procmailu. Pokud nám náš poskytovatel Internetu nedává jinou možnost stahování pošty než dávkově, budeme muset zapnout spouštění procmailu v našem programu na stahování pošty (např. fetchmail). Samozřejmě pak dojde ke kumulaci hlášek o došlých mailech v příslušných intervalech.

Konfigurace ~/.procmailrc bude ale v obou případech stejná (a snadná):

:
0c
| ~/checkmail.sh

Jednotlivé "recepty" začínají v .procmailrc řetězcem ":0" a my chceme pracovat s kopií mailu, proto přidáme příznak "c". Originál příchozí zprávy je zpracován dalšími pravidly (pokud jsou) a následně uložen do příslušného adresáře. Kopie je, jak vidíme, poslána na standardní vstup skriptu ~/checkmail.sh. Příklad jednoduchého takového skriptu (bez jakéhokoliv zabezpečení) je zde:

#!/bin/bash

exec 2>~/checkmail.log

SUBJ=$(/usr/local/bin/2UTF | grep -m 1 ^Subject: | sed 's/^Subject: //')

if [ -z "$SUBJ" ] ; then
MESSAGE="s prázdným předmětem"
else
MESSAGE="s předmětem $SUBJ"
fi

MESSAGE="Přišel mail $MESSAGE"
#echo "mail: $MESSAGE" >&2

DISPLAY=:0.0 LC_ALL=cs_CZ.UTF-8 /opt/kde3/bin/dcop kttsd KSpeech sayText "$MESSAGE" 0

Vidíme, že skript převede zprávu do UTF-8 pomoci programu 2UTF (ten umí právě i kódování používaná poštovními klienty jako uvádění znakové sady předmětu mezi znaky "=" apod.). Následně skript najde první řádku začínající řetězcem "Subject: " a její obsah připraví pro výstup na hlasovou syntézu. Ve vlastním volání kttsd pomocí dcop vidíme, že nastavujeme dvě proměnné prostředí: DISPLAY a LC_ALL. Tím zajistíme výběr dcop serveru a údaj o kódování předávaného řetězce.

Program 2UTF v distribuci openSUSE není, je potřeba ho stáhnout z domovské
stránky projektu
.

Nyní je vše hotovo a nezbývá než si zkusit poslat mail. A samozřejmě vylepšit svá antispamová pravidla...

Linuxoví kouzelníci hledají asistenty pro realizaci těchto a jiných kouzel. Pokud máte zájem zašlete životopis v angličtině na jobs@suse.cz.

Volby prohlížení komentářů

Vyberte si, jak chcete zobrazovat komentáře a klikněte na „Uložit změny“.

Cteni predmetu mailu v Evolution pres Festival

Nevite zda lze nastavit cteni predmetu mailu v Evolution pres Festival (pokud je to samozrejme u Evolution mozne)? Festival mam doma na svem Suse 10.2. rozchozeny a funguje vyborne, ale jak zajistit, aby napr. pri prichodu mailu v Evolution mi prerikal npr. od koho mail prisel a text predmetu nevim :-(. Neporadil by mi nejaky zkuseny Linuxak?
Diky moc za kazdou radu.
Petr

a je to tu zase, kdo hledá

a je to tu zase, kdo hledá najde: využití hlasové syntézy k oznamování událostí
nebo to nefunguje?

KDE

Nějak mi nefunguje hlášení o spuštění a ukončení KDE. Nevíte někdo kde se má ještě cosi nastavit.

EPOS

Ahoj, ja nemohu najit balicek EPOS, poradte prosim kde jej muzu stahnout. dekuji

Pokud pouzivas openSuse 10.2

Pokud pouzivas openSuse 10.2 32bit verzi, tak balicek je zde:
http://download.opensuse.org/distribution/10.2/repo/oss/suse/i586/epos-2.5.37-14.i586.rpm
Jinak je normalne dostupny v repozitarich oss openSuse.

...do you want to make your dreams come true? Wake up!

EPOS

DEkuji

hlasy

Funguje to pekne, jen ty hlasy jsou jak ze starych scifi filmu;)

Já bych se chtěl zeptat

Já bych se chtěl zeptat kde v nastavení je čtení z Kopete ???(Přímo v nastavení lze nastavit hlášení z různých programů, např. Kopete,...) Nenasel jsem to.Diky

...do you want to make your dreams come true? Wake up!

KOPETE

Ahoj
1. spravce hlasove syntezy KDE - kttsmgr
2. ousko Oznameni
3. tlacitko Pridat
4. stiskni Zdroj udalosti
a vyber si co chces

Robert

Diky :) ...do you want to

Diky :)

...do you want to make your dreams come true? Wake up!

Funguje to hezky až na

Funguje to hezky až na jednu drobnost. Při čtení textu je velmi dlouhá odmlka mezi jednotlivými větami. Pokud je v textu tečka na konci věty, hlas se odmlčí na několik sekund. Dá se někde nastavit zkrácení čekací doby mezi větami?

Odmlky po tečce

Dobrý den. Nevíte, prosím, kde se to dá "upravit"? Funguje to pěkně, ale pokud si necháte přečíst pasáž s krátkými větami, např:

Viděli jste cestou ty hory? A ty lesy? Třeba jsou tam orli. A jeleni. A určitě jestřábi.
Jezevci! přidala se Lucinka.
Lišky! řekl Edmund.
Králíci! dodala Zuzana.

Tak ty mezery docela vadí.. :-/
Díky za nápad.

Aktivní uživatelé

UživatelBody
Aidamos2299
VojTEKK2268
Ilfirin1343
jiri.vetvicka1127
ra100620
diamonds-notebook366
djs_core288
xhc267
JirkaZ266
fipa211

Hackweek živě

Hackweek

Anketa

Jak jste spokojeni s nejnovější verzí openSUSE 12.1: