I use AudioRecord class to record the voice during a call.
I am intererested to record only the voice of the person who owns the phone ( from the microphone). During the recording I would like to do some audio processing but this is offtopic for now.
Android has the following AudioSources options:
- MediaRecorder.AudioSource.VOICE_CALL
- MediaRecorder.AudioSource.MIC
- MediaRecorder.AudioSource.VOICE_UPLINK
- MediaRecorder.AudioSource.VOICE_DOWNLINK
Can you explain what is the differences among them. Ok MIC is obvious but VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK ?
Also I should choose a sample rate ( 8000Hz, 16000Hz, 2250Hz, 44100Hz ). Can you please tell me what sample rate to choose and why?
For audio format I chose AudioFormat.ENCODING_PCM_16BIT but it also has: - AudioFormat.ENCODING_DEFAULT - AudioFormat.ENCODING_INVALID - AudioFormat.ENCODING_PCM_8BIT
Finally is how many channels should I use and why? ( AudioFormat.CHANNEL_IN_STEREO or AudioFormat.CHANNEL_IN_MONO )
A bit late but you can query the audio device to find out what it can do;
You should always aim to use 44100 as sample rate since it is the only sample rate that is guaranteed to work according to google.
As for stereo versus mono, use mono.
Finally: 8bit pcm vs 16bit pcm: Use 16bit pcm,
Just remember to use a short[] buffer instead of byte buffer when using 16bit. Since 16bit is 2 bytes you will have to combine two entries in the buffer at a time:
byte][]{sample_1_upper, sample_1_lower, sample_2_upper, sample_2_lower,...,sample_n_lower} However if you'll use a short[]buffer:
short[]{sample1, sample2, ..., sample3}
I've never tried to record a call, but if the OS doesn't bind the MIC source you could probably record from it. Since you're recording from the microphone you should only get the users voice.
VOICE_UPLINK: The audio transmitted from your end to the other party. IOW, what you speak into the microphone (plus surrounding noise depending on whether noise suppression is used and how well it performs).
VOICE_DOWNLINK: The audio transmitted from the other party to your end.
VOICE_CALL: VOICE_UPLINK + VOICE_DOWNLINK.