telefonujeme.cz - Obsah fóra telefonujeme.cz
telefonování přes internet s VoIP
 
 FAQFAQ   HledatHledat   RegistraceRegistrace   RSSRSS  WikiWiki   PřihlášeníPřihlášení 
 


Automatické přečtení textu

 
odeslat nové téma   Odpovědět na téma       telefonujeme.cz - Obsah fóra -> VoIP Asterisk
Autor Zpráva
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: pá leden 08, 2010 7:19 pm    Předmět: Automatické přečtení textu Odpovědět s citátem

Zdravím,
řeším nyní problém a to ten, že potrebuji, aby asterisk, precetl zakaznikovi nejaky text a bohuzel nevim jak na to. muzete me nekdo nakopnout jakou fci mam hledat?

Dekuji
Návrat nahoru
Daniel




Založen: 12. 11. 2006
Příspěvky: 2404

PříspěvekZaslal: so leden 09, 2010 2:06 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Tech TTS (TextToSpeech) systemu je celkem dost, neco je zdarma, neco je za penize, lisi se to kvalitou, atd. atd. jak to tak v zivote byva ...

---------------
kód:
; samozrejme, ze hlaseni o aktualnim casu lze udelat i bez TTS
; toto je jen letma ukazka vyuziti Epos TTS
exten => 505,1,NoOp
exten => 505,n,Answer
exten => 505,n,Set(TEXT_TO_SAY="Aktuální čas je ${STRFTIME(,,%k hodin %M minut %S sekund)}. Děkujeme vám za zavolání.")
exten => 505,n,Set(TMP_SAY_FILE=/var/spool/asterisk/tmp/say_${MD5(${RAND()})})
exten => 505,n,System(/usr/bin/say-epos --voice violka-lpp --out_sampling_rate 8000 --init_t 120 --init_i 140 --ulaw --wave_header off -o ${TEXT_TO_SAY} > ${TMP_SAY_FILE}.ulaw)
exten => 505,n,Playback(${TMP_SAY_FILE})
exten => 505,n,Hangup
exten => h,1,NoOp
exten => h,n,GotoIf($[ "${TMP_SAY_FILE}" = "" ]?continue)
exten => h,n,System(rm ${TMP_SAY_FILE}.ulaw)
exten => h,n(continue),Hangup
Návrat nahoru
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: so leden 09, 2010 2:53 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Daniel napsal:
Tech TTS (TextToSpeech) systemu je celkem dost, neco je zdarma, neco je za penize, lisi se to kvalitou, atd. atd. jak to tak v zivote byva ...

---------------
kód:
; samozrejme, ze hlaseni o aktualnim casu lze udelat i bez TTS
; toto je jen letma ukazka vyuziti Epos TTS
exten => 505,1,NoOp
exten => 505,n,Answer
exten => 505,n,Set(TEXT_TO_SAY="Aktuální čas je ${STRFTIME(,,%k hodin %M minut %S sekund)}. Děkujeme vám za zavolání.")
exten => 505,n,Set(TMP_SAY_FILE=/var/spool/asterisk/tmp/say_${MD5(${RAND()})})
exten => 505,n,System(/usr/bin/say-epos --voice violka-lpp --out_sampling_rate 8000 --init_t 120 --init_i 140 --ulaw --wave_header off -o ${TEXT_TO_SAY} > ${TMP_SAY_FILE}.ulaw)
exten => 505,n,Playback(${TMP_SAY_FILE})
exten => 505,n,Hangup
exten => h,1,NoOp
exten => h,n,GotoIf($[ "${TMP_SAY_FILE}" = "" ]?continue)
exten => h,n,System(rm ${TMP_SAY_FILE}.ulaw)
exten => h,n(continue),Hangup



diky ten EPOS je OK... je to sice roboticke to je jasne, ale na servisni linku top staci (nechce se me platit mluvciho aby to namluvil) nohate staci toto. je to linka jen pro zamestnance
Návrat nahoru
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: so leden 09, 2010 7:33 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

jeste dotaz. zkusil jsme to jak jste me poslal ale kdyz tam je "vase cislo 774123456" tj. chci aby to precetlo cislo volaneho tak to rekne "vase cislo 774 milionu....." da se to nekde nasatvit aby to cetlo jako cisla a ne jako celek?
Návrat nahoru
Daniel




