Android MediaRecorder для AudioTrack, записи и воспроизведения

Я пытаюсь сделать так, чтобы я мог записывать голос пользователей и воспроизводить его в том же действии, используя MediaRecorder и AudioTrack. Я просто не понимаю, как записать файл в AudioTrack. Я читал документы по обоим и просто не могу понять это. Любая помощь будет оценена по достоинству. Вот мой код до сих пор, он не завершен. Единственные кнопки, которые вам нужно прочитать, — это кнопка записи и кнопка воспроизведения. Спасибо!

private File outputFile = null;
private AudioTrack voice = null;
private MediaRecorder recorder = null;
....
        // Setup recorder...
    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    // Setup record file...
    outputFile = getFileStreamPath("output.amr");
    recorder.setOutputFile(outputFile.getAbsolutePath());
public void onClick(View v){
    switch(v.getId()) {
    case R.id.next_button:
        giveSentence();
        break;
    case R.id.repeat_button:
//          playSentence();
        break;
    case R.id.recordButton:
        if (!recording){
        recordButton2.setBackgroundResource(android.R.drawable.button_onoff_indicator_on);
            recording = true;
            recorder.reset();
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            recorder.setOutputFile(outputFile.getAbsolutePath());
            try {
                recorder.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            recorder.start();
        }
        else if(recording) {
                  recordButton2.setBackgroundResource(android.R.drawable.button_onoff_indicator_off);
            recording = false;
            recorder.stop();
        }
        break;
    case R.id.playbackButton:
        Music.playSentence(this, outputFile);
        break;
    case R.id.slowButton:
        if(!slowedSpeech) {
            slowButton2.setBackgroundResource(android.R.drawable.ic_dialog_alert);
            slowedSpeech = true;
 //             slowspeech();
        }
        else if(slowedSpeech) {
            slowButton2.setBackgroundResource(android.R.drawable.ic_menu_recent_history);
            slowedSpeech = false;
 //             noSlowSpeech();
        }
        break;
    }
}

person datWooWoo    schedule 07.07.2011    source источник
comment
Вы пытались использовать AudioRecord, который позволит вам установить частоту дискретизации , конфигурация канала и формат? Тогда вы будете знать, какие параметры использовать в AudioTrack.   -  person Vanja    schedule 05.08.2011


Ответы (1)


что вы подразумеваете под записью файла на звуковую дорожку? вам не нужно записывать какой-либо файл на звуковую дорожку, вы устанавливаете источник звука, рекордер создаст звуковую дорожку и прочитает данные PCM из источника звука, затем закодирует данные, запишет данные в выходной файл.

person thisEric    schedule 08.07.2011
comment
Я имею в виду, что я пытаюсь записать звук с помощью MediaRecorder, а затем беру этот файл и помещаю его в AudioTrack, чтобы его можно было воспроизвести. - person datWooWoo; 08.07.2011