当前位置: 代码迷 >> Android >> 录制时如何动态绘制图形?
  详细解决方案

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

热度:41   发布时间:2023-08-04 12:21:31.0

我已经成功地录制了来自麦克风的声音,并且可以以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";
}
}

您可以按照说明使用getMaxAmplitude

  相关解决方案