Jonathan H
2016-Oct-03 19:48 UTC
[asterisk-users] Synchronous dialplan execution for feedback while processing speech recognition and voice synth, for example.
I've got an agi that recognises speech (via Google) and another that turns text into speech (tts) (via Microsoft Translate). Both are web APIs, both called via seperate python AGIs. I've googled and I'm probably missing something pretty newbie 101 here, but is there any way, or fiddle, that I can play some audio to let the caller know that their weather forecast is being fetched, which the two agis are first recognising and then synthesizing the speech? I thought "background" might do it, but it doesn't seem to work like that. Both agis take about 2.5 seconds, so that's 5 seconds of silence. Yes, I'm aware of software applications that will quickly recognise and synthesize speech on the local machine, but they're not suitable for the application. I realise there's probably a pythonic way of forking processes, but the way it is now, both agis are nice seperate single purpose functions and it all just looks quite neat as it is. Many thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20161003/f8fdf48a/attachment.html>
Steve Edwards
2016-Oct-03 22:48 UTC
[asterisk-users] Synchronous dialplan execution for feedback while processing speech recognition and voice synth, for example.
On Mon, 3 Oct 2016, Jonathan H wrote:> I've googled and I'm probably missing something pretty newbie 101 here, > but is there any way, or fiddle, that I can play some audio to let the > caller know that their weather forecast is being fetched, which the two > agis are first recognising and then synthesizing the speech? I thought > "background" might do it, but it doesn't seem to work like that.?Did something similar a decade ago :) I had a credit card processing AGI for an adult audiotext line. The owner was a real stickler for the 'caller experience' and didn't like the dead air waiting for the auth back from the card processor. My solution was to kick off a thread (the AGI was written in C, so I used pthreads) to play 'and get ready for a good time' and then issue the request to the card processor and waiting for the response in the mainline code. By the time the prompt finished, I had the response so pthread_join would 'finish' off the thread cleanly and the dead air magically disappeared. The only 'warning' is not to do any I/O to STDIN/STDOUT in the mainline -- that would violate the AGI protocol and lead to things breaking in weird ways. -- Thanks in advance, ------------------------------------------------------------------------- Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST https://www.linkedin.com/in/steve-edwards-4244281
Jonathan H
2016-Nov-18 23:45 UTC
[asterisk-users] Synchronous dialplan execution for feedback while processing speech recognition and voice synth, for example.
Right, well I tried a few things (I mean, days of things) and this is what I came up with. 2 Questions: 1: Is there a simpler way? 2: Is there a trick to pass back a variable to the calling channel, rather than setting a global? (This is for an agi process that can take up to ten seconds to query a web API and come back with a list of maybe ten items). [synctest3a] ; starts a new channel on 3b and sets the variable it's going to need using "b" param ; starts music class using "m" param, and then makes the call exten => s,1,Answer() same => n,Dial(Local/s at synctest3b,,gm(wait-long-process)b(synctest3b^setVar^1(from calling channel))) same => n,Verbose(1,${test}) ; set by the global in 3b same => n,Set(GLOBAL(test)="") ; stop it polluting other calls same => n,Hangup() [synctest3b] ; kicks into action with some long process (agi for example) ; when process is complete, it answers the call and sets global ; it then hangs up, music on hold stops, 3a resumes exten => s,1,Wait(2) same => n,Verbose(1,${testVar}) same => n,Set(GLOBAL(test)=true) ; same => n,Answer() same => n,Hangup() exten => setVar,1,Set(testVar=${ARG1}) ; setter same => n,Return() On 3 October 2016 at 23:48, Steve Edwards <asterisk.org at sedwards.com> wrote:> On Mon, 3 Oct 2016, Jonathan H wrote: > >> I've googled and I'm probably missing something pretty newbie 101 here, >> but is there any way, or fiddle, that I can play some audio to let the >> caller know that their weather forecast is being fetched, which the two agis >> are first recognising and then synthesizing the speech? I thought >> "background" might do it, but it doesn't seem to work like that. > > > Did something similar a decade ago :) > > I had a credit card processing AGI for an adult audiotext line. The owner > was a real stickler for the 'caller experience' and didn't like the dead air > waiting for the auth back from the card processor. > > My solution was to kick off a thread (the AGI was written in C, so I used > pthreads) to play 'and get ready for a good time' and then issue the request > to the card processor and waiting for the response in the mainline code. > > By the time the prompt finished, I had the response so pthread_join would > 'finish' off the thread cleanly and the dead air magically disappeared. > > The only 'warning' is not to do any I/O to STDIN/STDOUT in the mainline -- > that would violate the AGI protocol and lead to things breaking in weird > ways. > > -- > Thanks in advance, > ------------------------------------------------------------------------- > Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST > https://www.linkedin.com/in/steve-edwards-4244281 > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > > Join the Asterisk Community at the 13th AstriCon, September 27-29, 2016 > http://www.asterisk.org/community/astricon-user-conference > > New to Asterisk? Start here: > https://wiki.asterisk.org/wiki/display/AST/Getting+Started > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users