Запись аудио в формате файла AMR

Я хочу записать звук в формате файла AMR. В настоящее время я использую следующий код для записи звука:

outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "Sample.3gp";

myRecorder = new MediaRecorder();
myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myRecorder.setOutputFile(outputFile);

Но он генерирует файл .3gp. Как я могу получить файл .amr? Изменение выходного файла на Sample.amr работает. Но так ли это правильно? Пожалуйста, помогите

ИЗМЕНИТЬ ЭТО РЕШЕНО СЕЙЧАС

Это была моя глупая ошибка: я использовал myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);

Так должно быть-

myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

Итак, приведенный ниже код работает для записи в формате AMR:

outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "Sample.amr";

    myRecorder = new MediaRecorder();
    myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
    myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    myRecorder.setOutputFile(outputFile);

person AnujDeo    schedule 31.10.2014    source источник


Ответы (1)


См. документ Android OutputFormat. Попробуйте выполнить следующий код:

    Log.i(TAG,"Record start");
    String outputFile;
    MediaRecorder myRecorder;
    outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "Sample.amr";
    Log.i(TAG,"file name: " + outputFile);

    myRecorder = new MediaRecorder();
    myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
    myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    myRecorder.setOutputFile(outputFile);

    try {
        myRecorder.prepare();
        myRecorder.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        Thread.sleep(30*1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    myRecorder.stop();
    myRecorder.release();
    Log.i(TAG,"Record finished");

Ключевые моменты:

  1. В имени файла используйте суффикс «.amr». Выходной формат использует параметр OutputFormat.AMR_NB.
  2. Кодировщик использует параметр AudioEncoder.AMR_NB.
person lucky1928    schedule 31.10.2014
comment
Спасибо. Но это я уже пробовал. Он принудительно закрывает приложение, когда мы начинаем запись с ошибкой: Start failed -22 java.lang.RuntimeException: Start Failed - person AnujDeo; 01.11.2014
comment
Вы сначала вызвали подготовку, а затем вызвали запуск. полезно, если вы можете поделиться всем файлом. - person lucky1928; 01.11.2014
comment
Проверьте мою отредактированную версию, она работает на устройстве moto g. какое у тебя устройство? возможно проблема с устройством. - person lucky1928; 01.11.2014
comment
Да, я звоню сначала подготовиться, а затем начать. У меня рутирован Samsung Galaxy Ace (ОС Cyanogen mod 7 - 2.3.7). Это потому, что он укоренен? Я проверю на других устройствах и вернусь к вам. Спасибо. - person AnujDeo; 03.11.2014
comment
Привет @Beetlej Спасибо! Сейчас это работает. Это была моя глупая ошибка. Я использовал myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); - person AnujDeo; 14.11.2014
comment
Теперь он работает отлично. Только одно - громкость записанного файла очень низкая. Любая работа для этого? - person AnujDeo; 14.11.2014