如何在录制时动态绘制图形?

时间:2015-10-26 10:53:55

标签: android audio audio-recording graph-drawing

我已经成功录制了麦克风的声音,并可以以wav格式绘制录制的声音。我需要的是在录制声音时动态绘制图形(如心跳监测图)。下面是我录制声音的代码

package com.example.hp.audiorecording2;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.IOException;

public class RecordActivity extends Activity {

Button buttonRecord;
Button buttonPlay;
String mFileName;
MediaRecorder mediaRecorder;
private MediaPlayer   mPlayer = null;
private static final String LOG_TAG = "AudioRecordTest";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_record);
    buttonRecord = (Button) findViewById(R.id.buttonRecord);
    buttonPlay = (Button) findViewById(R.id.buttonPlay);

    buttonRecord.setOnClickListener(new View.OnClickListener() {
        boolean mStartRecording = true;

        @Override
        public void onClick(View v) {
            onRecord(mStartRecording);
            if (mStartRecording) {
                buttonRecord.setText("Stop");
            } else {
                buttonRecord.setText("Start");
            }
            mStartRecording = !mStartRecording;

        }
    });
    buttonPlay.setOnClickListener(new View.OnClickListener() {
        boolean mStartPlaying = true;
        @Override
        public void onClick(View v) {
            onPlay(mStartPlaying);
            if (mStartPlaying) {
                buttonPlay.setText("Stop playing");
            } else {
                buttonPlay.setText("Start playing");
            }
            mStartPlaying = !mStartPlaying;
        }
    });


}

private void onRecord(boolean start) {
    if (start) {
        startRecording();
    } else {
        stopRecording();
    }
}

private void onPlay(boolean start) {
    if (start) {
        startPlaying();
    } else {
        stopPlaying();
    }
}

private void startRecording() {
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setOutputFile(mFileName);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try {
        mediaRecorder.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaRecorder.start();
}

private void stopRecording() {
    mediaRecorder.stop();
    mediaRecorder.release();
    mediaRecorder = null;
}

private void startPlaying() {
    mPlayer = new MediaPlayer();
    try {
        mPlayer.setDataSource(mFileName);
        mPlayer.prepare();
        mPlayer.start();
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed");
    }
}

private void stopPlaying() {
    mPlayer.release();
    mPlayer = null;
}


public RecordActivity() {
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
    mFileName += "/audiorecordtest.3gp";
}
}

1 个答案:

答案 0 :(得分:0)

您可以按照link

中的说明使用getMaxAmplitude