I am trying to use MediaRecorder in a Service to record sounds. But in the beginning it creates a delay of 1 second (silence). how do i get rid of this? I tried using RehearsalAudioRecorder so far no luck. If someone fixed this problem before consulting.
Start
Intent serviceIntent = new Intent(); serviceIntent.setAction("com.soundrecoder.RecorderService"); serviceIntent.putExtra("audioFile", path); serviceIntent.putExtra("state", true); startService(serviceIntent);
Stop
Intent serviceIntent = new Intent(); serviceIntent.setAction("com.soundrecoder.RecorderService"); serviceIntent.putExtra("state", false); startService(serviceIntent);
File RecorderService.java
public class RecorderService extends Service { private static final String TAG = null; private static MediaRecorder mRecorder; public void onCreate() {}; public void onStart(Intent intent, int startId) { boolean isStart = intent.getBooleanExtra("state", false); if (isStart) { mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setOutputFile(intent.getStringExtra("audioFile")); try { mRecorder.prepare(); } catch (IllegalStateException e) { Log.e(TAG,e.getMessage()); } catch (IOException e) { Log.e(TAG,e.getMessage()); } try { mRecorder.start(); } catch (IllegalStateException e) { Log.e(TAG, e.getMessage()); } } else if (!isStart) { mRecorder.stop(); mRecorder.reset(); } } @Override public IBinder onBind(Intent intent) { return null; } }
source share