Android: запись звука с MediaPlayer на эмуляторе - PullRequest
3 голосов
/ 03 января 2012

Я пытаюсь записать звук с микрофона на эмуляторе Android с помощью этого кода:

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(Environment.getExternalStorageDirectory() + "/test/test.3gp");
try {
    recorder.prepare();
}
catch (IOException io) {
    Log.v(LOG_TAG, "Could not prepare the audio " + io.getMessage());
}
recorder.start();

Для остановки звука это код:

recorder.stop();
recorder.reset();
recorder.release();

ЗаписьПроцесс работает нормально, но результирующий звук искажен.Когда я записываю аудио в течение 60 секунд и воспроизводлю его, его продолжительность отображается как 120 секунд.Измерение не точное, но это только для того, чтобы дать вам представление.

Только эмулятор AMR_NB работает на моем эмуляторе.Я пробовал разные форматы вывода, но результат всегда одинаков.

Это ограничение эмулятора или я здесь что-то не так делаю?

Редактировать 1: Я тоже пробовал класс AudioRecord, и в результате получается тот же звук перетаскивания.1014 * Спасибо.

1 Ответ

1 голос
/ 22 апреля 2012

Я работал над тем же и нашел решение, попробуйте использовать следующий код:

    private void startRecording()
    {

        this.recorder = new MediaRecorder();
        this.recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        this.recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        this.recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        MediaRecorder.getAudioSourceMax();
        this.recorder.setOutputFile(this.getFilename());
        this.recorder.setOnErrorListener(this.errorListener);
        this.recorder.setOnInfoListener(this.infoListener);

        try
        {
            this.recorder.prepare();
            this.recorder.start();
        } catch (final IllegalStateException e)
        {
            e.printStackTrace();
        } catch (final IOException e)
        {
            e.printStackTrace();
        }
    }

Это работает идеально.Надеюсь, это поможет вам:)

...