I want to know in Android it is possible to transmit modulated voice like Ultra voice changer app does during a call. I have searched a lot but I only got results for how to change voice after recording. So, please reply me that is it possible to transmit changed voice at a time of call in Android.
It seems not possible. According to this XDA-Post "The calling screen is built within the phone". You can replace a dialer, but are not able to intercept the voice spoken during a call.
I cannot find any official API from android, which would make it possible to write your own "calling" App (which means record voice and send it).
The GSM full rate speech codec operates at 13 kbits/s and uses a Regular Pulse Excited (RPE) codec - This means that the microphone and speech detection in GSM is optimised for transmission across a Time Division Multiplexed 'digital' channel that is then modulated across the air interface using GMSK, a continuous-phase frequency-shift keying modulation scheme.
Noises other than the 'average' speech pattern are heavily distorted (or suppressed) - For instance DTMF (tones) are not well received on a device, and must be transmitted by the network core, but tones designed for the hearing impaired work well. Voice is shaped (filtered) on entry to the codec (microphone design) for best codec detection and reproduction at the other end.
In summary - It is not possible to 're-modulate' across the GSM system, because the entry point is not a radio (air interface), or even access the GSM digital frame. Your only access for a voice call is the GSM codec which is expecting a voice in a confined audio spectrum.
I know there are apps that act like voice changer where they change your voice and transmit that thru gsm voice. Maybe you can make an app that takes the voice then modulate it to something like phase shift keying or digital radio monodiale like what hams used for digital vhf, hf, dpmr, mototrbo radio communication and transmit the audio thru gsm voice channel then demodulate it back to normal voice but instead of straight forward modulation demodulation you can add pgp, aes, pre shared keys, blowfish or whatever encryption you like. I'm also intrested to see a project like this.
I think it would also be great if we could use this to transmit data thru voice gsm channel like the 56k dial up modems in the past instead of the gprs data channel allowing you to make data connection to other cellphone to transfer files without incurring additional data charges which is really good for subscribers with unlimited call plans.
See reference:
http://freedv.org/tiki-index.php
http://www.aprs.org
Related
I want to know if there is any way to communicate users without internet connection to a server.
I thought it might be possible through SMS and machine-readable encoding. However this question confirms that iOS apps allows sending but not reading SMS: iphone app reading sms
I've also read a lot about using USSD but it seems that mobile opened messages aren't possible in iOS (dial USSD code from iphone programatically) and while in Android is possible to call a code programatically there is no USSD API to, nor it's possible to send USSD messages silently.
Is there any way to transfer data between my app and my server with only basic voice-sms signal?
You are correct that SMS could be used to communicate with the server, if the server has access to a GSM modem. For large volumes of SMSes, you'd expect to have an internet connection between your server and an SMS gateway that connects directly to the messaging centre in the mobile network, instead of a modem.
This is the model of the SMS voting servers.
You can send/receive SMS as long as you have a GSM network, and you're right; no IP connection is needed.
The Android platform lets you send and receive SMSes - see here.
Disadvantages are that SMS can be expensive, and has no guaranteed delivery, and no guaranteed delivery time. It's not suitable for real time communication.
USSD is another form of communication between a mobile device and the network that's built directly into the GSM network, but USSD messages are owned or licenced by the network operators, and aren't free for customers to use, as SMS is.
EDIT: USSD isn't a native protocol in CDMA, but various implementations are available from different operators. For example, here's a patent application describing an idea for one such system, which does not appear to require an IP connection. Googling "USSD CDMA" also gives various news items about commercial implementations, technical details unknown. I think you just have to find out what your target operator(s) offer.
I haven't worked directly with WAP, but a glance at the WAP Protocol Stack shows that it can indeed run over CDMA, or GSM without an IP connection. There is also a very useful Wikipedia article. My experience testing MMS is that it usually doesn't work without an IP connection, even though it is supposed to (according to that Wiki article, with WAP/SMS). So I would question how far European operators or mobile devices are supporting or testing WAP. Whether WAP is a practical choice could come down to pricing/availability at the end of the day, rather than technical issues.
Well, there are yet other options, depending on the amount of data you need to transfer back and forth to the server.
Instead of sms, for short amount of data you could try to implement an Asterisk PBX, whith your mobile calling your server and then sending other DTMF digits as your data, which would be interpreted by your Asterisk PBX (like an interactive phone audio menu from your cable company). Asterisk is GPL open-source.
Another option (an expensive one and with heavy work to do), would be to generate an audio signal encoded with your data content, and dial a phone number linked with an attached fax/modem pci board on a server, sending that audio like a call. It would'nt need to be a long call, as you could fit lots of data in a short bursts of audio stream.
Your server could check that data by acessing the content on the receiving end. Simply recording the call from the attached fax/modem pci board, or you could use an Asterisk PBX server on a local computer to save the audio file and then process by your server software.
Anyway, you would need to create a new protocol and data encoding type, like you mentioned "machine-readable encoding".
So, for the data types you could just save a lot of short audio files on your mobile and play them as your datatypes, but it would be easier to just go for the DTMF already mentioned above. Or you could encode like this: get the sound spectrum allowed to use through the voice call (Wideband/Narrowband), and divide it by the amount of single characters or chunks needed (take a look at how to encode in base64, to have some ideas). Then create a function to just encode your data as a short audio stream (read about PCM encoding and also read more about Fast Fourier transforms, if you want to complicate (but speed up) even further.
Create a simple protocol like this: first audio packet is a sequence of tones that makes a request, authenticates, and waits for acknowledgement response from the server (which could be just by not dropping the call 1 second after that). The 2nd audio packet is the size of the first frame of data, then the 3d audio packet onwards is the data itself with the size shown before. And so on. Have a look at the ftp protocol description for simplicity. Then you need to refine it so that the time of every packet above is the least possible while mantaining confiability.
For costs saving on voice calling, you could also explore phone number options, like Google Voice, Skype or any Voip service.
I would like to access my voice (during a phone call) so that I can filter the unwanted noise. I've encountered apps that can record both sides of the call during a live session (no VOIP)
https://www.google.com/url?q=http://www.androidpit.com/en/android/market/apps/app/com.soundmobilesystems.android.recorder/Personal-Call-Voice-Recorder&sa=U&ei=p1bIUYmuFKboiAKx34CoAQ&ved=0CBYQFjAF&client=internal-uds-cse&usg=AFQjCNE9HZmEc9hNokPMGIFl0VWJMQv3nw
using Voice_Call, Voice_Uplink or Voice_Downlink, they were able to access the in call audio stream, my problem is now, how can i send my (noise filtered) voice back into the call audio stream.
This has been asked several times before (e.g. here, here and here).
Nothing has changed in respect to this, so it's still not possible for Android apps to write into the uplink (or downlink) of a voice call, and probably won't be in the future.
When it comes to noise suppression for voice calls, most (if not all) OEMs have both uplink and downlink noise suppression on their phones which has been carefully tuned for each product in a controlled environment to meet all necessary acoustic requirements. Sometimes you can toggle or tweak these settings in the Settings menu or through the Phone application's UI.
I have done some research on Voice Chat using Bluetooth and have gone through the Bluetooth article here http://developer.android.com/guide/topics/connectivity/bluetooth.html but couldn't found anything related to Voice Chat.
I have seen an application on Play Store (https://play.google.com/store/apps/details?id=com.okean.btcom) providing same functionality that means Voice Chat is possible using Bluetooth in Android.
I have also seen Session Initiation Protocol (SIP) provides Voice Chat Service but it uses Internet data. I want it over Bluetooth.
Any help would be appreciated.
On a motorcycle or loud boat a headset would provide clear communications within Bluetooth range. Yelling is impractical and stressful.
Motorcycle comm systems often use BT, but the systems are designed to work on helmets and are propietary. There are instances in a high noise environment where a BT headset or earpiece would be more practical.
An app on a phone or some sort of Bluetooth hub could work in high noise confined environment.
If you are in bluetooth range, why not just voice chat over air? as in sound pressure, aka human speech?
I would like to do an application in android which translates speech from incoming call to text. Since i cant connect to mobile data while on call, i have to do the conversion offline.. Is it possible? Can I use any API or libraries to do it? Also is there any restrictions in tapping incoming voice? Please do reply..
Regular apps can record the phone owner side of the conversation, but to also record the remote user's voice, you need to have root access as well as a kernel patch.
As far as voice transcription, I don't know of any api you could use for free straight from the phone (assuming you get the recorded audio).
I plan to develop Android application which will encrypt/decrypt voice data such that parties can communicate using secure channel. So the question is: how to intercept voice/audio data during GSM call? Is it possible or not? Should I use Android NDK or something else?
In GSM it is not possible to encrypt the voice and send it through the voice channel due to channel characteristics. The signal sent through the voice channel has to be (similar to) human voice as vocoder (CELP) is used for channel coding.
So even if you had access to low level libraries and used it to encrypt voice to send it directly through the voice channel it would be not possible for the called party to receive and decrypt the signal.
Encrypted voice however could be sent through the data channel as data.
This is something that happens in the low level of the operating system. You wouldn't be able to access this information in the application level.
I suggest that you look into VOIP like SipDroid. I bet you'll be able to set it up to use encryption easily. (srtp instead of rtp)
Even if you SipDroid doesn't support this, it's is open source so you could add this feature.
Call recording is not yet possible on Android. See this feature request.
You can record your voice from microphone, but you can not record the sound of the other party. If you only want to record your voice use android.media.MediaRecorder.AudioSource.MIC
Simple Answer, NO!
if you are able to access low level libraries and used it to encrypt voice to send it directly through the voice channel off course it would not be possible for the called party to receive and decrypt the signal but if you modulate encrypted voice data and transform this voice data into speech like waveform and send through the voice channel of GSM then surely other party will receive and decrypt the voice.
I know there are apps that act like voice changer where they change your voice and transmit that thru gsm voice. Maybe you can make an app that takes the voice then modulate it to something like phase shift keying or digital radio monodiale like what hams used in vhf and hf radio communication and transmit the audio to gsm then demodulate it back to voice but instead of straight forward modulation demodulation you can add pgp, aes, or whatever encryption you like. I'm also intrested to see a project like this.
I think it would also be great if you could use this to transmit data thru voice gsm channel like the 56k modems in the past instead of the gprs channel.
See reference
http://freedv.org/tiki-index.php
http://www.aprs.org