 |
telefonujeme.cz telefonování přes internet s VoIP
|
|
|
| Autor |
Zpráva |
Laupe Moderátor
Založen: 04. 12. 2009 Příspěvky: 86
|
Zaslal: pá leden 08, 2010 7:19 pm Předmět: Automatické přečtení textu |
|
|
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
|
Zaslal: so leden 09, 2010 2:06 pm Předmět: Re: Automatické přečtení textu |
|
|
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
|
Zaslal: so leden 09, 2010 2:53 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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
|
Zaslal: so leden 09, 2010 7:33 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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
|
Zaslal: so leden 09, 2010 8:05 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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
|
Zaslal: so leden 09, 2010 10:14 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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
|
Zaslal: ne leden 10, 2010 2:30 am Předmět: Re: Automatické přečtení textu |
|
|
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
|
Zaslal: ne leden 10, 2010 8:43 am Předmět: Re: Automatické přečtení textu |
|
|
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
|
Zaslal: ne leden 10, 2010 2:57 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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  |
|
| Návrat nahoru |
|
 |
Daniel
Založen: 12. 11. 2006 Příspěvky: 2404
|
Zaslal: ne leden 10, 2010 3:57 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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
|
Zaslal: ne leden 10, 2010 4:01 pm Předmět: Re: Automatické přečtení textu |
|
|
| 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 |
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|