If you really want to read AudioSamples, I would suggest you use AudioRecord instead of MediaRecorder, as it gives you more control over AudioSamples ... For this you can use the following code, AudioCapturer is my wrapper class, which I use to get samples from an object AudioRecord IAudioReceiver is an interface that has methods for processing audio data.
public class AudioCapturer implements Runnable { private AudioRecord audioRecorder = null; private int bufferSize; private int samplePerSec = 16000; private String LOG_TAG = "AudioCapturer"; private Thread thread = null; private boolean isRecording; private static AudioCapturer audioCapturer; private IAudioReceiver iAudioReceiver; private AudioCapturer(IAudioReceiver audioReceiver) { this.iAudioReceiver = audioReceiver; } public static AudioCapturer getInstance(IAudioReceiver audioReceiver) { if (audioCapturer == null) { audioCapturer = new AudioCapturer(audioReceiver); } return audioCapturer; } public void start() { bufferSize = AudioRecord.getMinBufferSize(samplePerSec, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); if (bufferSize != AudioRecord.ERROR_BAD_VALUE && bufferSize != AudioRecord.ERROR) { audioRecorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, this.samplePerSec, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, this.bufferSize * 10);
Now you can use this class object from the main class of your program, and it will start giving you audio samples that you can process in your IAudioReceiver (a class that uses these samples).
If you still want to use MediaRecorder, this link may be useful to you,
source share