Založen: 12. 11. 2006
Příspěvky: 2404

PříspěvekZaslal: so leden 09, 2010 8:05 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Laupe napsal:
jeste dotaz. zkusil jsme to jak jste me poslal ale kdyz tam je "vase cislo 774123456" tj. chci aby to precetlo cislo volaneho tak to rekne "vase cislo 774 milionu....." da se to nekde nasatvit aby to cetlo jako cisla a ne jako celek?

Urcite jo, ale nejjednodussi je si cislo nejak rozsplitovat (vnutit tam mezeru), napr. po trojicich:
Set(TEXT_TO_SAY=${CISLO:0:3} ${CISLO:3:3} ${CISLO:6:3})
Ci treba po jednicich if ${LEN(CISLO)} != 9 ...

------------
BTW: existuji i SayDigits, SayNumber, SayPhonetic, SayAlpha, SayUnixTime
http://www.voip-info.org/wiki/view/Asterisk+cmd+SayDigits
TTS nasazovat tam, kde je to jasne fixni, je celkem mrhani CPU. Nasazoval bych to tam kde je nejaky ReadFile ci cteni textu z nejake DTB tj. je to nedeterministicke. Take bych to urcite vysperkoval nejakou kesi zalozenou na napr. MD5 z TEXT_TO_SAY, aby se opakovane hlasky znova a znova tupe netvorily ...
Návrat nahoru
AdSense
Reklama






Zaslal: Reklama    Předmět: Reklamy Google

Návrat nahoru
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: so leden 09, 2010 10:14 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Daniel napsal:
Laupe napsal:
jeste dotaz. zkusil jsme to jak jste me poslal ale kdyz tam je "vase cislo 774123456" tj. chci aby to precetlo cislo volaneho tak to rekne "vase cislo 774 milionu....." da se to nekde nasatvit aby to cetlo jako cisla a ne jako celek?

Urcite jo, ale nejjednodussi je si cislo nejak rozsplitovat (vnutit tam mezeru), napr. po trojicich:
Set(TEXT_TO_SAY=${CISLO:0:3} ${CISLO:3:3} ${CISLO:6:3})
Ci treba po jednicich if ${LEN(CISLO)} != 9 ...

------------
BTW: existuji i SayDigits, SayNumber, SayPhonetic, SayAlpha, SayUnixTime
http://www.voip-info.org/wiki/view/Asterisk+cmd+SayDigits
TTS nasazovat tam, kde je to jasne fixni, je celkem mrhani CPU. Nasazoval bych to tam kde je nejaky ReadFile ci cteni textu z nejake DTB tj. je to nedeterministicke. Take bych to urcite vysperkoval nejakou kesi zalozene na napr. MD5 nad TEXT_TO_SAY, aby se opakovane hlasky znova a znova tupe netvorily ...



kdyz sem to udelal po c 774 123 456 tak to cetlo stejne milionyu apod.. stacilo to udelat 774, 123, 456 kde to hlesne hlasem apod.

kazdopadne

SayDigits = znam, pouzivam ciste na cisla /neumi to slova/
SayNumber = to same
SayPhonetic = to same ale na pismena jednotliva
SayAlpha = to same znam ale zase na specialni znaky
SayUnixTime = sikovne,. dekuji za upozorneni

kazdopadne to TTS je nasazene kde to neni fixni. pokazde zavola nekdo jiny a ma jine cislo apod. kazdopadne tam samozrejme sem udelalal cash na zaklade md5 a textu. kde napriklad kdyz zavola nekdo denne 3x ulozi se to. je jasne, ze generovani TTS zabira CPU a trva to. takze tam je kes.


dekuji za rady
Návrat nahoru
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: ne leden 10, 2010 2:30 am    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

mam takovy mensi problem s generovanim a prehravanim toho souboru. mam nasledujici script

v PHP:
kód:
#!/usr/bin/php -q
<?php

$text = $argv[1];
$dir = "/var/spool/asterisk/tts_cache/";
$md5_text = md5($text);
$ext = ".ulaw";
$say_file = $dir.$md5_text.$ext;
$cmd = "/usr/bin/say-epos --voice violka-lpp --out_sampling_rate 8000 --init_t 120 --init_i 140 --ulaw --wave_header off -o \"$text\" > ".$say_file;

