I am using Halef (linux fedora) and able to make calls with xlite softphone and with android mobile but without audio supported.
I also tried demos that are also not working (no idea whether any audio problem is there or something else) and found following errors.
I explored net and this help forum to identify the source the problem before putting it here, and found that perhaps JMF is not installed properly and it gives these errors.
However I installed JMF successfully on my linux fedora m/c and set its path in env. var like JMFHOME=/opt/JMF-2-1-1e and cross checked all required files(so and three jar files) with executable user permissions.
But could not resolve the errors.
Can anyone see, check and give some inputs.
2015-08-20 12:25:13,276 DEBUG {EventScannerThread} org.speechforge.cairo.sip.SipListenerImpl
org.speechforge.cairo.sip.SdpMessage@fdb3de
2015-08-20 12:25:13,276 INFO {main} org.speechforge.cairo.demo.bargein.BargeInClient
Received the SIP Response.
2015-08-20 12:25:13,276 DEBUG {main} org.speechforge.cairo.demo.bargein.BargeInClient
Starting NativeMediaClient...
2015-08-20 12:25:13,381 DEBUG {main} org.speechforge.cairo.rtp.RTPConsumer
RTPManager class: com.sun.media.rtp.RTPSessionMgr
2015-08-20 12:25:13,439 WARN {Thread-7} org.speechforge.cairo.rtp.RTPPlayer
playSource(): encountered unexpected exception:
javax.media.NoDataSourceException: Cannot find a DataSource for: dsound://
at javax.media.Manager.createDataSource(Manager.java:1037)
at org.speechforge.cairo.rtp.RTPPlayer.playSource(RTPPlayer.java:110)
at org.speechforge.cairo.rtp.NativeMediaClient$TransmitThread.run(NativeMediaClient.java:105)
Exception in thread "Thread-7" java.lang.RuntimeException: playSource() encountered unexpected exception
at org.speechforge.cairo.rtp.RTPPlayer.playSource(RTPPlayer.java:153)
at org.speechforge.cairo.rtp.NativeMediaClient$TransmitThread.run(NativeMediaClient.java:105)
Caused by: javax.media.NoDataSourceException: Cannot find a DataSource for: dsound://
at javax.media.Manager.createDataSource(Manager.java:1037)
at org.speechforge.cairo.rtp.RTPPlayer.playSource(RTPPlayer.java:110)
... 1 more
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I am going to assume that you have Asterisk correctly installed and configured. I assume this is true, because otherwise you would not see your call communicate to Cairo. Also good way to check you have Asterisk working is to make sure you can hear audio file (e.g. warning message) played from Asterisk, befire being transferred to rest of Halef. I think you are right that you need JMFHOME configured correctly, but I am going to include a lot of notes in case something else is needed as well.
Please use the general-enhancements.develop-corrected branch from git. We have not merged that branch yet with develop and master.
I assume you already have Java installed and setup correctly, but just mention this for other future users:
- Recommend you use Oracle Java for all servers that need Java rather than OpenJDK. For all servers make sure that JAVA_HOME and is set correctly and ${JAVA_HOME}/bin is in PATH.
Now for things that might help you:
Make sure your ports are open for RTP and SIP. I believe cairo-config.xml file contains all or some of the port ranges you need to have open for Cairo. My notes are a little bad on this, but I think you need:
from cairo
5090
to cairo
5050
baseRTP receive == from cairo?
42150
+ 50
baseRTP transmit == to cairo?
42050
+ 50
For Cairo Install:
Make sure you have /etc/hosts or DNS server configured so that your hostname maps to your IP and localhost maps to the loopback IP. For example:
And I think you are correct that JMFHOME likely needs to be pointed to the right location. You can change JMFHOME in cairo-VM/zanzibar-SNAPSHOT/bin/cairo/rserver.sh which in Cairo to point to the location where you have JMF installed. After that, run cairo-VM/scripts/configure.sh to get Cairo configured then make a symlink to where you have cairo install like:
ln -s /<actual install="" dir="">/tjr /home/tjr
Sorry, I did not add thoses step to the configure.sh script yet.
After this, you should be able to start Cairo up with errors:
cd <your install="" location="">/halef-halef-cairo/cairo-VM/scripts
bash restart.sh
For Voice Browser Install:
Make sure your ports are open for RTP and SIP.
Read configureIPs.sh script to help you figure out how to configure Voice Browser. The script was designed for Amazon EC2, so might not work without changes. Then you will have to manually update IP addresses in mrcpv2-callmanager.xml to point to your web server.
Then you should be able to start it via restart.sh. You might have to run recompile.sh script before that.
Hopefully that is everything. If you have other problems please let us know.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Also I would note that I installed a few packages that you might need as well. Most I think are only needed for development, but just in case I am listing them if any are needed. Also note these were installed for Ubuntu, so package names will be slightly different for Fedora and you will have to use "yum" rather than "apt-get".
I read your mentioned points carefully and found thet most of them I have followed correctly.
I installed oracle java instead openjdk but it could not make any impact.
I could not understand your point. (You can change JMFHOME in cairo-VM/zanzibar-SNAPSHOT/bin/cairo/rserver.sh which in Cairo to point to the location where you have JMF installed)
also I could not find configure.sh anywhere..
Rest, I am facing same error problem while running any demo.
Second case: I am runing "helloworld" vxml from Halef s/w and it run without any audio support :( that i needed desparately. (attached vxml)
Attached are the files of voice xmls, I used.
However, I am putting my o/p of two processes which is worth to erad: Pls check !!!
[java] 2015-08-25 20:13:37,279 32328 [4c-b225-f5f4ea18d77c] INFO VoiceXmlImplementationPlatform ( 494) borrowed call control of type 'dummy'
[java] 2015-08-25 20:13:37,279 32328 [4c-b225-f5f4ea18d77c] INFO mrcpv2.Mrcpv2SynthesizedOutput ( 184) Queue count incremented,,, now 1
[java] 2015-08-25 20:13:37,280 32329 [4c-b225-f5f4ea18d77c] INFO mrcpv2.Mrcpv2SynthesizedOutput ( 201) temp: <?xml version="1.0" encoding="UTF-8" standalone="no"?><speakxmlns="http://www.w3.org/2001/10/synthesis"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="1.0"xml:lang="en"xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis/synthesis.xsd">Hello World!</speak>
[java] 2015-08-25 20:13:37,281 32330 [4c-b225-f5f4ea18d77c] INFO mrcpv2.Mrcpv2SynthesizedOutput ( 224) Using TTS!: Hello World!
[java] 2015-08-25 20:13:37,302 32351 [4c-b225-f5f4ea18d77c] DEBUG xml.JVoiceXmlPromptAccumulator ( 142) timeout after prompt queuing: -1
[java] 2015-08-25 20:13:37,302 32351 [4c-b225-f5f4ea18d77c] DEBUG agstrategy.AbstractTagStrategy ( 220) node: 'goto' next: '#say_goodbye'
[java] 2015-08-25 20:13:37,302 32351 [4c-b225-f5f4ea18d77c] DEBUG reter.tagstrategy.GotoStrategy ( 152) going to form 'say_goodbye'...
[java] 2015-08-25 20:13:37,302 32351 [4c-b225-f5f4ea18d77c] INFO nterpreter.scope.ScopeObserver ( 106) exiting scope 'anonymous'...
[java] 2015-08-25 20:13:37,303 32352 [4c-b225-f5f4ea18d77c] DEBUG nterpreter.scope.ScopeObserver ( 120) current scope stack: [SESSION, APPLICATION, DOCUMENT, DIALOG]
[java] 2015-08-25 20:13:37,303 32352 [4c-b225-f5f4ea18d77c] INFO er.FormInterpretationAlgorithm ( 444) going to form 'say_goodbye'...
[java] 2015-08-25 20:13:37,303 32352 [4c-b225-f5f4ea18d77c] DEBUG er.event.JVoiceXmlEventHandler ( 527) notifying event 'org.jvoicexml.event.plain.jvxml.GotoNextFormEvent'...
[java] 2015-08-25 20:13:37,303 32352 [4c-b225-f5f4ea18d77c] INFO er.event.JVoiceXmlEventHandler ( 532) notified event 'org.jvoicexml.event.plain.jvxml.GotoNextFormEvent'
[java] 2015-08-25 20:13:37,303 32352 [4c-b225-f5f4ea18d77c] DEBUG er.event.JVoiceXmlEventHandler ( 469) processing event of type 'org.jvoicexml.event.plain.jvxml.GotoNextFormEvent'...
Also the o/p of ./transmitter.sh
...
READ:
MRCP/2.0 138 SPEAK 1440513815763
Channel-Identifier:14f64a208af@speechsynth
Content-Type:text/plain
Content-Length:14
Hello World!
2015-08-25 20:13:37,284 DEBUG {Thread-14} org.mrcp4j.server.MrcpRequestProcessorImpl
MrcpRequestProcessorImpl.processRequest()...
2015-08-25 20:13:37,284 DEBUG {Thread-14} org.speechforge.cairo.util.pool.AbstractPoolableObject
activate()
Wrote synthesized speech to /tmp/cairo/basePromptDir/14f64a208af@speechsynth/1440513817284.au
2015-08-25 20:13:37,291 DEBUG {Thread-14} org.speechforge.cairo.util.pool.AbstractPoolableObject
passivate()
2015-08-25 20:13:37,297 DEBUG {Thread-15} org.speechforge.cairo.server.tts.RTPSpeechSynthChannel
taking next prompt from prompt queue...
2015-08-25 20:13:37,297 DEBUG {Thread-14} org.speechforge.cairo.server.tts.RTPSpeechSynthChannel
Queueing feeder prompt: /home/hitachi/Downloads/halef-halef-jvxml-261b93b2bc4126cd17557d3511e38c591b0bb84b/JVXML-VM/cairo-0.3/bin/../prompts/feeder.wav
2015-08-25 20:13:37,297 DEBUG {Thread-15} org.speechforge.cairo.server.tts.RTPSpeechSynthChannel
playing next prompt...
....
I followed the sequences recommended by you and finally I got the voice from my xlite phone. It reads what is written under <prompt> tag in my vxmls. However it could not read all the <prompt> tags and exit abruptly, it serves the basic purpose for me at least.
I found that voice enabling is also depend on xlite phone configuration like if I dont register my phone and call goes with proxy settings it does not work (audio not supported) AND
if I register my phone first and then make the calls it works! (audio is there)
Well, when I try to replace xlite to android soft phone (like Sipdroid) on Samsung Or nexus LG smart phone call go properly but without audio (same problem)
I am exploring it but could not get enough information.
Now if you have some idea regarding Sipdroid on Android phone, pls suggest!!
Praneet
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have been using 3CX on an iPhone successfully with Halef in the past. There seems to be an Android version, too. Here is, how I configured it to work for me:
I am using Halef (linux fedora) and able to make calls with xlite softphone and with android mobile but without audio supported.
I also tried demos that are also not working (no idea whether any audio problem is there or something else) and found following errors.
I explored net and this help forum to identify the source the problem before putting it here, and found that perhaps JMF is not installed properly and it gives these errors.
However I installed JMF successfully on my linux fedora m/c and set its path in env. var like JMFHOME=/opt/JMF-2-1-1e and cross checked all required files(so and three jar files) with executable user permissions.
But could not resolve the errors.
Can anyone see, check and give some inputs.
2015-08-20 12:25:13,276 DEBUG {EventScannerThread} org.speechforge.cairo.sip.SipListenerImpl
org.speechforge.cairo.sip.SdpMessage@fdb3de
2015-08-20 12:25:13,276 INFO {main} org.speechforge.cairo.demo.bargein.BargeInClient
Received the SIP Response.
2015-08-20 12:25:13,276 DEBUG {main} org.speechforge.cairo.demo.bargein.BargeInClient
Starting NativeMediaClient...
2015-08-20 12:25:13,381 DEBUG {main} org.speechforge.cairo.rtp.RTPConsumer
RTPManager class: com.sun.media.rtp.RTPSessionMgr
2015-08-20 12:25:13,439 WARN {Thread-7} org.speechforge.cairo.rtp.RTPPlayer
playSource(): encountered unexpected exception:
javax.media.NoDataSourceException: Cannot find a DataSource for: dsound://
at javax.media.Manager.createDataSource(Manager.java:1037)
at org.speechforge.cairo.rtp.RTPPlayer.playSource(RTPPlayer.java:110)
at org.speechforge.cairo.rtp.NativeMediaClient$TransmitThread.run(NativeMediaClient.java:105)
Exception in thread "Thread-7" java.lang.RuntimeException: playSource() encountered unexpected exception
at org.speechforge.cairo.rtp.RTPPlayer.playSource(RTPPlayer.java:153)
at org.speechforge.cairo.rtp.NativeMediaClient$TransmitThread.run(NativeMediaClient.java:105)
Caused by: javax.media.NoDataSourceException: Cannot find a DataSource for: dsound://
at javax.media.Manager.createDataSource(Manager.java:1037)
at org.speechforge.cairo.rtp.RTPPlayer.playSource(RTPPlayer.java:110)
... 1 more
HI,
I am going to assume that you have Asterisk correctly installed and configured. I assume this is true, because otherwise you would not see your call communicate to Cairo. Also good way to check you have Asterisk working is to make sure you can hear audio file (e.g. warning message) played from Asterisk, befire being transferred to rest of Halef. I think you are right that you need JMFHOME configured correctly, but I am going to include a lot of notes in case something else is needed as well.
Please use the general-enhancements.develop-corrected branch from git. We have not merged that branch yet with develop and master.
I assume you already have Java installed and setup correctly, but just mention this for other future users:
- Recommend you use Oracle Java for all servers that need Java rather than OpenJDK. For all servers make sure that JAVA_HOME and is set correctly and ${JAVA_HOME}/bin is in PATH.
Now for things that might help you:
Make sure your ports are open for RTP and SIP. I believe cairo-config.xml file contains all or some of the port ranges you need to have open for Cairo. My notes are a little bad on this, but I think you need:
from cairo
5090
to cairo
5050
baseRTP receive == from cairo?
42150
+ 50
baseRTP transmit == to cairo?
42050
+ 50
For Cairo Install:
Make sure you have /etc/hosts or DNS server configured so that your hostname maps to your IP and localhost maps to the loopback IP. For example:
128.127.0.0.1 localhost
<your IP="" here=""> <your hostname="" here="">
::1 localhost.localdomain localhost
And I think you are correct that JMFHOME likely needs to be pointed to the right location. You can change JMFHOME in cairo-VM/zanzibar-SNAPSHOT/bin/cairo/rserver.sh which in Cairo to point to the location where you have JMF installed. After that, run cairo-VM/scripts/configure.sh to get Cairo configured then make a symlink to where you have cairo install like:
ln -s /<actual install="" dir="">/tjr /home/tjr
Sorry, I did not add thoses step to the configure.sh script yet.
After this, you should be able to start Cairo up with errors:
cd <your install="" location="">/halef-halef-cairo/cairo-VM/scripts
bash restart.sh
For Voice Browser Install:
Make sure your ports are open for RTP and SIP.
Read configureIPs.sh script to help you figure out how to configure Voice Browser. The script was designed for Amazon EC2, so might not work without changes. Then you will have to manually update IP addresses in mrcpv2-callmanager.xml to point to your web server.
Then you should be able to start it via restart.sh. You might have to run recompile.sh script before that.
Hopefully that is everything. If you have other problems please let us know.
Also I would note that I installed a few packages that you might need as well. Most I think are only needed for development, but just in case I am listing them if any are needed. Also note these were installed for Ubuntu, so package names will be slightly different for Fedora and you will have to use "yum" rather than "apt-get".
sudo apt-get install packaging-dev gnupg pbuilder ubuntu-dev-tools bzr-builddeb apt-file subversion git-core autoconf automake gcc g++ make build-essential linux-headers-$(uname -r)
sudo apt-get install maven
for VoiceXML server
I read your mentioned points carefully and found thet most of them I have followed correctly.
I installed oracle java instead openjdk but it could not make any impact.
I could not understand your point. (You can change JMFHOME in cairo-VM/zanzibar-SNAPSHOT/bin/cairo/rserver.sh which in Cairo to point to the location where you have JMF installed)
also I could not find configure.sh anywhere..
Rest, I am facing same error problem while running any demo.
Second case: I am runing "helloworld" vxml from Halef s/w and it run without any audio support :( that i needed desparately. (attached vxml)
Attached are the files of voice xmls, I used.
However, I am putting my o/p of two processes which is worth to erad: Pls check !!!
Also the o/p of ./transmitter.sh
...
READ:
MRCP/2.0 138 SPEAK 1440513815763
Channel-Identifier:14f64a208af@speechsynth
Content-Type:text/plain
Content-Length:14
Hello World!
2015-08-25 20:13:37,284 DEBUG {Thread-14} org.mrcp4j.server.MrcpRequestProcessorImpl
MrcpRequestProcessorImpl.processRequest()...
2015-08-25 20:13:37,284 DEBUG {Thread-14} org.speechforge.cairo.util.pool.AbstractPoolableObject
activate()
Wrote synthesized speech to /tmp/cairo/basePromptDir/14f64a208af@speechsynth/1440513817284.au
2015-08-25 20:13:37,291 DEBUG {Thread-14} org.speechforge.cairo.util.pool.AbstractPoolableObject
passivate()
2015-08-25 20:13:37,297 DEBUG {Thread-15} org.speechforge.cairo.server.tts.RTPSpeechSynthChannel
taking next prompt from prompt queue...
2015-08-25 20:13:37,297 DEBUG {Thread-14} org.speechforge.cairo.server.tts.RTPSpeechSynthChannel
Queueing feeder prompt: /home/hitachi/Downloads/halef-halef-jvxml-261b93b2bc4126cd17557d3511e38c591b0bb84b/JVXML-VM/cairo-0.3/bin/../prompts/feeder.wav
2015-08-25 20:13:37,297 DEBUG {Thread-15} org.speechforge.cairo.server.tts.RTPSpeechSynthChannel
playing next prompt...
....
Thanks in anticipation again..!
Praneet
Hi,
Where you have Cairo try this:
cd <cairo root="" directory="">
find ./ -name configure.sh
If that file is not found, then you likely have the wrong git branch checked out. Here is how you check out the right branch:
git clone git://git.code.sf.net/p/halef/halef-cairo halef-halef-cairo
git checkout general-enhancements.develop-corrected
Now you should be able to find it:
find ./ -name configure.sh
You should see "./cairo-VM/scripts/configure.sh"
Now then you can find rserver.sh in a simialr way:
find ./ -name rserver.sh
You will see a few found. I think I gave you the path to the wrong one before, sorry. You want this one:
./cairo-VM/zanzibar-SNAPSHOT/bin/cairo/rserver.sh
This rserver.sh script should look like this:
#!/bin/bash
export JMFHOME=/export/Apps/JMF-2.1.1e
export CLASSPATH=${JMFHOME}/lib/jmf.jar:.:${CLASSPATH}
CLASS="org.speechforge.cairo.server.resource.ResourceServerImpl"
sh ../launch.sh $CLASS -sipPort 5050 -sipTransport udp
But you need to change the line with JMFHOME to point to where you have JMF installed.
Then you should be able to start it up:
cd ./cairo-VM/scripts
bash ./restart.sh &
You should not see any errors and you last few lines should look like this:
...
2015-08-26 12:49:33,748 INFO ~.~.~.~.~.ReceiverResource [main]: binding receiver resource...
2015-08-26 12:49:33,762 DEBUG ~.~.~.~.~.ResourceRegistryImpl [RMI TCP Connection(2)-10.61.82.112]: register(): registering resource of type RECEIVER
2015-08-26 12:49:33,773 INFO ~.~.~.~.~.ReceiverResource [main]: Resource bound and waiting...
As for VXML stuff you mentioned, I am not that familiar with it, I'll ask David to take a look at what you stated.
Let me know if this works, if not, maybe I can do a screen share to take a look at your setup.
Last edit: rmundkowsky 2015-08-26
Forgot you still need to run configure.sh to configure your IP addresses.
Thanks for your support. I will try this and will let you know.
Many Thanks for the help.
I followed the sequences recommended by you and finally I got the voice from my xlite phone. It reads what is written under <prompt> tag in my vxmls. However it could not read all the <prompt> tags and exit abruptly, it serves the basic purpose for me at least.
I found that voice enabling is also depend on xlite phone configuration like if I dont register my phone and call goes with proxy settings it does not work (audio not supported) AND
if I register my phone first and then make the calls it works! (audio is there)
Well, when I try to replace xlite to android soft phone (like Sipdroid) on Samsung Or nexus LG smart phone call go properly but without audio (same problem)
I am exploring it but could not get enough information.
Now if you have some idea regarding Sipdroid on Android phone, pls suggest!!
Praneet
I have been using 3CX on an iPhone successfully with Halef in the past. There seems to be an Android version, too. Here is, how I configured it to work for me:
Name: David
Display name: David
User: 1000
ID: 1000
Password: **
Use as: SIP Account
Local PBX IP:
External PBX IP: xxx.xxx.xxx.xxx (telephony server) [your telephony server's external IP]
PBX port: 5060
STUN Server:
Proxy: xxx.xxx.xxx.xxx [your telephony server's external IP]
Record Calls: 0
Phonebook "+" to: 00
Phonebook prefix:
Local SIP port: 5065
First RTP port: 4000
TCP transport: 0
NAT Helper: 1
Echo Cancellation: 0
GSM: 1, priority: 1 (high)
G.711 (aLaw): 1, priority: 2
G.711 (uLaw): 1, priority: 3
G.722: 0, priority: 4
Speex: 0, priority: 5