Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]  (Přečteno 5201 krát)

Freglin

  • Návštěvník
  • Příspěvků: 70
Zdravím vespolek,

už delší dobu se potýkám s následujícím "problémem". Po sáhodlohých útrapách sem rozběhal hlasovou syntézu pomocí Eposu (violka) a nyní řeším pár záležitostí o kterých sem si původně myslel, že už budou hračka.

1. Jak pomocí Eposu předčítat příchozí zprávy z Pidginu, nebo Kopete?
Dopracoval sem se zjištění, že by měli jít podobné informace odchytávat programem DCOP, ale už sem nebyl schopen to aplikovat v praxi.

Lze odchytit příchozí zprávy pomocí DCOPu, popřípadě jak bych to měl v krocích uskutečnit?

2. Jde u předčítacího programu Orca nějak nastavit hlas a syntézu Eposem?
V graf. nastavení prog. Orca nemám možnost výběru Eposu, je to možné nějak vnutit, nebo nastavit jinde?

Prolezl sem tuny fór a návodů, ale - bohužel. Tak jestli budete někdo schopni poradit, budu moc rád.

Díky

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #1 kdy: 22 Května 2009, 20:18:33 »
jen si zatím značím odkaz, něco mám v záložkách, ale neslibuji že to je ono.
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

menganito

  • Závislák
  • ***
  • Příspěvků: 1728
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #2 kdy: 23 Května 2009, 11:29:22 »
Skúšal si festival? Je to oiež hlasový sytetizátor (alebo ako sa to volá), možno bude viac user-friendly ako Epos.
Sú k nemu aj české hlasy, nainštalovateľné cez Synaptic, pidgin má naň špeciálny plugin, ten je tiež v repozitároch. Kedysi som to skúšal spojazdniť ale po pár neúspechoch som to vzdal.

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #3 kdy: 25 Května 2009, 18:28:36 »
V záložkách jsem nic nenašel, holt jsem musel použít google a znásilnit hada.
Tady je výsledek:
Kód: [Vybrat]
#!/usr/bin/python

# ttspidgin.py
# Pidgin Messages TTS Reader.
# inpirace cerpana zde:
# ----- GETIM.PY // LISTEN FOR AN RECEIVED MESSAGE ------------#
################################################################
# MOST OF THIS SCRIPT  WAS TAKEN FROM THE PIDGIN DEVELOPER WIKI#
# PLEASE VISIT http://developer.pidgin.im/ FOR MORE INFORMATION#
################################################################
# A dalsi inspiraci jsem cerpal zde:
# http://forum.ubuntu.cz/index.php/topic,29092.0.html
###############################################################
# Prereq: Epos
# Usage:
# eposd --voice violka
# ttspidgin.py &
###############################################################   


def predcitej_im(account, sender, message, conversation, flags):
        reg = '<(.|\n)+?>'                  # REGEX FOR HTML TAGS
        message = re.sub(reg,'',message)    # REMOVE HTML TAGS
        sender = sender.split("@")[0]       # GET GCHAT NAME
        IM = "Nova zprava od " + sender + " " + message                                                     
        import codecs                   
        IM = unicode.encode(IM,"iso-8859-2","ignore") #musim upravit CP jinak cte nesmysly a ne cestinu
        cmd = ['/usr/bin/say-epos', IM]
        import subprocess
        proc = subprocess.Popen(cmd)

import dbus, gobject, re, os
from dbus.mainloop.glib import DBusGMainLoop
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()

bus.add_signal_receiver(predcitej_im,
                dbus_interface="im.pidgin.purple.PurpleInterface",
                signal_name="ReceivedImMsg")

loop = gobject.MainLoop()
loop.run()
předpokládám nainstalovaný pidgin,
epos a hlasy - viz http://forum.ubuntu.cz/index.php/topic,29092.0.html