if(file_exists($say_file)){
  echo "SET VARIABLE SAY_FILE ".$say_file."\n";
}else{
  exec($cmd);
  echo "SET VARIABLE SAY_FILE \"".$say_file."\"\n";
}
?>


v perlu:
kód:
#!/usr/bin/perl


my $text = $ARGV[0];
my $dir = "/var/spool/asterisk/tts_cache/";
use Digest::MD5 qw(md5_hex);
my $md5_text = md5_hex($text);
my $ext = ".ulaw";
my $say_file = $dir.$md5_text.$ext;
my $cmd = "/usr/bin/say-epos --voice violka-lpp --out_sampling_rate 8000 --init_t 120 --init_i 140 --ulaw --wave_header off -o \"$text\" > ".$say_file;

if (-e "$say_file") {
    print "SET VARIABLE SAY_FILE \"".$say_file."\"\n";
}else{
    system($cmd);
    print "SET VARIABLE SAY_FILE \"".$say_file."\"\n";
}
print $cmd;


a kdyz se to vygeneruje je vse OK. jakmile to dam prehrat tak to hlasi v debug nasledujici:
kód:
    -- Executing [ko@hernihosting-servisni-ivr:8] Playback("SIP/202-000000b6", "/var/spool/asterisk/tts_cache/say_test.ulaw") in new stack
[Jan 10 02:14:29] WARNING[11761]: file.c:650 ast_openstream_full: File /var/spool/asterisk/tts_cache/say_test.ulaw does not exist in any format
[Jan 10 02:14:29] WARNING[11761]: file.c:953 ast_streamfile: Unable to open /var/spool/asterisk/tts_cache/say_test.ulaw (format 0x8 (alaw)): No such file or directory
[Jan 10 02:14:29] WARNING[11761]: app_playback.c:448 playback_exec: ast_streamfile failed on SIP/202-000000b6 for /var/spool/asterisk/tts_cache/say_test.ulaw


v extensions mam toto?:

kód:
exten => ko,n,AGI(tts.php,${TEXT_TO_SAY})
exten => ko,n,Playback(${SAY_FILE})


nevíte kde muze byt problem?
Návrat nahoru
Daniel




Založen: 12. 11. 2006
Příspěvky: 2404

PříspěvekZaslal: ne leden 10, 2010 8:43 am    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

V ${SAY_FILE} musi byt plna cesta a bez pripony, coz asi neni pravda, ze ?
Dejte si tam pred playback, NoOp(${SAY_FILE}) a razem uvidite. Proste Playback to tak chce. Tu dlouhou MD5ku by tam take melo byt videt.

http://www.voip-info.org/wiki/index.php?page=Asterisk+cmd+Playback

Ten skript bych stejne maliko upravil, muze jich probihat soucasne vice a pak by nekomu mohl vratit odkaz na soubor, ktery vlastne jeste cely neexistuje. Obejiti je jednoduche, Eposem vytvorite soubor md5(mt_rand()).part (muze trvat i nekolik sekund) a nasledne date rename/mv na .ulaw, testuje se samozrejme existence .ulaw . Je to celkem jednoducha uprava a bude to mnohem bezpecnejsi.

-----------
BTW: Jestli se nepletu tak tecky lze uspesne pouzivat jako casovace/vynucovace pauz mezi useky (mezery slucuje v jednu). Tj. ahoj .. ahoj ..... ahoj ......... ahoj ................. ahoj Ale uz jsem si s tim dost dlouho nehral, takze si to kdyztak musite overit sam.

