我们的手机上都有麦克,录音功能一般都需要依赖这个硬件。android已经封装了MediaRecorder类供我们使用。我们的录音功能主要使用这个类来实现。
录音过程比较简单,大概分为以下几个步骤:
- 创建MediaRecorder对象
- 设置声音来源,主要调用该对象的SetAudioSource(AudioSource.MIC)方法,告诉MediaRecorder录制来自麦克风的声音
- 设置录制音频文件的格式,如amr、aac
- 设置录制声音的编码格式,编码位率,采样率等,一般来说音质越好,声音文件会相对越大一些。
- 设置保存音频文件的位置
然后我们就可以开始录制了,需要注意一点就是3和4步的顺序不可以颠倒。必需先设置音频文件的格式,才可以设置采样率。否则就会报IlegalStateException异常。
录音是需要授予录音权限的,记得在Manifest文件里加入权限设置。
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
程序界面比较简单,一个录制按钮,一个结束按钮。下面开始我们录音功能的实现。
import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener{ Button btnStart; Button btnStop; //音频文件 File soundFile; MediaRecorder mediaRecorder; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化按钮 btnStart = (Button)findViewById(R.id.btnStart); btnStop = (Button)findViewById(R.id.btnStop); //为两个按钮绑定单击 btnStart.setOnClickListener(this); btnStop.setOnClickListener(this); } @Override protected void onDestroy() { // TODO Auto-generated method stub if(soundFile != null && soundFile.exists()) { //停止录音 mediaRecorder.stop(); //释放资源 mediaRecorder.release(); mediaRecorder = null; } super.onDestroy(); } /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { //开始录音 case R.id.btnStart: if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡", Toast.LENGTH_SHORT).show(); return; } try { Log.d("lb", Environment.getExternalStorageDirectory().getCanonicalFile().toString()); //直接存储到了sdcard中 soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/sound1.amr"); mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录制的声音的来源 // recorder.setVideoSource(video_source); //录制视频 //录制的声音的输出格式(必须在设置声音的编码格式之前设置) mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置声音的编码格式 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //设置声音的保存位置 mediaRecorder.setOutputFile(soundFile.getAbsolutePath()); mediaRecorder.prepare(); //**准备录音** mediaRecorder.start(); //**开始录音** } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; case R.id.btnStop: if(soundFile != null && soundFile.exists()){ mediaRecorder.stop(); //**停止录音** mediaRecorder.release(); //**释放资源** mediaRecorder = null; } break; default: break; } } }
试听一下,还不错哦。