android - Android MediaRecorder到AudioTrack,录制和播放

标签 android audio playback recording mediarecorder

我试图将其录制到可以记录用户语音并使用MediaRecorder和AudioTrack在同一 Activity 中播放的位置。我只是不明白如何将文件写入AudioTrack。我已经阅读了两个文档,根本无法弄清楚。任何帮助,将不胜感激。到目前为止,这是我的代码,尚未完成。您需要读取的唯一按钮是recordButton和playbackButton。谢谢!

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;
    }
}

最佳答案

将文件写入音轨是什么意思?您不需要将任何文件写入音轨,则设置音频源,录音机将创建音轨并从音频源读取pcm数据,然后对数据进行编码,然后将数据写入输出文件。

关于android - Android MediaRecorder到AudioTrack,录制和播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616619/

相关文章:

Android 数据绑定(bind)在自定义 View 中注入(inject) ViewModel

android - 如果同时使用 iOS,Google Play Services 8.4.0 会破坏适用于 Android 的 Google Cloud Messaging

android - 在 horizo​​ntalscrollview 上方添加文本 (Android)

ios - Swift:尝试播放音频文件时出现未知错误

actionscript-3 - 如何从AS3中的麦克风字节数组播放声音?

javascript - 使用 JavaScript 动态控制 HTML5 音频

android - 在xml编辑器中切换字符串资源的引用和值预览

javascript - 控制mp3流的缓冲区

java - Android:寻找音频输入的基本频率

python - 使用 Python 流式传输音频(没有 GStreamer)