Co s tím:
uložit do souboru ttspidgin.py
Kód: [Vybrat]
chmod a+x ttspidgin.py
eposd --voice violka
./ttspidgin.py &
a už jen počkat až někdo pošle zprávu.
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #4 kdy: 25 Května 2009, 19:18:35 »
případně ještě malé vylepšení, mnohem kvalitnější hlas:

Nemít spuštěný eposd,
v ttspidgin.py změnit
spouštěný příkaz

nahradit
Kód: [Vybrat]
       cmd = ['/usr/bin/say-epos', IM]za
Kód: [Vybrat]
        cmd = ['./prehrajwav.sh', IM]

vytvořit soubor prehrajwav.sh (a zase jej udělat spustitelným)
s obsahem
Kód: [Vybrat]
#!/bin/bash
eposd --voice violka
sleep 1
say-epos -w $1
killall eposd
aplay said.wav
rm said.wav

//edit: a kdo chcete tak si projděte parametry
Kód: [Vybrat]
eposd -H, dá se nastavit spousta věcí, charset, a snad i délka mezery po tečce, nečtení uvozovek.
« Poslední změna: 25 Května 2009, 19:37:43 od kiklhorn »
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

boonn

  • Aktivní člen
  • *
  • Příspěvků: 296
  • Urgulak the Great
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #5 kdy: 07 Září 2010, 23:11:18 »
Pěkný skript, děkuju - jen bych se chtěl zeptat na hodnotu @ v :

Kód: [Vybrat]
sender.split("@")
Jestli by se nenechala nějak změnit, zkoušel jsem hledat, ale nic nenašel, resp. nic funkčního; Jde mi o toto:

Místo přezdívky, např. Franta, mi u icq kontaktů vrací číslo účtu, např 123456789, tzn. že když mi franta pošle zprávu, ohlašuje : "nová zpráva od stodvacetřimiliony...."

Z toho co jsem vygooglil jsem ale pochopil, že by to mělo vracet "nickname" ne číslo, takže předpokládám, že chyba bude možná v mém nastavení pidginu - ale radši se ptám: jakou hodnotu to má vracet - přezdívku, nebo číslo účtu?

Díky za odpověď

ps: jabber kontakty jsem zatím nezkoušel ...
« Poslední změna: 07 Září 2010, 23:15:36 od urgulak »
The only good is knowledge and the only evil is ignorance.
   ~ Socrates
 Use linux flarerpg.org - great open source game

Marek_

  • Aktivní člen
  • *
  • Příspěvků: 342
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #6 kdy: 07 Září 2010, 23:26:26 »
Vypadá to, že v 'sender' je uložený delší řetězec parametrů, které jsou odděleny '@'
sender = sender.split("@")[0]
udělá, že se z toho dlouhého řetězce použije jen první část před zavináčem.
(rozseká se to na jedlotlivá 'slova' a použije se to první)
V tvém případě (asi to taky závisí na protokolu, který chceš použít) bude jako první slovo číslo účtu.
Zkus tedy použít místo nuly jedničku, aby se do sender vložil druhý parametr v řadě, což už může být to správné jméno atd.
openSUSE 13.1
Opera 12 - ano, stale

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

boonn

  • Aktivní člen
  • *
  • Příspěvků: 296
  • Urgulak the Great
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #8 kdy: 09 Září 2010, 00:36:54 »
Díky moc za odpovědi - no, osobně bych icq taky radši nepoužíval, ale většina mých kontaktů ho používá ...

Marek: Díky, pochopil jsem a zkoušel - vycházel jsem z toho co jsi psal, že je uložený delší řetězec parametrů - takže jsem zkoušel -1, 1 a 2, výsledek byl, že -1 čte to samé jako u 0, u 1 a 2 nečte vůbec nic - ani jméno, ani zprávu.

Kiklhorn: díky za odkaz - zkusil jsem si s tím pohrát např. :

---

