Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Multimédia => Téma založeno: Freglin 07 Května 2009, 12:10:44
-
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
-
jen si zatím značím odkaz, něco mám v záložkách, ale neslibuji že to je ono.
-
Skúšal si festival (http://www.cstr.ed.ac.uk/projects/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.
-
V záložkách jsem nic nenašel, holt jsem musel použít google a znásilnit hada.
Tady je výsledek:
#!/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
chmod a+x ttspidgin.py
eposd --voice violka
./ttspidgin.py &a už jen počkat až někdo pošle zprávu.
-
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
cmd = ['/usr/bin/say-epos', IM]za
cmd = ['./prehrajwav.sh', IM]
vytvořit soubor prehrajwav.sh (a zase jej udělat spustitelným)
s obsahem
#!/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 eposd -H, dá se nastavit spousta věcí, charset, a snad i délka mezery po tečce, nečtení uvozovek.
-
Pěkný skript, děkuju - jen bych se chtěl zeptat na hodnotu @ v :
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 ...
-
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.
-
nepouzivam icq, nicmene nekdo to uz resil:
http://ubuntu-linux.sefikuv.net/jak-si-nechat-precist-nejen-icq-zpravy-pidgin-festival-ubuntu
-
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 :
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 ...
-
V kodu chybu nevidim.
Jaky pouzivate editor? Myslim ze tohle nastava pokud jsou ve zdrojaku pouzity pro odsazeni jak tabulatory tak mezery.
-
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 :
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 ...
-
odsaďte to, podívejte se jak je to v odkazovaném skriptu ze kterého tyto úpravy vychází...