MediaRecorder starts with a delay of 1 s. How can I get rid of silence?

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; } } 
+1
source share
1 answer

I found a solution with RehearsalAudioRecorder

 public void onStart(Intent intent, int startId) { boolean isStart = intent.getBooleanExtra("state", false); if (isStart) { acquireWakeLock(); int i = 0; do { if (mRecorder != null) mRecorder.release(); mRecorder = new RehearsalAudioRecorder(false, 0, 0, 0, 0); } while ((++i < 44100) & !(mRecorder.getState() == RehearsalAudioRecorder.State.INITIALIZING)); mRecorder.setOutputFile(intent.getStringExtra("audioFile")); mRecorder.prepare(); mRecorder.start(); } else if (!isStart) { if(mRecorder != null) { mRecorder.stop(); mRecorder.release(); mRecorder = null; } releaseWakeLock(); } } 
0
source

Source: https://habr.com/ru/post/1204018/


All Articles