Android 錄音(MediaRecorder)與播放(MediaPlayer)
阿新 • • 發佈:2019-02-16
通過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; } }