Как записать звук хорошего качества с помощью MediaRecoder в Android? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь записать звук в Android с помощью медиа-рекордер. это работает штрафы для 3gp аудио, но когда я пытаюсь тот же код с форматом aac, это терпит неудачу. (вот мой код для формата aac):

final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.acc";
final MediaRecorder myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
        myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AAC_ADTS);
        myAudioRecorder.setOutputFile(outputFile);
MediaPlayer mediaPlayer = new MediaPlayer();
                    mediaPlayer.setDataSource(outputFile);
                    mediaPlayer.prepare();
                    mediaPlayer.start();

Я добавил разрешения и правильно запускаю эти функции с помощью кнопок. Я написал только основной код здесь, чтобы сделать его простым Мой вопрос:

Как правильно записывать и воспроизводить звук в формате aac?

Каков наилучший формат для записи и воспроизведения звука в Android с помощью медиа-рекордера и медиаплеера и как мне его реализовать? Я пытался использовать 3gp, но он дает низкое качество звука.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Если вы используете объект audioRecord вместо объекта mediaRecorder, у вас больше свободы в настройке записи и кодирования выходных сигналов с микрофона (ов).

Для понимания и реализации AudioRecord требуется больше времени, если вы хотите придерживаться объекта mediaRecorder, тогда я рекомендую использовать AAC_ADTS в качестве аудиокодера и разрешить outputFormat быть THREE_GPP.

в противном случае это может помочь вам кодировать необработанные файлы AAC:

Как создать элементарный поток AAC ADTS с помощью Android MediaCodec

0 голосов
/ 03 июля 2019

решаемые

Я наконец-то нашел правильное рабочее решение для записи звука хорошего качества. Вот несколько модификаций, которые вам нужно сделать для качественной записи звука:

сохранить файл, используя расширение .m4a. final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.m4a"; и сделать

myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setAudioEncodingBitRate(16*44100);
myAudioRecorder.setAudioSamplingRate(44100);

Во многих решениях для работы со стековым потоком будет предложено .setAudioEncodingBiteRate(16), но значение 16 слишком мало и будет бессмысленным.

Источник: @Grant ответ на stackoverflow очень низкое качество звука, записанного на моем droidx с помощью MediaRecorder, почему?

Редактировать : Единственной причиной, по которой я хотел сохранить файл с расширением .aac, было мое предположение, что файлы .aac будут более четкими, но я могу сохранять файлы в хорошем качестве без расширения .aac. нет необходимости идти на это.

...