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

标签 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";
}
}

最佳答案

您可以按照link中的说明使用getMaxAmplitude

关于android - 录制时如何动态绘制图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343945/

相关文章:

javascript - iOS Safari javascript 录音

c# - SignalR Core在Android客户端上断开连接

android - Phonegap构建在phonegap应用程序开发中的作用是什么

audio - 如何更改SoX的录制音频设备?

Android MediaRecorder 在某些设备上不工作

iphone - 将音频路由到听筒?

android - Android Studio 2.3 rc1应用程序崩溃并清空日志

android - ListView 中的居中文本项

matlab - 在Matlab中读取和播放PCM音频

c - 最好的 c 音频库 linux