录音类MediaRecorder的简单应用-录音频

来源:互联网 发布:部队优化营商环境总结 编辑:程序博客网 时间:2024/04/28 23:23

MediaRecorder类可用类录制音频文件,它直接将音频数据写入到文件里去。而AudioRecord类是直接获取到pcm音频数据.对外界来说,MediaRecorder向外提供音频文件,而AudioRecord向外提供音频数据流,这是主要两者区别之一。下面小结下MediaRecorder的简单应用步骤:
第一步:实例化一个对象:mRecord = new MediaRecorder();
第二步:设置音频来源:mRecord.setAudioResource(*);
第三步:设置输出音频文件的格式:mRecord.setOutFormat(*);
第四步:设置输出的音频编码方式、采样率、编码位率:一般设置编码方式即可,其他设置为默认值mRecord.setEncorder(*);
第五步:设置音频写入的文件:mRecord.setOutFile(*);
第六步:准备:mRecord.prepare();
第七步:开始录音:mRecord.start();
第八步:停止录音:mRecord.stop(),然后再记得释放资源mRecord.release();

注:记得添加权限:
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

具体代码:
public class MyAudioRecordActivity extends Activity{/** Called when the activity is first created. */MediaRecorder mRecord;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);initWidget();}private void initWidget(){// TODO Auto-generated method stubButton play = (Button) findViewById(R.id.start);play.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubif (mRecord == null){boolean result = startRecord();if(!result){stopRecord();}}}});Button stop = (Button) findViewById(R.id.stop);stop.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubstopRecord();}});}private void stopRecord(){if (mRecord != null){mRecord.stop();mRecord.release();mRecord = null;}}private boolean startRecord(){/*实例化对象*/mRecord = new MediaRecorder();/*设置音频输入源*/mRecord.setAudioSource(MediaRecorder.AudioSource.MIC);/*设置音频输出格式*/mRecord.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);/*设置音频编码方式*/mRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);/*设置音频写入的文件*/File file = createFile(".arm");mRecord.setOutputFile(file.getAbsolutePath());/*准备录音频*/try{mRecord.prepare();}catch (IllegalStateException e){// TODO Auto-generated catch blocke.printStackTrace();return false;}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();return false;}/*开始录像*/mRecord.start();return true;}/*创建指定后缀名的文件*/private File createFile(String suffix){if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return null; }File sdcardDir = Environment.getExternalStorageDirectory();Time t = new Time();t.setToNow();String filename = null;try{filename = sdcardDir.getCanonicalPath()+ String.format("/AudioTest%04d%02d%02d%02d%02d%02d"+ suffix, t.year, t.month + 1, t.monthDay, t.hour,t.minute, t.second);}catch (IOException e){e.printStackTrace();return null;}File file = new File(filename);if (!file.exists()){try{file.createNewFile();}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}return file;}/*创建底部退出菜单*/public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu);MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit");item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){System.exit(0);return true;}});return true;}}


demo下载:

http://download.csdn.net/detail/sunnyfans/4939776