通过MediaRecorder和MediaPlayer实现声音的录制和播放,代码比较简单,直接贴代码。xml文件里面只有四个按钮就不贴了。
UI
代码:
VoiceActivity.class
package com.zy.ione; import com.zy.media.UPlayer; import com.zy.media.URecorder; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; public class VoiceActivity extends Activity { private String path = null; private URecorder recorder; private UPlayer player; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_voice); path = Environment.getExternalStorageDirectory().getAbsolutePath(); path += "/ione.pcm"; recorder = new URecorder(path); player = new UPlayer(path); //开始录音 findViewById(R.id.ione_record_start_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(VoiceActivity.this, "start record", Toast.LENGTH_SHORT).show(); recorder.start(); } }); //停止录音 findViewById(R.id.ione_record_stop_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(VoiceActivity.this, "stop record", Toast.LENGTH_SHORT).show(); recorder.stop(); } }); //开始播放 findViewById(R.id.ione_play_start_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(VoiceActivity.this, "start play", Toast.LENGTH_SHORT).show(); player.start(); } }); //停止播放 findViewById(R.id.ione_play_stop_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(VoiceActivity.this, "stop play", Toast.LENGTH_SHORT).show(); player.stop(); } }); } }操作接口
package com.zy.media; public interface IVoiceManager { public boolean start(); public boolean stop(); }
录音
package com.zy.media; import java.io.IOException; import android.media.MediaRecorder; import android.util.Log; public class URecorder implements IVoiceManager{ private final String TAG = URecorder.class.getName(); private String path; private MediaRecorder mRecorder; public URecorder(String path){ this.path = path; mRecorder = new MediaRecorder(); } /* * 开始录音 * @return boolean */ @Override public boolean start() { //设置音源为Micphone mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置封装格式 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile(path); //设置编码格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { mRecorder.prepare(); } catch (IOException e) { Log.e(TAG, "prepare() failed"); } //录音 mRecorder.start(); return false; } /* * 停止录音 * @return boolean */ @Override public boolean stop() { mRecorder.stop(); mRecorder.release(); mRecorder = null; return false; } }
播放
package com.zy.media; import android.media.MediaPlayer; import android.util.Log; public class UPlayer implements IVoiceManager { private final String TAG = UPlayer.class.getName(); private String path; private MediaPlayer mPlayer; public UPlayer(String path){ this.path = path; mPlayer = new MediaPlayer(); } @Override public boolean start() { try { //设置要播放的文件 mPlayer.setDataSource(path); mPlayer.prepare(); //播放 mPlayer.start(); }catch(Exception e){ Log.e(TAG, "prepare() failed"); } return false; } @Override public boolean stop() { mPlayer.stop(); mPlayer.release(); mPlayer = null; return false; } }