Pro promazani kese (napr. vyhazet ty, ktere nebyly pouzity dele nez mesic) muzete pouzit nejaky batch pousteny cronem zalozeny na ala: find /var/spool/asterisk/tts_cache/*.ulaw -atime +30 -type f -exec rm {} \;
Návrat nahoru
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: ne leden 10, 2010 2:57 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Daniel napsal:
V ${SAY_FILE} musi byt plna cesta a bez pripony, coz asi neni pravda, ze ?
Dejte si tam pred playback, NoOp(${SAY_FILE}) a razem uvidite. Proste Playback to tak chce. Tu dlouhou MD5ku by tam take melo byt videt.

http://www.voip-info.org/wiki/index.php?page=Asterisk+cmd+Playback

Ten skript bych stejne maliko upravil, muze jich probihat soucasne vice a pak by nekomu mohl vratit odkaz na soubor, ktery vlastne jeste cely neexistuje. Obejiti je jednoduche, Eposem vytvorite soubor md5(mt_rand()).part (muze trvat i nekolik sekund) a nasledne date rename/mv na .ulaw, testuje se samozrejme existence .ulaw . Je to celkem jednoducha uprava a bude to mnohem bezpecnejsi.

-----------
BTW: Jestli se nepletu tak tecky lze uspesne pouzivat jako casovace/vynucovace pauz mezi useky (mezery slucuje v jednu). Tj. ahoj .. ahoj ..... ahoj ......... ahoj ................. ahoj Ale uz jsem si s tim dost dlouho nehral, takze si to kdyztak musite overit sam.

Pro promazani kese (napr. vyhazet ty, ktere nebyly pouzity dele nez mesic) muzete pouzit nejaky batch pousteny cronem zalozeny na ala: find /var/spool/asterisk/tts_cache/*.ulaw -atime +30 -type f -exec rm {} \;


opet dekuji za radu, bylo to tim, ze ja to tam cpal vcetne pripony.

nastavil jsem to jak jste rikal. tj. generovat to pres .part a pak mv na .ulaw. ja sem to udelal tak, ze abych nepouzival nejakou databazi kde bych mel ty slova a md5 file tak delam md5 z toh textu a pak pres ten perl script testuji existenci nebo pripadne vytvorim soubor pres epos

kazdopadne ten cron je dobry napad. dekuji Smile
Návrat nahoru
Daniel




Založen: 12. 11. 2006
Příspěvky: 2404

PříspěvekZaslal: ne leden 10, 2010 3:57 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Laupe napsal:
...tak delam md5 z toh textu a pak pres ten perl script testuji existenci nebo pripadne vytvorim soubor...

Ano, do par tisic souboru to bude bohate stacit a vice jich stejne ani treba po par mesicich provozu mit nebudete. Samozrejme, ze pokud byste nechaval napr. generovat tupe cas ve tvaru %H%M%S , tak byste se k tomu mohl dostat v pohode, pokud ale budete volat 3x Playback zvlast pro %H a zvlast pro %M a zvlast pro %S, tak jich bude jen maximalne 60, asi chapete, co jsem tim chtel rici.
Návrat nahoru
Laupe
Moderátor



Založen: 04. 12. 2009
Příspěvky: 86

PříspěvekZaslal: ne leden 10, 2010 4:01 pm    Předmět: Re: Automatické přečtení textu Odpovědět s citátem

Daniel napsal:
Laupe napsal:
...tak delam md5 z toh textu a pak pres ten perl script testuji existenci nebo pripadne vytvorim soubor...

Ano, do par tisic souboru to bude bohate stacit a vice jich stejne ani treba po par mesicich provozu mit nebudete. Samozrejme, ze pokud byste nechaval napr. generovat TTSkem tupe cas ve tvaru %H%M%S , tak byste se k tomu mohl dostat v pohode, pokud ale budete volat 3x Playback zvlast pro %H a zvlast pro %M a zvlast pro %S, tak jich bude jen maximalne 60, asi chapete, co jsem tim chtel rici.


jasny chapu, ja to mam spis na texty typu "Dovolali jste se tam a tam, autorizujte se pro cislo xx" coz se ulozi a pro dalsi pouziti se pouzije ten vygenerovany.

samozrejmne pokud tam je cas (jako ze je) tak se playback pouziva pro h, minutu a vterinu zvlast a archivuje se tio mimo (kde se to nepromazava) protoze tim si za cas vytvorim "databazi" cisel a pak uz nemusim nic generiovat znovu a znovu. a tech souboru tam nebude tolik ani pametove. nekde v radech desitkach mega
Návrat nahoru
Přidej do: linkuj.cz! | jagg.cz! | del.icio.us! | digg it! | reddit! | Googlize! | MyWeb it! | Spurl it! | live it! | email it!
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma       telefonujeme.cz - Obsah fóra -> VoIP Asterisk Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 


Powered by phpBB © 2001, 2005 phpBB Group