def predcitej_im(account, sender, message, conversation, flags):
        reg = '<(.|\n)+?>'                  # REGEX FOR HTML TAGS
        message = re.sub(reg,'',message)    # REMOVE HTML TAGS
        buddy = purple.PurpleFindBuddy(account, sender)
    if buddy != 0:
        alias = purple.PurpleBuddyGetAlias(buddy)
    else:
        alias = name

        IM = "Nova zprava od " + alias + " " + message                                                      
        import codecs                    
        IM = unicode.encode(IM,"iso-8859-2","ignore") #musim upravit CP jinak cte nesmysly a ne cestinu
        cmd = ['./prehrajwav.sh', IM]
        import subprocess
        proc = subprocess.Popen(cmd)

---

Ale skript se mi pak vůbec nespustil, protože :

Kód: [Vybrat]
File "./ttspidgin.py", line 25
    if buddy != 0:
                 ^
IndentationError: unindent does not match any outer indentation level

nevím jak tu podmínku přepsat správně, napadlo mi že bych ji (podmínku na zjištění nicku) uložil jako samostatný skript "něco.sh", který by se pak volal. Ale nebylo by to tak elegantní a nevím, jestli by to fungovalo ...
« Poslední změna: 09 Září 2010, 00:38:49 od urgulak »
The only good is knowledge and the only evil is ignorance.
   ~ Socrates
 Use linux flarerpg.org - great open source game

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #9 kdy: 09 Září 2010, 09:28:45 »
V kodu chybu nevidim.
Jaky pouzivate editor? Myslim ze tohle nastava pokud jsou ve zdrojaku pouzity pro odsazeni jak tabulatory tak mezery.
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

boonn

  • Aktivní člen
  • *
  • Příspěvků: 296
  • Urgulak the Great
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #10 kdy: 09 Září 2010, 21:52:50 »
Díky - používal jsem gedit, a zkusil SPE a zjistil, že chyba, kterou mi hlásil terminál byla "IndendationError: expected an intended block", což jsem opravil lepším zarovnáním :

Kód: [Vybrat]
def predcitej_im(account, sender, message, conversation, flags):
        reg = '<(.|\n)+?>'                  # REGEX FOR HTML TAGS
        message = re.sub(reg,'',message)    # REMOVE HTML TAGS
        buddy = purple.PurpleFindBuddy(account, sender)
if buddy != 0:
        alias = purple.PurpleBuddyGetAlias(buddy)
else:
        alias = name
        IM = "Nova zprava od " + alias + " " + message
        import codecs                   
        IM = unicode.encode(IM,"iso-8859-2","ignore") #musim upravit CP jinak cte nesmysly a ne cestinu
        cmd = ['./prehrajwav.sh', IM]
        import subprocess
        proc = subprocess.Popen(cmd)

import dbus, gobject, re, os
from dbus.mainloop.glib import DBusGMainLoop
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()

bus.add_signal_receiver(predcitej_im,
                dbus_interface="im.pidgin.purple.PurpleInterface",
                signal_name="ReceivedImMsg")

loop = gobject.MainLoop()
loop.run()

Bohužel mi teď SPE hlásí jinou chybu, a sice :

File "/home/urgulak/ttspidgin.py", line 26, in <module>
if buddy != 0:
NameError: name 'buddy' is not defined

přitom ale přímo na tou podmínkou "buddy" definuju : buddy = purple.PurpleFindBuddy(account, sender)

takže netuším ...
The only good is knowledge and the only evil is ignorance.
   ~ Socrates
 Use linux flarerpg.org - great open source game

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Hlasová syntéza příchozích zpráv [EPOS, Pidgin (Kopete), Dcop]
« Odpověď #11 kdy: 09 Září 2010, 23:08:29 »
odsaďte to, podívejte se jak je to v odkazovaném skriptu ze kterého tyto úpravy vychází...
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

 

Provoz zaštiťuje spolek OpenAlt.