2015-10-26 5 views
1

J'ai enregistré avec succès le son du microphone et peut dessiner un son enregistré sous forme wav. Ce dont j'ai besoin, c'est de dessiner un graphique dynamiquement quand j'enregistre le son (comme le graphe de surveillance du rythme cardiaque). Voici mon code pour enregistrer sonComment dessiner un graphique dynamiquement pendant l'enregistrement?

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

Répondre

0

vous pouvez utiliser getMaxAmplitude comme expliqué dans link