Я использую MediaRecorder для записи звука с Android-устройств (в основном Galaxy S6).Я заметил, что в некоторых (3-5%) моих записях (у меня сейчас тысячи) части записи не имеют звука, но содержат множество нулей, которые могут длиться до минуты.В остальном запись нормальная.
Впервые я заметил эту проблему некоторое время назад при использовании AudioRecorder.В то время я думал, что AudioRecorder был причиной проблемы, и переключился на MediaRecorder.Я протестировал несколько файлов, и проблема казалась решенной.Однако я запустил скрипт, чтобы снова проверить все мои записи, и снова могут появиться файлы, содержащие нули.
При исследовании решений этой проблемы возникает только одна вещь: AudioRecord, создающий пробелы в нуле на Android 5.01 .Однако эта ошибка должна была быть исправлена в Android 5.1.
Я записываю файлы непосредственно во внешнее хранилище файлов и использую MPEG_4 с кодировкой AAC.Я приобретаю Wake Lock, чтобы поворачивать экран, когда пользователь подносит телефон к уху.
Регистратор
public void startRecording(String fileName){
recorder = new MediaRecorder();
recorder.setAudioSource(0); //0,1,5,6,7
recorder.setAudioChannels(1);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setOutputFile(fileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioEncodingBitRate(320000);
recorder.setAudioSamplingRate(44100);
try {
recorder.prepare();
} catch (IOException e) {
Log.e(TAG,"startRecording failed: " + e);
}
recorder.start();
}
public void stopRecording(){
recorder.stop();
recorder.release();
recorder = null;
}
Wake Lock
protected void getWakeLock() {
if (wl == null) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "doWork()");
wl.setReferenceCounted(false);
if (!wl.isHeld()) {
wl.acquire();
Log.e(TAG,"Acquired wake lock!");
}
} else {
if (!wl.isHeld()) {
wl.acquire();
}
}
}
private void releaseWakeLock() {
if (wl != null) {
if (wl.isHeld()) {
Log.e(TAG,"We have a wake lock....Releasing wake lock...");
wl.release();
}
}
}
Есть ли у кого-нибудь какие-либо идеи относительно возможной причинывопрос?