Моя цель – приостановить запись файла. Я вижу на сайте разработчика Android, но Media Recorder не имеет опции паузы.
Java поддерживает слияние двух аудиофайлов программно, но In android не работает.
Присоединить два файла WAV от Java?
А также я использовал устройства записи аудио устройств по умолчанию, которые доступны на всех устройствах, но в Samsung несколько устройств не восстановили путь записи.
Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent,REQUESTCODE_RECORDING);
Любая помощь для записи голоса с функцией паузы.
http://developer.android.com/reference/android/media/MediaRecorder.html
У MediaRecorder нет методов паузы и возобновления. Вместо этого вам нужно использовать методы остановки и запуска.
Вы можете отсылать мой ответ здесь, если у вас еще есть эта проблема. Для уровня API> = 24 метода паузы / возобновления доступны в классе Android MediaRecorder.
Для уровня API <24
Добавьте зависимость ниже в файле gradle:
compile 'com.googlecode.mp4parser:isoparser:1.0.2'
Решение состоит в том, чтобы остановить рекордер, когда пользователь приостанавливается и возобновляется снова, как уже упоминалось во многих других ответах в stackoverflow. Храните все аудио / видео файлы, сгенерированные в массиве, и используйте метод ниже для объединения всех медиафайлов. Пример берется из библиотеки mp4parser и немного модифицируется по моей потребности.
public static boolean mergeMediaFiles(boolean isAudio, String sourceFiles[], String targetFile) { try { String mediaKey = isAudio ? "soun" : "vide"; List<Movie> listMovies = new ArrayList<>(); for (String filename : sourceFiles) { listMovies.add(MovieCreator.build(filename)); } List<Track> listTracks = new LinkedList<>(); for (Movie movie : listMovies) { for (Track track : movie.getTracks()) { if (track.getHandler().equals(mediaKey)) { listTracks.add(track); } } } Movie outputMovie = new Movie(); if (!listTracks.isEmpty()) { outputMovie.addTrack(new AppendTrack(listTracks.toArray(new Track[listTracks.size()]))); } Container container = new DefaultMp4Builder().build(outputMovie); FileChannel fileChannel = new RandomAccessFile(String.format(targetFile), "rw").getChannel(); container.writeContainer(fileChannel); fileChannel.close(); return true; } catch (IOException e) { Log.e(LOG_TAG, "Error merging media files. exception: "+e.getMessage()); return false; } }
Используйте флаг isAudio как истинный для аудиофайлов и false для видеофайлов.
У меня было такое требование в одном из моих проектов. Мы сделали так, как сделать необработанный файл для сохранения записанных данных в начале записи с использованием AudioRecord
, для каждого резюме мы добавляем данные в тот же файл
как
FileOutputStream fos= new FileOutputStream(filename, true);
Здесь имя файла является именем необработанного файла и добавляет к нему новые данные записи.
И когда пользователь останавливает запись, мы преобразуем весь необработанный файл в .wav (или другие) форматы. Извините, что я не могу опубликовать весь код. Надеюсь, это даст вам направление для работы.
Вы не можете сделать это с помощью Android API, но вы можете сэкономить много файлов mp4 и объединить его с помощью mp4parser : мощная библиотека, написанная на Java. Также см. Мой простой рекордер с «паузой»: https://github.com/lassana/continuous-audiorecorder .