Я пытаюсь реализовать сплиттер аудиозаписи.Мое требование заключается в том, что если продолжительность звука превышает 30 секунд, звук должен разделяться на несколько аудиофайлов по 30 секунд.
Для этого я запускаю таймер при запуске рекордера и каждые 30 секунд прекращаю его запись, сохраняю файл и перезагружаю рекордер.Это работает нормально, и аудио файлы сохраняются на устройстве.Но когда я пытаюсь открыть их, проигрывается только последний аудиофайл, все файлы кажутся поврежденными.
Ниже приведен мой код: -
/**
* Allow the app to record the audio after the user has granted permission.
*
* @param mContext
*/
public static void allowRecording(final Activity mContext)
{
isRecording = true;
mStartRecording = true;
if (!mRecord)
{
if (timer != null)
{
timer.cancel();
stopRecording();
mRecord = true;
}
}
mRecord = false;
// start record,at every 30 seconds
timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
i++;
mContext.runOnUiThread(new Runnable()
{
@Override
public void run()
{
onRecord(mStartRecording, i, mContext);
mStartRecording = !mStartRecording; // setting false
}
});
}
}, 0, 30000);
}
/**
* Check if the stop button has been pressed.
* If not stop recording audio automatically after an interval eg .10 secs and start the recording again.
*
* @param start
* @param i
* @param mContext
*/
private static void onRecord(boolean start, int i, Activity mContext)
{
if (isRecording)
{
if (start)
{
startRecording(outputFileDirectory + mContext.getString(R.string.str_audio) + i + mContext.getString(R.string.str_file_type_mp4));
}
else
{
stopRecording();// stop recording
startRecording(outputFileDirectory + mContext.getString(R.string.str_audio) + i + mContext.getString(R.string.str_file_type_mp4));//imeadiatly start recording
}
}
else
{
timer.cancel();
}
}
/**
* Start recording audio
*/
public static void startRecording(String mFileName)
{
if (mediaPlayer != null && mAudioRecorder != null)
{
mediaPlayer.stop();
mAudioRecorder.release();
mediaPlayer = null;
mAudioRecorder = null;
}
mAudioRecorder = new MediaRecorder();
mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mAudioRecorder.setOutputFile(mFileName);
clippingList.add(mFileName);
try
{
mAudioRecorder.prepare();
mAudioRecorder.start();
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* Automatic method to stop recording only to continue the recording again after an interval
*/
private static void stopRecording()
{
if (mAudioRecorder != null)
{
mAudioRecorder.stop();
mAudioRecorder.release();
mAudioRecorder = null;
}
}
public static List<String> stopRecording completely()
{
if (mAudioRecorder != null)
{
mAudioRecorder.stop();
mAudioRecorder.release();
mAudioRecorder = null;
timer.cancel();
}
isRecording = false;
isAudioPlaying = false;
return clippingList;
}
Любая помощь по этому вопросу приветствуется.