android 录音和播放录音

裴姚石
2023-12-01

             今天来一个简单的录音功能,主要流程就是,录音-保存文件-播放录音。过程主要就是这个比较简单,这里就不啰嗦了,直接上代码,代码里面我已经注释的很清楚了。

public class MainActivity extends ActionBarActivity {

	/**录音*/
	private Button record_Voice_Bt;
	/**停止录音*/
	private Button stoprecord_Voice_Bt;
	/**播放录音*/
	private Button play_Voice_Bt;
	/**停止播放录音*/
	private Button stopplay_Voice_Bt;
	
	/**录音控件*/
	private  MediaRecorder  mediaRecorder = null;
	/**播放录音控件*/
	private  MediaPlayer play = null;
	/**路劲名*/
	private String file;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		
		record_Voice_Bt = (Button) findViewById(R.id.RecordVoiceID);
		play_Voice_Bt = (Button)findViewById(R.id.PlayVoiceID);
		stoprecord_Voice_Bt = (Button) findViewById(R.id.StopRecordVoiceID);
		stopplay_Voice_Bt = (Button) findViewById(R.id.stopPlayVoiceID);
		file = Environment.getExternalStorageDirectory().getAbsolutePath();
		file += "/audiorecor.3gp";
		recordVoic();//录音
		
		stoprecordVoic();//停止录音
		
		PlayVoice();//播放录音
		
		stopPlayVoice();//停止播放
	}

	/**停止播放录音*/
	private void stopPlayVoice() {
		stopplay_Voice_Bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(play != null){
					play.release();//停止播放录音,把Media播放器释放即可
					play = null;
					Toast.makeText(MainActivity.this, "停止播放", 0).show();
				}
			}
		});
	}

	/**停止录音*/
	private void stoprecordVoic() {
		stoprecord_Voice_Bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(mediaRecorder != null){
					mediaRecorder.stop();    //停止录音
					mediaRecorder.reset();   // 在释放资源时,必须要重置一下,不然下一步释放时可能会出错
					mediaRecorder.release(); // 这个是否录音控件的,不然会一直占据资源
					Toast.makeText(MainActivity.this, "停止录音", 0).show();
				}
			}
		});
	}

	/**播放录音*/
	private void PlayVoice() {
		
		play_Voice_Bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				play = new MediaPlayer();
				
				try {
					play.setDataSource(file);//读原录音文件,这里传入路径
					play.prepare();//准备播放录音,这里系统会开始去解析录音文件
					play.start();//开始播放
				}catch (IOException e) {
					stopPlayVoice();
					e.printStackTrace();
				}
			}
		});
	}

	/**开始录音*/
	private void recordVoic() {
		record_Voice_Bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				mediaRecorder = null;
				mediaRecorder = new MediaRecorder();
				//设置录音的编码格式,即数据源的格式,这里设置什么格式主要根据录音的用途来判断
				mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
				//设置录音文件的格式,这里是指文件的后缀名格式,这个设置的3GP
				mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
				//设置录音的解码格式,这个必须在setOutputFile方法前设置,否则无效
				mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
				mediaRecorder.setOutputFile(file);//设置录音文件的输出路径
				try {
					mediaRecorder.prepare();
				} catch (IllegalStateException e) {
					stoprecordVoic();
					Log.e("", "==========录音出错了==============");
					e.printStackTrace();
				} catch (IOException e) {
					stoprecordVoic();
					Log.e("", "==========录音出错了==============");
					e.printStackTrace();
				}
				mediaRecorder.start(); //开始录音
				Toast.makeText(MainActivity.this, "开始录音", 0).show();
			}
		});
	}

}


    主要代码都在这里了,我就不上demo工程了。这只是录音的基础功能,之后再看看有没有时间,再写一个深入一点的分析。这里记得要在配置文件里面加上这两个权限,

     <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission  android:name="android.permission.RECORD_AUDIO"/>

    一个是读SD卡权限,一个是调用录音硬件设备的权限。暂时就这样吧!!!!!有错欢迎指出.........

      工程demo
 类似资料: